fs/www/class/fall2002/cmsc311-0101/Exam/0042775000077300017440000000000007576743276015345 5ustar cmsc311fs/www/class/fall2002/cmsc311-0101/Exam/index.html0100664000077300017440000000424107561437712017323 0ustar cmsc311 CMSC 311 - Main Page
computer organization
c m s c 311  
s p r i n g   2 0 0 2  

Final Topics

Exam Schedule

The midterms for the course are scheduled on the same days as Dr. Hugue's exams. They will be held in class, and last for the class period. Note: there is only a three week period between the first and second exams.

Web Accessibility

fs/www/class/fall2002/cmsc311-0101/Exam/exam_soln.html0100664000077300017440000000325207576743276020215 0ustar cmsc311 CMSC 311: Computer Organization
computer organization
c m s c 311  
s p r i n g   2 0 0 2  

Exam Solutions

Topic
Postscript
Posted
Exam 1 Solutions [Postscript] [Solutions] November 4
Exam 2 Solutions [Solutions] December 14
Summer 2002 Final NOT POSTED YET  

Web Accessibility

fs/www/class/fall2002/cmsc311-0101/Exam/exam1.fall02.ps0100664000077300017440000044550707561440355017777 0ustar cmsc311%!PS-Adobe-2.0 %%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software %%Title: ex1.revised.dvi %%Pages: 20 %%PageOrder: Ascend %%BoundingBox: 0 0 612 792 %%DocumentFonts: Utopia-Bold Utopia-Regular Utopia-Italic %%EndComments %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips ex1.revised.dvi %DVIPSParameters: dpi=600, compressed %DVIPSSource: TeX output 2002.11.04:0441 %%BeginProcSet: texc.pro %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3 1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{ rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B /chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{ /cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{ A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse} ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17 {2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{ 1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop} forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ /Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) (LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end %%EndProcSet %%BeginProcSet: 8r.enc % @@psencodingfile@{ % author = "S. Rahtz, P. MacKay, Alan Jeffrey, B. Horn, K. Berry", % version = "0.6", % date = "1 July 1998", % filename = "8r.enc", % email = "tex-fonts@@tug.org", % docstring = "Encoding for TrueType or Type 1 fonts % to be used with TeX." % @} % % Idea is to have all the characters normally included in Type 1 fonts % available for typesetting. This is effectively the characters in Adobe % Standard Encoding + ISO Latin 1 + extra characters from Lucida. % % Character code assignments were made as follows: % % (1) the Windows ANSI characters are almost all in their Windows ANSI % positions, because some Windows users cannot easily reencode the % fonts, and it makes no difference on other systems. The only Windows % ANSI characters not available are those that make no sense for % typesetting -- rubout (127 decimal), nobreakspace (160), softhyphen % (173). quotesingle and grave are moved just because it's such an % irritation not having them in TeX positions. % % (2) Remaining characters are assigned arbitrarily to the lower part % of the range, avoiding 0, 10 and 13 in case we meet dumb software. % % (3) Y&Y Lucida Bright includes some extra text characters; in the % hopes that other PostScript fonts, perhaps created for public % consumption, will include them, they are included starting at 0x12. % % (4) Remaining positions left undefined are for use in (hopefully) % upward-compatible revisions, if someday more characters are generally % available. % % (5) hyphen appears twice for compatibility with both % ASCII and Windows. % /TeXBase1Encoding [ % 0x00 (encoded characters from Adobe Standard not in Windows 3.1) /.notdef /dotaccent /fi /fl /fraction /hungarumlaut /Lslash /lslash /ogonek /ring /.notdef /breve /minus /.notdef % These are the only two remaining unencoded characters, so may as % well include them. /Zcaron /zcaron % 0x10 /caron /dotlessi % (unusual TeX characters available in, e.g., Lucida Bright) /dotlessj /ff /ffi /ffl /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef % very contentious; it's so painful not having quoteleft and quoteright % at 96 and 145 that we move the things normally found there to here. /grave /quotesingle % 0x20 (ASCII begins) /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash % 0x30 /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question % 0x40 /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O % 0x50 /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore % 0x60 /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o % 0x70 /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef % rubout; ASCII ends % 0x80 /.notdef /.notdef /quotesinglbase /florin /quotedblbase /ellipsis /dagger /daggerdbl /circumflex /perthousand /Scaron /guilsinglleft /OE /.notdef /.notdef /.notdef % 0x90 /.notdef /.notdef /.notdef /quotedblleft /quotedblright /bullet /endash /emdash /tilde /trademark /scaron /guilsinglright /oe /.notdef /.notdef /Ydieresis % 0xA0 /.notdef % nobreakspace /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen % Y&Y (also at 45); Windows' softhyphen /registered /macron % 0xD0 /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown % 0xC0 /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis % 0xD0 /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls % 0xE0 /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis % 0xF0 /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis ] def %%EndProcSet %%BeginProcSet: texps.pro %! TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]/Metrics exch def dict begin Encoding{exch dup type/integertype ne{pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def} ifelse}forall Metrics/Metrics currentdict end def[2 index currentdict end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{ dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[exch{dup CharStrings exch known not{pop/.notdef/Encoding true def} if}forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def} def end %%EndProcSet %%BeginProcSet: special.pro %! TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N /vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N /rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N /@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{ /hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B /@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{ /urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known {userdict/md get type/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup length 20 add dict copy def}if end md begin /letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{ itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack} if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{ noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{ Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale }if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState save N userdict maxlength dict begin/magscale true def normalscale currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts /psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR/showpage{}N/erasepage{}N/copypage{}N/p 3 def @MacSetUp}N/doclip{ psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict begin/SpecialSave save N gsave normalscale currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR }{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N /@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X /yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end %%EndProcSet %%BeginFont: Utopia-Bold %!PS-AdobeFont-1.0: Utopia-Bold 001.001 %%CreationDate: Wed Oct 2 18:24:56 1991 %%VMusage: 33079 39971 %% Utopia is a registered trademark of Adobe Systems Incorporated. 11 dict begin /FontInfo 10 dict dup begin /version (001.001) readonly def /Notice (Copyright (c) 1989, 1991 Adobe Systems Incorporated. All Rights Reserved.Utopia is a registered trademark of Adobe Systems Incorporated.) readonly def /FullName (Utopia Bold) readonly def /FamilyName (Utopia) readonly def /Weight (Bold) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /Utopia-Bold def /Encoding StandardEncoding def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /UniqueXX 36543 def /FontBBox{-155 -250 1249 916}readonly def currentdict end currentfile eexec f9cd86fd4821715265f16a614e3770ef80561e77ba6ecbb4ef4232445eef2839 94e93e3c8c9b09c09d71542241821e07888ceb54e8cacc8a45802f50c0afeeca 5e3d9114c1860bcb2ba5fd2a879a0d79953e30c90d8347513f4ca5f05b2e231b 4973bd1e9db66a39d846a8b3d9e48da72e2de8743ba2e104893167c235719245 87b43ed3b6552cd85e4bbdeb9f46bd813298d531c74be81995a52ceaad4112c7 f65773b088bffbc9874f615371c5e7b50ae99d5b6acf9c80d87057bf3a424377 f4284b7232096b6ea623dacd1c925ce09cfa6515f675aacf815c38e984b4ba40 0d409bb62cd4ebac75201c8e782e68fd73e8622c46b696b1ba37ca9621400041 d95b948a6bbc089fe6b230b39bd358228af9b3e68418166a9adc4e7665341088 c47c074aa4b21b0949fef9929e1a32ffddd2d02145cdb256863cf6067d27ed9a f0aba85b1e0cfcbab7e74880e9693b5626ad31e6b5c2d208087d86c116513212 710c9d6ca50e1503f8d4c2863fa378f8184189af0cf109f4affe7cb74563d513 2104fb9dc6f3f5992e075633a0baebda8ebe9a07c3ec4b25fef015d9915a26b1 d401a6722015090672714181580350560caf79bccd6040c0c1651d917c73107c 2d46aad5d4a370b55e896ce1eed127b6f0aabaf7c4ca62e89003032abb2c95ba 58c4a0eb0bb1a59a439a6a0c2082e50725b9e8139324af06ff03b4269a697342 8fab0c1fabd320f1452d9c435e48037eb8cf6df4233cd9c05691604146cc813f 7ea131f21e9863b7bd1b087a583af14675b9bd31fd364d5dbddbc9b533a6ac38 c4bdeb28a1ae3d2b374da72405acf67b1b3a83d80726301b3677c067c748d857 ae1da4f723d4365647de10f90e96dd7e9ab9ef5c7e6866a13b807fd3f78136d5 72950a10bb0165e61f12c60a813c7e35eeb9a0500725dd912ca2deebb238538e 790af851b14643f40e5eea13660e57b5c407735079a292a7c162dd11d0a3d342 67290f1c9261fa5de6b92ca1e7daeb7cb970c766b3e0396ec0ce55dffbef0bdc b437fbb4d63634b9abcf5844e76f9313ab2182e1fb3c47a705a1d97b79e93dbc 5e48ac19b45f9be4b9225e5a7e1d3679dd21001eca3c08d6febd35fa5453290e 1269c1d195e45338c10aa60fb8ab9e5a5aaf08c82e737f082bb6216d7cc1d5d8 8906c8b05c4432d04561377438447eb5fade652af84c1ced99551365cf9e6f99 03d1593de0e450003fb0d5b5588330d6527fdd0c8193fc0cd2293012310a425e 0ea0f8b901b991648ebbc894cfb7d95da6d35fb7c947e887bd3b6599e673b921 c96f2a033e30b341a14066076ff0abd5fe77f393b548a15ea2185f99a3545b01 dada854fce1ddd3448a9aa42ba260a4f85a0d1bdcf08b3de2ff8b6411adff446 4a2929193ade35f4e26006cfdc45929250bb76ef007043d739d798a4973f350f 52fa1690423381539e3a4cc458600fed91fa8e16b5ae0aca710dbf318d16e3d9 16a082a093b59f35ff92a1b235d5621e87ab471310ca26a9a30c2658e23e0f19 43110f9b24e2c8f1d05824c69aa9890c3b0af143da3ff2d3eeb301f7324f2f16 4e47a05f72acc15acea8a91b9d085a7de2e7e45493f53f32b22d365aca7ea6e0 70c6ad4feda1cde417b48fe4a864ac9af989f30632a9cff5545573d9c7d16016 d450f21f22a028d4e5d1d50a0834adb4c7cf0424f686a3678ddcddcb30d96a4e 45b982881b7173c1a3ff8cb839e56c10a3055f1626d8d5662a85edb80ec110ad 8eeadcfe212e10c139c86094ef0c3fd239cee5c9ea9727cfb94e671fedeeaed5 ead00e015f8783a4adfa28b7b2d8982e7c6fcceb028a18bcbb7f83b44ad4a898 c0bcc2aae1f109ea4ab0de19c4163d7c81e9de2fc6d003a29e2d8c83fb852a2f 2adb57a70ba5356470bdee40c3fd1612bd651f77a2a4dfb7e62bfd224eb2e1a9 978bf52b974d81e7d4f6b661885a88d8892c66182d8cfd1950c290d1485a78b5 59f7e546cc648d521d310ea176ab0bf669b60a915837a3b800c5b86b1295193b 161de7a268c3b8a12272e964b88b94cadc0ca8a94781347a8623dd1e4a481a60 2cfa2f764009699d69f4e8fdcaa46c4238b89bec4eb5eb490f15e6be942af742 1a8f2f0f873f5e5e49af9c33992e878dbd5e0d04cb1d086b719226f5836d52de 897147c588ec54bee42e887a2c94a864fe997b82d0045a92c35a7b157a379903 9adf336e3cb280d18f70784afceca4946dfef7f6c2fab3fd9eb4612fb0a6b3fd 17f24aea9bfa21f1cb8a5f93239d7489a183f6f4ab30bb54dda79888b30bd658 116c1efa020d27dc30df7a00265705414017911ee7809a135150a3db3333b694 b49464453dcf18a7eb8712f0bb4c0e7f6988b5a1f4b579b04e985830862df10b 47174a9e28b55bc33045a02e47e0a4c06393714a03bb1636273f4b887792725f 4c4c0ffc26eb191b843ec59c447c35dfd50aa503791d26f10071ceb883abeb37 71b49c6e4fad3ff05a52f7503c1d76f92debf092f358dfdd1f0895f9173d9802 17dc23bbceece6e05468ed1f3f6dbb0f1ee8041a08ab3702629088a4b7e47da1 c3184e7ed3893daf356ad740f6aecda78fe389a11a25c2aea605af5fd0ab46a9 87b00f97b407b6c0702a2ad53bceb4b2a39f3a46ca0464bde9f566478c522e1a 41334db9d41ebab5fcc8d5919770ee894e16e12edc2a15a74776e7fb8badda2d 7a3f1e6d89add8bb1afc6f777fbebcded31c883dd37df4aa4f83d3e585a99fb3 283d6ced2f10c9789a58806ea91a8c2e6a5074e001c1101bb2e906a2882f6ef8 428e27db4ac97fc7959ee4a366c8469d14daa10973191e14c3d49f28ec89d6c8 c461fc00709354a0f75de12403a443514b6d95372d238b41443824816c70cccf b7c28425a64fbc066840dd30685980607bbb1e94ee6c5871d609d12a2f6319b8 72b6741ddfc31e72e7c647fbf4a18b49b7048164afdbdcb01addcc618385e6b9 92ee423506e9627fb6a7a4b302e7b4c69ca93da517bb915b3b1eddcb64a6018e 5eb59e52eaf76bddf458382bc8fc74c77c98ed17d64f6a342e59d3d47596e196 16b3d5891501ea48b6c01253f7c1da53d799b833fa120ae35420d3961410f4ed 4705ed79831567279367b3729791208b3c8286ab6d7e3a056ab3416fb3fc681d 8b0e346b139a70904541dbdf9bd372c4da5d47cc2e056c1840b4e3b310d92a33 046ef7206d3f2ab07da8ee64d09adde5d6d4e2fa03bbef4ad5da84ad373e7251 c6dcef9b7994aa043b3aa3aa4fe4decff9dd554035e4d864085e186265c83aaf eca6c0991a5cdc8c37149e935ab2cb026711fa6d4b603a47f2637b12e654c087 a9ec00da104d070b704b0b0889d0f7b4a2a760d8b32e56b4ee722adcfaa2e4aa 45b2d3f4cf68f5e93a0d8a5d72002c37735ff11f59bd544b919f6385588da089 6129d2f7220c2ff4bbdb2f7c41b87f1bb509365fadf1644ae90d6f12b4bd2b88 579e1fcc2b679532bd0d339f6d451a540d8d907617e76c7130a0cffd52d50f66 13a71cf23a8535f1bba0b04a25cff862e8552ce836df43fd0527fe7f349aa51f 35a1c6fd1ca5df0dbb0edd2a5517b57d800af844b9d58c0f5f9d65b911b1d31e 97bec44d8ad51cb98f437571c5dcda8a184bab9a08709139bbc51155c338510e 80b406157e2873267b7529d1cbb370449ea45b1657fd6f3a111ff38f68df5bf8 15473aeb208d3317805a9a69126f9c5d6f88c224bdd8e50942287e5947c3d690 e67beacf1fceb6ed368893dd7cdbee3032ed5175e3fd274604be6103ff17c1ae b92fde665b98210ac54ea23bd4782e0be98afb6a39fd39dd195f15d8038442a0 2296e0bbb1389c9a38c5cac3d47b1eedab94a10ba10ade6d7127edafc2bc9da8 30feae65c30ae282e1d1db57d56b39835b0eab094b9e0719ba4e14685acd8c42 6dcde122ce4f827ec70a4610e7381a65a8012b69ac5df70057a0261eb63108df 289a0551a2daec616947e60db1aaebb9ee1a6725c1b82f00cd0fe23d7433c7d8 84b8d528bec8520bfb068343d0e4a14cef0510e27b5d07b97ae31adee5a039cd aa8dcc8f262c4b478c97f5d3229127995a341576e5e6f9ecdd8a1cf02845807c c2abe37872ff3e7261cf360fafa311a54553bcc0302216a9d0cec5c9434c0c81 026691f4741537610b95bca4cf8479fe52caabeafb0a7b4f9e9b7e30ff8b5d14 ca496b49a2e46d881f77d11a3816c292ebd18ee50cc5c76975df41067b2f6018 254327452822cbe543f70d768e2553e19e69a840052cb1895883799ed2eb7e7f c2ee7bc2eadebede72dca24d3177f105a504f7fab4e72be2c64fac20ef23d946 9459319c3734b81c20e5aff043672b580ac3de5dd5c53a0628c7bc23ea348664 444637cdcd838858646b8f928c89ee93f38be0e9fdad4ccf556395fc954a5f63 b9459cad1da385c9dfd480060648945f45f4e490e5107197838d9d4bc0a69fd5 7ff840e80064f51c6f0d28e4477ba09f962cea1614a4220cbad5a21c81b7ed40 78aa94b5cd12073149307e8181dba96007fff86abd2530630400c5a88037db8a cf8c93c25bd283794767b8408e2cf661156f2ede6c91457e9f3c13cb018fb0f6 47eefdb59961e0efef808b619b7acfabb5f1066213bbc9c45fc77bfd275f67ef 29c1b1346cffac0cad1b009448b516d587fe44c32d585a488fcc17214d33fa2c d916d3c86c4803f8e8051c6e0c1a880b1b9e30c71698801e88d9c996e3fc25af b51a1b13f514b2f5d048baeb86e4608f095efbe7e0f56a29d28a7e2f2bfb0be1 46ce099b242bc67b68dd30d3c5cfe395b58f9451f251eaabde38510503d20ee8 68cf806f50b29ac0df93e5e28f0ba6976f13cf8bfa9c945787ecee9888549f75 584a7ac42b75869d5926f0ca97d0db8f48760cf6893b49e2f76bd8a62ce3e0f4 255ab05136b45dc2a7cb36565e5b516ffb69aeeda6573bb9c8f058d8e2172806 b8ea1fee53852c25cfb9fa12f9c7fd578990bdb1ee40173aa1d082e7a98a2857 a53405770cc1440c6c0d55fd422784f12ce1f0f940aba75aa9eba24ea852637e a36198ddaca0a7edd85895b4319d47adc894d8756f89660e4642ed8032130175 d0e59546d04eeeaa14dd23c9b8d4b1f7282eeed55a8817affd29513d9c354948 243ab29da8711f6c475ab50b0f606551eac0da86383fc5ca33cae1bb17cce16d 4a2f7945fd2b5eb77919d09556aa4e202a0dbd8bf38c50ccab6668aeff57fe1f 4afd1f3c57aa392078927ed6dd41e77ff69dbe7c905652cc67946caf6a8d78e7 b7d9b879282d59e85961840d577a4f8a0b23d76072b5e9ce8cae9dafe0f69f29 187b35e994a3f971d2bfea825e810dcdaba251ce02782d33417263385344bfcb 8b1bdab326a74a1356f65205dc557f4e7fc1c86a3a52b79bddbf3b8b77447244 2e7467daa1c3f8d5518ed96ec57e734a10eafd8bc837f969588aa8f05c9082b4 0350fb0e854f0f18ecc78281c30d4303a4f4208cfdc0042c01296851740896a6 b114ad0ec93784b7c3957186c2b2e6f400462a48a2b14990bf1390f0da1129c2 586389efc51d1603ea78f85e7fe14abcb6eeee90c939a9173874f1f02751bd55 927435904eeaf166b714778347fc89839e65910693a324d5bc9497d8c960795b ad4f4352387ed7bc6658de590a1476df6ab35b4445cb9c354e3cb3a65a729848 311dae7ac5c82b0cc060f721e6e824feb3f4437b6b3622e86bfc6d56f9a3b95c ed50854dfd65eb4753d7d4194dec4cdbc73bfb161fe6642be83bf73375f7d3c6 f314690497cd18d97d5ed7625c88660a2c7065bbcda12447ec3f2fab3799ac27 5b0c72531080f47fc1bf0df74cf0c04199f22455e66de158daee7d239604b5d2 838943686140155e09e9dc9aad397f4730bce32418952d0175930c5a49437a51 7957e89bd2150baea08ddbc5914d37dbb9435c21886e058a2dcc680a87dc3e9e ef728f26cd6001a86cca0f882535b2ca7e9e083f4b62bafeda45b98170a0a223 e2ec90398a175b66928e889fe0e2a9b93b040d363af92373923bc94d1834a20f fb358bfbbf5c55412b8689cef4bfa4e9e8a46db48c48f7a58744991d5bf46378 23567067debe18a03a8d49080fd1683a4e81adcdbfd80a23449c2c03f196a98f b7e1369c7f008665fdbc658caee1e1c0a68fa2e98cdc83da4810373c3815b527 c264b44d2df0bdb18767f3204d597d0aa23c06502234275a10640c7de47e890f 9ecc406f167148e2f6e8f353fdc45035cbaa256a02760a42ee9d18f3fe1bcd78 99cd1e58e40c38cc12b0ada37f7092e8fb3f348a849471c1ef0d438e1c15460a c76f3016b2d1b85b20838fff669c5c2a301a0f34886020671763a89b4e985a33 7e108d9e224ec5f2f5acd988c8b1022b151affdbbaafcfd1fdc11e8f117d5da7 cdaf291fcb541ad755c0893372cacd74301c485cb6b8f27a8b2748c178e36ef9 7f030a22037db5b95c0db3b455b2583d5847b3312459eb726a4036f80a0495aa a127660157edf1293db42600f55f9abfb70e9c3334b60527372cab86812d0ab2 73eae0e4c162e5d76b71cdf03204952b271efbe1cf8dab2132c6f7a20dfa9b98 f52f7b0b29dbf38d1484a5caa644f38769ec6a0090b10f53676dc2f6fd14985a 6185abd41cdd00b970c13c16a8ef61403a7f129ea9ed12193c8789a9669c3be9 6f21729e3655a4daf6679c4318f98f4dd5f5c12934dc5c696eef03dea5d79632 da3946d7acf9917794adfaee7b9977fd6f203c7b70f307677b0ab5fc6fe31ee2 a6122e9925d13990ffcdb4b7af159ab7157e231b8bbb88eeef15d24c0e13484e 9550adcc1e0eebcd077dfbec1a931862100f3ef725de23ff9d974c2d310e7725 ee60ec1e79fb297d436c4bfb8f5bc45ba818e72cca86e068b917a0c88459dc39 fa984179632c1ca4bb7d31efcd46c80df69cce0cd68c53cedaf1ec6ffaf46edc 6a7cca91bb940e8617209bcef9e43cb6874db7819cb2eb5e2eb5629280f1691f 97c612ac54bc6226f69de741814d7bbce3c023537c01b34c3e10aacba92e8a6f 493550bb6a17f414752d07430d20931de6929cde7a32467ca6a9135d7efdf66c 0ddecc3fe8890fa54b3c5f68655ee5fa656b2cad7f722d57bc0fc21418ae2977 a1d7079b271a8d27778b0c0fd6f366fc70fc956abc4842688e4f4cb8872eefc4 dca9dc9c0206cd22e9c240cc5411558c7559f19cf3b13edfa38930894151bf1e 1676dab2bb0e28d2b0f83d9a9beaa34c7a35531e4660d548f6efdbba7233fda0 01742d905f4c75d70e2ea081a23edaae908da319d5a46fa5e55c8bd860379512 1827dc53023a2bb55aca882f4f92b0752532f3fc45b3edea36fa870c5266f8b1 b895b3e999971f044c8b76b8da5abea1c28f363a5cb17ad709354dafd343cd9c d28853e09d4d2ce52c65334cff35ecbd18e755156c041abebe1f547e77a8b6ba d8a2302668aa5426c4487e3d0a281ee69ce2c919518af3ec843b26bc2489f0c6 77fd93f46ae94e64905ad274a4c663404b8f18efc9f85dfd380203e5040b708a 6e765fe6b7fe9197c0a337cf1f373c597698ebc39f0f087f680f10cf48a9306b be1f8bd596fe5ecd45a1e9166b5acd1af42f5c56545f1d967529a4bad58878e9 78d12d2f8d170c1d636703a49c54ee5957848c986dd5e4c637b2910760c686bc c6c2d5410b901cc6f0f61275109ea7f024d41fdd14a9d4009da0bda63a3106ab e4c71fcaceac0223d4dacfec187f76235eafd1ecfdfaff385ff85028b30ef8e2 8f7860aacd54054db633eb98ebde5cb3230451bd41e1fff3045abcc8a7cf4b57 b9ab43460604d6a0d1e093f9bdaa606c5e25ecec536ada59c6c72e9b4db6bdfe e97ab66be0f4e5d52cdb7440a331800e3d08582ab7b298100c2272b8cc4a73f9 434d151282256b9d2aa311f890a49f9b72843d5ac71917774c74994e04964cb4 66b8558b016f94a366f155859418a6a43203ae320039768458c900247f1eabff befa5112dc426a1d91b1f4244c17e97e3eb1e3aa6db9b0b901cc817e819a559e 707ad15bbddd2934e96cd611cd51c5c7fc50ccd8a8b9f07ee9b4488b685b409a 7189a595b9a81d0f0e5981fb6c2eb9e76e55c682eca70547d07a4699bb052ba6 03e55a266e761dc3090b4942fd798c7f00109fd8e3698a57b55f53daa1f65056 a62319e867a74b2aaa2ec108f38cecd2894608544f33e42dc2bf8d39c97e0de9 b8be6f20b39441cbe548847ac42f97a42070534547a97ace1e40f0000795084c 90f01e7d5dcbea7a9dfae8d78666dbf4750c259d99c54ee1971834914bd21f27 d12b67e9394554d6f9314cfe174acaf1ddce58b02f65e8754b7a510711a2e94d dc337fd6bcd342f95e86cc1379e882a2cf152b69493f89b1620a44790378b975 e203bf433963ebb49c1e271ea05ffc4c69fb88d7a56d82e27975d5d7542eb408 965464b9d6d7e43269be0e0372164a38b3cce0acd80159b2524ee1e79cfa60fb 082b1d8e6d23549491ccf0de5c13d4e116d16f149220ace1d470b2ef03c04595 90e82875230ffc3a929ef94dfd17de4c891676341865e5e04b33f0e6ba385ccd 3ad5d9a5ddcb6281b49328e3a92e66677c48375d5319dc7cf01a256817d9506f a20a2b949b410563ac3d1fe8f4295fa45276483189ae73e576c01697b285529a fd8ed73b010b676be1df8d1f4ca631f51a92a472ae01b519c7fbf9ec579f19c4 ffc6efe1d87e55e5eff78dd3177b97a57fdb524574223a7160b6d5b2bc79743c 0a53e9f275835e8856e8daba448351843542f4fd428051360f7edc91ee17d9a1 1d47fe9fda94629db3f06eec6913447122310162db5988acb608787bce67e102 eba9c51dc93bc429baa2cb1cee5dd5bba0c37da2058d655e7c1ea446e327414b 7b99dcea1b3aa568edf0b6d329dde18e334635b0162ebdd51a5fca04cc5154be 59a444519f1943944661f5180d0c5f9ca462ce2acf4e478889b7264b2befb175 080172918627a9a7c9edd0621965fbf6a3f97a642743c968bed19f8598ad4f77 8d31306ff4f83abaaff5c2553029f981db8df4298a5d9559749ad0da13904ff1 f6cab5ad55e1caabf95d56e6f1ce635d0699dfa53e9dcb30074098ee20817046 da494a7c54e632808c8518ac81f959873bd29acde651f3ce2464d6436271d32c 0cdf7cd7dbdcf10e8b00b5b57c460809f85e7674cff86b434c1fa9aff3a676ce e74b0f9e6863481d465aaf9de343affe1dab652dca2ea4d8d9734fbbcaf559e5 62ad805afa061dbc056037eec11d5d625a54bcd27d1d75bc5037dd489d925ca3 df62c563a84851450ae2b88d694ba9cab3eafa59ef47f4500f9502e7d307146c 2e134184892ec7d372631e7598b052ab49a5078e1766b0e6b24f24dc094307ca 7dfa7f702fe6131d3676bf6dc0e07a6358492b5c27261e83f794881f64d15cdd adaed2c7df4c0dc8da708776104a7c718910da68ed50cbccc4401fc69a31c59a 6735a38221506733b5b3412e5f62f0e65d00ba874df456c1c094f968ba1359e7 45b8d520901e8e925361ebe4bee14f3045c6db361892f5d4dff0ee964813c711 0f87dffef9fe14a86c83ffeead544d9c57675571c962621a662bb23f8662d188 ae4187a1ee374682673306e6d1f3d17801782755bc83880b9b27941887de0d6c cbef3e80c26d45e4a51101e612572be876b9ea470066f36a0b52cae3f1b7f24a 3d9f731b15861508b2e0dbf0786aa60da42c5e456e1bcb1513262d4a35d338d5 7b432f1ef0cb0250ceb5f59d631941e6314db981d9fe6bae478bd20a85c1d33d ba241ed0428823dfe282e13f89fa6ccf2beccd433782d133dd94c54ef42c1217 5b16e02839955ab1b88f1f628006eea335b5bde2ead7d5f0ac48e315277e8a6c 8a0ffbf937300fa9d7250364c5965baf75dfd03e73fc22fa609e30d94bbcdd30 860d0cc1be6ad2e50cd2ddc76f94b9e7ac2cd29ff6b0e0d6cf00223fb39932e9 a76eb90f760ad01c10397f9061c0f588ba4c5946c6ac9a40c5a2e3ac1e2dbc02 44b07c870977d816ccc791b83f5465b7928d2f6c696c322728e66e88f43e2c8e 5048e19ee14b7c2f07e34681a5c5d245e7b9a493af229268dc5f3b1dc14b158b e14f44f54904df5c39cc33ff826eb9bd5a62f0be9794be45c456187a6ed1c766 829ab49a470c0aff732fbf31e92cb6866f19ad657228846e173c7b9cd6382e47 44021f0b03d00e60b3e11cee0fbece6f495b38c96e057d7c2576e5da02baec8a 5d4ea920b927e6928eaea493f7b95ff8db71e50fde2bcc7ef71f78245f71e89a 1db796b3c062104fa17f26b61e52cc9294936dee7a7f0c687e2003d74f2a47f7 ba008f0587917d9599520a09159e46ec8bc36bb9035bf0f0c55d11baff020cfc e6d268e34547e71a75bacab8c5a06c2c96ad808350cd0e8b8334924b7cc84bb4 0d64fac4c8572a5a86dae1c6babda9833ec1c5fcb76d0b8ac8ddf315a323386c 38463c11cfd10526ba3623bcebd7ef8f45def99f2e47d4def37b4215cfa3703c d10d3cb4d72d03fff0969885cb92ba0d2613c152e0fb987ca65d58d190597426 476b6ad0e5f139054cee912f936e4a3917e57c85802f218157b9a75c4a755b9b 9533600c96682fb0f57662c8576789df89c956008a5e9cf8f867446d8ef6d43c 7e4bc48b05444350e9c4052d6544b2eef92402fd4832c34e0de28af5e66e8ca7 591ff67644bf0e9b25a9559b90c5ee61b05f23e2ab00311a82ce1ce6c8a2034e 9b9ca74793028d1859f56a04f3f2ef933b92ead5f550f6dd20eaa024582ac34b c37acddde8dd3d89cda7c1e39f73847a04148d509ab5242669f5b691f05d20c6 988b3ed1bbbea2f18fb520d6795e412bac18296ee36caf567022970bff0e212c aa62cb6874bb4fcac228551a64c0254de6b6cf5288c73a55e49e657a20347da3 b12ef7a6a6f1d18b056b3138511ca1213bfd4d31d5bd69125f395d2a4c49c517 5181e835b7dc8a66026379bbcb9c7b96cc71f4eec5d33afd12ec2205c453447d c6e1b75f3b0f96222ad5df51da92bb3970502780f329302a5e013f6bfb94becb c41f4d680adc73decaf4ceed392a0524a05ece2a88f05821f682e8456c81f2b5 7b0ee826be4afd51692b8a4b7f2ad843f8f5b95ce6dc1f7849035bbf170f2988 97ef04b55bf11c542ae6a66b6fac1b4b93ceecfaaa037c1346b95cba1932343d aff0550f389c263b2253738ed9db256f56d2e9cac8d284b559e736ab0dfb4230 6a5c55f152826d8020b250afd460178484292d93074bb643b667f90977eec8fe 9d0f946689023723b8273c7da471fb29965742afe8d23831bc190e8461e40933 565bbeea7e4436382e2f7b806e4cc0ac30b28f0d555756b7c690441d4d52b3bf a4ca9f22bc1e99d405bd2b5fdf00f43da0d0618542022c307da75013cf012f44 658b0c5b1c3baf7dddab14e2baf75ca05ddffaaccfb1c552b100a25a3a4db010 fd7bda14419744b898c435b993a0b97478489aa798cc41961fbb7f02ea8e8018 3a898bb5b205dcf11e620e6ae19130aeba36cd541ca7034021fdbd1fe3f88170 f80415d2e2106832b376d0cab2117bf421f0c3998061a48e7ea225c5c751c0db fc2623362879623d4155c09a8943eeec0db9054cafbc68efb35ae3c0e82b0072 51d6784574fb64da7ad53f1d5e103ad486f8aecec7ebdb853e3981e4e069979a 4e1345462ec67593cf5960086e0dd755a324d936d17f142ccd6a499e81ea910e 39d9d95be5ec28ec5ef733dee478ac8f304cdbbcad2c35a0d44b6d1486d06997 2486de40e7245749d2ce89799c05eaa4f1f49a19e210b536a50b8fad91d83c4e 9d29fa988bce42cd34dfc414d03ccc8626b0df883a3727edd1db3a7b086858b7 580d5584a7778c6cddb35f0dddecdd737f9ee0acf9ee81641c7878e3d6db8bae a403b2810d80cfdc8bc084bcb9131828fbf94956d842664f387838183ecf6575 9adb5ff557b4e447ef59cf9c1caab4cbf81d2a3abf61e2fe628b422e6f3806f4 09cab52459f918273dbd86af85d01cd447fdaa91d2fb25738a815896217271cd c8612f8564534041b1275510efc603468ccce9c787136c6336d158ee20ce6272 51eae22130d371e860a59c47ce474914804b9f20869dd38024293449af80ddeb 80b41f7e11a396f52c19bc62561ae8f6ac1015c7688bcb07e3b893f2023d40fe 81f157eb57008829825cbde22d308f76bfb56f2949f68cc1708746e3b7a47070 752f75dbe3bfb602fe73602ef2d78e952ed411ceba5ec341685c3f843ab28ac9 96a0a5b371b407c47a44f0c4ef1a69d265fd15d4d91c39c94f5a0ca6e2d7fd70 99c3199b8a2a9bf4b92aeddaf50437e73ff37187c2b7254f3a8caaaaf3c3366f b2d7ac4b38508b58add0640017d9d34a4912f2f990102e6f0c6ccebf4ccb6745 6f92d5325f8d37f6309e69ff7d6b826879edecc4e5684cb12886ce2cd3cead35 5473d889ac6167cc6685e02957ab3ad6ce67fb1caac7331ad427d844c165cd50 597372c3e64834cbfb2fb0e5287c4c26afd0abccff6464bf85434eb988a2e235 4319fd80a09f2ed33de241e7f18b2ee4003695edfbf4f8f3b80f23d5ed457071 c9a3965e4ac255a4b5a8e59241f6545bf6c830590b174bedd708d5f46882330e 3fd41bebc72fce0a180f7c382421fac6b85751b67caac4b038235a7b7b92cf26 a1b92481ac373d5cdbe1cbe0f65f19e1a3d886691a1bece3583433b6c385bff9 4e26fd0de9a019f64f97fc06888b52fffa942c40d023ac223ee92a2df3afc867 25708a156d90b87512c1dc6b4f2e1f0ae0450df78b7368328d2fb93f73721326 4debc3e09c6cdc3b2339145a4e0e9fdbbc4110827944a08aa1383a57049cab21 01d5bae06cefd6fe2adcaceab09b0056e9b1cf3ba2446d617603c189beedb37d 68f2ca15164984754fce571b603575b1e4cf4ef37342af735f2156d5af2d085e d29217e4c663d23e9dd0b10998f68b719ec195860efdc0fb1bd4f5cbc12840fe 0840f8e76f0fbb5f3c34e3d62d4b08e536416928fa0f9cac1b789837b0cbfc05 89fc272117d2a8eac8406a0888ee711e35a173b368faa3725f90a9cc058e4173 2cbedcb5ccaf4ba8029388beaad621bf4d89490a657f7c9027e82537240057b5 c99fc7224a1d09129f2db3547e1bd04f6645df931dd0c0cdd927ef0e3cc26498 de557a7448dfa30f39b389f76dd20a6cf398136b48fb0924f414317f6266a406 ed41bebe78f8defaa017fc22e6ccdd03d4e50ff7db9fd8858e3bfda724e56769 ec01626ddfebf8d212b4320b98f6b2e53ba2525f9ead01c2063de7fd2fbdd863 6aca774290e1ae1ca230e2bc7361645fc9b37039f752080ababdd24ea785e94b 0fe3852278d7a16aca953efef270fa4ff0509075a2eed90dad8b91b0b9d1b0bd bfeb88ba1de0b7ff48f78fa17c18570f6f03682f5080e34598883268610c75e3 091376dbb1fe9fcb881f4bc1688e14e4ae7ccf0d2d3219a6b91f13499a8ce2cb f54ce0a6ab64bca8f42b9220e651fc790ace021b243a187e1c3ffdd6a77c94ab 3255efbe0faf59e14739e4c9ff830399be165c16f2c186fa578854ad903e6613 45e7fb9cb9b66c98f124892f7f53afbb7b2c4882903603e6ea94dbae4220ac6c dde01c4d6315c0ea8eddeb1496f0c2acdb97cf71adb3fdeb8569bb9f5586f98d b6fcd72c8b207270d92255ce8512583f3911e11dc20a68a0077b3379e3105b0e be60a60fe5b0af8596c967291874c7360de5e9b80b7f7f854e3186afa1862829 98c586d59df29bfa48a84fe59fae07e19b5ae3e0fcef3970da8a4e124ad26548 6dab54611e09f30774b790a71f096e3849b4f4c8ea63db0bfa1cc07df453feff fa63f578a4c796ca36cd2d4d03600686d1cef3dfc87e2e18ca69e4c4f2729652 8e93a9597c08110299eaec11447492d9afc22fda312fc3490e41b2483c37d9ec 4472d6edabd05be21ea67be47b85a5d2fe7888d90f862b548d9b67a83e1e8027 72b232ce5f569dfb36b6ba76d0e102a6f7aa97effcb57a723982e6226c8035ac 26c4d2b51f9b829c9cdce731155c15b85dac11301e50f01a70edae090db47a45 5c8dfb98b84cedded9ce1aa84705ee53af62c9ae66818ec86490de44ecf51696 c5b42323aabead2e36758fc723b2e3218150b885aecd66138fa006f0288c874e 8b6390bd70c4c03da4e547afa85897332215953e3804a60d184132e6c83797c6 e3b55fa402a03bfa4178dfc2f3916fdf9b651972887a43e813c40f4cc2b95cf1 ab7089eeae4490a8aca66b5593ce55e4feb8adea67d3966f97df9d824427ae2e 1ffdf2a454ecd1b7ed705768193eba668acda0863a04fea0b5f41660b24c5f49 75ed168c6e4862f31443be672e79718b0664081f60217aac0c8eb88f5235c61d 677080e6d14272ad2bb024634ff71904225858960746e3a6da4ad46846ac88f1 0f3ee2164dfde3153134e81770f733cfae97a76d75ca7148f3fb4a31a26ace19 aaafddc4c1e7d909b0654dbc172ff1d5ac1b7d7158bc0a2e9e810952edf3d8f1 cb1d4e6c8b03ff5ff84951cd7e8c2cad91614a292f4514e2e24f65027b7aa8a1 c31b8ceedb62d703c88a2abb8b6cb85a8f33e8f6cfe6cd737b8eccc98044258c 8f0a0ec75cf429c2fbbe33521c900a296093fa45a705db8e4302f8a2131d163f d8463675049dc5f101f0c52a225428b6e06d2324acc7ebf45ffb2ad1270b91cf 4c6828e8cd7b68f6811261d48c75edaee55664b27fecddb89c25b6db8bd34233 c9aa134b7a3e7be30f6f96feb221f546978e1b8f7a2830ac29aeb68487dad060 554c5e94244743160c507c82b59d5f33146fa92ee23d6f2e87539a9ee095078d 68b2eaf334fd2ed5dc8ce3baa504b98dba287ac81faa637327a6eb619416b60e 2b7123a1c8439ab093b0dc0531d219bf513bcdd8e39eddccba011eb001273f15 c8786bb1e7e21fb37b69d4731344380697e1fd1efaae459aa6d64d20bcd60b95 55784ad32d417558c1e389e0081a4253ea95adf07a12b50d7709ca4092f9e088 329f5f3b1f4c8d47770d9bcd6dcc26889a03b12a8d6a6f651fd8ea7ebc2e629e e0b8aa0d4b109e3cb8851d020da8068f53660852efc975b58746220e88b8f524 aa7568615079e3ab9ba2e6567d2ec8fae9b44c40e38475f286f994d12f9fdab9 e3b2402c58784e1a2bf08bb50da752df4da9dbe994863339117f8f4ff7966a40 a5536423cb09758a7e095a32a200f6558b9df921bfb88a89a525a6a4037e4d0e 5012e34fafb11a0530cd78b660f994c5890a1fcaf240d158560b9daff1298577 d96a2e0abecebb2fea683e23d2d55c67d82ca154070f6f8577e3a9b5920f4c78 047a145718f05a4160dc428cd30615811b9f11ec762876522556473cf8e7b4c7 507e1160d74ac3fef0c0324e98d3edc3b1af00a5eb63900c41ed8af3af2e6c9b 64fbe5c8e6cdd3c0788ee4e445de85ce7ab50074c2ef30e09bf3b77ec05beea2 2eab49dec16246e6d469fa3836db7ea9fb1f4552287808d35937cc99ddafaaaa a4df57ada42a0e7cc17cf7c85d89698d9911cd7a7abd65a52dee847772ef4e3d c58ae279329bced91592b75d8dbe2f248282ba9d83409c4c01abeafc25488da5 fc912c6a2a6a44ab4e6a31e46e00e64c2ea32f9dd262eb40c4e2fbe0dffea3a8 6bae373a299d733ecb558ee33690cec00836f68c57d3aec0de30908394610afe d52ecc75da8ff52f12b278c0fedc2fd84f93f1c6146e53c4fa5b04fbcd9a98c0 571c25ea33667b294ff3f7cd39b92507dc688f09675191abf642fbddcf0632e3 5b7c0d21f2a87ecc434b0e727c4e5462e64312470f888bf585157219dbd16c22 6a2e4d2264a3617107e090730b0cdcb23a99399d0dbc9472ec707fdcdfb80f87 50e0475866edfbff4b6940bc4668bfe5f26720e795b4626e6d409036adb84803 0f4bb9dd207ab399dd7359d2da72803581bd31c729d5d56dab1589b5f2224449 fc666090bc5ce4bd34b992b9cc9a139e9503ed2d94e2ede52706c2584d11fdff 06dc0925315b8b54b622403e20518484b4d0d95dca84e8aa61f87b6a38fc727c a41c09f5d78d69f64655d3d77d3327881cd4b204a2832d7cdf052667e7f78f69 a14fb94c16da67f7a78a1b6c236bf0fcec87dce5c529cd28fe8737d841bd4332 cebfaef3f991b9d96c9aa69fadd3a840c4099e47428bdb90396a6512023c29a5 f80f2915e14de83d27c928cf74c728952d6c95cda6e60a98ee86c82c22076500 642cd51f79358dfa922f6668fe80229aad9614c0069d6dfc3d5858505975070e 5d8566d9b7cb0c6bc11e6aa8a1320cf8aefb3cdb925ba594ba093c2177c2479b 52f9bb08ecd5dbf2dd4abe71bad94539eb42d7000ad831f8d3f2ed05c1c52ab7 c436afe34be572507b29b8aab50d3d9a5abfafe8645ca66b2aaed48f40cbda75 81b777e9cbde2198ae79de9827d94b97ad36917ea46454a2015835ac816c63af b0246f126244ae28e16a7e283aa5d7af73ab67ac40d6f22f43c4ef8d0ccfb955 c4238f55eda71b20ecc3f582d7ccbc8a32e914f4b85f9870479058e960bffa2f 19f73a6a2440593f8c1d6758b145aa743c5dfa303345172dfaed21b200a4a030 197166a30315d5d53fec36ff28c1a388801e2de8256c144615d5c34235178dfe f3de041f732b1458e0cdd05fbffbfe7967cf83ff0c1640c28e14dd3617464382 b8d15f705c36e60a70bb4ed56148ce24a3a5a8ec94a154a9215657e4589aa225 47031faa360dee95cca8608f84d3984e668be9fd60a2b2765d53b5ade86d0867 32f2b26f05a7c783af505ecc56cbe9e139fa1792b61fe16f0692e702683d3d2e 083952d014a66ef81314186dbac5cc30ebc608ff211d9220524a039f5859d44e d75ceea89d2769fd7e108988d1c8395f61cf013a25b08a8982694d9aa3cf30e8 62e04596604b55abe517046bbd8932787bb3da77b4873599bb1a23d6df56d864 1bf53f1539ba70b94b044b542b7cc97dc4fc7db3fd77df5b8e8802d70465b703 faa926228240c594e638a75956e7fc1e1a1a3ea7276e8eae9c51b06c6217777d fe8542f6bfd636df85ea73037d89de7d452b7f3f6b2d0959deca411588e24f5d 23ee6ab511afb28fdd2986531e68e52f835683c2284633271295014e030de66a 52eb89a1af50c145211848dce5218a61cac2a6d5d4e13b74bfbf6a047c95e499 81e04960e2537a66068255352e113a92a006ca0aafaa74154f262c0a32e6ebc5 6113752db1158178249ddb28b1aca437620ca2dd4d719feae60cbf024ab5cf9a e3503384228de7e1ebf3d4b66aa1268bf1815b8355ad4afc9f049b4a04f8e9c3 aceaab1e11f69f43c8a58fa501715876378d4db873e443bec94f2e82a7764d43 7d6cb9070991111c47a030397eb6201c54d7eb547c2b533386ebe1f61876ce91 35b5e0457bd5a195c225fe9a5dc082f358c9eaa8c24b5bab5115fb774e255813 352bd109c301ee8888a56df85c2c64f76e34893d16cdd141fd508e9efe8405be c9d068b55ff3cf240723c176e7be65d7c54d1373c26af2d4f6c5ac54e9c53b0e cddd82be81edf6b7d31ccb587e74e3b3b04b94a2e268c5d15098dc04ffd1a7e1 39440c7549d2d4919eda76b1150dae6fb23465d08df1adf082f84af41213d5bc 2b170b83f3a50831fb1c6a627fec8406bdcd4ea043cf5a04ece0149edefa6e61 8bf5b57a6999fc6b714adac74bed627a0514ad72a1bbe2d01cd719fd3c144650 ac3c51a9a7541c8cfebf22554d0647aeb5ab039fbcdf0c812f9b2b3a11a816b3 84e6947508e0e306f2c62b7861d2b310e48e36851b655626243f6437e0c84ecc b6e99a00716dfe7acb936b7909135ab3723ee69cad8724a753644ca6c9b8be2e a278bdd583a22430838baa9a088f516210467121c238014c903d9a676f5b6219 46c2c0c51b8607b1093b245641dabaeca004ab859e5a880431b772d43771ac15 34f445dde7ee720c1a68401cb9891405d8f43069af9ec8941a6214ebdbc4b91d fe8769ef597049830286ca0f4d3f6dded593419e4b786844f3312208c3168b13 3b55b013c976a5dc91453f2e79a9bcf3472d831a5606a9f18839c1ff2195adc6 1367209c2a5b865f4ad9f01b1086fd1af14f102a3396d670fba0c8d01bb22d77 e807f7001b0c78674624a6c9b8264015df381109c008d181840ae4dc5e02749f 4c99ead7397fd787016335ca02ca052919a165343c1d519f7f2ee4fef5c9505a a59f951cc3653f1814adb05b16dff4f642a36e41453037d09976bfe13843f452 f8dbd11d4e937a8737b5754443fee3c04631c1e36da3cdc79622263781f7a380 392d5021c58f50ae454410a52a9dd1c35210d37693bdbc429a86ba1caeb19065 2eb5638d85a60c8ccba68ce2e0f10ef984421a365e666486d4e6d0853c239038 540149acefc285046b1f57284da30dc39dbda4fcad265b3961ce17785d33f004 af897a7ed975aa658ed7043825356dd937ec8bcd672f70cc75ebdd994ded0aaa a92eb1073d10b99dbc52f099b258de1b485997b25c1323d7e3f973fdeff898f9 d1c018b1da16fed0452b3fd179c155ef6a5e2bcf05e6f717c699f13357521ba2 92f82f4b6fad9e795bedc9ea4985a8acb41b16dd3611e8210deadd6715249241 a40d5d7fd161a5c86f414d7444cc9e3a709a8da98c7d6b7d4f1640f4e37a1674 376e37e188bfc9b9d06393135572e52a6d1cdbfc675deaa2c3c0a2e3149b8ce5 432bedaeacf118fc99e5a567fc82f1a9dd2432660a05bb 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: Utopia-Italic %!PS-AdobeFont-1.0: Utopia-Italic 001.001 %%CreationDate: Wed Oct 2 18:58:18 1991 %%VMusage: 34122 41014 %% Utopia is a registered trademark of Adobe Systems Incorporated. 11 dict begin /FontInfo 10 dict dup begin /version (001.001) readonly def /Notice (Copyright (c) 1989, 1991 Adobe Systems Incorporated. All Rights Reserved.Utopia is a registered trademark of Adobe Systems Incorporated.) readonly def /FullName (Utopia Italic) readonly def /FamilyName (Utopia) readonly def /Weight (Regular) readonly def /ItalicAngle -13 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /Utopia-Italic def /Encoding StandardEncoding def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /UniqueXX 36549 def /FontBBox{-166 -250 1205 890}readonly def currentdict end currentfile eexec a9994c496574b9cb23f8cbcd64a4a16861c70f0f2da82f0c7b06ceacd6521bb0 cc26f1cf47836cbab75757d7a81793f43e56cc8f22f926da04d715ab6ff2e257 5a135dabbaaa58f31f548cbe8a76c69e2402589b9e5e46e757f06bf2eddbbe6e e48a624cbe1c4840a338e90f7efbe9f2194aee1c869bc4cd76e2f1937d78e207 d8149c05b50ef0bb361f5905977c40be7d4dad07b54e087896acda5aa70ab803 9dfc55a73134c7f1c9be9028d3ec6ccb0fbb8fda52bba4d7551a8124e68481d0 775ed7f8ec68d8073bfdd3b67f72ec68634ffc57727e16b9aba841546ae54d99 b60e227682315510edda09bd6ead4d1652f449d737592c44bb178689a3840169 53d899636686efc6f838b19f966be5f833f5e7d41af38a899df96fdce1ebc116 9b0ec87c930d9fdcbab7e74880e9693a24de9c67dbb0dd75b3dbd113b079c490 60018433ccc06ac1df33fc090c4642fd5225fa0a188c131974ca8820319704dd 14b1719b958779d1475d92e712322eb2e6a79d652c4e3f5833aca3091675fef3 fde103446e565428267b009d87bb7d6bc40f46b498b19bf1223aba33079e41ba a9561254a9df97a48d71015b6a24cf952539f664f172d565f39a55e063154d80 a960cd56c34011fe26e8849c6677427b2c7e728cd16272363d76661b3ab8bb2c 85c20b747519a4431421d4c83783feb896c45688ff7f824381cff5654a1bfc68 6f4894e1d265455fc00064d08c37dc3a47b59a5b2d14dd893a2b871492b07c4a 591695c8df012ef46a750d6cb7fd86696e7ead280648bd737e9ea490140f3b1b 1dffab2ff8e085a8b1c78e4b9ae9cee277a29233cec5ab2588d1cdaf4bbb6512 e1b1476c68fd3db18ecc2536968ebebf4333c2c3709ca354f21fffc38c3858c0 561378a701158ed0201a3b236ca9cb7f7528d1e5e07a9bfab04f8d0fa3d12405 5ba2fa9dff76f41b980bfb36e8db1300f7172c902dcb9f5f0bba3cb9c212bf31 76cb802ddebe556f4610021fa3700d476a2be2a66ae6c658fd0a95bc1b9629ad 03fe4e775ffdfa9f87a274fd904c0db5beae258f9af213f257db2be0265b964a 681fc4d2855f5356fc87576d847db274fed9ca5bb4961ffcf53f28b673f50e31 c3c634604e718b7666b466557f4f6bb6239339e028de3909dc47cd634205ddd4 69a944f11883dbf89344c43c513c35ae966a37a89795177b9fa95f3713e4d48c 379e33ffebb1bbc92521cefdc36e4cf5265d28522cb874b9e8459abfa31effa0 e0dc4d34692fbeeeecea87355dbde65528d1f76b89c4b5885e3d70b3ed028f5a 0510fa7044cbe74a030a9bf06c592dc447f9ed889988e7ad42cee85d5c3687a2 1d78ff32ab9f4cc829e7119f3d144ab2c78da8230df854cf4a690b27d715174f dc062ff7b67b5afd628aba30e747a0fa3fe8d06fce5c25d6d409e3609a3f376a d94099aaaed8041cc77e4a0aa2ea9c475d5c9b4056bc085c855bec2714d55e83 042389cc2a8c81b99c0d5a1c99c5d9675772002e02ccc9ae31cdf0473abe8f14 5769a75f2cb47c3625a4d9c81f6779efab51d02e9c3a3d2e29d16f70989d6340 31ab59e2ccff29ba1524fe8d6a2cc703310d1e11bb26cd09a88c5d9668f6ce9c 5e38a0f6feb7a81236e9870053f7467ee00287b8525fb0fd61b6d57bca6ba778 f81851bdfaee5934041df3c05d462f1f169e7d6d75ad7f1e191fa35c2980535b cc33dcfb85458e1a06827b966323586090a04ddafcd83edd1405b034d2267ee0 682d2ef322bb374d5e1cc794026381bf47cfe8f1f443ba996d776b5abbc15ff1 91604e078cb930b899548c3e1d3103a6ee973541e4612511bab9e623932f3a12 464b7c4dc2536c8501988483d9d2b43742a84524bc11eded2db364633a191105 65287407234040dc7de0b00acfeec56327dd0b7673c7e1fee0f54eff511c923d 705df0de767c467187408ee4f8293eaff0f42de15fde3afeb79c00d9d4ac55bf b5312797085b685a8ae8cd8edd16996276bfe837743a26f17bf58e565c9ab056 eab96cc5a55deb341fc14d4c4ddb94ba3575716cd39d041b26e7513a1e9fb1c8 05c510c4098d8ef857016cbb67b001acbda297093bbb0bb972b21ba71375849f f835681590882884590b1287e7919d7bc0db1b03ab1e9281cf5ae0ecede7987a 850f0b9d04007689968c7dc592b47cbd0bbd09883e3130c65ac806c8036b2419 0fbf6b3d180ddc5377dfa962ac46139625e1e36a85aa31c1b23c5965d8d542ad e10321433dd22b1968666aedcf515e82238221e8e0e5dd1c2ae637cd19a66330 72bdde186cb65b85e07abbb9e249ce3641595278e7daf760b032ce1e4d206683 48a562bc652d9f05fdc66a4492f480cdd6111709678fbef28ab0cb8ec6a784d3 c239310842e9d3558ef307b5af6ede1bf93eadb34146cae9366f997372a744ac 9581910f122da6344af2c024e203f77585f4a1a9f164004334b4587dc189b246 f173f8f670fbc4644b3c8d143991875477759d0cec9e454e76d2676da271fb33 ce1680cd4f7db9fbe4d5e8a97443e951a1497a89bf79b2f2463914838df38670 883ed09a9b0f35ed7849584de15baa5aeb41f69d431b7cd942f525ace9308fd6 753b82e9a3484f81d9c455e80ff82d233c5cdc5e0a2968e66295669ad0d8d9b3 4b28fb5f6a5636529cb699b58f047e163e7278290bbcd7a8d2f6fae7672f132e 0651a74908970b86c4907da531735075f44a5d78b111be61ca6fcf6ee4e0146b bec799fe6231d36d7c8a9a8ab2882a1e26f076e85d316904a39fbdf2b79a695e 89befa53c9fb8aad2a83be6dbd7b45d18067d0d5bc8ef4b06a829ecf13e311e5 1abcf99eb1de308acacf7a7e3624a0a5e3049379f24cc153ec41dc018e1c7433 3bd4c9a6cbcc06ec2e4d0125ace10b0204cb7989cc2c5e42955b47e0933fc342 e5c5e74930ed1026459c3999b3d68afa03c19d26f9df5b0487e743d2fea03d4e 0c9764cf2bec8f9c6775963669ff47aa488a45c17dbab55379e348af380cb5e9 ec4bb5ad65b801df3fedfc1022f2d9f05fc48f30389d88dfde8dfe66649365fd 3c819e57f89578fa7c81efb6ebbd8ec984d4746ac925b88e9a5b265c3f3e4b49 d1843ccce3555c2c06aa62ae52a37e6e68ede56d3029b43859c0659d9bd2bd0a 9b6a992fae74c8a6cf51aee78941c358ac522cec5e781e4d434d10421c7e301a 366710c893cdbaadaf985e11cf0f939b616db69d5d24bf9f34237cf9a02ec39e 9c6f12bad393d6d2d696330d42b6e4920ab0994a5f7177ec3126f952a9359c70 11be29fa096193c9ca694768297a39aad39c5f73532faf5c06c8c71cc557f373 8ad6935700700c96c373ca73ad1c33efa6be0b0a42569073e00613995f993eef ef26736e9f5ccedcf41bf606d4bad0a517320294e71b1b2f8c898a0b47bd8c81 95426e60a892992f3421137445de0123d612601dfdd78c8ebd627afd52338da5 4be224be6dc190051289765851ce3d77792d888bf180303254a0e7328303e3c3 b31ca2449493ae1e8713e9802fd7d6e7e750dbdf5ab8e44a38a8c35e5b6f6afc ea8d1dc71a2eaa3eb7f46aaaa84609082609a3fd9ddd8b78e5d0a1987f2c0f66 cb5b94e9dfcd26b2025c272f394b125e066419d1cbef6cdc3882ad626b177f1f 4dbc926b924ed956117ce781bcf251d22d1f9983bd8b3a36fdc4a7de2948a3b7 2dcbf28f5f1ddda319c5189aa2c262974e0372d685c4d033068d15c5c7ae319c 3da8e498806dd11bc4596b58fd90dfce52955234c3b66117d4e66ec3aa7aaddd 1eae2bcef21ba7bedf2cdb417c52ed12994e603c0ebf0e17253d0aacd15c29f8 fff8bbdeb43c2592677d41715ff22cbc93263e00f449282391f4d4f79d981504 81ade8be5fe02d95ef9dbe434911d45645ecc6b9f4984e870468503417d275bd f841787875b544860b667bf373960bff82605ed7fdff5a40bff2b6cb96d3e32c 600d97b2aa99996bbb8bde1ae4f1443d202b1164ce17dfb4c6c320d1e51d8b8a da5a114a7b87830d5aa3322f60213ae7d7a865f23d3bc6741bffcb629376d54c 101b59e1c54c2092d439f7197094318a91c2bbaae77a48c4a47273e77c476248 0e4a4c4012f0641e85d8e9af1e9b08909daa1930259eb3352112f9cbf16c35c1 da39fb3c7a7c4600bd238183326779dc3eeee3e62dc71ebd76b4a0ee481ab88e 33222f0b301c3bef001ea965133057236ffd26217959b7aabdfffeeedfb57ada 36f409b754c11fe4bf35bab7944ee95307d6780289372cf2bcece24a048dcbc8 357da4524b8f262e07821b97e70351e0d721001d5abd368fb142132683e71c55 a16713105c46d3ce032a4959f23dcd2a27c345a8c05a68b39f72b151e5c02a07 cd0439fb2bbd87d1c09c0001ccc8ff5698897c41bf42392a5a033b728f913695 f1a94961f659eaa75df4e4277eca80a56bf0ada3a9bf4f11504243f74fbcd989 3d9cb975fc09d8a63c384afac5177b5bb2edff19765eef736d14959fd33ccd3a 89279dad9f04dca9416e3ea3ca10d28168c25fdd03c99766d36b8088fe8480f8 cc8e2b404e68fc475eceb71797858e677c5d57580a8cf11837fb9dcb1ef1a442 5f99e843d10973557be9e915f84af4105ffd37e4938858594cf5645a91df315f 23d5a42a8b8897d01b4135fd6f75875ee0b34cc62e4c10333102964e02050c8e 85c57289c89fbaa8693569c4c0d45ae4ec1f59bfd5834b0e2d3ae2386b4e8672 b3f86e1e01a9272845dd93b3bbba0aeae6e8b53ee8c13b7857c432c37f57f401 efcb45c9e19129c8f81b3559594fd0dd09837fc9f943b36ea4076b61b8b056e3 aa2b41e5e780b3fb5e91ce9111b8228732498233256c70aeebc14131607e231b fb1647d0ad13bb17e4f828b0bc5545bf3dbbacdd038e74e809db9fcc2b37eee9 b675677d8f14a94c4909ca0f2cf773b2fe1ee70e13657b724460a387073a43c4 62883e0a780675ac294246f0bed19b303363c061b0168d6c7a121eed8a0f19d8 192de5b6241c79ee9039a7d7499e6272651da99f9da11f545b9a7e254457b172 0d6b2f6bea6b78823d3a21580f09fde477ed5afac1c2c103ef97e997f1962ff9 5ff359ee91c6dd7f379fd0852632218a3760bca482c720b75b2905967cc58a0c e61abf14d4570e364c0b6a9cea791ed7c0686069a7cb418ab196917359a53641 bd4d86648a079c9b9a4082f4835a2e39871c9791b40bbe782a86c04073d1389a 1467717f4feff0cb95b6d5c762499ea23b403f17d0bff71fb98d8f5a976035c8 3dc157dc1b88e89f48edfdd16dedd3de04561a9b9c512489727f26cef86f0c93 dce8c70a843c9cc2354c7ac344a9087d3185396e7c5d3d5eb666cce687a14cf9 9748df689b4c9279776876a0834f11a112b73e482e82c0ad3d8cdee3751a6921 2705aa88b73bab569ed1aebfbcd90a5b6437d4f24c7f0bc8db841e8e53d8ac40 beff88785412d9d387e567b96574113c7ba508f0472b951510af2933ebca4937 b4b2b55dc323390a3e2890b751bc896d500c0e7ec04c86112bd2e28b10751759 ba48ef05fdee5a9cc3f3fe6f1f7577d4211e2356e95d426e6b9ca5506c4b2a76 d5a49b288e361b5270f76cc99464cfe869e09e0f7829ad5174b6c56d05011dab f4c3daa04ae901cf46c6460a27316807bbc3d3b9b56dc85bc50f652b9debebc0 62ad2bbdaa195afb177e50f3de45044e8a7985cb4cfb1c6002def6cd3e4a4ea9 607eda5be8d6533c704f12b0683ee34a05b84b25e964f5ee467fdfb658da2dac ebfb515d71913f753d02fad4097c1b1fa502d2cb2985041253e5856a2289a55c 57fd3480848bf56f06bb67c77391c86e5a23d9027f4c4ed6f449ef0222e1b2ad 12276902573a66804c7978f4368f30825dd76b34dbb968f131a8f4e8ea8422b6 36d239e8ac75b9c31c5066552ff0b0bd27e5d9fc5e5f40152e5389036e5874f0 6fc41a77ceaaee61d7567c5ec4d1365e70a0dc7900f22109e3dc4776dcc03b77 96179fb8135d25534009516fc94d4e4b825cde09356ff48691c92026c55eef63 4bcebc021fc4c3214d548130235b8b9d914861be463658a6eeca62a4a80df767 5a8281a8500922fafa315feaf1b7b910d52abe7907c3267bb5094ede303e8678 ef1d86000fba5116cd368e1f7c1a6db1e9e92e54527441734d404644c507e32b e3d184bee7a455b255634515d6c8ddc4df6f8b6accf7466729aaf1d783ce3691 9023f9ae1b8239d3ae3104d2fe96240a12401492990ec856234a586cdeaaacfe 836fd2de56313e703a7a2458452fbaedb7d841fc59ee21c2c28d28214f234ae8 6ed48cc09e2e8fee90ce028726f84a97219f3e0aef52a49a4c787b9ff4f609ea 8181daba354e8bea913000eb841a7e86e53c9c56bd61541c7cf8129315e7b2dc 72f4ec8575bebe01f02c061d8b4ab477ba8bfec3767f12f0c53c5dbfcd726af0 8aeee0cc3b5dd473a53550c4dc90ec0009eab8132f646ad80a6b31feae135b5e b09207c8614ec6173fb54f9d15e40d91b398c11ccdfa7e977d48aa8d2a57f17e ad2b3cf8eb132656f330fde6e3580c139568b2ad801bd22e6f93bda567b5ebd2 6d0412a4bd0a17f296d6f02d359238552c456035fed1ec83279572791c7b3503 1bb2ab42b663e92140f76c0b2e72d71839c49d184e475a76edc82e10603c492c 1ffc857bd7bad4e4d88a5ea83e47cfe58c991ef9e050fa98496413e80d340d6a cf5ca398d96ecab928caf2a5f8f7a8d22a459b530977e1e68cc16899d0b3ef1a 329101a72308a2cffed7ca9ae9020bca4f6ec3e56fd2f9e574109f6d708ed293 7e0ea6944c1c33ca5e3f6b40c106db4b0a1a3763174f5006c41e7a7338e83934 5281f682ef51c7b3ae2372018ef81e1f6697f554d3ea211c7460a13b5ea01064 114afd3b5600f9a95c65113cdeb5df6e61590533798041b1ce2ef6aa9c09da9c 772b2a20f596360b08c46ce2f748ef7a79b735a738877bd1ee6f5986709f3607 5338d3fe12a82d8cc5f084326745e9aba7d6ae6f19d1c8112642ac26396b01a2 0e211ac76eba317f2b7a5f58704d33c6d2efe0ddf9f3c8be6053536bb7f74791 b80fb3c295b06d805e9e8cc1a1f774e8074c5beca03a55cab0b0e35d7b176de0 e3925f6d3e8a07882533fc27847a30d655dc674de606ccb55de49a0e9f770b20 8999c23a022aec51c9002afa2687558b7fb65635e9867da39b9c0855180a6fb0 be00a206cac0f2077034fbc9cf599acce6fb26596a8815a1257dfee86dcf26b8 6c06e1b27c63b45381a079f374770265bd6853c6f436e9d8f906d3c7f26b3cac 147664a8d1e52c1e94494fa724e06c0d49332e3e1fd9a0763d647b00eed84bb1 55fce849e0cbbf794097b5199c3b671f9cc7e8d5cd663818484ebee774ee6197 253293e82e4cc1cdcd192c67dd58a0fb1625ba14323ac10c0862c2c026de28cd 09416d624172a2963b23bae503f8e72cf56ed8fd26e758e48d6afe00a01abd2a 6b290ef7727349f39c4e39a0789d3fd68891d7c742108e5232ce6e22562014dc 45ec1c3611271f9b7c1bfa5a7863b192bf560ef68f6681cd661cf0e662003094 402581fd3fdaa0480471be22c12753337666575d13819cd6afb28d2258291ac3 50b647a8ab329de34982d14db8e88cadd58b59a0e13a19ad6f4dfae4193a0f86 2bade4a093cf6ce4a79309a307a0feb399e8b7d24243dc5ae4ae011a5a56cf42 dbd7a32ec3b91b04535bc694f1dfc22ebb758c7b8be29195386e07c637070708 b8de7858e231dbe6483190c956927f2ad5b7e7495ff6c074a6ef9a5f0374dc94 39319a3f261a118f2cc42155761a238c3cedcc76e51c7dbf749726b6733b058d 3bca996cbbd42ba646f6553c7e5722719ca4ba48360f45e0c784dedd9b92c5e3 002998d48530dfe1f72e6cd10c1efa7dd26de4799d9b9ef82e677e9bfdcc0420 a1d851c1d7f8ae59124150314718107ecad527e7c8b316f41584de18c9797b47 21f7f2249d3491a8746bd880a8317b191d0b010de2988e1597cbe5eaff749b6d 46e928665200620d86904395f69b94acf3b46b0d36d4e1f16152476797cf51bc 9af8b3272c635044882d617aec8df21775c1ee7d69cb027998351b9f67c5e76e e47812f9df5ec34edf0828e5098bb2c31902596334070da9ac656b6f9487169f f36096bad690dc25110f3020955dd075a834a54f70644b77287b94244587abb0 991d1c47502d3536de87002d555558e3b9eb02c94083274f2ec32ffc4c9e1555 f283c59f7b01c6aa7e4bcfb83c3572c951a6bdd21126c16a81e83d865c74dd31 9cf724137240879ca22c1a793be396ed5a78447a82260bccc9bafe05b7ca2484 a869170a9019ea4a4b7678f90bdf22f9a46073d22c315a6740f52d5027b23652 65c58b6467baf68609cc8ad96f6266e011f68b6bd84860daafe1d6af8e0b55a4 8d542a47d5800e14d1559bb9e527407fcee1fdb7c05a311ecd316aa306237f56 98d1059746e443a18e24440a156af8fbf75bccdbde2df0e83c6827d56206bb13 f1a0a159008aacec65cf41e724cf8fa759b88421242d50d3fe289eecfbc05c8c 4a3f398568594238b4b2d2705fe655ee04de317a5624170015a6cc88efb82b20 a2273f4097984baf2c1ddcbea759afb6c2cf1c461750bb191af1cfd4701a7720 4ddef724f927e2707d86fae75eda9867299a40b6005727de78a1c639027ec01b cfbce0fb4a694ffa66bcdfb7a838bfd7a51641e6a2cd44b68bec94f230380553 eda7bb49f3f1f40ce2a697c6cf81c300d4322b24b5b5689fe8ab69a62b77eecd 6d097d6c9163110eeec405e44a6379365239e3f3f1f79b2f21b749966db46203 19cefd61d4428e117a735beff160bae1a1eb6ae0402ae0aff69c6b98da7a2d52 e8121b44df819260a40d24ca7c1235b4456cfb64502efc1f5d5fc09d619b8588 51c8f06f1c0e22138334c3af0ba4cbc0de0ea6e4a72af5a33e4e3d3073c54dc7 ae8c437b44a1e2988057afc7890121428347253ac740a1bb6181bf58d3140c74 df820b835418c4862e32121bc1104199587b3e63b9bfc4f5676b0483e830997e 9c90f74406bd51760a6ff7844b7992b40b93060cd8d42c05a72701d2fb3a0f57 226948c99379c9622f0973837a58cabe06bcf149131a0b1db1bd4d141a10c436 69815b0aacdef17cf7de0544a3b7f6e55ad893ffdbe3a3ed9bb4fc42b39109ce efdc27687e7a3dbc8ce9d85ca89d1eb0cfc151be0878cce76c6618cc9ce88753 110266a477871d39ee43e4d6640682aff908c7934bb8f5cdaa3e5890c6f0ef54 65d8b68715bbe4360ef7d15d320e5a813c47d3bf7ef04b89946ef824761117b7 a02f83e6c0a3a8c4318ed4c1f715d55b 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: Utopia-Regular %!PS-AdobeFont-1.0: Utopia-Regular 001.001 %%CreationDate: Wed Oct 2 19:10:38 1991 %%VMusage: 32987 39879 %% Utopia is a registered trademark of Adobe Systems Incorporated. 11 dict begin /FontInfo 10 dict dup begin /version (001.001) readonly def /Notice (Copyright (c) 1989, 1991 Adobe Systems Incorporated. All Rights Reserved.Utopia is a registered trademark of Adobe Systems Incorporated.) readonly def /FullName (Utopia Regular) readonly def /FamilyName (Utopia) readonly def /Weight (Regular) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /Utopia-Regular def /Encoding StandardEncoding def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /UniqueXX 36552 def /FontBBox{-158 -250 1158 890}readonly def currentdict end currentfile eexec fa444f2716d92b815f58ca9049c815358e22e32e73a3e6a653c538ee56873363 67713b8cab082730570f5b5efcf34c2cdfb6f8dd2b7905a37c1924a2424c16e8 711db76501f564506b0f45fef10d83c3e3c6df2dc0af7802e7f42c81b4243697 ca09088b868d983e79e4b2c3e17321993cc8837921fd4ff7b92a1294c5ba33e6 8fd40e63df624b51865721e034f71bf57bee0e0c2a9c169c7a626496540d45db 585d2bc93f83e6829eacb859a194d7a57904cfae75e6188c7121003ae40153f0 0fe6fb52f339e72d4aef38469328465a3bf0ca1ef58dfb447612eef4ada248e3 ca525b0884971b85099d73538152affcad51d03eb4060a5c580f453ee78e5c4b 991f77c6e9600c135395d56335a7c3a75c0341979d6b404ee496214a5d20ae06 e17d80d37bd3540b8fe913bae1674afe37d0c41e3d9836a7b5147be32f9ba01a df1a73b89d30bb595a4b279032e37c8230b6d4933065947c3e9150d2c7c4d439 d60197eb69991ef059edf886ec0bdd28158a71a2df96dcb67fc0bf81c34cf27e 12d6ec950a75993af99fbb040af595134198151e7361672d8538cfadb4716785 dbd48da442ccc911ae9157b14e433559dba1a1c5619e99b57274d6998eeca3a4 7e804d8fe3a664f39f33237831385949a230a21e52a2dda733f2f89b02ef4ce2 5d603c9bd2f8e4c0443070940f0380dd1ac60ff462a9a71965a79d787e0711df 0a69bd86a4846965ac6c77f2e1699c4620c1bd9f5b2263e13a2213631c55f7ab cf60d2e63a7830d5011d9b9934bcee2103f4a5d56942ce0f590a15dab480e5e5 723afc8e1d8d96f3e0d8629b88ee477ea6cb8121b0adddf20405f8a32756004a 8a59b2cf922a6dc0747bc15e99079aa12ac0d9fabf8b47c5a61ca5268e01317e 1f0a38c468ffea597a392ae3399daf7c03126987750258b5e077d703cdbe05b9 a5fc4d80e8551c2c06a2c579272877fd462fac6569a7a9f964797df79628ba7f f77447fc2aefb25089ce946e0aa5c5ff21370f0cf84d8e2affa8b30891081b16 6fb86fdfe65e7e02ee551c6b3e2e324cf7e18664883dc538018ec8cadf7093f4 a13708013d6ca2afdf644c0155342917c2725598fcafddaf8807200682fcf04a 4efd5919c21ed2ec2f7951c2db953ed292a54783f5c541bca68d305b05df5c5c f17b9af31035dd8a77ed8b54d4de7d684f54c58a28f0dc55e7c692cfe444216b 18751c24ec1c8a00a5cbd458a0ad54e7c13f26b4c4257fd992fbd1338845fc69 6b97a2ee6a4d4f03fd387e745eeb8e97eb67e40bacbdf1d6c08e9fa2e317d30a c4234559096affd5b2e65606ff153901a68f158520c5e983513e902aa42d4b6e 0114b6bafff30aa7310184304ed27739882a95d64754c23fb09cbfc1846fe274 96d36a1028bead0bc7ba99891255e592c1ab0cb6c238f91aabe1e5ac1baa7e76 a578a751717c59d17cbcfaf49ce2f5597e41674334c47fbfa4c6156554b8827e 2228e6946ff9f94a50adf69b90be4df5a68056d3b0e239ac902e2001f0be0da8 d7f3f12d3bf591065afe84b6029522302f9810c465daa62ec2d497595ed8db58 8e3751c232e74debde6d460fd0fbd9833435879f69d4015898501b7010067a52 e1e24ab298b036534919d06c603b1059128cf22bdad9dc07ff32c85a0c956da0 df7680321f848c1a517fb7d4b4493719bce7078cbbf6bab0d830402f6910b607 a47015102804bb625349de6851000a0e04a854d96012a38887ac7d7a088cb2af 87b49754dd4d2c25e9ae751a66e8f21417541ea6139096322b06cfc74ee0bcfb c6e62969fac269db04366e4f88a7209482f15a81b96a24b6eb95c51d09874754 25825e287c10e1d41c348147a810c1a3f0416b6b0226f6cfbf3bf5a4482b7ae6 1490990b349a4a9f2d1969a07f04eec805f835d273b50bc27af8e12bc6cfdc25 a621e37a89744f378378fa4a78f6b4928d70fdab9eb1537b8bca11020683696b 7ca43225d1887ea6950f296c44b846332260a372ce94c755c2bd66a0c6538022 44b82b25d5fa8c7fc42e2cc34261da7af1d49cdfd345f9ed9d4e0f642ba54d80 5f9928d475fda79ba985b307538337732006bac708f5e4451e9a255e3530dfa4 fef40cab8588aee6f0b71d05a9448fc3f9ceb30c71c4452a5dd93f8928b0c37b 007c88426cd1c58bd738a1e722f395e8ea7aa4c036aa8afaadeb04b813f2dff2 cdf94236a00c5c2e94413b3fec178e2e1836962adffc8aa92d0454540d07d239 fd62d483603790dfb1ac55c4a914fbeec22b9ea4d4f91247ba74b456558097e4 5d1d7bf52903755b4e3a2cb972cf8cf91212a2c53340e160182603418894cf58 eceb21520035819639e9cd061518e019471a4205e104c405cef94f96286a7b6c 2d218862205f72e8f70cffd833b9c6b947e38ec1ecb61c91c3be8d60423d4a48 032e6faf3774ffa949f5dec181fba4bdb61ee45f2d8ee18f2e676bef8a6a80c0 64bc6408c61dece2517baefad05201a56997ca139ff35a5b54341165435ff7eb a056ab6fa7ae0e987dfbf231e8892a23a3d9e74a92132c3bba5ebd1438c9a93e b94d553d519a46611fc7e90793e5173156e05351dfe09d7250b1e0f806874803 cf1a9ac65724e0e7d12e122862913e62b78f71326d4b56fa1a20a9c6a574b328 f0651a00f69faae313bed805b6f63cf258ad3d785143d89f94878a2d6e825230 516a223e445c597df52d6dfefafc74cd636efa58972ea6d0e661ed02dccd158d b450344afec68f350f600f506ad26956f7df78af8ed928dcd8f2f2410802835e 2b7883be4e6bf313d1f4bfdb27007905b90a0b60b15dbf04ab82d006cd69c924 542ce048891e905b032ff6b2bb9d20b44304a89475c5bb87471e16d789f1c3d0 ffe121bfe78b0ff4b6d847018ab9195077791396bc41d0b5653373df4387ab61 bef01e6f5481e8cff22de928d5ca084c037aae138288f9eeb15e1393219e760d 86be365085a90adfaa61db8b250bc413382b55ebfe49d4b7bf5036060e4e702d 54356d3018642f07fdeb36075256af9862d675a7c5659b3c74c73ae9cefb88d6 42479487ef008179cb7c5c1b8f72effcd9ccdafe2060674250e732ab2d1b69ec 79e2f70b6c1fdce2e2cc3dadf1c5ff5cb3037cef7f66bea5f2ec11e303f69264 fc8eb7c9653960bc1bb19b95a650c27b9caf579bbd4a8f9227d0be02812e57f4 f2d842d3d87415db22c12a50707a0ded1ea96fa3ad3ce5478fd058bb7f8c9fdc 96111549ed5c04a0c535f172ba3006896ba91ec68f478df96a7262ccc746441a 68ba9d4e13cd948224493ae66a4ab9af8cce770d52e351a05b60c102058c590e f0432964454aeda4379c2ca54a7e30e55b2f510b2d0003b19cb90ef12134ab3c a7f0e20a50baab7acd01e4f40093e432beb7fbd6f44808a941b1cd4ca75d32fe 863c49f7d6ed8af7079d54ff82902dc0b01697a9916ee71056009bde8238629d 4b87e237aebc396e3787605abe53155223dc45c12a5f75e88c5875e99d154922 80cce083e6efbc6b249b9e520ceef7deebf2e07c3e1d5ae486492547b1672022 81874ae4a3f559c037d3f9a8c7a6a3206e9c8751a1dcf309b0adf78bc36aa4cc 5c001c3b85d1dfc9e19c676a95be2d6378963b95e5db773d0df63d5e2bdb9d51 5b6178236c4e909079b846706dc0df0e8d61a485195a0790ecbe12c6530f4589 81f236235c1044eab46692966976466cc12a9033ba970621a8ade750363f0535 e0edb289beeaed747409515c556dc7a05ed0fa664043bf0b5b58d944e4c460d6 7649ffebf9a0155946b74a5fc4f4d2fc2ad85bf06d1120686561946143bb14ff c4ab983e9fdfdf5b9ffa2f95ff90a90ae0557fcb50aff29b81b08d4167d2dd44 09e948c06c3f98d32adefd86503c019cd5acb8f4baadc18f227c36a6f3ad360a 8cc5deadd6f6b30e14434b3d1fe89619585709f56a546c3d75f76ea34e7b27b7 b3742e4c249f029fe4fd8c34b57917d7925dd2e1aec5a432fd0c75f49f162af2 2c7b9bbc08fd1a495cf0da1170fe1a13ae53d45b712a33704f5ef7e4601fae36 5143c17ca952870dd0f6324aecc2510602c7b47fe68eb2c0aedd3f7c3ce8c0c1 d729c6976b8f1d6de38347aed4cf1e882fb8a3efebee0f2128657afc9afc73a4 7dddaf97f33277712394804bda53872097353b7863287b4c5e83cd1f26bd6df6 17e27acb6a8877985ffc96c123f39812dd781fa3ba8b84baac6ca5663fcffe96 0b3d848286fba750c9192452360027d32b13a9f6e3498864e9096c7bb4abef01 b95696a6e620e8d7ed5a1c5b005e42261c8497eb926d8d72a0ee74f0ede9d7aa 3b8ba50c52065b264a92114d8fa5a3314fa2428e865a28b616b9eda1a0b65241 4e679a194815c5d84bda805e9ff427490ac9daff775a90f5b87853a39ddce1e0 91cdf1d5286a137c7e9bf1581a0ab4210c29d00d2402a65db5599e3a3dcc73f3 882ff66653135130e141ab04f63f6588ab031e361300464aac5dec8ff6c8f554 f1c7630a952c43f35cf31ea86dea10421508aee7ce6b755f41b5f4e5d1066065 4e2b5031ff074251236ab5ca377e7e4872766237ecae77aa06b878e7e94d1ce7 8a704907b9d3b27364fd23922bf6c38cf093ba5a6a674e0ef033dbaccd36a963 6a6fc053205c111ac5dc4877a10ba4f0e396d6251110f64bc78d21e1d65eedfc f2cb66518f978ecf4b91fb6c300ea2beeb37d7b62974f201ef642bae1428f839 4aae8546a7630d187cac0aa26aeec13abc742aa9618035248c28946c757f0b75 9226e4fb4ed97b1b728304f8447e9eaeda6ab51d618224e6decec2b9a0d17b4d bb3dd0758af8f9d59ed9c47204dc623d5faa282a3735baaee37dde920ffb2d39 2a35a505590a86eb2a985d061e02d3d4f36feb6b7eaf0860fef22d8f8657db55 92298efbdbe0a53fcc0768818f1da8cb741a39e608c31c68a7ae97406451c4a1 2115f9fda77b2e9c21bf2f8b949e675394278f8caf07c4194e6139766ffaf114 4a5f0818149eb474e610596ed8f713ee37dfde0d7aed625f1aec695dab2fcb2e b93adbf741af0e4885582f58c06b89b6339342d60f86cc7c427fa7c9ee2b1216 a42a07be92d69689e8dd70da1ba0001fcecc80c3a2ce1ec02112e934efff30b1 925f4e8b1238f2197557eb676df87a91fc7b885de36490475371fcb7fcec35b0 1681e268e7e8ac100b5ef88ca93c91fa011fdb30af5f2ec8574c81f16dd69bc8 f62b3d6073b5888bab10d114ed98deb64a8646119e6f57e828892183abbaec08 20bfcf22554631ddd94ddc58ac4bd250bd91e858efd60fec0e4cde07d9250a36 034c1801c54edc9389027fe859a73b1dab959a7da810c1a3f0416b6a56148e83 79b0d7153b3029c97d972c0178a40bf29d5df2cda0365407b5b29dbb0ce2982c 4c384285d73fda5d65feb244eb48845ed9ec42bbe5397a1df052f7c02afbf50c aeac263283f147b200fdc050b39e068eb4b943092762c586dfa6a9cd79aad4ce 2a3104677cf69565dcb79aacb4a37316908535acd72fa0bc8c1042520a15a7c8 19cc4ce79578bd03cc3a82760565de42903f13b86f58c7a1dd73839ef0dc3a6b d29ac57c821341328c5a0cf0b1ea3b8da7ce50c06922defb915f49c404636f1e ae4a5e9de17f481df5b84f6d327fbdde4306b0fe55fa7929f82ef5402cce86e6 8955706275f90daf7efdc635611ace79a37fe59e6d97a192fa0bb90431778179 833e216f9969af24e859ffcb5a2397e831a76f106e667f9de74d362a65b2a69d bb09f1ace47c98ed70a2b8c77645e8db050c1e41828510372285617fd4f24c3a 9e139c85f818b69e2ded1e19ffd2bd2850bd95acc646a3cdf91b759abc4576f1 bbccdffc6ef57a682a4a80d6e22cbf870dbcaaf949cf89a708bae53aed79601b 33fb21f935deab0d0654178bd0df716f752f8e6e70dec035626dcf1e7da2fc7c 61151674d56192ec6197e2999113d56f9b10ea2eedd17c22bc1d4e2767e531ac 4d892c2e7f0e1e8d467abd278bbde0557c21e1d887b5497883e42ffe890e82b0 e1b38172f65d4c28558ce104e53fa8c85c833bb33267804c0e186f09e4b66258 7dba6d6912fcce2ac70f38c6c1efb13e250423bf86356a0e97da2c4ff7c22748 aa9b0193a82c07f2341a8ea7b4e2819c2793d69c1dedf9f56e03bde15102c01a ed06b759b8510a5d92d241dd32cdec4781676e2262c7063294fc1807bc6d03d1 ebc7d020ba1f468a1bd97ccbadc093c23b09902b1effe308e0c0f6054be5562d ee41d2bc929ab7c7cd9922e879b7fcd9f4d1ddc734425358b49a79976011d798 43e6562c5d5b661e2233630e142f6f724b1c64af42c3e400f9605922632b0ce1 3291132aed69a70773f9e1357d423e689f734a80bbf4ac67fed36622c820fef3 deec117b7b970fa5599b2d527254c475b31a302fcca78a4c2061c6cb97dbbb16 e9aa65fe9e381238e32fa6c1daa820a62ceb197f955999ca752ce19f4527e25d 57bdb877fb2c971390ad91d183832fe3932d9acb6c8c652d091e3fa460dfbe66 e1d8bd99073095142b7943831474a00bf441b7982978df73bd8054201f4700e0 fcf7ff5e33bc0597ad4e5187dea35b8c7a9953c7737975d9dbbbb8441ca134a7 9fec90830d716b5ecbb6b5e575e26f8057f5eb96a280f513f5b649608fc16cc9 294fe39ed4c0a0a714d679a2d66ce9fdec1a50a9327ad81f8450f0e29a5c5c02 77a9ff2afb37f41f563a7ce1191eabbc368e553071c669ccc15da416a319d6cf 54c7c4df9bc118d8ac86caecb9d700510dbc26aa5da97b5979fe2b43d63ae912 e31ab343183fcb3a1a12ae1131dc149e1d0c78e742872e6aa786fcea962147bb 5230fb4918ae8c7ce597c99a8ce40d6449be11c7302cf23f629b06ee09153891 d310b8a274fe595bd8018d6db0608c4beb37229d5eda3a68683d07e37fe59f29 a069611391e66dc83e7e001107e8ee106734cda6308d30c4a5c7614df95308af 2fdbfad9fd8e22c8095bdaedbdd20d94f361226cc3386c14f8306d614cf32d21 58e8eec2dc56392563e2b3ece37f2882bdbca5c6685550aa57acef93539dbc9f 81c9678f989ddd93cf463bf5858f211537605f3eb0e93f2e56e5d5a35d4fe2af 241a0c911f1eee66b80c5d59f7a4ba2b8cd0d010bf9a34337153a0b16d1f3bd3 98581e7137627406ea5dd418b022360d42b06f619964f34849b4fb2f4b26d0f5 8617a99ca127fa128de582928607f130f46c97bdc714c4b5b40e73f25773b3cb 69e6de547cc84abdd11ce2641c8300c59703b61a1b1fa2a5fef98ece945e82a7 7d62bf6607839b5fc8960e17538ee23296f33c16ccaec3541646720d3a7e6512 37daa82dd9726a55208f3a4ee0e45d2d485b68bb94f58f425ab46052350ed1e8 733977a9d6463fd600ebc5cde12b6e4d5bee87c5e06d11b97afe463f1bbeda9b 6528ed37f7d1a289c0e58c2930a37b543d6d43ac0062bd36be9be732ffc79567 892ac18500c646ac226cc1bd60473ddf23a85f9c5a61047bd7d4844e9e79a0a2 2395eddd44abfce0aa9c4db2e9523460f1177a51d27a32b258ab1d0692a10c7d 83ec55562fbdbc329fd8c2ed24fc2b04ec62a3a988de00fd3245acc64c445522 ce44153045e22ab2b0107b62af1092833a700ad49dc8482cdc78314f142a4e63 8a753d51a36cbeaaf948e73d1b1b2fdb9a69511eebd13b8198fcf134c4ed5f88 36f5272211e69def427e4bc17544f1e52173736f9cadc75b53a47e998844b763 be6bb437dd1cf783ceb09002edc17de7f79e6c065a668b5db74757c1b10c4cd3 88cf5747e433b6e2f5077fb8dca952c52e555ee03231a1518f81015e3c1453fe 9c8ad04eae447df302fe3eb1e4187b9b96ed20494a5a5637f43b5ab030e8711e 22e2bacede72e280d70e3eaa0edeab0a5ee6fb4e979ec671e16a2936dcaba135 775c31dea0ca1f32694e62b5ede61bf202ef051e0f3ebc2f12d3edd379f495b0 b12eb017b85a687429f5e7811696fb9c91f1da69bdb690f3b88b8c3e1dd8c701 cdbeeb54702bce506f582f60f9afd75442453b01516347af59b7d391c14202c3 81d88948a098b9228673b8ad30f7d17265ee85a2d8eec6e1fb96ded64fd4f4a7 8592aefbf4ba6b041f01f30ab7207f4eba4206bb7a97836ee2a0e39fd8a6b6a8 ade01876a5d0afabc57500b6ea8613007eb5dc8f7dc87cd856cca855abe47491 4442f7f3cc198d58e7cd13700fe8b5b4c97cb8f610dd5f820423ddd67e0a154f 2b400ca3c99a0b753cbef2fde4c6fc8f52df8603bc6c699827074692c6bf335c 8c27f003c5ccf381ca26a4eebffc217bc88cfbd6825e2dc653cccb108b9956d4 afc53080c6eceb0ef808f09d78f8c8ea335607ca4d2cbedfd959742b94bce5b0 56e38d4530796b19286402691b07385d3d28cd81b67fd3cca3b26d400f31ea08 945b4d35a76a0fb48a120173dec8dd0188c87e4022b8a10e87e781507c9b4048 f0a5a5d634552361bd5f0dbf2a9ececa52ac90fb7e96a94d166013c418263a3b 2bb84bf06e801b9c3fcd5a3af38debdc5b9f3603e6ea0b5e5db93cd04df7b447 5f2681475b2f60b3c18bf16662e8bd9458dc172432d33512e426b3923b9032c5 9c45aba29461cb3372b61e4c17146663c5cbd8447e6591c2af4d033008bb5fe7 3702a49c29edbdd2c8142eaa54c63e5cea325204d7eeb82bb9b377639febecb4 df295c3f924fa61d8948553d570313e5a12d9f6ee5af0aabc17d2a067d837df9 43ed58322625d02d782cb3897866fac50c4bf3f63e76be9897bb7e675581dcbd f8ac57c9db4b3594d1f417b5cdde3d3472e8e096378a5b975ca6d2de2b21eebf 4e551e58b2b8fe3dd1d4aca857388f302622c8bd7487eb1ffa76c4350f086ec5 7cf20f36a03c33ec62203793429418cb6098b0bd07c1abb50bc1ea4b613b6b24 4488634dc81a77c561bbda87d69002af0394a6aad837958806827c9d18468317 e80e007b1533a744ad69330c24a4e16599cff2bbfeddc4ec4ef722d9d1982edf 94addee5afa379d9cef41a72021b0588b5762b0f572b8fd16c690290c87c049d c042e28a6dfc1587d4a5898c7399f062090afdb218076385f8f168352a78d6f5 af824b22492eab5ee59f8a4dd6930916ce4c0dbad4216362de51b5f73cb2de48 c1b493cc9486881feda8421325124bec4e91b645473a7f50633bda3aadf7bcb3 0c27750657553b950f4a826bdf133887cce0f7b52c6afce2080ffb81f9ca41ba f982ade0c25cd9c71f310e5d77e979ad36e9f9a5adcbd3f5f529e060e1078103 ceb55e593b575e0106b8ddc45b43fd96e930266427264b8eff06d40aa15853fa 2ac3b44835f7564419f3ccc1e50ff878287b9a8a4e0b58cd5aafd42e2ab4da82 7ce37a581186ca91a8be74a9320b4e5123ff23428d1c87ba426a41043a344e3d c9f749bd8d126cd127d1b7875e8f942d64b46720bb5be24f1519c1ed2fd41da4 0b24a43b4ed843860bb93bbed1437555dc6bef6496304941c96a9f1b10be8f26 2043bef58c2e5031ee057c744c8693e8e6723619bcba77a192fd2adec865f111 7020a78448071057f202099a7e461befd885319fc0be55b74895c88b774bf75b 2ece2fcbdaa8c3b2735699142b8605b450f0293cfb1e8e924f94d9f38ee514ef 935cf4b5842ca630f7ed0a7fde2f6ecd56c04616cfd4ad6d95b4c56c828f8ec0 0e6adb4d2c311e89df815408f2651c4a984477dcfcf97754d643a8eb4d872379 7293a36fc811c4cbbdeb54932fb20b0ddb3e1f910e63cf66dd8717d02a15ff37 72384468100a02d44eb0c65e76d4a7ab30a32347581b96c471d6c9814dd93783 0811e0337bff3e9d84a56afa0948db48efe51c168a68bd5f274644b0d4a2acb4 9893930ed3f6b80b53657b3fb8490fa5ae0afe0b2bfe83c63092b883926e0d23 ae22d0b5766e9c87caf1f0d6676dcb87a4e3ed3cf7c0a8044e223838dd78ab4e 22e831feaee23f5d699b3e23dfd310dfdf32f21da3f6fff8d51cc6cb97a7cb11 d3e4022bfc7ae9dba76344f6928121521e1b72222b46b3e57b292edc9c69717c 4190822857cd2aa3c50df8d0c2459d0335c3c062e709181ac155b0723ae0e1c2 416876f3534d7b96a73ed79815948d8bb40b4cf93ee129f34a59ab27a7259564 b57dd16a20dac12040cf77a52afd64e263e96a16488f38de5d6994b341d04acc f1d8af6425935a78254bf1fdcb12783bf1258d06ccea3c5555270345b30899f8 9355f8276c6ef3517b7ae9927c936df51c718e54d02cc613acc76dd3134a8039 3451e346b9a9716c55e097163b4330691a9ef069ab9320010a1363f7243a56fd 19586f20612827ca2076b6996972193472f91cebfcf19c8d55b2aa4389055893 d0da66be3cdf5fda779b943a11f1c8fffa3e7ccfe147fd7299be184f6c7d42c6 caab066c4307d9797a26f56dfe2a200c8864754047266be234caea99c9c82987 ddad25029141d1b5af12271e6e9e654def008ee9121b85d33f465f3fd8fb4180 0d113f75c68c62ec501537f65f5caf4ee1670a21b530c32d33b0ed705f8f8589 fec2e2115789dead2abc39c48357bce33c2e8db6785ea7b378e20d4d97e441e7 98379b1179b667dc680735345999c27aad44f21f6518c7335458f26abd7eb5de 8eb2a09fd98b7c45401d3154da93232aeac702b5e721bf84e7452ca3a7e9194c 6fceb9d84196df5b34ce91eef440b1a16811acfff1bfdf059dce6af8763adfab 55d8b391b549fe7165264e4556691010f44a315a99609face460c6180715f19b f108ed04132c778d02a6cfdf756d61a10fd30d16863a4dc38fa5bcf0ab92af4e 9adecc6f0a66fa1e1b6a6236b846048b96b1b07610525503d362138e9fde709c eeb4b15a53efaee88cbff978c4b8a4a60e300b6e9f736d38aa7beba953f7d71f 1b9aebb51f2408c211efd9510a62ef5a4b9827ae3dc5890e2d0d09607b495882 18f85b5cfaea9a12e2d7d77afc7397d53cdfb313ae0a12c30ae82200da14963e 26cbe5656e80ffc0dd2c5753af6cbad826cc81feebb04d727ecc31140720bbb1 93784227e62bd80f1d77f84f8066753a4b539201362f1e3e686ac31f0961cb0d 4bf1496e4c7bea0a4f53e13f858f460a9a11ebdf26d92ba49ea47305ff90cdec 7d24a3f0bfc7d68c9746868b29dc87606eb791911e84ef13511ac7585e0fd2a6 fd49c7408ca160558981daf7bdcfb9f3f7d74b0e8291fb60555c201de66dff2c 957911a0925c5aacc1b50515f45a79718ae6ab8f39da874a4bf9a354dd5380f9 3e3d70367de27e87ad71c384ec31e6b1f44391007f4670c4e1aea7ae8027c101 e8c6bdc8417df438e75cc90c1d447dea93d7cc991168423640c245527967efef 428d42bc36561dcf889f09fcc5992ba02685acfb6daafc342d9717675c787c76 fc4aac311bde24d0b6259828a0ceb919a2a80dd2ce771a005020c564f386bd42 6b25fe2ceaf0dc9207395d9942c994a5666f4c6d94b4d2cc71c409e88e7be0fc 96c94887b28c8411cf21e855d607d68b6c52d809715ff44d7974f1d78890eb4b 2c5fd4b71c6c84bceb5f6ae2b3f6637a151279fa89f7b7cfc8f9e81ea889336f 69e6491413575de40a6be5c33735cca75b9a2cdce22a6eb4045d65070c915c7d 712effe94dabc52f466112830c36d588af7cc6a63fd59bd458f5978d59a26a06 2e3f9c3d74e41cac14f8d78b646ea13db81a5432fd1372cb5e86baaf62e6295b 6362f6e41f7446307019c06ad2a7367187c0f26595b7c2592fe5c085c8ea2a75 ba26492a7cf034b5e1e475da4ac2b593cbdd148a1651f42c506635b2ca66ad26 6f4435ec568ef723c28298dc192231256b8f9b1bf417a1522cc1424a50ef8cea 9cc75de22adb9af9b20f11388f8ed402e2f00c98e42151aa31ce7d4ac786f9f7 8e819a5c6989afeccdd2e6d9419bc0cf82f0cde16a1357a662fc988eec903eb9 2f4d3fe726e16b31ffaec68ad12bb938f30606bdc97578d23ea346a34993ce6a 2eca6aba5d436cfea90d0d987aea79a03dae04a261ee72955842c07b176d4858 40a461f4524ef14ee8fef6a10cb53b66c7528786623863d7797ae2c8961bfaec bd7388e7dcf65621fe1829e1564e20f58af6ecdb10b7b7cbfa8438c2a9a74280 bf3dbbee0d2ae3891f2545aa8c4bcdd35ab8f805c1b7edf0ee325997b2ccfb18 ccb2715ea4b2c14c0f5e2c6be5da48717579e372d045325d8c8cd874d7e0eefa 683ef3ea0dec92b5d901e2fe77be4e8237e2ce82ac39aeb223fa99d75b186aa5 d51aed8133b76bbd826e7dba56cc10a259016022988230045a2eb7d41ba2cfba 21dd092607969950cf09596757da8c1cfebf6f4a43102d82d9a8a325b2182910 c7ab381ad9ff6bfe620d39afa9d72ef933349256b69df0e5462f42a572fafe08 d5999e8de6ed66f0702d37ed22977394c7f76610d886a42c89346ca7bbfe0440 962fa4bdf94989e8ea05809b992c567f4e509f2528c10dc1819be3020ab9d1ce 030fd777b0a6dea6a56bbafb0a9cbe1623020c7a338606381bb5aa1a9027c311 ee7ffadca7d065cd821cb5b4613f501548a86cde54a9f064409e6b206a022987 f07eeca854efb487ba3d673c2c75b2b78d97e0c8a780403a103e742c81e01c40 5e65a625c1c8f947bd7b0d7c067e2ce1ac2614de11341cf2edb5b00e526aef45 ece498cfa9b4b39ee9d0088963866365a8a383ccbf735eea9fa764098f1449d6 746b50d703712a780c5ba5125c4e0142525685831c7ad03d884a680759f1014c 5b3166b82075a18d3e15037f2c86a2b29b8566b8b156e67873dd63dfec312717 fb9c141cb7cf24115e8d035b080fab494c0cd7d08a1b37bdb65ec432bc8e3db9 459138828ec79cf4a2d339f12273651f6eade9adc2f6df0181b51e0d4ba0ea3e c46a7ac3c7a7402b15d59ab36dd4da69a3424ee748316a36db5da576181e359a 08120edb8dfb40c209c6dd08959ce59b440ac24ff4ed852b1521b5049980d536 9a7ca16407109dbee3b33b220cd407189ead09d81d1f9de43c76073e9469f3ef 2c6c36f8a1a00d670eb27df9ade39c466b58f8a3c4c5c2c79b7614eadd3e9881 920ce8f0c5a6e4b9714ac63b06ebc725b31c2e252061dc9196d7102dbc72813f a19bc209b5aa8e56268438fb053e0c9b73321011bdad75018748d9ac56448115 28bdec6cdfe04f98d1e4d632d6678e0ff8fbfcb1c44bc0e23ed87282d6607f81 2014388bedd154b01d17bbf0c839fe50292d3597e87e9e57d3cd69ccb6ba5720 288ad3eb5af52a2697cd9f48c213b4a21cd5ebf0f8b000c2db20771b0d34afd3 753670803aa40d34f45bf7c6843b733f9a0e45ad78622c9dd291bdc22274c2a3 c5a9f9e4aec89412d4a3490fe84e5a12435797d3f8202162e63cc7a78776776a d676f9072ed9056c17b80b9b35885d75aeab4debfdc5d16588349801596b9787 70dbb817718bffe7c29a0bedc885cd0820ed7560ee2d1cd29d69d6c1d8842e37 f8ebb6212209f6e75243599aa86753282a2f2fd01b3568e0e3ecea80f6ee061d 8d7e7994b9ef9d23fc0344f4077c992b300bb64f16e990cf84332b16d41755fa bb0d478c2adc203a33f083af1ae4a509af9e8f934d062879b38bc1aa2e12c7ee cb4b69b5640481452ff6f7aa96133123d81da6dbbe50b91c7e743eaf2a817f16 e2d51ac4d9c7fd9a2422bc8b1e0df8c3a8358188f2ae29a8af593841ef5aa822 df3ecbdf65bcea155f7e054c5b1472c40477515db1b3d4fe26602ffe1fbafc7d 6775477bf1a5a4403b7550ab4a970a60163179945466b0991cabda30a33618ff 31771afb939ae377eaea92528da16393c0cd0ef6e29f64afa04388155ef326b6 94d0688d0b97000e5d8acd4e08a3cd5ab089f3a7e6d86f26a3ee5012e6c5dcf6 54c75676ca3e10082b94c81566386c356b29278b4bcb12ec4a6d9b2062472191 31694b9cd6c86bc4d57a6ffec4a59e7f819d1e88c9e8b20bb09b1d99d9e35ad9 69cd48096921770c564bbcd52bd087ca7bf17322949b4559193df11be1081985 35c593593e7fbb334f0f81f878b2aa0bf9b779f33b02d167c13184832a8c2cc2 bab19cb375d8803e7b365b5a6f101008890990be0476c85e5e87c5792b02e35d 832a0b956ae86a1b8ffe821084dfcfb128a93a61845ad1c0ebb1a1207adbee64 c45aa8891238722854674910d2f5d01c80186e10d6e3953b7850696c8865bb74 ec3e6bb4400bd5fe31e5bb89cb9d0c6ea2a9842bf17c2b465943617e059cf61a 63c1f40981c2a1e19828472dd48d0f799cde77da924c0160d1798c948979959a 2e048eaa12ab1ae174c35f463fb7ddf0fd3c68a1bfc54169b33f918f3806eccd f02ad4247641a7111037dfc78accf8fb5244f8e164358238310387ad88e1cf30 7e71ebf0c76cc239062ea8f5b8c5b71d442a9d0730f053d2da728036e70e8fff f4530d3ce572cd6493668cf4d69e895f463c6115b1552723c176e39b2cf42cf0 07d3496f289fe520aa4bda52efaf1a6c0b8d90dae8a59d92a802447f916a5fc5 75ceea07e0927669c8c278fe1d0f82664e923041a65daa360728f7c58fa153a4 c67fa4d07c059540523a6829e3380e08b8f549f636b0878f03940bf53e64c4e4 daa2662b79a36c6f5f4b2eac5a50edc051886eccc8e78e6afc72fa41e0a1b07a b7aaadb5e6ff587fedb29185f13d28d0a68f61447400515c2a6132aa3e1a7e15 660d0c7dbccc9e1b225317b7e46161603da14d6e420f30a74bb021d88d20b26a 991c262e870662bb000abf37ac39465595a43e778034d4c1b32b15e08e561c11 7f9edc2f0a0b92c952b3e5316d2655c018afe2ce80975d4545c65a637ed09589 160b78d7026536bc06d83498426aa7ce4b45d8a9094e01cd711a0c5f0054b6d1 3a4b2d6a9d34e5dedc8e6768f93f2b794ce361ddbaf2ffea97c7c06731e7d120 937d268177f893ecbdef763aca2ae3bc51b0a919ccea032fc4bdba79cf3d3c09 2ec7d9ec5fa6f73f0cf44f858ca955b40be5d2518153b0a18d2529343923b3e2 68f5109ffb3ec3891cb3e3342facfeac129f097b7e4b7f2bff174f4552426d8c 2c414301e83d1d01e7a0c8a86568712a489ec7509dcc5d4b4e96f4a463cdd82a bfb60018828301dc2ee168bf13eecbce1bc2cbc11accf6c2cf00623f5a04562d aab1628cf9ae25da21bfa157a273f2aa5775fb1e2e934bd9e559d922e59f96b4 72e5b77ecac6c2b916eefd6af70d848d06cb57d1e084b95bbb1d3480798010f9 4b033385e39d5cae8580eedb9e18c8dddc97f65dc20991ed9eeabf73493d2b7e 18babff7a77751e03ace9298a4ec277bae9b14820ff9bbeb38802b24a7d8ad14 e060677dd443f3bd248c274f1475a11a0ba0d08f090e2effb8cf030cc96c7a6c 098f4ebd65b2df95f26d2fa2be031f39eb974a84ef56b9b43506fdb7f156388f e026fb5d414e7109e966df5bb761d2c49ae4810fc039cf82c66835a547e68514 749684059ebdd3ee2364c8bdf42e1f144fdda92eabec813c6d65f7b9ccc1a64c 66694754c8a364f8a4f14545efa2ecc3c0d0c71f97813e0131cae7bbb09f49f2 42ff84d0901f82c2d0ba488f4b299a1b1a247693898b280eb0bafa99288fcc70 3fcbb7a92ca8c7585ef3d7cad7e7d122a2db0ea7bd7acd82ad8754feb0883457 664e9c56ef5f434de3d6a1dca895db062c3b0a97516f4abeebd1082f35a1e067 0b8c8e4533e5cdba3b638841557732904cb38b9cae8327ac4f9c7c2aebee5fc2 052ce9d55d172423ee76bf7f51f88cfb8eedbf052c8c4fe76b1040f897197f06 705178334af9cd9d1743eeb0ac806709b975fd7665429a6663d63d83e3c06e5b f8f49049e5e42e1385260f8b48468260fe3904d734758f58e0f43d75c981e50f 40cb80efc47b8d0aa69455702595cc5260af40615a464cbfe0ec9bd0fffa8bef aa62d89dca5d9e88b3ee2939374444838368192b7aeabf9f6c0f2526d7ad11f0 fc914f128c9e563fd799e39ecb81c3b3322599762d0558274896ff1ab9be4f36 f47a39396800db5b6a0a135ed691146c4148d7b6ffaf8d785ed8b98d38c014ed a02dcf3a79c46a39c554352fd80304899b0f1dac1e1ed4c04ed0a243cb94eb78 bf6566da8c6a80c4db03763a892022eec34e294d7dcef72ef2411784fb657700 014141953e60b7a1e46723574af005e2116d6294831c868d7e763af97b374587 a8ef45c20c9597ff0ed3f118ac4eb9a56ad6c7cba773475868da68e4afb731cb b6177bf74aca1e0124caeb3b539303ce9582c9b79addf48a7c90fd46db8a470d 8ef8057d6fae8ebe60c4bd2a49582a3851a9c3ce9915168763b263b0b2122840 38d2a14a7d999c0760d803fc0f0f29ae4cebf841f96b90833ee1290f7587d29e 515c1c2ba573c343883c17a345eaf8dd2604e8e24989b77db5b68315f1e9c11f 9e589e767bb30a100011c5ce2ea7148a7fae9690a16d458c4411beb6cdc8e29f 8a15a3ef7c21df0cff3bbc65c297941e17181b3990073e715ea086970bd052e2 c40f97132c79767b79e25fa47f44d4b499e37db4a5b6faa55ff87bd022590bbc 68c29c3c0d44bc3961e4d733bd842165144bfeb5cfe979023cd8b868be95d2cd 4c84910cd576b0a108dcdd2a8aab3011fe758300d15f1b77143233c2ed738ef2 e398072717485ab798278c1e0266ac489e354dfcb87791a1f51b63acc98fef41 b5164e225e7a9a0d7ea444d72982cd5339df1f3886856aee8c2d4e458b33498e 3c5ba200412865bc90b4934103324743d7382418807c752c653de98e24aff8a0 c35933c75e7c9618570971b5c48d4b04c6f7e6409533fe47f0fc9353236d46e7 602beb72b80441548ecca5de11669063ee22a6ab0d12648b11d9e361625f45d2 b53b0644b422771f28dcbd47cd7828c1f65ae2c81d4a8ed768f89c5ce5c5dadb 2b5d8bad785a2db28732c396dd55c20523ffdae071b2d6708b002f1e27fc736e 495c1cbc292f48a05b240788efedbf71e6fbb45a672761335e7f4fd63d8ab9d0 6dae13cfd32188d7f4c6cb4eca727dd35a4fcaea9a1db27d66a0f71694aa309c 4048ff2da4a2d1245c0759491bd7fdf051ebe7a900d7966c0f697db87c02b69e 866ce2862a0e1ea28cd9506b60b6018b8d5a69cfeb49aeed6d82a70a6a6e9fe7 ef3a992ecee8335d500719a6a1c31b8cedbfc52770c0beb06697a933fe5f3786 c2c8c7e3253b45fd97911236e91368843229e3e73958cb4dcd8acbf17e0e7590 6553e2a78f27b6d924b0fb41639b8d5e4f3c4b7b2bc3581dc75a09257018ce59 952ea35db9e1bf8d646335f439ae82071095973edd306f10617d18418e49663a 24f2cb1b21a69586b68b9f65874a39c346a8eb401c0b089cfd1660e95e7afaf1 bd1b97dca6f843c5ba166bb2149ef5808c5bada8cb9beec3848db608e1d35c2b 354cd89a6c6538df300e6a2158b183a07b43446269b449338b48873f9f01858b 2694031eb9352e6953f5b39d93401fd0b21741241035985b755fba60f15e1625 1a6dab089e4ff430bbd3b8618453cb4637da6ba3132c1697cdb76b1f3b10ec5c 0f0ef365ac134902f5aad57e19dece0b1dee1d0b59c251f3fbf6af8dcb8fa136 8d311a1d553483aad707f8a2abee5e9a5e132aab5546d32b3e569022b3e0d128 e0e51220ce64412b2cfa38e2e7ac7ccc766d0f6947d613bb8df48df0869320f1 bd3f23b0011961fc00909aaa32a59999d2e980c0c2e75f4c5b59d9e90e2c6b91 910b82723332d166fca7691f2a6aa78588bc353457d6dbe9c7386005ee3d2fe5 c7279605280e684ac431aeb824fe8574e2bbf8e2c36dadccb4d22837c70ea1ec a8f65275e4d2baaf4183f0d500259646a96e8eef764248913041b061e36ba633 1347b2891f792aa173aa757f849b53d8c430ea56be9a843ea04b16c7c2a5d9db b24dba3eacc5f55082b12a8934d834e6c29e4a1009641497c49c744a673d6d61 a171deef5307e92ef87eba6d464eac28bfc60005c9d645c1b05e91370f150cf7 90574801a323498986b6deb7e27b28f97a83480f938c0519add1f22ab4b0c64f 9639fc6c9f4b629c5eb07fe3a59807511daf6c70715cd6e085fe30cf9f9d8fea 7c6af9e9a7079ee6ff5dbd4ad4e76f54e7451e33d2ccd7b42639b53eae5c2f51 6671efd2cbe32a59a425e67c2fe579ac9fe03ec6d517315b9f1df4bdb033f177 aed63d7643e60eae999fa5fd33315282b2323d89b0deaaafb423519e35c55bf9 2856aaf12841385aa8ad46a7cc2a9010397af08b5926e2ba54e83f0ad83a4efa 8af7ed1be48af845a42289de7122a58d27e19ff978711daa671b61069520811a 3a2c5a815a53199aaabf77c8c201ef1f5c7df0a45b5d9e4d16eb5981330d3feb ad38ce00e19e317b1e151c79deec2673fcf7c1db083a4b081e58a79cb096d611 28777c1360f0915fd3a9426ec8594218d46f70881891a5700473bbea40719a46 d9a45bad42ca68833f4e634dc5a5d52563a25bfbb5e4e1162300dd202335374f dc8d21d26ed2890edc834c01e4b20941a1bcf6ae8bac1a415f48b0827d297ebe cfdbe3306b0be8eaa152b436d8323bbc99691f540e30d9f60c6bc499caba86e8 59250b2947de0e39a85a54aaa67a0ac3abbdfb44424cae0090d101051d941b51 3392016dd339b94c82f9a9ed9645f1ccd7735ba00cb7bb84d122a3bdc91fedfe 0029569c38777e66a4b828d0a25e76e67e7c633d319f4e3d0185c07972ae00b6 73510d4e3681dac5fd0c0d2b98a68c61ebed29fa23bfafa141ab5a3931f41deb 5acdff84845244abee406b963ecf1de65ed485c63df8f0fce46920295736e896 cc0ebccbcfcba077fd5a9a2fc32d773d879e726253e030254734fdb76aa6f7b3 aae8238aaef764252a3dac87a41019c34d7d1c3d559e936f20edf3a0d5949874 01b9d3e68f4beb2a482d0c7e83e1abe3027f0d18b9c1eb18b6324d50f3783f0a f09b7071478be1c58f906a122ac3b7c92eccb53023060be97f9c7bbe14dd46a6 49c8a6057a98dd153c782a00a829bbdebabfc7ac5c374f3490ba20c6dd56640d b0f646d8940ed243fff2aa7650de3f1a74918367ec16158466301ab3f1d8fbb1 56ae0cff5ad1a144a010a1104bde8dfbe77b187cde51e7515d0a3561e16ecbfb d1eaec87760541a836098e707212ce9b940fa45e9149c88361cf5db7ab3480c9 33e761aa645c50382ae65b4f3df881f1f0b0be847b1b5dcdca79119f71e96a07 21ae5923a942f5b7bb1004e83ac8b92a46351d0b9d1faaaf5f7c7ecf2681453f ad06dd2c5960c9eb3073432c46f6c58db7df6b77d95798a6d31d8b1cebfbb283 276f821bb2f05857376060d2a0a1b040818c988e87a810ed2744f87277f452b0 216e1c11a330ddad66c85a8fe8b11d798d2431488c67a4eea63e60986b4ab9a6 778738fad1f53346e65b3861b48e6ca24be0239c08a765a5f478b5ca93ebb700 6c80b9f939a2af58dc0655ba52dd5ab65d5775c24636d5fcecee03e664f9b662 1528a2f5392b60cbccbd93747b7ef9fc4fe6f4fce0bd5939e7b249a94695ebf4 74327b62066fbbe6d30d711edee99c9c708c7f2e379740c0dd0ac614a0d52bdc 8de7fbeb5a2253f777810379217f971ef762d1d6a9a3f1b14f3b4e61b74773d4 9d7a20aec50b3426d3210d815aa404cbfd2590496132a6f9e30fa24c9f59efb7 3bfd238f910a5a70287f6bffe35479e449c375e0d98dc30af297ee6561636ea9 ec8625fb34f2658f330de1fce69fec084aaee16372efdb6678d301978a45083e 997984bddb520e2f00c9adf28a1d58bc1fe1c72b7aa56f09356bffa9f2f52adb a926ca82ac50fd2f42d60e4220b9aea4e00e5b95096f8568f156b3d35dbfdcbf 88f50678ff25f720cc7598474627423585b91a2c2fde698dccf5b0896ff79692 f46c5eee3b7dd32e2324b136ff002ebfee9fe18421a196369ed8b77b994320be f186c3f3e5bce035d2f2eb1695f551c0bd23aaf5d272a3e8d72e84f0d2353d57 504029f53c048d4452c62259c3316de492f4d3fda743d40da37fd8b3ad3ea6da ee10ba320a4b63f803ef1433d77107c9ecedd63ea0624fcebc73d907e409bea3 c17b563d6614ee842bce080059f49ded353cd07d4368ef862b87dcce33e79d21 b56f3f39350cbee9fcc873991646df7fe8c4e469f1acb3915ca1aee218cc386d 1a2d026143138f5e088753848766d7e5635e79203b069408955f5f8a979f25d8 039b06969907936717d6e1c53790c5f1894e62761215b059e688329e354465a6 20b55f840affdfd61beaffda3a7258568ed385cd7c48817071d14590dd25dd06 f4355f61514a01d9110fb490d1647ef35ce6acf5818e049ee1b2478cffe5209f ae3881e6a6e3cfd32789494b454cf5a357336be6315eef1e607f3a7304c2aa15 5758f619d90574f10ee4710bfcda0bf460270f6f4e530c77ebd4e50a19a2b514 a9592e6ef38712fb0ca43a528263cef956bd72086a27b522d3425485749464bb 09e5290f99f1f09883633ffdc528af46aca30eb0afa04a3960197943b111b491 dbf78066751ef21dda634f63663546dcb68b789169e86b53dc1a53ec37c64db3 93b6153fb06536cc83d165a2af6eb520bb8cc5be621feed41040fe33492fe1e5 9e993fea84b7221b18f8fc9767044305da7ddcfb7c3136ae9412dac357d8af0a 953681bddec20f58eb683ca2ddb26791b7f1115e2c37af00b2ae2c014f6c5e1f 3e7ab822276f3a90b53e23238b7dcaaeed86da5f69420262915d2a0123e7624a 4be16642d14381b17695abb2dcc1f39178ab5ddb0dd124916c48307e96fd6da6 e5b0bd577584203f38bbf17caaf498af2dfde5f9148215b064288b581e41f14b 5d15aa76c68078b187f6d6 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont TeXDict begin 40258431 52099146 1000 600 600 (ex1.revised.dvi) @start %DVIPSBitmapFont: Fa cmsy8 8 1 /Fa 1 49 df<137813FE1201A3120313FCA3EA07F8A313F0A2EA0FE0A313C0121F1380A3 EA3F00A3123E127E127CA35AA35A0F227EA413>48 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fb cmr6 6 2 /Fb 2 50 df<13FF000313C0380781E0380F00F0001E137848133CA248131EA400F8131F AD0078131EA2007C133E003C133CA26C13786C13F0380781E03803FFC0C6130018227DA0 1E>48 D<13E01201120712FF12F91201B3A7487EB512C0A212217AA01E>I E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fc cmtt10 10.95 37 /Fc 37 122 df38 D<141E147F14FF5BEB03FEEB07FCEB0FF0EB1F E0EB3FC0EB7F80EBFF00485A5B12035B485A120F5BA2485AA2123F5BA2127F90C7FCA412 FEAD127FA47F123FA27F121FA26C7EA27F12076C7E7F12017F6C7EEB7F80EB3FC0EB1FE0 EB0FF0EB07FCEB03FEEB01FF7F147F141E184771BE30>40 D<127812FE7E7F6C7E6C7EEA 0FF06C7E6C7E6C7E6C7EEB7F80133F14C0131FEB0FE014F01307A2EB03F8A214FC1301A2 14FE1300A4147FAD14FEA4130114FCA2130314F8A2EB07F0A2130F14E0EB1FC0133F1480 137FEBFF00485A485A485A485AEA3FE0485A485A90C7FC5A1278184778BE30>I44 D51 DI59 D<16F01503ED07F8151F157FEDFF F014034A13C0021F138091383FFE00ECFFF8495B010713C0495BD93FFEC7FC495A3801FF F0485B000F13804890C8FCEA7FFC5BEAFFE05B7FEA7FF87FEA1FFF6C7F000313E06C7F38 007FFC6D7E90380FFF806D7F010113F06D7FEC3FFE91381FFF80020713C06E13F01400ED 7FF8151F1507ED03F01500252F7BB230>I<007FB7FCA2B81280A36C16006C5DCBFCA700 3FB612FE4881B81280A36C1600A229157DA530>I<1278127EB4FC13C07FEA7FF813FEEA 1FFF6C13C000037F6C13F86C6C7EEB1FFF6D7F010313E06D7F9038007FFC6E7E91380FFF 806E13C0020113F080ED3FF8151F153FEDFFF05C020713C04A138091383FFE004A5A9038 01FFF0495B010F13804990C7FCEB7FFC48485A4813E0000F5B4890C8FCEA7FFE13F8EAFF E05B90C9FC127E1278252F7BB230>I<007FB512F0B612FE6F7E82826C813A03F8001FF8 15076F7E1501A26F7EA615015EA24B5A1507ED1FF0ED7FE090B65A5E4BC7FC6F7E16E082 9039F8000FF8ED03FC6F7E1500167FA3EE3F80A6167F1700A25E4B5A1503ED1FFC007FB6 FCB75A5E16C05E6C02FCC7FC29387EB730>66 D<003FB57E4814F0B612FC15FF6C816C81 2603F8017F9138003FF0151F6F7E15071503821501A515035E1507150F4B5A153F4AB45A 90B65A5E93C7FC5D8182D9F8007FED3FE0151F150F821507A817F8EEF1FCA53A3FFF8003 FB4801C0EBFFF8B56C7E17F06C496C13E06C49EB7FC0C9EA1F002E397FB730>82 D<90390FF803C0D97FFF13E048B512C74814F74814FF5A381FF80F383FE001497E484813 7F90C7123F5A48141FA2150FA37EED07C06C91C7FC7F7FEA3FF0EA1FFEEBFFF06C13FF6C 14E0000114F86C80011F13FF01031480D9003F13C014019138007FE0151FED0FF0A2ED07 F8A2007C140312FEA56C140716F07F6DEB0FE06D131F01F8EB3FC001FF13FF91B5128016 0000FD5CD8FC7F13F8D8F81F5BD878011380253A7BB830>I<007FB612F0A2B712F8A36C 15F0A225077B7D30>95 D97 DII<913801FFE04A7F5CA28080EC0007AAEB03FE90381FFF 874913E790B6FC5A5A481303380FFC00D81FF0133F49131F485A150F4848130790C7FCA2 5AA25AA87E6C140FA27F003F141F6D133F6C7E6D137F390FF801FF2607FE07EBFFC06CB7 12E06C16F06C14F76D01C713E0011F010313C0D907FCC8FC2C397DB730>I<49B4FC0107 13E0011F13F8017F7F90B57E488048018113803A07FC007FC04848133FD81FE0EB1FE015 0F484814F0491307127F90C7FCED03F85A5AB7FCA516F048C9FC7E7EA27F003FEC01F06D EB03F86C7E6C7E6D1307D807FEEB1FF03A03FFC07FE06C90B5FC6C15C0013F14806DEBFE 00010713F8010013C0252A7CA830>IIII<14E0EB03F8A2497EA36D5AA2EB00 E091C8FCA9381FFFF8487F5AA27E7EEA0001B3A9003FB612C04815E0B7FCA27E6C15C023 397AB830>III<387FFFF8B57EA47E EA0001B3B3A8007FB612F0B712F8A46C15F025387BB730>I110 D<49B4FC010F13E0013F13F8497F90B57E0003ECFF8014013A07FC007FC048 48EB3FE0D81FE0EB0FF0A24848EB07F8491303007F15FC90C71201A300FEEC00FEA86C14 016C15FCA26D1303003F15F86D13076D130F6C6CEB1FF06C6CEB3FE06D137F3A07FF01FF C06C90B512806C15006C6C13FC6D5B010F13E0010190C7FC272A7CA830>II114 D<90381FFC1E48B5129F000714FF5A5A5A387FF007EB800100FEC7FC4880A46C143E007F 91C7FC13E06CB4FC6C13FC6CEBFF806C14E0000114F86C6C7F01037F9038000FFF020013 80007C147F00FEEC1FC0A2150F7EA27F151F6DEB3F806D137F9039FC03FF0090B6FC5D5D 00FC14F0D8F83F13C026780FFEC7FC222A79A830>III<3B3FFFC0 7FFF80486DB512C0B515E0A26C16C06C496C13803B01F80003F000A26D130700005DA26D 130F017E5CA2017F131F6D5CA2EC803F011F91C7FCA26E5A010F137EA2ECE0FE01075BA2 14F101035BA3903801FBF0A314FF6D5BA36E5A6E5A2B277EA630>I<3B3FFFC01FFFE048 6D4813F0B515F8A26C16F06C496C13E0D807E0C7EA3F00A26D5C0003157EA56D14FE0001 5DEC0F80EC1FC0EC3FE0A33A00FC7FF1F8A2147DA2ECFDF9017C5C14F8A3017E13FBA290 393FF07FE0A3ECE03FA2011F5C90390F800F802D277FA630>I<3A3FFF81FFFC4801C37F B580A26C5D6C01815BC648C66CC7FC137FEC80FE90383F81FC90381FC3F8EB0FE3ECE7F0 6DB45A6D5B7F6D5B92C8FC147E147F5C497F81903803F7E0EB07E790380FE3F0ECC1F890 381F81FC90383F80FE90387F007E017E137F01FE6D7E48486D7E267FFF80B5FCB500C114 8014E3A214C16C0180140029277DA630>I<3B3FFFC07FFF80486DB512C0B515E0A26C16 C06C496C13803B01FC0003F000A2000014076D5C137E150F017F5C7F151FD91F805BA214 C0010F49C7FCA214E00107137EA2EB03F0157C15FCEB01F85DA2EB00F9ECFDF0147D147F A26E5AA36E5AA35DA2143F92C8FCA25C147EA2000F13FE486C5AEA3FC1EBC3F81387EB8F F0EBFFE06C5B5C6C90C9FC6C5AEA01F02B3C7EA630>I E %EndDVIPSBitmapFont /Fd 107[47 47 24[48 52 1[77 52 63 37 44 44 1[61 58 64 94 31 1[31 31 63 53 34 52 60 49 60 54 13[56 68 77 1[77 1[91 58 70 38 4[63 77 69 8[28 5[56 56 56 56 56 38 28 39 3[36 36 6[28 33[{TeXBase1Encoding ReEncodeFont}48 99.6264 /Utopia-Bold rf /Fe 153[31 102[{TeXBase1Encoding ReEncodeFont}1 99.6264 /Utopia-Italic rf /Ff 171[62 1[64 1[60 80[{ TeXBase1Encoding ReEncodeFont}3 99.6264 /Utopia-Regular rf %DVIPSBitmapFont: Fg cmr10 10.95 10 /Fg 10 62 df<1430147014E0EB01C0EB03801307EB0F00131E133E133C5B13F85B1201 5B1203A2485AA2120F5BA2121F90C7FCA25AA3123E127EA6127C12FCB2127C127EA6123E 123FA37EA27F120FA27F1207A26C7EA212017F12007F13787F133E131E7FEB07801303EB 01C0EB00E014701430145A77C323>40 D<12C07E12707E7E121E7E6C7E7F12036C7E7F12 007F1378137CA27FA2133F7FA21480130FA214C0A3130714E0A6130314F0B214E01307A6 14C0130FA31480A2131F1400A25B133EA25BA2137813F85B12015B485A12075B48C7FC12 1E121C5A5A5A5A145A7BC323>I<1506150FB3A9007FB912E0BA12F0A26C18E0C8000FC9 FCB3A915063C3C7BB447>43 D48 DIII<000614 03D80780131F01F813FE90B5FC5D5D5D15C092C7FC14FCEB3FE090C9FCACEB01FE90380F FF8090383E03E090387001F8496C7E49137E497F90C713800006141FC813C0A216E0150F A316F0A3120C127F7F12FFA416E090C7121F12FC007015C012780038EC3F80123C6CEC7F 00001F14FE6C6C485A6C6C485A3903F80FE0C6B55A013F90C7FCEB07F8243F7CBC2D>53 D56 D<007FB912E0BA12F0A26C18E0CDFCAE007FB912E0BA12F0A26C18E03C167BA147>61 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fh cmmi8 8 3 /Fh 3 112 df<1307EB0F80EB1FC0A2EB0F80EB070090C7FCA9EA01E0EA07F8EA0E3CEA 1C3E123812301270EA607EEAE07C12C013FC485A120012015B12035BA21207EBC04014C0 120F13801381381F01801303EB0700EA0F06131EEA07F8EA01F0122E7EAC18>105 D<131FEA03FFA2EA003FA2133EA2137EA2137CA213FCA25BA2120115F89038F003FCEC0F 0E0003EB1C1EEC387EEBE07014E03807E1C09038E3803849C7FC13CEEA0FDC13F8A2EBFF 80381F9FE0EB83F0EB01F81300481404150C123EA2007E141C1518007CEBF038ECF83000 FC1470EC78E048EB3FC00070EB0F801F2F7DAD25>107 D111 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fi cmr8 8 5 /Fi 5 55 df48 D<130C133C137CEA03FC12FFEAFC7C1200B3 B113FE387FFFFEA2172C7AAB23>III54 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fj cmmi10 10.95 21 /Fj 21 123 df<121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A0A798919>58 D<121EEA7F8012FF13C0A213E0A3127FEA1E601200A413E013C0A312011380120313005A 120E5A1218123812300B1C798919>I<17075F84171FA2173F177FA217FFA25E5EA24C6C 7EA2EE0E3F161E161C1638A21670A216E0ED01C084ED0380171FED07005D150E5DA25D15 7815705D844A5A170F4A5A4AC7FC92B6FC5CA2021CC7120F143C14384A81A24A14071301 5C495AA249C8FC5B130E131E4982137C13FED807FFED1FFEB500F00107B512FCA219F83E 417DC044>65 D<49B712F818FF19E090260001FEC7EA3FF0F007F84B6E7E727E85020381 5D1A80A20207167F4B15FFA3020F17004B5C611803021F5E4B4A5A180FF01FE0023F4B5A 4B4A5ADD01FEC7FCEF07F8027FEC7FE092B6C8FC18E092C7EA07F84AEC01FE4A6E7E727E 727E13014A82181FA213034A82A301075F4A153FA261010F167F4A5E18FF4D90C7FC011F 5E4A14034D5A013FED1FF04D5A4AECFFC0017F020790C8FCB812FC17F094C9FC413E7DBD 45>II<49B712F818FF19C0D900 0190C7EA3FF0F00FF84BEC03FCF000FE197F0203EE3F805DF11FC0A20207EE0FE05D1AF0 A2020F16075DA21AF8141F5DA2190F143F5DA21AF0147F4B151FA302FF17E092C9123FA2 1AC049177F5C1A8019FF010318005C4E5A61010716034A5E4E5A180F010F4C5A4A5E4E5A 4EC7FC011F16FE4A4A5AEF07F8013FED0FE0EF3FC04A49B4C8FC017FEC0FFCB812F017C0 04FCC9FC453E7DBD4B>I<49B912C0A3D9000190C71201F0003F4B151F190F1A80020316 075DA314075D1A00A2140F4B1307A24D5B021F020E130E4B92C7FC171EA2023F5C5D177C EE01FC4AB55AA3ED800302FF6D5A92C7FCA3495D5C19380401147801034B13704A16F093 C85AA2010716014A5E180361010F16074A4BC7FCA260011F163E4A157E60013F15014D5A 4A140F017F15FFB95AA260423E7DBD43>I<49B9FCA3D9000190C7120718004B157F193F 191E14035DA314075D191CA2140F5D17074D133C021F020E13384B1500A2171E023F141C 4B133C177C17FC027FEB03F892B5FCA39139FF8003F0ED00011600A2495D5CA216010103 5D5CA293C9FC13075CA3130F5CA3131F5CA2133FA25C497EB612F8A3403E7DBD3A>I83 D97 DII<163EEEFFC0923803E1E0923807 C0F0ED0F811687ED1F8F160F153FA217E092387E038093C7FCA45DA514015DA30103B512 FCA390260003F0C7FCA314075DA4140F5DA5141F5DA4143F92C8FCA45C147EA414FE5CA4 13015CA4495AA35CEA1E07127F5C12FF495AA200FE90C9FCEAF81EEA703EEA7878EA1FF0 EA07C02C537CBF2D>102 DI106 DI112 D<013EEE0380D9FF800107EB0FE02601C3E090381F801FD8038117F0380701F0000E153F 001E1600D81C03160F003C170700384BEB03E0D87807147E00705B1801D8F00F14FE4A49 14C01200131FDA800114034C1480133F140003031407494A1400137EA26001FE0107140E 495C60A360150F017C5E017E011F14F0705B6D0139495A6D903970F8038090280FC0E07C 0FC7FC903A03FFC01FFC903A007F0007F03C297EA741>119 DI<137C48 B4EC03802603C7C0EB0FC0EA0703000F7F000E151F001C168013071238163FD8780F1500 00705BA2D8F01F5C4A137E1200133F91C712FE5E5B137E150113FE495CA2150300015D5B A215075EA2150F151F00005D6D133F017C137F017E13FF90393F03DF8090380FFF1FEB01 FC90C7123F93C7FCA25DD80380137ED80FE013FE001F5C4A5AA24848485A4A5A6CC6485A 001C495A001E49C8FC000E137C380781F03803FFC0C648C9FC2A3B7EA72D>I<02F8130E D903FE131ED90FFF131C49EB803C49EBC0784914F090397E07F1E09038F800FF49EB1FC0 49EB07800001EC0F006C48131E90C75A5D5D4A5A4A5A4A5A4AC7FC143E14785C495A495A 495A49C8FC011E14E05B5B4913014848EB03C0485AD807F8EB078048B4131F3A1F87E07F 00391E03FFFE486C5B00785CD870005B00F0EB7FC048011FC7FC27297DA72A>I E %EndDVIPSBitmapFont /Fk 133[43 43 47 71 46 56 31 35 37 2[49 56 83 28 2[29 55 45 29 41 53 40 1[51 23[31 26[24 46[{TeXBase1Encoding ReEncodeFont}23 90.9091 /Utopia-Italic rf %DVIPSBitmapFont: Fl cmsy10 10.95 5 /Fl 5 22 df<007FB812F8B912FCA26C17F83604789847>0 D<0060166000F816F06C15 01007E15036CED07E06C6CEC0FC06C6CEC1F806C6CEC3F006C6C147E6C6C5C6C6C495A01 7E495A6D495A6D6C485A6D6C485A6D6C48C7FC903803F07E6D6C5A903800FDF8EC7FF06E 5A6E5AA24A7E4A7EECFDF8903801F8FC903803F07E49487E49486C7E49486C7E49486C7E 017E6D7E496D7E48486D7E4848147E4848804848EC1F804848EC0FC048C8EA07E0007EED 03F0481501481500006016602C2C73AC47>2 D15 D<1818187CEF01FCEF07F8EF1FF0EF7FC0933801FF00EE 07FCEE1FF0EE7FC04B48C7FCED07FCED1FF0ED7FC04A48C8FCEC07FCEC1FF0EC7FC04948 C9FCEB07FCEB1FF0EB7FC04848CAFCEA07FCEA1FF0EA7FC048CBFC5AEA7F80EA3FE0EA0F F8EA03FEC66C7EEB3FE0EB0FF8EB03FE903800FF80EC3FE0EC0FF8EC03FE913800FF80ED 3FE0ED0FF8ED03FE923800FF80EE3FE0EE0FF8EE03FE933800FF80EF3FE0EF0FF8EF03FC 170018381800AE007FB812F8B912FCA26C17F8364878B947>20 D<126012F812FEEA7F80 EA3FE0EA0FF8EA03FEC66C7EEB3FE0EB0FF8EB03FE903800FF80EC3FE0EC0FF8EC03FE91 3800FF80ED3FE0ED0FF8ED03FE923800FF80EE3FE0EE0FF8EE03FE933800FF80EF3FE0EF 0FF8EF03FC1701EF07F8EF1FF0EF7FC0933801FF00EE07FCEE1FF0EE7FC04B48C7FCED07 FCED1FF0ED7FC04A48C8FCEC07FCEC1FF0EC7FC04948C9FCEB07FCEB1FF0EB7FC04848CA FCEA07FCEA1FF0EA7FC048CBFC12FC1270CCFCAE007FB812F8B912FCA26C17F8364878B9 47>I E %EndDVIPSBitmapFont /Fm 107[42 42 24[44 46 44 70 46 55 31 40 35 54 55 52 56 84 25 48 25 26 55 47 29 47 54 45 54 48 7[53 57 85 58 72 56 49 59 69 55 69 71 86 52 60 1[32 73 67 53 55 71 62 59 58 1[35 1[52 2[24 48 48 48 48 48 48 48 48 48 48 42 24 36 24 52 1[32 32 25 35[55 55 2[{TeXBase1Encoding ReEncodeFont} 75 90.9091 /Utopia-Regular rf /Fn 105[45 31[47 57 34 41 40 2[53 58 1[28 2[29 2[31 47 55 45 55 49 9[85 1[71 57 51 62 2[70 67 83 53 2[35 73 1[54 57 71 63 62 59 6[25 51 51 51 51 51 51 51 51 51 51 1[25 4[33 33 40[{ TeXBase1Encoding ReEncodeFont}47 90.9091 /Utopia-Bold rf /Fo 135[108 10[196 11[112 27[130 19[116 49[{ TeXBase1Encoding ReEncodeFont}5 206.559 /Utopia-Bold rf /Fp 134[60 58 1[60 72 41 52 47 1[73 69 74 1[33 2[35 1[62 1[61 71 59 71 63 17[91 1[113 5[88 69 11[32 2[63 1[63 63 1[63 63 63 1[32 47 32 44[{TeXBase1Encoding ReEncodeFont}32 119.552 /Utopia-Regular rf /Fq 133[58 4[75 44 1[53 1[74 70 76 113 3[38 1[64 1[62 3[65 13[67 3[92 1[110 9[82 8[33 6[67 1[67 49[{TeXBase1Encoding ReEncodeFont}19 119.552 /Utopia-Bold rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin %%EndSetup %%Page: 1 1 1 0 bop 982 119 a Fq(CMSC)25 b(311:)32 b(C)o(omputer)25 b(O)o(r)q(ganization)1728 292 y Fp(F)-6 b(all)28 b(2002)1589 610 y Fo(Exam)44 b(1)1074 841 y Fp(G)o(iv)o(en:)34 b(M)l(onday)-10 b(,)27 b(O)o(ctober)h(21,)f(2002)90 1123 y Fn(I)n(nstr)q(uctions:)46 b Fm(This)32 b(is)g(a)f(75)g(minute)i(exam.)57 b(This)32 b(exam)f(is)h(closed)g(book)g(and)f(closed)i(notes)n(.)58 b(N)m(o)90 1236 y(calculators)21 b(ar)n(e)g(per)q(mitted)g(on)g(the)g (exam.)k(All)c(computations)h(should)f(be)g(done)g(on)g(paper)-5 b(.)90 1396 y(This)21 b(is)g(a)f Fp(140)h Fm(point)h(exam.)j(The)c (exam)f(consists)h(of)g(4)f(par)q(ts:)226 1590 y Fl(\017)46 b Fm(Q)o(uiz)22 b(1:)j(D)o(ata)20 b(R)n(epr)n(esentation)i(\(40)e (points\))i(pass:)j(28)226 1761 y Fl(\017)46 b Fm(Q)o(uiz)22 b(2:)j(C)o(ombinational)e(Logic)f(\(40)e(points\))i(pass:)i(28)226 1932 y Fl(\017)46 b Fm(Q)o(uiz)22 b(3:)j(Lo)m(w)c(level)f(C)h (functions/CPU)g(\(20)g(points\))g(pass:)k(14)226 2104 y Fl(\017)46 b Fm(Challenge)21 b(\(\223)n(D)o(r)o(ool)h(K)q(itty\224\)) f(S)o(ection)g(\(40)g(points\))90 2297 y(SEE)g(P)-5 b(A)n(GE)19 b(2)i(for)g(USEFUL)f(F)-5 b(A)n(CT)o(S)20 b(and)h(C)o(ONVENTIONS.)p 898 2428 2462 4 v 897 2538 4 113 v 3358 2538 V 602 2617 a(N)m(ame)p 897 2651 V 3358 2651 V 897 2763 V 3358 2763 V 898 2767 2462 4 v 898 2870 V 897 2979 4 113 v 3358 2979 V 134 3058 a(SID)f(\(Last)f(6)i(digits\))p 897 3092 V 3358 3092 V 897 3205 V 3358 3205 V 898 3208 2462 4 v 898 3264 V 897 3373 4 113 v 3358 3373 V 610 3452 a(Email)p 897 3486 V 3358 3486 V 897 3599 V 3358 3599 V 898 3603 2462 4 v 90 3719 a Fn(HONOR)e(ST)-5 b(A)g(TEMENT)90 3880 y Fm(The)28 b(follo)m(wing)i(is)e(an)g(honor)h(statement.)47 b(This)28 b(is)g(NO)m(T)h(the)f(same)e(as)h(the)h(\223honor)h(pledge)-5 b(\224)-12 b(.)47 b(I)n(t)28 b(only)90 3992 y(states)c(y)o(our)j Fk(awar)n(eness)f Fm(of)g(the)f(follo)m(wing)j(statement.)39 b(I)n(t)24 b(is)i(the)f(equiv)o(alent)g(of)h(saying)f(\223)n(I)g(kno)m (w)g(it)h(is)90 4105 y(against)f(the)h(law)f(to)h(dr)q(ive)f(faster)g (than)g(the)h(speed)f(limit)n(\224)h(instead)g(of)g(saying)f(\223)n(I)g (pledge)h(not)g(to)g(dr)q(ive)90 4218 y(faster)20 b(than)h(the)f(speed) h(limit)n(\224)-12 b(.)317 4412 y Fk(I)18 b(am)f(awar)n(e)g(that)g (giving)h(or)f(r)n(eceiving)g(unauthoriz)o(ed)h(assistance)h(or)d (using)i(unauthoriz)o(ed)317 4525 y(aids)j(on)g(this)g(e)o(xam)f(is)h (consider)n(ed)g(a)f(violation)g(of)g(academic)h(integrity)-6 b(.)90 4719 y Fm(P)o(lease)27 b(sign)i(belo)m(w)g(to)g(indicate)g(that) f(y)o(ou)h(READ)e(and)i(UNDERST)-6 b(AND)27 b(what)h(the)g(statement)g (says)n(.)90 4832 y(Y)-8 b(our)22 b(exam)d(will)j(not)f(be)g(r)n(etur)q (ned)g(to)h(y)o(ou,)f(unless)f(this)h(is)g(signed.)p 898 4912 V 897 5022 4 113 v 3358 5022 V 457 5101 a(S)n(ignatur)n(e)p 897 5135 V 3358 5135 V 897 5248 V 3358 5248 V 898 5251 2462 4 v 1941 5497 a(1)p eop %%Page: 2 2 2 1 bop 90 -91 a Fn(C)o(onv)o(entions:)226 72 y Fl(\017)46 b Fm(Cir)n(cle)22 b(data/contr)o(ol)h(inputs)e(fr)o(om)h(outside)f (world.)27 b(SQ)m(U)l(ARE)21 b(outputs)h(to)f(outside)g(world.)226 250 y Fl(\017)46 b Fm(S)o(elect)25 b(\(contr)o(ol\))h(lines)f(ar)n(e)f (wr)q(itten)h(using)f Fj(c)p Fm(.)37 b(F)m(or)25 b(example)n(,)g(a)e(3) i(bit)g(contr)o(ol)i(lines)d(ar)n(e)g(wr)q(itten)317 363 y Fj(c)356 377 y Fi(2)396 363 y Fj(c)435 377 y Fi(1)475 363 y Fj(c)514 377 y Fi(0)554 363 y Fm(.)h Fj(c)642 377 y Fi(2)702 363 y Fm(is)c(the)f(most)h(signi\002cant)h(bit)g(and)f Fj(c)1973 377 y Fi(0)2033 363 y Fm(is)f(the)h(least.)226 542 y Fl(\017)46 b Fm(D)o(ata)20 b(input)h(lines)f(ar)n(e)f(wr)q(itten) i(using)f Fj(x)p Fm(.)26 b(F)m(or)20 b(example)n(,)f(a)h(3)g(bit)g (input)h(lines)g(ar)n(e)e(wr)q(itten)i Fj(x)3594 556 y Fi(2)3633 542 y Fj(x)3685 556 y Fi(1)3725 542 y Fj(x)3777 556 y Fi(0)3816 542 y Fm(.)317 655 y Fj(x)369 669 y Fi(2)432 655 y Fm(is)j(the)f(most)h(signi\002cant)h(bit)g(and)f Fj(x)1734 669 y Fi(0)1796 655 y Fm(is)g(the)g(least.)34 b(\(Assuming)23 b(the)h(input)g(is)g(a)f(binar)r(y)h(num-)317 768 y(ber\).)226 947 y Fl(\017)46 b Fm(D)o(ata)32 b(output)i(lines)e (ar)n(e)g(wr)q(itten)h(using)g Fj(z)t Fm(.)61 b(F)m(or)32 b(example)n(,)j(a)d(3)g(bit)h(output)h(lines)e(ar)n(e)g(wr)q(itten)317 1060 y Fj(z)359 1074 y Fi(2)399 1060 y Fj(z)441 1074 y Fi(1)481 1060 y Fj(z)523 1074 y Fi(0)562 1060 y Fm(.)26 b Fj(z)654 1074 y Fi(2)713 1060 y Fm(is)20 b(the)g(most)g (signi\002cant)h(bit)g(and)f Fj(z)1982 1074 y Fi(0)2041 1060 y Fm(is)g(the)g(least.)25 b(\(Assuming)20 b(the)f(output)j(is)d (binar)r(y\).)226 1238 y Fl(\017)46 b Fm(F)o(ull)25 b(adders)f(will)h (use)f Fj(A)p Fm(,)h Fj(B)5 b Fm(,)24 b Fj(C)1442 1252 y Fh(i)1471 1238 y Fm(,)h Fj(C)1585 1252 y Fh(o)1623 1238 y Fm(,)g(and)f Fj(S)29 b Fm(inside)c(the)g(chip)g(to)f(r)n(epr)n (esent)h(the)f(two)h(bits)g(being)317 1351 y(added,)c(the)g(carr)r(y)f (in,)i(the)e(carr)r(y)h(out,)g(and)g(the)f(sum,)g(r)n(espectively)-9 b(.)226 1530 y Fl(\017)46 b Fm(I)n(nside)25 b(the)f(chip)l(,)i(use)d (capital)i(letters)n(.)36 b(O)o(utside)25 b(the)f(chip)h(use)e(lo)m(w)o (er)n(case)h(letters)h(to)f(r)n(epr)n(esent)317 1643 y(inputs)e(coming)g(fr)o(om)f(outside)h(world,)g(and)e(outputs)i(going) g(to)f(outside)h(world.)90 1876 y Fn(U)l(seful)e(facts:)226 2039 y Fl(\017)46 b Fg(1000)27 b(0000)704 2053 y Fi(2)766 2039 y Fm(=)20 b(128)h(and)g Fg(1111)27 b(1111)1569 2053 y Fi(2)1631 2039 y Fm(=)20 b(255)226 2217 y Fl(\017)46 b Fm(The)27 b(follo)m(wing)i(ar)n(e)d(gates:)37 b(AND)-5 b(,)26 b(OR,)g(NO)m(T)-10 b(,)27 b(X)m(OR,)f(XNOR,)g(NAND)-5 b(,)26 b(and)h(NOR.)f(U)l(nless)g(other)n(-)317 2330 y(wise)20 b(speci\002ed,)i(y)o(ou)f(may)f(assume)f(that)i(each)f(gate)g (\(ex)o(cept)g(NO)m(T)5 b(\))22 b(can)e(have)f(in\002nite)k(fan-in.)226 2509 y Fl(\017)46 b Fm(The)30 b(follo)m(wing)j(ar)n(e)c(par)q(ts:)44 b(any)30 b(gates)o(,)i(multiplexer)f(\(MUX\),)e(demultiplexer)j (\(DEMUX\),)c(en-)317 2622 y(coder)-5 b(,)31 b(decoder)-5 b(,)32 b(half)c(adder)h(\(HA\),)f(full)h(adder)g(\(F)-5 b(A\),)27 b Fj(k)s Fm(-bit)j(r)q(ipple)g(carr)r(y)e(adder)-5 b(,)31 b(pr)q(ior)q(ity)f(en-)317 2735 y(coder)-5 b(.)426 2914 y Fn(\226)46 b Fm(HA)20 b(uses)g(inputs:)26 b Fj(A)p Fm(,)21 b Fj(B)k Fm(and)20 b(outputs:)27 b Fj(C)g Fm(\(carr)r(y)20 b(out\),)h Fj(S)26 b Fm(\(sum\).)426 3051 y Fn(\226)46 b Fm(F)-5 b(A)20 b(uses)f(inputs:)27 b Fj(A)p Fm(,)20 b Fj(B)5 b Fm(,)21 b Fj(C)1454 3065 y Fh(i)1502 3051 y Fm(\(carr)r(y)f(in\))h(and)g(outputs:)27 b Fj(C)2514 3065 y Fh(o)2572 3051 y Fm(\(carr)r(y)21 b(out\),)g Fj(S)k Fm(\(sum\).)90 3284 y Fp(G)o(r)o(ading)p 1181 3444 1569 4 v 1179 3727 4 283 v 1467 3642 a Fm(P)m(ar)q(t)p 1917 3727 V 571 w(P)m(oints)p 2747 3727 V 1181 3730 1569 4 v 1181 3747 V 1179 4029 4 283 v 1419 3944 a(Q)o(uiz)c(1)p 1917 4029 V 2747 4029 V 1181 4032 1569 4 v 1179 4314 4 283 v 1419 4230 a(Q)o(uiz)g(2)p 1917 4314 V 2747 4314 V 1181 4318 1569 4 v 1179 4600 4 283 v 1419 4515 a(Q)o(uiz)g(3)p 1917 4600 V 2747 4600 V 1181 4603 1569 4 v 1179 4886 4 283 v 1344 4801 a(Challenge)p 1917 4886 V 2747 4886 V 1181 4889 1569 4 v 1179 5171 4 283 v 1448 5087 a(T)-9 b(otal)p 1917 5171 V 2747 5171 V 1181 5175 1569 4 v 1941 5497 a(2)p eop %%Page: 3 3 3 2 bop 1252 119 a Fm(CMSC)21 b(311)g(C)o(omputer)h(Or)o(ganization) 1785 232 y(F)l(all)e(2002)1849 345 y Ff(R)m(T)p Fe(f)f Ff(P)p 462 527 3007 4 v 460 810 4 283 v 611 725 a Fm(N)m(ame)p 1005 810 V 3467 810 V 462 813 3007 4 v 460 1095 4 283 v 512 1011 a(S)n(tudent)i(ID)p 1005 1095 V 3467 1095 V 462 1099 3007 4 v 90 1373 a Fd(Q)o(uiz)g(1)g(\(D)o(ata)g(R)n(epr)n (esentation\):)26 b(\223..)g(and)21 b(the)f(bases)i(ar)n(e)f(loaded)n (\224)g(\(40)g(points\))90 1590 y Fn(1.1)46 b Fm(\(2)20 b(pts\))h(H)m(er)n(e)-5 b(')-10 b(s)19 b(a)h(declar)o(ation)i(in)g(a)e (C)g(pr)o(ogr)o(am:)459 1703 y Fc(int)47 b(x)h(;)317 1816 y Fm(What)n(')-10 b(s)21 b(the)g(inter)q(nal)h(data)e(r)n(epr)n (esentation)i(for)f Fc(x)p Fm(?)90 2712 y Fn(1.2)46 b Fm(\(2)20 b(pts\))h(H)m(er)n(e)-5 b(')-10 b(s)19 b(a)h(declar)o(ation)i (in)g(a)e(C)g(pr)o(ogr)o(am:)459 2825 y Fc(float)47 b(y)g(;)317 2938 y Fm(What)n(')-10 b(s)24 b(the)e(inter)q(nal)i(data)e(r)n(epr)n (esentation)j(for)e Fc(y)p Fm(?)32 b(\(H)n(int:)f(ther)n(e)-5 b(')-10 b(s)22 b(a)h Fc(double)e Fm(type)i(that)g(stor)n(es)f(a)317 3051 y(longer)g(version)f(of)g(a)f Fc(float)p Fm(\))90 3947 y Fn(1.3)46 b Fm(\(2)20 b(pts\))h(H)m(er)n(e)-5 b(')-10 b(s)19 b(a)h(declar)o(ation)i(in)g(a)e(C)g(pr)o(ogr)o(am:)459 4060 y Fc(char)47 b(ch)g(;)317 4173 y Fm(What)n(')-10 b(s)24 b(the)g(inter)q(nal)h(data)e(r)n(epr)n(esentation)i(for)f Fc(ch)f Fm(on)h(most)g(computers)g(\(e)n(.g.,)h(DC)e(class)g(clus-)317 4286 y(ter\)?)1941 5497 y(3)p eop %%Page: 4 4 4 3 bop 90 119 a Fn(1.4)46 b Fm(\(3)27 b(pts\))h(G)o(iven)f(a)h Fj(k)s Fm(-bit)g(bitstr)q(ing)i(\(wher)n(e)e Fj(k)43 b Fl(\025)d Fg(1)p Fm(\),)30 b(ho)m(w)f(many)e(differ)n(ent)i(bit)g (str)q(ings)g(ar)n(e)e(ther)n(e?)317 232 y(W)l(r)q(ite)22 b(a)e(for)q(mula)h(for)g(this)g(\(hint:)26 b(use)20 b Fj(k)s Fm(\).)90 1128 y Fn(1.5)46 b Fm(\(3)25 b(pts\))h(S)n(uppose)g(y) o(ou)g(ar)n(e)g(given)f(a)g(bitstr)q(ing)j(with)e Fk(e)o(xactly)j Fj(k)g Fm(1')-10 b(s)o(,)27 b(and)f(y)o(ou)m(')-6 b(r)n(e)27 b(told)g(the)e(number)317 1241 y(is)e(an)f Fp(unsigned)i Fm(integer)-5 b(.)31 b(W)l(r)q(ite)24 b(a)e(for)q(mula)g(for)i(the)e (base)g(10)g(\(decimal\))h Fp(v)o(alue)h Fm(of)e(this)h(bit-)317 1354 y(str)q(ing.)j(Y)-8 b(ou)18 b(can)f(assume)f Fj(k)29 b Fl(\025)c Fg(2)p Fm(.)g(\(Don)-7 b(')g(t)18 b(use)f(summations)o(,)h (unless)g(y)o(ou)g(can)-7 b(')g(t)18 b(think)g(of)g(another)317 1467 y(way\).)90 2363 y Fn(1.6)46 b Fm(\(3)25 b(pts\))h(S)n(uppose)g(y) o(ou)g(ar)n(e)g(given)f(a)g(bitstr)q(ing)j(with)e Fk(e)o(xactly)j Fj(k)g Fm(1')-10 b(s)o(,)27 b(and)f(y)o(ou)m(')-6 b(r)n(e)27 b(told)g(the)e(number)317 2476 y(is)c(a)g Fp(signed)h Fm(integer)-5 b(.)28 b(W)l(r)q(ite)22 b(a)e(for)q(mula)i(for)g(the)f (base)f(10)h(\(decimal\))g Fp(v)o(alue)i Fm(of)e(this)h(bitstr)q(ing.) 317 2589 y(Y)-8 b(ou)22 b(can)e(assume)f Fj(k)28 b Fl(\025)d Fg(2)p Fm(.)h(S)n(tate)20 b(ANY)h(ASSUMPTIONS)f(needed)h(for)g(the)g (for)q(mula)g(to)g(be)g(tr)q(ue)n(.)90 3721 y Fn(1.7)46 b Fm(\(4)21 b(pts\))g(W)l(r)q(ite)h Fg(+5)902 3735 y Fi(10)998 3721 y Fm(in)f(the)g(follo)m(wing)j(r)n(epr)n(esentations)f Fp(using)28 b(4)g(bits)p Fm(.)f(I)o(f)22 b(it)f(is)g(not)h(possible)g (to)317 3834 y(wr)q(ite)f(it)g(in)g(the)g(r)n(epr)n(esentation,)h(wr)q (ite)f(N/A.)1941 5497 y(4)p eop %%Page: 5 5 5 4 bop 1132 31 1893 4 v 1130 313 4 283 v 1182 229 a Fm(S)n(igned)22 b(M)o(agnitude)p 1979 313 V 3023 313 V 1132 317 1893 4 v 1130 599 4 283 v 1223 514 a(1')-10 b(s)21 b(C)o(omplement)p 1979 599 V 3023 599 V 1132 602 1893 4 v 1130 884 4 283 v 1223 800 a(2')-10 b(s)21 b(C)o(omplement)p 1979 884 V 3023 884 V 1132 888 1893 4 v 1130 1170 4 283 v 1388 1085 a(E)o(x)o(cess)f(8)p 1979 1170 V 3023 1170 V 1132 1173 1893 4 v 1130 1456 4 283 v 1354 1371 a(E)o(x)o(cess)g Fl(\000)p Fg(3)p 1979 1456 V 3023 1456 V 1132 1459 1893 4 v 1941 5497 a Fm(5)p eop %%Page: 6 6 6 5 bop 90 119 a Fn(1.8)46 b Fm(\(4)21 b(pts\))g(W)l(r)q(ite)h Fl(\000)p Fg(8)902 133 y Fi(10)998 119 y Fm(in)f(the)g(follo)m(wing)j (r)n(epr)n(esentations)f Fp(using)28 b(4)g(bits)p Fm(.)f(I)o(f)22 b(it)f(is)g(not)h(possible)g(to)317 232 y(wr)q(ite)f(it)g(in)g(the)g(r) n(epr)n(esentation,)h(wr)q(ite)f(N/A.)p 1132 402 1893 4 v 1130 684 4 283 v 1182 600 a(S)n(igned)h(M)o(agnitude)p 1979 684 V 3023 684 V 1132 688 1893 4 v 1130 970 4 283 v 1223 885 a(1')-10 b(s)21 b(C)o(omplement)p 1979 970 V 3023 970 V 1132 973 1893 4 v 1130 1255 4 283 v 1223 1171 a(2')-10 b(s)21 b(C)o(omplement)p 1979 1255 V 3023 1255 V 1132 1259 1893 4 v 1130 1541 4 283 v 1388 1456 a(E)o(x)o(cess)f(8)p 1979 1541 V 3023 1541 V 1132 1544 1893 4 v 1130 1827 4 283 v 1354 1742 a(E)o(x)o(cess)g Fl(\000)p Fg(3)p 1979 1827 V 3023 1827 V 1132 1830 1893 4 v 90 2043 a Fn(1.9)46 b Fm(\(3)20 b(pts\))h(D)o(e\002ne)g(o)m(ver)q (\003o)m(w)-7 b(.)26 b(That)21 b(is)o(,)f(explain)i(what)e(o)m(ver)q (\003o)m(w)h(MEANS,)f(not)i(ho)m(w)f(to)g(detect)g(it.)1941 5497 y(6)p eop %%Page: 7 7 7 6 bop 90 119 a Fn(1.10)46 b Fm(\(4)19 b(pts\))g(S)o(omeone)h(pr)o(o)m (vides)i(y)o(ou)e(the)g(follo)m(wing)i(function)f(which)f(does)g(ar)q (ithmetic)g(with)g Fc(float)317 232 y Fm(v)o(alues)e(\(32)g(bits\).)25 b(This)18 b(function)i(per)q(for)q(ms)e(add,)g(subtr)o(act,)h(and)f (multiply)i(oper)o(ations)f(in)f(some)317 345 y(sequence)f(with)h(the)f (ar)o(guments)o(,)i(though)g(y)o(ou)g(don)-7 b(')g(t)18 b(kno)m(w)g(in)h(which)f(or)n(der)-5 b(.)25 b(I)n(t)17 b(r)n(etur)q(ns)h(a)f Fc(float)317 458 y Fm(v)o(alue)n(.)412 571 y Fc(float)46 b(doStuff\()g(float)g(x,)h(float)g(y)g(\))g(;)317 721 y Fm(W)-6 b(e)19 b(want)f(to)h(use)f(this)h(function)h(with)f Fc(int)f Fm(v)o(alues)o(,)g(and)h(to)g(do)g(so)g(b)n(y)f(casting)h(fr)o (om)h Fc(int)d Fm(to)i Fc(float)p Fm(.)317 834 y(F)m(or)i(example)n(,) 508 964 y Fc(int)47 b(j)h(=)f(3,)g(k)h(=)f(4)h(;)508 1077 y(int)f(result)604 1190 y(=)g(static_cast\()c(doStuff\()j (static_cast\()c(j)48 b(\),)1988 1303 y(static_cast\()42 b(k)48 b(\))f(\))h(\))f(;)317 1433 y Fm(Does)27 b(casting)i(to)f (\003oat)g(and)g(back)f(to)h(int)h(cause)e(any)g(pr)o(oblems)i(for)g (any)e(arbitr)o(ar)r(y)-8 b(,)31 b(but)d(v)o(alid,)317 1546 y(v)o(alues)j(of)g Fj(j)37 b Fm(and)31 b Fj(k)j Fm(\(answ)o(er)d(YES,)h(if)f(it)h(does)o(,)i(and)d(NO)h(if)f(it)h(does) f(not\).)58 b(Assume)30 b(a)g(wor)o(king)317 1659 y(compiler)22 b(that)f(does)g(casting)g(corr)n(ectly)-9 b(.)27 b(EXPL)q(AIN)19 b(for)j(full)f(cr)n(edit.)1941 5497 y(7)p eop %%Page: 8 8 8 7 bop 90 119 a Fn(1.11)46 b Fm(\(4)29 b(pts\))h(Which)h(CA)-6 b(TEGOR)l(Y)30 b(\(hint:)45 b(ther)n(e)30 b(ar)n(e)g(5)g(of)g(them\))f (do)i(the)f(follo)m(wing)i(32)e(bit)h(\003oating)317 232 y(point)22 b(v)o(alues)f(belong?)317 419 y Fn(\(a\))47 b Fm(0)20 b(1111)h(1111)h(0000)f(0000)g(0000)g(0000)g(0000)g(000)317 802 y Fn(\(b\))46 b Fm(0)21 b(1111)g(1111)g(0011)g(0000)g(0000)h(0000)f (0000)g(000)317 1184 y Fn(\(c\))46 b Fm(0)21 b(0000)g(0001)g(0011)g (0000)g(0000)h(0000)f(0000)g(000)317 1567 y Fn(\(d\))46 b Fm(0)21 b(1000)g(0000)g(0000)g(0000)g(0000)h(0000)f(0000)g(000)317 1949 y Fn(\(e\))46 b Fm(0)21 b(0000)g(0000)g(1111)g(0000)h(0000)f(0000) g(0000)g(000)90 2373 y Fn(1.12)46 b Fm(\(3)20 b(pts\))h(C)o(onver)q(t)f Fp(-17.5)h Fm(to)h(IEEE)e(single)h(pr)n(ecision.)28 b(Label)20 b(bits)h(clearly)g(\(sign)g(bit,)g(etc\).)1941 5497 y(8)p eop %%Page: 9 9 9 8 bop 90 119 a Fn(1.13)46 b Fm(\(3)20 b(pts\))h(Assume)e(the)h(follo) m(wing)k(r)n(epr)n(esentation)e(for)f(\003oating)h(point:)426 307 y Fl(\017)46 b Fm(N)m(o)21 b(sign)g(bit)h(\(numbers)f(ar)n(e)f (non-negative\))426 453 y Fl(\017)46 b Fm(3)21 b(bits)g(used)f(to)i(r)n (epr)n(esent)f(the)f(mantissa/signi\002cand)426 599 y Fl(\017)46 b Fm(N)m(o)21 b(hidden)h(1)426 745 y Fl(\017)46 b Fm(3)21 b(bits)g(used)f(to)i(r)n(epr)n(esent)f(the)f(exponent)i (\(assume)d(r)n(epr)n(esentation)j(is)f(unsigned\).)317 933 y(Y)-8 b(ou)18 b(want)f(to)h(multiply)h Fg(1)p Fj(:)p Fg(01)1336 947 y Fi(2)1383 933 y Fl(\002)6 b Fg(2)1505 900 y Fi(2)1540 909 y Fb(10)1627 933 y Fm(b)n(y)18 b Fg(1)p Fj(:)p Fg(11)1903 947 y Fi(2)1950 933 y Fl(\002)6 b Fg(2)2072 900 y Fi(3)2107 909 y Fb(10)2177 933 y Fm(.)24 b(B)o(oth)19 b(numbers)e(ar)n(e)g(wr)q(itten)h(in)g(the)f(desir)n(ed) 317 1045 y(r)n(epr)n(esentation)h(\(i.e)n(.,)f(use)f(3)g(bits)h(for)f (number)-5 b(,)18 b(etc\).)23 b(What)17 b(is)f(the)g(answ)o(er)g(in)h (scienti\002c)g(notation)317 1158 y(using)k(the)f(abo)m(ve)g(constr)o (aints?)27 b(\(N)m(ote:)f(the)20 b(v)o(alues)g(sho)m(wn)g(earlier)h(ar) n(e)f(in)h(scienti\002c)g(notation\).)317 1271 y(Assume)e(tr)q (uncation)k(is)d(used.)90 3821 y Fn(1.14)46 b Fm(\(2)24 b(pts\))h(O)o(ther)h(than)f(ASCII,)f(name)g(another)h(\(common\))h(r)n (epr)n(esentation)g(for)f(char)o(acters)n(.)38 b(D)o(e-)317 3934 y(scr)q(ibe)21 b(any)f(facts)g(y)o(ou)i(kno)m(w)f(about)g(this)g (r)n(epr)n(esentation)h(\(one)f(fact)f(is)h(\002ne\).)1941 5497 y(9)p eop %%Page: 10 10 10 9 bop 90 119 a Fd(Q)o(uiz)21 b(2)g(\(C)o(ombinational)h(Logic\):)27 b(\223C)o(onjunction)21 b(J)l(unction)-6 b(\224)21 b(\(40)g(points\))p 462 268 3007 4 v 460 550 4 283 v 611 466 a Fm(N)m(ame)p 1005 550 V 3467 550 V 462 554 3007 4 v 460 836 4 283 v 512 751 a(S)n(tudent)g(ID)p 1005 836 V 3467 836 V 462 839 3007 4 v 90 1062 a Fn(2.1)46 b Fm(\(3)20 b(pts\))h(C)o (ombinational)i(logic)f(cir)n(cuits)g(implement)f(what)f(mathematical)h (abstr)o(action?)90 1958 y Fn(2.2)46 b Fm(\(5)20 b(pts\))h(A)f(NAND)891 1972 y Fi(3)930 1958 y Fm(-gate)g(implements)h(the)f(B)o(oolean)i (function)g Fj(f)10 b Fg(\()p Fj(w)r(;)15 b(x;)g(y)s Fg(\))26 b(=)f(\()p Fj(w)r(xy)s Fg(\))3291 1925 y Fa(0)317 2109 y Fm(I)n(mplement)g(this)g(cir)n(cuit)h(using)f(as)e(FE)o(W)i (NAND)2113 2123 y Fi(2)2176 2109 y Fm(\(2-inputs\))g(gates)f(as)f (needed.)37 b(Label)24 b(inputs)317 2222 y(as)h Fj(w)r Fm(,)i Fj(x)p Fm(,)g Fj(y)h Fm(\(dr)o(aw)d(cir)n(cle)i(ar)o(ound)g (each)d(input)j(v)o(ar)q(iables\))e(and)h(label)f(output)i(as)e Fj(z)k Fm(\(dr)o(aw)d(a)f(bo)n(x)317 2335 y(ar)o(ound)d(the)f Fj(z)t Fm(\).)1917 5497 y(10)p eop %%Page: 11 11 11 10 bop 90 119 a Fn(2.3)46 b Fm(\(5)20 b(pts\))h(I)n(mplement)g(a)f (NAND)1361 133 y Fi(2)1399 119 y Fm(-gate)g(\(2-input\))i(using)f(as)e (few)h(NOR)2738 133 y Fi(2)2798 119 y Fm(gates)g(as)g(necessar)r(y)-9 b(.)90 2196 y Fn(2.4)46 b Fm(\(5)25 b(pts\))g(I)n(mplement)h(a)f(cir)n (cuit)i(which)f(is)g(equiv)o(alent)g(to)g(the)f Fp(carr)r(y)33 b(out)26 b Fm(of)g(a)e(full)j(adder)e(using)317 2309 y(any)c(par)q(t)f Fp(ex)o(cept)h Fm(a)f(full)i(adder)e(or)i(half)e (adder)-5 b(.)26 b(\(S)o(ee)19 b(back)h(of)h(page)g(1)f(for)i (de\002nition)h(of)e(par)q(ts\).)1917 5497 y(11)p eop %%Page: 12 12 12 11 bop 90 119 a Fn(2.5)46 b Fm(\(5)25 b(pts\))g(Y)-8 b(ou)27 b(wish)e(to)h(implement)h(an)e(AND)1866 134 y Fh(k)1933 119 y Fm(\(i.e)n(.,)i(a)e Fj(k)s Fm(-input)i(AND)e(gate\),)h (but)g(all)g(y)o(ou)g(have)e(ar)n(e)317 232 y(AND)517 246 y Fi(2)584 232 y Fm(gates)k(\(as)g(many)g(as)f(y)o(ou)i(want\).)49 b(Assume)27 b(the)i(time)f(delay)g(of)h(a)f(gate)g(is)h(1)f(unit.)50 b(W)l(r)q(ite)317 345 y(a)28 b(for)q(mula)g(that)g(expr)n(esses)f(the)g (MINIMUM)g(delay)h(for)g(an)g(implementation)h(of)f(AND)3545 360 y Fh(k)3615 345 y Fm(using)317 458 y(AND)517 472 y Fi(2)577 458 y Fm(gates)n(.)d(EXPL)q(AIN)19 b(ho)m(w)i(y)o(ou)g(came) f(up)h(with)g(this)g(for)q(mula.)90 2535 y Fn(2.6)46 b Fm(\(10)26 b(pts\))g(F)o(ill)i(out)f(the)f(follo)m(wing)j(table)n(,)f (indicating)h(ho)m(w)e(many)f(contr)o(ol,)k(data)c(inputs)o(,)j (outputs)317 2648 y(each)20 b(has)g(\(in)h(gener)o(al\).)317 2798 y(U)l(se)f(\224k)l(\224)g(in)h(y)o(our)h(expr)n(ession,)g(as)d (needed.)p 319 2968 3520 4 v 317 3251 4 283 v 768 3251 V 1005 3166 a(C)o(ontr)o(ol)k(I)n(nputs)p 1841 3251 V 472 w(D)o(ata)d(inputs)p 2793 3251 V 590 w(O)o(utputs)p 3837 3251 V 319 3254 3520 4 v 317 3536 4 283 v 437 3451 a(MUX)p 768 3536 V 1841 3536 V 2793 3536 V 3837 3536 V 319 3540 3520 4 v 317 3822 4 283 v 378 3737 a(D)o(eMUX)p 768 3822 V 1841 3822 V 2793 3822 V 3837 3822 V 319 3825 3520 4 v 317 4107 4 283 v 372 4023 a(Encoder)p 768 4107 V 1841 4107 V 2793 4107 V 3837 4107 V 319 4111 3520 4 v 317 4393 4 283 v 369 4308 a(D)o(ecoder)p 768 4393 V 1841 4393 V 2793 4393 V 3837 4393 V 319 4396 3520 4 v 1917 5497 a(12)p eop %%Page: 13 13 13 12 bop 90 119 a Fn(2.7)46 b Fm(\(6)18 b(pts\))h(S)n(uppose)g(y)o(ou) h(have)e(a)g(pr)q(ior)q(ity)j(encoder)f(with)f(four)h(inputs:)26 b Fj(x)2802 133 y Fi(3)2841 119 y Fm(,)19 b Fj(x)2936 133 y Fi(2)2976 119 y Fm(,)g Fj(x)3071 133 y Fi(1)3110 119 y Fm(,)g Fj(x)3205 133 y Fi(0)3245 119 y Fm(.)25 b(I)n(n)19 b(lectur)n(e)n(,)h(w)o(e)317 232 y(said)26 b(that)g(higher)h(indexes)f(r)n(epr)n(esent)g(higher)h(pr)q(ior)q (ities)n(.)43 b(S)n(uppose)26 b(lo)m(w)o(er)h(indexes)f(r)n(epr)n (esent)317 345 y(higher)c(pr)q(ior)q(ities)g(\(index)g(0)e(has)g (highest)h(pr)q(ior)q(ity\).)317 495 y(W)l(r)q(ite)e(the)g(B)o(oolean)g (expr)n(ession)g(for)g(the)g(outputs)g(of)g Fj(z)2292 509 y Fi(1)2349 495 y Fm(and)g Fj(z)2568 509 y Fi(0)2608 495 y Fm(,)f(wher)n(e)h Fj(z)2963 509 y Fi(1)3002 495 y Fj(z)3044 509 y Fi(0)3102 495 y Fm(r)n(epr)n(esent)g(the)g(2)f(bit) 317 608 y(subscr)q(ipt)k(of)f(the)f(input)i(with)f(the)g(highest)g(pr)q (ior)q(ity)-9 b(.)90 3158 y Fn(2.8)46 b Fm(\(4)20 b(pts\))h(Answ)o(er)f (the)h(follo)m(wing)i(questions)e(about)g(encoders)n(.)317 3345 y Fn(\(a\))47 b Fm(What)20 b(assumptions)o(,)h(if)g(any)-8 b(,)21 b(ar)n(e)f(made)g(about)h(the)g(inputs)g(of)g(a)f(r)n(egular)i (encoder?)317 4318 y Fn(\(b\))46 b Fm(What)21 b(assumptions)o(,)g(if)g (any)-8 b(,)20 b(ar)n(e)h(made)f(about)h(the)f(inputs)i(of)f(a)f(pr)q (ior)q(ity)i(encoder?)1917 5497 y(13)p eop %%Page: 14 14 14 13 bop 90 119 a Fd(Q)o(uiz)21 b(3)g(\(Lo)m(w-lev)o(el)f(C)h (functions/O)o(dds)g(and)g(Ends\):)26 b(\22310)21 b(Little)f(Endians)l (\224)h(\(20)g(points\))p 462 268 3007 4 v 460 550 4 283 v 611 466 a Fm(N)m(ame)p 1005 550 V 3467 550 V 462 554 3007 4 v 460 836 4 283 v 512 751 a(S)n(tudent)g(ID)p 1005 836 V 3467 836 V 462 839 3007 4 v 90 1062 a Fn(3.1)46 b Fm(\(4)20 b(pts\))h(The)f(follo)m(wing)k(ar)n(e)c(the)h(5)f(steps)g (to)h(execute)g(an)f(instr)q(uction.)28 b(E)o(xplain)22 b(each)e(step)l(.)317 1250 y Fn(IF)317 1868 y(ID)317 2487 y(AL)m(U)317 3105 y(MEM)317 3724 y(WB)1917 5497 y Fm(14)p eop %%Page: 15 15 15 14 bop 90 119 a Fn(3.2)46 b Fm(\(5)20 b(pts\))h(H)m(er)n(e)-5 b(')-10 b(s)19 b(a)h(pr)o(ototype)j(for)f(a)e(C++)g(function:)317 232 y Fc(bool)47 b(checkRange\()e(unsigned)g(int)i(x,)g(int)g(low,)g (int)g(high)f(\))i(;)317 345 y Fm(U)l(sing)27 b(bitwise)f(oper)o (ations)g(and)g(shifting,)i(deter)q(mine)e(if)g(A)-6 b(T)25 b(LEAST)g(ONE)h(bit)g(betw)o(een)g(index)317 458 y Fc(low)21 b Fm(and)h(index)g Fc(high)p Fm(,)f(inclusive)n(,)h(has)f (v)o(alue)h(1.)28 b(Assume)21 b(lo)m(w)28 b Fl(\024)f Fm(high)c(and)e(that)h(the)g(indexes)f(lie)317 571 y(betw)o(een)g(0)g (and)f(31,)h(inclusive)n(.)26 b(Assume)20 b(index)h(0)g(is)f(the)h(LSB) f(and)g(index)i(31)f(is)f(the)h(MSB)m(.)90 3593 y Fn(3.3)46 b Fm(\(3)20 b(pts\))h(G)o(iven)f(the)g(follo)m(wing)j(32)e(bit)h(v)o (alue:)j Fj(AB)5 b(C)i(D)s(E)e(F)13 b Fg(01)2402 3607 y Fi(16)317 3743 y Fm(W)l(r)q(ite)27 b(these)f(v)o(alues)g(in)h(a)f(b)n (yte-addr)n(essable)f(memor)r(y)h(star)q(ting)h(at)f(addr)n(ess)g(1000) h(in)g(LIT)q(TLE-)317 3856 y(ENDIAN)20 b(or)n(der)-5 b(.)26 b(M)o(ake)19 b(sur)n(e)i(y)o(ou)g(wr)q(ite)g(ALL)f(addr)n(esses) f(pr)o(operly)-9 b(.)1917 5497 y(15)p eop %%Page: 16 16 16 15 bop 90 119 a Fn(3.4)46 b Fm(\(5)20 b(pts\))h(H)m(er)n(e)-5 b(')-10 b(s)19 b(a)h(pr)o(ototype)j(for)f(a)e(C++)g(function:)317 269 y Fc(void)47 b(clearBits\()e(unsigned)g(int)i(&)h(x,)f(int)g(low,)g (int)f(high)h(\))h(;)317 419 y Fm(Clear)25 b(bits)h(\(i.e)n(,)g(set)e (it)i(to)f(0\))g(fr)o(om)h(index)g Fc(low)e Fm(to)h(index)h Fc(high)p Fm(,)f(inclusive)n(,)i(but)e(leave)f(r)n(emaining)317 532 y(bits)d(unchanged.)27 b(U)l(se)20 b(same)f(assumptions)i(as)e Fc(checkRange)p Fm(.)90 3082 y Fn(3.5)46 b Fm(\(3)17 b(pts\))g(W)o(ithout)j(using)e(a)f(temp)g(v)o(ar)q(iable)h(\(i.e)n(.,)g (using)g(logical)h(bit)f(oper)o(ators\),)h(wr)q(ite)f(a)e(swap)h(func-) 317 3195 y(tion)365 3345 y Fc(void)47 b(swap\()f(unsigned)g(int)g(&)i (x,)f(unsigned)f(int)h(&)g(y)g(\))h(;)1917 5497 y Fm(16)p eop %%Page: 17 17 17 16 bop 90 119 a Fd(Challenge)19 b(\(\223D)o(r)o(ool)j(K)q (itty\224\))h(Section:)j(\223M)m(eo)m(w!\224)g(\(40)21 b(points\))90 335 y Fn(C1)45 b Fm(\(10)22 b(pts\))h(C)o(onsider)g(the)g (follo)m(wing)i(6-1)d(MUX)g(built)i(fr)o(om)f(3-1)g(MUX)o(es)e(and)i (2-1)f(MUX)o(es)n(.)30 b(The)23 b(3-1)317 448 y(MUX)o(es)d(have)f(the)i (follo)m(wing)i(oper)o(ation)p 1444 610 1269 4 v 1442 723 4 113 v 1494 689 a Fj(c)1533 703 y Fi(1)p 1621 723 V 1673 689 a Fj(c)1712 703 y Fi(0)p 1800 723 V 2234 689 a Fj(z)p 2711 723 V 1444 726 1269 4 v 1442 839 4 113 v 1510 805 a Fm(0)p 1621 839 V 130 w(0)p 1800 839 V 475 w Fj(x)2263 819 y Fi(0)p 2711 839 V 1442 952 V 1510 918 a Fm(0)p 1621 952 V 130 w(1)p 1800 952 V 475 w Fj(x)2263 932 y Fi(1)p 2711 952 V 1442 1065 V 1510 1031 a Fm(1)p 1621 1065 V 130 w(0)p 1800 1065 V 475 w Fj(x)2263 1045 y Fi(2)p 2711 1065 V 1442 1178 V 1510 1144 a Fm(1)p 1621 1178 V 130 w(1)p 1800 1178 V 115 w(r)o(andom)e(\(don)-7 b(')g(t)22 b(car)n(e\))p 2711 1178 V 1444 1181 1269 4 v 317 1350 a Fn(\(a\))47 b Fm(W)l(r)q(ite)21 b(a)f(table)h(for)g(a)f (6-1)g(MUX)g(and)h(state)f(assumptions)g(about)i(its)e(oper)o(ations)n (.)317 2793 y Fn(\(b\))46 b Fm(Clearly)33 b(label)g(inputs)h(and)e (outputs)n(.)63 b(U)l(se)33 b(conventions)g(for)h(data)e(inputs)i (using)f Fj(x)f Fm(with)517 2905 y(subscr)q(ipts)21 b(and)g(contr)o(ol) i(inputs)f(using)f Fj(c)g Fm(with)g(subscr)q(ipts)n(.)784 3320 y 18646798 14730956 0 0 28286156 22365798 startTexFig 784 3320 a %%BeginDocument: Figs/6_1mux.eps %!PS-Adobe-2.0 EPSF-2.0 %%Title: 6_1mux.eps %%Creator: fig2dev Version 3.2 Patchlevel 3c %%CreationDate: Mon Oct 21 14:49:38 2002 %%For: clin@chexmix (Charles Lin,1127 AVW,(301) 405-2709,,) %%BoundingBox: 0 0 430 340 %%Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save newpath 0 340 moveto 0 0 lineto 430 0 lineto 430 340 lineto closepath clip newpath -93.0 424.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /reencdict 12 dict def /ReEncode { reencdict begin /newcodesandnames exch def /newfontname exch def /basefontname exch def /basefontdict basefontname findfont def /newfont basefontdict maxlength dict def basefontdict { exch dup /FID ne { dup /Encoding eq { exch dup length array copy newfont 3 1 roll put } { exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall newfont /FontName newfontname put newcodesandnames aload pop 128 1 255 { newfont /Encoding get exch /.notdef put } for newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat newfontname newfont definefont pop end } def /isovec [ 8#055 /minus 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde 8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis 8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron 8#220 /dotlessi 8#230 /oe 8#231 /OE 8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling 8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis 8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot 8#255 /hyphen 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus 8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph 8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine 8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf 8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute 8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring 8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute 8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute 8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve 8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply 8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex 8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave 8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring 8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute 8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute 8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve 8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide 8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex 8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def /Times-Bold /Times-Bold-iso isovec ReEncode /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin %%Page: 1 1 10 setmiterlimit 0.06000 0.06000 sc % % Fig objects follow % /Times-Bold-iso ff 270.00 scf sf 3825 5175 m gs 1 -1 sc (0) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 3975 5925 m gs 1 -1 sc (Z) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 2550 5850 m gs 1 -1 sc (1) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 2550 6525 m gs 1 -1 sc (2) col0 sh gr % Polyline 7.500 slw n 8175 4500 m 8700 4500 l 8700 5025 l 8175 5025 l cp gs col0 s gr /Times-Bold-iso ff 360.00 scf sf 8325 4875 m gs 1 -1 sc (Z) col0 sh gr % Polyline n 4275 3150 m 5175 3150 l 5175 4425 l 5625 4425 l gs col0 s gr % Polyline n 5625 3975 m 7275 3975 l 7275 5775 l 5625 5775 l cp gs col0 s gr % Polyline n 4275 5850 m 5175 5850 l 5175 5100 l 5625 5100 l gs col0 s gr % Polyline n 7275 4725 m 8175 4725 l gs col0 s gr % Polyline n 1575 1425 m 7725 1425 l 7725 7050 l 1575 7050 l cp gs col0 s gr /Times-Bold-iso ff 360.00 scf sf 5700 4575 m gs 1 -1 sc (0) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 6225 5175 m gs 1 -1 sc (2-1) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 6075 5550 m gs 1 -1 sc (MUX) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 5700 5100 m gs 1 -1 sc (1) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 6375 4350 m gs 1 -1 sc (C) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 6975 4875 m gs 1 -1 sc (Z) col0 sh gr /Times-Bold-iso ff 270.00 scf sf 3150 5175 m gs 1 -1 sc (1) col0 sh gr % Polyline n 2400 2100 m 4275 2100 l 4275 4200 l 2400 4200 l cp gs col0 s gr /Times-Bold-iso ff 360.00 scf sf 2550 2700 m gs 1 -1 sc (0) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 2850 2475 m gs 1 -1 sc (C) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 3525 2475 m gs 1 -1 sc (C) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 3075 3300 m gs 1 -1 sc (3-1) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 2925 3675 m gs 1 -1 sc (MUX) col0 sh gr /Times-Bold-iso ff 270.00 scf sf 3150 2550 m gs 1 -1 sc (1) col0 sh gr /Times-Bold-iso ff 270.00 scf sf 3825 2550 m gs 1 -1 sc (0) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 3975 3300 m gs 1 -1 sc (Z) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 2550 3225 m gs 1 -1 sc (1) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 2550 3900 m gs 1 -1 sc (2) col0 sh gr % Polyline n 2400 4725 m 4275 4725 l 4275 6825 l 2400 6825 l cp gs col0 s gr /Times-Bold-iso ff 360.00 scf sf 2550 5325 m gs 1 -1 sc (0) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 2850 5100 m gs 1 -1 sc (C) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 3525 5100 m gs 1 -1 sc (C) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 3075 5925 m gs 1 -1 sc (3-1) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 2925 6300 m gs 1 -1 sc (MUX) col0 sh gr $F2psEnd rs %%EndDocument endTexFig 1917 5497 a Fm(17)p eop %%Page: 18 18 18 17 bop 90 119 a Fn(C2)45 b Fm(\(10)26 b(pts\))h(D)o(esign)g(a)e(cir) n(cuit)k(which)e(implements)f(the)h(follo)m(wing.)46 b(Elegant)27 b(answ)o(ers)e(\(i.e)n(.)44 b(simple)317 232 y(ones\))21 b(r)n(eceive)f(mor)n(e)h(cr)n(edit.)27 b(H)m(o)m(w)o(ever)-5 b(,)20 b(any)g(v)o(alid)i(answ)o(ers)d(will)j (get)f(some)f(cr)n(edit.)p 1326 402 1507 4 v 1324 515 4 113 v 1375 481 a Fj(x)1427 495 y Fi(3)p 1515 515 V 1566 481 a Fj(x)1618 495 y Fi(2)p 1706 515 V 1757 481 a Fj(x)1809 495 y Fi(1)p 1897 515 V 1948 481 a Fj(x)2000 495 y Fi(0)p 2088 515 V 2105 515 V 2156 481 a Fj(z)2198 495 y Fi(3)p 2286 515 V 2337 481 a Fj(z)2379 495 y Fi(2)p 2467 515 V 2519 481 a Fj(z)2561 495 y Fi(1)p 2649 515 V 2700 481 a Fj(z)2742 495 y Fi(0)p 2830 515 V 1326 518 1507 4 v 1324 631 4 113 v 1397 597 a Fm(0)p 1515 631 V 143 w(0)p 1706 631 V 143 w(0)p 1897 631 V 143 w(0)p 2088 631 V 2105 631 V 155 w(0)p 2286 631 V 133 w(0)p 2467 631 V 134 w(0)p 2649 631 V 133 w(0)p 2830 631 V 1324 744 V 1397 710 a(0)p 1515 744 V 143 w(0)p 1706 744 V 143 w(0)p 1897 744 V 143 w(1)p 2088 744 V 2105 744 V 155 w(1)p 2286 744 V 133 w(0)p 2467 744 V 134 w(0)p 2649 744 V 133 w(0)p 2830 744 V 1324 857 V 1397 823 a(0)p 1515 857 V 143 w(0)p 1706 857 V 143 w(1)p 1897 857 V 143 w(0)p 2088 857 V 2105 857 V 155 w(0)p 2286 857 V 133 w(1)p 2467 857 V 134 w(0)p 2649 857 V 133 w(0)p 2830 857 V 1324 970 V 1397 936 a(0)p 1515 970 V 143 w(0)p 1706 970 V 143 w(1)p 1897 970 V 143 w(1)p 2088 970 V 2105 970 V 155 w(1)p 2286 970 V 133 w(1)p 2467 970 V 134 w(0)p 2649 970 V 133 w(0)p 2830 970 V 1326 973 1507 4 v 1324 1086 4 113 v 1397 1052 a(0)p 1515 1086 V 143 w(1)p 1706 1086 V 143 w(0)p 1897 1086 V 143 w(0)p 2088 1086 V 2105 1086 V 155 w(0)p 2286 1086 V 133 w(0)p 2467 1086 V 134 w(0)p 2649 1086 V 133 w(1)p 2830 1086 V 1324 1199 V 1397 1165 a(0)p 1515 1199 V 143 w(1)p 1706 1199 V 143 w(0)p 1897 1199 V 143 w(1)p 2088 1199 V 2105 1199 V 155 w(1)p 2286 1199 V 133 w(0)p 2467 1199 V 134 w(0)p 2649 1199 V 133 w(1)p 2830 1199 V 1324 1312 V 1397 1278 a(0)p 1515 1312 V 143 w(1)p 1706 1312 V 143 w(1)p 1897 1312 V 143 w(0)p 2088 1312 V 2105 1312 V 155 w(0)p 2286 1312 V 133 w(1)p 2467 1312 V 134 w(0)p 2649 1312 V 133 w(1)p 2830 1312 V 1324 1425 V 1397 1391 a(0)p 1515 1425 V 143 w(1)p 1706 1425 V 143 w(1)p 1897 1425 V 143 w(1)p 2088 1425 V 2105 1425 V 155 w(1)p 2286 1425 V 133 w(1)p 2467 1425 V 134 w(0)p 2649 1425 V 133 w(1)p 2830 1425 V 1326 1428 1507 4 v 1324 1541 4 113 v 1397 1507 a(1)p 1515 1541 V 143 w(0)p 1706 1541 V 143 w(0)p 1897 1541 V 143 w(0)p 2088 1541 V 2105 1541 V 155 w(0)p 2286 1541 V 133 w(0)p 2467 1541 V 134 w(1)p 2649 1541 V 133 w(0)p 2830 1541 V 1324 1654 V 1397 1620 a(1)p 1515 1654 V 143 w(0)p 1706 1654 V 143 w(0)p 1897 1654 V 143 w(1)p 2088 1654 V 2105 1654 V 155 w(1)p 2286 1654 V 133 w(0)p 2467 1654 V 134 w(1)p 2649 1654 V 133 w(0)p 2830 1654 V 1324 1767 V 1397 1733 a(1)p 1515 1767 V 143 w(0)p 1706 1767 V 143 w(1)p 1897 1767 V 143 w(0)p 2088 1767 V 2105 1767 V 155 w(0)p 2286 1767 V 133 w(1)p 2467 1767 V 134 w(1)p 2649 1767 V 133 w(0)p 2830 1767 V 1324 1880 V 1397 1846 a(1)p 1515 1880 V 143 w(0)p 1706 1880 V 143 w(1)p 1897 1880 V 143 w(1)p 2088 1880 V 2105 1880 V 155 w(1)p 2286 1880 V 133 w(1)p 2467 1880 V 134 w(1)p 2649 1880 V 133 w(0)p 2830 1880 V 1326 1883 1507 4 v 1324 1996 4 113 v 1397 1962 a(1)p 1515 1996 V 143 w(1)p 1706 1996 V 143 w(0)p 1897 1996 V 143 w(0)p 2088 1996 V 2105 1996 V 155 w(0)p 2286 1996 V 133 w(0)p 2467 1996 V 134 w(1)p 2649 1996 V 133 w(1)p 2830 1996 V 1324 2109 V 1397 2075 a(1)p 1515 2109 V 143 w(1)p 1706 2109 V 143 w(0)p 1897 2109 V 143 w(1)p 2088 2109 V 2105 2109 V 155 w(1)p 2286 2109 V 133 w(0)p 2467 2109 V 134 w(1)p 2649 2109 V 133 w(1)p 2830 2109 V 1324 2222 V 1397 2188 a(1)p 1515 2222 V 143 w(1)p 1706 2222 V 143 w(1)p 1897 2222 V 143 w(0)p 2088 2222 V 2105 2222 V 155 w(0)p 2286 2222 V 133 w(1)p 2467 2222 V 134 w(1)p 2649 2222 V 133 w(1)p 2830 2222 V 1324 2335 V 1397 2301 a(1)p 1515 2335 V 143 w(1)p 1706 2335 V 143 w(1)p 1897 2335 V 143 w(1)p 2088 2335 V 2105 2335 V 155 w(1)p 2286 2335 V 133 w(1)p 2467 2335 V 134 w(1)p 2649 2335 V 133 w(1)p 2830 2335 V 1326 2338 1507 4 v 317 2551 a(Clearly)c(label)g(inputs)h(\(b)n(y)e(cir)n(cling)j(them\))e (and)g(outputs)g(\(b)n(y)g(bo)n(xing\).)26 b(Y)-8 b(ou)16 b(can)f(use)g(any)h(par)q(t/gate)317 2664 y(y)o(ou)22 b(wish.)1917 5497 y(18)p eop %%Page: 19 19 19 18 bop 90 119 a Fn(C3)45 b Fm(\(10)21 b(pts\))f(F)m(or)h(a)f(carr)r (y)g(lookahead)h(adder)-5 b(,)20 b(what)h(ar)n(e)f(the)h(gener)o(al)f (for)q(mulas)h(for)q(:)317 331 y Fn(\(a\))47 b Fj(g)522 345 y Fh(i)571 331 y Fm(and)20 b Fj(p)795 345 y Fh(i)317 1186 y Fn(\(b\))46 b Fm(B)o(r)q(ie\003y)21 b(explain)g(what)f Fj(g)1362 1200 y Fh(i)1411 1186 y Fm(and)h Fj(p)1636 1200 y Fh(i)1684 1186 y Fm(r)n(efer)g(to)g(\(not)h(just)f(the)f(names)o (,)g(but)h(the)g(purpose\).)317 2750 y Fn(\(c\))46 b Fm(Assume)19 b(y)o(ou)j(ar)n(e)e(adding)i(two)f(4-bit)g(numbers)1791 2954 y Fj(a)1839 2968 y Fi(3)1879 2954 y Fj(a)1927 2968 y Fi(2)1966 2954 y Fj(a)2014 2968 y Fi(1)2054 2954 y Fj(a)2102 2968 y Fi(0)2161 2954 y Fg(+)f Fj(b)2291 2968 y Fi(3)2331 2954 y Fj(b)2370 2968 y Fi(2)2409 2954 y Fj(b)2448 2968 y Fi(1)2488 2954 y Fj(b)2527 2968 y Fi(0)517 3158 y Fm(and)g Fj(c)734 3172 y Fi(0)792 3158 y Fm(is)g(the)f(carr)r(y) m(-in)h(to)f(the)h(least)e(signi\002cant)j(bit)f(\(nor)q(mally)-8 b(,)21 b(a)d(r)q(ipple-carr)r(y)i(adder)g(has)517 3271 y(no)h(carr)r(y)m(-in)h(to)f(the)f(LSB)n(,)h(but)g(pr)n(etend)g(y)o(ou) h(have)d(a)h(full)h(adder)g(adding)h(the)f(LSB\).)517 3401 y(W)l(r)q(ite)26 b(a)e(for)q(mula)h(for)h Fj(c)1371 3415 y Fi(2)1436 3401 y Fm(for)f(a)f(carr)r(y)m(-lookahead)h(adder)-5 b(,)26 b(using)g(only)g(the)f(follo)m(wing)i(v)o(ar)q(i-)517 3514 y(ables:)e Fj(c)819 3528 y Fi(0)859 3514 y Fj(;)15 b(a)947 3528 y Fi(3)987 3514 y Fj(;)g(a)1075 3528 y Fi(2)1115 3514 y Fj(;)g(a)1203 3528 y Fi(1)1243 3514 y Fj(;)g(a)1331 3528 y Fi(0)1371 3514 y Fj(;)g(b)1450 3528 y Fi(3)1490 3514 y Fj(;)g(b)1569 3528 y Fi(2)1608 3514 y Fj(;)g(b)1687 3528 y Fi(1)1727 3514 y Fj(;)g(b)1806 3528 y Fi(0)1846 3514 y Fm(.)26 b(N)m(ot)21 b(all)g(v)o(ar)q(iables)f(need)h(to)g (appear)f(in)h(the)g(for)q(mula.)1917 5497 y(19)p eop %%Page: 20 20 20 19 bop 90 119 a Fn(C4)45 b Fm(\(10)20 b(pts\))h(D)o(r)o(ool)g(K)q (itty)g(is)f(a)g(kitty)h(that)f(dr)o(ools)i(so)f(much,)f(that)h(she)e (needs)h(a)g(to)m(w)o(el)i(to)e(sop)h(it)g(up)l(.)26 b(S)o(he)317 232 y(also)e(lo)m(ves)g(cir)n(cuit)i(pr)o(oblems)n(.)38 b(S)o(he)24 b(ar)o(gues)h(that)f(another)h(way)e(of)i(per)q(for)q(ming) g(two)-6 b(')c(s)25 b(comple-)317 345 y(ment)k(oper)o(ation)h(is)e(to)h (subtr)o(act)g(1,)h(and)f(\003ip)g(bits)g(\(the)f(usual)g(way)g(is)g (to)h(\003ip)g(bits)g(and)g(add)f(1\))317 458 y(wher)n(e)e(subtr)o(act) h(1)f(may)g(wr)o(ap)g(ar)o(ound)i(\(thus)e(0000)h(-)e(1)i(r)n(esults)f (in)h(1111,)h(for)f(4)f(bits\).)43 b(I)n(s)26 b(D)o(r)o(ool)317 571 y(K)q(itty)21 b(corr)n(ect?)317 721 y(I)o(f)c(so)l(,)h(pr)o(o)m (vide)g(a)e(mathematical)h(ar)o(gument.)25 b(T)-9 b(o)17 b(do)g(so)l(,)h(use)e(facts)g(about)h(function)h(composition)317 834 y(and)k(function)i(inverses)o(,)d(and)h(also)g(check)f(boundar)r(y) i(cases)d(\(what)h(happens)h(near)g(all)f(0')-10 b(s)22 b(or)h(all)317 947 y(1')-10 b(s\).)317 1097 y(I)o(f)22 b(not,)g(der)q(ive)f(a)g(counter)n(example)h(wher)n(e)f(this)h(fails)n (.)27 b(Y)-8 b(ou)22 b(should)h(assume)c(that)j(the)f(oper)o(ation)317 1210 y(applies)g(to)g Fj(k)j Fm(bit)d(numbers)g(wher)n(e)g Fj(k)28 b Fl(\025)d Fg(2)p Fm(.)1917 5497 y(20)p eop %%Trailer end userdict /end-hook known{end-hook}if %%EOF fs/www/class/fall2002/cmsc311-0101/Exam/ex2.soln.ps0100664000077300017440000044031007576743023017344 0ustar cmsc311%!PS-Adobe-2.0 %%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software %%Title: ex2.soln.dvi %%Pages: 8 %%PageOrder: Ascend %%BoundingBox: 0 0 612 792 %%DocumentFonts: Utopia-Bold Utopia-Regular Utopia-Italic %%EndComments %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips ex2.soln.dvi %DVIPSParameters: dpi=600, compressed %DVIPSSource: TeX output 2002.12.14:1859 %%BeginProcSet: texc.pro %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3 1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{ rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B /chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{ /cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{ A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse} ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17 {2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{ 1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop} forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ /Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) (LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end %%EndProcSet %%BeginProcSet: 8r.enc % @@psencodingfile@{ % author = "S. Rahtz, P. MacKay, Alan Jeffrey, B. Horn, K. Berry", % version = "0.6", % date = "1 July 1998", % filename = "8r.enc", % email = "tex-fonts@@tug.org", % docstring = "Encoding for TrueType or Type 1 fonts % to be used with TeX." % @} % % Idea is to have all the characters normally included in Type 1 fonts % available for typesetting. This is effectively the characters in Adobe % Standard Encoding + ISO Latin 1 + extra characters from Lucida. % % Character code assignments were made as follows: % % (1) the Windows ANSI characters are almost all in their Windows ANSI % positions, because some Windows users cannot easily reencode the % fonts, and it makes no difference on other systems. The only Windows % ANSI characters not available are those that make no sense for % typesetting -- rubout (127 decimal), nobreakspace (160), softhyphen % (173). quotesingle and grave are moved just because it's such an % irritation not having them in TeX positions. % % (2) Remaining characters are assigned arbitrarily to the lower part % of the range, avoiding 0, 10 and 13 in case we meet dumb software. % % (3) Y&Y Lucida Bright includes some extra text characters; in the % hopes that other PostScript fonts, perhaps created for public % consumption, will include them, they are included starting at 0x12. % % (4) Remaining positions left undefined are for use in (hopefully) % upward-compatible revisions, if someday more characters are generally % available. % % (5) hyphen appears twice for compatibility with both % ASCII and Windows. % /TeXBase1Encoding [ % 0x00 (encoded characters from Adobe Standard not in Windows 3.1) /.notdef /dotaccent /fi /fl /fraction /hungarumlaut /Lslash /lslash /ogonek /ring /.notdef /breve /minus /.notdef % These are the only two remaining unencoded characters, so may as % well include them. /Zcaron /zcaron % 0x10 /caron /dotlessi % (unusual TeX characters available in, e.g., Lucida Bright) /dotlessj /ff /ffi /ffl /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef % very contentious; it's so painful not having quoteleft and quoteright % at 96 and 145 that we move the things normally found there to here. /grave /quotesingle % 0x20 (ASCII begins) /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash % 0x30 /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question % 0x40 /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O % 0x50 /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore % 0x60 /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o % 0x70 /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef % rubout; ASCII ends % 0x80 /.notdef /.notdef /quotesinglbase /florin /quotedblbase /ellipsis /dagger /daggerdbl /circumflex /perthousand /Scaron /guilsinglleft /OE /.notdef /.notdef /.notdef % 0x90 /.notdef /.notdef /.notdef /quotedblleft /quotedblright /bullet /endash /emdash /tilde /trademark /scaron /guilsinglright /oe /.notdef /.notdef /Ydieresis % 0xA0 /.notdef % nobreakspace /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen % Y&Y (also at 45); Windows' softhyphen /registered /macron % 0xD0 /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown % 0xC0 /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis % 0xD0 /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls % 0xE0 /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis % 0xF0 /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis ] def %%EndProcSet %%BeginProcSet: texps.pro %! TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]/Metrics exch def dict begin Encoding{exch dup type/integertype ne{pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def} ifelse}forall Metrics/Metrics currentdict end def[2 index currentdict end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{ dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[exch{dup CharStrings exch known not{pop/.notdef/Encoding true def} if}forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def} def end %%EndProcSet %%BeginProcSet: special.pro %! TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N /vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N /rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N /@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{ /hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B /@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{ /urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known {userdict/md get type/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup length 20 add dict copy def}if end md begin /letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{ itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack} if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{ noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{ Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale }if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState save N userdict maxlength dict begin/magscale true def normalscale currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts /psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR/showpage{}N/erasepage{}N/copypage{}N/p 3 def @MacSetUp}N/doclip{ psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict begin/SpecialSave save N gsave normalscale currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR }{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N /@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X /yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end %%EndProcSet %%BeginFont: Utopia-Italic %!PS-AdobeFont-1.0: Utopia-Italic 001.001 %%CreationDate: Wed Oct 2 18:58:18 1991 %%VMusage: 34122 41014 %% Utopia is a registered trademark of Adobe Systems Incorporated. 11 dict begin /FontInfo 10 dict dup begin /version (001.001) readonly def /Notice (Copyright (c) 1989, 1991 Adobe Systems Incorporated. All Rights Reserved.Utopia is a registered trademark of Adobe Systems Incorporated.) readonly def /FullName (Utopia Italic) readonly def /FamilyName (Utopia) readonly def /Weight (Regular) readonly def /ItalicAngle -13 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /Utopia-Italic def /Encoding StandardEncoding def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /UniqueXX 36549 def /FontBBox{-166 -250 1205 890}readonly def currentdict end currentfile eexec a9994c496574b9cb23f8cbcd64a4a16861c70f0f2da82f0c7b06ceacd6521bb0 cc26f1cf47836cbab75757d7a81793f43e56cc8f22f926da04d715ab6ff2e257 5a135dabbaaa58f31f548cbe8a76c69e2402589b9e5e46e757f06bf2eddbbe6e e48a624cbe1c4840a338e90f7efbe9f2194aee1c869bc4cd76e2f1937d78e207 d8149c05b50ef0bb361f5905977c40be7d4dad07b54e087896acda5aa70ab803 9dfc55a73134c7f1c9be9028d3ec6ccb0fbb8fda52bba4d7551a8124e68481d0 775ed7f8ec68d8073bfdd3b67f72ec68634ffc57727e16b9aba841546ae54d99 b60e227682315510edda09bd6ead4d1652f449d737592c44bb178689a3840169 53d899636686efc6f838b19f966be5f833f5e7d41af38a899df96fdce1ebc116 9b0ec87c930d9fdcbab7e74880e9693a24de9c67dbb0dd75b3dbd113b079c490 60018433ccc06ac1df33fc090c4642fd5225fa0a188c131974ca8820319704dd 14b1719b958779d1475d92e712322eb2e6a79d652c4e3f5833aca3091675fef3 fde103446e565428267b009d87bb7d6bc40f46b498b19bf1223aba33079e41ba a9561254a9df97a48d71015b6a24cf952539f664f172d565f39a55e063154d80 a960cd56c34011fe26e8849c6677427b2c7e728cd16272363d76661b3ab8bb2c 85c20b747519a4431421d4c83783feb896c45688ff7f824381cff5654a1bfc68 6f4894e1d265455fc00064d08c37dc3a47b59a5b2d14dd893a2b871492b07c4a 591695c8df012ef46a750d6cb7fd86696e7ead280648bd737e9ea490140f3b1b 1dffab2ff8e085a8b1c78e4b9ae9cee277a29233cec5ab2588d1cdaf4bbb6512 e1b1476c68fd3db18ecc2536968ebebf4333c2c3709ca354f21fffc38c3858c0 561378a701158ed0201a3b236ca9cb7f7528d1e5e07a9bfab04f8d0fa3d12405 5ba2fa9dff76f41b980bfb36e8db1300f7172c902dcb9f5f0bba3cb9c212bf31 76cb802ddebe556f4610021fa3700d476a2be2a66ae6c658fd0a95bc1b9629ad 03fe4e775ffdfa9f87a274fd904c0db5beae258f9af213f257db2be0265b964a 681fc4d2855f5356fc87576d847db274fed9ca5bb4961ffcf53f28b673f50e31 c3c634604e718b7666b466557f4f6bb6239339e028de3909dc47cd634205ddd4 69a944f11883dbf89344c43c513c35ae966a37a89795177b9fa95f3713e4d48c 379e33ffebb1bbc92521cefdc36e4cf5265d28522cb874b9e8459abfa31effa0 e0dc4d34692fbeeeecea87355dbde65528d1f76b89c4b5885e3d70b3ed028f5a 0510fa7044cbe74a030a9bf06c592dc447f9ed889988e7ad42cee85d5c3687a2 1d78ff32ab9f4cc829e7119f3d144ab2c78da8230df854cf4a690b27d715174f dc062ff41776f719877cd8f2d5fa97fe8386526b7c68d2010b18d5601411df5c 6bb2fa4478247d813a7ae7df2ac4f95cfbaa4f11554df62f91bb1eb8b694508a a468968a2f087829344935a46a60f55b527d2dd1a1a29587729802eb35028b31 b8477855308c3b70d746b55b7fb1c9effbc6a869f27a6ff0a1c7c2f467e04c93 ef72d192f98b065e80530e90124905fc5c4e89e94366f8f89395bb24acdd65ee 069203d5c8459dff96f2e1be24c31ce8632877966398c96694adefbd2dff904c be1024f5f3a495e37371800db04aa69e051ca111fbcd9d62cdb0e28e804a3387 b3d8c937da320b0848be91cc8f71fc7760acec18ae2a2783a9b5fe80fb87ebea 2571b27ae34b4102008c666a61455dcdb672573cebd92d691ecd038635270b07 c71d0be53defe487b457a2df3496000e9d3fb5ef4d74a4a0aaa0d8013e0ba409 d5d9f03f146676bfc1b254199905d49822f29065f3e78724869b9dae84853e6d 899432d5dab547ef4790203f507bfed6ea55f2d2066402f999d739fcfd87134a 5df0566e52e62704090f9e1acda51325f0b6d807a9419cc1994f455084e350f5 853c0f4f93b72132ae77c8012fa97c918e8adf0d346f8434ec45803be4d824e2 8cb066c83e70f384f4303d0a93aea65004bc9e50101e74c10b2b5b468d082d84 6d8fcc3241bf8be128dee175a3db270994f122a48c573d71691a396c4ec716b8 6b6b5a1ef9e9e7cef0698075a5b6bf65754f2ef115b8b185aa9330973c46c7e6 8e2800b87193fe0f5665729acc0b583baf0c5777a124e0e4ed81e544ecff45db ce9075b502e24a8a431e5d5e68db5e4b07d018a7bbf2d44673044946e68e3104 98445196abc6da7260b6b71fcce3cd52c11dd59e9ee069c38430e9f5e5256940 0fa41d1a7215a0bd4fc0de045b93cb8534d7de615d1942b4777a0ceaef90ddca fa8fe3a45b4f90735b5feb5278810fc4dee20a86ad85b58bc49f703b0f4f9b36 f7e02884ca73b55b5d095d7565106c780b79bc7372d1c0a391fdedc8ba24d285 e960d4903b2cdda218a6bd2e4289e782bb4b84660e05a618b6c565fa189f538d e13074b8bdfbe4dab969d0786ea1c995a57b297f09d19c6459927e9078f59b45 a50095cf665cb550ec9bd0420a1e2bfcca694d08bb2fd96a0fc3e906671c277a c9854bcb1e57acc0e4b8c9151653c4b584b542983067ef6ee2c2157afc8fd8b1 79a20c22acf63ed93477047cc8f9d12849f988ccd902506d002514671fbe449f 4ebcac340a4cacdc027562af0ffc7da708b15240411b2304528d02b92a735535 9573d48896d3e122ecd06b390c02b36f73499f307f6b1ace990e62666f6491aa 02a9725d40dfbb64e9895dea7d909688394904dfc74a57392f802611b60da3cb c9f3376070c069780e8491439d213641f93bf9817c5acdd13fef1a2d4860fea8 bad0f29e183c2fec29289886ee01fe5d5d6f706aace6437740e05c4e69de894f a20905920512f25a1f8185f32b50d69239c9b660518c4eb712d8e55edfdb9163 b2b2dea4f7969e08e7b52681c7ccb9f9f4499a937252abaf27690173cde6b242 767631b8a0cc7f3bcd1ddfd8ae8f680d68ca7127084d024fa6308ed2a433e9e0 6881547064b2857a40cb97b66681596bbbfc65925229f58e8dcdf9e999c81145 2f66d243dc0167b40150c335702c95e065fe3f9fa828f47b9cc92746dbce42df 949a37092ba12599104c6df74637d59126f9ead2550500011890b35ab533fab3 ed8e7fe1c99486ab9f91b1c5ca1c1232850e2e1100316e6e6fbf584d650eb2ca 96f05fecb54cc854510b634ddb5a64539bf3d7bfc5fc1ed2bbfd584e1e8fe7f5 4c1a00ded6dc703a9fade378e37ca2dfa1ad0fd391cc99cb1581ce6a152e9a2d 96030c87e2374b08da1dc5b6e47fa0d73616c81279d2a14324664612d149f4b7 8b884922f1a0566eda521925bd4fdafcd00dced8eccb9224e772f5ccd7d9d755 c8dd53f4f0910953c7049c864aafc0865829ab41c402f8e95001169f254de195 20478cf85f890bc138ab6df8c9d5663d50ecdb32c37a71f3b07aa2e0c9a8e458 5ef10286c4adc4637f79c8a85b0d6967f6608de277be876004424809a9325510 e81de9baf442fe2aaef4df5ff8a3c58818d88283b5349ba5261361a4bd81743c 1a3ca9699b79d5cad864a5c151efde0f4f080ab91817aac00759097fd96c714b 557519d79a2cc313b89e199b7e1abe5588de0c6fdfaa24b2dca722b23339ca98 740a5b8b2f4be4d4e048453c712cc17e764991b59e1e22b91ab1df9f22a384ab 058908f24ac8bac3a902317322bb2ad7035091e075efc78346eec07baaf127a7 07f2167974d9e2895c39e3a5e7950755eed7ab25180e3e34afe3bac77f7d4e43 164c1150f55e03054bc8df1d1a6303624013350eda1a58afdd99fb871c4e5f63 a7629ddfea6aaf0a1a757e8844d144312e1be0fca47928d272674bc346f2a1d5 6aefc482bf8bc199cb01eb0c8e322b00376de5f22724a53272b8d2c829becf05 cdf4220a6d3b31484ad2964eeb1beca229a8ac2e8d441c5a1ba49a6eeab4c2d1 ea126ce805361c03564e125335dcd4843a43a5fa83d5fa6a12cf43350a0a9c2e b1f6f7781ce58bc0e86aff145fd8ff5b6b524892d7a7125b393c4869bb71b709 4c511e5cbf44856f3d541c0eeace929bf3f6a6ab1c5f5da5c53bd030159f2349 55ce14bb34691751626a4d5ee55b3467298810a33161a33d6e6c200e52c1e83d 2fa04b6b70376530ae4a1f65795a2a3b164746270da0a1336ff841e014f47811 923f9f6bf061ca0ffe2a0e4e18fbd831387223ffb8a65461e2a710f400519490 ac3132f8ff8191b5bc3b7d481c46c6cdc760cfb137c8b6570c957e8ed62090a4 6d3d894746a399c1764837f3c7ea4dd66c7918df9eb5d82b422cf2d41771145c ee425daf0ff64103f9ac0de4f87dccb9b0474fd11e231dc872d13d5973120c7e cb431e3d567b7d0eeceb3daa73504d01d5c5cdd64534 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: Utopia-Bold %!PS-AdobeFont-1.0: Utopia-Bold 001.001 %%CreationDate: Wed Oct 2 18:24:56 1991 %%VMusage: 33079 39971 %% Utopia is a registered trademark of Adobe Systems Incorporated. 11 dict begin /FontInfo 10 dict dup begin /version (001.001) readonly def /Notice (Copyright (c) 1989, 1991 Adobe Systems Incorporated. All Rights Reserved.Utopia is a registered trademark of Adobe Systems Incorporated.) readonly def /FullName (Utopia Bold) readonly def /FamilyName (Utopia) readonly def /Weight (Bold) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /Utopia-Bold def /Encoding StandardEncoding def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /UniqueXX 36543 def /FontBBox{-155 -250 1249 916}readonly def currentdict end currentfile eexec f9cd86fd4821715265f16a614e3770ef80561e77ba6ecbb4ef4232445eef2839 94e93e3c8c9b09c09d71542241821e07888ceb54e8cacc8a45802f50c0afeeca 5e3d9114c1860bcb2ba5fd2a879a0d79953e30c90d8347513f4ca5f05b2e231b 4973bd1e9db66a39d846a8b3d9e48da72e2de8743ba2e104893167c235719245 87b43ed3b6552cd85e4bbdeb9f46bd813298d531c74be81995a52ceaad4112c7 f65773b088bffbc9874f615371c5e7b50ae99d5b6acf9c80d87057bf3a424377 f4284b7232096b6ea623dacd1c925ce09cfa6515f675aacf815c38e984b4ba40 0d409bb62cd4ebac75201c8e782e68fd73e8622c46b696b1ba37ca9621400041 d95b948a6bbc089fe6b230b39bd358228af9b3e68418166a9adc4e7665341088 c47c074aa4b21b0949fef9929e1a32ffddd2d02145cdb256863cf6067d27ed9a f0aba85b1e0cfcbab7e74880e9693b5626ad31e6b5c2d208087d86c116513212 710c9d6ca50e1503f8d4c2863fa378f8184189af0cf109f4affe7cb74563d513 2104fb9dc6f3f5992e075633a0baebda8ebe9a07c3ec4b25fef015d9915a26b1 d401a6722015090672714181580350560caf79bccd6040c0c1651d917c73107c 2d46aad5d4a370b55e896ce1eed127b6f0aabaf7c4ca62e89003032abb2c95ba 58c4a0eb0bb1a59a439a6a0c2082e50725b9e8139324af06ff03b4269a697342 8fab0c1fabd320f1452d9c435e48037eb8cf6df4233cd9c05691604146cc813f 7ea131f21e9863b7bd1b087a583af14675b9bd31fd364d5dbddbc9b533a6ac38 c4bdeb28a1ae3d2b374da72405acf67b1b3a83d80726301b3677c067c748d857 ae1da4f723d4365647de10f90e96dd7e9ab9ef5c7e6866a13b807fd3f78136d5 72950a10bb0165e61f12c60a813c7e35eeb9a0500725dd912ca2deebb238538e 790af851b14643f40e5eea13660e57b5c407735079a292a7c162dd11d0a3d342 67290f1c9261fa5de6b92ca1e7daeb7cb970c766b3e0396ec0ce55dffbef0bdc b437fbb4d63634b9abcf5844e76f9313ab2182e1fb3c47a705a1d97b79e93dbc 5e48ac19b45f9be4b9225e5a7e1d3679dd21001eca3c08d6febd35fa5453290e 1269c1d195e45338c10aa60fb8ab9e5a5aaf08c82e737f082bb6216d7cc1d5d8 8906c8b05c4432d04561377438447eb5fade652af84c1ced99551365cf9e6f99 03d1593de0e450003fb0d5b5588330d6527fdd0c8193fc0cd2293012310a425e 0ea0f8b901b991648ebbc894cfb7d95da6d35fb7c947e887bd3b6599e673b921 c96f2a033e30b341a14066076ff0abd5fe77f393b548a15ea2185f99a3545b01 dada854fce1ddd3448a9aa42ba260a4f85a0d1bdcf08b3de2ff8b6411adff446 4a2929193ade35f4e26006cfdc45929250bb76ef007043d739d798a4973f350f 52fa1690423381539e3a4cc458600fed91fa8e16b5ae0aca710dbf318d16e3d9 16a082a093b59f35ff92a1b235d5621e87ab471310ca26a9a30c2658e23e0f19 43110f9b24e2c8f1d05824c69aa9890c3b0af143da3ff2d3eeb301f7324f2f16 4e47a05f72acc15acea8a91b9d085a7de2e7e45493f53f32b22d365aca7ea6e0 70c6ad4feda1cde417b48fe4a864ac9af989f30632a9cff5545573d9c7d16016 d450f21f22a028d4e5d1d50a0834adb4c7cf0424f686a3678ddcddcb30d96a4e 45b982881b7173c1a3ff8cb839e56c10a3055f1626d8d5662a85edb80ec110ad 8eeadcfe212e10c139c86094ef0c3fd239cee5c9ea9727cfb94e671fedeeaed5 ead00e015f8783a4adfa28b7b2d8982e7c6fcceb028a18bcbb7f83b44ad4a898 c0bcc2aae1f109ea4ab0de19c4163d7c81e9de2fc6d003a29e2d8c83fb852a2f 2adb57a70ba5356470bdee40c3fd1612bd651f77a2a4dfb7e62bfd224eb2e1a9 978bf52b974d81e7d4f6b661885a88d8892c66182d8cfd1950c290d1485a78b5 59f7e546cc648d521d310ea176ab0bf669b60a915837a3b800c5b86b1295193b 161de7a268c3b8a12272e964b88b94cadc0ca8a94781347a8623dd1e4a481a60 2cfa2f764009699d69f4e8fdcaa46c4238b89bec4eb5eb490f15e6be942af742 1a8f2f0f873f5e5e49af9c33992e878dbd5e0d04cb1d086b719226f5836d52de 897147c588ec54bee42e887a2c94a864fe997b82d0045a92c35a7b157a379903 9adf336e3cb280d18f70784afceca4946dfef7f6c2fab3fd9eb4612fb0a6b3fd 17f24aea9bfa21f1cb8a5f93239d7489a183f6f4ab30bb54dda79888b30bd658 116c1efa020d27dc30df7a00265705414017911ee7809a135150a3db3333b694 b491f9fcf49812eafce4e327cd09e6ac38b554339d7a45d036b35627c8fc2996 dfe38a1cc4f9c9687410127d9f101540b9c3ac1541ac45f9609f1f540bc3aaab 4e11543508fb57856bc7fa12ea7faec327121f905c5dda2cfa2676ce5d0c8202 7361c63083cc9eb79ff4c75b0aafc82417c417830356687088b9e36e6cd12016 975e426cb81bae9d99a0bb01c373b44cd6bc7397b07502da72de33e79351c83b 02cb02a1e207a552ff6801bf8aef428c60a939c188879113f3ff32a05be0e152 6f9d02f277e8648997e867582a1428333976725ca92957ea91a468785a3fb888 ea36ad46c835ce2e38af00d754f949f81619991b74fd6c5b2902391342f9af7b 6bad0458e2756aee5b990521540542e9ab7ac46137214bcf839d0513638c3a81 f34b273524eb751bde576f582f60f9a80253407db13e1edc5cf1b391c9cfede1 5cad407129afc4bfc29fc4915d8c343010faf8e5aff34520c6b9328f06cf0133 e72755b76622b9a7bccfdea77cf885b8d074a7642d5e37cd30dea42e6b8b101a ee736d19297a9385c75704437142b49ecaf223cea5c7ca7f4a08962f5ccb6a61 0d706025948f83e026509dbb461e5d072e39d4128c54e5043a5fad603c6b755a b001ac322364fd770e958be6b82932426f0c0d960075b607acc7a1280cc3933a a11d170c7f5f5ab7ff020eb554e4d05a01e8f85c95571926e6d17ccd059182aa b2c7565986af227f05997d9432f648b17fc862ce8d89714b02c0f494b3445461 7c289cc5c18f083fb154d872c0aca526c919b4680b488ece138729d235fe8156 c37562c4d6c97e919d70cc66c97b07e3ce46c111d85b2a2224fc3bc63bf9de0b e92225726e9e4019e1c7b6254132f42e80777ec37c9beb64184a3e8092a0eadf 560354289d32bff146bdd9df2281fa4a0ddceca02de9c518558c4969947e84f8 6c33cfa97b8fb0a3ee9c98ce5d51dce7633393d405b43e9b33ac9e735d2b6e91 6ab218149d0732db5bcfcd29ef7971f60058205576171868c5ed5b32623fc67c a40e705e8c2d755943b594ff25cdac1fb7eb4bebd86676af19976338e00cab87 f573a662c1c6acc7a53777b6881c56f3e46db908bcf1d8fd89933ebce14018b5 77713dd33f0fff751f53f87c5df854c8f1697361c63083cc9eba23861f99aaab 6333a2e81b454745e003cfa8021258da9762cba939ecd8418f410a6c133dfd86 92b4042e45025f9f9b7c7f0c2d750e2ccb8b3d7575bd954667292328e8c195ab 8729200b78b70a90c1c4f9c0f7d782849cc5bf3bde01269bc9d41488444532ab 246952717689d34070de6ae0ce3a655e8fe20a7e3711ec0d11ce8184747e3074 3692d0d52a27e42bc387628bc6efe8ae01673b14725adad3db820a8fd0ecee05 3e511a62d7bdb1472dafef4412f2b4c47652c8f79c926ad2ff47499ccfa658eb 372ffb7069709bd5c0b7ac2b3a671c8c37c837c0847e82d68359bf8bce500a30 1de183fe07b150d25bfb11308b3a18b08c6c81ae47881a67eae6e9f9ffdea87d ef6911a944ccdcef246b82a46b483ff79ae514356c6a19eb3f1bafc242d143f7 9cd95bc735a8ac6cc6cd83f690243b5d223dcd18748a0e01de527e0978da7adb 2a7be9033255c5071d3cb3f3117d9e9c0b9825b64ec0e92a0310dd612a2a0f80 ade73ce67048e1928fe05a4269d3f7cf57582dbd74aabf8fc76d2b2ba424f9fc 59588a538109cae93c4dd0494da2cdb6986de98b150937807fb9d4e1436998ac f6082378c55efbb575fb986c03f30d8dddb1c3a97d85b7b2ceb45f58c60a4085 d1198d605a1846797b440fd0c45ffd36d8e8e5a72120e8b4dfcde7a0bb3f5c33 345babc73feda05c45211f0e565e5761e49ccdf16f90588990eb76171acf0f9f c1c22092688d0df24c548763710641592871ab1c55c9efbff34685e21f5787e1 77e29598d06cef0753fa7b686e233cf44698ea174b3970f587f7c13b31ff3302 c606dcea7e5403d66877b1ffdcdf303c4a2096fb0b011e2e1da78e07af9734b0 a7d65b55b3491cf5024f86fd3d8209a6e1388e2162cd02ee75e9828e7750ffd4 0c82c6c0c0dffa3e16beb0311922b3aaa455176d85ae04fb970439b20072e114 d2a21e87bcc28ecd33031eb5df889dcb2e4966f2d7a853f6ddb9f0f9c3cdde73 4b8c2175b686923f1cd5c7ace1e4de1b4db648875da008873934025b8dd8346f db1e99f8771a61d954add5c9e5a1298c3bd0263c6863263e45b1a8b09be299a5 0bf2b327ba8a39da0dea1aa5a534d1641469b141bfda8db9356aacfc1b155652 4c30fe22f94b48cb0606d628761820f4b02bd741b004197575d1051b4bab5eaf 5a20694336f1d076d5a243a0ec747e6995453b1924a69b0f0afa3fbdebfd13e8 ce2ad4d564d12516c1aa9449dfbeb2f2c34df9382fdee72e33fae348b71717ac eb3015b1efffb3b305700375d7060ae8c3936ca4e514e49730d48c95c2ecbc13 58fb7e08360555ae3a72853c32ae464b04d993f81b3f1e5526884d99180e9827 9d48b65fdcd7cff41f9d46114f4a720b4bfef6721eba207efbe8efee595a77d3 e1ea2650ad33bdcb13dcfd647831c3c0d094fb0c5dc3ecc7785a6394fc1b1350 787f4400271d79ad29745fed8dcc7cbce78095f586a9a1de2c2a609dcf16c794 1618cb3e58e094f19758962c971a9b468c938beca2f777942ce429fb06994859 55c2d2e11054e9ed079605010f7e0a2e330828f785cbf9aeeb449c499fb69a52 bbcaa7cde30f82a452b04068d92071044048950ec8f3202cc0500fad1ae4339d 22538b61afcb8066cd465fd0ba21adeb8ec67c8e38716159be93fe884c505ea5 5006e9b2468083435a75b823d61c66f9a78800fa04e020f577b12873303febc5 27effa6607a0d7dc3d5bbb41ca6c98a1966409eba4f8e10de8589178d18a21f1 e0961b43cc7f5119b4f96e1159e0167bf481a45e05b0137d77d3c9b307a88289 92f5fc6b431eed670bbb972f9832fb40746c128836adc7d41e4315bd9e297ced 43f4f4a2d7c16938f3cc7dfce4d20d38ee95cbcee7b9d7d1d213d88573fc8049 19e0ef7250594c327de079b2d1835d906b3c9bea2819881b8b9b93bce879f7ae 485dbc266d6151c9f5a539bec4ffdf834def3709196fa2dcc246bf61b9f206b7 3eed893792082bdb26102d33751ac2fd706bd0ae01328dbf87f6d63f2e32bf51 53ad6621ef862fbf41bbfff2ea9b578a750b84cd22c79f7ccb61f65738d0415e be9db4c239380e894a07cd7abdce8f05d8e0770dc22c7971c50f38a5b69fec51 53bf3151a881229736ddc42dda80440502029c50351c8bb991e042f73f7f2428 c48b80f5a99cc91b677de1f6031e500bb58d8958ae39e1f8bf5698ea83ecce06 ff1f1ef01f2a68b268dee18d51f273cce101e2338bde69fee33f7b2ada201abc f4bf21cae8cfc77fc217d5e8a197af758971a4eb3045796c40f4fb725af04e19 fbae1edf59960ad187c5524fba13ea50b21ade06d0e285c7afe73632972adb50 975e6a823665521401a1afd3e3aee5f89f1bd9a314c95902c038d47ab0001c95 6ed1a9ac8c213266ac7bff3127d06844f78ebeeec079abcd3c91d9b67074e370 d725cff05e1f123c4a876ebcc64a3abe8388c3a87b3ae1cd95c6b61e8e2a6b6f fde9fb653843839f95d74e29f1c8c209006c099c417d57ab9e97dac50e36222c 3d2c71b7be862289c04472e62905cbcf2673f719095518ad28263677077648ec 784e1c6b448eb4705c5eb2150c47c28a0906100ef06d27b26c143458031338c9 43cdf014f41fc588b316cb38f2b11d127c024841d98fab6ef074be3b06ce802a 311403ce084a1198cf3c9447e8a80004ce6de301b8ebc1b63d7b7a86e50e4c42 66b911060cfad257e62c8d9f2f62f3eaa0b6bd68eaf3e7704f39f656a5da01d0 0d410c8eac8da492dec78e45b9c33bc880e233fcdefcf4d158cc6d5a1dd406e7 bb0c84c59e6b4ca040b7557622f5376eaa65a35321e132e96efa50cf89fb7d7f c3f7643302a5c2c0165c712fa63beffb56fa585365c658b79f71f348eebf31d4 be56f327f746a5310048c6d0c0f6733d6ced79ae848149311a59f362358be717 86975fa8654c9e0490814b78a78d7e55360b79e0ddbc30f67a7931f4e701825c e7f6cada6a6b7d2ed845a580cb99932f9f71d65c24caab157f57799771ba63d3 a60ee3a0f0caa25675d0685f3433e3d1e0f6f2977d1799b46eaa124494e69d09 7583c7f285e45a5fc1003de18f86428c24b75c91132223fd13fbd1256c5c0c86 6f12c77b220c436402786dc26eff0c152639a5b2615d3e092862cb50be54c520 f44d3540e7abf8148d62df8af47ff8d66c3e068ec25b04f7db005eaa49fe3fd7 cdd091be2d2db38a4044c311fd82e8e080863ec996d555d843563b35d58e81a9 2f9f8ebf3ea6956c5716d1ed9c65f6e1b8de4a4a854aa0910b97de6d24e22640 0024e13f695cb7e90e097861d10514224164cd889cd65861a68fd6b9ba9abaec f6b0c4786c4a144b48377373915e4b240256da19d83869efee35606773b6bf7e 23c2be298d528213e28a1408b7f7292c24ec87fb8a49b81f882c7ef104f9391e 51cab75129bfe07369f393a5839307ec60c47d566172663a94ff5486ad8bdd99 f9fada9dca6711fcc38cba25de653c7567885ec2b98d7cd6bff7ce4802c6a032 7d7deea1b492d1ca5379368774f76c6b41eed445653566eff6ded1d04d9fd271 6f791d1478a8018445d18373c549a90b4b126c1463f0bc0affaa3a10ad10d792 2a5285dbfb4879fd4fb42325e8347e90eaf14f9f0da069b55f11bac56d2b9899 50d464ffc7aabfb6382c8bd12f87280cd01fd40f64a26e6e486cafe072d9045f ae68b472505296ca02143a3e89022306b9bf7000d9f191186242eb25ec7ac9b6 f035c55b21cefe0ff8f8656be8730662f307ed86c0d1d66c38a6dd576c7ae904 0dfdc858d7ff064da94cfdf9252023dda725954503d24b8e8e3803ac226bcb01 46fb11376d3d64d6510f72fef0bf64e6905dbb4c3c6e3b28faf98722bd5bf837 7ee616a45f2450b7b9cbf2cc3fb0de03a9e6baf41b816b29ae523941572c290e 2f8c1d5d598f6c87f7911a7cc03ca211080f9564377bcb8de727485ea970dac2 c44907ec46114194491168b65c6e114259f997b274890fb6442b568a00fb85ff a9b0511f77b022fd0ae53bc6e841986c67201ac4bc751bb82f7aec217b171559 8c7fb32ff10c7e9c9e3ca2bbda9771b4d3d09386b72f91f8160aee29412b5fcb 35ccf7928d1e4e7184fc34fb51a15e5adc4436eafbf1e2b7a37970749a39cce7 57b49f463816b8dc9b702991f88b11e3e086d44a463171f973379e1e1ad5c4c9 f2de4ba2e2353ba51f4de765672fa091a42c00b3d2af5321888e3c47769efcb5 c9d08c6426b5b7f31ddc16cbaaa0bb6863eb97dad3b8089f01a080d9b3898d7e cdc460562ab30b820f40247a0347ff213b5c391a83846fb92b496d7ef3750c46 ccbc36ae063f820c47d8a1a7b92e1368b5bdc0e848b78809f30f4ecaf9dc7005 8c9932462ccbd93e5e4ba2f03fa40c4a2eb6f6a1fd15998807d9219a915d2a8f e89c7530fa7d9ce35213cb5580a9b982ee4abe6e1b7d30fa7a828b2daae2badb 3c2d5df648eeaffceda8956baa20c52a2622e4ee6e41a17b4c70bba2ba8472ea 49af7c2f6acae96bb8a00f051ea76b4d775369b78d50072fb9f7d54cef2c90c6 d9b61a4d881f3c190924fc21f12a01ebfd1bf8e231c0bb178b8eec6ed4123402 59c6ac44fc963f17f949ccbf1bbb627ddfc81bf76c29622f923f8afc4633d783 bcd133e773162601bb9048fc3a38f5cf71682b328703a8a1d2d6fa60e66d4637 08d59072bbf883067e057c3f3c4e21e6ad3df7b7ba6c66c4e1ce382a4e1bc69a 5bac4cad20ebc11fd57fdd194d3f0fae93509dbb3f8d37c19e1794b4edd4d0ea 9bc1e0c79d4e0a5167019fa3a60b39a4ab93afd1d55a7c9bf1dede9306a8e8e0 62d95e28267429f6326c4a75619d8927331e648bdad1b64a6f399a2e47dbf228 5085fcd5b47b535ece9bc77a2650b1086f9a2440201e428c092330487596bdb7 6565b821cac7b66277d8c4a18776d1455d26bd337c5cd5139772f8d2356ebffe cdacb5e899818536b1be03172d5b4a35df644ca5e956056cf3cda000e1c7a440 523bb30a797f2669c3107d29099066fbaf6f8477c8725ee5a28368458c725d15 ace70dc9562ccc201444d28afd07029826ca2fe8ff731e9d3a812959fd67072e 32456322a94d473acaa95d67b1d69d5ef3357ff32384549adeea0bcf8d0b3eeb 82a7c866f2a8c832eb1dfc2601b356cee2cbb7aba20c26c73462725a9b60e9c4 c49bdd439656c032cd7d3c7c2fe81f03897de99431229cbe70bbfa7a98d44e3f 89f6c74ccc52e0ab134571c84d2a734b44ff2dfb491ea8a5ab881dd69b21c4c0 9b4eb651affdf4c04a1efdcda24140debc44f337d2b570be1b97fafd94681b37 6387bfe69e08c0a5cb8b15c01fff7d75202573a7761bca2f7c5f7ec6059343b9 8ef4cf7b176c109e459f01d3cd324f150e9f24549a7ccc8c2111288c56a4b98a 38ab5395fd8fb0f64592c48ac4ab9fbbcafa807db34c989c1a2b1662ff1e8efd b35825779ec9868e5e031ee93ded06c7e309bf1c6f5486f57773c204c3dc4fac bd910c494e0d787ebb992bdf6d3bfc3afcf753794878cca6a672bab0edee41d1 8c3454379962be6c8de632150d8b2b0c63f25858d3d0dd91b778672b60832c71 01ce9bc8ad3778e0702201220da3fd96b0eb4bebd86676af123d4e08965e4762 259feda4dc9213dde8adc04ce368f326bb95e0c51f53069710b3d8f3da24c0eb 98facc715af31c6456440ddb17584ae22bb73c749487135f67e6f01c4c5248bd c1a3fb70b75d7569eced52197c12ad623c7690664e77b2c378955f06ac182d62 3f0e0da4208fd1484e3a700b3d8f011c19c8e1db2aded175ea9d8e0581c129b2 e663c7fc7c17163928f608ac9b2bf4a530dc11ef55f8c05aac5ca2501a63abfb 7f6c8cfbb4389ebffa1c460d83388aa5b12111568b21b6de287d54aa5a40f0c3 e4136f2a47349e908c94c31c9bd4371c63afb8046820ae1361c5e70549c4d4ce 138e3e7a9102b400ba9466234266440bf7c51ffd7d4da1bca9575aa8e2a8630c 0c7c12e0e1922d455cc2cb434e062ad6c73c0ab099eb919a1d92b46ab211a5c3 0a2a97fac162fd773535ca3b6a0223ca688180a8260444461ab477118f7d5160 60b933f9b00f5b22080fe958877e86252f3476f16d61a538ecc0719b5fc9ca91 e358408ac05b5b95afbeebabe21f0c287f838c1f7e8be5119b8b97717b742ae3 399daf7fa703f2d23f15b4f3b977d462b467b692dd773d5bf598ff737abfed95 9b45a76bc2208a7ce2e41bcbb2b14e35471713f674c97ce8f91ed6de3bc3fef7 988440d457c631a2cbbd29abc75403093dd4d9eb718bb0a91c9023433e3227a8 fd1cb54e93651ca0d1cae9557d144f3b8fe7405ac672a52147703ab883d61d2f ae82998b630f2392953c5eebf3f3b355b12286d20b12f8fcda90021a241c3696 6d8dafb8d17e7259ec14c7520ffa2f59c56c5f4dcfeecc776546524438b89967 c6b7327777d638900a35864452ecf87bc873c5852b2ddd33baf26a6fac752c0c 0b5adbf7020d4e213a063289f6af4cd6eceb1b55d5530df989162ec0f4aa2a96 b5adf2d78a632c1a7f5ed17cf3fe629829520bafccb23578714fd68841f377ca 3a87a9363a8f8b7a6d42b583fa72508baa20cb92044b57b9ffdf5ee8ab983724 6aa2b9d3bb178537f35abe56eff3b70c008ad5e826b9a7ae469180b4d130f078 78d8e2902d1a56873a410e6485415a5b2aaaa3f50f589447f6414478ccfad06d 5caa9f92c7d2d9d85c39b30ca7ab007416d5225cf8414929f3de031da209a0ce 88d95491a7de41dc7def28cb53bf8351bf0133022474eb89041c9d6b6d345e13 70050c467a73767c3db0bcdcd1ad396da6f72a94e31255cdfc1ef41c8211bb62 1b5fec393b8028a1e62789ac5eb0fd94d54425b3fa784e309e09178c4ff30b3f 9e65a008e7c37dfc167f8498397a0fcedc99668fb19fad85b12cde308bfeb84c 794cb41d427bdb034e40142d41b93bcf140d278b92e9d810045fe9427a5ebc93 d59274edbebf046ba34e2f8aa2709caebb85edfa2a9047fd10b5dc4ed876a417 a2f2c03093ec3428df4da3a4fd5fb0d805700c896c708686db5e600f0399e22b 986dccd968441c57b6bc47dcf4b16efa7b8114034426f0304eedd7d22396b841 f6406570228a21182245c3a8436ce3d006234c7643396c7527a5b92bc28528ad dd073f07af02152879f8181705a22078b42cca90383e8a389c3b05275755e785 d96fbb1fce462fb0fa9d4ae0aa8eee882825f807b98daf61010c244dd0c447d5 5bf28c118efc0f9e0523f01d554cc1c69f1a303bee3ea20dfe5fd8afdfead671 9d39a510db0500a25782b146a1705b84a4f89fdc25f9146de31e048c92a6bb7c 0c8ffc7ad802e417350a0842d4379cac0ed4a4f545d9ded5fe4cba2d85644317 303b622db1c22dc8b7f38edf42760751ea09bcdaf460128d5ce31e7063069606 069688809e6b204eb4e1bca22535a2a2215593d33e111e8b019e0b670e139788 bb2beb1440094bcc4e9a5cb1f382cdaa2a17919d44cbd51bf614db083f1af85d e9bf3d6704a0e661cbcb252090fb6e60285040f44d67b8d55207e44f64264794 bd3fd198e3d95745992878e7c1975cac61d3cb3eabee1cab712aac0382641391 0217ed3a4f8248e34efa86de516754be8859216f7c0074adfc35e4d4fa254c93 fc41d5bf4fc2bf6b18c30fbf2c04048cd87ba56626a40ea9ad41e46e13473c99 fbab84e03bd48d6f1bbf82feca047fd80a2e7b3ab480fa6a317e23fe151d7b3c 0113e3db4d1b3dd4545944f7fc71a6830897f15ecbe43ff956b98b6f985a08d9 b74168cd33e72cd2fc11950803e7e96738ae4c661fa65fc7720471f8ffbf4e89 1e3a0c718818ea5201bca7b9dbe041ee0a1cb3f0558b826b10ac8135fa2dd659 600cd841ac7945a7f4b056f95b529c69bc598964979d58aca9974058cee11813 394e0ae6296d2b7a29f44722f48ca1d03d91c2451f1ed453d48e8e0f3b97d710 65b78c0955a79bb1d11460b2be62d7d3ec484c4320c66e1e624037b22381e779 93c6861faba59ba43472a3015175ceae3ff344d7804ddaf91aef524e048205bb 1dc0fcd97a1063e8053da2d364fa962d0558cefce10f1d7e6e9e7af917dac938 dcab49647943eda777394f3363db0df4a15f865d9150cd5cdb9ba3a68acf1d69 1e2d3a6285cfb915022e3d72799b9092df5fa6581a061bcc0d610878d8737478 a1ecd09f8d906b7027ec7c5ddd52e39406b0af903da72c1893c5ca067768bf40 cfea3c5ba12eb20312db23b707be03bd3c7e92bf8099a56b00def1d9362a1c37 cce7a49a4a75c8f8e04038827b7f02ed3746d22c7e879facf46e8e1e07b5dd2e c4475efd67863dd3a74a98929bcbdb12afd4fb3ef3cc8c5811196ceba01f80a9 582293f19adaf664d1ec155b2b3ab833be9284969389c231481ab2f6189bb5cd e90ad05bfe574c291d5b1d0e72cc49eed8bedb5f32450653706b4d42dfe07af6 24152ae422e3fe44fc6bba4d7196035a3b76ade64d7614360b1fd8627cae4253 b0705a0548239c5faffa3454986f4816c8cba0015b622649b81ed7e33e0e1471 8a7a4e1e2d0145ea0d30fa028d623f21579f7b17c2106a8e17c6a798c04b6809 9ec6353e9cf3884132fb3c2474af5bfed0c25f53d6acba3a43ea901fd1e67d1b 22475d404b6d97dd0accbae769b350e2f467e9ba267bee17928d039a4803d9f6 40b508ceb587c7d589f28f95790d8f03fdc8d2aa0e4d31764d47d1e375002e64 dc740581fcff2a5b6f93b7365d4c04b1643e55481babad59278b08f4981b6dc6 85ea7c77c82db9ced544aef7f72d078e20b9ade0888ab9d12206cef9b2062905 0be0c6b274e94cfc7b930306d3715abc75ea53488499d8474f5477255ece8a84 e203cc21edce2e8281e6cbb5241b54ee7065384cfa4783d23b05b7e23abf5c34 28f2f9f95bcccf9ba4525eae3fe355fe44a7c31c44e90345dd981e0a79298bd5 3c6483ed350fbdf747f59e7d3b45f06b231d839275aaaefea93be6e50b06ea65 c11e8ba464bd7348ba600e00bf45d54e2ca5b14a2f8bcd92edd9e3ceddf256b4 c1dfe565de6c8989561d1e4122cbff1bd21f84d836eabaa05a22f30e9c018e48 e84b1784356d9da8010414a53c5cf56312961671e9a87f7b0c64bbf9f6b533d5 a26c032133e4b4bad7e39b1d0883eb57991b601bec7e46701456ada9586b6127 7e5de12318996f48d844b1706c1281cc9d90d4872d19d3c3cb7f527a3625b895 201def2151c4958c8f687faf073654e36869130a799c85614fb12867cf2d57a1 9186aa1f48e2b8a3d9379eb4181b3482cef73d4b26191b0c1a433811f19bf4b4 d9d0159bb323c2f4a6307652c2a289bc2766bb0a828fec9b5f2a3c1706ccb478 9976e2e221d96139ac6874f6677860a2ea57359b0a4918a9cb5ecbe68aa2a922 03000406e36897f9b0e37d1054a5b9f4b00234a99d83af687a44a66be24065e7 3b2c2e5f19448d0bf0a01c97ff2578afa63f41c153a4adfe4dd8a1208018dfea 56e59dff3f15d4d0b3552f462c560c4394592e92aea9ef39cca1ea91916771db 42ca6ca7f5a44d531c38231419c0305f24ae42cf79dbe48bcadc5517d28d1a28 ba1e31744c4720ab59a2d39cae45d85ab6243f1bb51e0b1929f5ac6a0c38b6ed e24587c1a63cdf7173a88311a11a9280de281f57f9a594e4ac984fa03eece213 01af8403613941202dccde716230e66af24b33df916e8d9ff0df2557e635e612 ca79d62c24badfce9167ad388dd9b860e093431cd8b4d27c63527ae812e45e51 d0bef08399922a32f80e062a2d660a118b72cd50432e41927394e2408fc88d66 b8af4a128490a2b8978d06b76d9dbae08a672483c05af63008539014f7ce1812 70d4a20e75eff92b1e0e125c2ca508d9c884d2a67924b85c8c6d3f3fab0d1bf2 09f983e85f0f5207aaf06f9d75b5924c2ef141f657c922205a5d142bd98a2122 f24f7e8ff04bef2886d5c6eaede9008d9321b9d17f44d4c52a83b17f5fed62cd b76f23c8bb616a47819ca721710c43a52932c04c8d4aece46905eaed25c8e008 53c7ce925e5fdb68ca1fec16604189bdfde591934e259a90a0b7167538d32997 dc6a5eaed83c57fa5fedeb0c930a50c1d424185c89daf34b97b45f7eb199e78f e44069cfa470b5f7f59d1d011aa3bfad08e98b76b2418b5a0766293799437032 f753c47cd5b0374e9c814d8a1cdbb113bd31e935badd0d51d63a95cd91811064 84abfde6f68f381aab0a1b85de5e3ec3b7dee8b322cab0b215966c347def24c9 97de7c3920ede07cb69ad8bd54f22e617d4770b4d7be787a8cd7ed616f621abe cc286feb503410114abc5568437071fada02132a1f8780eb1f5ce840d0e76c71 726bb0995ce2c85976e88b19bdeefba38f678770d4d6f8baa86b3bf3816c388a 534047d6f947d9da658a187adabb1e8325cf324c39e8d91006620b9b060dd076 8789ac3f0a1dfcf83b3b3beb37c4b6d60359bbe413075cc4788d0bd3aee31215 67ed1030cd37985854ab9ada2b73762f1b5c07f290b136f9095b22c1f186176d c03a5839d2c5807c14df02c16df117db821245f09ccaebd8a238509588ea6dac aec9c72cdc83572cab53a906826be99934b6b6bd509469511e04419d678c2f4f 503c69402363fca6a4885951ac100ee604db24a9087173eb7c0ba1333af996d5 ef3a9d071efc71534007abf13da1ba365b1a4514df3466bcfdb4aea3df2fef14 cd2b7046ccd327f01bcce176b229a83543fe9f4f0509e97e9eb09820447ffc0b a694f8649e27307bcc72fadb4ba57fb9f3bfc4f2638c47f75bc4a3b1c29d02fb bbc2443058faa519fea3cfa2cbadcab78f867be308597bceb4859538dce12b41 37ddecde307cb2a1faf5094a0b4407a738d7ea88aa853e466d353b4311ccda52 5a3cfefa5ac276fd1d1b1b02e3e2220041775d479c0aa668026d1880b4deeb13 1fc978752a5eb5e8f334200889a9ce3d5de7b7beb962687ea2ad39f67acd06ed 32d78bee15b737adcefb9988dbd3fff7f7e98a3de046806911ff5c461f0b189f ab59d8affc7fcb891fb63f93023b50c89767381cdfec45d2eabc0203a0ac4a9c 8cd77b97db19b9f08c3fd8a7634d3071403be045210408af5f704f50258fe03f 230faa5cfc73874eb8cc5027767e61f9b6f1b8e96b0705820637d5409137ad8f 5e1efdb57c6900582c8c050c29ee7942ad47d3ecce494516b31aa166888966c7 f1d9971e1a8410c3a554d4fb536ca32e8431d936ff70fdbc11d045e913700b7d 5e2b8ca850d08363efbf4299acb1ddbfec9e636f56f6dfae9f6509a9aef83be8 64fac0e26009fbc8aa94737f273f5b3116b2f3f923349895d90da01b2d6401ad 323999b7b7b562dcd7fafe8ffcd221b6daea4af59465c6db613d735fb3e86789 6ae671ac639b93f81364d8c165a24a03bf2502dce1ea9f4f701673e044cd5047 a8052c35f6729be8ccc27b63b97a796f20b2512a7322356fd82cb156a2f2aed0 8b347c58633e382857113211178ed6191e612dfcb79902129de48a006fe53574 83b8a6ec76f8099ad083db09b73ab1ffb1f6f1858ee66c5e62cfbaee45276f2a e5cafaca1dcfe104dbcec61c7ba7286820ff49a3dd6d074a7d6d658c3f1f038b b587ab703ab66c0026036a2eeef7e301df34c2c7999fcc2cc5f3fc380817c987 9fb350568ea7b3fcaf2f328b9bcba4c1565e12db8069cd0e61cad16226b39b8f 2f3731fe436524f75f67f1595824b4baeae9395784b1c5a57864a3d63e8b9005 417f3d9050a0f404438348b05af0d34dfec0c4e1361350079d7125ba7f5c49c6 bbdd5bb81ce73898f04793b43c0b536b1763b3e22a212e4ed348f7f2a02b84e7 6bfea1525f38acf75391d67b3ecad3dd393ddcf83a829074b58a1110aa30ee0a 0201092a2e0094022a88e36e167309f156822c09925cdb776c971220dd3fe596 b815abd24f86f957721de3abb5411a71641b79a1c682717e75e3491d7b583a63 ef9ba2ce62f4bd44b12e746f17d574d90890d0997e7d266785938609b829369c 2ad4f24d59d7250baf363319949d908f600c7e7cac4d6b5b83c7acdde3e41943 8e816f9807cfcdcfc8b70cbb2b1f7354104a9bac760ee172e6e6c906916f7724 e58577e2c01cdde600aa29885337ace5daa049bf0b8fd514ad586ad6b0c154a6 ca7bfc80a04c38fcbfb243f0572397f55c4d6a5583e6d0da9ad4d515efa65584 c46f9adb1ede4efec1d3b9894784344f0fe9b36bbc199d656eb774c4dd63e74a c360b898c4c00e466d1d20e75585e525da17a3f765d9b296ae1a3ff3c61f81b9 37d7d00a2a9ff6bebb2037183d0571ff688b9ba8a9212778c5219f9c050705e5 c0a3839f4b84533bd6d7983b84a646cabca7e2bce1c86a5988ec89dfd724cdfe a833adb53f7e2902e017d6da703cb74165f3005895753fc2228fb2e5b4765df5 c938b10f04e70efb36e3ac0b1c7392090c72bcfab6822b04d8e51e50dd1e8be9 f97d0f31444ae1d5666d1b91bb674879501df3ae9c21771711929e2cf4e6a96d 7ea75ba2768bd64dfbf2805582ef5cd041bdd4983b73c0403106fee93f 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: Utopia-Regular %!PS-AdobeFont-1.0: Utopia-Regular 001.001 %%CreationDate: Wed Oct 2 19:10:38 1991 %%VMusage: 32987 39879 %% Utopia is a registered trademark of Adobe Systems Incorporated. 11 dict begin /FontInfo 10 dict dup begin /version (001.001) readonly def /Notice (Copyright (c) 1989, 1991 Adobe Systems Incorporated. All Rights Reserved.Utopia is a registered trademark of Adobe Systems Incorporated.) readonly def /FullName (Utopia Regular) readonly def /FamilyName (Utopia) readonly def /Weight (Regular) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /Utopia-Regular def /Encoding StandardEncoding def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /UniqueXX 36552 def /FontBBox{-158 -250 1158 890}readonly def currentdict end currentfile eexec fa444f2716d92b815f58ca9049c815358e22e32e73a3e6a653c538ee56873363 67713b8cab082730570f5b5efcf34c2cdfb6f8dd2b7905a37c1924a2424c16e8 711db76501f564506b0f45fef10d83c3e3c6df2dc0af7802e7f42c81b4243697 ca09088b868d983e79e4b2c3e17321993cc8837921fd4ff7b92a1294c5ba33e6 8fd40e63df624b51865721e034f71bf57bee0e0c2a9c169c7a626496540d45db 585d2bc93f83e6829eacb859a194d7a57904cfae75e6188c7121003ae40153f0 0fe6fb52f339e72d4aef38469328465a3bf0ca1ef58dfb447612eef4ada248e3 ca525b0884971b85099d73538152affcad51d03eb4060a5c580f453ee78e5c4b 991f77c6e9600c135395d56335a7c3a75c0341979d6b404ee496214a5d20ae06 e17d80d37bd3540b8fe913bae1674afe37d0c41e3d9836a7b5147be32f9ba01a df1a73b89d30bb595a4b279032e37c8230b6d4933065947c3e9150d2c7c4d439 d60197eb69991ef059edf886ec0bdd28158a71a2df96dcb67fc0bf81c34cf27e 12d6ec950a75993af99fbb040af595134198151e7361672d8538cfadb4716785 dbd48da442ccc911ae9157b14e433559dba1a1c5619e99b57274d6998eeca3a4 7e804d8fe3a664f39f33237831385949a230a21e52a2dda733f2f89b02ef4ce2 5d603c9bd2f8e4c0443070940f0380dd1ac60ff462a9a71965a79d787e0711df 0a69bd86a4846965ac6c77f2e1699c4620c1bd9f5b2263e13a2213631c55f7ab cf60d2e63a7830d5011d9b9934bcee2103f4a5d56942ce0f590a15dab480e5e5 723afc8e1d8d96f3e0d8629b88ee477ea6cb8121b0adddf20405f8a32756004a 8a59b2cf922a6dc0747bc15e99079aa12ac0d9fabf8b47c5a61ca5268e01317e 1f0a38c468ffea597a392ae3399daf7c03126987750258b5e077d703cdbe05b9 a5fc4d80e8551c2c06a2c579272877fd462fac6569a7a9f964797df79628ba7f f77447fc2aefb25089ce946e0aa5c5ff21370f0cf84d8e2affa8b30891081b16 6fb86fdfe65e7e02ee551c6b3e2e324cf7e18664883dc538018ec8cadf7093f4 a13708013d6ca2afdf644c0155342917c2725598fcafddaf8807200682fcf04a 4efd5919c21ed2ec2f7951c2db953ed292a54783f5c541bca68d305b05df5c5c f17b9af31035dd8a77ed8b54d4de7d684f54c58a28f0dc55e7c692cfe444216b 18751c24ec1c8a00a5cbd458a0ad54e7c13f26b4c4257fd992fbd1338845fc69 6b97a2ee6a4d4f03fd387e745eeb8e97eb67e40bacbdf1d6c08e9fa2e317d30a c4234559096affd5b2e65600d083ceb0bf09f6c2bc3af8cc00ff5e91aeda4c82 320fb38c437df9dfc5e0b2ae2a80c35b1f180872d18617a48b118914a9aa4b53 ff57f329d2a63f1ce7610399e8d65a00b58f4f7d05f7e46270f6572b2601547f f3414db6bfc5905df0093102be959b4f1928ffe29907c31002ffb9146594a29e 0e16fba9001f0a71d2b85ac48b7ae6e7c736c6b29d3f58d5acc6fb82b1d1b754 ffb26a9642215861570e72f74f17c92641a795ae1918dacd54ecac51f75e060a 7a4cff21863b4524917b756664264b3c74150bc7238b1d5b2261a2ad18262a07 708799d9948d6217bcb423e67b1864381683aa06e35cdc60a57d9b7e9349e2cc 71911a0fa7dd60a2ae8edd0d34a23dde422c4040ffd3bb82a4aef63b9a787cd0 3593ee11bd953888aca122ae5b0aa22aa29cb0b30f7ac7c7cb5d045bc640a82d baa1b5a2d4b93eaa0de6cb59dc2b327eddca1d059e0bf58efbea7bb5ac26919e 4bc6876bcaed5dcb2ef39f1aa8ee6396fcdeee15f4be56d723abd366444817c6 b0e1c9f7328e41c3fc8af463252d2d2d6f3b85a039b6fc0ffe1e258e60c167b3 4ce9c38201c812b1a690124b8a3d04ab545887fe7a20100a84f9cd1a1784d9e1 30b3dcd4340f32f4578998cdbc99ab89d7cea83c2a2458a250e6d08f6b6594a4 be2e55eafbd3cb9b341cba65104473194a083e58e5a74d1f3fbcdf7dbb3c35b3 7d24cfa170c05d7eafe1125277241875180aa13c3bcd77cc73b6ca3a229697ab e7dca3350e020e039dc4776133f3593c942539038e5e2b944f785ff63212dcbc 2f848a1382d98afbeaebe0e34b8af842a8aeb2a6c6cf77260ef06a3653fe0a2e d3642178135b9f5b360154cb54d21e54f1c175d6a9125d9002ff29b64c360d5c bda4d03b83bc69d694d2c43cb2770d4a391f3de34ece16708f999268f0eae6d3 a02c1467fd3fd20d240627cdc3d6ddeed2d77a5ee050b7f405d7504f626a4ae8 7370bb4d224381b027c1e0ec65cf291222fec2ca3eb2b55f447c7de0bdb181ac d2da6f0cd797078cabb3e2b0b66233eb2b9500907738b4918bbf88a1631ee3d0 ea7fec8adffbee9c34a5c019cf66f1ade36165f3ab42f123fce462b8073894f4 504adc7e2806822dbe170052d1215969db6fce18d7b1805d7b5b4b244fbbc13b bafdb31bf67bcb631e20f071d093934a38776752440540326deb1c2d28c29e7f 9f510c8cb146d8bba7cd432bce0046e59512a47168e3bdcb53a0644f736cb777 b71e703d35edf9b5df2d7ae01744b88c6d8b25495272a00ec863cf1759f9828d 89709b6a5a040726e1cec7b0b61dadb958d3acfb9c3e88a7b7403d6f43eae7df ef2df124fa2dc9942329ed6e6bd88b267b534693892b3360af22dd78132ea3a8 8493304c9c6636257ba74e12115bbcbfabbf97ef750e319c02486b32f1fadd09 8caa2f52b97d989e9b5c28e461c99f8fe2e10c45f01237a5678f09487406e962 6c05d11ba12709d3ce778ea7c548c96c95080d2aadeb9d4348778967a2751632 bcadb5671c2670fd9620dd82365d3bb27cb311d1944c3799af425983d000c8e6 f78708e45ff06e1748fb453492e9a362ee5d5d98d7808fdab21347a96d124f73 ff91cfe4713fdde430602251098a86ec179b4871b9bc33c4810d13fa6cc1b18e 1fc5b5b3685902d2e79f421b08bdff28313ade8556f6ad5c1a1d757a6c3db4d8 41d70c1eb6c2f9f1182686995edca2cd0b8330ab4af9443709071deb6ec76b65 cd6a5ac6af07a94bc7b84c0b4a8233c1547168f6543ed72054464b3466bfdf55 894a4ddf9e8076c9dba89eb8d386545bb39f0446580a1a679a4510d3035bdc03 e8000b2bd41a28d1bfb654fa0b1f4c11315be881020f108c3de13ad25f1ccd7e 56297ace1ffa5d6d3b4c2451aa63ac4a58564b89d652bc7899bbac8ea1aa70aa 46c44c09897ddbb80a81cd06b0f932d90ad2994c79a40b31ee434d73ac85a789 4f5f27cc9a1b9be3ab283f8e04ea1ca54943aa2c3ae49219226be1b0da01038a ea7378786abd1f5365c26bb813865bf0135a802485e4737190dae0538ba243b1 56e80b67e2baba102e0ffa1d6203537524d73a8beada7801765b66b5c8a07d73 1505a6dadca71c4b9f6985dd4ad86b46ac98a5d88f6fcc99afa05072095b0f60 dd766815f39078cd82576f0041c8b660746e0444b3d364b719550bb7e12d9961 09702900d39beb302fcb6f2e4aba62c7de66a6be66f42fc440f3bcdbc83a08e0 af113d575d02b79ee964c6569778ec373d35bf046417a24d6c40b8d5cc3a4bf4 9895337b3818f678b245609513eddda2d7097aee470ad5f1e30de7a4c956a1bc 29e8c82aae65dc84bd1d529c4dc7a7a579a8dd11728d94d1dda916e4a8a7c2cd b43261a0008201f4f9450a1dfa221a67f65a303607611b6aca2dffd8fd7e75cd ef3fbe7fe5588a989cc0db1f320987c25246ce805c7c481b8f590aa5ed7d3c1c 8c86e1299d3060c9b6b38c7a49217fbfe4dd5759a9dc5d9ac91af92611c52a18 ac068167ce1b3f322c574a896266217737103a272f02bde4aaa298d3cc99a375 5a4d59954c1595db9910583873ee1f824ebf206b57a01b04f43339fcf6d00649 d3e7407b64aff4d70fc454cdb9b855cbab764ee2c84a31c68dac4b8d7779f751 3f15630fea9b9e71cf141c5e9264ca6ba79a0975cec7b0b61dadb95b6a915479 de5ee8463fc58da414939ffc37be0f29ae62baeab202e01ce3445669bcb99f25 0f1a801bd25e39d7388a7492062045cbec4858b99f8ef56ed5b87d1f72630a5b c3aa49dddaba9573d6d0d27bc189a8daf21f2dd97bf158a67b832c1aa4af8824 475e7d925ec52f41657bc022fb47122de11a3ac76f864961153efd9458eb48b1 10b996bc0bfb11b80f0b8701ef07f83662e0e5f78cb2f20f09bd3f652b6150d0 3c338f98b5d75ce1d33b1af9c294c27ed096da3b1f8128acf24719fa8de38f2b 3e7cd80cf099d3d01379f585f83730c148802260b2aef736bdbab459c4672543 dcc130407c638571b76a18bf4b42fface646392bcc3e6c052a59243bce866db1 7d641a0d2289231f07baa9844e43dc71a9260f36d6b9d8f13078b3cbf741daf6 8e4114143e04fdcdecddce533216bb352557f7439139edd80fb165ad50ae31c2 9bf4ccbb422139dd5cb905e04d43b1098794e9166c52bdfde396c123efdfb94b 5eb84855baa0abcc95d70804e30516d88899c3a54021d4989ff3bcbb28366858 34eb80b8b6e875a67095f7e64231e58123abb6d4197710f9cbb88fa3dbb23f5c 3d242695ff070d1be81fb46c94a97992fe8722a0984e286d874e53a01989eca4 d8269eea164c16d34dddf75e4b337a6cfe211d85ab4cb6a4bcde7eea12fba762 7382ce1984b9c7139ffd7321c266f0c8b58f6404f20348c9660ec8d94da8043e 09445f29559c379b970886424e58e51969623f8cf82943872feba0472d9ec49d 6e086c584ffa11b7e5ce36fb29caab3bde0a1f3901369de7a3df55a7b80de8d4 b162c7fd499bcb2548aa3ece8403a60829754d899bd8967256cbaa92e1751845 2a616169fef7f6c2a4c2b46ffbd7e6e6dd1774cde06db377874832aac4206843 0d76d834e8f8677a92392eb9f888d70ee74e4ed11a3d105427b6bfe9311f66f9 fc83b3a505bd2c3a9ee65b3a250d2e75d185da636b144385556f5459587261f4 290b1c35119589407b9d957489ee1cc9fa547be2e9f400107fab860ef31b4b56 31c0b0ac5e57ecf59170bf5b88c9f8dec25d2997771cd4f9f5adfb59b70f0557 02d82795da0adf0653753b0c6927a9d4abd88f27cc5a05ddaab90636a71e51ba a95be62d5f70110bd45bff39dc1c736866977f7da14915258b4ea76425f63dbc 3c7c17ecd7f7c492ec7d32a4fdfb16c5d2b9e6d5c2d8c503e12659b26b2053e3 484d48d5f7c63013a8bca37d7a44ad8f770d1955a5ed332d5adc97e849113f8e e3678d101fa8724e8f97509273e4087e9b0081cbf488a71e2b3e88a1995d46c7 2eef942819204b37d927b8235d4530d8e3929530a22ddb5f0ccf6c5294c611ab 190929d8140ad0b93791dc06a6fdb786179a86b38802ca99f0e18e1fd4b60842 1cb03a037899f2e269093bf4239e9282a3bff47625f87cf41067b6ccb6bf0f74 250745acbaf9470d5986cbeb76202907c962c742502252a857716770e15d86b0 9f599614ce5046bf35c7111bba489b78a8214b6f7a27d4d855f248ba56aead53 6ff688f5d4d1100cf7979910a15fd940779e141856b4084917788b57c33553f6 cda316ac147e13ec9853cde9265784aeaa6714eabbd86fbee03ee488d3f47b60 598c3b4f5b0898753067045739a2d58503a59219fa01b48c7e6de93e25372b37 aa66b91459646ee85d903f0c8c03f3e99d4a4adcfc101e90337aed9ce74a1fbc ba0225518d9ee2fbe5797f3a9c79d76e691eff6958aa4ceb6f0eb2114880207e 115426588a37bd6f20d8ae1fd8ff9f9e7ae6058c5a99c2c39e5de454bff2b1e9 90d07cd32652cd1154c8074ff697cc4c3c809939d97497c2e166ee65bf6aaa26 b8a7db18ffcf32ab9b8e73714691af24e6c51b993187e2c4452d56f069d37662 f1adb61a6cd32cba44e75660d3f5d6277010e9580340b357b9d37557de1ae3b3 4d981394ed4811869f0b566c559675d81b18ab8e8bdf56b704002ec0301b8160 148bffd03a1453b65a080d4a0ef403374f841508d6790299ca0e1f369db58250 90dbed77ee177d56359624564ce6f9c76b8a4e8d174cd982b0908ab3b16fa138 22ecaa97ca287aa284f5c2f54bf0fa1822f1e0856b2430e40b14f1865836360d 0f595a92724a83f02ee3890f39660923a5acd658ffe80505faaf57d2b98ae857 9aa8afc5d64ce31103e3884c2f286997bd56b5e511993cff9f08a2facee264b6 3825a101d905271ac5d5e834e2dcbe79dcc1339765e539afb9078041474f0b65 e239b6bc5ef2cc5bc1e179233a8949091213b41c50d6abbf2fa3ae02468bdb4e fa435e32675d11b0eb04feb380bb2188e13c7697cb599ffb41c626e814a5054b 2b1c8f18a4ae040b339fda52446869e6da6415f31f380a219aedc74a5cc291e0 a0fd4e9f2dc6a42a57c9721c8cef8521593e2fea090736dbfa3109b83daed6ac 88b377dcdb03017fb88c7f02525676c1bcc504634e7076b8f215536575dc0615 4b8750c0b6d5cea325551f0c2c80f525b1d42fe8512879c5f933e2e750375fde 56d74eca7b412c3e1f7f9119649a69bda5c33c4313fcf9a981c7f70a0fcc165a b686533f8c46f65f195064876bd2224e29e0318216f7285a6ad28f7dc3cd0f24 e059d177593294c252f5359bd8c17e6f2232bc1306349ad934295dda3385c7c7 84aa04b2822a29e5f6adce824531c3a42d36886304d1472a8cc337251b70dc4a 6800fed434986229ce4eb0d081afca71017a6a9299cffad257faf66403598774 967c9ad71366c9052168831910d81cba3c6d483fcffa5ac4f114139f9ffb9f19 1ca800ef6352210d46106e815e5ec75175c11aede7d142e9c034aa47fd0982f2 6d79209cf1a646daf4c199a9fabc665aa428387acbdf157e32b6e53ef720e937 74a932d227e75213e3b3b4005f9aa856c8c37632e5fe3e93f956c389ea5d4fdf 508078edcbb705b7ca5810cb8bc911360fa788cac410a26a4e0fa0a96f1601ea 64fcee9783c617114354c3a81934f49655e7e6db0dc6af2a30dbf58ba413c3f1 7b966600ef442c4dbf5992f0920bbaaac962c9e143f636197e0f2da6abf804b2 3622a73969826eddcbb77dece0b2b447a53438260326f2438b0ac5d6eb4d6469 2d51353038147fbe8aa71376af13130f9658d78391da0379a58e1ca5c4ce9261 44eec58a00eb27368c81ccd235ac0fd6fd83f3c6bb3a79ec47e2a7e26606f57a 28d18f79986ca2e99f8ada7e8039b5c43ad5a1c8a2f460832254061a2e614535 333ffcbca876273bcd6788d676d39755ee9554e862a42d15ae6d5618371f4b61 3b72d63121133985d4fe346c9661f06b84d52821cf422eab05fdb05798c74c32 4f715d6d5c11afdcb689ccdaf09069282d44b8e06d01a525c287c4759a00d434 61ff3cd207aaac2a78f85dd7eee3f14460b0693af7758fe1de2704f5ebe68622 56294711807784e0d805ad8f751bd7812f22cbb4db6d9c7055162e3fe268b8b5 c3179395cb9977e3329a763914e31e01a50337ad37d3b6d836397d450cca044e 62b8b5b2b6fe129635936b56d9f44019dfecba8c5515bcd8f761cae52cb4a15d 663db5eec54bf2805f529a1536b843f08b8b2f80216b5fc86a3f46225256fa5d 3b4cf7531fbd84d9c324d2dc6dcb3488bceb73e0cc82e241e6faef488882efd9 fd97f2db837b4ad410eb11fbdd40654e2a54db1993d15a2ad4b1712025082d2f 14b492a27ce45501702fbc49af177256c38aa3f6d6460e9c62e68ca7cf4a544e 3678e35518ff35ecb176d426ff76dd3b28c73f8b616b06a58e2353cc4d6467f9 14149a74a9a4352bd886168cfcc7eed2257e649369cec260fa7ebe06ec4639f5 6663cf1248784cc08b86a3021a501230241a067a37ef3c4154bdeed60a8d2003 f7c50649f3397288f9e0583f3b815fb6b2105085d1c90053afa09bb32d447497 86b9fe0535fb1e3d04e239682f78d79d847d360c941fec3b79a2a25ac180c31a 3d2a75ab2dbef26f6f511edd4cd18623fc277578f783fe3e4b342de641b832a1 452b2340dee91d5252bafd27079daa9606be5f4975f7e1b022a468652085c364 a37169f090f3f16a19cd2a532de7947d61ed21b819fd481fb8fe5dc5c2cbee3b 5ce79b3c0a8804a7f563f5ae4d791fa3f72b84736246aa8967c016baaf8c5b46 a2453bba98f7e2e49b91fa1c9a353f69fb0197fd00198962f54702afab93de98 e5d6917b13ffb14e7a93aa015f9609d503dbace4b276965e638dfc4f9a95546f 287db040292c1985af5270ec88a3cc6c642303f1c7ccf78213ceb8f4e4a1fb77 0d87601f07816c326ee8255ea2185f99a3545d8667ff97be576890d00e32cee9 03751d8622537444431d57480776da0b72980e67ca3565450a1b7c8a77e25305 66459e0177adab6c88b67bc401ebefbc00f692c0dfa0182010d1b69b1fb61a08 34131a098f51944940272b5e5f02be32456a63b396da5b6978635f67ebad78d0 9153d54c5901d6cdea9984c0c10a5dd16ecbe305f0cc17918f48e5ba1e844d87 d8b44147658fcc604395d8947b65e0ab90d383769388a1fd1e38f2a82d28ebf7 e28dc0d30deb53bc6ae2ac3fb2265174a649fedeb61a59b8291f1e24d3d9d906 6b7ccc0b5e7104fbce1cf394f0d10c1f0312e9a207101bd3227a3fae18303c79 dc4314314a689b54df4c6c4058d77686b29d8bf1e2a41aa6262007cd6f76a93e 5f831ebc389af59def29d27aa03ed8b5721fcc3e31849ec5a5fe91174b8b0918 1d8c57cc3f2ad21b36367927a7ec54c6e7b93acebeeed16dbc3c25c1592435f0 db87044cb10d4f5e8e6d3d5bb9c571f67602e31f46af9b21508dd521bb74acc4 4751c690cfe91cd315a289151e2185bb43310f5246e98d1ac513f6cb5a50c614 a3cf4648153e2d533a56576005169a0d506ca0f35eb0eeabc675425925983d11 353e4d5f1ca88ccae9d25e3ffc7a80ffe7d7875932bbf6a5c4c13525ab4397fb 67e203875eb17a93c08b5e7f338c4dd0d714e5542fdd128b6b9ceebe7a9756bc 325b73cdcab9a6ede565b852782bde113599834f1340eb08e7c91a1e7d0d2e8d a2b15079fbf9a9d8884a209c1663a67941d15251aeea82881a959be9b281b389 d07d7b7fb7e87ce654f0f4061b0fffe0e10e6d24d7847786b5f7c12d5f041a2f a1e861f2214fabc98a98455d1ead5e9cf8859a655bdee62c427c975d5d09bbcd b6c49fe36ba586c71d74cfdda0974c4d38b61e0dbffff06630432e34e3ffc099 18f07f8716b8cc5d78ff1b96ecd772c7c84972b7378ddbaf15e99c5150838a1e e9840335a32ffb07acb9aaab91698c280575216d0d01fd81cdfce2b23cfcc896 18a20fe2f824bf598f28a0d01766d697e30b996b1649eb4af0cda161181f19b2 72b8651a85def9588ff2bdbc7b2279e110bc9688ac4eba58c53efda87f0deef2 fc9d2532cba4643dacfac7b2fb46c93175435b046d16891e83682ba37c9b6610 65a17c2d930181fe13ebac6bd4f648475ecc64da55ced31689056f40ac358b43 4c5576fb26d1b964b9a39ebf895f06270f22993ab03e894d04ac4a5bd92d1e07 37b4166ebff04c43b13d861835c7da698b02193e436376db2da0b6ed3f16ca50 dad912aabdb6cd26559c6f6d7ecd06c5c677e969e33f1b28c3009365c51803ef 8eda80de54ce0b13629b9430f92819ec669753d660f8e159c80eedb678156bd5 abc51fcba6005e792dfe0e6db131dc3a6ce88d108700906c4f71096c73cb3ecf 81026add0095e8dbe8a6cc29046eff16ea07961861e7b6f3c073a84838306923 c68be922a85c444411f9aca0c0d8d5fb0e4faa5261169561ad2c3f9ad23771a4 fdf4d62d96aa2a6cd74b6d82c823464fca40163386f49fa31f776d532dab9150 459ea510c75c455193ea20c68915dff08a801302b911792b2a27fb963c47824b 9581e3f29ffe9c692ea5b021db14cc8656eb0e8bc41368fbc2d897e43d63adf9 2a04d749d4124c529ad00df584fa7bf5527c1050dbac7816b58ed0e56292645c 5a7cb1c291e6968cd64b88a82d6d0d3af1113a684cc22a6bb652fd655ae792e6 627f6d40af85343f6c3874b267ec0077a7b5f0c2d047bcdd8b9a4569b3afb67c 2f58de6bea4283c79721dcf908312ad8a690830e0e4c65581668af20527c0757 7f3a480d23115802277ba5b3c21042d64c3f24989af6994bce32995ecdc83c89 ed0cb4c21067ae5787a32be27bfed9b0d398c46c01e903851f015d1d9cc35ee0 e04bf4743c06d8c693797c86e27b95be4a99bd8675630269d7026d66fedc5555 6fc91972c741f526e454ae330bb197865bea99dfb57a3314fa8b88379cc6a560 73febe6e08924b024861066bccfac774ad1fecb732a58d1807f7a48ebf2bd1c8 d35f9dec813383ba18e4f572819dc7e3f6a1f2b4a1ab674c62e4e2455e5382ef d17beb38f3098c7489d0d3bc15657fce7f5e2dd2d61e7a282869159b8cc78b14 ec05a70eb5e08867c4d0666664a8f571ee23adf0209098477c21914a9205524d bf7145303c1001229e031faca7cb6b074eff32410763f04f70ff517153928dd5 693adce84387a4311f25981e04dd9ce2e1bbd0c1376774d1acbd9dd4843c31aa d2dfc3335baf8079eb494e1156887742586cf4216b88535603b2ee6a36175c11 197f835ffd5b48c189f71aa9cc5466f0934845c5a04a80b162e9597d776b579e b6f740785cca3ff1c8d9ec7619ba3cf9a907a4691ad85931960d69c9ea5de975 60405a3d8d603c2432f423ba5ad9276172d51f7675f9df5f73f2f2626a98f63d 5c1b75c401523b63a393ea6e7f6f51a5bb0c05efd568987bc1b5340fdd237052 e6a0a3da836767653dc1c39c241046d03e60d9b24e140fac141538e324385ccb e07c2fd3a9f84057908e36ebfb92e2e902df7dafadfca344491051bfa07606d1 f55823cbce3c9eb697ea5f93506e99a905f65b6e1b1c21704fd802cd38cde527 6201ff7f812b7c2e39cefabf1d65a2402e61d3062130764a8931ff71b9418db8 49cb878a859d04b4a3fa9e0faf797ef92aa2b35e8931c0c9c427fe2d6b4349da 5417053a3685136c600ef03c0883dcd34ebc7afabe6e8161acf28346c7dabe17 f3f4769986d9a7f752db52b40748d03574c003b49c46bc1e75b2d2f2113bb211 30eedceab740fc8dd9b298cc6c71f11d0465e09432bbae6f7dbe9a8193e7469d ac32ddce92e51c5dd51c5a5feb5a1cc4fb60398a7aa1e67ef61a4e75a5df72d7 0ea758aa901064e213d630aef583aa2838ceba0cc92fcbf3917024bd7b6744bd 7cfa3f107959ff732d2263c6e22398dad57caf1b11360af9f1314616df8feb8d 5398348f7662976763e7ee9915f9bda8bd2c4d5df31f297d3a29fecccc91e5c9 c9d5d55a816d4c3ddc521e3b158e9c2febd9153e4d05de3e4331917fa8c20911 37a427551eca16ab5b4cfa522c693da69235a71a4dc1942115af785b0aa11c33 6ef5dddd7ae0bd5029c738963b7bdaefe7789770b7cb088e0f0acb9728df38a0 26a4c2e8de4af8c725961b7b3c71943ec2ab02f991374308fdb8e0653ecb55b4 e28e339e3a6a52e84f33f6347df90f5134f6779e9c08c72b079c0fedf524434f 7f2887fb507f3410dcc3c01e7f7d85873f2896218c522881404f250e47fa5b8f a3530b7fa9dd00ec58b04645f5b647885a7916bb0ddc2e943e65c4aac8f49a34 3e6806749141db2aaff63ce2baef46465cd4cd078320cae04a2d43e91cd0d1a6 b77c25d4a31e71f6112efc952a5388380906b24083a5250a53aa30566f27792c b71d1638ffad272cf70b7644ef4d98c86200dd08939bcfeea45f8b994cf61fa3 9220e4adf1b03f2b754535630aee18abf16ddb770c0133b77d7ec2a41b3856df cce8adfa3233df7faeec8e2d87f65484fc3507c07b5fd278b6c4f4b5d1ca7c9e e984e6ad285341da9787072119424e9b12dc5712b1564ca51fdcadaf9b43adf4 6264c2c71bd1f16eb2bfafc39525bd6cd37513d11a054c6fda0dd74c4d77b96f 4673115cf8e9ce0613af7507709f46dcc15df317f4a4ea2159129aed671fbfe0 5b2b4cf0574551f30129731a2f534f96524defe8e9a5d8376582d68224cff97e 2c70aa6cf7b4b0ce1a6f2a43d93b803e69a428041b72d5d6a119c5edf48c7f27 f933d50d2cb37b4c2a193d761baccbcd4245d99b6ae63e98364070e49334a015 7b8dffe6dbaaa47c82d4471c0f4ae1e37f571b69500f5b07f495b8cf99624db1 e870d0e1ad6e7d1324121f72130331d9dec2d2b3f591ab571cc3e169ccd7f98f ce1e045121e128cd0ba835d723180cfd97ada5e9d4c017239548d93d0fad9067 4a29e7bb7ff1ee8d6eed3b985a367f32f1b77f38a187bffb0145d61850021803 307df1b22766f7e639e1b1bf5369831fc4cb1d00e6608bcf9d3bfc7d45a751fe 88204d1efd7b8300c1da1c5d66d7e9aaca459cff199c67386f2bc07b11d80701 ad2fd7bbd26fe3b59f2bd476b14fa8143faeec5b4ec924f6490b52633640710b 1b30e460d465cfbf029e79d286f0369838937e865465b848a96522d730e99f6e 2e704681bbe64012a9f066fc4b89700be570ed10ba59e7ab73daff84804a181c e078a73ef6edef9a64de161933106c53376c1d8499d0adc23b04bf20d3d6dfd3 f3fca2d20cb4dfe88930697c0e09e15dc2c46bb7dfbd173424f6c04c2ecc92fd aed85cc388409f427bd7fc689bb565ee9bb84a42395ebcc172ddce566596c1c1 b1f3caa6713fee35e29e45538e1281bd4235a5cd26b29dd266d81679ba85ab4c 09703445b96aed6acc77da9eb05e5d45e94b767df95174702b9e11049fb9073f 9ebe73c455f497a9a8cbbef7c778eab5346983920351cf59f028088e8f6d1456 712149c5f158a3125c1fcafcd4854e65dc4483f758f2e6ce4e4ef6982772ee79 8d1f2ab99d9c64a2ebce6eb5fd9bad0b5e733cc5fd5bda763dca619cb4673f8c 44c3497c9ff5a699630d001a7ef9122c04044d7f8dced7b45986e423a3434e85 180ff6a712aeebcfd6af1060131a436df14b6655f34d15ecf69d3efd43914375 8240b1b5fe526c4fee51ee2dd0ea56e39cfc72d4aab0adf069fb374f12722aaf 0dbad8c444d51be685dd0467958fdaccb6caef1285ed05a744bdbc278a6b293a e35c155e187721e59a0b8a504142ab778dde4adcc29ab1b3ce5f3a08473abd4d 7ba37df73df0f68aa1d395dd52d34d58901afbc3b6c6821423b455208e62618c c7bdfd9d7482a0fc398009ec88557c32cb0a094fe2ed519670abb66a09c04e90 017c82128c77359570dee035867cc2b0cdda237db1657899f2b6adce161da423 e775f9b1f4e41e144c51eb149851154e3cfb8c02c01a6b3e057464659bd17966 b6b8ba0db02fb6d0988229f54a5a34f945bb89811b504869cd28c1833e7872a0 9e6ab944616d07bf55a429e8236d95ed5086854b6a31c0383961b4c1a51a8857 8cfa71d197849844ea2d97864cd7362009a5edadc8f1db38f039ecf2be135487 bfeae4f302addce069b242dd3f1b209e30f5f8ce868f4782b8dbc847b9508053 52c4bd7fe59e06b8f18aefbeb83089bfe841fd853ec3cf8cb706c8c053dbfb8c 6d5d96570b294233bec67f97d7d4a72f63cee8c73bfc6d0ad7cde0174f808ce0 f6f7fde423cecd0cf44d5641419222cf978ad1d13d3372c32e26263a9e627261 362110c763293abcb4f6735b2da8eb7e5f7b3f27c1fe44a22cdec6b3119906d3 d1cdfa4d6bc961082494e2dc069b000accd5066d2d7da639cbebf3a28e1e2277 1ddbd5477cf51e4c6cb2f782a25374c1b3a4b6ac10a9cc895d6a63856469ba0d a27d4c10bc7916b886f26bb1b425cf5b6533d02156ffc42adda19b9fe8d795be a7a609e64495805fef6f4c5717d66b8fa664ac75d81ae3a9bdf8d45a9a7f04d4 f510bf60399624be1fbd8a616213f7d12e40c0a552b7b477d150ce87b5a151af 29b2359601ec18c60301e7d20c827ce858f3e1ac8abcb5ac2a60cd141af418b6 777fe8dd7a9345cfc1ac7ca7e0ae4830ec047d32378594654930dcbc4394e05d 93d487df567e416528e8fea2ee29cc4faa39729811509b963c43ee23274a739b 6988cc4d9f901cd5d6d4c35f0b1ffe512639093dc837352c65b8b08db64898b6 c25f1f346dabfe3ca2b470ad7db3f7afa2cfb337a91677a9077c437beb2467af 128700f8e063c204afa19a98432ca1eec897bb9266b356694a2bcdb9c1e023df 95ba5c628da655cdafd48c4b7d36ec10fdca5bafd1d45af8960e60ce635793e7 3363c5ca77c9c430b4930c6caf49df3da7e79799c776095700547e81b56b6d81 787c5f968bcfda88fcd523be19e1989b4202b04be9318597f3cdb9ec9f8612c8 2b39d6c0e0a852ab46c6eae1149553403d0efa5d3c8f74a53410064646c19cfe 28fe31ab72382706475a8dc0499d16184177b23fb4fab9dfa8b4e3763f1a2a7a 8673d0b73c39d2d2168f30c7969c3368832689b503fd7ffad3467bd9d041b080 f908bff83b961eb55a5772d00745968da215c98a07028f6dfd61c2be0a7e89cb 2b7a714480fa7dab44f958143a49ed439dfaed73792f2d9a5a021158146e64af 185c75e004fa7d52861945c772094d63a0844e2a0fa96cd2a2aae0d01117c330 583bc790ced0670675fb0afc35b2f8342dabd20e82921d3abf4b864df01d7c81 e284b44c6828954ef05a9f99294d361456b53a616ce60b1f7ed34c103ac9ec1a f6d7dc9b346cba57df61892724fdff0c42cfd747066f4708dbec0ec7413e0e07 02ecfd5800c859c8fa6defe3824766e4993f654c6b0a849b581e9cd1bf76bac4 1a62c401ad1a5defdb1a5fdbbfde08de4f625ed327140e082589e2e7968024ff cbb94da7526f76a1bd48701ffafe81162cca1a5af807c8db8e0f8a3063f83ca3 02406b11d9a079583ad076d2b2c4a2c92c46534e66a73bd9560efb3759c0fd6c 9c4954c78480ecca329d7cc342646a173640db167f9729cc8175428df4ba8c9b 0b4a0cd8408fa99e6d2a26d2ae0f97051e328a713b804dbf9567230b8a4d4154 fda3424e9efd33039ff1e8439fedef5de445b4e2e8ce676fd158b2dd8c71b0f5 d68cc533e86e000864d053408e100021267077909730609eb5506d3b14af8d85 9f35b4561183cf27c131e3b82ab701d3a70b3d8f479e6a0b0e7303528894228c 5ae8311eb401cb28552a30e585463b1cec61213a06cd6b8503ce24d1f38e37dc f2e99c4b46df6204c7fae22751468d24fddbacc455582abea9f29cf54359d765 ce71103cc54d5da9d222e37c4e7f2989059efe384bf01417d21ed8e5f48de9f9 1b93d9223458d397c20936bf359c0b290f92ec7e1efe15edbd3c37691ae5ccfd 74e283cd197b62557cd81c35ec6480e5072c92595ecaf28213ac7cad9945d0e6 4e6742a40b00a1cee3a944dcb17e40a0146021e18bb590450ba4d35da2e9bad0 69d7d32dbba06291cc8d6f32be8be3b50230a65bb84c20c02665dc83a835bd8b 9833c3b2a08c4fe6c46818ad317ba272cafc468bf58a187bd0f371bac50f6b38 b7bc501fb56c863f6a2f3e21e483c9b1754fadbddbaae486f787ef9798d9b064 bd4465abf0bcd00d4207606918b81c276820d699529860544162cb24c6b88f65 87db059cbb2b25ba23e834b73114ad7f924ab5e1f41523892551e89092b7700d f5281318cb2cecea72503c5561cbcc1dbb388112b0a747ba28f1e6498c708b2c a4c950b4174670c4e1ae89babe57cf8a7c5b27c4635226992153da22dad40514 ecdad827ab16e828f678d663fdabdad8ba4a502bc1cea86737d8520a446298ed 65261872a40058a2a24d5f666e4dcabc0788fe23d0fe23fdce492a9f3d5c825c 0629c1604ae592377086d689af51dc6d82f1245e7836ed20f9aff1b3a0981f90 737ca190db749e07e5e276671590f00ec8d43a4e1481f0bb00835f5c700e4c78 018420dbb66b7c2035b9537cd0a79ec946f7e93a873d41600f0d4d1e0084911c f4b316402cb920178afadb3f779a44155de92d369f5cfe4768ecd77eac680748 d8a995563f3729381ff4bd1e6cec7e87846615ff323451ca4c63c0d9c7027e39 0950131704eb5e5c26e86d71eee1c6a69351d4992dec89cb14f52b23d03dae3a 93aca4392a84223da3d7c5f45dad81a9283978ce562954f633eae93eb933aeec 5efcb02bffffcb21c1a4e453fe4c73c7a326a54d195cbe44401e9e53ffaa4895 2bab6d6de80857f2394bebf0a73354d81cf46695e3e39e40497dcf73e2b875d7 f4913d72298bfdca0748c7fe687e9ce3ba17b5b51fdce8b42206fbdf1b2ddef2 d1c772869e72a65271feeff81adb5dd92673de917c963329fe0a76cd223d64b0 ab3d97259a8a8175b73c4f45824546a4e62b3a18172e8a885d28594fd87ab9b9 2adcfbfe0cf440bf6cc79f4c4610f6f41240caf0f3bc0ae2aa8a87160c55ee10 bad22a2bca321707c2010688ccd8db965e6cb30df7b739c5e30bf88bb1ac990f 6eae36d988eed2b5f4500bbce31fe5bbcec8bb507aef4578e0f8f893f288e934 b18b0715bba01354efc73bd07ba051d0998e3a21d0819c1d02fc4c471c3744d2 31a2bbc9888495877ab59a2d544e597e4179fd1a6fe6b61a5914b4c690d81bac 199c532fbd425a5053521bd54e864f0429335db967c5328dcd0cfdf33ffa82c6 d776474024bbc2a154b14c24336dad59804c8038215af756098963371120ef59 4a899f71de96ecc6000d5262e28ca245f30df42e07dddd063f70e5f0d2e20870 badadbe5fb29fad3637c86a51c38c149d1c5688e41e040315536298badf2f468 86b8aa893f7782d06dfcb4f439920178fec9a14be5d3f15d78648480cc31d075 3a88a95aa6e8d2e3cf1a6c8e177aa29084870ef462ea6845582d350687a223a6 cd8c8cd5ee1dde7d0d898ae394e1eb8232e35e888a72491f3588a99951da2815 3e7d2cc972cbde8406c59ff6ed7ace3b64d6826a96cd408c544a9dfc03cacfcd 27a5efeeea1b247f330d69f9833c12d2da7e438eb5509f7277669ff10c737e87 28fdfa5fb44637bc13e1584c07f06caa030c204d99531262714f13f4622093f6 6312e3d506121f0c00936b3255b0a917150bd4ccb3483806edc174886b18a129 d4caab0aba2b309fecec0ca9a9096a57c6e16ee160f5b4eb2937ec6bf8256096 131576117fc1bbf7b612afdbbc4af7f0129b582815d3b7bfc4e107615224bf12 8e59b9bed217542baf8848f70b954ef149788bb994932c9197ad01040b7e0656 15d2a750a81bd361c800b8bfcf5131bf7d4d0e30fcc4494ad97b76551f9fc887 1eb4a06d335cce8e5442ce763dd94600b09309ddcdb881c31f900b37b48664d8 2a5ec5a15fe1cc65941a6662361549a388cc4f642971187e32f7207d62fe3eb7 80fe0dc1e64b6807ca6f43cdf36fbeaefd84b3ae7a5609aa94118f3042848d73 952cbcaa3fd7dd11853162b8978a9277db0b3f76c569d0b7508935bc75683f5b e63deadaa2b36c51e9fc381a824f2036d69d5cea2971c5e1c3aa2096e03c2f81 5d095f3f8ff5ecca4bfa8c9033a0b74c6da5644024be6810bd84ebe3cfebcb5b 01f46fce4fc8e3386b5b310ac00f375f4972f9890a1c5dc18604e63a823f1d32 f3d956451475113bcfd3df93c7a88a960a8bf78a698d769f3b79e1a95dd1f530 8aec35be08085e21b4a5c8a19e5268d15cf8d577a2658c262db09bfc9a115f13 b12fce0bd75eaba400e72c4099469d38a56a4a4ed0a0e394cec8e17732699437 b48a4b4413faaa25e650ffcff66b8c8f27d8a4fdd2226965b31610364dd1fd8f 2540c65b8a1385ed704c5a1f804eacb62af3822800729c3f7aaa4bca09ba4678 a78a095fdb967776deee9366c12c5d4825431646d49b9e3f5f58c25d06722f45 3281fc35dfe5054f44110fe15d52753e9b94f6c2716327140f4df512faccfa31 77221a0f2b771ea8beba3936c66a2fab04aa823db7f03632b75c7ad0e56d86b5 d34e4431152def1657c5d69b017c3bfc5dad886d806b3339adae4cc7e9c2df3c 08b3c4f7f08d03725b1b1aa4ca587c8cc182778114a24d559cd006373114b8c1 b5290138872280931045e1b45ad64f9c7082641c4dd7c90da5c7d1e1fd48c468 f54e7aca7712358bd59d1927b8d9b846c7a8c4fb735db3f8dc38992a5e6f2a5c 0bfb655ed8366f43a533c29816b77c35bc77590f4d06e712d13e080a76eac491 f1ac8762ad4d607ac7222c5c204d9688d18607ab8c8c39562134b529fafe7b18 0a29d41cf916c933cf5d16d4f5562eadb07fb2f67898c6e538d14004dd73c773 36e271ecc4ce11a7956fadc96a1adac3961ddf7d9d91ec71a7ec0874654130f0 d02dbb4b8039666f90eb0bcdbc077776e849bbe68b82eaa9cf39c8effb6a3dcb 5329e1c3f80362d2aa8de7ad19a990cbb7fde25b5b4bd2b69fd08773f985c78c 7bc5480571adb2dedf9872384efeda233d02f1bc64265a59097640891e141eed e8ffd8764f3b7094944daf8555839411dbe61514931fe7a05b2f9e9898e0f903 a10f2f268797d6fb46a53e28545895281ec137a2a285d8d6395f16029449151b 204bf7f9d0470e3fc37483fa323f258ffc595ed57705fb8a1afe5963c1bff1bd 6b74d147de736ccee6e258b693a42982d4b7c1116fdd2751d648ea7c00f88365 12655955d59c1a6ca20af5941e2b9b834ef2070e07ebfcdc184a74655c794b6b 9b97a38e648988ed9ff1d2413765186b040520a688ce4075fbf1c83735f191a0 e55d4ed35aa41ad04266bce11b67fa98fb607fd1c3c6bede69fbb9dea37f7568 6c77972f95b911154b3210a72c5ce975acb5c9b30836c7216ef2b61a686fcca9 8b84f5c87f0ba1ecc5a01c71e0f1ea2a12b0d62195bc72320ca62e7033e6ecbd 91920857b038d0f7fa99306dc8fb543eda490f968194bce2aadead3118bc2999 db583d2082aa396526df32d04edb3e0514714af4530d6de8e999333221b6f670 81a75d07314acae039cc44089a41ef18c6e9e8adfd89f305ec9ab9123a2b2f47 f20860e0fb4a45f208fd55dc2a06e9eb395aba1bd9c38139905baeb29aa88425 bca3f07f0f9733743d240c45bcf9b5fbb22532c6f6d48dee9ad160a31e214fb3 18a0d99e7dfc80744910b6d0553ab2fd458b315a836118c7105340885cae2c3a dccb1052a4fce63b15cf8e5c539e513b72eafcf7d858ff6c5ec739668f1842e1 5cd865cea8c09ba0119db4edbf4ca7f14e88ec92af02600fd68a24838fe68175 45024beb74868d0df5813bf17793adf7507c606e6c81e9e6d837bd0f2aadb615 18f1d7f455db0f80acc837fc69a4f17759b2a91314276c19372c3e9a0ee9bff5 7ca74e9ccf561aee09b7ace5ac5a07740eae5ff9833307bd18cdcb32d62f2d4d bf3db911ab4872fcb39b22008816f6ee0ef3c0525d44507550b223e6a446b0e9 82d0925fffab83b260a14321119a7fec68a739c9691660d87cd7a04a7909c97c 7310b4707d8479cef68e0b39de4fe4d70101955137d8b7be1fce8f95ec066c47 aeb9b2fe879421142456f3a84fd2c7e05df3863ecf6930ea96ec6a33f07a53bd 4392d0807aaa5b6c8af8dc10a908e4d82f545a2c102f51e15687ef22916debc1 3fe61c549ca92bc85dd129491fed6dc1cc8a0c4b6fbda129625ebba8a9facdad 1abfe92c9d32ee531cec60b9ec4195237972c54b4fac21e76f09951574378680 eb8e93d96babc62627cc9adc0cf5aaa4b5bbc5e13a6c5477c2a0388fd5503944 699874f6d3a7da85575022704669d9506d9133cbe87893142fec39248e3e0bd5 5ae2227a5449333a557be1932f06286d6f4c770e6fd20f6969707aedea070d71 b2c020f9de954cba043e800d0762060e54315733b5bcad2885c081d2ec80376b 82b54a1f991dfd626c333a9a5fdf0df2514836b372f5aea348c8270385bc3086 74748c85210c85e71068c26b021e8c5801e9f7f2a0380ba510cef02c422963df c45c0ff1ce993200a02b2186a4ec6382ebc0b369741fdf1ca46fbc1729edd540 0b54f113bf895dd757e50557776c3b7da249f58cf649fb66fa088b73d2df7c44 3fceeba9f04e71ef3de0adf4b75d6c7d657c4d983caea7a5fe9b48cd0f07768c 7969142616094f4b90d3c2cff54ebaa591b925022b4a6902cf0d545ab5179e05 4e4a00be84d1e2b34fee383c72fd72609c891e07b3ad0b3eb1c6e1262240853f 2e14a1db509bbb58f7c0203df3800fba7cf83ffca03554e898a5835a324f2395 36d274c9d299463357dcb563ba8f9846f269dd438dc818a7cbf926b3c79e27fa 25d5f2fb81d6b5dde796505d4fd130b4ad8dff3d02d2a5958063a104adbed993 c4a6902791b02cb838eb5b40b993a5ad85974eea755aff63b22043fc81d8b7e5 6002b14f1ce160dad95339735ca8cd159a1cc1caa84546fd30598b653211ef98 54ccf27ec8ee536e4fb5aa459c6aeb0abbc7d017a993f6f48ec54a7a26fc40ed ed3f70428fee9e9ee6a5d7dbc6fed471823a02577bd650e611e8f6bf1acc1ca6 94c46a1019dabf5589d65f14ac1faf2d99f7d5631a47526532ffae3a9716e7af ab9a7a98c98563ae2c6600978be9803e560320161c6ae1553315122330a715eb 80b87d4c54f46bbf339adc7fbfb780b8024ca8b2cb9fe8565303e728a5f9d60b 318543be5772aa6908d9ea5ea36e5b824a6567a809f97f3b900aec17497687ef 264cdb7d7018b8cfd723ccb124f3b4581ee8dfca5c4cf6f8a0b7a380ac88e25e 0bc45c53683745fe215fe021a28d5dd98666d3795d3bd63ff1ef1454ac376bbc 56c47e 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont TeXDict begin 40258431 52099146 1000 600 600 (ex2.soln.dvi) @start %DVIPSBitmapFont: Fa cmmi8 8 1 /Fa 1 110 df<27078007F0137E3C1FE01FFC03FF803C18F0781F0783E03B3878E00F1E 01263079C001B87F26707F8013B00060010013F001FE14E000E015C0485A491480008102 1F130300015F491400A200034A13076049133E170F0007027EEC8080188149017C131F18 01000F02FCEB3F03053E130049495C180E001F0101EC1E0C183C010049EB0FF0000E6D48 EB03E0391F7E9D3E>109 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fb cmtt10 10.95 61 /Fb 61 125 df<121C127FEAFF80B3EA7F00B2123EC7FCA8121C127FA2EAFF80A3EA7F00 A2121C09396DB830>33 D<903907C007C0A2496C487EA8011F131FA202C05BA3007FB7FC A2B81280A36C16006C5D3A007F807F80A2020090C7FCA9495BA2003F90B512FE4881B812 80A36C1600A22701FC01FCC7FCA300031303A201F85BA76C486C5AA229387DB730>35 D<1438147C14FCA4EB03FF011F13E090B512FC4880000780481580261FFEFD13C09039F0 FC3FE0D83FC0131FD87F80EB0FF001001307007E15F800FE14035A1507A36CEC03F0A200 7F91C7FC138013C0EA3FF0EA1FFE13FF6C13FF6C14E0000114F86C6C7F011F7F01037F01 00148002FD13C09138FC7FE0151FED0FF015070018EC03F8127E1501B4FCA35AA26CEC03 F07E01801307ED0FE0D83FC0131F01F0EB7FC0D81FFEB512806CB612006C5C6C5CC614F0 013F13C0D907FEC7FCEB00FCA5147C143825477BBE30>I<141E147F14FF5BEB03FEEB07 FCEB0FF0EB1FE0EB3FC0EB7F80EBFF00485A5B12035B485A120F5BA2485AA2123F5BA212 7F90C7FCA412FEAD127FA47F123FA27F121FA26C7EA27F12076C7E7F12017F6C7EEB7F80 EB3FC0EB1FE0EB0FF0EB07FCEB03FEEB01FF7F147F141E184771BE30>40 D<127812FE7E7F6C7E6C7EEA0FF06C7E6C7E6C7E6C7EEB7F80133F14C0131FEB0FE014F0 1307A2EB03F8A214FC1301A214FE1300A4147FAD14FEA4130114FCA2130314F8A2EB07F0 A2130F14E0EB1FC0133F1480137FEBFF00485A485A485A485AEA3FE0485A485A90C7FC5A 1278184778BE30>I<143EA2147FAF007FB7FCA2B81280A36C1600A2C76CC8FCAF143EA2 29297DAF30>43 DI<007FB6 12F0A2B712F8A36C15F0A225077B9E30>I<14FE903807FFC0497F013F13F8497F90B57E 48EB83FF4848C6138049137F4848EB3FC04848EB1FE049130F001F15F0491307A24848EB 03F8A290C712014815FCA400FEEC00FEAD6C14016C15FCA36D1303003F15F8A26D130700 1F15F0A26D130F6C6CEB1FE0A26C6CEB3FC06C6CEB7F806D13FF2601FF8313006CEBFFFE 6D5B6D5B010F13E06D5BD900FEC7FC273A7CB830>48 DIIII54 D<127CB712FC16FEA416FC48C7EA0FF816F0ED1FE0007CEC 3FC0C8EA7F80EDFF00A24A5A4A5A5D14075D140F5D4A5AA24A5AA24AC7FCA25C5C13015C A213035CA213075CA4495AA6131F5CA96D5A6DC8FC273A7CB830>I<49B4FC010F13E001 3F13F890B57E4880488048010113803A0FFC007FC0D81FF0EB3FE04848131F49EB0FF048 481307A290C7EA03F85A4815FC1501A416FEA37E7E6D1303A26C6C13076C6C130F6D133F D80FFC13FF6CB6FC7E6C14FE6C14F9013FEBE1FC010F138190380060011400ED03F8A215 0716F0150F000F15E0486C131F486CEB3FC0157FEDFF804A1300EC07FE391FF01FFC90B5 5A6C5C6C5C6C1480C649C7FCEB3FF0273A7CB830>57 D<120FEA3FC0EA7FE0A2EAFFF0A4 EA7FE0A2EA3FC0EA0F00C7FCAF120FEA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F00 0C276EA630>II<16F01503ED07F8151F157FEDFFF014 034A13C0021F138091383FFE00ECFFF8495B010713C0495BD93FFEC7FC495A3801FFF048 5B000F13804890C8FCEA7FFC5BEAFFE05B7FEA7FF87FEA1FFF6C7F000313E06C7F38007F FC6D7E90380FFF806D7F010113F06D7FEC3FFE91381FFF80020713C06E13F01400ED7FF8 151F1507ED03F01500252F7BB230>I<007FB7FCA2B81280A36C16006C5DCBFCA7003FB6 12FE4881B81280A36C1600A229157DA530>I<147F4A7EA2497FA4497F14F7A401077F14 E3A3010F7FA314C1A2011F7FA490383F80FEA590387F007FA4498049133F90B6FCA34881 A39038FC001F00038149130FA4000781491307A2D87FFFEB7FFFB56CB51280A46C496C13 0029397DB830>65 D<91387F803C903903FFF03E49EBFC7E011F13FE49EBFFFE5B9038FF E07F48EB801F3903FE000F484813075B48481303A2484813015B123F491300A2127F90C8 FC167C16005A5AAC7E7EA2167C6D14FE123FA27F121F6D13016C6C14FCA26C6CEB03F86D 13076C6CEB0FF03901FF801F6C9038E07FE06DB512C06D14806D1400010713FC6D13F090 38007FC0273A7CB830>67 D<003FB512E04814FCB67E6F7E6C816C813A03F8007FF0ED1F F8150F6F7E6F7E15016F7EA2EE7F80A2163F17C0161FA4EE0FE0AC161F17C0A3163F1780 A2167F17005E4B5A15034B5A150F4B5AED7FF0003FB65A485DB75A93C7FC6C14FC6C14E0 2B387FB730>I<007FB7FCB81280A47ED803F8C7123FA8EE1F0093C7FCA4157C15FEA490 B5FCA6EBF800A4157C92C8FCA5EE07C0EE0FE0A9007FB7FCB8FCA46C16C02B387EB730> I<003FB712804816C0B8FCA27E7ED801FCC7121FA8EE0F8093C7FCA5153E157FA490B6FC A69038FC007FA4153E92C8FCAE383FFFF8487FB5FCA27E6C5B2A387EB730>I<02FF13F0 0103EBC0F8010F13F1013F13FD4913FF90B6FC4813C1EC007F4848133F4848131F49130F 485A491307121F5B123F491303A2127F90C7FC6F5A92C8FC5A5AA892B5FC4A14805CA26C 7F6C6D1400ED03F8A27F003F1407A27F121F6D130F120F7F6C6C131FA2D803FE133F6C6C 137FECC1FF6C90B5FC7F6D13FB010F13F30103EBC1F0010090C8FC293A7DB830>I<007F B6FCB71280A46C1500260007F0C7FCB3B3A8007FB6FCB71280A46C1500213879B730>73 D<383FFFF8487FB57EA26C5B6C5BD801FCC9FCB3B0EE0F80EE1FC0A9003FB7FC5AB8FCA2 7E6C16802A387EB730>76 D78 D<90383FFFE048B512FC000714FF4815804815C04815E0EBF80001E0133FD87F80EB0FF0 A290C71207A44815F8481403B3A96C1407A26C15F0A36D130FA26D131F6C6CEB3FE001F8 13FF90B6FC6C15C06C15806C1500000114FCD8003F13E0253A7BB830>I<007FB512F0B6 12FE6F7E16E0826C813903F8003FED0FFCED03FE15016F7EA2821780163FA6167F17005E A24B5A1503ED0FFCED3FF890B6FC5E5E16804BC7FC15F001F8C9FCB0387FFFC0B57EA46C 5B29387EB730>I<003FB57E4814F0B612FC15FF6C816C812603F8017F9138003FF0151F 6F7E15071503821501A515035E1507150F4B5A153F4AB45A90B65A5E93C7FC5D8182D9F8 007FED3FE0151F150F821507A817F8EEF1FCA53A3FFF8003FB4801C0EBFFF8B56C7E17F0 6C496C13E06C49EB7FC0C9EA1F002E397FB730>82 D<90390FF803C0D97FFF13E048B512 C74814F74814FF5A381FF80F383FE001497E4848137F90C7123F5A48141FA2150FA37EED 07C06C91C7FC7F7FEA3FF0EA1FFEEBFFF06C13FF6C14E0000114F86C80011F13FF010314 80D9003F13C014019138007FE0151FED0FF0A2ED07F8A2007C140312FEA56C140716F07F 6DEB0FE06D131F01F8EB3FC001FF13FF91B51280160000FD5CD8FC7F13F8D8F81F5BD878 011380253A7BB830>I<003FB712C04816E0B8FCA43AFE003F800FA8007CED07C0C791C7 FCB3B1011FB5FC4980A46D91C7FC2B387EB730>I<007FB612F0A2B712F8A36C15F0A225 077B7D30>95 D97 DII<913801FFE04A7F5CA28080EC0007AAEB03FE90381FFF874913E7 90B6FC5A5A481303380FFC00D81FF0133F49131F485A150F4848130790C7FCA25AA25AA8 7E6C140FA27F003F141F6D133F6C7E6D137F390FF801FF2607FE07EBFFC06CB712E06C16 F06C14F76D01C713E0011F010313C0D907FCC8FC2C397DB730>I<49B4FC010713E0011F 13F8017F7F90B57E488048018113803A07FC007FC04848133FD81FE0EB1FE0150F484814 F0491307127F90C7FCED03F85A5AB7FCA516F048C9FC7E7EA27F003FEC01F06DEB03F86C 7E6C7E6D1307D807FEEB1FF03A03FFC07FE06C90B5FC6C15C0013F14806DEBFE00010713 F8010013C0252A7CA830>IIII<14E0EB03F8A2497EA36D5AA2EB00E091C8FC A9381FFFF8487F5AA27E7EEA0001B3A9003FB612C04815E0B7FCA27E6C15C023397AB830 >III<387FFFF8B57EA47EEA0001B3 B3A8007FB612F0B712F8A46C15F025387BB730>I<02FC137E3B7FC3FF01FF80D8FFEF01 877F90B500CF7F15DF92B57E6C010F13872607FE07EB03F801FC13FE9039F803FC01A201 F013F8A301E013F0B3A23C7FFE0FFF07FF80B548018F13C0A46C486C01071380322881A7 30>II<49B4FC010F13E0013F13F8497F90B57E0003 ECFF8014013A07FC007FC04848EB3FE0D81FE0EB0FF0A24848EB07F8491303007F15FC90 C71201A300FEEC00FEA86C14016C15FCA26D1303003F15F86D13076D130F6C6CEB1FF06C 6CEB3FE06D137F3A07FF01FFC06C90B512806C15006C6C13FC6D5B010F13E0010190C7FC 272A7CA830>II<49B413F8 010FEBC1FC013F13F14913FD48B6FC5A481381390FFC007F49131F4848130F491307485A 491303127F90C7FC15015A5AA77E7E15037FA26C6C1307150F6C6C131F6C6C133F01FC13 7F3907FF01FF6C90B5FC6C14FD6C14F9013F13F1010F13C1903803FE0190C7FCAD92B512 F84A14FCA46E14F82E3C7DA730>II<90381FFC1E48B5129F000714FF5A5A 5A387FF007EB800100FEC7FC4880A46C143E007F91C7FC13E06CB4FC6C13FC6CEBFF806C 14E0000114F86C6C7F01037F9038000FFF02001380007C147F00FEEC1FC0A2150F7EA27F 151F6DEB3F806D137F9039FC03FF0090B6FC5D5D00FC14F0D8F83F13C026780FFEC7FC22 2A79A830>III<3B3FFFC07FFF80486DB512C0B515E0A26C16C06C 496C13803B01F80003F000A26D130700005DA26D130F017E5CA2017F131F6D5CA2EC803F 011F91C7FCA26E5A010F137EA2ECE0FE01075BA214F101035BA3903801FBF0A314FF6D5B A36E5A6E5A2B277EA630>I<3B3FFFC01FFFE0486D4813F0B515F8A26C16F06C496C13E0 D807E0C7EA3F00A26D5C0003157EA56D14FE00015DEC0F80EC1FC0EC3FE0A33A00FC7FF1 F8A2147DA2ECFDF9017C5C14F8A3017E13FBA290393FF07FE0A3ECE03FA2011F5C90390F 800F802D277FA630>I<3A3FFF81FFFC4801C37FB580A26C5D6C01815BC648C66CC7FC13 7FEC80FE90383F81FC90381FC3F8EB0FE3ECE7F06DB45A6D5B7F6D5B92C8FC147E147F5C 497F81903803F7E0EB07E790380FE3F0ECC1F890381F81FC90383F80FE90387F007E017E 137F01FE6D7E48486D7E267FFF80B5FCB500C1148014E3A214C16C0180140029277DA630 >I<3B3FFFC07FFF80486DB512C0B515E0A26C16C06C496C13803B01FC0003F000A20000 14076D5C137E150F017F5C7F151FD91F805BA214C0010F49C7FCA214E00107137EA2EB03 F0157C15FCEB01F85DA2EB00F9ECFDF0147D147FA26E5AA36E5AA35DA2143F92C8FCA25C 147EA2000F13FE486C5AEA3FC1EBC3F81387EB8FF0EBFFE06C5B5C6C90C9FC6C5AEA01F0 2B3C7EA630>I<127CA212FEB3B3B3AD127CA207476CBE30>124 D E %EndDVIPSBitmapFont /Fc 145[56 1[28 2[29 55 2[41 1[40 1[51 97[{ TeXBase1Encoding ReEncodeFont}7 90.9091 /Utopia-Italic rf %DVIPSBitmapFont: Fd cmsy8 8 1 /Fd 1 1 df0 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fe cmsy10 10.95 3 /Fe 3 7 df<007FB812F8B912FCA26C17F83604789847>0 D<0060166000F816F06C1501 007E15036CED07E06C6CEC0FC06C6CEC1F806C6CEC3F006C6C147E6C6C5C6C6C495A017E 495A6D495A6D6C485A6D6C485A6D6C48C7FC903803F07E6D6C5A903800FDF8EC7FF06E5A 6E5AA24A7E4A7EECFDF8903801F8FC903803F07E49487E49486C7E49486C7E49486C7E01 7E6D7E496D7E48486D7E4848147E4848804848EC1F804848EC0FC048C8EA07E0007EED03 F0481501481500006016602C2C73AC47>2 D<1506150FB3A9007FB912E0BA12F0A26C18 E0C8000FC9FCB3A6007FB912E0BA12F0A26C18E03C3C7BBC47>6 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Ff cmr10 10.95 12 /Ff 12 109 df<16E04B7EA24B7EA24B7EA24B7EA2ED1DFFA203387FA29238787FC01570 9238F03FE015E002016D7E15C002036D7E158002076D7E15004A6D7E140E021E6D7E141C 023C6D7F143802786E7E147002F06E7E5C01016F7E5C01036F7E5C01076F7E91C8FC496F 7E130E011E6F7E131C013C6F7F13380178707E137001F0707E5B0001717E5B0003717E5B 0007717E90CAFC48717E120E001E717E001FBAFC481980A24819C0A2BB12E0A243417CC0 4C>1 D<1430147014E0EB01C0EB03801307EB0F00131E133E133C5B13F85B12015B1203 A2485AA2120F5BA2121F90C7FCA25AA3123E127EA6127C12FCB2127C127EA6123E123FA3 7EA27F120FA27F1207A26C7EA212017F12007F13787F133E131E7FEB07801303EB01C0EB 00E014701430145A77C323>40 D<12C07E12707E7E121E7E6C7E7F12036C7E7F12007F13 78137CA27FA2133F7FA21480130FA214C0A3130714E0A6130314F0B214E01307A614C013 0FA31480A2131F1400A25B133EA25BA2137813F85B12015B485A12075B48C7FC121E121C 5A5A5A5A145A7BC323>I<1506150FB3A9007FB912E0BA12F0A26C18E0C8000FC9FCB3A9 15063C3C7BB447>43 D48 DIII<150E151E153EA2157EA215FE1401 A21403EC077E1406140E141CA214381470A214E0EB01C0A2EB0380EB0700A2130E5BA25B 5BA25B5B1201485A90C7FC5A120E120C121C5AA25A5AB8FCA3C8EAFE00AC4A7E49B6FCA3 283E7EBD2D>I<007FB912E0BA12F0A26C18E0CDFCAE007FB912E0BA12F0A26C18E03C16 7BA147>61 D<167C903903F801FF903A1FFF078F8090397E0FDE1F9038F803F83803F001 A23B07E000FC0600000F6EC7FC49137E001F147FA8000F147E6D13FE00075C6C6C485AA2 3901F803E03903FE0FC026071FFFC8FCEB03F80006CAFC120EA3120FA27F7F6CB512E015 FE6C6E7E6C15E06C810003813A0FC0001FFC48C7EA01FE003E140048157E825A82A46C5D 007C153E007E157E6C5D6C6C495A6C6C495AD803F0EB0FC0D800FE017FC7FC90383FFFFC 010313C0293D7EA82D>103 D108 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fg cmr8 8 8 /Fg 8 58 df48 D<130C133C137CEA03FC12FFEAFC7C1200B3 B113FE387FFFFEA2172C7AAB23>III<140EA2 141E143EA2147E14FEA2EB01BE1303143E1306130E130C131813381330136013E013C0EA 0180120313001206120E120C5A123812305A12E0B612FCA2C7EA3E00A9147F90381FFFFC A21E2D7EAC23>I<000CEB0180380FC01F90B512005C5C14F014C0D80C7EC7FC90C8FCA8 EB1FC0EB7FF8380DE07C380F801F01001380000E130F000CEB07C0C713E0A2140315F0A4 127812FCA448EB07E012E0006014C00070130F6C14806CEB1F006C133E380780F83801FF E038007F801C2D7DAB23>I56 DI E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fh cmmi10 10.95 21 /Fh 21 123 df<121EEA7F8012FF13C0A213E0A3127FEA1E601200A413E013C0A3120113 80120313005A120E5A1218123812300B1C798919>59 D61 D<17075F84171FA2173F 177FA217FFA25E5EA24C6C7EA2EE0E3F161E161C1638A21670A216E0ED01C084ED038017 1FED07005D150E5DA25D157815705D844A5A170F4A5A4AC7FC92B6FC5CA2021CC7120F14 3C14384A81A24A140713015C495AA249C8FC5B130E131E4982137C13FED807FFED1FFEB5 00F00107B512FCA219F83E417DC044>65 D67 D<49B9FCA3D9000190C7120718004B157F193F191E14035DA314075D191CA2 140F5D17074D133C021F020E13384B1500A2171E023F141C4B133C177C17FC027FEB03F8 92B5FCA39139FF8003F0ED00011600A2495D5CA2160101035D5CA293C9FC13075CA3130F 5CA3131F5CA2133FA25C497EB612F8A3403E7DBD3A>70 D<92B612E0A39239003FF00016 1F5FA2163F5FA3167F5FA316FF94C7FCA35D5EA315035EA315075EA3150F5EA3151FA25E A2153FA25EA2157FA25EA2D80F8013FFEA3FC0486C91C8FCA25CD8FFC05B140301805B49 485A00FC5C0070495A0078495A0038495A001E017EC9FC380F81FC3803FFE0C690CAFC33 407ABD32>74 D<49B600C090387FFFF896B5FC5FD900010180C7000F130093C813F84B16 E01A804FC7FC0203163C4B15F84E5AF003C002074B5A4B021FC8FC183E1878020F5D4BEB 03E0EF07804DC9FC021F143E4B5B17F04C5A023F1307EDC00F4C7E163F027FEBFFF8ED81 EFED83CF92388F87FC9138FF9F0792383C03FE15784B6C7E4913E0158092C77F5C01036F 7E5C717EA213074A6E7EA2717E130F4A6E7EA284011F15035C717E133F855C496C4A13E0 B600E0017F13FFA34D3E7DBD4D>I<49B712F018FF19C0D9000190C76C7EF00FF84BEC03 FC1801020382727E5DA214071A805DA2140F4E13005DA2021F5E18034B5D1807023F5E4E 5A4B4A5A4E5A027F4B5A06FEC7FC4BEB03FCEF3FF091B712C005FCC8FC92CBFCA25BA25C A21303A25CA21307A25CA2130FA25CA2131FA25CA2133FA25C497EB612E0A3413E7DBD3A >80 D<48B912FCA25A913A0003FE000F01F84A1301D807E0EE00F8491307491778000F5D 90C7FC001E140FA2001C4B1470123C0038141FA200785D1270033F15F000F018E0485DC8 1600157FA25EA215FFA293C9FCA25CA25DA21403A25DA21407A25DA2140FA25DA2141FA2 5DA2143FA25DA2147FA214FF497F001FB612FCA25E3E3D7FBC35>84 D86 D<027FB5D88007B512C091 B6FCA2020101F8C7EBF8009126007FE0EC7F804C92C7FC033F157C701478616F6C495A4E 5A6F6C495A4EC8FC180E6F6C5B606F6C5B6017016F6C485A4D5A6F018FC9FC179E17BCEE 7FF85F705AA3707EA283163F167FEEF7FCED01E7EEC3FEED0383ED070392380E01FF151E 4B6C7F5D5D4A486D7E4A5A4A486D7E92C7FC140E4A6E7E5C4A6E7E14F0495A49486E7E13 07D91F806E7ED97FC014072603FFE0EC1FFF007F01FC49B512FEB55CA24A3E7EBD4B>88 DI 98 DI<143C14FEA21301A314FCEB00701400AD137E3801 FF803803C7C0EA0703000F13E0120E121C13071238A2EA780F007013C0A2EAF01F148012 00133F14005B137EA213FE5BA212015B0003130E13F0A20007131EEBE01CA2143CEBC038 1478147014E013C13803E3C03801FF00EA007C173E7EBC1F>105 D107 D<01F8D907F0EB07F8D803FED93FFEEB1FFE28078F80F81FEB781F3E0F0F81C00F81E00F 803E0E07C78007C3C007C0001CD9CF00EBC78002FEDAEF007F003C4914FE0038495C4948 5C12780070495CA200F0494948130F011F600000495CA2041F141F013F6091C75B193F04 3F92C7FC5B017E92C75A197E5E01FE9438FE01C049027E14FCA204FE01011303000106F8 1380495CF20700030115F00003190E494A151E1A1C03035E0007943800F8F0494AEC7FE0 D801C0D900E0EC1F804A297EA750>109 D<91381F800C9138FFE01C903903F0707C9039 0FC0387890391F801CF890383F000F137E4914F000011407485A485A16E0485A121F150F 484814C0A3007F141F491480A300FF143F90C71300A35D48147EA315FE007E495A1403A2 6C13074A5A381F801D000F13793807C1F33901FFC3F038007F03130014075DA3140F5DA3 141F5DA2143F147F90381FFFFE5BA2263A7DA729>113 D115 D120 D<02F8130ED903FE131ED90FFF131C49EB803C49 EBC0784914F090397E07F1E09038F800FF49EB1FC049EB07800001EC0F006C48131E90C7 5A5D5D4A5A4A5A4A5A4AC7FC143E14785C495A495A495A49C8FC011E14E05B5B49130148 48EB03C0485AD807F8EB078048B4131F3A1F87E07F00391E03FFFE486C5B00785CD87000 5B00F0EB7FC048011FC7FC27297DA72A>122 D E %EndDVIPSBitmapFont /Fi 136[70 3[41 40 3[58 8[47 33[63 1[59 6[25 1[51 51 51 51 51 51 51 51 2[25 46[{TeXBase1Encoding ReEncodeFont}17 90.9091 /Utopia-Bold rf /Fj 107[47 47 24[48 52 1[77 1[63 37 44 44 59 61 58 64 94 31 2[31 63 53 1[52 1[49 60 54 7[61 3[78 1[56 1[77 65 2[91 58 70 1[38 4[77 69 1[64 6[28 3[56 56 56 56 2[56 3[28 2[36 36 6[28 33[{TeXBase1Encoding ReEncodeFont} 44 99.6264 /Utopia-Bold rf /Fk 153[31 102[{ TeXBase1Encoding ReEncodeFont}1 99.6264 /Utopia-Italic rf /Fl 171[62 1[64 1[60 80[{TeXBase1Encoding ReEncodeFont}3 99.6264 /Utopia-Regular rf /Fm 107[42 42 24[44 46 44 70 46 55 31 40 35 54 55 52 56 84 25 48 25 26 55 47 29 47 54 45 54 48 7[53 57 85 1[72 56 49 59 1[55 69 71 86 52 60 32 32 73 67 53 55 71 62 59 58 1[35 4[24 48 48 48 48 48 48 48 48 48 48 42 24 36 24 52 1[32 32 25 2[48 32[55 55 2[{TeXBase1Encoding ReEncodeFont}74 90.9091 /Utopia-Regular rf /Fn 135[108 2[130 76 92 3[121 132 196 64 2[65 7[112 13[116 13[130 18[116 50[{TeXBase1Encoding ReEncodeFont}13 206.559 /Utopia-Bold rf /Fo 139[41 7[33 2[35 6[71 63 26[69 18[63 63 1[63 2[47 45[{TeXBase1Encoding ReEncodeFont}10 119.552 /Utopia-Regular rf /Fp 133[58 4[75 44 1[53 1[74 70 76 113 3[38 1[64 1[62 3[65 13[67 3[92 1[110 9[82 8[33 6[67 1[67 49[{TeXBase1Encoding ReEncodeFont}19 119.552 /Utopia-Bold rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin %%EndSetup %%Page: 1 1 1 0 bop 982 119 a Fp(CMSC)25 b(311:)32 b(C)o(omputer)25 b(O)o(r)q(ganization)1728 292 y Fo(F)-6 b(all)28 b(2002)1132 620 y Fn(Exam)44 b(2)f(Solutions)1252 880 y Fm(CMSC)21 b(311)g(C)o(omputer)h(Or)o(ganization)1785 993 y(F)l(all)e(2002)1849 1106 y Fl(R)m(T)p Fk(f)f Fl(P)90 1414 y Fj(Q)o(uiz)i(3)g(\(Sequential)f (Logic\):)28 b(\223S)n(tate)20 b(Y)-9 b(our)21 b(A)q(ssumptions)l(\224) i(\(40)e(points\))90 1631 y Fi(3.1)46 b Fm(\(2)20 b(pts\))h(H)m(o)m(w)f (much)h(infor)q(mation)i(does)d(a)g(single)i(\003ip)f(\003op)h(stor)n (e?)317 1781 y Fi(Answ)o(er)r(:)i Fm(1)d(bit)90 1969 y Fi(3.2)46 b Fm(\(2)20 b(pts\))h(What)g(does)f(sequential)g(logic)j (pr)o(o)m(vide)f(that)f(combinational)i(logic)f(does)f(not?)317 2119 y Fi(Answ)o(er)r(:)42 b Fm(I)n(t)29 b(has)g(\223)-5 b(state)g(\224)-12 b(,)32 b(i.e)n(.,)h(it)d(has)f(memor)r(y)h(and)g (can)g(compute)h(output)g(v)o(alues)f(based)f(on)317 2232 y(inputs)22 b(and)e(state)n(.)90 2420 y Fi(3.3)46 b Fm(\(3)20 b(pts\))h(W)l(r)q(ite)g(the)g(ex)o(citation)h(table)e(for)i (a)e(JK)g(\003ip)h(\003op)l(.)317 2570 y Fi(Answ)o(er)r(:)j Fm(Done)d(in)g(class)n(.)90 2758 y Fi(3.4)46 b Fm(\(10)24 b(pts\))g(H)m(er)n(e)-5 b(')-10 b(s)23 b(a)g(\002nite)i(state)f (machine)n(.)36 b(The)24 b(states)f(ar)n(e)h(wr)q(itten)h(\(in)f(the)g (cir)n(cles\))h(as)e Fh(q)s Fm(/)p Fh(z)t Fm(.)36 b(That)317 2871 y(is)o(,)21 b(the)g(state)f(v)o(alue)g(is)h(wr)q(itten)g(\002rst,) g(follo)m(w)o(ed)i(b)n(y)d(the)h(output.)27 b Fh(x)20 b Fm(is)h(the)g(inputs)n(.)1233 2992 y 11561009 9826850 0 0 16840130 14406205 startTexFig 1233 2992 a %%BeginDocument: Figs/fsm.eps %!PS-Adobe-2.0 EPSF-2.0 %%Title: fsm.eps %%Creator: fig2dev Version 3.2 Patchlevel 3c %%CreationDate: Mon Dec 9 09:07:43 2002 %%For: clin@chexmix (Charles Lin,1127 AVW,(301) 405-2709,,) %%BoundingBox: 0 0 256 219 %%Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save newpath 0 219 moveto 0 0 lineto 256 0 lineto 256 219 lineto closepath clip newpath -106.0 263.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin %%Page: 1 1 10 setmiterlimit 0.06000 0.06000 sc % % Fig objects follow % /Times-Roman ff 360.00 scf sf 4800 3000 m gs 1 -1 sc (x= 0) col0 sh gr /Times-Roman ff 360.00 scf sf 4950 2325 m gs 1 -1 sc (x=1) col0 sh gr /Times-Roman ff 360.00 scf sf 5100 3975 m gs 1 -1 sc (11/00) col0 sh gr /Times-Roman ff 360.00 scf sf 1950 3975 m gs 1 -1 sc (10/11) col0 sh gr /Times-Roman ff 360.00 scf sf 5025 1575 m gs 1 -1 sc (01/10) col0 sh gr /Times-Roman ff 360.00 scf sf 2025 1575 m gs 1 -1 sc (00/01) col0 sh gr /Times-Roman ff 360.00 scf sf 3525 3675 m gs 1 -1 sc (x= 0) col0 sh gr /Times-Roman ff 360.00 scf sf 3600 1650 m gs 1 -1 sc (x= 0) col0 sh gr /Times-Roman ff 360.00 scf sf 2175 2250 m gs 1 -1 sc (x= 0) col0 sh gr /Times-Roman ff 360.00 scf sf 3675 4350 m gs 1 -1 sc (x=1) col0 sh gr /Times-Roman ff 360.00 scf sf 3675 975 m gs 1 -1 sc (x=1) col0 sh gr /Times-Roman ff 360.00 scf sf 2250 3150 m gs 1 -1 sc (x=1) col0 sh gr % Polyline 15.000 slw gs clippath 2910 1260 m 2910 1440 l 3317 1440 l 2957 1350 l 3317 1260 l cp eoclip n 4875 1350 m 2925 1350 l gs col0 s gr gr % arrowhead n 3317 1260 m 2957 1350 l 3317 1440 l 3317 1260 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4965 1215 m 4965 1035 l 4558 1035 l 4918 1125 l 4558 1215 l cp eoclip n 4950 1125 m 2850 1125 l gs col0 s gr gr % arrowhead n 4558 1215 m 4918 1125 l 4558 1035 l 4558 1215 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2835 3960 m 2835 4140 l 3242 4140 l 2882 4050 l 3242 3960 l cp eoclip n 4950 4050 m 2850 4050 l gs col0 s gr gr % arrowhead n 3242 3960 m 2882 4050 l 3242 4140 l 3242 3960 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4965 3915 m 4965 3735 l 4558 3735 l 4918 3825 l 4558 3915 l cp eoclip n 4950 3825 m 2850 3825 l gs col0 s gr gr % arrowhead n 4558 3915 m 4918 3825 l 4558 3735 l 4558 3915 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2782 3614 m 2894 3754 l 3212 3500 l 2875 3655 l 3099 3359 l cp eoclip n 5100 1875 m 2850 3675 l gs col0 s gr gr % arrowhead n 3099 3359 m 2875 3655 l 3212 3500 l 3099 3359 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4943 1709 m 4829 1571 l 4515 1831 l 4850 1671 l 4630 1969 l cp eoclip n 4875 1650 m 2700 3450 l gs col0 s gr gr % arrowhead n 4630 1969 m 4850 1671 l 4515 1831 l 4630 1969 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2971 1421 m 2855 1559 l 3168 1820 l 2950 1521 l 3284 1682 l cp eoclip n 5175 3375 m 2925 1500 l gs col0 s gr gr % arrowhead n 3284 1682 m 2950 1521 l 3168 1820 l 3284 1682 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4904 3678 m 5018 3540 l 4705 3280 l 4925 3579 l 4590 3418 l cp eoclip n 2775 1800 m 4950 3600 l gs col0 s gr gr % arrowhead n 4590 3418 m 4925 3579 l 4705 3280 l 4590 3418 l cp gs 0.00 setgray ef gr col0 s % Ellipse n 5475 3825 541 541 0 360 DrawEllipse gs col0 s gr % Ellipse n 2325 3825 541 541 0 360 DrawEllipse gs col0 s gr % Ellipse n 5400 1425 541 541 0 360 DrawEllipse gs col0 s gr % Ellipse n 2400 1425 541 541 0 360 DrawEllipse gs col0 s gr $F2psEnd rs %%EndDocument endTexFig 317 4465 a Fm(F)o(ill)29 b(in)f(the)f(follo)m(wing)j(char)q(t.)46 b(S)o(ome)28 b(columns)g(do)g(not)g(have)e(labels)n(.)46 b(Y)-8 b(ou)28 b(should)h(\002ll)f(in)g(their)317 4578 y(names)n(.)d(U)l(se)20 b(a)g(T)h(\003ip)h(\003op)f(to)g(implement)h Fh(q)1922 4592 y Fg(1)1981 4578 y Fm(and)f(a)f(JK)g(\003ip)i(\003op)f (to)g(implement)h Fh(q)3303 4592 y Fg(0)3342 4578 y Fm(.)317 4728 y Fi(Answ)o(er)r(:)i Fm(Answ)o(er)c(not)i(curr)n(ently)g(av)o (ailable)n(.)1941 5497 y(1)p eop %%Page: 2 2 2 1 bop 500 28 a 23122018 20578588 0 0 23812997 21379072 startTexFig 500 28 a %%BeginDocument: Figs/chart.eps %!PS-Adobe-2.0 EPSF-2.0 %%Title: chart.eps %%Creator: fig2dev Version 3.2 Patchlevel 3c %%CreationDate: Mon Dec 9 09:24:15 2002 %%For: clin@chexmix (Charles Lin,1127 AVW,(301) 405-2709,,) %%BoundingBox: 0 0 362 325 %%Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save newpath 0 325 moveto 0 0 lineto 362 0 lineto 362 325 lineto closepath clip newpath -71.0 361.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin %%Page: 1 1 10 setmiterlimit 0.06000 0.06000 sc % % Fig objects follow % % Polyline 7.500 slw n 6600 3600 m 7200 3600 l 7200 4200 l 6600 4200 l cp gs col0 s gr % Polyline n 6600 4200 m 7200 4200 l 7200 4800 l 6600 4800 l cp gs col0 s gr % Polyline n 6600 4800 m 7200 4800 l 7200 5400 l 6600 5400 l cp gs col0 s gr % Polyline n 6600 5400 m 7200 5400 l 7200 6000 l 6600 6000 l cp gs col0 s gr % Polyline n 2400 1200 m 3000 1200 l 3000 1800 l 2400 1800 l cp gs col0 s gr /Times-Bold ff 240.00 scf sf 3375 1125 m gs 1 -1 sc (1) col0 sh gr /Times-Bold ff 240.00 scf sf 4050 1125 m gs 1 -1 sc (0) col0 sh gr /Times-Bold ff 240.00 scf sf 5175 1125 m gs 1 -1 sc (0) col0 sh gr /Times-Bold ff 240.00 scf sf 2100 1125 m gs 1 -1 sc (1) col0 sh gr /Times-Bold ff 420.00 scf sf 1875 975 m gs 1 -1 sc (q) col0 sh gr /Times-Bold ff 420.00 scf sf 2550 975 m gs 1 -1 sc (q) col0 sh gr /Times-Bold ff 240.00 scf sf 2775 1125 m gs 1 -1 sc (0) col0 sh gr /Times-Bold ff 420.00 scf sf 3150 975 m gs 1 -1 sc (q) col0 sh gr /Times-Bold ff 420.00 scf sf 3750 975 m gs 1 -1 sc (q) col0 sh gr % Polyline n 6600 3000 m 7200 3000 l 7200 3600 l 6600 3600 l cp gs col0 s gr % Polyline n 4800 5400 m 5400 5400 l 5400 6000 l 4800 6000 l cp gs col0 s gr % Polyline n 5400 5400 m 6000 5400 l 6000 6000 l 5400 6000 l cp gs col0 s gr % Polyline n 6000 5400 m 6600 5400 l 6600 6000 l 6000 6000 l cp gs col0 s gr % Polyline n 1200 1200 m 1800 1200 l 1800 1800 l 1200 1800 l cp gs col0 s gr % Polyline n 1800 1200 m 2400 1200 l 2400 1800 l 1800 1800 l cp gs col0 s gr % Polyline n 3000 1200 m 3600 1200 l 3600 1800 l 3000 1800 l cp gs col0 s gr % Polyline n 3600 1200 m 4200 1200 l 4200 1800 l 3600 1800 l cp gs col0 s gr % Polyline n 4200 1200 m 4800 1200 l 4800 1800 l 4200 1800 l cp gs col0 s gr % Polyline n 4800 1200 m 5400 1200 l 5400 1800 l 4800 1800 l cp gs col0 s gr % Polyline n 5400 1200 m 6000 1200 l 6000 1800 l 5400 1800 l cp gs col0 s gr % Polyline n 6000 1200 m 6600 1200 l 6600 1800 l 6000 1800 l cp gs col0 s gr % Polyline n 6600 1200 m 7200 1200 l 7200 1800 l 6600 1800 l cp gs col0 s gr % Polyline n 6600 1800 m 7200 1800 l 7200 2400 l 6600 2400 l cp gs col0 s gr % Polyline n 6600 2400 m 7200 2400 l 7200 3000 l 6600 3000 l cp gs col0 s gr /Times-Bold ff 420.00 scf sf 4350 975 m gs 1 -1 sc (z) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 2025 3450 m gs 1 -1 sc (1) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 2625 3450 m gs 1 -1 sc (1) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 2025 5250 m gs 1 -1 sc (1) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 2025 5850 m gs 1 -1 sc (1) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 2625 5850 m gs 1 -1 sc (1) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 1425 5850 m gs 1 -1 sc (1) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 1425 5250 m gs 1 -1 sc (1) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 1425 4650 m gs 1 -1 sc (1) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 1425 4050 m gs 1 -1 sc (1) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 2625 4650 m gs 1 -1 sc (1) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 2625 2850 m gs 1 -1 sc (0) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 1425 2850 m gs 1 -1 sc (0) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 3300 825 m gs 1 -1 sc (+) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 3900 825 m gs 1 -1 sc (+) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 2025 2850 m gs 1 -1 sc (1) col0 sh gr /Times-Bold ff 240.00 scf sf 4575 1125 m gs 1 -1 sc (1) col0 sh gr /Times-Bold ff 420.00 scf sf 4950 975 m gs 1 -1 sc (z) col0 sh gr /Times-Bold ff 420.00 scf sf 1425 975 m gs 1 -1 sc (x) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 1425 1650 m gs 1 -1 sc (0) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 2025 1650 m gs 1 -1 sc (0) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 2625 1650 m gs 1 -1 sc (0) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 1425 2250 m gs 1 -1 sc (0) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 1425 3450 m gs 1 -1 sc (0) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 2025 2250 m gs 1 -1 sc (0) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 2025 4050 m gs 1 -1 sc (0) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 2025 4650 m gs 1 -1 sc (0) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 2625 4050 m gs 1 -1 sc (0) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 2625 5250 m gs 1 -1 sc (0) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 2625 2250 m gs 1 -1 sc (1) col0 sh gr % Polyline n 4200 5400 m 4800 5400 l 4800 6000 l 4200 6000 l cp gs col0 s gr % Polyline n 4800 2400 m 5400 2400 l 5400 3000 l 4800 3000 l cp gs col0 s gr % Polyline n 5400 2400 m 6000 2400 l 6000 3000 l 5400 3000 l cp gs col0 s gr % Polyline n 6000 2400 m 6600 2400 l 6600 3000 l 6000 3000 l cp gs col0 s gr % Polyline n 1200 3000 m 1800 3000 l 1800 3600 l 1200 3600 l cp gs col0 s gr % Polyline n 1800 3000 m 2400 3000 l 2400 3600 l 1800 3600 l cp gs col0 s gr % Polyline n 2400 3000 m 3000 3000 l 3000 3600 l 2400 3600 l cp gs col0 s gr % Polyline n 3000 3000 m 3600 3000 l 3600 3600 l 3000 3600 l cp gs col0 s gr % Polyline n 3600 3000 m 4200 3000 l 4200 3600 l 3600 3600 l cp gs col0 s gr % Polyline n 4200 3000 m 4800 3000 l 4800 3600 l 4200 3600 l cp gs col0 s gr % Polyline n 4800 3000 m 5400 3000 l 5400 3600 l 4800 3600 l cp gs col0 s gr % Polyline n 5400 3000 m 6000 3000 l 6000 3600 l 5400 3600 l cp gs col0 s gr % Polyline n 6000 3000 m 6600 3000 l 6600 3600 l 6000 3600 l cp gs col0 s gr % Polyline n 1200 3600 m 1800 3600 l 1800 4200 l 1200 4200 l cp gs col0 s gr % Polyline n 1800 3600 m 2400 3600 l 2400 4200 l 1800 4200 l cp gs col0 s gr % Polyline n 4200 2400 m 4800 2400 l 4800 3000 l 4200 3000 l cp gs col0 s gr % Polyline n 1200 1800 m 1800 1800 l 1800 2400 l 1200 2400 l cp gs col0 s gr % Polyline n 1800 1800 m 2400 1800 l 2400 2400 l 1800 2400 l cp gs col0 s gr % Polyline n 2400 1800 m 3000 1800 l 3000 2400 l 2400 2400 l cp gs col0 s gr % Polyline n 3000 1800 m 3600 1800 l 3600 2400 l 3000 2400 l cp gs col0 s gr % Polyline n 3600 1800 m 4200 1800 l 4200 2400 l 3600 2400 l cp gs col0 s gr % Polyline n 4200 1800 m 4800 1800 l 4800 2400 l 4200 2400 l cp gs col0 s gr % Polyline n 4800 1800 m 5400 1800 l 5400 2400 l 4800 2400 l cp gs col0 s gr % Polyline n 5400 1800 m 6000 1800 l 6000 2400 l 5400 2400 l cp gs col0 s gr % Polyline n 6000 1800 m 6600 1800 l 6600 2400 l 6000 2400 l cp gs col0 s gr % Polyline n 1200 2400 m 1800 2400 l 1800 3000 l 1200 3000 l cp gs col0 s gr % Polyline n 1800 2400 m 2400 2400 l 2400 3000 l 1800 3000 l cp gs col0 s gr % Polyline n 2400 2400 m 3000 2400 l 3000 3000 l 2400 3000 l cp gs col0 s gr % Polyline n 3000 2400 m 3600 2400 l 3600 3000 l 3000 3000 l cp gs col0 s gr % Polyline n 3600 2400 m 4200 2400 l 4200 3000 l 3600 3000 l cp gs col0 s gr % Polyline n 2400 3600 m 3000 3600 l 3000 4200 l 2400 4200 l cp gs col0 s gr % Polyline n 1200 4800 m 1800 4800 l 1800 5400 l 1200 5400 l cp gs col0 s gr % Polyline n 1800 4800 m 2400 4800 l 2400 5400 l 1800 5400 l cp gs col0 s gr % Polyline n 2400 4800 m 3000 4800 l 3000 5400 l 2400 5400 l cp gs col0 s gr % Polyline n 3000 4800 m 3600 4800 l 3600 5400 l 3000 5400 l cp gs col0 s gr % Polyline n 3600 4800 m 4200 4800 l 4200 5400 l 3600 5400 l cp gs col0 s gr % Polyline n 4200 4800 m 4800 4800 l 4800 5400 l 4200 5400 l cp gs col0 s gr % Polyline n 4800 4800 m 5400 4800 l 5400 5400 l 4800 5400 l cp gs col0 s gr % Polyline n 5400 4800 m 6000 4800 l 6000 5400 l 5400 5400 l cp gs col0 s gr % Polyline n 6000 4800 m 6600 4800 l 6600 5400 l 6000 5400 l cp gs col0 s gr % Polyline n 1200 5400 m 1800 5400 l 1800 6000 l 1200 6000 l cp gs col0 s gr % Polyline n 1800 5400 m 2400 5400 l 2400 6000 l 1800 6000 l cp gs col0 s gr % Polyline n 2400 5400 m 3000 5400 l 3000 6000 l 2400 6000 l cp gs col0 s gr % Polyline n 3000 5400 m 3600 5400 l 3600 6000 l 3000 6000 l cp gs col0 s gr % Polyline n 3600 5400 m 4200 5400 l 4200 6000 l 3600 6000 l cp gs col0 s gr % Polyline n 6000 4200 m 6600 4200 l 6600 4800 l 6000 4800 l cp gs col0 s gr % Polyline n 3000 3600 m 3600 3600 l 3600 4200 l 3000 4200 l cp gs col0 s gr % Polyline n 3600 3600 m 4200 3600 l 4200 4200 l 3600 4200 l cp gs col0 s gr % Polyline n 4200 3600 m 4800 3600 l 4800 4200 l 4200 4200 l cp gs col0 s gr % Polyline n 4800 3600 m 5400 3600 l 5400 4200 l 4800 4200 l cp gs col0 s gr % Polyline n 5400 3600 m 6000 3600 l 6000 4200 l 5400 4200 l cp gs col0 s gr % Polyline n 6000 3600 m 6600 3600 l 6600 4200 l 6000 4200 l cp gs col0 s gr % Polyline n 1200 4200 m 1800 4200 l 1800 4800 l 1200 4800 l cp gs col0 s gr % Polyline n 1800 4200 m 2400 4200 l 2400 4800 l 1800 4800 l cp gs col0 s gr % Polyline n 2400 4200 m 3000 4200 l 3000 4800 l 2400 4800 l cp gs col0 s gr % Polyline n 3000 4200 m 3600 4200 l 3600 4800 l 3000 4800 l cp gs col0 s gr % Polyline n 3600 4200 m 4200 4200 l 4200 4800 l 3600 4800 l cp gs col0 s gr % Polyline n 4200 4200 m 4800 4200 l 4800 4800 l 4200 4800 l cp gs col0 s gr % Polyline n 4800 4200 m 5400 4200 l 5400 4800 l 4800 4800 l cp gs col0 s gr % Polyline n 5400 4200 m 6000 4200 l 6000 4800 l 5400 4800 l cp gs col0 s gr $F2psEnd rs %%EndDocument endTexFig 90 2892 a Fi(3.5)46 b Fm(\(7)30 b(pts\))h(D)o(r)o(aw)f(the)h(cir)n (cuit)i(fr)o(om)f(pr)o(oblem)g(3.2.)57 b(U)l(se)30 b(a)g(R)n(OM)g(to)i (implement)f(a)f(cir)n(cuit.)58 b(Label)317 3005 y(CLEARL)-6 b(Y)e(.)20 b(U)l(se)g(\003ip)h(\003ops)h(as)d(descr)q(ibed)i(in)h(3.4.) 317 3155 y Fi(Answ)o(er)r(:)i Fm(Answ)o(er)c(not)i(curr)n(ently)g(av)o (ailable)n(.)90 3343 y Fi(3.6)46 b Fm(\(10)23 b(pts\))g(D)o(r)o(aw)f(a) g Fo(3-bit)i Fm(par)o(allel-load)g(r)n(egister)g(with)f(the)g(follo)m (wing)j(oper)o(ations)n(.)34 b(Clearly)24 b(label)317 3456 y(the)d(inputs)o(,)h(outputs)o(,)f(and)g(par)q(ts)n(.)k(Y)-8 b(ou)22 b(may)e(use)f(logic)k(gates)c(in)j(addition)g(to)f(\003ip)h (\003ops)n(.)p 1201 3601 1756 4 v 1199 3714 4 113 v 1251 3680 a Fh(c)1290 3694 y Fg(1)1330 3680 y Fh(c)1369 3694 y Fg(0)p 1457 3714 V 1998 3680 a Fm(O)o(per)o(ation)p 2955 3714 V 1201 3717 1756 4 v 1199 3830 4 113 v 1281 3796 a(00)p 1457 3830 V 729 w(H)m(old)p 2955 3830 V 1199 3943 V 1281 3909 a(01)p 1457 3943 V 131 w(P)m(ar)o(allel)e(load)h(\()p Fh(q)2105 3923 y Fg(3)2144 3909 y Fh(q)2185 3923 y Fg(2)2224 3909 y Fh(q)2265 3923 y Fg(1)2304 3909 y Fh(q)2345 3923 y Fg(0)2409 3909 y Ff(=)k Fh(x)2557 3923 y Fg(3)2597 3909 y Fh(x)2649 3923 y Fg(2)2688 3909 y Fh(x)2740 3923 y Fg(1)2780 3909 y Fh(x)2832 3923 y Fg(0)2871 3909 y Ff(\))p 2955 3943 V 1199 4056 V 1281 4022 a Fm(10)p 1457 4056 V 270 w(N)m(egate)20 b(\(two)-6 b(')c(s)20 b(complement\))p 2955 4056 V 1199 4169 V 1281 4135 a(11)p 1457 4169 V 665 w(F)o(lip)h(bits)p 2955 4169 V 1201 4172 1756 4 v 317 4360 a Fi(Answ)o(er)r(:)j Fm(Done)d(in)g(class)1941 5497 y(2)p eop %%Page: 3 3 3 2 bop 90 119 a Fi(3.6)46 b Fm(\(2)20 b(pts\))h(E)o(xplain)h(the)e (differ)n(ence)i(betw)o(een)f(a)f(M)m(ealy)g(and)g(a)g(M)m(oor)n(e)i (machine)n(.)317 269 y Fi(Answ)o(er)r(:)32 b Fm(M)m(oor)n(e)26 b(machine)f(has)f(output)j(that)e(depends)g(only)h(on)f(state)g(v)o(ar) q(iables)n(.)38 b(M)m(ealy)25 b(ma-)317 382 y(chine)c(has)f(output)i (that)f(depends)g(on)g(state)f(and)g(input)i(v)o(ar)q(iables)n(.)317 532 y(\(B)o(oth)g(machines)e(have)f(basically)i(the)g(same)e(\223)-5 b(po)m(w)o(er)n(\224)-12 b(,)22 b(i.e)n(.,)f(they)g(ar)n(e)f(nearly)h (equiv)o(alent\).)90 720 y Fi(3.7)46 b Fm(\(4)25 b(pts\))g(The)g (behavior)h(of)f(a)f(\003ip)j(\003op)f(can)e(be)i(descr)q(ibed)f(b)n(y) g(a)g(\002nite)h(state)e(machine)n(.)39 b(D)o(r)o(aw)25 b(the)317 833 y(\002nite)g(state)d(machine)h(corr)n(esponding)k(to)d(a) e(T)i(\003ip)g(\003op)l(.)35 b(I)n(n)24 b(par)q(ticular)-5 b(,)24 b(think)g(about)g(what)f(the)317 946 y(inputs)o(,)f(state)e(and) g(outputs)i(ar)n(e)e(for)i(a)e(\003ip)h(\003op)l(.)317 1096 y Fi(Answ)o(er)r(:)j Fm(Done)d(in)g(class)90 1404 y Fj(Q)o(uiz)g(5)g(\(C)n(ache\):)26 b(\223C)n(ache)21 b(U)l(s,)h(Clay!\224)j(\(30)c(points\))90 1621 y Fi(4.1)46 b Fm(\(3)19 b(pts\))f(G)o(iven)h Fh(s)f Fm(slots)i(and)f Fh(b)g Fm(b)n(ytes)f(in)i(a)e(data)h(block)h(and)f Fh(m)f Fm(slots)i(per)f(set,)g(wr)q(ite)g(a)f(for)q(mula)i(deter)n(-)317 1734 y(mining)j(ho)m(w)e(many)g(bits)h(ar)n(e)e(used)h(for)h(tag,)f (slot/set)g(and)g(offset)g(for)h(a)e(fully)m(-associative)h(cache)n(.) 317 1847 y(Clearly)i(label)g(which)g(for)q(mula)f(applies)h(to)g(which) g(par)q(t)f(\(i.e)n(.,)h(tag)g(has)e(X)h(number)h(of)g(bits)g(wher)n(e) 317 1960 y(X)d(is)h(a)f(for)q(mula\).)317 2110 y Fi(Answ)o(er)r(:)k Fm(Offset)c(has)g Ff(lg)c Fh(b)21 b Fm(bits)n(.)26 b(T)-9 b(ag)21 b(has)e Ff(32)j Fe(\000)e Ff(lg)c Fh(b)k Fm(bits)n(.)26 b(N)m(o)c(bits)f(ar)n(e)f(used)g(for)i(slot/set.)317 2261 y(N)m(ote:)k(I)n(t)n(')-10 b(s)19 b(assumed)f(that)i Fh(s)f Fm(and)g Fh(b)g Fm(ar)n(e)g(po)m(w)o(ers)i(of)e(2)h(\(other)r (wise)n(,)g(getting)g(bits)g(fr)o(om)h(the)e(addr)n(ess)317 2374 y(would)j(be)e(much)h(mor)n(e)g(dif\002cult\).)90 2561 y Fi(4.2)46 b Fm(\(3)19 b(pts\))f(G)o(iven)h Fh(s)f Fm(slots)i(and)f Fh(b)g Fm(b)n(ytes)f(in)i(a)e(data)h(block)h(and)f Fh(m)f Fm(slots)i(per)f(set,)g(wr)q(ite)g(a)f(for)q(mula)i(deter)n(-) 317 2674 y(mining)i(ho)m(w)g(many)e(bits)h(ar)n(e)f(used)g(for)i(tag,)e (slot/set)h(and)g(offset)f(for)h(a)f(dir)n(ect-mapped)i(cache)n(.)317 2824 y Fi(Answ)o(er)r(:)i Fm(Offset)c(has)g Ff(lg)c Fh(b)21 b Fm(bits)n(.)26 b(S)n(lot)c(has)e Ff(lg)c Fh(s)k Fm(bits)n(.)26 b(T)-9 b(ag)21 b(has)f Ff(32)h Fe(\000)f Ff(lg)c Fh(b)k Fe(\000)g Ff(lg)c Fh(s)k Fm(bits)n(.)90 3012 y Fi(4.3)46 b Fm(\(3)19 b(pts\))f(G)o(iven)h Fh(s)f Fm(slots)i(and)f Fh(b)g Fm(b)n(ytes)f(in)i(a)e(data)h(block)h(and)f Fh(m)f Fm(slots)i(per)f(set,)g(wr)q(ite)g(a)f(for)q(mula)i(deter)n(-)317 3125 y(mining)i(ho)m(w)g(many)e(bits)h(ar)n(e)f(used)g(for)i(tag,)e (slot/set)h(and)g(offset)f(for)h(a)f(set-associative)f(cache)n(.)317 3275 y Fi(Answ)o(er)r(:)31 b Fm(Offset)24 b(has)g Ff(lg)16 b Fh(b)25 b Fm(bits)n(.)38 b(S)o(et)24 b(has)g Ff(lg)q(\()p Fh(s=m)p Ff(\))h Fm(bits)n(.)38 b(T)-9 b(ag)25 b(has)e Ff(32)i Fe(\000)e Ff(lg)16 b Fh(b)23 b Fe(\000)h Ff(lg)q(\()p Fh(s=m)p Ff(\))h Fm(bits)n(.)38 b(The)317 3388 y(only)22 b(tr)q(icky)f(par)q(t)f(is)h Fh(s=m)p Fm(.)317 3538 y Fh(m)g Fm(is)g(not)i(the)e(number)h(of)f(sets)n(.)27 b(The)22 b(number)g(of)f(sets)g(is)g(the)g(total)h(number)g(of)g(slots) f(divided)i(b)n(y)317 3651 y(slots)e(per)g(set)f(\(use)g(dimensional)i (analysis)e(to)h(convince)g(y)o(ourself)h(this)f(is)f(tr)q(ue\).)90 3839 y Fi(4.4)46 b Fm(\(4)20 b(pts\))h(E)o(xplain)h(why)e(cache)g(is)h (used.)317 3989 y Fi(Answ)o(er)r(:)35 b Fm(C)o(ache)26 b(is)g(fast,)i(small)e(memor)r(y)g(that)h(stor)n(es)f(a)g(fr)n (equently)h(used)g(subset)f(of)g(physical)317 4102 y(memor)r(y)21 b(\(RAM\).)e(I)n(t)n(')-10 b(s)21 b(used)f(to)h(place)f(fr)n(equently)i (used)e(data)g(in)h(faster)f(memor)r(y)-9 b(.)90 4290 y Fi(4.5)46 b Fm(\(4)20 b(pts\))h(E)o(xplain)h(what)e(spatial)h (locality)h(is)n(.)j(E)o(xplain)d(what)f(tempor)o(al)g(locality)h(is)n (.)317 4440 y Fi(Answ)o(er)r(:)27 b Fm(S)n(patial)c(locality)g(is)g (the)f(idea)g(that)h(if)f(addr)n(ess)g(X)g(is)g(accessed,)g(then)h (addr)n(esses)e Fh(X)29 b Fe(\006)21 b Ff(\001)317 4553 y Fm(wher)n(e)d Ff(\001)f Fm(is)h(small,)g(ar)n(e)f(likely)h(to)g(be)g (accessed)e(\(e)n(.g.,)i(accessing)g(nearb)n(y)f(instr)q(uctions)j(or)e (nearb)n(y)317 4666 y(data)i(in)i(an)e(arr)o(ay\).)317 4816 y(T)-9 b(empor)o(al)24 b(locality)g(is)e(the)h(idea)g(that)f(if)h (addr)n(ess)g(X)f(is)g(accessed)g(no)m(w)-7 b(,)24 b(it)n(')-10 b(s)23 b(likely)g(to)h(be)e(accessed)317 4929 y(in)f(the)g(near)f (futur)n(e)n(.)1941 5497 y(3)p eop %%Page: 4 4 4 3 bop 90 119 a Fi(4.6)46 b Fm(\(4)27 b(pts\))g(S)n(uppose)h(y)o(ou)g (have)e(16)i(b)n(ytes)f(in)h(a)f(data)g(block,)j(and)d(32)h(slots)n(.) 47 b(Y)-8 b(ou)28 b(ar)n(e)f(given)g(addr)n(ess)317 232 y Fh(A)385 246 y Fg(31)p Fd(\000)p Fg(0)550 232 y Fm(.)51 b(I)n(ndicate)29 b(which)h(bits)g(ar)n(e)e(used)h(for)g(the)g(tag,)i (slot,)h(and)d(offset)g(\(for)g(a)g(dir)n(ect-mapped)317 345 y(cache\).)317 493 y Fi(Answ)o(er)r(:)24 b Fm(Offset)c(uses)g Fh(A)1217 507 y Fg(4)p Fd(\000)p Fg(0)1347 493 y Fm(.)25 b(D)o(ata)20 b(uses)g Fh(A)1883 507 y Fg(8)p Fd(\000)p Fg(5)2012 493 y Fm(.)26 b(T)-9 b(ag)21 b(uses)e Fh(A)2494 507 y Fg(31)p Fd(\000)p Fg(9)2659 493 y Fm(.)90 678 y Fi(4.7)46 b Fm(\(3)20 b(pts\))h(W)-6 b(or)n(ds)22 b(\(32)e(bit)i (quantities\))e(ar)n(e)h(accessed)e(at)h(wor)n(d)i(aligned)f(addr)n (esses)f(\(i.e)n(.,)h(divisible)h(b)n(y)317 791 y(4\).)27 b(S)n(uppose)21 b(this)h(w)o(er)n(e)f(not)h(the)f(case)n(,)f(i.e)n(.,)i (y)o(ou)g(could)g(access)e(wor)n(ds)h(at)g(any)g(addr)n(ess)n(.)26 b(E)o(xplain)317 904 y(any)21 b(affect)f(this)h(might)g(have)e(on)j (accessing)e(data)g(stor)n(ed)h(in)h(a)e(cache)n(.)317 1052 y Fi(Answ)o(er)r(:)j Fm(This)e(question)f(pr)o(oduced)h(many)e (answ)o(ers)g(of)h(the)g(for)q(m)g(\223)m(y)o(ou)g(wouldn)-7 b(')g(t)21 b(kno)m(w)f(wher)n(e)317 1165 y(data)g(star)q(ted)h(and)f (ended)n(\224)-12 b(.)317 1314 y(H)m(o)m(w)o(ever)-5 b(,)30 b(I)e(had)g(a)g(differ)n(ent)h(answ)o(er)f(in)h(mind.)50 b(When)29 b(getting)g(data)f(fr)o(om)i(RAM)d(to)i(a)e(cache)317 1427 y(block,)i(y)o(ou)f(access)d(a)i(block)g(of)g(data.)44 b(As)26 b(long)i(as)e(the)h(block)g(contains)h(at)e(least)h(4)f(b)n (ytes)o(,)j(then)317 1540 y(any)e(wor)n(d)i(aligned)f(data)g(always)e (\002ts)i(in)g(the)f(block)h(being)h(fetched)f(\(this)f(block)i(is)e (also)h(called)317 1653 y(a)c Fc(cache)g(line)r Fm(\).)35 b(I)o(f)24 b(the)g(wor)n(d)h(is)f(not)h(aligned,)g(it)n(')-10 b(s)25 b(possible)g(that)f(the)g(wor)n(d)h(spans)e(two)i(differ)n(ent) 317 1766 y(cache)20 b(lines)n(.)317 1914 y(F)m(or)i(example)n(,)g (suppose)g(each)f(cache)h(line)g(stor)n(es)g(16)g(b)n(ytes)n(.)30 b(Thus)o(,)22 b(the)g(last)g(4)g(bits)g(ar)n(e)g(used)f(for)317 2027 y(an)27 b(offset.)44 b(I)o(f)26 b(y)o(ou)i(wanted)f(to)g(access)e (a)h(wor)n(d)i(whose)f(addr)n(ess)f(ends)h(in)g Ff(1111)p Fm(,)j(then)d(the)g(wor)n(d)317 2140 y(will)d(have)d(one)i(b)n(yte)f (in)h(one)g(cache)f(line)n(,)i(and)f(3)f(b)n(ytes)g(in)i(a)e(differ)n (ent)h(cache)f(line)n(,)i(thus)f(making)317 2253 y(it)e(dif\002cult)i (to)e(access)n(.)90 2438 y Fi(4.8)46 b Fm(\(6)19 b(pts\))g(S)n(uppose)g (y)o(ou)h(have)e(a)h(10)g(bit)i(addr)n(ess)d Fh(A)2011 2452 y Fg(9)p Fd(\000)p Fg(0)2141 2438 y Fm(.)25 b(Y)-8 b(ou)20 b(ar)n(e)f(using)h(a)e(fully)m(-associative)h(scheme)n(.)317 2551 y(Assume)i(the)h(slot)g(has)f(256)h(b)n(ytes)n(.)29 b(I)n(mplement)22 b(a)g(cir)n(cuit)h(that)f(deter)q(mines)g(whether)g (a)f(slot)i(has)317 2663 y(the)e(data)f(block)h(corr)n(esponding)j(to)d (the)g(addr)n(ess)n(.)317 2812 y(The)28 b(cir)n(cuit)h(should)g (outputs)f(a)f(1)h(if)f(a)g(speci\002c)h(slot)g(contains)h(the)e(data)g (and)h(0)f(if)h(it)g(does)g(not.)317 2925 y(Y)-8 b(ou)25 b(can)e(use)g(any)g(logic)i(gates)o(,)f(etc)o(.)35 b(needed.)f(MAKE)23 b(SURE)g(Y)n(OU)i(L)q(ABEL)d(CLEARL)-6 b(Y)22 b(or)j(cr)n(edit)317 3038 y(will)d(not)f(be)g(given.)317 3187 y Fi(Answ)o(er)r(:)30 b Fm(Ther)n(e)25 b(ar)n(e)f(two)g(tag)g(bits)n(.)37 b(C)o(all)24 b(it)h Fh(T)1958 3201 y Fg(1)2022 3187 y Fm(and)f Fh(T)2257 3201 y Fg(0)2296 3187 y Fm(.)36 b(The)24 b(follo)m(wing)j(is)d(a)g (logical)h(expr)n(ession)317 3300 y(which)c(y)o(ou)h(can)e(make)g(a)g (cir)n(cuit)i(out)f(of:)1281 3494 y Ff(\()p Fh(T)1369 3508 y Fg(1)1429 3494 y Fm(XNOR)f Fh(A)1773 3508 y Fg(9)1813 3494 y Ff(\))g Fe(\002)g Ff(\()p Fh(T)2047 3508 y Fg(0)2107 3494 y Fm(XNOR)g Fh(A)2451 3508 y Fg(0)2491 3494 y Ff(\))g Fe(\002)g Fh(V)317 3725 y Fm(XNOR)e(is)h(used)g(to)g(deter)q(mine)g (when)g(two)g(bits)g(have)f(the)h(same)e(v)o(alue)n(.)25 b Fh(V)39 b Fm(is)19 b(the)g(v)o(alid)h(bit.)25 b(M)o(any)317 3838 y(people)d(for)o(got)g(about)f(the)g(v)o(alid)h(bit.)90 4145 y Fj(Q)o(uiz)f(6)g(\(MIPS)g(assembly\):)28 b(\223M)m(eesh)21 b(I)n(nspir)n(es)h(P)l(opular)g(S)n(uppor)q(t\224)e(\(30)h(points\))90 4360 y Fi(6.1)46 b Fm(\(4)21 b(pts\))f(What)i(ar)n(e)e(the)h(\223)-5 b(special)21 b(r)n(egisters)l(\224)h(in)g(MIPS?)e(\(G)o(ive)g(the)h (index)h(of)f(each)f(r)n(egister)i(which)g(is)317 4473 y(special,)f(e)n(.g.)26 b($r3\).)g(E)o(xplain)c(what)e(each)g(of)h (these)f(special)g(r)n(egisters)i(do)l(.)317 4622 y Fi(Answ)o(er)r(:)h Fm($r0)e(is)e(har)n(dwir)n(ed)i(0.)26 b($r29)20 b(is)f(the)h(stack)f (pointer)i(\(b)n(y)e(convention\).)27 b($r31)20 b(is)g(the)g(jump-)317 4735 y(and-link)h(r)n(egister)-5 b(.)90 4919 y Fi(6.2)46 b Fm(\(5)23 b(pts\))h(T)-7 b(r)o(anslate)23 b(the)h(follo)m(wing)j(C)c (code)i(to)f(MIPS)f(assembly)g(language)n(.)35 b(Assume)22 b(that)i($r1)h(is)e(i,)317 5032 y($r2)e(is)g(j)m(,)g($r3)g(is)g(k.)k(C) o(omment)c(each)f(line)h(of)g(code)n(.)365 5248 y Fb(k)47 b(=)h(9)f(-)h(\(i)f(+)g(j\))1941 5497 y Fm(4)p eop %%Page: 5 5 5 4 bop 317 119 a Fi(Answ)o(er)r(:)24 b Fm(The)d(MIPS)e(code)317 344 y Fb(add)95 b($t0,)47 b($r1,)f($r2)143 b(#)47 b(t0)g(=)h(i)f(+)h(j) 317 457 y(addi)f($t1,)g($r0,)f(9)239 b(#)47 b(t1)g(=)h(0)f(+)h(9)f(=)g (9)317 570 y(sub)95 b($r3,)47 b($t1,)f($t0)143 b(#)47 b(r3)g(=)h(t1)f(-)g(t0)g(=)h(9)f(-)h(\(i)f(+)g(j\))90 795 y Fi(6.3)f Fm(\(5)26 b(pts\))g(Y)-8 b(ou)26 b(wish)g(to)h(call)f(a) g(subr)o(outine)i(named)d(FOO)-5 b(.)26 b(This)h(subr)o(outine)h(will)f (use)e(r)n(egister)i($r1.)317 908 y(B)o(efor)n(e)d(calling)g(FOO)-5 b(,)23 b(save)e($r1)i(on)h(the)e(stack,)h(then)g(call)g(FOO)-5 b(,)23 b(then)g(once)h(FOO)e(r)n(etur)q(ns)o(,)i(cop)n(y)317 1021 y(the)g(v)o(alue)g(fr)o(om)h($r1)f(to)h($r2,)g(and)f(r)n(estor)n (e)g(the)g(v)o(alue)g(fr)o(om)h(the)f(stack)f(back)g(to)h($r1.)36 b(\()6 b(This)24 b(is)g(an)317 1133 y(example)17 b(of)h(caller)n (-saved)e(subr)o(outine\).)27 b(N)m(ote:)d(ther)n(e)18 b(is)g(no)g(push)f(or)h(pop)h(instr)q(uction)h(in)e(MIPS.)317 1284 y Fi(Answ)o(er)r(:)24 b Fm(The)d(MIPS)e(code)317 1509 y Fb(addi)47 b($sp,)g($sp,)f(-4)191 b(#)47 b(Decrease)f(stack)g (pointer)g(for)h(push)f(operation)317 1622 y(sw)143 b($r1,)47 b(0\($sp\))237 b(#)47 b(Store)f(r1)i(onto)e(stack)317 1735 y(jal)95 b(FOO)620 b(#)47 b(Call)g(FOO)g(subroutine)317 1847 y(addi)g($r2,)g($r1,)f(0)239 b(#)47 b(r2)g(=)h(r1)f(+)g(0)317 1960 y(lw)143 b($r1,)47 b(0\($sp\))237 b(#)47 b(Get)g(old)g(value)f(of) h(r1)h(from)e(stack)317 2073 y(addi)h($sp,)g($sp,)f(-4)191 b(#)47 b(Increase)f(stack)g(pointer)g(for)h(pop)g(operation)317 2298 y Fm(N)m(ote:)26 b Fb(subi)20 b Fm(is)g(not)i(a)e(MIPS)f(instr)q (uction.)28 b(U)l(se)20 b Fb(addi)g Fm(with)h(negative)f(immediate)h(v) o(alues)n(.)90 2486 y Fi(6.4)46 b Fm(\(5)19 b(pts\))h(T)-7 b(r)o(anslate)20 b(the)g(follo)m(wing)i(into)f(MIPS)f(assembly)-9 b(.)24 b(Y)-8 b(ou)21 b(must)f(shor)q(t-cir)n(cuit)i(logical)f(oper)o (a-)317 2599 y(tions)n(.)27 b(Assume)19 b(that)i($r1)g(is)g(i,)g($r2)g (is)f(j)m(,)i($r3)f(is)f(k.)317 2849 y Fb(if)47 b(\()h(i)f(==)h(j)f(||) g(i)h(==)f(7)g(\))460 2962 y(j++)g(;)317 3075 y(else)460 3187 y(k)h(-=)f(7)h(;)317 3300 y(i)g(=)f(j)h(-)f(k)h(;)317 3550 y Fi(Answ)o(er)r(:)24 b Fm(The)d(MIPS)e(code)842 3775 y Fb(beq)95 b($r1,)47 b($r2,)f(IF_PART)189 b(#)48 b(if)f(\()g(i)h(==)f(j)g(\))h(go)f(to)g(if)g(body)842 3888 y(addi)g($t0,)g($r0,)f(7)477 b(#)48 b(t0)f(=)g(7)842 4001 y(bne)95 b($r1,)47 b($t0,)f(ELSE_PART)93 b(#)48 b(if)f(\()g(i)h(!=)f(7)g(\))h(go)f(to)g(else)g(body)317 4114 y(IF_PART:)141 b(addi)47 b($r2,)g($r2,)f(1)477 b(#)48 b(j++)842 4227 y(j)g(END)1001 b(#)48 b(jump)e(over)h(else)317 4340 y(ELSE_PART:)e(addi)i($r3,)g($r3,)f(-7)429 b(#)48 b(k)f(-=)g(7)842 4453 y(sub)95 b($r1,)47 b($r2,)f($r3)381 b(#)48 b(i)f(=)h(j)f(-)g(k)90 4678 y Fi(6.5)f Fm(\(5)25 b(pts\))g(W)l(r)q(ite)h(MIPS)e(assembly)h(to)h(deter)q(mine)f(if)h(bit) g Fh(i)f Fm(of)h(r)n(egister)g($r1)g(is)f(1)g(\(the)h(other)g(bits)g (may)317 4791 y(have)21 b(any)h(other)i(v)o(alue\).)30 b(I)o(f)23 b(so)l(,)g(set)f($r2)h(to)g(1,)g(other)r(wise)n(,)g(set)f (it)h(to)g(0.)31 b($r3)23 b(contains)g(the)f(index)i Fh(i)p Fm(.)317 4904 y(C)o(omment)d(each)f(line)i(of)f(code)n(.)317 5054 y Fi(Answ)o(er)r(:)j Fm(The)d(MIPS)e(code)1941 5497 y(5)p eop %%Page: 6 6 6 5 bop 604 119 a Fb(addi)46 b($t0,)h($r0,)g(1)190 b(#)48 b(t0)f(=)g(1)604 232 y(sllv)f($t0,)h($t0,)g($r3)94 b(#)48 b(t0)f(<<)g(r3)604 345 y(and)94 b($t1,)47 b($r1,)g($t0)94 b(#)48 b(Check)e(to)h(see)g(if)g(bit)g(i)h(is)f(set)604 458 y(beq)94 b($t1,)47 b($r0,)g(ELSE)604 571 y(addi)f($r2,)h($r0,)g(1) 190 b(#)48 b(r2)f(=)g(1)604 683 y(j)g(END)715 b(#)48 b(jump)e(over)h(else)317 796 y(ELSE:)g(addi)f($r2,)h($r0,)g(0)190 b(#)48 b(r2)f(=)g(0)317 909 y(END:)317 1109 y(sll)21 b Fm(only)h(shifts)g(left)g(a)f(constant)h(v)o(alue)n(.)29 b(Y)-8 b(ou)22 b(need)f Fb(sllv)g Fm(to)h(shift)g(a)f(v)o(ar)q(iable)h (amount)g(\(or)g(wr)q(ite)317 1222 y(a)e(loop)i(to)f(shift)g(one)g(bit) h(at)e(a)g(time\).)317 1368 y(B)o(ecause)j Fb(sllv)f Fm(wasn)-7 b(')g(t)24 b(co)m(ver)n(ed)g(in)g(class)o(,)g(I)f(accepted)h Fb(sll)e Fm(with)j(thr)n(ee)f(r)n(egisters)o(,)h(even)e(though)317 1481 y(it)e(is)g(incorr)n(ect)i(to)e(do)g(so)l(.)90 1661 y Fi(6.6)46 b Fm(\(3)22 b(pts\))f(Y)-8 b(ou)23 b(can)-7 b(')g(t)22 b(load)h(a)e(32)h(bit)h(immediate)g(v)o(alue)e(using)i(one)f (instr)q(uction.)32 b(W)l(r)q(ite)23 b(instr)q(uctions)317 1774 y(to)i(load)g(a)f(32)h(bit)g(immediate)g(v)o(alue)n(.)37 b(Assume)23 b(the)h(v)o(alue)g(y)o(ou)i(wish)e(to)h(load)g(is)f Ff(0)p Fh(x)p Ff(1111)p Fh(F)13 b(F)g(F)g(F)g Fm(.)317 1887 y(C)o(omment)21 b(each)f(line)i(of)f(code)n(.)317 2033 y Fi(Answ)o(er)r(:)j Fm(The)d(MIPS)e(code)604 2233 y Fb(lui)47 b($r1,)f(0x1111)428 b(#)48 b(Load)e(upper)h(16)g(bits)f (with)h(0x1111)604 2346 y(ori)g($r1,)f($r1,)h(0xFFFF)189 b(#)48 b(Load)e(lower)h(16)g(bits)f(with)h(0xffff)317 2546 y Fm(N)m(ote:)29 b Fb(addi)21 b Fm(causes)f(sign)j(extension)f(to) h(occur)-5 b(,)23 b(and)f(pr)o(oduces)h(an)e(incorr)n(ect)j(r)n(esult.) 30 b(H)m(o)m(w)o(ever)-5 b(,)317 2659 y Fb(addiu)19 b Fm(should)j(wor)o(k)f(since)g(it)g(does)g(not)g(sign-extend)g(\(it)g (is)g(an)f(unsigned)i(addition\).)90 2838 y Fi(6.7)46 b Fm(\(5)24 b(pts\))h(A)g(br)o(anch)g(instr)q(uction)i(per)q(for)q(ms)e (a)g(modi\002cation)i(of)e(PC)g(+)f(4)h(\(the)g(next)g(addr)n(ess\))g (if)g(the)317 2951 y(condition)k(is)c(tr)q(ue)n(.)40 b(The)25 b(maximum)g(r)o(ange)h(of)f(the)h(jump)g(is)f Ff(\()p Fh(P)13 b(C)31 b Ff(+)24 b(4\))g Fe(\000)g Fh(X)33 b Fm(to)26 b Ff(\()p Fh(P)13 b(C)31 b Ff(+)23 b(4\))i(+)f Fh(Y)317 3064 y Fm(wher)n(e)d Ff(\()p Fh(P)13 b(C)27 b Ff(+)20 b(4\))h Fe(\000)f Fh(X)27 b Fm(and)21 b Ff(\()p Fh(P)13 b(C)27 b Ff(+)20 b(4\))h(+)f Fh(Y)40 b Fm(ar)n(e)21 b(addr)n(esses)e(in)i(memor)r(y)-9 b(.)317 3210 y(D)o(eter)q(mine)25 b(what)f(X)g(and)g(Y)g(ar)n(e)g(and)h(EXPL)q(AIN)d(ho)m(w)j(y)o(ou)g (got)g(those)f(v)o(alues)n(.)37 b(\(I)o(f)24 b(y)o(ou)h(don)-7 b(')g(t)25 b(ex-)317 3323 y(plain,)d(y)o(ou)f(r)n(eceive)f(no)h(cr)n (edit\).)317 3469 y Fi(Answ)o(er)r(:)j Fm(X)c(is)h Ff(2)891 3436 y Fg(15)986 3469 y Fe(\002)f Ff(4)p Fm(.)26 b(Y)21 b(is)f Ff(\(2)1412 3436 y Fg(15)1508 3469 y Fe(\000)g Ff(1\))h Fe(\002)f Ff(4)p Fm(.)317 3615 y(B)o(r)o(anch)j(instr)q (uctions)h(ar)n(e)e(I-type)n(,)g(which)h(has)f(16)g(bits)h(for)g (immediate)g(v)o(alues)n(.)30 b(F)m(or)23 b(br)o(anch)g(in-)317 3728 y(str)q(uctions)o(,)h(the)f(r)n(epr)n(esentation)g(is)g(signed)f (two)-6 b(')c(s)23 b(complement.)31 b(Y)-8 b(ou)23 b(multiply)h(b)n(y)e (4,)h(because)317 3841 y(all)k(instr)q(uctions)i(ar)n(e)e(wor)n (d-aligned,)k(so)c(it)g(makes)f(sense)g(to)h(jump)h(based)e(on)i(instr) q(uctions)h(\(4)317 3954 y(b)n(ytes)20 b(each\))g(r)o(ather)h(than)g (jumping)h(based)e(on)h(addr)n(esses)n(.)90 4258 y Fj(Challenge)e (\(\223D)o(r)o(ool)j(K)q(itty\224\))h(Section:)j(\223M)m(eo)m(w!\224)g (\(40)21 b(points\))90 4471 y Fi(C1)45 b Fm(\(5)19 b(pts\))h(Y)-8 b(ou)20 b(ar)n(e)f(given)h Fh(k)i Fm(states)d(and)g Fh(m)g Fm(bits)h(used)g(for)g(the)f(output.)27 b(Assuming)19 b(y)o(ou)i(have)d(a)h(M)m(oor)n(e)317 4583 y(machine)n(,)i(ho)m(w)g (many)g(possible)g(differ)n(ent)h(outputs)f(ar)n(e)g(ther)n(e?)26 b(E)o(xplain)c(y)o(our)g(answ)o(er)-5 b(.)317 4730 y Fi(Answ)o(er)r(:)24 b Fm(min)q Ff(\()p Fh(k)s(;)15 b Ff(2)1019 4697 y Fa(m)1087 4730 y Ff(\))p Fm(.)317 4876 y(The)23 b(number)g(of)g(output)h(depends)f(on)g Fh(m)f Fm(and)g Fh(k)s Fm(.)32 b(S)n(ince)23 b(it)n(')-10 b(s)24 b(a)e(M)m(oor)n(e)h(machine)n(,)g(y)o(ou)h(can)e(have)317 4989 y(at)f(most)f Fh(k)k Fm(differ)n(ent)e(outputs)n(.)k(H)m(o)m(w)o (ever)-5 b(,)21 b(if)f Fh(m)h Fm(is)f(small,)h(ther)n(e)g(ar)n(e)f Ff(2)2815 4956 y Fa(m)2902 4989 y Fm(differ)n(ent)i(outputs)n(.)317 5135 y(F)m(or)27 b(example)n(,)i(if)e(w)o(e)g(have)f(1024)h(states)o(,) h(but)g(2)f(bits)g(of)h(output,)i(then)d(ther)n(e)-5 b(')-10 b(s)27 b(only)h(4)f(differ)n(ent)317 5248 y(outputs)o(,)22 b(despite)f(a)f(lar)o(ge)h(number)g(of)g(states)n(.)1941 5497 y(6)p eop %%Page: 7 7 7 6 bop 90 119 a Fi(C2)45 b Fm(\(10)21 b(pts\))g(Y)-8 b(ou)21 b(ar)n(e)g(given)f(a)h(single)g(D)f(\003ip-\003op)l(,)k(plus)d (logic)h(gates)n(.)k(D)o(esign)21 b(a)f(JK)h(\003ip)g(\003op)h(fr)o(om) g(this)n(.)317 232 y(E)o(xplain)g(ho)m(w)g(y)o(ou)f(designed)g(it.)317 382 y Fi(Answ)o(er)r(:)29 b Fm(Y)-8 b(ou)24 b(would)h(dr)o(aw)e(a)g(JK) g(\003ip)i(\003op)f(as)f(a)g(\002nite)h(state)f(machine)n(,)i(and)e (implement)h(using)317 495 y(a)c(single)h(D)g(\003ip)g(\003op)l(.)317 645 y(One)f(person)g(used)g(an)f(idea)h(similar)g(to)h(par)o(allel)f (load)g(r)n(egisters)n(.)26 b(They)20 b(fed)g(in)g(the)g(\223)-5 b(next)n(\224)20 b(v)o(alues)317 758 y(into)i(a)e(4-1)h(MUX)f(and)g (used)g Fh(J)30 b Fm(and)21 b Fh(K)27 b Fm(as)19 b(contr)o(ol)24 b(inputs)d(to)g(the)g(MUX.)1941 5497 y(7)p eop %%Page: 8 8 8 7 bop 90 119 a Fi(C3)45 b Fm(\(10)24 b(pts\))f(W)l(r)q(ite)i(a)e(r)n (ecursive)h(function)h(in)g(MIPS)d(assembly)h(that)h(computes)g(the)g (sum)f(of)h(an)g(inte-)317 232 y(ger)i(arr)o(ay)-9 b(.)42 b(Assume)24 b(that)i(the)g(addr)n(ess)g(of)g(the)g(z)o(er)o(oth)h (element)f(of)g(the)g(arr)o(ay)f(is)h(stor)n(ed)h(in)f($r1.)317 345 y(Assume)19 b(that)i(the)f(siz)o(e)g(of)h(the)f(arr)o(ay)g(is)h (stor)n(ed)g(in)g($r2,)g(and)f(is)g(v)o(alid)i(\(i.e)n(.,)e(gr)n(eater) h(than)g(or)g(equal)317 458 y(to)g(0\).)26 b(The)21 b(\002nal)g(sum)f (should)h(be)g(placed)g(in)g($r3.)317 608 y(T)-9 b(o)31 b(solve)e(this)h(pr)o(oblem,)k(y)o(ou)d(should)g(update)f(the)f(stack)g (in)i(the)e(follo)m(wing)k(way)-9 b(.)53 b(When)30 b(y)o(ou)317 721 y(make)18 b(a)h(r)n(ecursive)h(call,)g(push)f(the)h(addr)n(ess)f (of)h(the)f(arr)o(ay)h(and)f(the)h(siz)o(e)f(onto)i(the)e(stack)g (\(instead)317 834 y(of)31 b(passing)e(them)h(via)g(r)n(egisters\).)54 b(When)30 b(the)g(r)n(ecursive)g(call)g(is)g(complete)n(,)j(the)d(addr) n(ess)g(and)317 947 y(siz)o(e)d(should)g(be)g(popped)h(off,)g(and)f (the)f(v)o(alue)h(of)g(the)f(sum)g(placed)h(on)h(the)e(stack.)43 b(The)27 b(calling)317 1060 y(function)c(will)e(then)g(pop)g(off)g(the) g(v)o(alue)f(fr)o(om)i(the)f(stack)e(and)i(use)f(it)h(in)g(the)g (computations)n(.)317 1210 y(Y)-8 b(ou)28 b(should)f(not)h(modify)g ($r1)f(and)g($r2.)45 b(H)m(o)m(w)o(ever)-5 b(,)28 b(y)o(ou)f(may)g (modify)g(other)h(r)n(egisters)n(.)45 b(C)o(om-)317 1323 y(ment)21 b(each)f(line)h(of)g(code)n(.)317 1473 y Fi(Answ)o(er)r(:)j Fm(This)d(is)g(a)f(mess)n(.)k(I)c(may)g(post)h(this)g(up)g(S)n(unday)-9 b(.)90 1661 y Fi(C4)45 b Fm(\(5)27 b(pts\))g(A)g(R)n(OM)f(has)h Fh(k)s Fm(-bits)g(for)h(contr)o(ol)i(inputs)n(.)47 b(Y)-8 b(ou)27 b(can)g(select)g(the)g(contents)i(of)e(an)g(addr)n(ess)n(.)317 1774 y(Assume)15 b(y)o(ou)i(have)e(a)h(R)n(OM)g(with)h(3-bits)f(of)h (input,)i(and)d(each)g(addr)n(ess)g(stor)n(es)g(3)h(bits)n(.)24 b(I)n(mplement)317 1886 y(a)e(R)n(OM,)g(using)h(any)f(par)q(ts)g(\(r)n (ecall)g(exam)g(1,)h(par)q(t)f(means)f(logic)j(gate)n(,)f(or)g (something)g(like)g(a)e(half-)317 1999 y(adder)-5 b(,)21 b(etc\).)317 2150 y Fi(Answ)o(er)r(:)27 b Fm(U)l(se)21 b(thr)n(ee)i(8-1)e(MUX)o(es)n(.)30 b(Each)21 b(MUX)h(will)h(have)d(one) j(of)f(the)g(thr)n(ee)h(bits)n(.)30 b(I)n(n)23 b(effect,)f(the)317 2263 y(MUX)e(r)n(epr)n(esents)h(one)g(column)h(of)e(the)h(R)n(OM.)90 2450 y Fi(C5)45 b Fm(\(10)20 b(pts\))f(S)n(uppose)n(,)h(instead)g(of)g (using)g(\223bits)l(\224)-12 b(,)20 b(y)o(ou)g(use)f(\223)l(tr)q(its)l (\224)-12 b(.)26 b(T)-7 b(r)q(its)20 b(ar)n(e)f(v)o(alues)g(in)h(base)f (3,)h(instead)317 2563 y(of)26 b(base)e(2)i(\(0,)g(1,)h(and)e(2)g (instead)h(of)f(0)h(and)f(1\).)40 b(This)26 b(system)e(not)i(only)g (affects)f(ho)m(w)h(the)f(data)g(is)317 2676 y(stor)n(ed)d(\(in)f(base) e(3\),)i(but)g(also)g(affect)f(the)g(addr)n(esses)g(\(also)g(in)h(base) f(3\).)317 2826 y(E)o(xplain)31 b(what)e(pr)o(oper)q(ty)i(should)f(go)m (ver)q(n)g(ho)m(w)f(many)g(slots)h(and)f(ho)m(w)h(lar)o(ge)f(the)h (data)e(blocks)317 2939 y(should)k(be)e(so)h(that)f(y)o(ou)i(can)e (conveniently)i(use)d(a)h(32-tr)q(it)i(addr)n(ess)e(for)h(caching.)56 b(Assume)29 b(a)317 3052 y(dir)n(ect-mapped)22 b(scheme)n(.)317 3202 y(Then,)28 b(pick)e(a)f(speci\002c)h(number)g(of)g(slots)g(and)f (number)h(of)g(tr)r(ytes)g(\(b)n(ytes)f(in)h(base)f(3\))g(in)h(a)f (data)317 3315 y(block)e(and)f(demonstr)o(ate)h(ho)m(w)f(to)h(br)n(eak) e(up)i(a)e(32-tr)q(it)i(addr)n(ess)f Fh(A)2731 3329 y Fg(31)p Fd(\000)p Fg(0)2918 3315 y Fm(up)g(to)h(conveniently)g(ac-)317 3428 y(cess)d(the)g(par)q(ts)h(for)g(cache)n(.)317 3578 y Fi(Answ)o(er)r(:)h Fm(Y)-8 b(ou)18 b(should)g(make)d(the)i(number)h (of)f(slots)g(and)g(the)g(number)h(of)f(tr)r(ytes)g(in)h(a)e(data)g (blocks)317 3691 y(po)m(w)o(ers)22 b(of)f(3.)317 3842 y(F)m(or)k(example)n(,)h(if)f(y)o(ou)h(have)d(27)i(slots)g(\(which)g (is)g Ff(3)2132 3809 y Fg(3)2172 3842 y Fm(\))f(and)h(each)f(slot)i (has)e(9)h(tr)r(ytes)f(\(which)h(is)g Ff(2)3744 3809 y Fg(2)3784 3842 y Fm(\),)317 3955 y(then)c Fh(A)595 3969 y Fg(31)p Fd(\000)p Fg(5)781 3955 y Fm(is)f(the)h(tag,)g Fh(A)1260 3969 y Fg(4)p Fd(\000)p Fg(2)1410 3955 y Fm(is)f(the)h(slot)g (number)-5 b(,)21 b(and)g Fh(A)2437 3969 y Fg(1)p Fd(\000)p Fg(0)2587 3955 y Fm(is)f(the)h(offset.)317 4105 y(The)g(addr)n(esses)f (stor)n(e)h(base)f(3)g(v)o(alues)n(.)1941 5497 y(8)p eop %%Trailer end userdict /end-hook known{end-hook}if %%EOF fs/www/class/fall2002/cmsc311-0101/Exam/exam1.fall02.soln.ps0100664000077300017440000067727707561440175020764 0ustar cmsc311%!PS-Adobe-2.0 %%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software %%Title: ex1.revised.soln.dvi %%Pages: 20 %%PageOrder: Ascend %%BoundingBox: 0 0 612 792 %%DocumentFonts: Utopia-Bold Utopia-Regular Utopia-Italic %%EndComments %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips ex1.revised.soln.dvi %DVIPSParameters: dpi=600, compressed %DVIPSSource: TeX output 2002.11.04:0435 %%BeginProcSet: texc.pro %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3 1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{ rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B /chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{ /cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{ A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse} ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17 {2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{ 1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop} forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ /Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) (LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end %%EndProcSet %%BeginProcSet: 8r.enc % @@psencodingfile@{ % author = "S. Rahtz, P. MacKay, Alan Jeffrey, B. Horn, K. Berry", % version = "0.6", % date = "1 July 1998", % filename = "8r.enc", % email = "tex-fonts@@tug.org", % docstring = "Encoding for TrueType or Type 1 fonts % to be used with TeX." % @} % % Idea is to have all the characters normally included in Type 1 fonts % available for typesetting. This is effectively the characters in Adobe % Standard Encoding + ISO Latin 1 + extra characters from Lucida. % % Character code assignments were made as follows: % % (1) the Windows ANSI characters are almost all in their Windows ANSI % positions, because some Windows users cannot easily reencode the % fonts, and it makes no difference on other systems. The only Windows % ANSI characters not available are those that make no sense for % typesetting -- rubout (127 decimal), nobreakspace (160), softhyphen % (173). quotesingle and grave are moved just because it's such an % irritation not having them in TeX positions. % % (2) Remaining characters are assigned arbitrarily to the lower part % of the range, avoiding 0, 10 and 13 in case we meet dumb software. % % (3) Y&Y Lucida Bright includes some extra text characters; in the % hopes that other PostScript fonts, perhaps created for public % consumption, will include them, they are included starting at 0x12. % % (4) Remaining positions left undefined are for use in (hopefully) % upward-compatible revisions, if someday more characters are generally % available. % % (5) hyphen appears twice for compatibility with both % ASCII and Windows. % /TeXBase1Encoding [ % 0x00 (encoded characters from Adobe Standard not in Windows 3.1) /.notdef /dotaccent /fi /fl /fraction /hungarumlaut /Lslash /lslash /ogonek /ring /.notdef /breve /minus /.notdef % These are the only two remaining unencoded characters, so may as % well include them. /Zcaron /zcaron % 0x10 /caron /dotlessi % (unusual TeX characters available in, e.g., Lucida Bright) /dotlessj /ff /ffi /ffl /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef % very contentious; it's so painful not having quoteleft and quoteright % at 96 and 145 that we move the things normally found there to here. /grave /quotesingle % 0x20 (ASCII begins) /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash % 0x30 /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question % 0x40 /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O % 0x50 /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore % 0x60 /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o % 0x70 /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef % rubout; ASCII ends % 0x80 /.notdef /.notdef /quotesinglbase /florin /quotedblbase /ellipsis /dagger /daggerdbl /circumflex /perthousand /Scaron /guilsinglleft /OE /.notdef /.notdef /.notdef % 0x90 /.notdef /.notdef /.notdef /quotedblleft /quotedblright /bullet /endash /emdash /tilde /trademark /scaron /guilsinglright /oe /.notdef /.notdef /Ydieresis % 0xA0 /.notdef % nobreakspace /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen % Y&Y (also at 45); Windows' softhyphen /registered /macron % 0xD0 /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown % 0xC0 /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis % 0xD0 /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls % 0xE0 /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis % 0xF0 /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis ] def %%EndProcSet %%BeginProcSet: texps.pro %! TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]/Metrics exch def dict begin Encoding{exch dup type/integertype ne{pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def} ifelse}forall Metrics/Metrics currentdict end def[2 index currentdict end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{ dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[exch{dup CharStrings exch known not{pop/.notdef/Encoding true def} if}forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def} def end %%EndProcSet %%BeginProcSet: special.pro %! TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N /vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N /rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N /@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{ /hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B /@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{ /urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known {userdict/md get type/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup length 20 add dict copy def}if end md begin /letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{ itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack} if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{ noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{ Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale }if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState save N userdict maxlength dict begin/magscale true def normalscale currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts /psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR/showpage{}N/erasepage{}N/copypage{}N/p 3 def @MacSetUp}N/doclip{ psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict begin/SpecialSave save N gsave normalscale currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR }{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N /@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X /yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end %%EndProcSet %%BeginFont: Utopia-Bold %!PS-AdobeFont-1.0: Utopia-Bold 001.001 %%CreationDate: Wed Oct 2 18:24:56 1991 %%VMusage: 33079 39971 %% Utopia is a registered trademark of Adobe Systems Incorporated. 11 dict begin /FontInfo 10 dict dup begin /version (001.001) readonly def /Notice (Copyright (c) 1989, 1991 Adobe Systems Incorporated. All Rights Reserved.Utopia is a registered trademark of Adobe Systems Incorporated.) readonly def /FullName (Utopia Bold) readonly def /FamilyName (Utopia) readonly def /Weight (Bold) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /Utopia-Bold def /Encoding StandardEncoding def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /UniqueXX 36543 def /FontBBox{-155 -250 1249 916}readonly def currentdict end currentfile eexec f9cd86fd4821715265f16a614e3770ef80561e77ba6ecbb4ef4232445eef2839 94e93e3c8c9b09c09d71542241821e07888ceb54e8cacc8a45802f50c0afeeca 5e3d9114c1860bcb2ba5fd2a879a0d79953e30c90d8347513f4ca5f05b2e231b 4973bd1e9db66a39d846a8b3d9e48da72e2de8743ba2e104893167c235719245 87b43ed3b6552cd85e4bbdeb9f46bd813298d531c74be81995a52ceaad4112c7 f65773b088bffbc9874f615371c5e7b50ae99d5b6acf9c80d87057bf3a424377 f4284b7232096b6ea623dacd1c925ce09cfa6515f675aacf815c38e984b4ba40 0d409bb62cd4ebac75201c8e782e68fd73e8622c46b696b1ba37ca9621400041 d95b948a6bbc089fe6b230b39bd358228af9b3e68418166a9adc4e7665341088 c47c074aa4b21b0949fef9929e1a32ffddd2d02145cdb256863cf6067d27ed9a f0aba85b1e0cfcbab7e74880e9693b5626ad31e6b5c2d208087d86c116513212 710c9d6ca50e1503f8d4c2863fa378f8184189af0cf109f4affe7cb74563d513 2104fb9dc6f3f5992e075633a0baebda8ebe9a07c3ec4b25fef015d9915a26b1 d401a6722015090672714181580350560caf79bccd6040c0c1651d917c73107c 2d46aad5d4a370b55e896ce1eed127b6f0aabaf7c4ca62e89003032abb2c95ba 58c4a0eb0bb1a59a439a6a0c2082e50725b9e8139324af06ff03b4269a697342 8fab0c1fabd320f1452d9c435e48037eb8cf6df4233cd9c05691604146cc813f 7ea131f21e9863b7bd1b087a583af14675b9bd31fd364d5dbddbc9b533a6ac38 c4bdeb28a1ae3d2b374da72405acf67b1b3a83d80726301b3677c067c748d857 ae1da4f723d4365647de10f90e96dd7e9ab9ef5c7e6866a13b807fd3f78136d5 72950a10bb0165e61f12c60a813c7e35eeb9a0500725dd912ca2deebb238538e 790af851b14643f40e5eea13660e57b5c407735079a292a7c162dd11d0a3d342 67290f1c9261fa5de6b92ca1e7daeb7cb970c766b3e0396ec0ce55dffbef0bdc b437fbb4d63634b9abcf5844e76f9313ab2182e1fb3c47a705a1d97b79e93dbc 5e48ac19b45f9be4b9225e5a7e1d3679dd21001eca3c08d6febd35fa5453290e 1269c1d195e45338c10aa60fb8ab9e5a5aaf08c82e737f082bb6216d7cc1d5d8 8906c8b05c4432d04561377438447eb5fade652af84c1ced99551365cf9e6f99 03d1593de0e450003fb0d5b5588330d6527fdd0c8193fc0cd2293012310a425e 0ea0f8b901b991648ebbc894cfb7d95da6d35fb7c947e887bd3b6599e673b921 c96f2a033e30b341a14066076ff0abd5fe77f393b548a15ea2185f99a3545b01 dada854fce1ddd3448a9aa42ba260a4f85a0d1bdcf08b3de2ff8b6411adff446 4a2929193ade35f4e26006cfdc45929250bb76ef007043d739d798a4973f350f 52fa1690423381539e3a4cc458600fed91fa8e16b5ae0aca710dbf318d16e3d9 16a082a093b59f35ff92a1b235d5621e87ab471310ca26a9a30c2658e23e0f19 43110f9b24e2c8f1d05824c69aa9890c3b0af143da3ff2d3eeb301f7324f2f16 4e47a05f72acc15acea8a91b9d085a7de2e7e45493f53f32b22d365aca7ea6e0 70c6ad4feda1cde417b48fe4a864ac9af989f30632a9cff5545573d9c7d16016 d450f21f22a028d4e5d1d50a0834adb4c7cf0424f686a3678ddcddcb30d96a4e 45b982881b7173c1a3ff8cb839e56c10a3055f1626d8d5662a85edb80ec110ad 8eeadcfe212e10c139c86094ef0c3fd239cee5c9ea9727cfb94e671fedeeaed5 ead00e015f8783a4adfa28b7b2d8982e7c6fcceb028a18bcbb7f83b44ad4a898 c0bcc2aae1f109ea4ab0de19c4163d7c81e9de2fc6d003a29e2d8c83fb852a2f 2adb57a70ba5356470bdee40c3fd1612bd651f77a2a4dfb7e62bfd224eb2e1a9 978bf52b974d81e7d4f6b661885a88d8892c66182d8cfd1950c290d1485a78b5 59f7e546cc648d521d310ea176ab0bf669b60a915837a3b800c5b86b1295193b 161de7a268c3b8a12272e964b88b94cadc0ca8a94781347a8623dd1e4a481a60 2cfa2f764009699d69f4e8fdcaa46c4238b89bec4eb5eb490f15e6be942af742 1a8f2f0f873f5e5e49af9c33992e878dbd5e0d04cb1d086b719226f5836d52de 897147c588ec54bee42e887a2c94a864fe997b82d0045a92c35a7b157a379903 9adf336e3cb280d18f70784afceca4946dfef7f6c2fab3fd9eb4612fb0a6b3fd 17f24aea9bfa21f1cb8a5f93239d7489a183f6f4ab30bb54dda79888b30bd658 116c1efa020d27dc30df7a00265705414017911ee7809a135150a3db3333b694 b49464453dcf18a7eb8712f0bb4c0e7f6988b5a1f4b579b04e985830862df10b 47174a9e28b55bc33045a02e47e0a4c06393714a03bb1636273f4b887792725f 4c4c0ffc26eb191b843ec59c447c35dfd50aa503791d26f10071ceb883abeb37 71b49c6e4fad3ff05a52f7503c1d76f92debf092f358dfdd1f0895f9173d9802 17dc23bbceece6e05468ed1f3f6dbb0f1ee8041a08ab3702629088a4b7e47da1 c3184e7ed3893daf356ad740f6aecda78fe389a11a25c2aea605af5fd0ab46a9 87b00f97b407b6c0702a2ad53bceb4b2a39f3a46ca0464bde9f566478c522e1a 41334db9d41ebab5fcc8d5919770ee894e16e12edc2a15a74776e7fb8badda2d 7a3f1e6d89add8bb1afc6f777fbebcded31c883dd37df4aa4f83d3e585a99fb3 283d6ced2f10c9789a58806ea91a8c2e6a5074e001c1101bb2e906a2882f6ef8 428e27db4ac97fc7959ee4a366c8469d14daa10973191e14c3d49f28ec89d6c8 c461fc00709354a0f75de12403a443514b6d95372d238b41443824816c70cccf b7c28425a64fbc066840dd30685980607bbb1e94ee6c5871d609d12a2f6319b8 72b6741ddfc31e72e7c647fbf4a18b49b7048164afdbdcb01addcc618385e6b9 92ee423506e9627fb6a7a4b302e7b4c69ca93da517bb915b3b1eddcb64a6018e 5eb59e52eaf76bddf458382bc8fc74c77c98ed17d64f6a342e59d3d47596e196 16b3d5891501ea48b6c01253f7c1da53d799b833fa120ae35420d3961410f4ed 4705ed79831567279367b3729791208b3c8286ab6d7e3a056ab3416fb3fc681d 8b0e346b139a70904541dbdf9bd372c4da5d47cc2e056c1840b4e3b310d92a33 046ef7206d3f2ab07da8ee64d09adde5d6d4e2fa03bbef4ad5da84ad373e7251 c6dcef9b7994aa043b3aa3aa4fe4decff9dd554035e4d864085e186265c83aaf eca6c0991a5cdc8c37149e935ab2cb026711fa6d4b603a47f2637b12e654c087 a9ec00da104d070b704b0b0889d0f7b4a2a760d8b32e56b4ee722adcfaa2e4aa 45b2d3f4cf68f5e93a0d8a5d72002c37735ff11f59bd544b919f6385588da089 6129d2f7220c2ff4bbdb2f7c41b87f1bb509365fadf1644ae90d6f12b4bd2b88 579e1fcc2b679532bd0d339f6d451a540d8d907617e76c7130a0cffd52d50f66 13a71cf23a8535f1bba0b04a25cff862e8552ce836df43fd0527fe7f349aa51f 35a1c6fd1ca5df0dbb0edd2a5517b57d800af844b9d58c0f5f9d65b911b1d31e 97bec44d8ad51cb98f437571c5dcda8a184bab9a08709139bbc51155c338510e 80b406157e2873267b7529d1cbb370449ea45b1657fd6f3a111ff38f68df5bf8 15473aeb208d3317805a9a69126f9c5d6f88c224bdd8e50942287e5947c3d690 e67beacf1fceb6ed368893dd7cdbee3032ed5175e3fd274604be6103ff17c1ae b92fde665b98210ac54ea23bd4782e0be98afb6a39fd39dd195f15d8038442a0 2296e0bbb1389c9a38c5cac3d47b1eedab94a10ba10ade6d7127edafc2bc9da8 30feae65c30ae282e1d1db57d56b39835b0eab094b9e0719ba4e14685acd8c42 6dcde122ce4f827ec70a4610e7381a65a8012b69ac5df70057a0261eb63108df 289a0551a2daec616947e60db1aaebb9ee1a6725c1b82f00cd0fe23d7433c7d8 84b8d528bec8520bfb068343d0e4a14cef0510e27b5d07b97ae31adee5a039cd aa8dcc8f262c4b478c97f5d3229127995a341576e5e6f9ecdd8a1cf02845807c c2abe37872ff3e7261cf360fafa311a54553bcc0302216a9d0cec5c9434c0c81 026691f4741537610b95bca4cf8479fe52caabeafb0a7b4f9e9b7e30ff8b5d14 ca496b49a2e46d881f77d11a3816c292ebd18ee50cc5c76975df41067b2f6018 254327452822cbe543f70d768e2553e19e69a840052cb1895883799ed2eb7e7f c2ee7bc2eadebede72dca24d3177f105a504f7fab4e72be2c64fac20ef23d946 9459319c3734b81c20e5aff043672b580ac3de5dd5c53a0628c7bc23ea348664 444637cdcd838858646b8f928c89ee93f38be0e9fdad4ccf556395fc954a5f63 b9459cad1da385c9dfd480060648945f45f4e490e5107197838d9d4bc0a69fd5 7ff840e80064f51c6f0d28e4477ba09f962cea1614a4220cbad5a21c81b7ed40 78aa94b5cd12073149307e8181dba96007fff86abd2530630400c5a88037db8a cf8c93c25bd283794767b8408e2cf661156f2ede6c91457e9f3c13cb018fb0f6 47eefdb59961e0efef808b619b7acfabb5f1066213bbc9c45fc77bfd275f67ef 29c1b1346cffac0cad1b009448b516d587fe44c32d585a488fcc17214d33fa2c d916d3c86c4803f8e8051c6e0c1a880b1b9e30c71698801e88d9c996e3fc25af b51a1b13f514b2f5d048baeb86e4608f095efbe7e0f56a29d28a7e2f2bfb0be1 46ce099b242bc67b68dd30d3c5cfe395b58f9451f251eaabde38510503d20ee8 68cf806f50b29ac0df93e5e28f0ba6976f13cf8bfa9c945787ecee9888549f75 584a7ac42b75869d5926f0ca97d0db8f48760cf6893b49e2f76bd8a62ce3e0f4 255ab05136b45dc2a7cb36565e5b516ffb69aeeda6573bb9c8f058d8e2172806 b8ea1fee53852c25cfb9fa12f9c7fd578990bdb1ee40173aa1d082e7a98a2857 a53405770cc1440c6c0d55fd422784f12ce1f0f940aba75aa9eba24ea852637e a36198ddaca0a7edd85895b4319d47adc894d8756f89660e4642ed8032130175 d0e59546d04eeeaa14dd23c9b8d4b1f7282eeed55a8817affd29513d9c354948 243ab29da8711f6c475ab50b0f606551eac0da86383fc5ca33cae1bb17cce16d 4a2f7945fd2b5eb77919d09556aa4e202a0dbd8bf38c50ccab6668aeff57fe1f 4afd1f3c57aa392078927ed6dd41e77ff69dbe7c905652cc67946caf6a8d78e7 b7d9b879282d59e85961840d577a4f8a0b23d76072b5e9ce8cae9dafe0f69f29 187b35e994a3f971d2bfea825e810dcdaba251ce02782d33417263385344bfcb 8b1bdab326a74a1356f65205dc557f4e7fc1c86a3a52b79bddbf3b8b77447244 2e7467daa1c3f8d5518ed96ec57e734a10eafd8bc837f969588aa8f05c9082b4 0350fb0e854f0f18ecc78281c30d4303a4f4208cfdc0042c01296851740896a6 b114ad0ec93784b7c3957186c2b2e6f400462a48a2b14990bf1390f0da1129c2 586389efc51d1603ea78f85e7fe14abcb6eeee90c939a9173874f1f02751bd55 927435904eeaf166b714778347fc89839e65910693a324d5bc9497d8c960795b ad4f4352387ed7bc6658de590a1476df6ab35b4445cb9c354e3cb3a65a729848 311dae7ac5c82b0cc060f721e6e824feb3f4437b6b3622e86bfc6d56f9a3b95c ed50854dfd65eb4753d7d4194dec4cdbc73bfb161fe6642be83bf73375f7d3c6 f314690497cd18d97d5ed7625c88660a2c7065bbcda12447ec3f2fab3799ac27 5b0c72531080f47fc1bf0df74cf0c04199f22455e66de158daee7d239604b5d2 838943686140155e09e9dc9aad397f4730bce32418952d0175930c5a49437a51 7957e89bd2150baea08ddbc5914d37dbb9435c21886e058a2dcc680a87dc3e9e ef728f26cd6001a86cca0f882535b2ca7e9e083f4b62bafeda45b98170a0a223 e2ec90398a175b66928e889fe0e2a9b93b040d363af92373923bc94d1834a20f fb358bfbbf5c55412b8689cef4bfa4e9e8a46db48c48f7a58744991d5bf46378 23567067debe18a03a8d49080fd1683a4e81adcdbfd80a23449c2c03f196a98f b7e1369c7f008665fdbc658caee1e1c0a68fa2e98cdc83da4810373c3815b527 c264b44d2df0bdb18767f3204d597d0aa23c06502234275a10640c7de47e890f 9ecc406f167148e2f6e8f353fdc45035cbaa256a02760a42ee9d18f3fe1bcd78 99cd1e58e40c38cc12b0ada37f7092e8fb3f348a849471c1ef0d438e1c15460a c76f3016b2d1b85b20838fff669c5c2a301a0f34886020671763a89b4e985a33 7e108d9e224ec5f2f5acd988c8b1022b151affdbbaafcfd1fdc11e8f117d5da7 cdaf291fcb541ad755c0893372cacd74301c485cb6b8f27a8b2748c178e36ef9 7f030a22037db5b95c0db3b455b2583d5847b3312459eb726a4036f80a0495aa a127660157edf1293db42600f55f9abfb70e9c3334b60527372cab86812d0ab2 73eae0e4c162e5d76b71cdf03204952b271efbe1cf8dab2132c6f7a20dfa9b98 f52f7b0b29dbf38d1484a5caa644f38769ec6a0090b10f53676dc2f6fd14985a 6185abd41cdd00b970c13c16a8ef61403a7f129ea9ed12193c8789a9669c3be9 6f21729e3655a4daf6679c4318f98f4dd5f5c12934dc5c696eef03dea5d79632 da3946d7acf9917794adfaee7b9977fd6f203c7b70f307677b0ab5fc6fe31ee2 a6122e9925d13990ffcdb4b7af159ab7157e231b8bbb88eeef15d24c0e13484e 9550adcc1e0eebcd077dfbec1a931862100f3ef725de23ff9d974c2d310e7725 ee60ec1e79fb297d436c4bfb8f5bc45ba818e72cca86e068b917a0c88459dc39 fa984179632c1ca4bb7d31efcd46c80df69cce0cd68c53cedaf1ec6ffaf46edc 6a7cca91bb940e8617209bcef9e43cb6874db7819cb2eb5e2eb5629280f1691f 97c612ac54bc6226f69de741814d7bbce3c023537c01b34c3e10aacba92e8a6f 493550bb6a17f414752d07430d20931de6929cde7a32467ca6a9135d7efdf66c 0ddecc3fe8890fa54b3c5f68655ee5fa656b2cad7f722d57bc0fc21418ae2977 a1d7079b271a8d27778b0c0fd6f366fc70fc956abc4842688e4f4cb8872eefc4 dca9dc9c0206cd22e9c240cc5411558c7559f19cf3b13edfa38930894151bf1e 1676dab2bb0e28d2b0f83d9a9beaa34c7a35531e4660d548f6efdbba7233fda0 01742d905f4c75d70e2ea081a23edaae908da319d5a46fa5e55c8bd860379512 1827dc53023a2bb55aca882f4f92b0752532f3fc45b3edea36fa870c5266f8b1 b895b3e999971f044c8b76b8da5abea1c28f363a5cb17ad709354dafd343cd9c d28853e09d4d2ce52c65334cff35ecbd18e755156c041abebe1f547e77a8b6ba d8a2302668aa5426c4487e3d0a281ee69ce2c919518af3ec843b26bc2489f0c6 77fd93f46ae94e64905ad274a4c663404b8f18efc9f85dfd380203e5040b708a 6e765fe6b7fe9197c0a337cf1f373c597698ebc39f0f087f680f10cf48a9306b be1f8bd596fe5ecd45a1e9166b5acd1af42f5c56545f1d967529a4bad58878e9 78d12d2f8d170c1d636703a49c54ee5957848c986dd5e4c637b2910760c686bc c6c2d5410b901cc6f0f61275109ea7f024d41fdd14a9d4009da0bda63a3106ab e4c71fcaceac0223d4dacfec187f76235eafd1ecfdfaff385ff85028b30ef8e2 8f7860aacd54054db633eb98ebde5cb3230451bd41e1fff3045abcc8a7cf4b57 b9ab43460604d6a0d1e093f9bdaa606c5e25ecec536ada59c6c72e9b4db6bdfe e97ab66be0f4e5d52cdb7440a331800e3d08582ab7b298100c2272b8cc4a73f9 434d151282256b9d2aa311f890a49f9b72843d5ac71917774c74994e04964cb4 66b8558b016f94a366f155859418a6a43203ae320039768458c900247f1eabff befa5112dc426a1d91b1f4244c17e97e3eb1e3aa6db9b0b901cc817e819a559e 707ad15bbddd2934e96cd611cd51c5c7fc50ccd8a8b9f07ee9b4488b685b409a 7189a595b9a81d0f0e5981fb6c2eb9e76e55c682eca70547d07a4699bb052ba6 03e55a266e761dc3090b4942fd798c7f00109fd8e3698a57b55f53daa1f65056 a62319e867a74b2aaa2ec108f38cecd2894608544f33e42dc2bf8d39c97e0de9 b8be6f20b39441cbe548847ac42f97a42070534547a97ace1e40f0000795084c 90f01e7d5dcbea7a9dfae8d78666dbf4750c259d99c54ee1971834914bd21f27 d12b67e9394554d6f9314cfe174acaf1ddce58b02f65e8754b7a510711a2e94d dc337fd6bcd342f95e86cc1379e882a2cf152b69493f89b1620a44790378b975 e203bf433963ebb49c1e271ea05ffc4c69fb88d7a56d82e27975d5d7542eb408 965464b9d6d7e43269be0e0372164a38b3cce0acd80159b2524ee1e79cfa60fb 082b1d8e6d23549491ccf0de5c13d4e116d16f149220ace1d470b2ef03c04595 90e82875230ffc3a929ef94dfd17de4c891676341865e5e04b33f0e6ba385ccd 3ad5d9a5ddcb6281b49328e3a92e66677c48375d5319dc7cf01a256817d9506f a20a2b949b410563ac3d1fe8f4295fa45276483189ae73e576c01697b285529a fd8ed73b010b676be1df8d1f4ca631f51a92a472ae01b519c7fbf9ec579f19c4 ffc6efe1d87e55e5eff78dd3177b97a57fdb524574223a7160b6d5b2bc79743c 0a53e9f275835e8856e8daba448351843542f4fd428051360f7edc91ee17d9a1 1d47fe9fda94629db3f06eec6913447122310162db5988acb608787bce67e102 eba9c51dc93bc429baa2cb1cee5dd5bba0c37da2058d655e7c1ea446e327414b 7b99dcea1b3aa568edf0b6d329dde18e334635b0162ebdd51a5fca04cc5154be 59a444519f1943944661f5180d0c5f9ca462ce2acf4e478889b7264b2befb175 080172918627a9a7c9edd0621965fbf6a3f97a642743c968bed19f8598ad4f77 8d31306ff4f83abaaff5c2553029f981db8df4298a5d9559749ad0da13904ff1 f6cab5ad55e1caabf95d56e6f1ce635d0699dfa53e9dcb30074098ee20817046 da494a7c54e632808c8518ac81f959873bd29acde651f3ce2464d6436271d32c 0cdf7cd7dbdcf10e8b00b5b57c460809f85e7674cff86b434c1fa9aff3a676ce e74b0f9e6863481d465aaf9de343affe1dab652dca2ea4d8d9734fbbcaf559e5 62ad805afa061dbc056037eec11d5d625a54bcd27d1d75bc5037dd489d925ca3 df62c563a84851450ae2b88d694ba9cab3eafa59ef47f4500f9502e7d307146c 2e134184892ec7d372631e7598b052ab49a5078e1766b0e6b24f24dc094307ca 7dfa7f702fe6131d3676bf6dc0e07a6358492b5c27261e83f794881f64d15cdd adaed2c7df4c0dc8da708776104a7c718910da68ed50cbccc4401fc69a31c59a 6735a38221506733b5b3412e5f62f0e65d00ba874df456c1c094f968ba1359e7 45b8d520901e8e925361ebe4bee14f3045c6db361892f5d4dff0ee964813c711 0f87dffef9fe14a86c83ffeead544d9c57675571c962621a662bb23f8662d188 ae4187a1ee374682673306e6d1f3d17801782755bc83880b9b27941887de0d6c cbef3e80c26d45e4a51101e612572be876b9ea470066f36a0b52cae3f1b7f24a 3d9f731b15861508b2e0dbf0786aa60da42c5e456e1bcb1513262d4a35d338d5 7b432f1ef0cb0250ceb5f59d631941e6314db981d9fe6bae478bd20a85c1d33d ba241ed0428823dfe282e13f89fa6ccf2beccd433782d133dd94c54ef42c1217 5b16e02839955ab1b88f1f628006eea335b5bde2ead7d5f0ac48e315277e8a6c 8a0ffbf937300fa9d7250364c5965baf75dfd03e73fc22fa609e30d94bbcdd30 860d0cc1be6ad2e50cd2ddc76f94b9e7ac2cd29ff6b0e0d6cf00223fb39932e9 a76eb90f760ad01c10397f9061c0f588ba4c5946c6ac9a40c5a2e3ac1e2dbc02 44b07c870977d816ccc791b83f5465b7928d2f6c696c322728e66e88f43e2c8e 5048e19ee14b7c2f07e34681a5c5d245e7b9a493af229268dc5f3b1dc14b158b e14f44f54904df5c39cc33ff826eb9bd5a62f0be9794be45c456187a6ed1c766 829ab49a470c0aff732fbf31e92cb6866f19ad657228846e173c7b9cd6382e47 44021f0b03d00e60b3e11cee0fbece6f495b38c96e057d7c2576e5da02baec8a 5d4ea920b927e6928eaea493f7b95ff8db71e50fde2bcc7ef71f78245f71e89a 1db796b3c062104fa17f26b61e52cc9294936dee7a7f0c687e2003d74f2a47f7 ba008f0587917d9599520a09159e46ec8bc36bb9035bf0f0c55d11baff020cfc e6d268e34547e71a75bacab8c5a06c2c96ad808350cd0e8b8334924b7cc84bb4 0d64fac4c8572a5a86dae1c6babda9833ec1c5fcb76d0b8ac8ddf315a323386c 38463c11cfd10526ba3623bcebd7ef8f45def99f2e47d4def37b4215cfa3703c d10d3cb4d72d03fff0969885cb92ba0d2613c152e0fb987ca65d58d190597426 476b6ad0e5f139054cee912f936e4a3917e57c85802f218157b9a75c4a755b9b 9533600c96682fb0f57662c8576789df89c956008a5e9cf8f867446d8ef6d43c 7e4bc48b05444350e9c4052d6544b2eef92402fd4832c34e0de28af5e66e8ca7 591ff67644bf0e9b25a9559b90c5ee61b05f23e2ab00311a82ce1ce6c8a2034e 9b9ca74793028d1859f56a04f3f2ef933b92ead5f550f6dd20eaa024582ac34b c37acddde8dd3d89cda7c1e39f73847a04148d509ab5242669f5b691f05d20c6 988b3ed1bbbea2f18fb520d6795e412bac18296ee36caf567022970bff0e212c aa62cb6874bb4fcac228551a64c0254de6b6cf5288c73a55e49e657a20347da3 b12ef7a6a6f1d18b056b3138511ca1213bfd4d31d5bd69125f395d2a4c49c517 5181e835b7dc8a66026379bbcb9c7b96cc71f4eec5d33afd12ec2205c453447d c6e1b75f3b0f96222ad5df51da92bb3970502780f329302a5e013f6bfb94becb c41f4d680adc73decaf4ceed392a0524a05ece2a88f05821f682e8456c81f2b5 7b0ee826be4afd51692b8a4b7f2ad843f8f5b95ce6dc1f7849035bbf170f2988 97ef04b55bf11c542ae6a66b6fac1b4b93ceecfaaa037c1346b95cba1932343d aff0550f389c263b2253738ed9db256f56d2e9cac8d284b559e736ab0dfb4230 6a5c55f152826d8020b250afd460178484292d93074bb643b667f90977eec8fe 9d0f946689023723b8273c7da471fb29965742afe8d23831bc190e8461e40933 565bbeea7e4436382e2f7b806e4cc0ac30b28f0d555756b7c690441d4d52b3bf a4ca9f22bc1e99d405bd2b5fdf00f43da0d0618542022c307da75013cf012f44 658b0c5b1c3baf7dddab14e2baf75ca05ddffaaccfb1c552b100a25a3a4db010 fd7bda14419744b898c435b993a0b97478489aa798cc41961fbb7f02ea8e8018 3a898bb5b205dcf11e620e6ae19130aeba36cd541ca7034021fdbd1fe3f88170 f80415d2e2106832b376d0cab2117bf421f0c3998061a48e7ea225c5c751c0db fc2623362879623d4155c09a8943eeec0db9054cafbc68efb35ae3c0e82b0072 51d6784574fb64da7ad53f1d5e103ad486f8aecec7ebdb853e3981e4e069979a 4e1345462ec67593cf5960086e0dd755a324d936d17f142ccd6a499e81ea910e 39d9d95be5ec28ec5ef733dee478ac8f304cdbbcad2c35a0d44b6d1486d06997 2486de40e7245749d2ce89799c05eaa4f1f49a19e210b536a50b8fad91d83c4e 9d29fa988bce42cd34dfc414d03ccc8626b0df883a3727edd1db3a7b086858b7 580d5584a7778c6cddb35f0dddecdd737f9ee0acf9ee81641c7878e3d6db8bae a403b2810d80cfdc8bc084bcb9131828fbf94956d842664f387838183ecf6575 9adb5ff557b4e447ef59cf9c1caab4cbf81d2a3abf61e2fe628b422e6f3806f4 09cab52459f918273dbd86af85d01cd447fdaa91d2fb25738a815896217271cd c8612f8564534041b1275510efc603468ccce9c787136c6336d158ee20ce6272 51eae22130d371e860a59c47ce474914804b9f20869dd38024293449af80ddeb 80b41f7e11a396f52c19bc62561ae8f6ac1015c7688bcb07e3b893f2023d40fe 81f157eb57008829825cbde22d308f76bfb56f2949f68cc1708746e3b7a47070 752f75dbe3bfb602fe73602ef2d78e952ed411ceba5ec341685c3f843ab28ac9 96a0a5b371b407c47a44f0c4ef1a69d265fd15d4d91c39c94f5a0ca6e2d7fd70 99c3199b8a2a9bf4b92aeddaf50437e73ff37187c2b7254f3a8caaaaf3c3366f b2d7ac4b38508b58add0640017d9d34a4912f2f990102e6f0c6ccebf4ccb6745 6f92d5325f8d37f6309e69ff7d6b826879edecc4e5684cb12886ce2cd3cead35 5473d889ac6167cc6685e02957ab3ad6ce67fb1caac7331ad427d844c165cd50 597372c3e64834cbfb2fb0e5287c4c26afd0abccff6464bf85434eb988a2e235 4319fd80a09f2ed33de241e7f18b2ee4003695edfbf4f8f3b80f23d5ed457071 c9a3965e4ac255a4b5a8e59241f6545bf6c830590b174bedd708d5f46882330e 3fd41bebc72fce0a180f7c382421fac6b85751b67caac4b038235a7b7b92cf26 a1b92481ac373d5cdbe1cbe0f65f19e1a3d886691a1bece3583433b6c385bff9 4e26fd0de9a019f64f97fc06888b52fffa942c40d023ac223ee92a2df3afc867 25708a156d90b87512c1dc6b4f2e1f0ae0450df78b7368328d2fb93f73721326 4debc3e09c6cdc3b2339145a4e0e9fdbbc4110827944a08aa1383a57049cab21 01d5bae06cefd6fe2adcaceab09b0056e9b1cf3ba2446d617603c189beedb37d 68f2ca15164984754fce571b603575b1e4cf4ef37342af735f2156d5af2d085e d29217e4c663d23e9dd0b10998f68b719ec195860efdc0fb1bd4f5cbc12840fe 0840f8e76f0fbb5f3c34e3d62d4b08e536416928fa0f9cac1b789837b0cbfc05 89fc272117d2a8eac8406a0888ee711e35a173b368faa3725f90a9cc058e4173 2cbedcb5ccaf4ba8029388beaad621bf4d89490a657f7c9027e82537240057b5 c99fc7224a1d09129f2db3547e1bd04f6645df931dd0c0cdd927ef0e3cc26498 de557a7448dfa30f39b389f76dd20a6cf398136b48fb0924f414317f6266a406 ed41bebe78f8defaa017fc22e6ccdd03d4e50ff7db9fd8858e3bfda724e56769 ec01626ddfebf8d212b4320b98f6b2e53ba2525f9ead01c2063de7fd2fbdd863 6aca774290e1ae1ca230e2bc7361645fc9b37039f752080ababdd24ea785e94b 0fe3852278d7a16aca953efef270fa4ff0509075a2eed90dad8b91b0b9d1b0bd bfeb88ba1de0b7ff48f78fa17c18570f6f03682f5080e34598883268610c75e3 091376dbb1fe9fcb881f4bc1688e14e4ae7ccf0d2d3219a6b91f13499a8ce2cb f54ce0a6ab64bca8f42b9220e651fc790ace021b243a187e1c3ffdd6a77c94ab 3255efbe0faf59e14739e4c9ff830399be165c16f2c186fa578854ad903e6613 45e7fb9cb9b66c98f124892f7f53afbb7b2c4882903603e6ea94dbae4220ac6c dde01c4d6315c0ea8eddeb1496f0c2acdb97cf71adb3fdeb8569bb9f5586f98d b6fcd72c8b207270d92255ce8512583f3911e11dc20a68a0077b3379e3105b0e be60a60fe5b0af8596c967291874c7360de5e9b80b7f7f854e3186afa1862829 98c586d59df29bfa48a84fe59fae07e19b5ae3e0fcef3970da8a4e124ad26548 6dab54611e09f30774b790a71f096e3849b4f4c8ea63db0bfa1cc07df453feff fa63f578a4c796ca36cd2d4d03600686d1cef3dfc87e2e18ca69e4c4f2729652 8e93a9597c08110299eaec11447492d9afc22fda312fc3490e41b2483c37d9ec 4472d6edabd05be21ea67be47b85a5d2fe7888d90f862b548d9b67a83e1e8027 72b232ce5f569dfb36b6ba76d0e102a6f7aa97effcb57a723982e6226c8035ac 26c4d2b51f9b829c9cdce731155c15b85dac11301e50f01a70edae090db47a45 5c8dfb98b84cedded9ce1aa84705ee53af62c9ae66818ec86490de44ecf51696 c5b42323aabead2e36758fc723b2e3218150b885aecd66138fa006f0288c874e 8b6390bd70c4c03da4e547afa85897332215953e3804a60d184132e6c83797c6 e3b55fa402a03bfa4178dfc2f3916fdf9b651972887a43e813c40f4cc2b95cf1 ab7089eeae4490a8aca66b5593ce55e4feb8adea67d3966f97df9d824427ae2e 1ffdf2a454ecd1b7ed705768193eba668acda0863a04fea0b5f41660b24c5f49 75ed168c6e4862f31443be672e79718b0664081f60217aac0c8eb88f5235c61d 677080e6d14272ad2bb024634ff71904225858960746e3a6da4ad46846ac88f1 0f3ee2164dfde3153134e81770f733cfae97a76d75ca7148f3fb4a31a26ace19 aaafddc4c1e7d909b0654dbc172ff1d5ac1b7d7158bc0a2e9e810952edf3d8f1 cb1d4e6c8b03ff5ff84951cd7e8c2cad91614a292f4514e2e24f65027b7aa8a1 c31b8ceedb62d703c88a2abb8b6cb85a8f33e8f6cfe6cd737b8eccc98044258c 8f0a0ec75cf429c2fbbe33521c900a296093fa45a705db8e4302f8a2131d163f d8463675049dc5f101f0c52a225428b6e06d2324acc7ebf45ffb2ad1270b91cf 4c6828e8cd7b68f6811261d48c75edaee55664b27fecddb89c25b6db8bd34233 c9aa134b7a3e7be30f6f96feb221f546978e1b8f7a2830ac29aeb68487dad060 554c5e94244743160c507c82b59d5f33146fa92ee23d6f2e87539a9ee095078d 68b2eaf334fd2ed5dc8ce3baa504b98dba287ac81faa637327a6eb619416b60e 2b7123a1c8439ab093b0dc0531d219bf513bcdd8e39eddccba011eb001273f15 c8786bb1e7e21fb37b69d4731344380697e1fd1efaae459aa6d64d20bcd60b95 55784ad32d417558c1e389e0081a4253ea95adf07a12b50d7709ca4092f9e088 329f5f3b1f4c8d47770d9bcd6dcc26889a03b12a8d6a6f651fd8ea7ebc2e629e e0b8aa0d4b109e3cb8851d020da8068f53660852efc975b58746220e88b8f524 aa7568615079e3ab9ba2e6567d2ec8fae9b44c40e38475f286f994d12f9fdab9 e3b2402c58784e1a2bf08bb50da752df4da9dbe994863339117f8f4ff7966a40 a5536423cb09758a7e095a32a200f6558b9df921bfb88a89a525a6a4037e4d0e 5012e34fafb11a0530cd78b660f994c5890a1fcaf240d158560b9daff1298577 d96a2e0abecebb2fea683e23d2d55c67d82ca154070f6f8577e3a9b5920f4c78 047a145718f05a4160dc428cd30615811b9f11ec762876522556473cf8e7b4c7 507e1160d74ac3fef0c0324e98d3edc3b1af00a5eb63900c41ed8af3af2e6c9b 64fbe5c8e6cdd3c0788ee4e445de85ce7ab50074c2ef30e09bf3b77ec05beea2 2eab49dec16246e6d469fa3836db7ea9fb1f4552287808d35937cc99ddafaaaa a4df57ada42a0e7cc17cf7c85d89698d9911cd7a7abd65a52dee847772ef4e3d c58ae279329bced91592b75d8dbe2f248282ba9d83409c4c01abeafc25488da5 fc912c6a2a6a44ab4e6a31e46e00e64c2ea32f9dd262eb40c4e2fbe0dffea3a8 6bae373a299d733ecb558ee33690cec00836f68c57d3aec0de30908394610afe d52ecc75da8ff52f12b278c0fedc2fd84f93f1c6146e53c4fa5b04fbcd9a98c0 571c25ea33667b294ff3f7cd39b92507dc688f09675191abf642fbddcf0632e3 5b7c0d21f2a87ecc434b0e727c4e5462e64312470f888bf585157219dbd16c22 6a2e4d2264a3617107e090730b0cdcb23a99399d0dbc9472ec707fdcdfb80f87 50e0475866edfbff4b6940bc4668bfe5f26720e795b4626e6d409036adb84803 0f4bb9dd207ab399dd7359d2da72803581bd31c729d5d56dab1589b5f2224449 fc666090bc5ce4bd34b992b9cc9a139e9503ed2d94e2ede52706c2584d11fdff 06dc0925315b8b54b622403e20518484b4d0d95dca84e8aa61f87b6a38fc727c a41c09f5d78d69f64655d3d77d3327881cd4b204a2832d7cdf052667e7f78f69 a14fb94c16da67f7a78a1b6c236bf0fcec87dce5c529cd28fe8737d841bd4332 cebfaef3f991b9d96c9aa69fadd3a840c4099e47428bdb90396a6512023c29a5 f80f2915e14de83d27c928cf74c728952d6c95cda6e60a98ee86c82c22076500 642cd51f79358dfa922f6668fe80229aad9614c0069d6dfc3d5858505975070e 5d8566d9b7cb0c6bc11e6aa8a1320cf8aefb3cdb925ba594ba093c2177c2479b 52f9bb08ecd5dbf2dd4abe71bad94539eb42d7000ad831f8d3f2ed05c1c52ab7 c436afe34be572507b29b8aab50d3d9a5abfafe8645ca66b2aaed48f40cbda75 81b777e9cbde2198ae79de9827d94b97ad36917ea46454a2015835ac816c63af b0246f126244ae28e16a7e283aa5d7af73ab67ac40d6f22f43c4ef8d0ccfb955 c4238f55eda71b20ecc3f582d7ccbc8a32e914f4b85f9870479058e960bffa2f 19f73a6a2440593f8c1d6758b145aa743c5dfa303345172dfaed21b200a4a030 197166a30315d5d53fec36ff28c1a388801e2de8256c144615d5c34235178dfe f3de041f732b1458e0cdd05fbffbfe7967cf83ff0c1640c28e14dd3617464382 b8d15f705c36e60a70bb4ed56148ce24a3a5a8ec94a154a9215657e4589aa225 47031faa360dee95cca8608f84d3984e668be9fd60a2b2765d53b5ade86d0867 32f2b26f05a7c783af505ecc56cbe9e139fa1792b61fe16f0692e702683d3d2e 083952d014a66ef81314186dbac5cc30ebc608ff211d9220524a039f5859d44e d75ceea89d2769fd7e108988d1c8395f61cf013a25b08a8982694d9aa3cf30e8 62e04596604b55abe517046bbd8932787bb3da77b4873599bb1a23d6df56d864 1bf53f1539ba70b94b044b542b7cc97dc4fc7db3fd77df5b8e8802d70465b703 faa926228240c594e638a75956e7fc1e1a1a3ea7276e8eae9c51b06c6217777d fe8542f6bfd636df85ea73037d89de7d452b7f3f6b2d0959deca411588e24f5d 23ee6ab511afb28fdd2986531e68e52f835683c2284633271295014e030de66a 52eb89a1af50c145211848dce5218a61cac2a6d5d4e13b74bfbf6a047c95e499 81e04960e2537a66068255352e113a92a006ca0aafaa74154f262c0a32e6ebc5 6113752db1158178249ddb28b1aca437620ca2dd4d719feae60cbf024ab5cf9a e3503384228de7e1ebf3d4b66aa1268bf1815b8355ad4afc9f049b4a04f8e9c3 aceaab1e11f69f43c8a58fa501715876378d4db873e443bec94f2e82a7764d43 7d6cb9070991111c47a030397eb6201c54d7eb547c2b533386ebe1f61876ce91 35b5e0457bd5a195c225fe9a5dc082f358c9eaa8c24b5bab5115fb774e255813 352bd109c301ee8888a56df85c2c64f76e34893d16cdd141fd508e9efe8405be c9d068b55ff3cf240723c176e7be65d7c54d1373c26af2d4f6c5ac54e9c53b0e cddd82be81edf6b7d31ccb587e74e3b3b04b94a2e268c5d15098dc04ffd1a7e1 39440c7549d2d4919eda76b1150dae6fb23465d08df1adf082f84af41213d5bc 2b170b83f3a50831fb1c6a627fec8406bdcd4ea043cf5a04ece0149edefa6e61 8bf5b57a6999fc6b714adac74bed627a0514ad72a1bbe2d01cd719fd3c144650 ac3c51a9a7541c8cfebf22554d0647aeb5ab039fbcdf0c812f9b2b3a11a816b3 84e6947508e0e306f2c62b7861d2b310e48e36851b655626243f6437e0c84ecc b6e99a00716dfe7acb936b7909135ab3723ee69cad8724a753644ca6c9b8be2e a278bdd583a22430838baa9a088f516210467121c238014c903d9a676f5b6219 46c2c0c51b8607b1093b245641dabaeca004ab859e5a880431b772d43771ac15 34f445dde7ee720c1a68401cb9891405d8f43069af9ec8941a6214ebdbc4b91d fe8769ef597049830286ca0f4d3f6dded593419e4b786844f3312208c3168b13 3b55b013c976a5dc91453f2e79a9bcf3472d831a5606a9f18839c1ff2195adc6 1367209c2a5b865f4ad9f01b1086fd1af14f102a3396d670fba0c8d01bb22d77 e807f7001b0c78674624a6c9b8264015df381109c008d181840ae4dc5e02749f 4c99ead7397fd787016335ca02ca052919a165343c1d519f7f2ee4fef5c9505a a59f951cc3653f1814adb05b16dff4f642a36e41453037d09976bfe13843f452 f8dbd11d4e937a8737b5754443fee3c04631c1e36da3cdc79622263781f7a380 392d5021c58f50ae454410a52a9dd1c35210d37693bdbc429a86ba1caeb19065 2eb5638d85a60c8ccba68ce2e0f10ef984421a365e666486d4e6d0853c239038 540149acefc285046b1f57284da30dc39dbda4fcad265b3961ce17785d33f004 af897a7ed975aa658ed7043825356dd937ec8bcd672f70cc75ebdd994ded0aaa a92eb1073d10b99dbc52f099b258de1b485997b25c1323d7e3f973fdeff898f9 d1c018b1da16fed0452b3fd179c155ef6a5e2bcf05e6f717c699f13357521ba2 92f82f4b6fad9e795bedc9ea4985a8acb41b16dd3611e8210deadd6715249241 a40d5d7fd161a5c86f414d7444cc9e3a709a8da98c7d6b7d4f1640f4e37a1674 376e37e188bfc9b9d06393135572e52a6d1cdbfc675deaa2c3c0a2e3149b8ce5 432bedaeacf118fc99e5a567fc82f1a9dd2432660a05bb 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: Utopia-Italic %!PS-AdobeFont-1.0: Utopia-Italic 001.001 %%CreationDate: Wed Oct 2 18:58:18 1991 %%VMusage: 34122 41014 %% Utopia is a registered trademark of Adobe Systems Incorporated. 11 dict begin /FontInfo 10 dict dup begin /version (001.001) readonly def /Notice (Copyright (c) 1989, 1991 Adobe Systems Incorporated. All Rights Reserved.Utopia is a registered trademark of Adobe Systems Incorporated.) readonly def /FullName (Utopia Italic) readonly def /FamilyName (Utopia) readonly def /Weight (Regular) readonly def /ItalicAngle -13 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /Utopia-Italic def /Encoding StandardEncoding def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /UniqueXX 36549 def /FontBBox{-166 -250 1205 890}readonly def currentdict end currentfile eexec a9994c496574b9cb23f8cbcd64a4a16861c70f0f2da82f0c7b06ceacd6521bb0 cc26f1cf47836cbab75757d7a81793f43e56cc8f22f926da04d715ab6ff2e257 5a135dabbaaa58f31f548cbe8a76c69e2402589b9e5e46e757f06bf2eddbbe6e e48a624cbe1c4840a338e90f7efbe9f2194aee1c869bc4cd76e2f1937d78e207 d8149c05b50ef0bb361f5905977c40be7d4dad07b54e087896acda5aa70ab803 9dfc55a73134c7f1c9be9028d3ec6ccb0fbb8fda52bba4d7551a8124e68481d0 775ed7f8ec68d8073bfdd3b67f72ec68634ffc57727e16b9aba841546ae54d99 b60e227682315510edda09bd6ead4d1652f449d737592c44bb178689a3840169 53d899636686efc6f838b19f966be5f833f5e7d41af38a899df96fdce1ebc116 9b0ec87c930d9fdcbab7e74880e9693a24de9c67dbb0dd75b3dbd113b079c490 60018433ccc06ac1df33fc090c4642fd5225fa0a188c131974ca8820319704dd 14b1719b958779d1475d92e712322eb2e6a79d652c4e3f5833aca3091675fef3 fde103446e565428267b009d87bb7d6bc40f46b498b19bf1223aba33079e41ba a9561254a9df97a48d71015b6a24cf952539f664f172d565f39a55e063154d80 a960cd56c34011fe26e8849c6677427b2c7e728cd16272363d76661b3ab8bb2c 85c20b747519a4431421d4c83783feb896c45688ff7f824381cff5654a1bfc68 6f4894e1d265455fc00064d08c37dc3a47b59a5b2d14dd893a2b871492b07c4a 591695c8df012ef46a750d6cb7fd86696e7ead280648bd737e9ea490140f3b1b 1dffab2ff8e085a8b1c78e4b9ae9cee277a29233cec5ab2588d1cdaf4bbb6512 e1b1476c68fd3db18ecc2536968ebebf4333c2c3709ca354f21fffc38c3858c0 561378a701158ed0201a3b236ca9cb7f7528d1e5e07a9bfab04f8d0fa3d12405 5ba2fa9dff76f41b980bfb36e8db1300f7172c902dcb9f5f0bba3cb9c212bf31 76cb802ddebe556f4610021fa3700d476a2be2a66ae6c658fd0a95bc1b9629ad 03fe4e775ffdfa9f87a274fd904c0db5beae258f9af213f257db2be0265b964a 681fc4d2855f5356fc87576d847db274fed9ca5bb4961ffcf53f28b673f50e31 c3c634604e718b7666b466557f4f6bb6239339e028de3909dc47cd634205ddd4 69a944f11883dbf89344c43c513c35ae966a37a89795177b9fa95f3713e4d48c 379e33ffebb1bbc92521cefdc36e4cf5265d28522cb874b9e8459abfa31effa0 e0dc4d34692fbeeeecea87355dbde65528d1f76b89c4b5885e3d70b3ed028f5a 0510fa7044cbe74a030a9bf06c592dc447f9ed889988e7ad42cee85d5c3687a2 1d78ff32ab9f4cc829e7119f3d144ab2c78da8230df854cf4a690b27d715174f dc062ff7b8d8ac407db4410a7bbd2c1d2495101298e4090f1f9fa1afafe36904 755a6ad78fa30a59760534e40b3e32b59ebdb0563c0c0e43f4eb6bc32e80b426 09bc1f3b74c0acc8ddedaf5762037aa3e2a2a679e9afe87e32fb1e42eebca249 d8e36fff649f75309bb73b7ee08dad284b17028a880376a67982c07f6d12b4cb 06efada2c371661419b85835a0b20d18fdc162b3f94003cb70b056e077d528eb c3450f84b5a7c65bc1df5e15613ae03cc89a679460398b7e964b290cc4538463 125e0a6b762ee85d9e9d12992bedc7431245fd92b4cddde62fdfc99a6d3b09a0 1f73328e8139849cbd1fd2cb5fdbcbbb227cacfe99ceaa311982c21f75b7a77c 4347e35a06b8f655aa43f8b52e74f0deac5fafb69e578294fd414884fbaea16c e307f172156492b08f124a614ce0f1b50b842ec518faf57c94c26121feb1523c 3825d3e67cd11ff1a14e359ebc290a575b9bd45bfd10c2ffe319c55cf31a708d d8b5e3462b8c46ccc1aeeaaaa2869567fb9538355548b07defcbb15ba4a3249c 67cd7a6e0aae0d0d4b95e9eef6e782a3acdb9eafd6d2c0275addefd1981df830 f93866e9658c1d31aea8a1a87dd51e04c03b35a07f82850bcc3233b5e2d7cd60 0c2c5794e6cf73e3f28b2e4bdab002f67cb88991550f8080a66a51779ebde9a2 ef448cc3acc6e5fcf9b537da8c9335490aa3cf1970bdac6db7cbbf86f6d4fb4c d2be21fabdafc6ffc5e7353490ebca78ac5fa087b567b6ee01ab727b64d2d561 fcb95239b12ac04cfbb050507e6030229ffc593c9c473878f5e57dc8f688d721 c5d3075bc07cb789b7c39938e0e69044a64bff9118973c66955efd29bf2d6a1a 38cd2bd6a4d96da6e28b564d310cc6587968a767404421e1b566476b351d4e68 a5dc329837ab3d980fad84917765af40d48607e71b9f67e548b05a7d51974180 42b0d573a632898c880da9b8de945b5a67d67bbf1c7ee5d3c37e0852e51f3493 a6cee4554755c72e3e8d2b3b7a69483b217be80cb25db8abb51a81d3c082ef23 92995c5585bf5294420587167bb986b681ca712bc48a9bccefab8ea79d7b33de f7ab496eb280733c226f4c1708fc9d021784eff892e14b7c2f81b1a9b4e2967e c8c44ac0dd7c1115032a7464cb460f728577556c778f76b4bdcecd84811ca7aa bd6c80ecfb042655ac5e6f068cf20e2aa201501aecb98e9bc487681c2ef64820 c60b02e5e9b37f28bcbbe1fff890237d449d555bf6302030c543bd4e15acbcfb a678ace308caabb224c184339c60e4a18d709a6e0ff12d200839f29d2943d1ec 14acf41f5977460ea23fcbdb66e0b2a85762c8d5a4702d0256420ead7b57c0fa 076cae8fdcf13104ad6682bf279047eb7fbf3fd205a8fedb0bb0eee84b15888e d4baa94f595bce6923d9a905eaf276e57640cd7054eaaa348900ecafae936514 80c8bb96dd86e62670866b4a35d5f3d2d0740797a248a07fe4cfcd3ed8a1a2fa 24b4669b9bfbf17f3d6f1087ab5dbd92ca85562797d010e0fca4e75256196810 3af5a3d17a779dc2aabdda4789ae48fc91a6abcbe549de048d1ce23a06651e91 2e56d9f23ae35abc0fce4a40e4664318a459c52c1bbbff636a3d3e59b78f3357 0dd073b9e2f47b76a197db59c9631c5647178e451244ed68415b04cc6315a40f 9014b16c4e7379d7d472425a2c8daa7b1b40b206d3a8cc1a09d2652836d18dc1 d14c6d6f4b065cee9e840ab4d5fad72c7765865b7105705f38761d533f2293f9 6ae24d32ecd7e801a02b4dfa721b43ee912b61e91d736a70cc3ac65f83507d79 e27393b96d9d3d036d749513c360ed05fca92ed67624ecd5c33396f32c806b03 8d12d4078eb9e62057f0ab8a0c94a8b7acf79a9ce2ac02e5580e7ca6ddc25b4c a4e05b38314f6aabdb562aa2c635011f3fb0fa4c33ff7bb3f6e657fb857c3a0e 566404f9f0c7fd65035c2f57d7ad70e0549bc71ce1a296e27d7a66202aea320a 815e64913d076b9861941ca675859d2ba35f93c6b8f37ab69bb52b019f3c1b9f ec7bc5c20c6c3ab03d39284ad9104c13d5093441992c827e44eec1942a8ed7ab caec3e4432449895fee9c36ba08ba8f9b7e5ed1ee789f0fe903b7db68fb5ae1c c42245b26131b5708230489af0d320cc36b4125f6196ddfa16edec8b6a244eda b83e97016338b6e127480c82775bfec98939c81b05d9da7294c28b57a1769a28 b107adb87c934832474dfe6a531f273e4408d30e4a83479469d8a8f06a96a0b5 891bc0587d26430f067d3424f6f55676e13b9b9b109ef4545808c96626cc87a0 2e96aea5b9e5e86f7fc770a0a085ab910fafc78ffe4114d360e47fd6197241d4 b8370d16fcb1c52d331f54bd386e0538ec3bbafa28d2063f314094ebf25cb966 5c00556dfea0485f6bdd071fecd7c377966806637707dc21c567baec76038833 d5099c6a2a45ada8966798cda1e53f711ac121fbef54337a0547850ee4f6dbbb eff47aff49a509e3d42d13ef79b4b28b14ead029d286c71d45a7a7e681dc21f5 9d95fb4ea7e10f401ded3c023c4df0c5908935a2538e128003e7d213bcffc5a2 6ddbb3f8ab2cdd7737a63516b53f4c0bc46f83007ae2ec07bf2934f620ee513f 6a2002a7b5868653ba8a0093e313b2109e1e13952aa606daf47eff0db9dab0d1 d025cc652dc518141e6bf54b58e8354a03fe9e3ea74353c109c9ccbe84095e17 51ab0f1dedff540c8b1396ba0a0f30947d6153f843790030355b95f9e7d213ed 545bbd3deceb7d8b5a3a1ce4459cd04ac6e2db28f6c4f2e28640dd04842cf000 64c26d42afcd5dbb1d3ee219d727a19a3e226215437156e36faa2cbffaeab4b6 80b2eea3121e0a1bdb8e86494470e9018a2ae79c37b07f12e3da4193d31a4d4a 7cda98db6094b7f3e2f5d8fbc8d97e4ee89b9b0086f83141ac5df580d28ac39a 452ca17854cc24de67f7b58621f2498fb7affde1c5f10963835cfb92b5e6b50c ed1df9edc4ab949dce3a86983b792f60c56717f83e0b3b386010a8c7372fdf78 5be21d4e9044c640b948957fb9f6c50e17ce61267f0687702a4024285415708d b219661e8fe4eb6d51755e90e87d9931dcabd6fcdbae1a777b65c7ffca73829c d6c09dc5decf1955edd8c029fd0ddc423bb98c5b75f18e426db147b5ad0e8be7 670ae4e2c26790904a6fc8c8c67739de0c477b8b62391ab0eb97602ec9ac4668 8c9c9b9abc897c86e02907bb57a0385b91e4a621cc1f7945fcc2c4e98c8d103f 14487b3c985e972b8ef990ec8bdf4e5a68e469a00bc94631024a47382a79c617 621dfe271c8e3a77c56c79cba33115ea48197ac6d4679dc807e3bb1d12fe4ce0 f86a044f1bb0dfaefb01c4dc0f440aab8b53398577a4ea18ce93a4665f90b982 2833754b45ce922a196f86973e0a510350afe6785fb2f16c14b58547cd1410c6 01c40eb0778cd6d317d17a9fc1abb9f5292bb22e6949969913f9d33598c238c7 778dfe7e9da0fbf4ccd8787eb3298b66357b0dc5ee28083f409731ffdc383db1 3407dbe11884b418ac96eef98b5cb85598e85ae6c1acd605974a0b3704538abb df577c0ed42807f4eb5406718c3975afeb1da895941645c3e63dc6f2790c7952 4c1a541fb3999b814d50658fc8509097412ac1ca78b95bb9e7602fc1fcae97f7 b0c808f59d42f0afb220fe1c3a3332d1fcbc9e9ddf04fb81f287c17d115cc48a d2b510bac5f22247a2d9ee444261c614d76ca694c1557fc005ffe2d20a05672b 109afc42d657ab64aa9ae6edbb0bbe5709f33fa1b1576d94a8d7f3e1c5696744 06473189f8072d43e842000adc98d771f1e09dd4b18f755f2bfda553183b89ca 0a90ba46a77afaffc46b8e43911bd163518b524e370ca9347ea431d112e69a8c 2a0e79661542535d9166d60963e59880303d588ee00b88f053d5067919c59429 3bd35eab0ea167295fa3261cfebf4387d4b57a60c1d173328a9da94e754c4563 f504899b1e59b6795621c29a70a7e08065b0ab8c7ad4f4674c40ba73770944f0 6827f870ff902da139243da0f32d0eb0e6eeff21f82083bf7fcbc891c9f86978 77f3ce0e4dda452056795de22267ef877eefe96a150d8162635bc5fae075d176 1fc4e3b58f0aa9a8288cdabcee5c8eaf5ae77acef9eb18c2b93fc88100687ff6 e8fcac6b04db2f1676e4eccbe1b125e0e4a3e2f7093d7c3aeb5605573945c86a b5e0e26881545670dce8a89cf56efdf5c9e981690c53e8dd69a2ee3b8bda042a cc135a0141d50fdb6fc395982fd933c85c503fd8acb1e2e4cce30159e5745a2f 3741815a46a98808a86165221f1bb3814637ad069494808f9f1f711bf9c7466f 5dc3e5588b9fc1ee4534f03c7f9ce34addf25e24dd626f965b9a5ab9415dec8b 7e22bc3dd9d065cb20d220fce4187f31323212de203def7b5cc7a4e08c9ce367 6432868471b7fcba5e1473268133a35b3f6a89b1633d7228b181eeda81c8eedb 7887186d300837f93f3a3c17f42ce675c9f6fca3a019b43f531930aaecc08178 8c4c353b208df23dcae57d8143cb71bfbf06c5fc3d7bb0cef7aed669667ea032 40c40baded1196a083a53c9de3d955b6b9e784908d70a3131b479af6b0608153 f5b18a3d3f165f01535c455e9b27ce56376867a7da17d48ec22a3c2b606266a5 291bcdf486b64f24d0e725d63c6ddb0a058030e2b5ab5e6a3ae619efda264466 f83991de19a119c43be5e47bec0241518137ff9898994f27feb1d9fa946ec045 33fcccea4ac038bc3fd1275ead07b09248e438be5d36359d0833e53ddc100cb2 8654e52887cdcaebbf524beed731ffcaa4c6526ae5d8eb65562a09e2d23c09c0 f7fc6085953ccfb047c90b0ec5b2a42c78ee28fd1b2f57bbc1d55d505523b4d3 4174e5622c7f8b366d2e56f6b5457cb040caf1660e9b3980b9950c059d31d9e2 ce39bc79333c9ba0ca8e7a94f0638a90b1bda0f719a3024ebad57b279c6e9ca8 8e74d161753fde94732142b22351996c002e88ef0a1931e4874f529e4af4526c 19cf3a818380c1aa5b559ebb2f93abac03de452b88678ba75586666f4b7ea870 5e0a3a32a63b1ffa9f178dd66c9dd68945cf05be4b18c73fd1f51362a6448131 4526f0fe0819fc86629220b422d020d76b8d580f4c9c0c3b9881db92ae2e68bf 327f5e6dabf44b9c6d74f1685cc4946f6c1fdf53752834d21996f3b95ee879aa 3f10152b76816fa447324713750f75ca0712ca1cd88bdb32ca9017a164315d75 6f80ad2b31e91f09dc211366446840037b3b94af4be7654fe11293c573890eb6 c64eceff6d59313a198bf0c521ee2c2de30621faa6910ef1bbb964ad0c41e4ee 1063f7061a7f2b0a8d0b84f7fd9ae18ea82134854a04ce9eedc3f08bbad4f3cf 0a13db07612e535a957cf82f478f293f1f630fae6b74a477397dbc00284398ac f82c55615a134ecf85d986b7c107f23c89b52ea946ee7c916cedfd4e7b3032bf 0cf9be9e91eaf64df57e57b5fc5acb3c558e67731373318742d200d0e377fd32 d8a3882a417931e41923ee4051943c9ef378e9ffb06860834ca61bf1de691b31 75ca47022bc39fe5d34ca2ad8dc7eb2ea8cb1bdc87d5da417cb0ee145fb3db0e 889d95adb1418e8c9417cf085c701494479baa7bd9b4fd8ee56555c8e6615867 ba882793b673ac9a487fb46ae1684e144a368d6f9fe2bde2d95cf1ccf45ac04c 0385e5c1273833d4fd7006ea8c28ab2d47fb6b018eea61c44cec3e60facc1f9a cfffe30c5bb155289ecb25b9baab5c23ccef55b8f13cf22c87c6c853504fb6b3 85ece0429f1412bb95aa05115a0df0638db3eb467e3fd8ced353bea56c179e7e 3588c848935691656a52a3c5c36b0afe862a8b61aa1e17b376eb7b106c71cbcf 8019dcf8981b4736072fdc02790f4a543b6e7b8d2e2df10eea02f46016109650 105a238fb77f195067e7efbbffa2d3d3e019a766c083bede15060378c21f4c6b ffa2234926897fe49d6198faf82f0241a9d4da1d345be0cfc63e15b055dd8efc 73e5a1936a2cef3da0cc1b3a090d9a9b1d427c16844fc289efea8a2d8ca948b8 59c3bb2b72a98e9110e689214b56995392bf79f4f14ca9d4c2bebd58837b89d7 2ca8e43fab46f1599bd6d79488a57872f4fadb1081d9e8eecfc0e7fc3715a782 2024678c6ab8c19796ce0113e2d65c8377cd4438a15907e7199497e94c014964 9f1317d2f6c14eb4ba77961a259efbcf752b1848caf36efbbe7245170f73bf09 842a353494baf4663f9a96a64f1fdea15103033f731b32e62b446520ddd6675f 8b3f3eacc32ca08e0d1c5b16ba44183c7004e16a60b6366afe6afe0895a4b4dd ce7548e43f6750351989f9b3b356e780e569ad6296cc1ca63228f6037b2dd920 e7374c83d8b4604bd7e8e9d4d64efd3b030076964801d9f5cd6c1a0b7fbb1f36 27e6b8acf364025eb4e1688884de28de5df5a20026de11e2bdfd7799e75355a3 92a9bf327ce7b83984b575b6fba04f17192de45a473dbdb0425195a70a59bcd4 3f9bcb4e345c3d77cc6f1430bd7af6e52f2647bea193c89d689bd0b6810d7b38 d15cf22bd54bbe3a364b7ff92c2e1e9f5d50caab41b297ad4662b429e30cb85e 8eedec8eebe3764e6b3a1a4209ba4d65149e032502f0d2751bb05e84576d39c4 6d3ad6a88aaa8bc7770e47ab9597c55cb7bddb935135c3b6e8e2453018cca325 a8a5fe0862e9f170ca0704a1c60a464e99d3391e977ba7a1ff3298f9f59e0e75 a258a0cffc7f2e68b3bb3eb86ab5dcda703392f96981f646f8d80cd2ccb7d8df 850b8e5b273212832a8ecc7730d3b50898cffe08788bf4fd8dae7eaa95a5f2e3 5493f60a1f98a69f8e53b47445fdc798261848e288db66abff49488bedff3f90 0c0b02e1811266710e7dc3778c7e7d791313f4e1847cbee01eff40070e0d7ae8 71117112b89c0c14cbeac7cd5ae03970f891e26d130e99b6ab6870cf561c37da ddf09883be128c8b120130b2f21cc1ef01d805451b7f006875860c7456f099c9 dc06e721ae1421ade56065d6fa1ade700dc922c913de84f5ca1cd5756dbf2d6f dbab2eb1aac9fcea36e3535ea67dc0208c4b64f06e9faa0bc677ede87ba8d44d 5ed0edbb8f1bb5fb58489a61baed950e4e52776cf2b5fc474b6dd332604a2e63 20084021ae5ca62b21767471a7647d037fc3061b8c44ff64157720ff6f431af2 be0a7b492010c3aa81913cd5762baa39e3d21edff3ee60788b0fb2077991838a 673dcec396f3990d80cfe91954a2cc72e7b5eee37fbbe154eb5f8f2f2c5d9088 62d67c236b6e324d0ff8eb8a0b1fc157d5f78fbf5c12865f12be960feb8ef1b1 9e4abd8eaff7a991fcab958f8c09e5bb9f5e03c719f5f25e528496670fd1d3a9 d9ed79ccf61fe06cde71667d6f52bdf7a8bc5c73a1be610a027b643bbe08bbcd a838505ca64cd45d549d422b8ed0ee5b713b9838eb4baf301bc19c5a29ba9013 9802591c7b5092c8e43eeda2c7c375b1174434e133d5af1990d1ccf7ba0841a9 ea4ad71b0c0626b5b1bf23cd6fd35909253f8ab545d02f0fd1af379f78c2497d 41c739fe68af1ba4f1d0dc5e8636c723eea2715cf40e89147d03c877be6c53c3 a18d1555b9ef1aa4422831b6b1e23d211f11b6f6a62e55e782aa7ed93fe8cec8 ee3b2fc1fc9733362521c530627db886eb41479cea6da1a17bba3e1efd9f1f5f 5c4805d4bd730a41de953e0a11cdb961ce8eeb8bc43c89ce22966e36273806ab ffb4958b3d9409fd60d1d08dcfeb0469fd3f97db5288f00a9e5561e70dbb65df 6deaa81bcbc8e46ccb724df1ac5372baef3d23eae94a0192182b3c5c1845513b 1c1532923ceb112c299d65a99a074c753317133d7862ad83e34ed574b8ca7e74 37b3faf68e0fb8be69639997af45b69364f580fe27ca31f9f0800605ad0c4e6a 7a90b674d49af2b8ae5a9317b48f667f5838e39b8908b6bfba4f6d685ca73e02 b526a4a41e8bdac1e1c130ac7100617732f4e99a88997db362bcecb7a87b4707 fce23fc2adcee3f921297263420602fe595574dcbb6ce875f84fba005d673f18 a84e3c204426710b533a09cd25063d5aa703b41b95b7c733340b78149f59182c 7b64bd4cf2f3ecda6660b2b7a943f4de81c37f7e8357499075c9876ed2e40038 959418354919a050549a6947cc2a7317581b087e007acefc21f68454d1c1f13f b6b581dd370fd06eeb8d35e9a1ae95bfd02bf9622d32c4c2f13c17add690ce54 b6296070ad25c0a497433375358f4feffa3be61b8742fc034952a417fbbde68a 2e969420fd72f7141b32a3fc4ad9f40f6668d38b9de66dcf89d6f5e87c9007d4 ed1ae1d3563f71896dd4b6a4a1caaceaf4eb2f486f02bc008aee36168b13bdc8 f360fe6539f9ca077bb5e58d2361f6b389d86f810c7fb50e24d7fae9d29b876b c19cdd4f5735ad47b2cb717edff4e194a5c019f17210424f52d2aa33729c941b ab33a4782543e13003ad66f960d39b07adf94556ff555e08b117952d83288fd7 81d2ce4aabf0f4b2993c5d42587abe00a51d2da71d6318aa8d8da59031d2e03a 31081a89b49ff305a3a1629ed22684675fb4c25d77ead736e0a58b0ed273fabc 5cd506b1da93b1587929dd25d37648350577e35319f244a15a22877eae7cf8cd cc54e729091c4db8f7b2108e339f1a3d504b653019ee9186a0bfe4cae694ccb3 9cdac76454da6bb23f9100836abe546b1c7894766a0f860039c37ce47f34ae60 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: Utopia-Regular %!PS-AdobeFont-1.0: Utopia-Regular 001.001 %%CreationDate: Wed Oct 2 19:10:38 1991 %%VMusage: 32987 39879 %% Utopia is a registered trademark of Adobe Systems Incorporated. 11 dict begin /FontInfo 10 dict dup begin /version (001.001) readonly def /Notice (Copyright (c) 1989, 1991 Adobe Systems Incorporated. All Rights Reserved.Utopia is a registered trademark of Adobe Systems Incorporated.) readonly def /FullName (Utopia Regular) readonly def /FamilyName (Utopia) readonly def /Weight (Regular) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /Utopia-Regular def /Encoding StandardEncoding def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /UniqueXX 36552 def /FontBBox{-158 -250 1158 890}readonly def currentdict end currentfile eexec fa444f2716d92b815f58ca9049c815358e22e32e73a3e6a653c538ee56873363 67713b8cab082730570f5b5efcf34c2cdfb6f8dd2b7905a37c1924a2424c16e8 711db76501f564506b0f45fef10d83c3e3c6df2dc0af7802e7f42c81b4243697 ca09088b868d983e79e4b2c3e17321993cc8837921fd4ff7b92a1294c5ba33e6 8fd40e63df624b51865721e034f71bf57bee0e0c2a9c169c7a626496540d45db 585d2bc93f83e6829eacb859a194d7a57904cfae75e6188c7121003ae40153f0 0fe6fb52f339e72d4aef38469328465a3bf0ca1ef58dfb447612eef4ada248e3 ca525b0884971b85099d73538152affcad51d03eb4060a5c580f453ee78e5c4b 991f77c6e9600c135395d56335a7c3a75c0341979d6b404ee496214a5d20ae06 e17d80d37bd3540b8fe913bae1674afe37d0c41e3d9836a7b5147be32f9ba01a df1a73b89d30bb595a4b279032e37c8230b6d4933065947c3e9150d2c7c4d439 d60197eb69991ef059edf886ec0bdd28158a71a2df96dcb67fc0bf81c34cf27e 12d6ec950a75993af99fbb040af595134198151e7361672d8538cfadb4716785 dbd48da442ccc911ae9157b14e433559dba1a1c5619e99b57274d6998eeca3a4 7e804d8fe3a664f39f33237831385949a230a21e52a2dda733f2f89b02ef4ce2 5d603c9bd2f8e4c0443070940f0380dd1ac60ff462a9a71965a79d787e0711df 0a69bd86a4846965ac6c77f2e1699c4620c1bd9f5b2263e13a2213631c55f7ab cf60d2e63a7830d5011d9b9934bcee2103f4a5d56942ce0f590a15dab480e5e5 723afc8e1d8d96f3e0d8629b88ee477ea6cb8121b0adddf20405f8a32756004a 8a59b2cf922a6dc0747bc15e99079aa12ac0d9fabf8b47c5a61ca5268e01317e 1f0a38c468ffea597a392ae3399daf7c03126987750258b5e077d703cdbe05b9 a5fc4d80e8551c2c06a2c579272877fd462fac6569a7a9f964797df79628ba7f f77447fc2aefb25089ce946e0aa5c5ff21370f0cf84d8e2affa8b30891081b16 6fb86fdfe65e7e02ee551c6b3e2e324cf7e18664883dc538018ec8cadf7093f4 a13708013d6ca2afdf644c0155342917c2725598fcafddaf8807200682fcf04a 4efd5919c21ed2ec2f7951c2db953ed292a54783f5c541bca68d305b05df5c5c f17b9af31035dd8a77ed8b54d4de7d684f54c58a28f0dc55e7c692cfe444216b 18751c24ec1c8a00a5cbd458a0ad54e7c13f26b4c4257fd992fbd1338845fc69 6b97a2ee6a4d4f03fd387e745eeb8e97eb67e40bacbdf1d6c08e9fa2e317d30a c4234559096affd5b2e65606ff153901a68f158520c5e983513e902aa42d4b6e 0114b6bafff30aa7310184304ed27739882a95d64754c23fb09cbfc1846fe274 96d36a1028bead0bc7ba99891255e592c1ab0cb6c238f91aabe1e5ac1baa7e76 a578a751717c59d17cbcfaf49ce2f5597e41674334c47fbfa4c6156554b8827e 2228e6946ff9f94a50adf69b90be4df5a68056d3b0e239ac902e2001f0be0da8 d7f3f12d3bf591065afe84b6029522302f9810c465daa62ec2d497595ed8db58 8e3751c232e74debde6d460fd0fbd9833435879f69d4015898501b7010067a52 e1e24ab298b036534919d06c603b1059128cf22bdad9dc07ff32c85a0c956da0 df7680321f848c1a517fb7d4b4493719bce7078cbbf6bab0d830402f6910b607 a47015102804bb625349de6851000a0e04a854d96012a38887ac7d7a088cb2af 87b49754dd4d2c25e9ae751a66e8f21417541ea6139096322b06cfc74ee0bcfb c6e62969fac269db04366e4f88a7209482f15a81b96a24b6eb95c51d09874754 25825e287c10e1d41c348147a810c1a3f0416b6b0226f6cfbf3bf5a4482b7ae6 1490990b349a4a9f2d1969a07f04eec805f835d273b50bc27af8e12bc6cfdc25 a621e37a89744f378378fa4a78f6b4928d70fdab9eb1537b8bca11020683696b 7ca43225d1887ea6950f296c44b846332260a372ce94c755c2bd66a0c6538022 44b82b25d5fa8c7fc42e2cc34261da7af1d49cdfd345f9ed9d4e0f642ba54d80 5f9928d475fda79ba985b307538337732006bac708f5e4451e9a255e3530dfa4 fef40cab8588aee6f0b71d05a9448fc3f9ceb30c71c4452a5dd93f8928b0c37b 007c88426cd1c58bd738a1e722f395e8ea7aa4c036aa8afaadeb04b813f2dff2 cdf94236a00c5c2e94413b3fec178e2e1836962adffc8aa92d0454540d07d239 fd62d483603790dfb1ac55c4a914fbeec22b9ea4d4f91247ba74b456558097e4 5d1d7bf52903755b4e3a2cb972cf8cf91212a2c53340e160182603418894cf58 eceb21520035819639e9cd061518e019471a4205e104c405cef94f96286a7b6c 2d218862205f72e8f70cffd833b9c6b947e38ec1ecb61c91c3be8d60423d4a48 032e6faf3774ffa949f5dec181fba4bdb61ee45f2d8ee18f2e676bef8a6a80c0 64bc6408c61dece2517baefad05201a56997ca139ff35a5b54341165435ff7eb a056ab6fa7ae0e987dfbf231e8892a23a3d9e74a92132c3bba5ebd1438c9a93e b94d553d519a46611fc7e90793e5173156e05351dfe09d7250b1e0f806874803 cf1a9ac65724e0e7d12e122862913e62b78f71326d4b56fa1a20a9c6a574b328 f0651a00f69faae313bed805b6f63cf258ad3d785143d89f94878a2d6e825230 516a223e445c597df52d6dfefafc74cd636efa58972ea6d0e661ed02dccd158d b450344afec68f350f600f506ad26956f7df78af8ed928dcd8f2f2410802835e 2b7883be4e6bf313d1f4bfdb27007905b90a0b60b15dbf04ab82d006cd69c924 542ce048891e905b032ff6b2bb9d20b44304a89475c5bb87471e16d789f1c3d0 ffe121bfe78b0ff4b6d847018ab9195077791396bc41d0b5653373df4387ab61 bef01e6f5481e8cff22de928d5ca084c037aae138288f9eeb15e1393219e760d 86be365085a90adfaa61db8b250bc413382b55ebfe49d4b7bf5036060e4e702d 54356d3018642f07fdeb36075256af9862d675a7c5659b3c74c73ae9cefb88d6 42479487ef008179cb7c5c1b8f72effcd9ccdafe2060674250e732ab2d1b69ec 79e2f70b6c1fdce2e2cc3dadf1c5ff5cb3037cef7f66bea5f2ec11e303f69264 fc8eb7c9653960bc1bb19b95a650c27b9caf579bbd4a8f9227d0be02812e57f4 f2d842d3d87415db22c12a50707a0ded1ea96fa3ad3ce5478fd058bb7f8c9fdc 96111549ed5c04a0c535f172ba3006896ba91ec68f478df96a7262ccc746441a 68ba9d4e13cd948224493ae66a4ab9af8cce770d52e351a05b60c102058c590e f0432964454aeda4379c2ca54a7e30e55b2f510b2d0003b19cb90ef12134ab3c a7f0e20a50baab7acd01e4f40093e432beb7fbd6f44808a941b1cd4ca75d32fe 863c49f7d6ed8af7079d54ff82902dc0b01697a9916ee71056009bde8238629d 4b87e237aebc396e3787605abe53155223dc45c12a5f75e88c5875e99d154922 80cce083e6efbc6b249b9e520ceef7deebf2e07c3e1d5ae486492547b1672022 81874ae4a3f559c037d3f9a8c7a6a3206e9c8751a1dcf309b0adf78bc36aa4cc 5c001c3b85d1dfc9e19c676a95be2d6378963b95e5db773d0df63d5e2bdb9d51 5b6178236c4e909079b846706dc0df0e8d61a485195a0790ecbe12c6530f4589 81f236235c1044eab46692966976466cc12a9033ba970621a8ade750363f0535 e0edb289beeaed747409515c556dc7a05ed0fa664043bf0b5b58d944e4c460d6 7649ffebf9a0155946b74a5fc4f4d2fc2ad85bf06d1120686561946143bb14ff c4ab983e9fdfdf5b9ffa2f95ff90a90ae0557fcb50aff29b81b08d4167d2dd44 09e948c06c3f98d32adefd86503c019cd5acb8f4baadc18f227c36a6f3ad360a 8cc5deadd6f6b30e14434b3d1fe89619585709f56a546c3d75f76ea34e7b27b7 b3742e4c249f029fe4fd8c34b57917d7925dd2e1aec5a432fd0c75f49f162af2 2c7b9bbc08fd1a495cf0da1170fe1a13ae53d45b712a33704f5ef7e4601fae36 5143c17ca952870dd0f6324aecc2510602c7b47fe68eb2c0aedd3f7c3ce8c0c1 d729c6976b8f1d6de38347aed4cf1e882fb8a3efebee0f2128657afc9afc73a4 7dddaf97f33277712394804bda53872097353b7863287b4c5e83cd1f26bd6df6 17e27acb6a8877985ffc96c123f39812dd781fa3ba8b84baac6ca5663fcffe96 0b3d848286fba750c9192452360027d32b13a9f6e3498864e9096c7bb4abef01 b95696a6e620e8d7ed5a1c5b005e42261c8497eb926d8d72a0ee74f0ede9d7aa 3b8ba50c52065b264a92114d8fa5a3314fa2428e865a28b616b9eda1a0b65241 4e679a194815c5d84bda805e9ff427490ac9daff775a90f5b87853a39ddce1e0 91cdf1d5286a137c7e9bf1581a0ab4210c29d00d2402a65db5599e3a3dcc73f3 882ff66653135130e141ab04f63f6588ab031e361300464aac5dec8ff6c8f554 f1c7630a952c43f35cf31ea86dea10421508aee7ce6b755f41b5f4e5d1066065 4e2b5031ff074251236ab5ca377e7e4872766237ecae77aa06b878e7e94d1ce7 8a704907b9d3b27364fd23922bf6c38cf093ba5a6a674e0ef033dbaccd36a963 6a6fc053205c111ac5dc4877a10ba4f0e396d6251110f64bc78d21e1d65eedfc f2cb66518f978ecf4b91fb6c300ea2beeb37d7b62974f201ef642bae1428f839 4aae8546a7630d187cac0aa26aeec13abc742aa9618035248c28946c757f0b75 9226e4fb4ed97b1b728304f8447e9eaeda6ab51d618224e6decec2b9a0d17b4d bb3dd0758af8f9d59ed9c47204dc623d5faa282a3735baaee37dde920ffb2d39 2a35a505590a86eb2a985d061e02d3d4f36feb6b7eaf0860fef22d8f8657db55 92298efbdbe0a53fcc0768818f1da8cb741a39e608c31c68a7ae97406451c4a1 2115f9fda77b2e9c21bf2f8b949e675394278f8caf07c4194e6139766ffaf114 4a5f0818149eb474e610596ed8f713ee37dfde0d7aed625f1aec695dab2fcb2e b93adbf741af0e4885582f58c06b89b6339342d60f86cc7c427fa7c9ee2b1216 a42a07be92d69689e8dd70da1ba0001fcecc80c3a2ce1ec02112e934efff30b1 925f4e8b1238f2197557eb676df87a91fc7b885de36490475371fcb7fcec35b0 1681e268e7e8ac100b5ef88ca93c91fa011fdb30af5f2ec8574c81f16dd69bc8 f62b3d6073b5888bab10d114ed98deb64a8646119e6f57e828892183abbaec08 20bfcf22554631ddd94ddc58ac4bd250bd91e858efd60fec0e4cde07d9250a36 034c1801c54edc9389027fe859a73b1dab959a7da810c1a3f0416b6a56148e83 79b0d7153b3029c97d972c0178a40bf29d5df2cda0365407b5b29dbb0ce2982c 4c384285d73fda5d65feb244eb48845ed9ec42bbe5397a1df052f7c02afbf50c aeac263283f147b200fdc050b39e068eb4b943092762c586dfa6a9cd79aad4ce 2a3104677cf69565dcb79aacb4a37316908535acd72fa0bc8c1042520a15a7c8 19cc4ce79578bd03cc3a82760565de42903f13b86f58c7a1dd73839ef0dc3a6b d29ac57c821341328c5a0cf0b1ea3b8da7ce50c06922defb915f49c404636f1e ae4a5e9de17f481df5b84f6d327fbdde4306b0fe55fa7929f82ef5402cce86e6 8955706275f90daf7efdc635611ace79a37fe59e6d97a192fa0bb90431778179 833e216f9969af24e859ffcb5a2397e831a76f106e667f9de74d362a65b2a69d bb09f1ace47c98ed70a2b8c77645e8db050c1e41828510372285617fd4f24c3a 9e139c85f818b69e2ded1e19ffd2bd2850bd95acc646a3cdf91b759abc4576f1 bbccdffc6ef57a682a4a80d6e22cbf870dbcaaf949cf89a708bae53aed79601b 33fb21f935deab0d0654178bd0df716f752f8e6e70dec035626dcf1e7da2fc7c 61151674d56192ec6197e2999113d56f9b10ea2eedd17c22bc1d4e2767e531ac 4d892c2e7f0e1e8d467abd278bbde0557c21e1d887b5497883e42ffe890e82b0 e1b38172f65d4c28558ce104e53fa8c85c833bb33267804c0e186f09e4b66258 7dba6d6912fcce2ac70f38c6c1efb13e250423bf86356a0e97da2c4ff7c22748 aa9b0193a82c07f2341a8ea7b4e2819c2793d69c1dedf9f56e03bde15102c01a ed06b759b8510a5d92d241dd32cdec4781676e2262c7063294fc1807bc6d03d1 ebc7d020ba1f468a1bd97ccbadc093c23b09902b1effe308e0c0f6054be5562d ee41d2bc929ab7c7cd9922e879b7fcd9f4d1ddc734425358b49a79976011d798 43e6562c5d5b661e2233630e142f6f724b1c64af42c3e400f9605922632b0ce1 3291132aed69a70773f9e1357d423e689f734a80bbf4ac67fed36622c820fef3 deec117b7b970fa5599b2d527254c475b31a302fcca78a4c2061c6cb97dbbb16 e9aa65fe9e381238e32fa6c1daa820a62ceb197f955999ca752ce19f4527e25d 57bdb877fb2c971390ad91d183832fe3932d9acb6c8c652d091e3fa460dfbe66 e1d8bd99073095142b7943831474a00bf441b7982978df73bd8054201f4700e0 fcf7ff5e33bc0597ad4e5187dea35b8c7a9953c7737975d9dbbbb8441ca134a7 9fec90830d716b5ecbb6b5e575e26f8057f5eb96a280f513f5b649608fc16cc9 294fe39ed4c0a0a714d679a2d66ce9fdec1a50a9327ad81f8450f0e29a5c5c02 77a9ff2afb37f41f563a7ce1191eabbc368e553071c669ccc15da416a319d6cf 54c7c4df9bc118d8ac86caecb9d700510dbc26aa5da97b5979fe2b43d63ae912 e31ab343183fcb3a1a12ae1131dc149e1d0c78e742872e6aa786fcea962147bb 5230fb4918ae8c7ce597c99a8ce40d6449be11c7302cf23f629b06ee09153891 d310b8a274fe595bd8018d6db0608c4beb37229d5eda3a68683d07e37fe59f29 a069611391e66dc83e7e001107e8ee106734cda6308d30c4a5c7614df95308af 2fdbfad9fd8e22c8095bdaedbdd20d94f361226cc3386c14f8306d614cf32d21 58e8eec2dc56392563e2b3ece37f2882bdbca5c6685550aa57acef93539dbc9f 81c9678f989ddd93cf463bf5858f211537605f3eb0e93f2e56e5d5a35d4fe2af 241a0c911f1eee66b80c5d59f7a4ba2b8cd0d010bf9a34337153a0b16d1f3bd3 98581e7137627406ea5dd418b022360d42b06f619964f34849b4fb2f4b26d0f5 8617a99ca127fa128de582928607f130f46c97bdc714c4b5b40e73f25773b3cb 69e6de547cc84abdd11ce2641c8300c59703b61a1b1fa2a5fef98ece945e82a7 7d62bf6607839b5fc8960e17538ee23296f33c16ccaec3541646720d3a7e6512 37daa82dd9726a55208f3a4ee0e45d2d485b68bb94f58f425ab46052350ed1e8 733977a9d6463fd600ebc5cde12b6e4d5bee87c5e06d11b97afe463f1bbeda9b 6528ed37f7d1a289c0e58c2930a37b543d6d43ac0062bd36be9be732ffc79567 892ac18500c646ac226cc1bd60473ddf23a85f9c5a61047bd7d4844e9e79a0a2 2395eddd44abfce0aa9c4db2e9523460f1177a51d27a32b258ab1d0692a10c7d 83ec55562fbdbc329fd8c2ed24fc2b04ec62a3a988de00fd3245acc64c445522 ce44153045e22ab2b0107b62af1092833a700ad49dc8482cdc78314f142a4e63 8a753d51a36cbeaaf948e73d1b1b2fdb9a69511eebd13b8198fcf134c4ed5f88 36f5272211e69def427e4bc17544f1e52173736f9cadc75b53a47e998844b763 be6bb437dd1cf783ceb09002edc17de7f79e6c065a668b5db74757c1b10c4cd3 88cf5747e433b6e2f5077fb8dca952c52e555ee03231a1518f81015e3c1453fe 9c8ad04eae447df302fe3eb1e4187b9b96ed20494a5a5637f43b5ab030e8711e 22e2bacede72e280d70e3eaa0edeab0a5ee6fb4e979ec671e16a2936dcaba135 775c31dea0ca1f32694e62b5ede61bf202ef051e0f3ebc2f12d3edd379f495b0 b12eb017b85a687429f5e7811696fb9c91f1da69bdb690f3b88b8c3e1dd8c701 cdbeeb54702bce506f582f60f9afd75442453b01516347af59b7d391c14202c3 81d88948a098b9228673b8ad30f7d17265ee85a2d8eec6e1fb96ded64fd4f4a7 8592aefbf4ba6b041f01f30ab7207f4eba4206bb7a97836ee2a0e39fd8a6b6a8 ade01876a5d0afabc57500b6ea8613007eb5dc8f7dc87cd856cca855abe47491 4442f7f3cc198d58e7cd13700fe8b5b4c97cb8f610dd5f820423ddd67e0a154f 2b400ca3c99a0b753cbef2fde4c6fc8f52df8603bc6c699827074692c6bf335c 8c27f003c5ccf381ca26a4eebffc217bc88cfbd6825e2dc653cccb108b9956d4 afc53080c6eceb0ef808f09d78f8c8ea335607ca4d2cbedfd959742b94bce5b0 56e38d4530796b19286402691b07385d3d28cd81b67fd3cca3b26d400f31ea08 945b4d35a76a0fb48a120173dec8dd0188c87e4022b8a10e87e781507c9b4048 f0a5a5d634552361bd5f0dbf2a9ececa52ac90fb7e96a94d166013c418263a3b 2bb84bf06e801b9c3fcd5a3af38debdc5b9f3603e6ea0b5e5db93cd04df7b447 5f2681475b2f60b3c18bf16662e8bd9458dc172432d33512e426b3923b9032c5 9c45aba29461cb3372b61e4c17146663c5cbd8447e6591c2af4d033008bb5fe7 3702a49c29edbdd2c8142eaa54c63e5cea325204d7eeb82bb9b377639febecb4 df295c3f924fa61d8948553d570313e5a12d9f6ee5af0aabc17d2a067d837df9 43ed58322625d02d782cb3897866fac50c4bf3f63e76be9897bb7e675581dcbd f8ac57c9db4b3594d1f417b5cdde3d3472e8e096378a5b975ca6d2de2b21eebf 4e551e58b2b8fe3dd1d4aca857388f302622c8bd7487eb1ffa76c4350f086ec5 7cf20f36a03c33ec62203793429418cb6098b0bd07c1abb50bc1ea4b613b6b24 4488634dc81a77c561bbda87d69002af0394a6aad837958806827c9d18468317 e80e007b1533a744ad69330c24a4e16599cff2bbfeddc4ec4ef722d9d1982edf 94addee5afa379d9cef41a72021b0588b5762b0f572b8fd16c690290c87c049d c042e28a6dfc1587d4a5898c7399f062090afdb218076385f8f168352a78d6f5 af824b22492eab5ee59f8a4dd6930916ce4c0dbad4216362de51b5f73cb2de48 c1b493cc9486881feda8421325124bec4e91b645473a7f50633bda3aadf7bcb3 0c27750657553b950f4a826bdf133887cce0f7b52c6afce2080ffb81f9ca41ba f982ade0c25cd9c71f310e5d77e979ad36e9f9a5adcbd3f5f529e060e1078103 ceb55e593b575e0106b8ddc45b43fd96e930266427264b8eff06d40aa15853fa 2ac3b44835f7564419f3ccc1e50ff878287b9a8a4e0b58cd5aafd42e2ab4da82 7ce37a581186ca91a8be74a9320b4e5123ff23428d1c87ba426a41043a344e3d c9f749bd8d126cd127d1b7875e8f942d64b46720bb5be24f1519c1ed2fd41da4 0b24a43b4ed843860bb93bbed1437555dc6bef6496304941c96a9f1b10be8f26 2043bef58c2e5031ee057c744c8693e8e6723619bcba77a192fd2adec865f111 7020a78448071057f202099a7e461befd885319fc0be55b74895c88b774bf75b 2ece2fcbdaa8c3b2735699142b8605b450f0293cfb1e8e924f94d9f38ee514ef 935cf4b5842ca630f7ed0a7fde2f6ecd56c04616cfd4ad6d95b4c56c828f8ec0 0e6adb4d2c311e89df815408f2651c4a984477dcfcf97754d643a8eb4d872379 7293a36fc811c4cbbdeb54932fb20b0ddb3e1f910e63cf66dd8717d02a15ff37 72384468100a02d44eb0c65e76d4a7ab30a32347581b96c471d6c9814dd93783 0811e0337bff3e9d84a56afa0948db48efe51c168a68bd5f274644b0d4a2acb4 9893930ed3f6b80b53657b3fb8490fa5ae0afe0b2bfe83c63092b883926e0d23 ae22d0b5766e9c87caf1f0d6676dcb87a4e3ed3cf7c0a8044e223838dd78ab4e 22e831feaee23f5d699b3e23dfd310dfdf32f21da3f6fff8d51cc6cb97a7cb11 d3e4022bfc7ae9dba76344f6928121521e1b72222b46b3e57b292edc9c69717c 4190822857cd2aa3c50df8d0c2459d0335c3c062e709181ac155b0723ae0e1c2 416876f3534d7b96a73ed79815948d8bb40b4cf93ee129f34a59ab27a7259564 b57dd16a20dac12040cf77a52afd64e263e96a16488f38de5d6994b341d04acc f1d8af6425935a78254bf1fdcb12783bf1258d06ccea3c5555270345b30899f8 9355f8276c6ef3517b7ae9927c936df51c718e54d02cc613acc76dd3134a8039 3451e346b9a9716c55e097163b4330691a9ef069ab9320010a1363f7243a56fd 19586f20612827ca2076b6996972193472f91cebfcf19c8d55b2aa4389055893 d0da66be3cdf5fda779b943a11f1c8fffa3e7ccfe147fd7299be184f6c7d42c6 caab066c4307d9797a26f56dfe2a200c8864754047266be234caea99c9c82987 ddad25029141d1b5af12271e6e9e654def008ee9121b85d33f465f3fd8fb4180 0d113f75c68c62ec501537f65f5caf4ee1670a21b530c32d33b0ed705f8f8589 fec2e2115789dead2abc39c48357bce33c2e8db6785ea7b378e20d4d97e441e7 98379b1179b667dc68073534566e472ef5e07482af71a35d6008a849be196794 0430c8311821507a775713e3c9a977d8ccb5122478f15144aea597afac76ea63 1804afe5abe4358b99b7c091c186ac5a38a2c05df5132858783b12a5488ef16d e0e412ba9aeb0cdd2511813e22010e3ea707f52dbeae6b0e8522659806b0253c c0642978219337fbb85995798861ffb6ceeea7043fbda2515322b9877b5ed0e9 b4c1f6d8ca8665eadc1bad926ae151c00c3be73d8759fbd17e0ec0388d8f4c31 7c0789d6ebf00603baf15960b6d21f96641a874ea7758550d5ac6b7c1e68814c f9cdfe7a122fc4f4008d1a889b1f2d3ab9d88f35dc75f1eb5509b99a419cde09 e48a14b5277cced6afa6d1b8eaccaf543a2fd8d184f9e16d7c48fa16c7f29aa5 2e00a9c34e3075cf3533530d5dd74be538dbf49de566d8ef994e007e9c1b8c40 290e0e0a974fb9be42f7dc3a8bb639d84465212a43d011376396d39c33cb52f8 9b645115671c788ecffa10bc5c618b3d03f556458248225c621ff480b55d5916 8d713b09ee34292a4b30d001b0b5f5facc84b8812766efe4cd6e93b5650fea4f dad41f51f9d5971bcac4c1b90352dd6ed44c9ec93bce169743daae56d8dd8b23 076df26b474d78ce4c933a9cdc4d474a841b53f918b7318de140add4ac25aee0 ed44533fa73ddb506997f5da7ac26a51daf6aa288a185a5f73473c070d85154a 06b4267e01dae83fe40a7fa17436961dd133e27db19099bd1661517c1752f8b3 bb1f72f6bf246266ed727383293cadbdd734630c68a9a348ceba2b678547c268 3b35876fdf74bc9e0e9addbe1208730f8924d6dc551240d4890f21c69a6f9d01 370b288a2a4224bbbcddb64b8fa29db917f24c496d6c5872cc31da6b7a901d5d 0a1664e0b2a9911d5bd5a1edd6619fb6d115f8b1927f966072254b37ec4fad04 5ab9fdd402ee446ae8bb723f5ee90d82d3b61c8a591cb095e9daf2d8e8d9d33d 864601e75abe6cc2bff272e23386c86ab4212d40c0b45c53623ad386ee0b135c dc98664e12c1597be5c2025317d96553fc5a150b6a6c7680ff761b86e528a7d5 ece1c8780caa9b7803317a12c1ff7e10c012c2705732de118260097810c68ab9 d6089e3f4eb47f158e758323222a8fa2de73fe85d9d207b8c40cea1af8bcf750 489145a45a04d7a42398cd1c7d2f81249a3bd5543d4f6ec5a206561750bf41fe d3e9927f3ec60a8589c0a1b581444bdea2915a3b3f4776a8b9124ec29deee503 7a2d3e0834b3e04009389e562cdb4b539a4b3276f9e4247f8162251cb4ba8336 e2cbf3f0b88a974f640dd9b8860c1ebf1460505fdd67786e8acc55a27602cf72 f1d61144142aa4b1af22ad115c440e0297be01082df13ed3a2759f003ab79348 711c9178ecf41d964bb2c9372fd051f8f891f3f31627bf65f727e8a093fbb3d5 d5eca4512943f993ab96aab0212d066cbd614d0903165c9881c79a7ef55d9cb7 ea6d8e4573321ed43dfa11066c0d1dc8d80db100c148f5cc8e74655e26b7e435 3f08490cb2e980791b5e7dd628089102faedb46d8d565d1ac6f3a9fc4ce0955a 64e369cc12166e7488ffb9f285665d44aeab6b810c32de9238a37eab2ae075b7 3c16485dda3548dde006563fa6df37c97467a255c5e35d1a32586358b766af8e bf27d3f3ef9e21be205119cdfea2aa583de0c55643bbc5e7b164c0978bf39ff2 0008700b0c5a7eed535205a93840635034e507a63c3d872b2e290ea5cdfe6da1 ac7536de7ae16a03f8f107e0e975f28e42be4c9f80e75fb54fa58f16e1f36e48 6a5df99f261032c796c1721078f7b0556f34347ade6b42fdd70dde7d6d8ac1f3 a9cbb551ace9feba43f382920d594d4c889eab191f50ff005f4eafd2504a8eb8 8c6b253ac4e6b44dc52dc6ed9429655a3df53ca854350ce3a8c84d1cbad0ac89 12f1ca6628f26908a433daa3488b3c7dd31e0661786196e7433aaa6a6b0228e3 e1f3092f2834488598fd2e10b4d213badfee583e93affbae9bc9c42ab08dc7d0 50ed98fcc49000507f17ce2b31675d02a7a23976e563c143c4affc5d8141197f 415adc90afd00a106e2742b6dca20792f08cb1c0e89dfca685afad76901366e4 0440ee5a5981dd92da06127329af61ba97d4ef67796663f4211315f71a6fc185 e5b8df7500e3a6980354f765186d38463a1ef593879c1e616350e69a2ca546f2 7644e8d9a9f8fb452a72e36ba0cc9e8d0498ebbbc5075c614c4005b6b25bc63f 63de93f9774c6565792bce10035948657c63a6adf24a23ede09845bc341c8ed0 f27253d9199a4a59346d95adef19632472980ed67b229ed373952c1c8705ff39 4df29d3dc0b708d1dc9c37704fa0a6aa5001c996cbf2ff3ba44c027baddc2927 25e677d85f7fbec6bfa0e1b2efeeceabac368d64b4dabb2e37dc1850f4488f3d df6186b656460858eceecb97002e51f8a4015ba5a816cf2f3be562da5e6c13d8 6aef5d6b50aac85cf1da62f1efcbf8af5c61018fafd02cb8a8b65b4d034539cb 4eb52369cbe406c57a4333605be7fdbb2cd8db58331c2c94baf8df23ea865668 f0d8e0490dc64ac089cfac9eaa9ca4484ae3dbcb35704589e8fba01d5905fa7e d9a3cec51a0ee24ec3ed5336ede2dcd19fa59d1471b66e61a35a66606f8971c0 76e3526034125d1077239b7207ba6777376d2e7a09cb1d0d17982dd5f069ce5d f91e630bd13199bdc1078cfb6f79a2422c803db40f02fa753895b70be689e16d 5a07cc8be183a9f9d2ba7c51c48d7a8fc5c6046ed0db73c10d2c7f8f770e4871 dc04d8d4794b95112adfc20e6c6da75c54b19b65aa745a4e9863c10f6c777056 7ab66d808a0f14cf33c21313f3fd9251e867b0a1c1ca7086be03d3020eb99a8f e10eb5bba9c73818ca1b42edd7283adf513cac0536209afa4e4c2b83a5e76483 c955cec345ea656b704b0f37bd47722334bc58b9aad055797563d9dc2fe8347d 9454e494578d6e3f2cda516da62f8499e49c6edc71720bf7a062de5a9ee51f54 e24e49f95b6067c0e72d214a0f3272fb51966dab68aba079044ffaab480596cd d0a3a4b751722838e71bbd5752bf66d18885c8b4a0d33f16c9ac451c8581efdf 8704836d35c16f59f0fc66d0b7f788609648087983c8ce4d0ee3b3a5b5cf4cc7 49f092717203acf9057c1bbedb320611f0106e3d9a66f1899ed3cf3a78f1295b cceebd65abcb01581ddf21d56de6ec858c8c7c0900cdf5d56dd291be6f75a66e d40df5686c5b8c0c4f3c74aa2dc986080fb61b7c12ef74de763cfa450311d22f 5287e08a86913f85f724205382a32201006acecd8bccba250b0d85c6a6255baa f455ad43d182648963f55f05095dd8d60d6e1e6749bafc0409f8f696c774f164 74aaa7d0e610802a8116e5e30d69a328545313d33f56830bcea456a283433995 a09c6ba637aa9d919d3eeb61c71df98f9dd27affb02896aa77c04034e3b45958 351d8b9d66268256ea916ebb8ebc75a777fba874901842118392b144cfe3cde7 2cfa3f1c26e79df8ec54d1fbe86e4e2589db74456f47c65a53ca445aae190c98 1aa04f5af128205cf0a3d36aa5809399f6254cb30c8c8a63e1c8372e53902285 ba3ea277701401fb4901a628f40f49a619e475ee47d8bcdb3cb316a16b3cae40 274143afddc14022d243568976259dbafe447ee720fe189ba92ab6afa873836e fce953a954aacccfbf4356f47de17298a36e78c0a0ec6fa1e36f941d8ef8e8b6 72d88bb67409709168368444974a094ef9d52711e5a5da887321b5d02ba24281 55eb71380d6e1f8c8ff49e28721e9e0cfef335e028f5a9590547bc3b636104ef 1011f3f862b93ca31e0dbe8d885c8d581c95d19cf8e58e2c09305486e75c6ac1 04bf82bcb81a0d6a19b23e00ecd1e5336cc746c412932764132b46f2fffac65d c314cee5bfb839350be64d419494a493e37a25139d4858460fa40fddae6d2060 d47f1fa9c773e2351cc7ec83ade561711453f2729341ece5047992aac1c75469 f68926997fedafa34107cecb4eb69aed344133c81a61becd7fd502542f55ebbc a40b75e552820706d1e1d2e8d2d6c6537af2f914da2057f6a3aedba377f920fd d6784f6eaa12a6d3b52811d2a45b056d3a243eeace253218b9cc362bdc859430 db5f87b87973f8c8500516a58af84a6b41703e0bbdd4b8dcb6873be3d47b8373 f7fefeb05f17cae5cee1d24bce59cdf99f988444560e96af57709680c520d918 fde07e9ab904d22d2b9fb0182f67b91008412ea0c1c7aa744dd276b25e377bac 2564987b1e315cd9873063860e3a27d6f2adaa4d2141ea13a78918fb60d62fe6 c052a08e0fbe2b4dbdc5492a24a9ac515f4ffce11dc890e50ef9479815be4d0a c848a39e3d1367f76192af8bb16b20207637b2c7dd6ce6c1e2a8f054748dc6a7 43bbcd0b7fde2155cbb01a6be98bdb7808d1380931f5b85bfdfdd86e63870c1e 29b5c255643b12bb9e0172268059476c9c5b72dcad46ed7742782d33d2ce23b8 315f60807743d411ec5e6c5a12ded765a05d7846f4e75b980b67329741a53bb7 e6226908d0af8699ae661bc0ad7b00a7460a0727e4db0531e96921755af8f1bb 0519705a506e52ae589cbd897d7334240a691d181ef73fd991ad776784b30744 67a6ae2d930a6e72160478af6336115ffee6d925628770b0c38d5d0c5bebdd2b af54e85a5072e6abf76ca9403b2c0beeb9b0753b85af0544d3d2139020224c67 ada089bde765bd3514d9d10a6ad9b5473342f560b2a5a182686be07e18a22ff5 3eb67ca4ca678b8135841a30034c150657ddf514b40c748f6dd27386fbab7883 1c48bb9135d941c82fb233657584c93f383588adbd1eb39e93eaba0ca99687b9 bf5ad0db99854f1d87722dadcc77a87e88abdde3c481fd3fe16ef612ff82caae 65632305bda50324413e689d106ce0b66d5cea56216516a5c91fcbd534094c80 c55cc6b5b4c7382b826620892295631470c7457fe0eed2f67afbf504dfa8f367 48782e1cbf4da8b48e66c44a9cd4ed1e5ad4565ad0b2c30cef1d81ac76a7a399 d063f35751eb0253b29267344887e5edce95b7b2ecc840fa38457aa48ccb4696 186af462d760b5f1e8be51dae6681016676dcece8b10523016df437373151bd3 dd201115675ba12418a0a66fb853f3da1c479c94e5dae185869fe35a0d635477 2fb6c1698b5a32bc569b9307e0365dc34c8c13b97d3a2427c67c8c991968a199 9d8a8d0745a1f1aaf0d07e9ac696340bce310f1e6f0bd3e68ec2924255133f25 8edfc64bc51db4fbb77bed569b8cae38ee0c555eb443f9dfb62c0095b99ff77a 9d4d48eba5e8d9567c5eb6bd54138d899c0968c87fa3041be201fd420754f9d1 82446c01967631837d7dbc634ff0bf6eb5209845710ce8fab97dd7ca91cfa807 48fc73ab0d0712e053f12a0098712792e2079e0c7b9ed954bd29bb518fd1d068 294a1bb7afac4c3c2a1d8eac353802c853d12ef9b1a39ef05c44e37eab259101 d2a469c089935cf4a09a4e47796441ba1643281b2787f30b1550717e2656920a 3cbaf66e1c4ccc5e5ea58b95e7a94b36e61e661c1bfbf74341541c2866b69bcd 3d13e358fee22398dd07de2adc57330ef749c8473a9409cb4beb8413641ca4cb 87cb8f272839ab67cd11341ab789b19302bdd0a36c2d8f4b3a28c4a10ef3c097 b5bfc7438a5dfa6d47d9d8bbb6a1911a0afa0d233897d58bfc0bd9b04b9790c0 631ad27d2bcba6ca60900788c022c8f5bca31d97b6fdfebd7386d88569d6b1dd 3bbcd0c28c89184a0fec32f5265162886eeeebf58b4968e0282be2c11455ee85 99f07a46c2146a00d75f1524e9624fba2ce571839d4499df65da3ddf140511c2 cf0079570853a0a636f74df191dae2392113c84b7be1fd11fdcb121016c111e4 2b9d2adffb9ac5a060e697fd0ba30599134abf99c1da3e253c417e711ee66982 f853e199f997911370ca81f0a175bfefac2f87d6d2f7cf664446a430107a563b 5c489cb9bdd0428b3a7229b17cae0ded29b39b52e12097bb602ed0ba7dba0da9 ce968329150e0a75a20d1ea8e3ee8864d55479f40c388bff389978dd7550a110 e9d2cd5a173f057cbf8666df9dcec7614e353df654eb5e6c8cab519bc3656e95 09cf837cbee69c9a51521aeaffc37243c445c980694253511c99e1296eff45ad c24b37b570309be42a76f11617d33ce1c813d2399fe83246b8ca7933aff6dd7b 95fff731902337dffd4e82d704137a477ed2bf767119e6769c743c6ef3974bcd a074fcd2d408527757f153d87002fa5beef274477359514f3db77dda8d1653e4 c5ff3c4238733644bfd9f5e6854712f775d10a69042e2c7beec2cb4be3a8d421 2a2d063b90a39d82daad6fd10721a52d8d6a3f428faae04fc5e0bc35456db070 7fead7ecefaf1645a9555db7723a47a63d10298d85532900161fbd310fa02cc8 a45395080dbe76176cd024f9c0248a5902739d8577d9c7d8cb33c87bb3e6aad4 fb082b011d8eed88e74f0ae3003616c22b075bd45c90ca361b65750c81259d93 7617f957fcfaf173bd1f3a51375b1f26f30d7e999edb2c0bf60759d2e7ed226d 901198e225bacee4cbdb3ba64ffc2a17572b0370a05826281fede46ab12303fc bb1720013270a702bbdc764db69a5019331fcd6ad8fa0c768e4161aab602219b ca0239f56bc1b2357422d4bad14046bb3735e0037295e58f4fd5a5815fc322a5 2680e98bc05ca99061ef88f997f0716c219424f3dbad7d9741533d88166cc457 c9098afd562ce852010ad52f88052f8ba751c2dc0acd2e120451e9c3a04396d1 23913621e353502de2d50125534cfd83011cf8601419c2b017f9b573bc405013 aa1a80fca49c9f91e47b31b9aff9de00268c0f8dcdfe63accfa27d1f91bd18a0 3fc7dcba657437e7d7084e2cbb2a33db1272b719c205e3e12c8e0026de96837b 30b7e1b399c129496d164b14212114e2632917c00c5cbf248bc4d6ec631effb5 daba8dcf46bb57ad95131c8e9350d3c13965faf9d92413e573867ddea0040bd7 ed782d0a71afc3ff7d1030600e1649cacc54c22a4d0996a38e0a5f9cd231e10a 2506358ec06199dcfb623057ada1c8e239e64d544d1727d78476a345266037aa 7fbd6144bf1d650c45603f798703cb6d3c4b1acb43d07b5e60cabb3f2e21ef5b 3ab88aeef2a6a0b0d6664104694b4524f35f62c841f24e3e23d0ef2ac91675ff 03a9f68915f3d57682b0ae4afcb76ae5068e728f45b9b827a9c0808913a9c3b2 483b874aa239c676a6607b77203e103813854f05ee8b718fab61951caff5c8ca b910ce04780014ebaccce0e6b81f85d0adb77b137c176b472e8b9bc558d94460 692c67666c2bca55bf9d580bcd853c6ab8765d63587a10d0a1e2a6faa7098ec1 800927ab3caee49419be91813a53b93dc48f1bc701779e5e55ec958cdc39f50a 50650df9cc05a110bd5b797a94bf95257064fd9bb64bc4b4cdbaff120b5f7bfa 72e85e6058e93bd4a3ca80c7bea6d1e1370db49acc17cc37c30ba60d763a4241 3f0684f8f9618d8bb5d1fa3547ae78ed5b9476205c3fc23f00fb0cad825d0bf9 dfab3d77cda23fb1d19222df57ecc1d49ff08d0424e15eb1dc8ac66fe0f0966f 6d8ca1518c200655cf46a4bd0fa9bb1e58e74c1bac13ff3f651fb98f31bf362c 7bf27515f2a05921eb858296e222b2381c8f9c56f151c9b43c08514253f457fc 903ec28c906f7a3386ba2a8efddc8359cbfbb79eac5c5bec7a3301132d524fa2 ffe07797cd91a02568f34cabd29b16bb22d8d19997e60f79f18397db8f043c2c e697e71d08a7f7b072867e5149565e1795b96d879422ed208bbf5f635caca60c d8296955093ec44014bdc9ac1a7330e26ded532b2b1e65a8aa554e504d8ff241 1331614b1cc700c218c150e0388180971f0b3d37c92237db3950589916561238 e0d38976fef6c307d0894cc106549113fb5a0173d9e6bf80b3b4b8f315428092 765dcb1d012a620b3adb6ff16efdfb65b5df5c4afd0d08df59701be0dd28c7fb 8387a0c8ff348fed30ef38599db2f76927a84567a4046a6a1269304afecc33ac d6acb73fdfd7ed37c4521330d14e1b049136fde5a06500269ec718b6fdefa687 4d35be0fb138061da23ee25aa52525a9d261ae7f9c184d4a16a26c13d6172d06 66bf145c59d3312944b5e6ab677c2cb5f3b5eab36bf0f1cd0f9597999f238821 35f52e5bb4efa728cc41868ecdded8033ba71482e35b9ea86dff4636dfc77188 22185eca160bea4987ef6ed065abb88c6787388269f6d667b27eb27bfcf3f2d1 6deedf0035ec8d9f8f3493b1154f468fd4eedc6bf96bd518d7628f831d7d9f82 bf129fc71d66e0648a54454c95a209df63087dba6c691263bb9c9eb45a99677c 43410d7c467f14cbb5356365aafbac3b7bdc2c65d2e4255458c8058548f63f5a da963fb6a8d901e37b2d0b231d628a92f732a5e7f96d970b91583fb06da779b8 7b56ba3bff3ec07737c8c9e79bfa88426e0eefbf4f103ce25817ee6995ce2074 278c79e4d04c07d1def468a452db4009a593db2e60c22e8dced1d41086e05dcb bf7998bb15ce9e8f9326f9b42a3535ed45b4da628539f77fd9e93374b4daea56 2569dd7d452d1d8c69bbb35fd9364a1cbaf206b85c6c89521456f2c4d4dfd976 7a4ede808dbfc79aab020412043d0aeaa1a99e185c3c0ab15f8fb4dc908c157c 05178bf02a6620f12f7779bd56c8062998a2bad2aad19166c7e41429f62c96fb ac16a2c691023d6d37c842bd75b8c94a12046ca696ee0af3af0a1060c8efa92d 16cc6da075fda3eeeabbcdb520630c762f4c3d861f3035756a5487b0fb453b68 0636ae38236f8fc6b7bfc6a67eaef44e2485950d337672df16cc87bfd8c3c12d 2d22efa9368bb61dd92e20414c4a70a3ff6b566a156510fe4da176ff2168bdbf ae4a5991615390ef8b332843d80cd1ae90e1ff4416f4ef123126f66837876fc1 877cd136a2075721f8237bef96fb55cd568fa3d5a1ee2743af62c18168b34dc2 e6f2fc62e32806d6fc3f44f1d598c4a3a188656d64849bb65581e35446308953 57d16b8945c373a3cc69f2f23ed240c70d7233e4760435ebd30d3c1ff2e0d59a 1c3d9b18541335e581e99de94c5516d5dbf5cac9c1cfc1d7be12c094a28ecdf5 0441dbc04ebde6853627be71424ac5cad6dc8d7c17937d5db1ef765842ebb6a0 d86252c502ff3004ad4f3d951596360b48dc04c2eac49804dde0b34639e1c6b1 e7bf2446a033aa360dfcc8d6cbe2d724b89a7f4f7bac0d2e9ed54de93d007cca 2c4c6088fc590e27289ffc91577d7b6e05870d0594c04bfd606ca0341c1d5abc 775f9e9c68f55b608279cc78050d0dd9cb5f27db052405b7bf244cefa62155c9 46bf1e29509ea598ce2b1dcfa4fd13da7e1741bce39fa7b51215ae6d75fb21c9 e42371b072fdfbadcada12259e6326d80748ab8927e5f9987fa9f75fb7ea5a0b b75b3b064cf215e8f46679081c4a81c2afac835a100cc70f75f5014073c3edff 9300dbaf8b2f71f94752f725603158f968d91b2937c8fdf2acbc09ddfa312a24 ee4e1d99e2fb6dff5f62ac2dc5236adcc17d532db2aa15b55956b5bc71125c82 b69e1f4115780be726ab73c6f6ee3bbfb37162c77a1f561037de43d9b6384f49 091af788380ecfe661d0ce4606582c572dc81be51bfa1faf82d42c1a794e28ed 12930c3a9b0fd1c0baa6357afb0b09826863ef851f8e6d3619db50501eadcf39 f4bf53125e4b482cac311de607dd888eaef9b911450db48712903ee29c0d0f68 f85f47bb1a0dd38ccaffd2bb636187cb2732ef9e8def96caa01ba9aa727b8521 4cb7701a41ba3794e39c119fc6b6ab5db9bda5b0cef6b455b84999978e2fc97b fbf1d2e13b40e0c13215f02dfc27335d375c4b8bf9d18397e1b4740289b39534 8671181e80716ee844dd406c73506a122e7a2c0378b47123b64fe5ffe62d60f1 dcdd92dee46fe01f971c34f046351be81fd5d9f10cd7cb45201dc0cc266f6b8d 30b41e08173368e6ce7772162c163fc745252810bcff2c53931cc1cd69b9a754 2096cc59f2ff7cb480baa22ff4883301eb5b0b7d9caa95ee2b36be3e63b45063 f706569d8413becf87370064c1e7e312052e1d32778da05b851a42ebb9b77cfd 35e277f0f926a29e6ae712654cf364cf8cceb511b34688d990e67bea909e0675 b0698486fbf9462fc07bd05144d90865221695d79fa1850f8dc50e8deb215e01 2a1139d3a1dd404748421814188670ad7e9c73cd549b9c7fea9e7f09897b5afa 6a189af91850f4f730d6e07a205bd3aefddef4de99f3f3b6d8c0a2056e0f2c77 4b4d9c27e6ea88dae17bf99a39c6ee0bcf84edbd1f2d63d62f9e0d76fa2f02d3 628ab32a0037c8a14aa313018352ced3d177966cdfaf14446fda218d72f97781 a5dfcdc667922492a51c92c7d298abcad50a5eaa1034e544379e6d7ef855d9e9 ac2d0eeff3935820e2d83a451345a4cfac6d554970f87daaf9833e9843a098e5 b931cd240492ecb15e4405498e7871aa41a98d682ecbbfaae793c47d3c84b941 53dc72d470207ac1b606b6fc7a1dfed6 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont TeXDict begin 40258431 52099146 1000 600 600 (ex1.revised.soln.dvi) @start %DVIPSBitmapFont: Fa cmr6 6 2 /Fa 2 50 df<13FF000313C0380781E0380F00F0001E137848133CA248131EA400F8131F AD0078131EA2007C133E003C133CA26C13786C13F0380781E03803FFC0C6130018227DA0 1E>48 D<13E01201120712FF12F91201B3A7487EB512C0A212217AA01E>I E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fb cmsy8 8 2 /Fb 2 49 df0 D<137813FE1201A3120313FCA3EA07F8A313F0 A2EA0FE0A313C0121F1380A3EA3F00A3123E127E127CA35AA35A0F227EA413>48 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fc cmtt10 10.95 60 /Fc 60 127 df38 DI<141E147F14FF5BEB03FEEB07FCEB0FF0EB1FE0EB3FC0EB7F80EBFF00 485A5B12035B485A120F5BA2485AA2123F5BA2127F90C7FCA412FEAD127FA47F123FA27F 121FA26C7EA27F12076C7E7F12017F6C7EEB7F80EB3FC0EB1FE0EB0FF0EB07FCEB03FEEB 01FF7F147F141E184771BE30>I<127812FE7E7F6C7E6C7EEA0FF06C7E6C7E6C7E6C7EEB 7F80133F14C0131FEB0FE014F01307A2EB03F8A214FC1301A214FE1300A4147FAD14FEA4 130114FCA2130314F8A2EB07F0A2130F14E0EB1FC0133F1480137FEBFF00485A485A485A 485AEA3FE0485A485A90C7FC5A1278184778BE30>I<143EA2147FAF007FB7FCA2B81280 A36C1600A2C76CC8FCAF143EA229297DAF30>43 DI<007FB612F0A2B712F8A36C15F0A225077B9E30>I<120FEA3FC0EA 7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F000C0C6E8B30>I<16F01501ED03F8A21507A2ED 0FF0A2ED1FE0A2ED3FC0A2ED7F80A2EDFF00A24A5AA25D1403A24A5AA24A5AA24A5AA24A 5AA24A5AA24AC7FCA2495AA25C1303A2495AA2495AA2495AA2495AA2495AA249C8FCA248 5AA25B1203A2485AA2485AA2485AA2485AA2485AA248C9FCA25AA2127CA225477BBE30> I<14FE903807FFC0497F013F13F8497F90B57E48EB83FF4848C6138049137F4848EB3FC0 4848EB1FE049130F001F15F0491307A24848EB03F8A290C712014815FCA400FEEC00FEAD 6C14016C15FCA36D1303003F15F8A26D1307001F15F0A26D130F6C6CEB1FE0A26C6CEB3F C06C6CEB7F806D13FF2601FF8313006CEBFFFE6D5B6D5B010F13E06D5BD900FEC7FC273A 7CB830>II51 DI59 D<16F01503ED07F8151F157FEDFFF014034A13C0021F138091383FFE00ECFFF8495B0107 13C0495BD93FFEC7FC495A3801FFF0485B000F13804890C8FCEA7FFC5BEAFFE05B7FEA7F F87FEA1FFF6C7F000313E06C7F38007FFC6D7E90380FFF806D7F010113F06D7FEC3FFE91 381FFF80020713C06E13F01400ED7FF8151F1507ED03F01500252F7BB230>I<007FB7FC A2B81280A36C16006C5DCBFCA7003FB612FE4881B81280A36C1600A229157DA530>I<12 78127EB4FC13C07FEA7FF813FEEA1FFF6C13C000037F6C13F86C6C7EEB1FFF6D7F010313 E06D7F9038007FFC6E7E91380FFF806E13C0020113F080ED3FF8151F153FEDFFF05C0207 13C04A138091383FFE004A5A903801FFF0495B010F13804990C7FCEB7FFC48485A4813E0 000F5B4890C8FCEA7FFE13F8EAFFE05B90C9FC127E1278252F7BB230>I<147F4A7EA249 7FA4497F14F7A401077F14E3A3010F7FA314C1A2011F7FA490383F80FEA590387F007FA4 498049133F90B6FCA34881A39038FC001F00038149130FA4000781491307A2D87FFFEB7F FFB56CB51280A46C496C130029397DB830>65 D<007FB512F0B612FE6F7E82826C813A03 F8001FF815076F7E1501A26F7EA615015EA24B5A1507ED1FF0ED7FE090B65A5E4BC7FC6F 7E16E0829039F8000FF8ED03FC6F7E1500167FA3EE3F80A6167F1700A25E4B5A1503ED1F FC007FB6FCB75A5E16C05E6C02FCC7FC29387EB730>I<02FF13F00103EBC0F8010F13F1 013F13FD4913FF90B6FC4813C1EC007F4848133F4848131F49130F485A491307121F5B12 3F491303A2127F90C7FC6F5A92C8FC5A5AA892B5FC4A14805CA26C7F6C6D1400ED03F8A2 7F003F1407A27F121F6D130F120F7F6C6C131FA2D803FE133F6C6C137FECC1FF6C90B5FC 7F6D13FB010F13F30103EBC1F0010090C8FC293A7DB830>71 D<007FB6FCB71280A46C15 00260007F0C7FCB3B3A8007FB6FCB71280A46C1500213879B730>73 D<383FFFF8487FB57EA26C5B6C5BD801FCC9FCB3B0EE0F80EE1FC0A9003FB7FC5AB8FCA2 7E6C16802A387EB730>76 D78 D<90383FFFE048B512FC000714FF4815804815C04815E0EBF80001E0133FD87F80EB0FF0 A290C71207A44815F8481403B3A96C1407A26C15F0A36D130FA26D131F6C6CEB3FE001F8 13FF90B6FC6C15C06C15806C1500000114FCD8003F13E0253A7BB830>I<003FB57E4814 F0B612FC15FF6C816C812603F8017F9138003FF0151F6F7E15071503821501A515035E15 07150F4B5A153F4AB45A90B65A5E93C7FC5D8182D9F8007FED3FE0151F150F821507A817 F8EEF1FCA53A3FFF8003FB4801C0EBFFF8B56C7E17F06C496C13E06C49EB7FC0C9EA1F00 2E397FB730>82 D<90390FF803C0D97FFF13E048B512C74814F74814FF5A381FF80F383F E001497E4848137F90C7123F5A48141FA2150FA37EED07C06C91C7FC7F7FEA3FF0EA1FFE EBFFF06C13FF6C14E0000114F86C80011F13FF01031480D9003F13C014019138007FE015 1FED0FF0A2ED07F8A2007C140312FEA56C140716F07F6DEB0FE06D131F01F8EB3FC001FF 13FF91B51280160000FD5CD8FC7F13F8D8F81F5BD878011380253A7BB830>I<003FB712 C04816E0B8FCA43AFE003F800FA8007CED07C0C791C7FCB3B1011FB5FC4980A46D91C7FC 2B387EB730>I<3A3FFF01FFF84801837F02C77FA202835B6C01015B3A01FC007F806D91 C7FC00005C6D5BEB7F01EC81FCEB3F8314C3011F5B14E7010F5B14FF6D5BA26D5BA26D5B A26D90C8FCA4497FA2497FA2815B81EB0FE781EB1FC381EB3F8181EB7F0081497F498000 01143F49800003141F49800007140FD87FFEEB7FFFB590B5128080A25C6C486D13002938 7DB730>88 D<001FB612FC4815FE5AA490C7EA03FCED07F816F0150FED1FE016C0153FED 7F80003E1500C85A4A5A5D14034A5A5D140F4A5A5D143F4A5A92C7FC5C495A5C1303495A 5C130F495A5C133F495A91C8FC5B4848147C4914FE1203485A5B120F485A5B123F485A90 B6FCB7FCA46C15FC27387CB730>90 D<127CA212FEA27EA26C7EA26C7EA26C7EA26C7EA2 6C7EA26C7EA212017FA26C7EA26D7EA26D7EA26D7EA26D7EA26D7EA26D7EA2130180A26D 7EA26E7EA26E7EA26E7EA26E7EA26E7EA26E7EA2140181A26E7EA2ED7F80A2ED3FC0A2ED 1FE0A2ED0FF0A2ED07F8A21503A2ED01F0150025477BBE30>92 D<1307EB1FC0EB7FF049 7E000313FE000FEBFF80003F14E0D87FFD13F039FFF07FF8EBC01FEB800F38FE0003007C EB01F00010EB00401D0E77B730>94 D<007FB612F0A2B712F8A36C15F0A225077B7D30> I97 DII<913801FFE04A7F5CA28080EC0007AAEB03FE90381FFF874913E790B6FC5A5A48 1303380FFC00D81FF0133F49131F485A150F4848130790C7FCA25AA25AA87E6C140FA27F 003F141F6D133F6C7E6D137F390FF801FF2607FE07EBFFC06CB712E06C16F06C14F76D01 C713E0011F010313C0D907FCC8FC2C397DB730>I<49B4FC010713E0011F13F8017F7F90 B57E488048018113803A07FC007FC04848133FD81FE0EB1FE0150F484814F0491307127F 90C7FCED03F85A5AB7FCA516F048C9FC7E7EA27F003FEC01F06DEB03F86C7E6C7E6D1307 D807FEEB1FF03A03FFC07FE06C90B5FC6C15C0013F14806DEBFE00010713F8010013C025 2A7CA830>IIII<14E0EB03F8A2497EA36D5AA2EB00E091C8FCA9381FFFF848 7F5AA27E7EEA0001B3A9003FB612C04815E0B7FCA27E6C15C023397AB830>III<387FFFF8B57EA47EEA0001B3B3A8007FB612 F0B712F8A46C15F025387BB730>I<02FC137E3B7FC3FF01FF80D8FFEF01877F90B500CF 7F15DF92B57E6C010F13872607FE07EB03F801FC13FE9039F803FC01A201F013F8A301E0 13F0B3A23C7FFE0FFF07FF80B548018F13C0A46C486C01071380322881A730>II<49B4FC010F13E0013F13F8497F90B57E0003ECFF8014013A 07FC007FC04848EB3FE0D81FE0EB0FF0A24848EB07F8491303007F15FC90C71201A300FE EC00FEA86C14016C15FCA26D1303003F15F86D13076D130F6C6CEB1FF06C6CEB3FE06D13 7F3A07FF01FFC06C90B512806C15006C6C13FC6D5B010F13E0010190C7FC272A7CA830> II114 D<90381FFC1E48B5129F000714FF5A5A5A387FF007EB800100FEC7FC4880A46C143E007F 91C7FC13E06CB4FC6C13FC6CEBFF806C14E0000114F86C6C7F01037F9038000FFF020013 80007C147F00FEEC1FC0A2150F7EA27F151F6DEB3F806D137F9039FC03FF0090B6FC5D5D 00FC14F0D8F83F13C026780FFEC7FC222A79A830>III<3B3FFFC0 7FFF80486DB512C0B515E0A26C16C06C496C13803B01F80003F000A26D130700005DA26D 130F017E5CA2017F131F6D5CA2EC803F011F91C7FCA26E5A010F137EA2ECE0FE01075BA2 14F101035BA3903801FBF0A314FF6D5BA36E5A6E5A2B277EA630>I<3B3FFFC01FFFE048 6D4813F0B515F8A26C16F06C496C13E0D807E0C7EA3F00A26D5C0003157EA56D14FE0001 5DEC0F80EC1FC0EC3FE0A33A00FC7FF1F8A2147DA2ECFDF9017C5C14F8A3017E13FBA290 393FF07FE0A3ECE03FA2011F5C90390F800F802D277FA630>I<3A3FFF81FFFC4801C37F B580A26C5D6C01815BC648C66CC7FC137FEC80FE90383F81FC90381FC3F8EB0FE3ECE7F0 6DB45A6D5B7F6D5B92C8FC147E147F5C497F81903803F7E0EB07E790380FE3F0ECC1F890 381F81FC90383F80FE90387F007E017E137F01FE6D7E48486D7E267FFF80B5FCB500C114 8014E3A214C16C0180140029277DA630>I<3B3FFFC07FFF80486DB512C0B515E0A26C16 C06C496C13803B01FC0003F000A2000014076D5C137E150F017F5C7F151FD91F805BA214 C0010F49C7FCA214E00107137EA2EB03F0157C15FCEB01F85DA2EB00F9ECFDF0147D147F A26E5AA36E5AA35DA2143F92C8FCA25C147EA2000F13FE486C5AEA3FC1EBC3F81387EB8F F0EBFFE06C5B5C6C90C9FC6C5AEA01F02B3C7EA630>I<001FB612FC4815FE5AA316FC90 C7EA0FF8ED1FF0ED3FE0ED7FC0EDFF80003E491300C7485A4A5A4A5A4A5A4A5A4A5A4A5A 4990C7FC495A495A495A495A495A495A4948133E4890C7127F485A485A485A485A485A48 B7FCB8FCA46C15FE28277DA630>II125 D<017C133848B4137C48EB80FE4813C14813C348EBEFFC 397FEFFFF0D8FF8713E0010713C0486C1380D87C0113003838007C1F0C78B730>I E %EndDVIPSBitmapFont /Fd 107[47 47 24[48 52 1[77 52 63 37 44 44 1[61 58 64 94 31 1[31 31 63 53 34 52 60 49 60 54 13[56 68 77 1[77 1[91 58 70 38 4[63 77 69 8[28 5[56 56 56 56 56 38 28 39 3[36 36 6[28 33[{TeXBase1Encoding ReEncodeFont}48 99.6264 /Utopia-Bold rf /Fe 153[31 102[{TeXBase1Encoding ReEncodeFont}1 99.6264 /Utopia-Italic rf /Ff 171[62 1[64 1[60 80[{ TeXBase1Encoding ReEncodeFont}3 99.6264 /Utopia-Regular rf %DVIPSBitmapFont: Fg cmr10 10.95 12 /Fg 12 109 df<1430147014E0EB01C0EB03801307EB0F00131E133E133C5B13F85B1201 5B1203A2485AA2120F5BA2121F90C7FCA25AA3123E127EA6127C12FCB2127C127EA6123E 123FA37EA27F120FA27F1207A26C7EA212017F12007F13787F133E131E7FEB07801303EB 01C0EB00E014701430145A77C323>40 D<12C07E12707E7E121E7E6C7E7F12036C7E7F12 007F1378137CA27FA2133F7FA21480130FA214C0A3130714E0A6130314F0B214E01307A6 14C0130FA31480A2131F1400A25B133EA25BA2137813F85B12015B485A12075B48C7FC12 1E121C5A5A5A5A145A7BC323>I<1506150FB3A9007FB912E0BA12F0A26C18E0C8000FC9 FCB3A915063C3C7BB447>43 D48 DIII<000614 03D80780131F01F813FE90B5FC5D5D5D15C092C7FC14FCEB3FE090C9FCACEB01FE90380F FF8090383E03E090387001F8496C7E49137E497F90C713800006141FC813C0A216E0150F A316F0A3120C127F7F12FFA416E090C7121F12FC007015C012780038EC3F80123C6CEC7F 00001F14FE6C6C485A6C6C485A3903F80FE0C6B55A013F90C7FCEB07F8243F7CBC2D>53 D56 D<007FB912E0BA12F0A26C18E0CDFCAE007FB912E0BA12F0A26C18E03C167BA147>61 D<167C903903F801FF903A1FFF078F8090397E0FDE1F9038F803F83803F001A23B07E000 FC0600000F6EC7FC49137E001F147FA8000F147E6D13FE00075C6C6C485AA23901F803E0 3903FE0FC026071FFFC8FCEB03F80006CAFC120EA3120FA27F7F6CB512E015FE6C6E7E6C 15E06C810003813A0FC0001FFC48C7EA01FE003E140048157E825A82A46C5D007C153E00 7E157E6C5D6C6C495A6C6C495AD803F0EB0FC0D800FE017FC7FC90383FFFFC010313C029 3D7EA82D>103 D108 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fh cmmi8 8 5 /Fh 5 112 df<13F8121FA21201A25BA21203A25BA21207A25BA2120FEBC7E0EB9FF8EB B83C381FF01EEBE01F13C09038800F80EA3F00A2123EA2007E131FA2127CA2143F00FC14 005AA2147EA2147C14FC5C387801F01303495A383C0F806C48C7FCEA0FFCEA03F0192F7D AD1E>98 DI<1307EB0F80EB1FC0A2EB0F80EB070090 C7FCA9EA01E0EA07F8EA0E3CEA1C3E123812301270EA607EEAE07C12C013FC485A120012 015B12035BA21207EBC04014C0120F13801381381F01801303EB0700EA0F06131EEA07F8 EA01F0122E7EAC18>105 D<131FEA03FFA2EA003FA2133EA2137EA2137CA213FCA25BA2 120115F89038F003FCEC0F0E0003EB1C1EEC387EEBE07014E03807E1C09038E3803849C7 FC13CEEA0FDC13F8A2EBFF80381F9FE0EB83F0EB01F81300481404150C123EA2007E141C 1518007CEBF038ECF83000FC1470EC78E048EB3FC00070EB0F801F2F7DAD25>107 D111 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fi cmr8 8 8 /Fi 8 55 df43 D48 D<130C133C137CEA03FC12FFEAFC7C1200B3B113FE387F FFFEA2172C7AAB23>III<140EA2141E143EA2 147E14FEA2EB01BE1303143E1306130E130C131813381330136013E013C0EA0180120313 001206120E120C5A123812305A12E0B612FCA2C7EA3E00A9147F90381FFFFCA21E2D7EAC 23>I<000CEB0180380FC01F90B512005C5C14F014C0D80C7EC7FC90C8FCA8EB1FC0EB7F F8380DE07C380F801F01001380000E130F000CEB07C0C713E0A2140315F0A4127812FCA4 48EB07E012E0006014C00070130F6C14806CEB1F006C133E380780F83801FFE038007F80 1C2D7DAB23>II E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fj cmmi10 10.95 25 /Fj 25 123 df<121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A0A798919>58 D<121EEA7F8012FF13C0A213E0A3127FEA1E601200A413E013C0A312011380120313005A 120E5A1218123812300B1C798919>I<183818FC1703EF0FF8EF3FE0EFFF80933803FE00 EE0FF8EE3FE0EEFF80DB03FEC7FCED0FF8ED3FE0EDFF80DA03FEC8FCEC0FF8EC3FE0ECFF 80D903FEC9FCEB0FF8EB3FE0EBFF80D803FECAFCEA0FF8EA3FE0EA7F8000FECBFCA2EA7F 80EA3FE0EA0FF8EA03FEC66C7EEB3FE0EB0FF8EB03FE903800FF80EC3FE0EC0FF8EC03FE 913800FF80ED3FE0ED0FF8ED03FE923800FF80EE3FE0EE0FF8EE03FE933800FF80EF3FE0 EF0FF8EF03FC17001838363678B147>I<17075F84171FA2173F177FA217FFA25E5EA24C 6C7EA2EE0E3F161E161C1638A21670A216E0ED01C084ED0380171FED07005D150E5DA25D 157815705D844A5A170F4A5A4AC7FC92B6FC5CA2021CC7120F143C14384A81A24A140713 015C495AA249C8FC5B130E131E4982137C13FED807FFED1FFEB500F00107B512FCA219F8 3E417DC044>65 D<49B712F818FF19E090260001FEC7EA3FF0F007F84B6E7E727E850203 815D1A80A20207167F4B15FFA3020F17004B5C611803021F5E4B4A5A180FF01FE0023F4B 5A4B4A5ADD01FEC7FCEF07F8027FEC7FE092B6C8FC18E092C7EA07F84AEC01FE4A6E7E72 7E727E13014A82181FA213034A82A301075F4A153FA261010F167F4A5E18FF4D90C7FC01 1F5E4A14034D5A013FED1FF04D5A4AECFFC0017F020790C8FCB812FC17F094C9FC413E7D BD45>II<49B712F818FF19C0D9 000190C7EA3FF0F00FF84BEC03FCF000FE197F0203EE3F805DF11FC0A20207EE0FE05D1A F0A2020F16075DA21AF8141F5DA2190F143F5DA21AF0147F4B151FA302FF17E092C9123F A21AC049177F5C1A8019FF010318005C4E5A61010716034A5E4E5A180F010F4C5A4A5E4E 5A4EC7FC011F16FE4A4A5AEF07F8013FED0FE0EF3FC04A49B4C8FC017FEC0FFCB812F017 C004FCC9FC453E7DBD4B>I<49B912C0A3D9000190C71201F0003F4B151F190F1A800203 16075DA314075D1A00A2140F4B1307A24D5B021F020E130E4B92C7FC171EA2023F5C5D17 7CEE01FC4AB55AA3ED800302FF6D5A92C7FCA3495D5C19380401147801034B13704A16F0 93C85AA2010716014A5E180361010F16074A4BC7FCA260011F163E4A157E60013F15014D 5A4A140F017F15FFB95AA260423E7DBD43>I<49B9FCA3D9000190C7120718004B157F19 3F191E14035DA314075D191CA2140F5D17074D133C021F020E13384B1500A2171E023F14 1C4B133C177C17FC027FEB03F892B5FCA39139FF8003F0ED00011600A2495D5CA2160101 035D5CA293C9FC13075CA3130F5CA3131F5CA2133FA25C497EB612F8A3403E7DBD3A>I< 49B56C49B512F81BF0A290C76D9039000FFE004AEE03F0705D735A03DF150302037F038F 5E82190791380787FC030793C7FC1503705C140F91260E01FF140EA26F151E021E80021C 017F141C83193C023C6D7E02381638161F711378147802706D6C1370A2040714F002F080 4A01035C8318010101EC01FF4A5E82188313034A91387FC380A2EF3FC7010716E791C800 1F90C8FC18F718FF4981010E5E1707A2131E011C6F5AA2013C1501137C01FE6F5AEA03FF B512FC187818704D3E7DBD49>78 DI83 D97 DII<163EEEFFC0923803E1E0 923807C0F0ED0F811687ED1F8F160F153FA217E092387E038093C7FCA45DA514015DA301 03B512FCA390260003F0C7FCA314075DA4140F5DA5141F5DA4143F92C8FCA45C147EA414 FE5CA413015CA4495AA35CEA1E07127F5C12FF495AA200FE90C9FCEAF81EEA703EEA7878 EA1FF0EA07C02C537CBF2D>102 DI106 DI<01F8EB0FF0D803FEEB3FFC3A078F80F03E3A0F0F83C01F3B0E07C7800F 80001CEBCF0002FE80003C5B00385B495A127800705BA200F049131F011F5D00005BA216 3F013F92C7FC91C7FC5E167E5B017E14FE5EA201FE0101EB03804914F8A2030313070001 03F013005B170E16E000035E49153C17385F0007913801F1E0496DB45AD801C0023FC7FC 31297EA737>110 D112 D<013EEE0380D9FF800107EB0FE02601C3E090381F801FD8038117F0380701F0 000E153F001E1600D81C03160F003C170700384BEB03E0D87807147E00705B1801D8F00F 14FE4A4914C01200131FDA800114034C1480133F140003031407494A1400137EA26001FE 0107140E495C60A360150F017C5E017E011F14F0705B6D0139495A6D903970F803809028 0FC0E07C0FC7FC903A03FFC01FFC903A007F0007F03C297EA741>119 DI<137C48B4EC03802603C7C0EB0FC0EA0703000F7F000E151F001C1680 13071238163FD8780F150000705BA2D8F01F5C4A137E1200133F91C712FE5E5B137E1501 13FE495CA2150300015D5BA215075EA2150F151F00005D6D133F017C137F017E13FF9039 3F03DF8090380FFF1FEB01FC90C7123F93C7FCA25DD80380137ED80FE013FE001F5C4A5A A24848485A4A5A6CC6485A001C495A001E49C8FC000E137C380781F03803FFC0C648C9FC 2A3B7EA72D>I<02F8130ED903FE131ED90FFF131C49EB803C49EBC0784914F090397E07 F1E09038F800FF49EB1FC049EB07800001EC0F006C48131E90C75A5D5D4A5A4A5A4A5A4A C7FC143E14785C495A495A495A49C8FC011E14E05B5B4913014848EB03C0485AD807F8EB 078048B4131F3A1F87E07F00391E03FFFE486C5B00785CD870005B00F0EB7FC048011FC7 FC27297DA72A>I E %EndDVIPSBitmapFont /Fk 133[43 43 47 71 46 56 31 35 37 1[54 49 56 83 28 2[29 55 45 29 41 53 40 51 51 23[31 26[24 36 45[{ TeXBase1Encoding ReEncodeFont}26 90.9091 /Utopia-Italic rf %DVIPSBitmapFont: Fl cmsy10 10.95 9 /Fl 9 102 df<007FB812F8B912FCA26C17F83604789847>0 D<121EEA7F80A2EAFFC0A4 EA7F80A2EA1E000A0A799B19>I<0060166000F816F06C1501007E15036CED07E06C6CEC 0FC06C6CEC1F806C6CEC3F006C6C147E6C6C5C6C6C495A017E495A6D495A6D6C485A6D6C 485A6D6C48C7FC903803F07E6D6C5A903800FDF8EC7FF06E5A6E5AA24A7E4A7EECFDF890 3801F8FC903803F07E49487E49486C7E49486C7E49486C7E017E6D7E496D7E48486D7E48 48147E4848804848EC1F804848EC0FC048C8EA07E0007EED03F048150148150000601660 2C2C73AC47>I14 D I<1818187CEF01FCEF07F8EF1FF0EF7FC0933801FF00EE07FCEE1FF0EE7FC04B48C7FCED 07FCED1FF0ED7FC04A48C8FCEC07FCEC1FF0EC7FC04948C9FCEB07FCEB1FF0EB7FC04848 CAFCEA07FCEA1FF0EA7FC048CBFC5AEA7F80EA3FE0EA0FF8EA03FEC66C7EEB3FE0EB0FF8 EB03FE903800FF80EC3FE0EC0FF8EC03FE913800FF80ED3FE0ED0FF8ED03FE923800FF80 EE3FE0EE0FF8EE03FE933800FF80EF3FE0EF0FF8EF03FC170018381800AE007FB812F8B9 12FCA26C17F8364878B947>20 D<126012F812FEEA7F80EA3FE0EA0FF8EA03FEC66C7EEB 3FE0EB0FF8EB03FE903800FF80EC3FE0EC0FF8EC03FE913800FF80ED3FE0ED0FF8ED03FE 923800FF80EE3FE0EE0FF8EE03FE933800FF80EF3FE0EF0FF8EF03FC1701EF07F8EF1FF0 EF7FC0933801FF00EE07FCEE1FF0EE7FC04B48C7FCED07FCED1FF0ED7FC04A48C8FCEC07 FCEC1FF0EC7FC04948C9FCEB07FCEB1FF0EB7FC04848CAFCEA07FCEA1FF0EA7FC048CBFC 12FC1270CCFCAE007FB812F8B912FCA26C17F8364878B947>I<387FFFFCB5FCA300F0C7 FCB3B3B3B3AD1260165A71C328>100 DI E %EndDVIPSBitmapFont /Fm 107[42 42 24[44 46 44 70 46 55 31 40 35 54 55 52 56 84 25 48 25 26 55 47 29 47 54 45 54 48 3[30 1[30 1[53 57 85 58 72 56 49 59 69 55 69 71 86 52 60 32 32 73 67 53 55 71 62 59 58 1[35 1[52 2[24 48 48 48 48 48 48 48 48 48 48 42 24 36 24 52 1[32 32 25 35[55 55 2[{ TeXBase1Encoding ReEncodeFont}78 90.9091 /Utopia-Regular rf /Fn 105[45 30[70 47 57 34 41 40 2[53 58 1[28 2[29 2[31 47 55 45 55 49 9[85 1[71 57 51 62 2[70 67 83 53 2[35 73 1[54 57 71 63 62 59 6[25 51 51 51 51 51 51 51 51 51 51 1[25 4[33 33 40[{TeXBase1Encoding ReEncodeFont}48 90.9091 /Utopia-Bold rf /Fo 135[108 2[130 76 92 3[121 132 196 64 2[65 7[112 13[116 13[130 19[116 49[{ TeXBase1Encoding ReEncodeFont}13 206.559 /Utopia-Bold rf /Fp 134[60 58 1[60 72 41 52 47 1[73 69 74 110 33 2[35 1[62 1[61 71 59 71 63 17[91 1[113 5[88 69 72 10[32 2[63 1[63 63 1[63 63 63 1[32 47 32 44[{TeXBase1Encoding ReEncodeFont}34 119.552 /Utopia-Regular rf /Fq 133[58 4[75 44 1[53 1[74 70 76 113 3[38 1[64 1[62 3[65 13[67 3[92 1[110 9[82 8[33 6[67 1[67 49[{TeXBase1Encoding ReEncodeFont}19 119.552 /Utopia-Bold rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin %%EndSetup %%Page: 1 1 1 0 bop 982 119 a Fq(CMSC)25 b(311:)32 b(C)o(omputer)25 b(O)o(r)q(ganization)1728 292 y Fp(F)-6 b(all)28 b(2002)1109 620 y Fo(Exam)43 b(1)g(Solutions)910 780 y Fp(E)o(xam)27 b(G)o(iv)o(en:)33 b(M)l(onday)-10 b(,)28 b(O)o(ctober)g(21,)f(2002)90 1073 y Fn(I)n(nstr)q(uctions:)46 b Fm(This)32 b(is)g(a)f(75)g(minute)i (exam.)57 b(This)32 b(exam)f(is)h(closed)g(book)g(and)f(closed)i(notes) n(.)58 b(N)m(o)90 1186 y(calculators)21 b(ar)n(e)g(per)q(mitted)g(on)g (the)g(exam.)k(All)c(computations)h(should)f(be)g(done)g(on)g(paper)-5 b(.)90 1346 y(This)21 b(is)g(a)f Fp(140)h Fm(point)h(exam.)j(The)c (exam)f(consists)h(of)g(4)f(par)q(ts:)226 1550 y Fl(\017)46 b Fm(Q)o(uiz)22 b(1:)j(D)o(ata)20 b(R)n(epr)n(esentation)i(\(40)e (points\))i(pass:)j(28)226 1725 y Fl(\017)46 b Fm(Q)o(uiz)22 b(2:)j(C)o(ombinational)e(Logic)f(\(40)e(points\))i(pass:)i(28)226 1900 y Fl(\017)46 b Fm(Q)o(uiz)22 b(3:)j(Lo)m(w)c(level)f(C)h (functions/CPU)g(\(20)g(points\))g(pass:)k(14)226 2075 y Fl(\017)46 b Fm(Challenge)21 b(\(\223)n(D)o(r)o(ool)h(K)q(itty\224\)) f(S)o(ection)g(\(40)g(points\))90 2278 y(SEE)g(P)-5 b(A)n(GE)19 b(2)i(for)g(USEFUL)f(F)-5 b(A)n(CT)o(S)20 b(and)h(C)o(ONVENTIONS.)p 898 2409 2462 4 v 897 2519 4 113 v 3358 2519 V 602 2598 a(N)m(ame)p 897 2631 V 3358 2631 V 897 2744 V 3358 2744 V 898 2748 2462 4 v 898 2850 V 897 2960 4 113 v 3358 2960 V 134 3039 a(SID)f(\(Last)f(6)i(digits\))p 897 3073 V 3358 3073 V 897 3186 V 3358 3186 V 898 3189 2462 4 v 898 3245 V 897 3354 4 113 v 3358 3354 V 610 3433 a(Email)p 897 3467 V 3358 3467 V 897 3580 V 3358 3580 V 898 3583 2462 4 v 90 3700 a Fn(HONOR)e(ST)-5 b(A)g(TEMENT)90 3861 y Fm(The)28 b(follo)m(wing)i(is)e(an)g(honor)h(statement.)47 b(This)28 b(is)g(NO)m(T)h(the)f(same)e(as)h(the)h(\223honor)h(pledge)-5 b(\224)-12 b(.)47 b(I)n(t)28 b(only)90 3973 y(states)c(y)o(our)j Fk(awar)n(eness)f Fm(of)g(the)f(follo)m(wing)j(statement.)39 b(I)n(t)24 b(is)i(the)f(equiv)o(alent)g(of)h(saying)f(\223)n(I)g(kno)m (w)g(it)h(is)90 4086 y(against)f(the)h(law)f(to)h(dr)q(ive)f(faster)g (than)g(the)h(speed)f(limit)n(\224)h(instead)g(of)g(saying)f(\223)n(I)g (pledge)h(not)g(to)g(dr)q(ive)90 4199 y(faster)20 b(than)h(the)f(speed) h(limit)n(\224)-12 b(.)317 4403 y Fk(I)18 b(am)f(awar)n(e)g(that)g (giving)h(or)f(r)n(eceiving)g(unauthoriz)o(ed)h(assistance)h(or)d (using)i(unauthoriz)o(ed)317 4516 y(aids)j(on)g(this)g(e)o(xam)f(is)h (consider)n(ed)g(a)f(violation)g(of)g(academic)h(integrity)-6 b(.)90 4719 y Fm(P)o(lease)27 b(sign)i(belo)m(w)g(to)g(indicate)g(that) f(y)o(ou)h(READ)e(and)i(UNDERST)-6 b(AND)27 b(what)h(the)g(statement)g (says)n(.)90 4832 y(Y)-8 b(our)22 b(exam)d(will)j(not)f(be)g(r)n(etur)q (ned)g(to)h(y)o(ou,)f(unless)f(this)h(is)g(signed.)p 898 4912 V 897 5022 4 113 v 3358 5022 V 457 5101 a(S)n(ignatur)n(e)p 897 5135 V 3358 5135 V 897 5248 V 3358 5248 V 898 5251 2462 4 v 1941 5497 a(1)p eop %%Page: 2 2 2 1 bop 90 -91 a Fn(C)o(onv)o(entions:)226 72 y Fl(\017)46 b Fm(Cir)n(cle)22 b(data/contr)o(ol)h(inputs)e(fr)o(om)h(outside)f (world.)27 b(SQ)m(U)l(ARE)21 b(outputs)h(to)f(outside)g(world.)226 250 y Fl(\017)46 b Fm(S)o(elect)25 b(\(contr)o(ol\))h(lines)f(ar)n(e)f (wr)q(itten)h(using)f Fj(c)p Fm(.)37 b(F)m(or)25 b(example)n(,)g(a)e(3) i(bit)g(contr)o(ol)i(lines)d(ar)n(e)g(wr)q(itten)317 363 y Fj(c)356 377 y Fi(2)396 363 y Fj(c)435 377 y Fi(1)475 363 y Fj(c)514 377 y Fi(0)554 363 y Fm(.)h Fj(c)642 377 y Fi(2)702 363 y Fm(is)c(the)f(most)h(signi\002cant)h(bit)g(and)f Fj(c)1973 377 y Fi(0)2033 363 y Fm(is)f(the)h(least.)226 542 y Fl(\017)46 b Fm(D)o(ata)20 b(input)h(lines)f(ar)n(e)f(wr)q(itten) i(using)f Fj(x)p Fm(.)26 b(F)m(or)20 b(example)n(,)f(a)h(3)g(bit)g (input)h(lines)g(ar)n(e)e(wr)q(itten)i Fj(x)3594 556 y Fi(2)3633 542 y Fj(x)3685 556 y Fi(1)3725 542 y Fj(x)3777 556 y Fi(0)3816 542 y Fm(.)317 655 y Fj(x)369 669 y Fi(2)432 655 y Fm(is)j(the)f(most)h(signi\002cant)h(bit)g(and)f Fj(x)1734 669 y Fi(0)1796 655 y Fm(is)g(the)g(least.)34 b(\(Assuming)23 b(the)h(input)g(is)g(a)f(binar)r(y)h(num-)317 768 y(ber\).)226 947 y Fl(\017)46 b Fm(D)o(ata)32 b(output)i(lines)e (ar)n(e)g(wr)q(itten)h(using)g Fj(z)t Fm(.)61 b(F)m(or)32 b(example)n(,)j(a)d(3)g(bit)h(output)h(lines)e(ar)n(e)g(wr)q(itten)317 1060 y Fj(z)359 1074 y Fi(2)399 1060 y Fj(z)441 1074 y Fi(1)481 1060 y Fj(z)523 1074 y Fi(0)562 1060 y Fm(.)26 b Fj(z)654 1074 y Fi(2)713 1060 y Fm(is)20 b(the)g(most)g (signi\002cant)h(bit)g(and)f Fj(z)1982 1074 y Fi(0)2041 1060 y Fm(is)g(the)g(least.)25 b(\(Assuming)20 b(the)f(output)j(is)d (binar)r(y\).)226 1238 y Fl(\017)46 b Fm(F)o(ull)25 b(adders)f(will)h (use)f Fj(A)p Fm(,)h Fj(B)5 b Fm(,)24 b Fj(C)1442 1252 y Fh(i)1471 1238 y Fm(,)h Fj(C)1585 1252 y Fh(o)1623 1238 y Fm(,)g(and)f Fj(S)29 b Fm(inside)c(the)g(chip)g(to)f(r)n(epr)n (esent)h(the)f(two)h(bits)g(being)317 1351 y(added,)c(the)g(carr)r(y)f (in,)i(the)e(carr)r(y)h(out,)g(and)g(the)f(sum,)g(r)n(espectively)-9 b(.)226 1530 y Fl(\017)46 b Fm(I)n(nside)25 b(the)f(chip)l(,)i(use)d (capital)i(letters)n(.)36 b(O)o(utside)25 b(the)f(chip)h(use)e(lo)m(w)o (er)n(case)h(letters)h(to)f(r)n(epr)n(esent)317 1643 y(inputs)e(coming)g(fr)o(om)f(outside)h(world,)g(and)e(outputs)i(going) g(to)f(outside)h(world.)90 1876 y Fn(U)l(seful)e(facts:)226 2039 y Fl(\017)46 b Fg(1000)27 b(0000)704 2053 y Fi(2)766 2039 y Fm(=)20 b(128)h(and)g Fg(1111)27 b(1111)1569 2053 y Fi(2)1631 2039 y Fm(=)20 b(255)226 2217 y Fl(\017)46 b Fm(The)27 b(follo)m(wing)i(ar)n(e)d(gates:)37 b(AND)-5 b(,)26 b(OR,)g(NO)m(T)-10 b(,)27 b(X)m(OR,)f(XNOR,)g(NAND)-5 b(,)26 b(and)h(NOR.)f(U)l(nless)g(other)n(-)317 2330 y(wise)20 b(speci\002ed,)i(y)o(ou)f(may)f(assume)f(that)i(each)f(gate)g (\(ex)o(cept)g(NO)m(T)5 b(\))22 b(can)e(have)f(in\002nite)k(fan-in.)226 2509 y Fl(\017)46 b Fm(The)30 b(follo)m(wing)j(ar)n(e)c(par)q(ts:)44 b(any)30 b(gates)o(,)i(multiplexer)f(\(MUX\),)e(demultiplexer)j (\(DEMUX\),)c(en-)317 2622 y(coder)-5 b(,)31 b(decoder)-5 b(,)32 b(half)c(adder)h(\(HA\),)f(full)h(adder)g(\(F)-5 b(A\),)27 b Fj(k)s Fm(-bit)j(r)q(ipple)g(carr)r(y)e(adder)-5 b(,)31 b(pr)q(ior)q(ity)f(en-)317 2735 y(coder)-5 b(.)426 2914 y Fn(\226)46 b Fm(HA)20 b(uses)g(inputs:)26 b Fj(A)p Fm(,)21 b Fj(B)k Fm(and)20 b(outputs:)27 b Fj(C)g Fm(\(carr)r(y)20 b(out\),)h Fj(S)26 b Fm(\(sum\).)426 3051 y Fn(\226)46 b Fm(F)-5 b(A)20 b(uses)f(inputs:)27 b Fj(A)p Fm(,)20 b Fj(B)5 b Fm(,)21 b Fj(C)1454 3065 y Fh(i)1502 3051 y Fm(\(carr)r(y)f(in\))h(and)g(outputs:)27 b Fj(C)2514 3065 y Fh(o)2572 3051 y Fm(\(carr)r(y)21 b(out\),)g Fj(S)k Fm(\(sum\).)90 3284 y Fp(G)o(r)o(ading)p 1181 3444 1569 4 v 1179 3727 4 283 v 1467 3642 a Fm(P)m(ar)q(t)p 1917 3727 V 571 w(P)m(oints)p 2747 3727 V 1181 3730 1569 4 v 1181 3747 V 1179 4029 4 283 v 1419 3944 a(Q)o(uiz)c(1)p 1917 4029 V 2747 4029 V 1181 4032 1569 4 v 1179 4314 4 283 v 1419 4230 a(Q)o(uiz)g(2)p 1917 4314 V 2747 4314 V 1181 4318 1569 4 v 1179 4600 4 283 v 1419 4515 a(Q)o(uiz)g(3)p 1917 4600 V 2747 4600 V 1181 4603 1569 4 v 1179 4886 4 283 v 1344 4801 a(Challenge)p 1917 4886 V 2747 4886 V 1181 4889 1569 4 v 1179 5171 4 283 v 1448 5087 a(T)-9 b(otal)p 1917 5171 V 2747 5171 V 1181 5175 1569 4 v 1941 5497 a(2)p eop %%Page: 3 3 3 2 bop 1252 119 a Fm(CMSC)21 b(311)g(C)o(omputer)h(Or)o(ganization) 1785 232 y(F)l(all)e(2002)1849 345 y Ff(R)m(T)p Fe(f)f Ff(P)p 462 527 3007 4 v 460 810 4 283 v 611 725 a Fm(N)m(ame)p 1005 810 V 3467 810 V 462 813 3007 4 v 460 1095 4 283 v 512 1011 a(S)n(tudent)i(ID)p 1005 1095 V 3467 1095 V 462 1099 3007 4 v 90 1373 a Fd(Q)o(uiz)g(1)g(\(D)o(ata)g(R)n(epr)n (esentation\):)26 b(\223..)g(and)21 b(the)f(bases)i(ar)n(e)f(loaded)n (\224)g(\(40)g(points\))90 1590 y Fn(1.1)46 b Fm(\(2)20 b(pts\))h(H)m(er)n(e)-5 b(')-10 b(s)19 b(a)h(declar)o(ation)i(in)g(a)e (C)g(pr)o(ogr)o(am:)459 1703 y Fc(int)47 b(x)h(;)317 1816 y Fm(What)n(')-10 b(s)21 b(the)g(inter)q(nal)h(data)e(r)n(epr)n (esentation)i(for)f Fc(x)p Fm(?)317 1966 y Fn(Answ)o(er)r(:)j Fm(32)d(bit)g(two)-6 b(')c(s)21 b(complement.)90 2154 y Fn(1.2)46 b Fm(\(2)20 b(pts\))h(H)m(er)n(e)-5 b(')-10 b(s)19 b(a)h(declar)o(ation)i(in)g(a)e(C)g(pr)o(ogr)o(am:)459 2267 y Fc(float)47 b(y)g(;)317 2380 y Fm(What)n(')-10 b(s)24 b(the)e(inter)q(nal)i(data)e(r)n(epr)n(esentation)j(for)e Fc(y)p Fm(?)32 b(\(H)n(int:)f(ther)n(e)-5 b(')-10 b(s)22 b(a)h Fc(double)e Fm(type)i(that)g(stor)n(es)f(a)317 2493 y(longer)g(version)f(of)g(a)f Fc(float)p Fm(\))317 2643 y Fn(Answ)o(er)r(:)k Fm(IEEE)c(754)h(single)h(pr)n(ecision)g (\003oating)g(point.)90 2830 y Fn(1.3)46 b Fm(\(2)20 b(pts\))h(H)m(er)n(e)-5 b(')-10 b(s)19 b(a)h(declar)o(ation)i(in)g(a)e (C)g(pr)o(ogr)o(am:)459 2943 y Fc(char)47 b(ch)g(;)317 3056 y Fm(What)n(')-10 b(s)24 b(the)g(inter)q(nal)h(data)e(r)n(epr)n (esentation)i(for)f Fc(ch)f Fm(on)h(most)g(computers)g(\(e)n(.g.,)h(DC) e(class)g(clus-)317 3169 y(ter\)?)317 3319 y Fn(Answ)o(er)r(:)h Fm(ASCII.)1941 5497 y(3)p eop %%Page: 4 4 4 3 bop 90 119 a Fn(1.4)46 b Fm(\(3)27 b(pts\))h(G)o(iven)f(a)h Fj(k)s Fm(-bit)g(bitstr)q(ing)i(\(wher)n(e)e Fj(k)43 b Fl(\025)d Fg(1)p Fm(\),)30 b(ho)m(w)f(many)e(differ)n(ent)i(bit)g (str)q(ings)g(ar)n(e)e(ther)n(e?)317 232 y(W)l(r)q(ite)22 b(a)e(for)q(mula)h(for)g(this)g(\(hint:)26 b(use)20 b Fj(k)s Fm(\).)317 382 y Fn(Answ)o(er)r(:)k Fg(2)727 349 y Fh(k)790 382 y Fm(differ)n(ent)e(bitstr)q(ing)h(patter)q(ns)n(.)90 570 y Fn(1.5)46 b Fm(\(3)25 b(pts\))h(S)n(uppose)g(y)o(ou)g(ar)n(e)g (given)f(a)g(bitstr)q(ing)j(with)e Fk(e)o(xactly)j Fj(k)g Fm(1')-10 b(s)o(,)27 b(and)f(y)o(ou)m(')-6 b(r)n(e)27 b(told)g(the)e(number)317 683 y(is)e(an)f Fp(unsigned)i Fm(integer)-5 b(.)31 b(W)l(r)q(ite)24 b(a)e(for)q(mula)g(for)i(the)e (base)g(10)g(\(decimal\))h Fp(v)o(alue)h Fm(of)e(this)h(bit-)317 796 y(str)q(ing.)j(Y)-8 b(ou)18 b(can)f(assume)f Fj(k)29 b Fl(\025)c Fg(2)p Fm(.)g(\(Don)-7 b(')g(t)18 b(use)f(summations)o(,)h (unless)g(y)o(ou)g(can)-7 b(')g(t)18 b(think)g(of)g(another)317 908 y(way\).)317 1059 y Fn(Answ)o(er)r(:)24 b Fg(2)727 1026 y Fh(k)790 1059 y Fl(\000)c Fg(1)317 1209 y Fm(R)n(ecall)28 b Fg(2)637 1176 y Fh(k)708 1209 y Fm(is)g(1,)i(follo)m(w)o(ed)g(b)n(y)e Fj(k)j Fm(z)o(er)o(oes)n(.)48 b(I)o(f)29 b(y)o(ou)f(subtr)o(act)h(1,)h (y)o(ou)f(get)f Fj(k)j Fm(1')-10 b(s)n(.)48 b(This)29 b(is)f(similar)g(to)317 1322 y(having)21 b(an)g(odometer)g(that)n(')-10 b(s)21 b(1)g(follo)m(w)o(ed)i(b)n(y)d Fj(k)k Fm(z)o(er)o(oes)n(.)i(I)o (f)21 b(y)o(ou)g(subtr)o(act)g(1,)g(y)o(ou)g(get)g Fj(k)j Fm(9')-10 b(s)n(.)90 1510 y Fn(1.6)46 b Fm(\(3)25 b(pts\))h(S)n(uppose) g(y)o(ou)g(ar)n(e)g(given)f(a)g(bitstr)q(ing)j(with)e Fk(e)o(xactly)j Fj(k)g Fm(1')-10 b(s)o(,)27 b(and)f(y)o(ou)m(')-6 b(r)n(e)27 b(told)g(the)e(number)317 1622 y(is)c(a)g Fp(signed)h Fm(integer)-5 b(.)28 b(W)l(r)q(ite)22 b(a)e(for)q(mula)i (for)g(the)f(base)f(10)h(\(decimal\))g Fp(v)o(alue)i Fm(of)e(this)h(bitstr)q(ing.)317 1735 y(Y)-8 b(ou)22 b(can)e(assume)f Fj(k)28 b Fl(\025)d Fg(2)p Fm(.)h(S)n(tate)20 b(ANY)h(ASSUMPTIONS)f(needed)h(for)g(the)g(for)q(mula)g(to)g(be)g(tr)q (ue)n(.)317 1886 y Fn(Answ)o(er)r(:)j Fm(-1,)c(assuming)h(the)f(r)n (epr)n(esentation)i(is)f(two)-6 b(')c(s)20 b(complement.)317 2036 y(\(C)o(ould)i(also)e(say)-8 b(,)20 b(0,)h(if)g(it)n(')-10 b(s)21 b(one)-5 b(')-10 b(s)21 b(complement,)g(or)h Fl(\000)p Fg(\(2)2330 2003 y Fh(k)r Fb(\000)p Fi(1)2483 2036 y Fl(\000)e Fg(1\))h Fm(if)g(it)n(')-10 b(s)22 b(signed)f(magnitude\).) 317 2186 y(M)o(ake)e(sur)n(e)i(to)g(state)f(which)h(signed)g(number)g (r)n(epr)n(esentation)i(y)o(ou)e(ar)n(e)f(using.)90 2374 y Fn(1.7)46 b Fm(\(4)21 b(pts\))g(W)l(r)q(ite)h Fg(+5)902 2388 y Fi(10)998 2374 y Fm(in)f(the)g(follo)m(wing)j(r)n(epr)n (esentations)f Fp(using)28 b(4)g(bits)p Fm(.)f(I)o(f)22 b(it)f(is)g(not)h(possible)g(to)317 2487 y(wr)q(ite)f(it)g(in)g(the)g (r)n(epr)n(esentation,)h(wr)q(ite)f(N/A.)317 2637 y Fn(Answ)o(er)r(:)27 b Fm(T)-9 b(o)24 b(conver)q(t)e(a)g(v)o(alue)g(fr)o(om)i(base)e(10)g (to)h(ex)o(cess)f(r)n(epr)n(esentation,)i(add)f(the)f(ex)o(cess)g (\(i.e)n(.,)317 2750 y(the)27 b(bias\))g(to)g(the)g(v)o(alue)n(,)h(and) f(conver)q(t)g(it)h(to)f(an)g(unsigned)g(binar)r(y)h(number)-5 b(.)44 b(F)m(or)27 b(example)n(,)h(to)317 2863 y(conver)q(t)23 b(5)g(to)g(ex)o(cess)e(8,)i(add)g(8)g(to)g(5)g(to)g(get)g(13,)g(and)g (conver)q(t)f(13)h(to)g(unsigned)h(binar)r(y)f(\(which)g(is)317 2976 y(1101\).)317 3126 y(The)f(most)g(common)g(err)o(or)h(is)f(to)g (\003ip)h(bits)f(for)g(one)-5 b(')-10 b(s)21 b(complement)i(and)e (\003ip)i(bits)f(and)g(add)g(1)f(for)317 3239 y(two)-6 b(')c(s)24 b(complement.)38 b(Y)-8 b(ou)24 b(only)i(\003ip)f(bits)o(,)h (etc)o(.)36 b(if)25 b(the)f(number)h(is)f(negative)n(.)36 b(5)24 b(is)g(not)h(negative)n(,)317 3352 y(so)c(y)o(ou)g(just)g(wr)q (ite)g(it)g(as)f(if)h(it)g(w)o(er)n(e)g(unsigned.)p 1157 3522 1843 4 v 1155 3804 4 283 v 1207 3719 a(S)n(igned)h(M)o(agnitude)p 2004 3804 V 451 w(0101)p 2998 3804 V 1157 3807 1843 4 v 1155 4090 4 283 v 1248 4005 a(1')-10 b(s)21 b(C)o(omplement)p 2004 4090 V 492 w(0101)p 2998 4090 V 1157 4093 1843 4 v 1155 4375 4 283 v 1248 4291 a(2')-10 b(s)21 b(C)o(omplement)p 2004 4375 V 492 w(0101)p 2998 4375 V 1157 4379 1843 4 v 1155 4661 4 283 v 1413 4576 a(E)o(x)o(cess)f(8)p 2004 4661 V 656 w(1101)p 2998 4661 V 1157 4664 1843 4 v 1155 4947 4 283 v 1379 4862 a(E)o(x)o(cess)g Fl(\000)p Fg(3)p 2004 4947 V 622 w Fm(0010)p 2998 4947 V 1157 4950 1843 4 v 1941 5497 a(4)p eop %%Page: 5 5 5 4 bop 90 119 a Fn(1.8)46 b Fm(\(4)21 b(pts\))g(W)l(r)q(ite)h Fl(\000)p Fg(8)902 133 y Fi(10)998 119 y Fm(in)f(the)g(follo)m(wing)j (r)n(epr)n(esentations)f Fp(using)28 b(4)g(bits)p Fm(.)f(I)o(f)22 b(it)f(is)g(not)h(possible)g(to)317 232 y(wr)q(ite)f(it)g(in)g(the)g(r) n(epr)n(esentation,)h(wr)q(ite)f(N/A.)317 382 y Fn(Answ)o(er)r(:)29 b Fm(N)m(otice)24 b(it)n(')-10 b(s)24 b(not)f(possible)h(to)g(r)n(epr)n (esent)g(-8)e(in)i(all)f(the)g(r)n(epr)n(esentations)i(\(using)e(4)g (bits)o(,)317 495 y(that)d(is\))f(ex)o(cept)g(in)h(2')-10 b(s)20 b(complement)g(and)f(ex)o(cess)f(8.)25 b(F)m(or)20 b(one)-5 b(')-10 b(s)19 b(complement)h(and)g(signed)g(mag-)317 608 y(nitude)n(,)i(the)f(r)o(ange)g(of)f(v)o(alues)h(is)f(betw)o(een)h (-7)f(and)h(7,)g(inclusive)n(.)317 758 y(F)m(or)i(ex)o(cess)d(8,)j (adding)g(8)g(to)f(-8)g(r)n(esults)g(in)h(0.)30 b(C)o(onver)q(t)23 b(0,)f(as)g(if)g(it)h(w)o(er)n(e)f(unsigned)h(binar)r(y)g(r)n(esults) 317 871 y(in)e(0000.)317 1021 y(F)m(or)h(ex)o(cess)f(-3,)h(add)g(-3)g (to)g(-8)g(to)h(get)f(-11.)29 b(S)n(ince)23 b(the)f(number)h(is)e (negative)n(,)i(y)o(ou)f(ar)n(e)g(outside)h(the)317 1134 y(r)o(ange)17 b(of)h(v)o(alid)g(v)o(alues)e(for)i(ex)o(cess)d(-3)i (\(after)g(adding,)i(the)e(ex)o(cess)o(,)f(the)h(v)o(alue)g(should)h (lie)g(betw)o(een)317 1247 y(0000)j(and)g(1111,)g(or)h(0)e(and)h(15,)g (and)f(-11)h(is)f(outside)i(that)f(r)o(ange\).)p 1168 1417 1821 4 v 1166 1700 4 283 v 1218 1615 a(S)n(igned)h(M)o(agnitude)p 2015 1700 V 452 w(N/A)p 2987 1700 V 1168 1703 1821 4 v 1166 1985 4 283 v 1259 1900 a(1')-10 b(s)21 b(C)o(omplement)p 2015 1985 V 493 w(N/A)p 2987 1985 V 1168 1988 1821 4 v 1166 2271 4 283 v 1259 2186 a(2')-10 b(s)21 b(C)o(omplement)p 2015 2271 V 481 w(1000)p 2987 2271 V 1168 2274 1821 4 v 1166 2556 4 283 v 1424 2472 a(E)o(x)o(cess)f(8)p 2015 2556 V 645 w(0000)p 2987 2556 V 1168 2560 1821 4 v 1166 2842 4 283 v 1390 2757 a(E)o(x)o(cess)g Fl(\000)p Fg(3)p 2015 2842 V 623 w Fm(N/A)p 2987 2842 V 1168 2845 1821 4 v 90 3058 a Fn(1.9)46 b Fm(\(3)20 b(pts\))h(D)o(e\002ne)g(o)m(ver)q (\003o)m(w)-7 b(.)26 b(That)21 b(is)o(,)f(explain)i(what)e(o)m(ver)q (\003o)m(w)h(MEANS,)f(not)i(ho)m(w)f(to)g(detect)g(it.)317 3208 y Fn(Answ)o(er)r(:)k Fm(Over)q(\003o)m(w)d(occurs)f(when)g(the)h (r)n(esult)f(of)h(an)f(oper)o(ation)i(pr)o(oduces)f(a)f(v)o(alue)g (that)g(is)h(out-)317 3321 y(side)f(the)g(r)o(ange)f(of)h(the)g(r)n (epr)n(esentation.)317 3472 y(F)m(or)31 b(example)n(,)h(a)e(carr)r(y)g (out)h(of)g(1)f(does)g(not)i(de\002ne)e(o)m(ver)q(\003o)m(w)-7 b(.)55 b(I)n(t)30 b(is)h(used)f(to)g(detect)h(o)m(ver)q(\003o)m(w)317 3585 y Fk(when)21 b(adding)g(two)f Fj(k)s Fk(-bit)f(integer)i(v)o (alues)g(in)f(unsigned)h(r)n(epr)n(esentation)p Fm(.)j(This)d(is)f(a)f (way)h(to)g Fk(detect)317 3697 y Fm(o)m(ver)q(\003o)m(w)i(\(for)f(the)f (r)n(epr)n(esentation\),)i(but)g(is)e(not)i(a)e(de\002nition)j(what)d (o)m(ver)q(\003o)m(w)h(is)n(.)1941 5497 y(5)p eop %%Page: 6 6 6 5 bop 90 119 a Fn(1.10)46 b Fm(\(4)19 b(pts\))g(S)o(omeone)h(pr)o(o)m (vides)i(y)o(ou)e(the)g(follo)m(wing)i(function)f(which)f(does)g(ar)q (ithmetic)g(with)g Fc(float)317 232 y Fm(v)o(alues)e(\(32)g(bits\).)25 b(This)18 b(function)i(per)q(for)q(ms)e(add,)g(subtr)o(act,)h(and)f (multiply)i(oper)o(ations)f(in)f(some)317 345 y(sequence)f(with)h(the)f (ar)o(guments)o(,)i(though)g(y)o(ou)g(don)-7 b(')g(t)18 b(kno)m(w)g(in)h(which)f(or)n(der)-5 b(.)25 b(I)n(t)17 b(r)n(etur)q(ns)h(a)f Fc(float)317 458 y Fm(v)o(alue)n(.)412 571 y Fc(float)46 b(doStuff\()g(float)g(x,)h(float)g(y)g(\))g(;)317 721 y Fm(W)-6 b(e)19 b(want)f(to)h(use)f(this)h(function)h(with)f Fc(int)f Fm(v)o(alues)o(,)g(and)h(to)g(do)g(so)g(b)n(y)f(casting)h(fr)o (om)h Fc(int)d Fm(to)i Fc(float)p Fm(.)317 834 y(F)m(or)i(example)n(,) 508 964 y Fc(int)47 b(j)h(=)f(3,)g(k)h(=)f(4)h(;)508 1077 y(int)f(result)604 1190 y(=)g(static_cast\()c(doStuff\()j (static_cast\()c(j)48 b(\),)1988 1303 y(static_cast\()42 b(k)48 b(\))f(\))h(\))f(;)317 1433 y Fm(Does)27 b(casting)i(to)f (\003oat)g(and)g(back)f(to)h(int)h(cause)e(any)g(pr)o(oblems)i(for)g (any)e(arbitr)o(ar)r(y)-8 b(,)31 b(but)d(v)o(alid,)317 1546 y(v)o(alues)j(of)g Fj(j)37 b Fm(and)31 b Fj(k)j Fm(\(answ)o(er)d(YES,)h(if)f(it)h(does)o(,)i(and)d(NO)h(if)f(it)h(does) f(not\).)58 b(Assume)30 b(a)g(wor)o(king)317 1659 y(compiler)22 b(that)f(does)g(casting)g(corr)n(ectly)-9 b(.)27 b(EXPL)q(AIN)19 b(for)j(full)f(cr)n(edit.)317 1810 y Fn(Answ)o(er)r(:)27 b Fm(N)m(o)l(.)32 b(32)23 b(bits)g(ar)n(e)f(used)g(to)h(r)n(epr)n (esent)g(two)-6 b(')c(s)22 b(complement)i(signed)f(int)g(and)g(32)f (bits)h(ar)n(e)317 1922 y(also)31 b(used)g(to)h(r)n(epr)n(esent)f(a)g (\003oat)g(\(using)h(IEEE)f(754)g(single)h(pr)n(ecision\).)58 b(F)o(loat)32 b(v)o(alues)e(can)h(be)317 2035 y(much)25 b(lar)o(ger)h(than)f(int)h(v)o(alues)n(.)38 b(H)m(o)m(w)o(ever)-5 b(,)25 b(since)g(ther)n(e)g(ar)n(e)f(exactly)h(as)f(many)h(\003oat)g(r) n(epr)n(esen-)317 2148 y(tations)c(as)f(int)h(r)n(epr)n(esentations)g (\()p Fg(2)1604 2115 y Fi(32)1700 2148 y Fm(v)o(alues\),)e(ther)n(e)i (ar)n(e)f(int)h(v)o(alues)f(that)g(can)-7 b(')g(t)21 b(be)f(r)n(epr)n(esented)317 2261 y(as)26 b(\003oats)n(.)45 b(\(C)o(er)q(tainly)-8 b(,)29 b(\003oat)f(v)o(alues)e(with)i(fr)o (actions)g(can)-7 b(')g(t)27 b(be)g(r)n(epr)n(esented)g(as)f(ints)o(,)j (but)f(since)317 2374 y(w)o(e)22 b(ar)n(e)g(consider)q(ing)i(int)f(v)o (alues)e(conver)q(ted)h(to)h(\003oats)f(and)g(using)h(add,)g(subtr)o (act)f(and)g(multiply)317 2487 y(oper)o(ations)o(,)g(w)o(e)f(don)-7 b(')g(t)22 b(have)d(deal)i(with)g(that)g(case\).)317 2637 y(I)n(n)f(par)q(ticular)-5 b(,)21 b(if)f(an)g(int)h(has)e(mor)n(e) h(than)g(24)h(signi\002cant)g(bits)g(\(23)f(bits)g(for)h(the)f(fr)o (action,)h(1)f(bit)h(for)317 2750 y(the)k(hidden)h(bit\),)h(it)e(can)-7 b(')g(t)26 b(be)e(r)n(epr)n(esented)i(in)f(IEEE)g(754)g(single)h(pr)n (ecision,)h(since)e(not)h(enough)317 2863 y(bits)c(ar)n(e)e(av)o (ailable)h(in)g(the)g(mantissa,)e(thus)i(some)f(err)o(or)j(is)d(intr)o (oduced)k(when)c(conver)q(ting)i(such)317 2976 y(an)f(int)g(to)g(a)f (\003oat,)h(and)g(that)g(err)o(or)h(would)g(continue)g(as)d(y)o(ou)j (conver)q(t)e(the)h(\003oat)g(back)f(to)i(an)e(int.)1941 5497 y(6)p eop %%Page: 7 7 7 6 bop 90 119 a Fn(1.11)46 b Fm(\(4)29 b(pts\))h(Which)h(CA)-6 b(TEGOR)l(Y)30 b(\(hint:)45 b(ther)n(e)30 b(ar)n(e)g(5)g(of)g(them\))f (do)i(the)f(follo)m(wing)i(32)e(bit)h(\003oating)317 232 y(point)22 b(v)o(alues)f(belong?)317 419 y Fn(\(a\))47 b Fm(0)20 b(1111)h(1111)h(0000)f(0000)g(0000)g(0000)g(0000)g(000)517 549 y Fn(Answ)o(er)r(:)j Fm(\(P)m(ositive\))c(in\002nity)-9 b(.)28 b(\(E)o(xponent)22 b(is)f(all)g(1')-10 b(s)o(,)20 b(sign)i(bit)f(is)g(0,)f(and)h(fr)o(action)h(is)f(all)f(0')-10 b(s\).)317 695 y Fn(\(b\))46 b Fm(0)21 b(1111)g(1111)g(0011)g(0000)g (0000)h(0000)f(0000)g(000)517 825 y Fn(Answ)o(er)r(:)i Fm(N)m(aN)18 b(\(not)i(a)e(number\).)25 b(\(E)o(xponent)20 b(is)f(all)g(1')-10 b(s)o(,)19 b(sign)g(bit)h(is)e(0,)i(and)e(fr)o (action)i(is)f(NO)m(T)517 938 y(all)i(0')-10 b(s\).)317 1084 y Fn(\(c\))46 b Fm(0)21 b(0000)g(0001)g(0011)g(0000)g(0000)h(0000) f(0000)g(000)517 1213 y Fn(Answ)o(er)r(:)j Fm(N)m(or)q(maliz)o(ed.)j (\(E)o(xponent)22 b(is)e(not)i(all)f(1')-10 b(s)o(,)20 b(nor)i(all)f(0')-10 b(s\))317 1359 y Fn(\(d\))46 b Fm(0)21 b(1000)g(0000)g(0000)g(0000)g(0000)h(0000)f(0000)g(000)517 1489 y Fn(Answ)o(er)r(:)j Fm(N)m(or)q(maliz)o(ed.)j(\(E)o(xponent)22 b(is)e(not)i(all)f(1')-10 b(s)o(,)20 b(nor)i(all)f(0')-10 b(s\))317 1635 y Fn(\(e\))46 b Fm(0)21 b(0000)g(0000)g(1111)g(0000)h (0000)f(0000)g(0000)g(000)517 1764 y Fn(Answ)o(er)r(:)j Fm(D)o(enor)q(maliz)o(ed.)j(\(E)o(xponent)22 b(is)e(all)h(0')-10 b(s)o(,)21 b(but)g(fr)o(action)h(is)f(NO)m(T)g(all)g(0')-10 b(s\))90 1952 y Fn(1.12)46 b Fm(\(3)20 b(pts\))h(C)o(onver)q(t)f Fp(-17.5)h Fm(to)h(IEEE)e(single)h(pr)n(ecision.)28 b(Label)20 b(bits)h(clearly)g(\(sign)g(bit,)g(etc\).)317 2102 y Fn(Answ)o(er)r(:)k Fm(T)-9 b(o)21 b(conver)q(t,)h(y)o(ou)f(conver)q(t)g (the)h(integer)f(par)q(t)g(\002rst)h(\(to)f(10001\),)h(then)f(the)g(fr) o(action)i(par)q(t)317 2215 y(\(to)e(0.1\),)g(and)g(add)f(to)i(get)e Fg(10001)p Fj(:)p Fg(1)p Fm(.)317 2366 y(Then,)33 b(wr)q(ite)d(this)h (in)f(scienti\002c)h(notation)h(\(which)e(means)f(y)o(ou)i(need)f(a)f (single)i(bit)f(left)h(of)f(the)317 2478 y(r)o(adix)22 b(point\):)27 b Fg(1)p Fj(:)p Fg(00011)c Fl(\002)d Fg(2)1302 2445 y Fi(4)1337 2454 y Fa(10)1407 2478 y Fm(.)317 2629 y(The)26 b(exponent)g(needs)e(to)i(be)f(conver)q(ted)g(to)h(ex)o(cess)e (127,)i(so)g(y)o(ou)f(add)h(127)f(to)h(4)f(to)h(get)f(131.)39 b(T)-9 b(o)317 2742 y(conver)q(t)18 b(131,)h(it)n(')-10 b(s)19 b(easiest)d(to)j(see)d(this)j(as)d Fg(131)27 b(=)e(128)9 b(+)g(3)p Fm(.)25 b(128)19 b(in)f(binar)r(y)g(is)g Fg(10000000)p Fm(.)28 b(3)18 b(in)g(binar)r(y)317 2855 y(is)j Fg(00000011)p Fm(.)29 b(A)o(dd)21 b(the)f(two)h(to)h(get)e Fg(10000011)p Fm(.)317 3005 y(S)o(o)l(,)e(the)e(sign)g(bit)g(is)g(0,)h(the)e (exponent)i(is)f(1000)g(0011)g(and)g(the)g(fr)o(action)h(is)f Fg(0001100000000000)q(00)q(00)q(00)q(0)p Fm(.)317 3155 y(The)21 b(\002nal)g(answ)o(er)f(\(wr)q(itten)i(as)d(sign)i(bit,)h (exponent,)g(fr)o(action\))g(is)e(wr)q(itten)h(as:)317 3305 y(0)g(1000)g(0011)g(0001)g(1000)h(0000)f(0000)g(0000)g(000)317 3456 y(N)m(otice)h(that)f(the)f(hidden)i(1)f(is)f(not)i(r)n(epr)n (esented.)1941 5497 y(7)p eop %%Page: 8 8 8 7 bop 90 119 a Fn(1.13)46 b Fm(\(3)20 b(pts\))h(Assume)e(the)h(follo) m(wing)k(r)n(epr)n(esentation)e(for)f(\003oating)h(point:)426 307 y Fl(\017)46 b Fm(N)m(o)21 b(sign)g(bit)h(\(numbers)f(ar)n(e)f (non-negative\))426 453 y Fl(\017)46 b Fm(3)21 b(bits)g(used)f(to)i(r)n (epr)n(esent)f(the)f(mantissa/signi\002cand)426 599 y Fl(\017)46 b Fm(N)m(o)21 b(hidden)h(1)426 745 y Fl(\017)46 b Fm(3)21 b(bits)g(used)f(to)i(r)n(epr)n(esent)f(the)f(exponent)i (\(assume)d(r)n(epr)n(esentation)j(is)f(unsigned\).)317 933 y(Y)-8 b(ou)18 b(want)f(to)h(multiply)h Fg(1)p Fj(:)p Fg(01)1336 947 y Fi(2)1383 933 y Fl(\002)6 b Fg(2)1505 900 y Fi(2)1540 909 y Fa(10)1627 933 y Fm(b)n(y)18 b Fg(1)p Fj(:)p Fg(11)1903 947 y Fi(2)1950 933 y Fl(\002)6 b Fg(2)2072 900 y Fi(3)2107 909 y Fa(10)2177 933 y Fm(.)24 b(B)o(oth)19 b(numbers)e(ar)n(e)g(wr)q(itten)h(in)g(the)f(desir)n(ed) 317 1045 y(r)n(epr)n(esentation)h(\(i.e)n(.,)f(use)f(3)g(bits)h(for)f (number)-5 b(,)18 b(etc\).)23 b(What)17 b(is)f(the)g(answ)o(er)g(in)h (scienti\002c)g(notation)317 1158 y(using)k(the)f(abo)m(ve)g(constr)o (aints?)27 b(\(N)m(ote:)f(the)20 b(v)o(alues)g(sho)m(wn)g(earlier)h(ar) n(e)f(in)h(scienti\002c)g(notation\).)317 1271 y(Assume)e(tr)q (uncation)k(is)d(used.)317 1422 y Fn(Answ)o(er)r(:)30 b Fm(This)24 b(is)g(mer)n(ely)g(multiplication.)39 b(All)24 b(the)g(infor)q(mation)h(pr)o(o)m(vided)i(is)c(something)i(of)f(a)317 1534 y(smoke)c(scr)n(een.)317 1685 y(I)n(n)26 b(or)n(der)h(to)f (multiply)h(\003oating)h(point)f(numbers)o(,)g(multiply)g(the)f (mantissa)f(\002rst)h(\(i.e)n(.,)h(multiply)317 1798 y Fg(1)p Fj(:)p Fg(01)477 1812 y Fi(2)539 1798 y Fm(to)21 b Fg(1)p Fj(:)p Fg(11)p Fm(\).)27 b(The)21 b(r)n(esult)g(is:)k Fg(10)p Fj(:)p Fg(0011)p Fm(.)317 1948 y(Then,)k(add)e(the)f(exponents) i(\(r)n(ecall)f(that)f(multiplying)j Fj(a)2408 1915 y Fh(b)2469 1948 y Fm(to)e Fj(a)2627 1915 y Fh(c)2689 1948 y Fm(r)n(esults)f(in)i Fj(a)3144 1915 y Fh(b)p Fi(+)p Fh(c)3264 1948 y Fm(.)43 b(The)27 b(r)n(esult)g(is)317 2061 y Fg(2)362 2028 y Fi(5)397 2037 y Fa(10)467 2061 y Fm(.)317 2211 y(S)o(o)21 b(far)-5 b(,)20 b(the)h(number)g(is:)26 b Fg(10)p Fj(:)p Fg(0011)d Fl(\002)d Fg(2)1665 2178 y Fi(5)1700 2187 y Fa(10)1770 2211 y Fm(.)317 2361 y(This)30 b(is)f(not)h(y)o(et)g(nor)q(maliz)o(ed.)52 b(Y)-8 b(ou)30 b(need)f(to)h(mo)m(ve)f(the)g(r)o(adix)h(point)h(so)e(that)g(only)h(a)f (single)h(1)317 2474 y(appears)22 b(left)h(of)f(the)h(r)o(adix)g (point.)33 b(This)23 b(r)n(equir)n(es)g(mo)m(ving)h(the)e(r)o(adix)h (point)h(left)f(b)n(y)f(1)h(bit.)32 b(S)n(ince)317 2587 y(the)27 b(mantissa)f(\(or)h(signi\002cand\))h(has)e(decr)n(eased,)i(y) o(ou)g(must)e(incr)n(ease)h(the)f(exponent)i(b)n(y)f(1,)h(to)317 2700 y(get:)e Fg(1)p Fj(:)p Fg(00011)d Fl(\002)d Fg(2)946 2667 y Fi(6)981 2676 y Fa(10)1051 2700 y Fm(.)317 2850 y(F)o(inally)-8 b(,)22 b(since)f(only)g(3)g(bits)g(ar)n(e)f(used)g(in)i (the)e(r)n(epr)n(esentation,)j(w)o(e)d(tr)q(uncate)h(the)f(r)n(esult)h (to)h(3)e(bits)n(.)317 3001 y(The)h(\002nal)g(answ)o(er)f(is:)26 b Fg(1)p Fj(:)p Fg(00)c Fl(\002)e Fg(2)1450 2968 y Fi(6)1485 2977 y Fa(10)1555 3001 y Fm(.)90 3188 y Fn(1.14)46 b Fm(\(2)24 b(pts\))h(O)o(ther)h(than)f(ASCII,)f(name)g(another)h (\(common\))h(r)n(epr)n(esentation)g(for)f(char)o(acters)n(.)38 b(D)o(e-)317 3301 y(scr)q(ibe)21 b(any)f(facts)g(y)o(ou)i(kno)m(w)f (about)g(this)g(r)n(epr)n(esentation)h(\(one)f(fact)f(is)h(\002ne\).) 317 3451 y Fn(Answ)o(er)r(:)j Fm(U)l(nicode)n(.)j(I)n(t)20 b(uses)g(16)h(bits)g(to)g(r)n(epr)n(esent)g(a)f(char)o(acter)-5 b(.)25 b(\(Also)c(used)f(to)h(r)n(epr)n(esent)g(char)n(-)317 3564 y(acters)f(in)i(J)m(av)o(a\).)317 3715 y(O)o(ther)h(answ)o(ers)d (include)i(EBCDIC)f(and)g(v)o(ar)q(ious)h(UTF)f(r)n(epr)n(esentations)n (.)29 b(U)l(nicode)22 b(is)g(the)f(most)317 3828 y(common.)1941 5497 y(8)p eop %%Page: 9 9 9 8 bop 90 119 a Fd(Q)o(uiz)21 b(2)g(\(C)o(ombinational)h(Logic\):)27 b(\223C)o(onjunction)21 b(J)l(unction)-6 b(\224)21 b(\(40)g(points\))p 462 268 3007 4 v 460 550 4 283 v 611 466 a Fm(N)m(ame)p 1005 550 V 3467 550 V 462 554 3007 4 v 460 836 4 283 v 512 751 a(S)n(tudent)g(ID)p 1005 836 V 3467 836 V 462 839 3007 4 v 90 1062 a Fn(2.1)46 b Fm(\(3)20 b(pts\))h(C)o (ombinational)i(logic)f(cir)n(cuits)g(implement)f(what)f(mathematical)h (abstr)o(action?)317 1212 y Fn(Answ)o(er)r(:)40 b Fm(B)o(oolean)29 b(functions)i(\(see)d(next)h(question,)j(wher)n(e)c(it)i(tells)f(y)o (ou)h(the)f(answ)o(er\).)50 b(T)-7 b(r)q(uth)317 1325 y(tables)21 b(also)f(acceptable)n(.)90 1513 y Fn(2.2)46 b Fm(\(5)20 b(pts\))h(A)f(NAND)891 1527 y Fi(3)930 1513 y Fm(-gate)g(implements)h(the)f(B)o(oolean)i(function)g Fj(f)10 b Fg(\()p Fj(w)r(;)15 b(x;)g(y)s Fg(\))26 b(=)f(\()p Fj(w)r(xy)s Fg(\))3291 1480 y Fb(0)317 1663 y Fm(I)n(mplement)g(this)g (cir)n(cuit)h(using)f(as)e(FE)o(W)i(NAND)2113 1677 y Fi(2)2176 1663 y Fm(\(2-inputs\))g(gates)f(as)f(needed.)37 b(Label)24 b(inputs)317 1776 y(as)h Fj(w)r Fm(,)i Fj(x)p Fm(,)g Fj(y)h Fm(\(dr)o(aw)d(cir)n(cle)i(ar)o(ound)g(each)d(input)j(v)o (ar)q(iables\))e(and)h(label)f(output)i(as)e Fj(z)k Fm(\(dr)o(aw)d(a)f (bo)n(x)317 1889 y(ar)o(ound)d(the)f Fj(z)t Fm(\).)317 2039 y Fn(Answ)o(er)r(:)48 b Fm(The)34 b(key)f(to)h(this)g(is)g(to)g(r) n(ealiz)o(e)g(that)g(NAND)f(is)g(not)i(associative)n(.)64 b(Y)-8 b(ou)34 b(can)-7 b(')g(t)34 b(put)g(2)317 2152 y(NAND)588 2166 y Fi(2)648 2152 y Fm(gates)19 b(together)j(\(like)f(y)o (ou)g(can)f(with)i(two)f(AND)2366 2166 y Fi(2)2425 2152 y Fm(gates\))f(to)h(get)g(a)f(NAND)3279 2166 y Fi(3)3338 2152 y Fm(gate)n(.)317 2303 y(H)m(er)n(e)-5 b(')-10 b(s)20 b(the)h(cir)n(cuit:)311 2403 y 26105517 8875873 0 0 37561384 12893224 startTexFig 311 2403 a %%BeginDocument: Figs2/nand3.eps %!PS-Adobe-2.0 EPSF-2.0 %%Title: nand3.eps %%Creator: fig2dev Version 3.2 Patchlevel 3c %%CreationDate: Sun Nov 3 17:18:38 2002 %%For: clin@chexmix (Charles Lin,1127 AVW,(301) 405-2709,,) %%BoundingBox: 0 0 571 196 %%Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save newpath 0 196 moveto 0 0 lineto 571 0 lineto 571 196 lineto closepath clip newpath -10.0 226.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin %%Page: 1 1 10 setmiterlimit 0.06000 0.06000 sc % % Fig objects follow % /Times-Roman ff 480.00 scf sf 7575 2850 m gs 1 -1 sc (z = \(wxy\)') col0 sh gr /Times-Roman ff 480.00 scf sf 4500 1575 m gs 1 -1 sc (wx) col0 sh gr /Times-Roman ff 480.00 scf sf 2325 1125 m gs 1 -1 sc (\(wx\)') col0 sh gr /Times-Roman ff 480.00 scf sf 375 2175 m gs 1 -1 sc (x) col0 sh gr /Times-Roman ff 480.00 scf sf 375 3150 m gs 1 -1 sc (y) col0 sh gr /Times-Roman ff 480.00 scf sf 375 1500 m gs 1 -1 sc (w) col0 sh gr % Polyline 7.500 slw n 7350 2400 m 7875 2400 l 7875 3000 l 7350 3000 l cp gs col0 s gr % Polyline n 1200 525 m 6825 525 l 6825 3750 l 1200 3750 l cp gs col0 s gr % Polyline n 3075 1800 m 2700 1800 l gs col0 s gr % Polyline n 3300 1425 m 3075 1425 l 3075 2250 l 3300 2250 l gs col0 s gr % Polyline n 6600 2700 m 7350 2700 l gs col0 s gr % Polyline n 5400 3000 m 750 3000 l gs col0 s gr % Polyline n 4500 1800 m 4800 1800 l 4800 2400 l 5400 2400 l gs col0 s gr % Polyline n 750 2100 m 1500 2100 l gs col0 s gr % Polyline n 750 1500 m 1500 1500 l gs col0 s gr % Ellipse n 450 3000 270 270 0 360 DrawEllipse gs col0 s gr % Ellipse n 450 2100 270 270 0 360 DrawEllipse gs col0 s gr % Ellipse n 525 1350 270 270 0 360 DrawEllipse gs col0 s gr % Polyline n 3900 1200 m 3300 1200 l 3300 2400 l 3900 2400 l gs col0 s gr % Ellipse n 4425 1800 106 106 0 360 DrawEllipse gs col0 s gr % Arc n 3607.5 1800.0 667.5 -64.0 64.0 arc gs col0 s gr % Polyline n 6000 2100 m 5400 2100 l 5400 3300 l 6000 3300 l gs col0 s gr % Ellipse n 6525 2700 106 106 0 360 DrawEllipse gs col0 s gr % Arc n 5707.5 2700.0 667.5 -64.0 64.0 arc gs col0 s gr % Polyline n 2100 1200 m 1500 1200 l 1500 2400 l 2100 2400 l gs col0 s gr % Ellipse n 2625 1800 106 106 0 360 DrawEllipse gs col0 s gr % Arc n 1807.5 1800.0 667.5 -64.0 64.0 arc gs col0 s gr $F2psEnd rs %%EndDocument endTexFig 1941 5497 a Fm(9)p eop %%Page: 10 10 10 9 bop 90 119 a Fn(2.3)46 b Fm(\(5)20 b(pts\))h(I)n(mplement)g(a)f (NAND)1361 133 y Fi(2)1399 119 y Fm(-gate)g(\(2-input\))i(using)f(as)e (few)h(NOR)2738 133 y Fi(2)2798 119 y Fm(gates)g(as)g(necessar)r(y)-9 b(.)784 240 y 18646798 5780504 0 0 37627166 12038062 startTexFig 784 240 a %%BeginDocument: Figs2/nor2.eps %!PS-Adobe-2.0 EPSF-2.0 %%Title: nor2.eps %%Creator: fig2dev Version 3.2 Patchlevel 3c %%CreationDate: Mon Nov 4 02:02:35 2002 %%For: clin@chexmix (Charles Lin,1127 AVW,(301) 405-2709,,) %%BoundingBox: 0 0 572 183 %%Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save newpath 0 183 moveto 0 0 lineto 572 0 lineto 572 183 lineto closepath clip newpath -28.0 258.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin %%Page: 1 1 10 setmiterlimit 0.06000 0.06000 sc % % Fig objects follow % % Polyline 7.500 slw n 2250 1500 m 1650 1500 l 1650 2175 l 2250 2175 l gs col0 s gr % Polyline n 2250 3300 m 1650 3300 l 1650 3975 l 2250 3975 l gs col0 s gr % Polyline n 1650 1800 m 1125 1800 l gs col0 s gr % Polyline n 1650 3600 m 1125 3600 l gs col0 s gr % Polyline n 3900 1875 m 4200 1875 l 4200 2400 l 4875 2400 l gs col0 s gr % Polyline n 4950 3000 m 4200 3000 l 4200 3675 l 3900 3675 l gs col0 s gr % Polyline n 6600 2775 m 6825 2775 l gs col0 s gr % Polyline n 7425 2475 m 6825 2475 l 6825 3150 l 7425 3150 l gs col0 s gr % Polyline n 9075 2850 m 9375 2850 l gs col0 s gr % Polyline n 9450 2550 m 9975 2550 l 9975 3150 l 9450 3150 l cp gs col0 s gr /Times-Roman ff 480.00 scf sf 675 1950 m gs 1 -1 sc (x) col0 sh gr /Times-Roman ff 480.00 scf sf 675 3750 m gs 1 -1 sc (y) col0 sh gr /Times-Roman ff 480.00 scf sf 4200 1725 m gs 1 -1 sc (x') col0 sh gr /Times-Roman ff 480.00 scf sf 4275 4050 m gs 1 -1 sc (y') col0 sh gr /Times-Roman ff 480.00 scf sf 6075 1950 m gs 1 -1 sc (\(x'+y'\)' = xy) col0 sh gr /Times-Roman ff 480.00 scf sf 8925 3825 m gs 1 -1 sc (\(xy\)') col0 sh gr /Times-Roman ff 480.00 scf sf 9600 3000 m gs 1 -1 sc (z) col0 sh gr % Ellipse n 750 3630 270 270 0 360 DrawEllipse gs col0 s gr % Arc n 2315.0 2912.5 1651.6 -97.5 -38.9 arc gs col0 s gr % Arc n 2156.2 440.6 2035.2 44.8 91.6 arc gs col0 s gr % Arc n 975.0 1875.0 1275.0 -28.1 28.1 arc gs col0 s gr % Ellipse n 3750 1875 150 150 0 360 DrawEllipse gs col0 s gr % Arc n 2315.0 4712.5 1651.6 -97.5 -38.9 arc gs col0 s gr % Arc n 2156.2 2240.6 2035.2 44.8 91.6 arc gs col0 s gr % Arc n 975.0 3675.0 1275.0 -28.1 28.1 arc gs col0 s gr % Ellipse n 3750 3675 150 150 0 360 DrawEllipse gs col0 s gr % Arc n 5015.0 3812.5 1651.6 -97.5 -38.9 arc gs col0 s gr % Arc n 4856.2 1340.6 2035.2 44.8 91.6 arc gs col0 s gr % Arc n 3675.0 2775.0 1275.0 -28.1 28.1 arc gs col0 s gr % Ellipse n 6450 2775 150 150 0 360 DrawEllipse gs col0 s gr % Arc n 7490.0 3887.5 1651.6 -97.5 -38.9 arc gs col0 s gr % Arc n 7331.2 1415.6 2035.2 44.8 91.6 arc gs col0 s gr % Arc n 6150.0 2850.0 1275.0 -28.1 28.1 arc gs col0 s gr % Ellipse n 8925 2850 150 150 0 360 DrawEllipse gs col0 s gr % Ellipse n 750 1875 270 270 0 360 DrawEllipse gs col0 s gr $F2psEnd rs %%EndDocument endTexFig 317 1163 a Fm(C)o(onver)q(ting)21 b(NAND)e(to)i(NOR)e(\(or)i(OR\))e (usually)h(involves)f(negating)i(the)f(input)h(v)o(ar)q(iables)f(so)g (that)317 1276 y(y)o(ou)i(can)e(take)g(adv)o(antage)g(of)h(D)o(eM)m(or) o(gan)-7 b(')d(s)21 b(Law)-7 b(.)90 1464 y Fn(2.4)46 b Fm(\(5)25 b(pts\))g(I)n(mplement)h(a)f(cir)n(cuit)i(which)f(is)g (equiv)o(alent)g(to)g(the)f Fp(carr)r(y)33 b(out)26 b Fm(of)g(a)e(full)j(adder)e(using)317 1577 y(any)c(par)q(t)f Fp(ex)o(cept)h Fm(a)f(full)i(adder)e(or)i(half)e(adder)-5 b(.)26 b(\(S)o(ee)19 b(back)h(of)h(page)g(1)f(for)i(de\002nition)h(of)e (par)q(ts\).)317 1727 y Fn(Answ)o(er)r(:)i Fm(Any)18 b(cir)n(cuit)i(will)g(do)l(,)g(but)f(the)f(quick)g(and)h(dir)q(ty)g (way)f(is)g(to)h(use)f(the)g(MUX)g(method.)26 b(The)317 1840 y(tr)q(uth)c(table)e(for)i(the)e(carr)r(y)h(out)g(looks)g(like:)p 1687 1985 784 4 v 1685 2098 4 113 v 1737 2064 a Fj(a)1785 2078 y Fh(i)p 1861 2098 V 1912 2064 a Fj(b)1951 2078 y Fh(i)p 2028 2098 V 2079 2064 a Fj(c)2118 2078 y Fh(i)p 2195 2098 V 2212 2098 V 2263 2064 a Fj(c)2302 2078 y Fh(i)p Fi(+1)p 2469 2098 V 1687 2101 784 4 v 1685 2214 4 113 v 1751 2180 a Fm(0)p 1861 2214 V 123 w(0)p 2028 2214 V 119 w(0)p 2195 2214 V 2212 2214 V 181 w(0)p 2469 2214 V 1685 2327 V 1751 2293 a(0)p 1861 2327 V 123 w(0)p 2028 2327 V 119 w(1)p 2195 2327 V 2212 2327 V 181 w(0)p 2469 2327 V 1685 2440 V 1751 2406 a(0)p 1861 2440 V 123 w(1)p 2028 2440 V 119 w(0)p 2195 2440 V 2212 2440 V 181 w(0)p 2469 2440 V 1685 2553 V 1751 2519 a(0)p 1861 2553 V 123 w(1)p 2028 2553 V 119 w(1)p 2195 2553 V 2212 2553 V 181 w(1)p 2469 2553 V 1687 2556 784 4 v 1685 2669 4 113 v 1751 2635 a(1)p 1861 2669 V 123 w(0)p 2028 2669 V 119 w(0)p 2195 2669 V 2212 2669 V 181 w(0)p 2469 2669 V 1685 2782 V 1751 2748 a(1)p 1861 2782 V 123 w(0)p 2028 2782 V 119 w(1)p 2195 2782 V 2212 2782 V 181 w(1)p 2469 2782 V 1685 2895 V 1751 2861 a(1)p 1861 2895 V 123 w(1)p 2028 2895 V 119 w(0)p 2195 2895 V 2212 2895 V 181 w(1)p 2469 2895 V 1685 3008 V 1751 2974 a(1)p 1861 3008 V 123 w(1)p 2028 3008 V 119 w(1)p 2195 3008 V 2212 3008 V 181 w(1)p 2469 3008 V 1687 3011 784 4 v 317 3199 a(The)g(actual)f(cir)n (cuit)j(is)1351 3300 y 9696335 10278113 0 0 20523909 21905326 startTexFig 1351 3300 a %%BeginDocument: Figs2/carry_mux.eps %!PS-Adobe-2.0 EPSF-2.0 %%Title: carry_mux.eps %%Creator: fig2dev Version 3.2 Patchlevel 3c %%CreationDate: Mon Nov 4 02:46:57 2002 %%For: clin@chexmix (Charles Lin,1127 AVW,(301) 405-2709,,) %%BoundingBox: 0 0 312 333 %%Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save newpath 0 333 moveto 0 0 lineto 312 0 lineto 312 333 lineto closepath clip newpath -85.0 361.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /reencdict 12 dict def /ReEncode { reencdict begin /newcodesandnames exch def /newfontname exch def /basefontname exch def /basefontdict basefontname findfont def /newfont basefontdict maxlength dict def basefontdict { exch dup /FID ne { dup /Encoding eq { exch dup length array copy newfont 3 1 roll put } { exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall newfont /FontName newfontname put newcodesandnames aload pop 128 1 255 { newfont /Encoding get exch /.notdef put } for newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat newfontname newfont definefont pop end } def /isovec [ 8#055 /minus 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde 8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis 8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron 8#220 /dotlessi 8#230 /oe 8#231 /OE 8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling 8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis 8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot 8#255 /hyphen 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus 8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph 8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine 8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf 8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute 8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring 8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute 8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute 8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve 8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply 8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex 8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave 8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring 8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute 8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute 8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve 8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide 8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex 8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def /Times-Roman /Times-Roman-iso isovec ReEncode /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin %%Page: 1 1 10 setmiterlimit 0.06000 0.06000 sc % % Fig objects follow % /Times-Roman-iso ff 420.00 scf sf 1425 2400 m gs 1 -1 sc (0) col0 sh gr /Times-Roman-iso ff 420.00 scf sf 1425 2925 m gs 1 -1 sc (0) col0 sh gr /Times-Roman-iso ff 420.00 scf sf 1425 3975 m gs 1 -1 sc (0) col0 sh gr /Times-Roman-iso ff 420.00 scf sf 1425 3450 m gs 1 -1 sc (1) col0 sh gr /Times-Roman-iso ff 420.00 scf sf 1425 4500 m gs 1 -1 sc (1) col0 sh gr /Times-Roman-iso ff 420.00 scf sf 1425 5100 m gs 1 -1 sc (1) col0 sh gr /Times-Roman-iso ff 420.00 scf sf 1425 5700 m gs 1 -1 sc (1) col0 sh gr /Times-Roman-iso ff 420.00 scf sf 3300 2625 m gs 1 -1 sc (8-1) col0 sh gr /Times-Roman-iso ff 420.00 scf sf 3300 3090 m gs 1 -1 sc (MUX) col0 sh gr /Times-Roman-iso ff 420.00 scf sf 4725 3900 m gs 1 -1 sc (Z) col0 sh gr /Times-Roman-iso ff 420.00 scf sf 3375 1650 m gs 1 -1 sc (C) col0 sh gr /Times-Roman-iso ff 420.00 scf sf 3975 1650 m gs 1 -1 sc (C) col0 sh gr /Times-Roman-iso ff 420.00 scf sf 4575 1650 m gs 1 -1 sc (C) col0 sh gr /Times-Roman-iso ff 300.00 scf sf 3675 1725 m gs 1 -1 sc (2) col0 sh gr /Times-Roman-iso ff 300.00 scf sf 4275 1725 m gs 1 -1 sc (1) col0 sh gr /Times-Roman-iso ff 300.00 scf sf 4875 1725 m gs 1 -1 sc (0) col0 sh gr /Times-Roman-iso ff 420.00 scf sf 3375 825 m gs 1 -1 sc (a) col0 sh gr /Times-Roman-iso ff 420.00 scf sf 3975 825 m gs 1 -1 sc (b) col0 sh gr /Times-Roman-iso ff 420.00 scf sf 4650 825 m gs 1 -1 sc (c) col0 sh gr /Times-Roman-iso ff 300.00 scf sf 3600 975 m gs 1 -1 sc (i) col0 sh gr /Times-Roman-iso ff 300.00 scf sf 4875 975 m gs 1 -1 sc (i) col0 sh gr /Times-Roman-iso ff 420.00 scf sf 5850 3825 m gs 1 -1 sc (c) col0 sh gr /Times-Roman-iso ff 300.00 scf sf 6075 3975 m gs 1 -1 sc (i+1) col0 sh gr /Times-Roman-iso ff 300.00 scf sf 4200 975 m gs 1 -1 sc (i) col0 sh gr /Times-Roman-iso ff 420.00 scf sf 1425 1725 m gs 1 -1 sc (0) col0 sh gr 7.500 slw % Ellipse n 3525 750 270 270 0 360 DrawEllipse gs col0 s gr % Ellipse n 4875 750 270 270 0 360 DrawEllipse gs col0 s gr % Ellipse n 4125 750 270 270 0 360 DrawEllipse gs col0 s gr % Polyline n 2400 1200 m 5100 1200 l 5100 6000 l 2400 6000 l cp gs col0 s gr % Polyline n 2400 1575 m 1800 1575 l gs col0 s gr % Polyline n 2400 2250 m 1800 2250 l gs col0 s gr % Polyline n 2400 2775 m 1800 2775 l gs col0 s gr % Polyline n 2400 3300 m 1800 3300 l gs col0 s gr % Polyline n 2400 3825 m 1800 3825 l gs col0 s gr % Polyline n 2400 4425 m 1800 4425 l gs col0 s gr % Polyline n 2400 5025 m 1800 5025 l gs col0 s gr % Polyline n 2400 5625 m 1800 5625 l gs col0 s gr % Polyline n 5100 3750 m 5700 3750 l gs col0 s gr % Polyline n 3525 975 m 3525 1200 l gs col0 s gr % Polyline n 4875 975 m 4875 1200 l gs col0 s gr % Polyline n 4125 975 m 4125 1200 l gs col0 s gr % Polyline n 5700 3450 m 6600 3450 l 6600 4125 l 5700 4125 l cp gs col0 s gr /Times-Roman-iso ff 420.00 scf sf 2625 1725 m gs 1 -1 sc (0) col0 sh gr /Times-Roman-iso ff 420.00 scf sf 2625 5775 m gs 1 -1 sc (7) col0 sh gr /Times-Roman-iso ff 420.00 scf sf 2625 5175 m gs 1 -1 sc (6) col0 sh gr /Times-Roman-iso ff 420.00 scf sf 2625 4575 m gs 1 -1 sc (5) col0 sh gr /Times-Roman-iso ff 420.00 scf sf 2625 2325 m gs 1 -1 sc (1) col0 sh gr /Times-Roman-iso ff 420.00 scf sf 2625 2925 m gs 1 -1 sc (2) col0 sh gr /Times-Roman-iso ff 420.00 scf sf 2625 3450 m gs 1 -1 sc (3) col0 sh gr /Times-Roman-iso ff 420.00 scf sf 2625 3975 m gs 1 -1 sc (4) col0 sh gr $F2psEnd rs %%EndDocument endTexFig 317 4814 a Fm(Although)32 b(y)o(ou)g(could)g(have)d(wr)q(itten)j(a)e (sum-of-pr)o(oducts)i(expr)n(ession)g(for)f Fj(c)3194 4828 y Fh(i)p Fi(+1)3313 4814 y Fm(,)i(in)e(an)g(exam)317 4927 y(such)21 b(as)e(this)o(,)j(quick)e(answ)o(ers)g(ar)n(e)g(usually) h(what)f(y)o(ou)h(want.)26 b(Ther)n(e)21 b(w)o(er)n(e)f(no)i(r)n(estr)q (ictions)g(such)317 5039 y(as)g(\223)-5 b(make)21 b(it)i(with)g(few)f (gates)l(\224)g(or)h(\223)-5 b(make)21 b(it)i(elegant)n(\224)-12 b(.)32 b(S)o(o)22 b(this)h(is)g(an)f(ideal)h(question)g(for)g(a)f(MUX) 317 5152 y(tr)q(ick.)1917 5497 y(10)p eop %%Page: 11 11 11 10 bop 90 119 a Fn(2.5)46 b Fm(\(5)25 b(pts\))g(Y)-8 b(ou)27 b(wish)e(to)h(implement)h(an)e(AND)1866 134 y Fh(k)1933 119 y Fm(\(i.e)n(.,)i(a)e Fj(k)s Fm(-input)i(AND)e(gate\),)h (but)g(all)g(y)o(ou)g(have)e(ar)n(e)317 232 y(AND)517 246 y Fi(2)584 232 y Fm(gates)k(\(as)g(many)g(as)f(y)o(ou)i(want\).)49 b(Assume)27 b(the)i(time)f(delay)g(of)h(a)f(gate)g(is)h(1)f(unit.)50 b(W)l(r)q(ite)317 345 y(a)28 b(for)q(mula)g(that)g(expr)n(esses)f(the)g (MINIMUM)g(delay)h(for)g(an)g(implementation)h(of)f(AND)3545 360 y Fh(k)3615 345 y Fm(using)317 458 y(AND)517 472 y Fi(2)577 458 y Fm(gates)n(.)d(EXPL)q(AIN)19 b(ho)m(w)i(y)o(ou)g(came) f(up)h(with)g(this)g(for)q(mula.)317 608 y Fn(Answ)o(er)r(:)j Fl(d)p Fj(O)s Fg(\(lg)17 b Fj(n)p Fg(\))p Fl(e)j Fm(units)n(.)317 758 y(Essentially)-8 b(,)28 b(cr)n(eate)d(a)g(complete)i(binar)r(y)f (tr)n(ee)g(of)g Fj(AN)10 b(D)2372 772 y Fi(2)2437 758 y Fm(gates)n(.)41 b(A)25 b(complete)h(tr)n(ee)g(is)g(made)f(b)n(y)317 871 y(star)q(ting)30 b(at)f(the)g(r)o(oot)i(and)e(\002lling)j(out)d (the)h(AND)e(gates)g(r)o(o)m(w)j(b)n(y)e(r)o(o)m(w)-7 b(,)33 b(until)d(y)o(ou)g(have)e(enough)317 984 y(inputs)n(.)51 b(Each)28 b(additional)j(AND)1535 998 y Fi(2)1602 984 y Fm(gate)e(gives)f(y)o(ou)h(an)f(additional)j(input,)h(so)d(y)o(ou)g (need)g Fj(n)d Fl(\000)h Fg(1)317 1097 y Fm(AND)517 1111 y Fi(2)577 1097 y Fm(gates)20 b(for)h Fj(n)f Fm(inputs)h(\(wher)n(e)g Fj(n)j Fl(\025)h Fg(2)p Fm(\).)317 1247 y(This)c(is)g(the)g(best)f(y)o (ou)i(can)e(do)h(since)g(y)o(ou)g(ar)n(e)g(maximally)f(using)h(all)g (inputs)h(near)e(the)h(r)o(oot.)90 1435 y Fn(2.6)46 b Fm(\(10)26 b(pts\))g(F)o(ill)i(out)f(the)f(follo)m(wing)j(table)n(,)f (indicating)h(ho)m(w)e(many)f(contr)o(ol,)k(data)c(inputs)o(,)j (outputs)317 1548 y(each)20 b(has)g(\(in)h(gener)o(al\).)317 1698 y(U)l(se)f(\224k)l(\224)g(in)h(y)o(our)h(expr)n(ession,)g(as)d (needed.)317 1848 y Fn(Answ)o(er)r(:)27 b Fm(This)c(is)f(a)g(useful)g (exer)n(cise)g(to)h(help)g(y)o(ou)g(lear)q(n)f(ho)m(w)h(many)f(inputs)h (and)g(outputs)g(v)o(ar)q(i-)317 1961 y(ous)e(devices)f(have)n(.)p 319 2111 3520 4 v 317 2393 4 283 v 768 2393 V 1005 2308 a(C)o(ontr)o(ol)j(I)n(nputs)p 1841 2393 V 472 w(D)o(ata)d(inputs)p 2793 2393 V 590 w(O)o(utputs)p 3837 2393 V 319 2396 3520 4 v 317 2679 4 283 v 437 2594 a(MUX)p 768 2679 V 629 w Fj(k)p 1841 2679 V 946 w Fg(2)2319 2561 y Fh(k)p 2793 2679 V 3293 2594 a Fm(1)p 3837 2679 V 319 2682 3520 4 v 317 2964 4 283 v 378 2880 a(D)o(eMUX)p 768 2964 V 571 w Fj(k)p 1841 2964 V 966 w Fm(1)p 2793 2964 V 931 w Fg(2)3318 2847 y Fh(k)p 3837 2964 V 319 2968 3520 4 v 317 3250 4 283 v 372 3165 a Fm(Encoder)p 768 3250 V 567 w Fg(0)p 1841 3250 V 946 w(2)2319 3132 y Fh(k)p 2793 3250 V 3292 3165 a Fj(k)p 3837 3250 V 319 3253 3520 4 v 317 3535 4 283 v 369 3451 a Fm(D)o(ecoder)p 768 3535 V 564 w Fg(0)p 1841 3535 V 965 w Fj(k)p 2793 3535 V 933 w Fg(2)3318 3418 y Fh(k)p 3837 3535 V 319 3539 3520 4 v 317 3752 a Fm(This)32 b(table)f(was)f(pr)n(esented)h(in)g(class)n(.)56 b(This)32 b(assumes)d(a)h(few)h(things)n(.)57 b(F)o(irst,)34 b(it)e(assumes)d(that)317 3865 y(inputs)23 b(or)g(outputs)g(ar)n(e)f (po)m(w)o(ers)h(of)f(2.)31 b(This)22 b(assumption)h(can)f(be)g(r)n (elaxed)g(somewhat,)g(.)30 b(I)n(n)22 b(this)317 3977 y(case)n(,)32 b(y)o(ou)f(might)h(pr)n(efer)f(to)g(r)n(eplace)f (quantities)h(like)f Fg(2)2396 3944 y Fh(k)2470 3977 y Fm(with)h Fj(n)e Fm(and)i(quantities)f(like)h Fj(k)i Fm(with)317 4090 y Fl(d)p Fg(lg)17 b Fj(n)p Fl(e)p Fm(.)28 b(That)n(')-10 b(s)22 b(a)f(better)h(answ)o(er)g(\(of)f(course)n(,)i(y) o(ou)m(')-11 b(d)23 b(wr)q(ite)f(it)g(with)g Fj(k)j Fm(since)d(y)o(ou)g (w)o(er)n(e)g(instr)q(ucted)317 4203 y(to)f(do)h(so)l(,)f(but)g(I)f (picked)h Fj(n)f Fm(so)h(y)o(ou)g(could)h(see)d(the)i(r)n(elationship)i (betw)o(een)e Fj(n)f Fm(and)g Fj(k)s Fm(\).)1917 5497 y(11)p eop %%Page: 12 12 12 11 bop 90 119 a Fn(2.7)46 b Fm(\(6)18 b(pts\))h(S)n(uppose)g(y)o(ou) h(have)e(a)g(pr)q(ior)q(ity)j(encoder)f(with)f(four)h(inputs:)26 b Fj(x)2802 133 y Fi(3)2841 119 y Fm(,)19 b Fj(x)2936 133 y Fi(2)2976 119 y Fm(,)g Fj(x)3071 133 y Fi(1)3110 119 y Fm(,)g Fj(x)3205 133 y Fi(0)3245 119 y Fm(.)25 b(I)n(n)19 b(lectur)n(e)n(,)h(w)o(e)317 232 y(said)26 b(that)g(higher)h(indexes)f(r)n(epr)n(esent)g(higher)h(pr)q(ior)q (ities)n(.)43 b(S)n(uppose)26 b(lo)m(w)o(er)h(indexes)f(r)n(epr)n (esent)317 345 y(higher)c(pr)q(ior)q(ities)g(\(index)g(0)e(has)g (highest)h(pr)q(ior)q(ity\).)317 495 y(W)l(r)q(ite)e(the)g(B)o(oolean)g (expr)n(ession)g(for)g(the)g(outputs)g(of)g Fj(z)2292 509 y Fi(1)2349 495 y Fm(and)g Fj(z)2568 509 y Fi(0)2608 495 y Fm(,)f(wher)n(e)h Fj(z)2963 509 y Fi(1)3002 495 y Fj(z)3044 509 y Fi(0)3102 495 y Fm(r)n(epr)n(esent)g(the)g(2)f(bit) 317 608 y(subscr)q(ipt)k(of)f(the)f(input)i(with)f(the)g(highest)g(pr)q (ior)q(ity)-9 b(.)317 758 y Fn(Answ)o(er)r(:)34 b Fm(This)26 b(is)g(per)q(haps)f(the)h(toughest)h(question)f(in)h(this)f(par)q(t)g (of)g(the)g(exam.)40 b(H)m(o)m(w)o(ever)-5 b(,)27 b(w)o(e)317 871 y(did)20 b(do)g(an)e(example)h(in)g(class)f(of)h(this)n(.)26 b(B)o(asically)-8 b(,)19 b(this)g(is)g(what)f(y)o(ou)i(do)l(.)26 b(W)l(r)q(ite)19 b(the)g(equations)g(for)317 984 y(a)j(r)n(egular)i (encoder)-5 b(.)32 b(Then,)24 b(modify)f(it)g(so)g(that)g(y)o(ou)g (negate)g(liter)o(als)g(that)g(have)e(higher)j(pr)q(ior)q(ity)-8 b(,)317 1097 y(unless)20 b(that)h(liter)o(al)h(sho)m(ws)e(up)h(in)g (the)g(expr)n(ession.)317 1247 y(F)m(or)28 b(example)n(,)g(suppose)f(y) o(ou)h(have)e Fj(x)1707 1261 y Fi(3)1747 1247 y Fm(.)45 b(That)27 b(has)g(the)g(lo)m(w)o(est)h(pr)q(ior)q(ity)-9 b(.)48 b(S)o(o)l(,)29 b(y)o(ou)f(modify)h(it)e(to)317 1360 y Fj(x)369 1374 y Fi(3)409 1360 y Fj(x)461 1327 y Fb(0)461 1383 y Fi(2)500 1360 y Fj(x)552 1327 y Fb(0)552 1383 y Fi(1)591 1360 y Fj(x)643 1327 y Fb(0)643 1383 y Fi(0)699 1360 y Fm(which)18 b(is)e(an)h(expr)n(ession)g(that)g(is)g (tr)q(ue)g(if)g Fj(x)2203 1374 y Fi(3)2259 1360 y Fm(has)f(the)g (highest)i(pr)q(ior)q(ity)g(\(since)f Fj(x)3527 1374 y Fi(3)3583 1360 y Fm(would)317 1473 y(have)25 b(to)i(be)f(1,)h(and)g Fj(x)1111 1487 y Fi(2)1150 1473 y Fm(,)g Fj(x)1253 1487 y Fi(1)1293 1473 y Fm(,)g Fj(x)1396 1487 y Fi(0)1462 1473 y Fm(would)g(have)e(to)h(be)g(0\).)42 b(H)m(o)m(w)o(ever)-5 b(,)27 b(suppose)f Fj(x)3179 1487 y Fi(1)3245 1473 y Fm(appears)f(in)i(the)317 1586 y(expr)n(ession.)35 b(Then,)25 b(ther)n(e)-5 b(')-10 b(s)23 b(no)h(need)g(to)g(have)e Fj(x)2102 1553 y Fb(0)2102 1609 y Fi(1)2141 1586 y Fm(.)34 b(S)o(o)l(,)25 b(y)o(ou)g(can)e(simplify)h(to)g Fj(x)3207 1600 y Fi(3)3247 1586 y Fj(x)3299 1553 y Fb(0)3299 1609 y Fi(2)3338 1586 y Fj(x)3390 1553 y Fb(0)3390 1609 y Fi(0)3429 1586 y Fm(.)34 b(C)o(oncep-)317 1699 y(tually)-8 b(,)32 b(r)n(emo)m(ving)e(the)f(ter)q(ms)f(is)h(the)g(har)n(dest)g(par) q(t)g(of)g(wr)q(iting)h(an)f(ef\002cient)g(pr)q(ior)q(ity)i(encoder)317 1812 y(for)q(mula.)26 b(I)o(f)21 b(y)o(ou)g(understand)h(this)o(,)f(y)o (ou)g(ar)n(e)g(in)g(pr)n(ety)g(good)h(shape)n(.)317 1962 y(H)m(er)n(e)-5 b(')-10 b(s)20 b(a)g(table)h(for)g(a)f(r)n(egular)h (encoder)-5 b(.)p 1507 2107 1144 4 v 1505 2220 4 113 v 1557 2186 a Fj(x)1609 2200 y Fi(3)p 1696 2220 V 1748 2186 a Fj(x)1800 2200 y Fi(2)p 1887 2220 V 1939 2186 a Fj(x)1991 2200 y Fi(1)p 2078 2220 V 2130 2186 a Fj(x)2182 2200 y Fi(0)p 2269 2220 V 2286 2220 V 2337 2186 a Fj(z)2379 2200 y Fi(1)p 2467 2220 V 2519 2186 a Fj(z)2561 2200 y Fi(0)p 2649 2220 V 1507 2223 1144 4 v 1505 2336 4 113 v 1578 2302 a Fm(0)p 1696 2336 V 143 w(0)p 1887 2336 V 143 w(0)p 2078 2336 V 143 w(1)p 2269 2336 V 2286 2336 V 155 w(0)p 2467 2336 V 134 w(0)p 2649 2336 V 1505 2449 V 1578 2415 a(0)p 1696 2449 V 143 w(0)p 1887 2449 V 143 w(1)p 2078 2449 V 143 w(0)p 2269 2449 V 2286 2449 V 155 w(0)p 2467 2449 V 134 w(1)p 2649 2449 V 1505 2562 V 1578 2528 a(0)p 1696 2562 V 143 w(1)p 1887 2562 V 143 w(0)p 2078 2562 V 143 w(0)p 2269 2562 V 2286 2562 V 155 w(1)p 2467 2562 V 134 w(0)p 2649 2562 V 1505 2675 V 1578 2641 a(1)p 1696 2675 V 143 w(0)p 1887 2675 V 143 w(0)p 2078 2675 V 143 w(0)p 2269 2675 V 2286 2675 V 155 w(1)p 2467 2675 V 134 w(1)p 2649 2675 V 1507 2678 1144 4 v 317 2866 a(N)m(otice)20 b(that)e(this)h(tr)q(uth)g(table)g(only)g(has)f(4)h(r)o (o)m(ws)n(.)26 b(The)18 b(assumption)h(of)g(a)f(r)n(egular)h(encoder)g (is)g(that)317 2979 y(y)o(ou)e(can)e(have)n(,)h(at)f(most,)i(one)f (input)h(that)f(is)f(1.)24 b(Ther)n(efor)n(e)n(,)19 b(the)c(B)o(oolean) i(equations/expr)n(essions/for)q(mula)317 3092 y(for)23 b(this)g(table)g(is)f(gener)o(ated)h(b)n(y)f(cr)n(eating)h(a)f (simpli\002ed)i(sum-of-pr)o(oducts)g(expr)n(ession.)32 b(Again,)317 3205 y(the)24 b(sum-of-pr)o(oducts)h(can)f(be)f (simpli\002ed)j(because)c(the)i(exactly)g(one)g(input)h(can)f(be)g(1)f (\(other)n(-)317 3318 y(wise)n(,)e(y)o(ou)g(would)h(need)e(minter)q (ms\).)1772 3522 y Fj(z)1814 3536 y Fi(1)1937 3522 y Fg(=)83 b Fj(x)2143 3536 y Fi(2)2203 3522 y Fg(+)19 b Fj(x)2345 3536 y Fi(3)1772 3660 y Fj(z)1814 3674 y Fi(0)1937 3660 y Fg(=)83 b Fj(x)2143 3674 y Fi(1)2203 3660 y Fg(+)19 b Fj(x)2345 3674 y Fi(3)317 3864 y Fm(F)n(r)o(om)25 b(this)o(,)g(y)o (ou)g(can)f(cr)n(eate)g(the)g(pr)q(ior)q(ity)h(encoder)g(equations)f(b) n(y)g(adding)h(negated)f(liter)o(als)h(of)317 3977 y(higher)d(pr)q(ior) q(ity)g(to)g(each.)1590 4182 y Fj(z)1632 4196 y Fi(1)1754 4182 y Fg(=)83 b Fj(x)1960 4196 y Fi(2)2000 4182 y Fj(x)2052 4144 y Fb(0)2052 4204 y Fi(1)2091 4182 y Fj(x)2143 4144 y Fb(0)2143 4204 y Fi(0)2203 4182 y Fg(+)19 b Fj(x)2345 4196 y Fi(3)2385 4182 y Fj(x)2437 4144 y Fb(0)2437 4204 y Fi(1)2476 4182 y Fj(x)2528 4144 y Fb(0)2528 4204 y Fi(0)1590 4319 y Fj(z)1632 4333 y Fi(0)1754 4319 y Fg(=)83 b Fj(x)1960 4333 y Fi(1)2000 4319 y Fj(x)2052 4282 y Fb(0)2052 4342 y Fi(0)2111 4319 y Fg(+)20 b Fj(x)2254 4333 y Fi(3)2293 4319 y Fj(x)2345 4282 y Fb(0)2345 4342 y Fi(2)2385 4319 y Fj(x)2437 4282 y Fb(0)2437 4342 y Fi(0)317 4524 y Fm(N)m(otice)33 b(that)e(in)i Fj(z)972 4538 y Fi(1)1011 4524 y Fm(,)h(ther)n(e)e(is)g(a)f(ter)q(m)g Fj(x)1772 4538 y Fi(3)1811 4524 y Fj(x)1863 4491 y Fb(0)1863 4547 y Fi(1)1903 4524 y Fj(x)1955 4491 y Fb(0)1955 4547 y Fi(0)1994 4524 y Fm(.)58 b(The)32 b(negated)g(liter)o(al)g Fj(x)2948 4491 y Fb(0)2948 4547 y Fi(2)3019 4524 y Fm(does)f(not)i (appear)-5 b(.)57 b(I)n(t)317 4636 y(doesn)-7 b(')g(t)23 b(have)e(to)h(since)g Fj(x)1241 4650 y Fi(2)1302 4636 y Fm(appears)f(as)g Fj(x)1812 4650 y Fi(2)1852 4636 y Fj(x)1904 4603 y Fb(0)1904 4660 y Fi(1)1943 4636 y Fj(x)1995 4603 y Fb(0)1995 4660 y Fi(0)2034 4636 y Fm(.)30 b(Thus)o(,)22 b(if)h Fj(x)2469 4650 y Fi(2)2530 4636 y Fm(w)o(er)n(e)f(1,)g(then)g (that)g(ter)q(m)g(would)h(be)317 4749 y(1,)e(and)g Fj(z)631 4763 y Fi(1)691 4749 y Fm(would)g(be)g(1,)g(so)f(that)n(')-10 b(s)21 b(\002ne)n(.)317 4900 y(Again,)34 b(if)e(y)o(ou)g(follo)m(w)g (this)o(,)i(y)o(ou)m(')-6 b(r)n(e)33 b(in)e(gr)n(eat)h(shape)n(.)56 b(This)32 b(is)f(the)g(kind)h(of)f(cir)n(cuit)i(that)e(sepa-)317 5013 y(r)o(ates)21 b(those)g(who)g(can)f(follo)m(w)j(equations)e(fr)o (om)g(those)g(who)h(can)-7 b(')g(t.)26 b(W)o(ith)c(enough)g(time)f (\(and)g(T)-6 b(A)317 5125 y(assistance\),)19 b(ever)r(y)o(one)i(can)f (do)h(this)n(.)1917 5497 y(12)p eop %%Page: 13 13 13 12 bop 90 119 a Fn(2.8)46 b Fm(\(4)20 b(pts\))h(Answ)o(er)f(the)h (follo)m(wing)i(questions)e(about)g(encoders)n(.)317 307 y Fn(\(a\))47 b Fm(What)20 b(assumptions)o(,)h(if)g(any)-8 b(,)21 b(ar)n(e)f(made)g(about)h(the)g(inputs)g(of)g(a)f(r)n(egular)i (encoder?)517 436 y Fn(Answ)o(er)r(:)i Fm(E)o(xactly)d(one)g(input)h (has)e(v)o(alue)g(1)h(\(the)f(r)n(est)h(have)e(0\).)317 582 y Fn(\(b\))46 b Fm(What)21 b(assumptions)o(,)g(if)g(any)-8 b(,)20 b(ar)n(e)h(made)f(about)h(the)f(inputs)i(of)f(a)f(pr)q(ior)q (ity)i(encoder?)517 712 y Fn(Answ)o(er)r(:)h Fm(A)o(t)17 b(least)h(one)g(input)h(has)f(v)o(alue)f(1)h(\(the)g(r)n(est)g(have)f (0\).)24 b(N)m(ote:)h(the)18 b(r)n(eason)g(y)o(ou)h(must)517 825 y(have)29 b(at)h(least)f(one)h(input)h(with)g(v)o(alue)f(1)g(is)g (because)f(if)h(all)g(inputs)h(w)o(er)n(e)f(0,)i(what)e(would)517 938 y(the)j(encoder)g(pr)o(oduce)h(as)d(output?)62 b(F)m(or)33 b(each)f(possible)h(input,)j(ther)n(e)d(is)f(an)g(encoding)517 1050 y(\(including)e(0\).)47 b(Thus)o(,)30 b(having)e(all)g(0')-10 b(s)27 b(would)i(have)d(the)i(same)e(pr)q(ior)q(ity)k(as)c(have)h Fj(x)3581 1064 y Fi(0)3660 1050 y Fg(=)39 b(1)p Fm(,)517 1163 y(and)21 b(ther)n(e)g(would)g(be)g(con\003ict)h(as)e(to)h(whether) g Fj(x)2286 1177 y Fi(0)2346 1163 y Fm(was)e(1)i(or)g(all)g(inputs)g(w) o(er)n(e)g(0.)90 1472 y Fd(Q)o(uiz)g(3)g(\(Lo)m(w-lev)o(el)f(C)h (functions/O)o(dds)g(and)g(Ends\):)26 b(\22310)21 b(Little)f(Endians)l (\224)h(\(20)g(points\))p 462 1621 3007 4 v 460 1903 4 283 v 611 1818 a Fm(N)m(ame)p 1005 1903 V 3467 1903 V 462 1906 3007 4 v 460 2189 4 283 v 512 2104 a(S)n(tudent)g(ID)p 1005 2189 V 3467 2189 V 462 2192 3007 4 v 90 2415 a Fn(3.1)46 b Fm(\(4)20 b(pts\))h(The)f(follo)m(wing)k(ar)n(e)c(the)h(5)f(steps)g (to)h(execute)g(an)f(instr)q(uction.)28 b(E)o(xplain)22 b(each)e(step)l(.)317 2565 y Fn(Answ)o(er)r(:)36 b Fm(N)m(otice)27 b(that)g(these)g(steps)f(ar)n(e)g(NO)m(T)i(the)f(same)e(as)h(the)h (ones)g(in)g(the)g(pr)n(evious)h(exam.)317 2678 y(H)m(o)m(w)o(ever)-5 b(,)22 b(I)f(did)i(mention)g(this)f(in)g(class)f(\(which)h(is)g(why)f (r)n(eviewing)i(class)e(notes)h(is)g(impor)q(tant\).)317 2791 y(The)f(or)n(der)h(of)f(the)g(execution)g(comes)g(fr)o(om)g(the)g (textbook.)317 3003 y Fn(IF)46 b Fm(I)n(nstr)q(uction)22 b(fetch.)k(F)m(etch)20 b(instr)q(uction)j(fr)o(om)e(memor)r(y)-9 b(.)317 3150 y Fn(ID)45 b Fm(I)n(nstr)q(uction)23 b(D)o(ecode)n(.)j(D)o (ecode)21 b(instr)q(uction)i(and)e(fetch)g(r)n(egister)g(oper)o(ands)g (\(since)g(this)g(is)f(a)517 3262 y(RISC)g(ar)n(chitecutur)n(e)n(,)j (both)e(can)g(be)f(done)i(simulateneously\).)317 3409 y Fn(AL)m(U)46 b Fm(AL)n(U)20 b(oper)o(ation.)27 b(P)m(er)q(for)q(m)20 b(the)h(oper)o(ation)h(fr)o(om)g(the)f(instr)q(uction.)317 3555 y Fn(MEM)47 b Fm(M)m(emor)r(y)23 b(oper)o(ation.)37 b(R)n(ead)23 b(data)g(fr)o(om)i(memor)r(y)-8 b(,)24 b(or)h(wr)q(ite)e (data)h(to)g(memor)r(y)-9 b(.)35 b(U)l(sed)23 b(in)517 3668 y(load/stor)n(e)f(instr)q(uctions)g(\(any)e(mention)i(of)f(memor)r (y)g(was)e(\002ne\).)317 3814 y Fn(WB)46 b Fm(W)l(r)q(ite)21 b(back.)k(W)l(r)q(ite)c(back)g(the)f(r)n(esult)h(of)g(the)g(AL)n(U)e (oper)o(ation)k(to)e(the)g(r)n(egister)g(\002le)n(.)1917 5497 y(13)p eop %%Page: 14 14 14 13 bop 90 119 a Fn(3.2)46 b Fm(\(5)20 b(pts\))h(H)m(er)n(e)-5 b(')-10 b(s)19 b(a)h(pr)o(ototype)j(for)f(a)e(C++)g(function:)317 232 y Fc(bool)47 b(checkRange\()e(unsigned)g(int)i(x,)g(int)g(low,)g (int)g(high)f(\))i(;)317 345 y Fm(U)l(sing)27 b(bitwise)f(oper)o (ations)g(and)g(shifting,)i(deter)q(mine)e(if)g(A)-6 b(T)25 b(LEAST)g(ONE)h(bit)g(betw)o(een)g(index)317 458 y Fc(low)21 b Fm(and)h(index)g Fc(high)p Fm(,)f(inclusive)n(,)h(has)f (v)o(alue)h(1.)28 b(Assume)21 b(lo)m(w)28 b Fl(\024)f Fm(high)c(and)e(that)h(the)g(indexes)f(lie)317 571 y(betw)o(een)g(0)g (and)f(31,)h(inclusive)n(.)26 b(Assume)20 b(index)h(0)g(is)f(the)h(LSB) f(and)g(index)i(31)f(is)f(the)h(MSB)m(.)317 820 y Fc(bool)47 b(checkRange\()e(unsigned)g(int)i(x,)g(int)g(low,)g(int)g(high)f(\))317 933 y({)413 1046 y(int)h(mask)f(=)i(~0)f(;)g(//)h(create)e(all)h(1's) 413 1159 y(mask)f(<<=)h(\()h(high)e(-)i(low)f(\))g(+)h(1)f(;)h(//)f (1's)g(followed)e(by)i(\(high)g(-)g(low\))g(+)g(1)h(zeroes)413 1272 y(mask)e(=)i(~mask)e(;)i(//)f(0's)g(followed)e(by)i(\(high)g(-)g (low\))g(+)g(1)h(ones)413 1385 y(mask)e(<<=)h(low)g(;)95 b(//)48 b(shift)e(left)h(low)f(bits)h(\(creates)f(1's)h(between)e (index)i(low)g(and)1176 1498 y(//)h(high)e(and)h(0's)g(elsewhere\))413 1611 y(return)f(x)h(&)h(mask)e(;)317 1724 y(})317 1974 y Fm(S)o(ome)31 b(students)f(used)g(loops)h(and)g(had)f(a)g(single)g(1) h(star)q(ting)g(at)f(index)h(lo)m(w)-7 b(,)34 b(and)c(mo)m(ving)i (left.)317 2087 y(They)21 b(AND)o(ed)g(the)f(1)h(with)g Fj(x)f Fm(and)h(if)g(this)g(w)o(er)n(e)g(ever)e(tr)q(ue)n(,)i(they)g(r) n(etur)q(ned)g(tr)q(ue)n(.)317 2237 y(A)32 b(few)f(students)i(made)e (the)h(mistake)f(of)h(tr)r(ying)i(to)e(index)h(individual)h(bits)n(.)61 b(Y)-8 b(ou)33 b(can)-7 b(')g(t)32 b(index)317 2350 y(individual)25 b(bits)e(in)h(C/C++.)32 b(Thus)o(,)23 b(x[1])g(does)g(not)h(r)n(epr)n (esent)f(bit)h(1)f(of)g Fj(x)p Fm(.)32 b(I)n(t)22 b(is)h(a)f(compiler)i (err)o(or)317 2463 y(in)d(C)g(to)g(do)h(index)f(in)g(this)g(manner)-5 b(.)317 2613 y(Another)18 b(common)f(err)o(or)h(was)d(not)i(r)n (ealizing)h(that)e(shift)h(oper)o(ators)h(do)f(NO)m(T)g(modify)g(the)g (object.)317 2726 y(Thus)o(,)23 b Fj(x)28 b(<<)f Fg(3)c Fm(pr)o(oduces)g(a)e(V)-5 b(AL)n(UE)21 b(that)h(is)g Fj(x)f Fm(shifted)i(left)f(b)n(y)g(3,)g(but)h(does)f(not)h(modify)g Fj(x)e Fm(itself.)317 2839 y(This)g(is)g(why)f(y)o(ou)i(see)d (assignments)i(like)f Fj(x)25 b(<<)p Fg(=)g(3)c Fm(which)g(is)f(the)h (same)e(as)h Fj(x)25 b Fg(=)g(\()p Fj(x)h(<<)e Fg(3\))p Fm(.)317 2989 y(Another)h(\223)-7 b(err)o(or)n(\224)25 b(was)e(not)j(using)e(bitshift)i(oper)o(ations)n(.)38 b(I)24 b(had)g(sever)o(al)f(answ)o(ers)h(that)g(used)g(the)317 3102 y(po)m(w)o(er)j(function)g(to)e(do)h(what)f(could)i(be)e(done)h (with)f(bitshifts)n(.)41 b(I)n(t)n(')-10 b(s)25 b(not)h(so)g(much)f (that)g(the)h(an-)317 3215 y(sw)o(ers)20 b(ar)n(e)h(\223)n(wr)o(ong)n (\224)-12 b(,)22 b(but)f(that)g(they)f(could)i(be)f(done)g(without)h (using)f(a)f(po)m(w)o(er)i(function.)90 3402 y Fn(3.3)46 b Fm(\(3)20 b(pts\))h(G)o(iven)f(the)g(follo)m(wing)j(32)e(bit)h(v)o (alue:)j Fj(AB)5 b(C)i(D)s(E)e(F)13 b Fg(01)2402 3416 y Fi(16)317 3553 y Fm(W)l(r)q(ite)27 b(these)f(v)o(alues)g(in)h(a)f(b)n (yte-addr)n(essable)f(memor)r(y)h(star)q(ting)h(at)f(addr)n(ess)g(1000) h(in)g(LIT)q(TLE-)317 3666 y(ENDIAN)20 b(or)n(der)-5 b(.)26 b(M)o(ake)19 b(sur)n(e)i(y)o(ou)g(wr)q(ite)g(ALL)f(addr)n(esses) f(pr)o(operly)-9 b(.)317 3816 y Fn(Answ)o(er)r(:)30 b Fm(F)m(or)23 b(some)h(r)n(eason)f(this)h(question)g(gener)o(ated)g(a)f (L)o(O)m(T)h(of)g(err)o(ors)n(.)36 b(I)n(n)24 b(par)q(ticular)-5 b(,)25 b(\223b)n(yte)317 3929 y(addr)n(essable)-5 b(\224)29 b(means)h(that)g(each)g(addr)n(ess)g(stor)n(es)g(one)h(b)n(yte)n(.)55 b(Each)30 b(hex)g(digit)i(is)e(only)i(4)e(bits)n(.)317 4042 y(S)o(o)l(,)j(y)o(ou)d(need)f(two)h(hex)f(digits)i(to)f(r)n(epr)n (esent)g(a)f(b)n(yte)n(.)52 b(\(I)n(n)29 b(an)g(older)i(exam,)f(I)f (did)i(do)f(\223)-5 b(nybble)317 4155 y(addr)n(essable)g(\224)27 b(in)i(which)f(each)g(memor)r(y)g(addr)n(ess)f(holds)i(one)f(nybble)n (,)j(which)e(is)f(4)g(bits)n(.)49 b(That)317 4268 y(was)20 b(the)g(most)h(common)h(answ)o(er)e(I)g(got)i(for)f(this)g(question\).) p 1718 4438 721 4 v 1716 4551 4 113 v 1768 4517 a(A)o(ddr)n(ess)p 2141 4551 V 100 w(D)o(ata)p 2437 4551 V 1718 4554 721 4 v 1716 4667 4 113 v 1834 4633 a(1000)p 2141 4667 V 217 w(01)p 2437 4667 V 1716 4780 V 1834 4746 a(1001)p 2141 4780 V 211 w(EF)p 2437 4780 V 1716 4893 V 1834 4859 a(1002)p 2141 4893 V 198 w(CD)p 2437 4893 V 1716 5005 V 1834 4972 a(1003)p 2141 5005 V 207 w(AB)p 2437 5005 V 1718 5009 721 4 v 1917 5497 a(14)p eop %%Page: 15 15 15 14 bop 90 119 a Fn(3.4)46 b Fm(\(5)20 b(pts\))h(H)m(er)n(e)-5 b(')-10 b(s)19 b(a)h(pr)o(ototype)j(for)f(a)e(C++)g(function:)317 269 y Fc(void)47 b(clearBits\()e(unsigned)g(int)i(&)h(x,)f(int)g(low,)g (int)f(high)h(\))h(;)317 419 y Fm(Clear)25 b(bits)h(\(i.e)n(,)g(set)e (it)i(to)f(0\))g(fr)o(om)h(index)g Fc(low)e Fm(to)h(index)h Fc(high)p Fm(,)f(inclusive)n(,)i(but)e(leave)f(r)n(emaining)317 532 y(bits)d(unchanged.)27 b(U)l(se)20 b(same)f(assumptions)i(as)e Fc(checkRange)p Fm(.)317 683 y Fn(Answ)o(er)r(:)24 b Fm(This)d(function)h(is)f(ver)r(y)f(similar)h(to)g Fc(checkRange)d Fm(ex)o(cept)i(the)h(mask)e(is)i(\003ipped.)317 933 y Fc(void)47 b(clearBits\()e(unsigned)g(int)i(&)h(x,)f(int)g(low,)g(int)f (high)h(\))317 1045 y({)413 1158 y(int)g(mask)f(=)i(~0)f(;)g(//)h (create)e(all)h(1's)413 1271 y(mask)f(<<=)h(\()h(high)e(-)i(low)f(\))g (+)h(1)f(;)h(//)f(1's)g(followed)e(by)i(\(high)g(-)g(low\))g(+)g(1)h (zeroes)413 1384 y(mask)e(=)i(~mask)e(;)i(//)f(0's)g(followed)e(by)i (\(high)g(-)g(low\))g(+)g(1)h(ones)413 1497 y(mask)e(<<=)h(low)g(;)95 b(//)48 b(shift)e(left)h(low)f(bits)h(\(creates)f(1's)h(between)e (index)i(low)g(and)1176 1610 y(//)h(high)e(and)h(0's)g(elsewhere\))413 1723 y(mask)f(=)i(~mask)e(;)95 b(//)48 b(create)e(0's)h(between)e(low)i (and)g(high,)g(and)f(1's)h(elsewhere)413 1836 y(x)g(&=)g(mask)g(;)238 b(//)48 b(Zero)e(out)h(the)g(masked)f(area)317 1949 y(})90 2199 y Fn(3.5)g Fm(\(3)17 b(pts\))g(W)o(ithout)j(using)e(a)f(temp)g(v)o (ar)q(iable)h(\(i.e)n(.,)g(using)g(logical)h(bit)f(oper)o(ators\),)h (wr)q(ite)f(a)e(swap)h(func-)317 2312 y(tion)365 2462 y Fc(void)47 b(swap\()f(unsigned)g(int)g(&)i(x,)f(unsigned)f(int)h(&)g (y)g(\))h(;)317 2612 y Fn(Answ)o(er)r(:)24 b Fm(This)d(was)f(done)h (ver)r(y)e(br)q(ie\003y)j(in)f(class)n(.)k(Again,)c(it)g(helps)g(to)g (r)n(eview)f(notes)h(thor)o(oughly)-9 b(.)317 2862 y Fc(void)47 b(swap\()f(unsigned)g(int)h(\\&)g(x,)g(unsigned)f(int)h(\\&) g(y)g(\))317 2975 y({)413 3088 y(//)g(Let)g(x')g(and)g(y')g(be)g(the)g (ORIGINAL)f(values)g(of)h(x)g(and)g(y,)h(when)e(passed)413 3201 y(//)h(in)413 3427 y(x)g(=)h(x^y)f(;)g(//)g(x)h(now)f(holds)f(x')h (XOR)g(y')413 3539 y(y)g(=)h(x^y)f(;)g(//)g(y)h(now)f(holds)f(\(x')h (XOR)g(y'\))g(XOR)g(y')g(=)g(x'.)g(Thus,)f(y)i(holds)e(x's)h(old)g (value)413 3652 y(x)g(=)h(x^y)f(;)g(//)g(x)h(now)f(holds)f(\(x')h(XOR)g (y'\))g(XOR)g(x')g(=)g(y'.)g(Thus,)f(x)i(holds)e(y's)h(old)g(value)317 3765 y(})1917 5497 y Fm(15)p eop %%Page: 16 16 16 15 bop 90 119 a Fd(Challenge)19 b(\(\223D)o(r)o(ool)j(K)q (itty\224\))h(Section:)j(\223M)m(eo)m(w!\224)g(\(40)21 b(points\))90 336 y Fn(C1)45 b Fm(\(10)22 b(pts\))h(C)o(onsider)g(the)g (follo)m(wing)i(6-1)d(MUX)g(built)i(fr)o(om)f(3-1)g(MUX)o(es)e(and)i (2-1)f(MUX)o(es)n(.)30 b(The)23 b(3-1)317 449 y(MUX)o(es)d(have)f(the)i (follo)m(wing)i(oper)o(ation)p 1444 619 1269 4 v 1442 732 4 113 v 1494 698 a Fj(c)1533 712 y Fi(1)p 1621 732 V 1673 698 a Fj(c)1712 712 y Fi(0)p 1800 732 V 2234 698 a Fj(z)p 2711 732 V 1444 735 1269 4 v 1442 848 4 113 v 1510 814 a Fm(0)p 1621 848 V 130 w(0)p 1800 848 V 475 w Fj(x)2263 828 y Fi(0)p 2711 848 V 1442 961 V 1510 927 a Fm(0)p 1621 961 V 130 w(1)p 1800 961 V 475 w Fj(x)2263 941 y Fi(1)p 2711 961 V 1442 1074 V 1510 1040 a Fm(1)p 1621 1074 V 130 w(0)p 1800 1074 V 475 w Fj(x)2263 1054 y Fi(2)p 2711 1074 V 1442 1187 V 1510 1153 a Fm(1)p 1621 1187 V 130 w(1)p 1800 1187 V 115 w(r)o(andom)e(\(don)-7 b(')g(t)22 b(car)n(e\))p 2711 1187 V 1444 1190 1269 4 v 317 1366 a Fn(\(a\))47 b Fm(W)l(r)q(ite)21 b(a)f(table)h(for)g(a)f (6-1)g(MUX)g(and)h(state)f(assumptions)g(about)i(its)e(oper)o(ations)n (.)517 1495 y Fn(Answ)o(er)r(:)45 b Fm(A)32 b(table)g(r)n(efers)g(to)h (a)e(tr)q(uth)i(table)n(,)j(similar)c(to)h(the)f(one)g(sho)m(wn)h(abo)m (ve)n(.)60 b(A)31 b(few)517 1608 y(students)21 b(didn)-7 b(')g(t)22 b(understand)g(what)e(was)f(meant)i(b)n(y)f(this)n(.)p 1455 1720 1447 4 v 1453 1833 4 113 v 1505 1799 a Fj(c)1544 1813 y Fi(2)p 1632 1833 V 1683 1799 a Fj(c)1722 1813 y Fi(1)p 1810 1833 V 1862 1799 a Fj(c)1901 1813 y Fi(0)p 1989 1833 V 2423 1799 a Fj(z)p 2900 1833 V 1455 1836 1447 4 v 1453 1949 4 113 v 1520 1915 a Fm(0)p 1632 1949 V 131 w(0)p 1810 1949 V 130 w(0)p 1989 1949 V 476 w Fj(x)2453 1929 y Fi(0)p 2900 1949 V 1453 2062 V 1520 2028 a Fm(0)p 1632 2062 V 131 w(0)p 1810 2062 V 130 w(1)p 1989 2062 V 476 w Fj(x)2453 2042 y Fi(1)p 2900 2062 V 1453 2175 V 1520 2141 a Fm(0)p 1632 2175 V 131 w(1)p 1810 2175 V 130 w(0)p 1989 2175 V 476 w Fj(x)2453 2155 y Fi(2)p 2900 2175 V 1453 2288 V 1520 2254 a Fm(0)p 1632 2288 V 131 w(1)p 1810 2288 V 130 w(1)p 1989 2288 V 115 w(r)o(andom)i(\(don) -7 b(')g(t)22 b(car)n(e\))p 2900 2288 V 1455 2291 1447 4 v 1453 2404 4 113 v 1520 2370 a(1)p 1632 2404 V 131 w(0)p 1810 2404 V 130 w(0)p 1989 2404 V 476 w Fj(x)2453 2384 y Fi(4)p 2900 2404 V 1453 2517 V 1520 2483 a Fm(1)p 1632 2517 V 131 w(0)p 1810 2517 V 130 w(1)p 1989 2517 V 476 w Fj(x)2453 2497 y Fi(5)p 2900 2517 V 1453 2630 V 1520 2596 a Fm(1)p 1632 2630 V 131 w(1)p 1810 2630 V 130 w(0)p 1989 2630 V 476 w Fj(x)2453 2610 y Fi(6)p 2900 2630 V 1453 2743 V 1520 2709 a Fm(1)p 1632 2743 V 131 w(1)p 1810 2743 V 130 w(1)p 1989 2743 V 115 w(r)o(andom)g(\(don) -7 b(')g(t)22 b(car)n(e\))p 2900 2743 V 1455 2746 1447 4 v 517 2901 a(I)n(t)n(')-10 b(s)24 b(impor)q(tant)h(that)f(the)f(don) -7 b(')g(t)25 b(car)n(es)f(appear)f(wher)n(e)g(they)h(do)l(.)36 b(W)-6 b(e)24 b(want)f(to)h(encode)g(000,)517 3014 y(001,)g(010)f(and)f (100,)i(101,)g(110,)f(since)g(the)f(differ)n(ence)i(betw)o(een)f(the)f (\002rst)h(3)g(v)o(alues)f(and)h(the)517 3127 y(last)17 b(3)h(v)o(alues)e(is)i(the)f(most)h(signi\002cant)h(bit.)25 b(The)18 b(most)f(common)h(mistake)f(was)f(to)i(have)e(the)517 3240 y(v)o(alues)25 b(contiguous)i(\(i.e)n(.)40 b(de\002ne)25 b(it)h(for)g(000)g(up)f(to)h(101,)h(and)e(have)f(110)h(and)h(111)f(as)f (don)-7 b(')g(t)517 3353 y(car)n(es\).)25 b(Y)-8 b(ou)21 b(will)h(\002nd)f(this)g(doesn)-7 b(')g(t)22 b(wor)o(k)f(if)g(y)o(ou)g (tr)o(ace)g(the)f(inputs)i(of)f(the)f(cir)n(cuits)n(.)517 3482 y(One)g(student)g(had)g(a)f(solution)j(wher)n(e)d(even)g(inputs)i (w)o(er)n(e)f(placed)g(in)g(one)g(MUX,)f(and)h(odds)517 3595 y(in)25 b(another)g(MUX.)e(S)n(moe)i(students)f(wanted)g(the)g (inputs)h(to)g(be)f(contiguous)i(\(notice)f(that)517 3708 y Fj(x)569 3722 y Fi(3)627 3708 y Fm(is)19 b(skipped)f(o)m(ver)h (in)g(the)g(table)g(abo)m(ve\),)f(but)h(had)g(the)f(don)-7 b(')g(t)20 b(car)n(e)-5 b(')-10 b(s)18 b(in)h(the)g(corr)n(ect)h (places)n(.)517 3821 y(The)f(r)n(eason)f Fj(x)1040 3835 y Fi(3)1097 3821 y Fm(is)h(skipped)f(is)g(because)f(w)o(e)h(assume)f (the)h(user)g(inputs)h(the)f(subscr)q(ipt)h(of)g(the)517 3934 y(input)i(used.)j(H)m(o)m(w)o(ever)-5 b(,)19 b(no)h(cr)n(edit)h (was)d(taken)g(off)i(for)f(those)h(who)f(wr)o(ote)h(contiguous)h(sub-) 517 4047 y(scr)q(ipts)i(\(fr)o(om)h Fj(x)1120 4061 y Fi(0)1182 4047 y Fm(to)g Fj(x)1341 4061 y Fi(5)1380 4047 y Fm(\))f(pr)o(o)m(vided)i(the)e(don)-7 b(')g(t)24 b(car)n(es)e(appear) n(ed)h(in)g(the)g(four)q(th)h(and)f(eighth)517 4160 y(r)o(o)m(w)-7 b(.)1917 5497 y(16)p eop %%Page: 17 17 17 16 bop 317 119 a Fn(\(b\))46 b Fm(Clearly)33 b(label)g(inputs)h(and) e(outputs)n(.)63 b(U)l(se)33 b(conventions)g(for)h(data)e(inputs)i (using)f Fj(x)f Fm(with)517 232 y(subscr)q(ipts)21 b(and)g(contr)o(ol)i (inputs)f(using)f Fj(c)g Fm(with)g(subscr)q(ipts)n(.)784 415 y 18646798 15290366 0 0 32759316 27167866 startTexFig 784 415 a %%BeginDocument: Figs2/6_1mux.soln.eps %!PS-Adobe-2.0 EPSF-2.0 %%Title: 6_1mux.soln.eps %%Creator: fig2dev Version 3.2 Patchlevel 3c %%CreationDate: Mon Nov 4 04:00:13 2002 %%For: clin@chexmix (Charles Lin,1127 AVW,(301) 405-2709,,) %%BoundingBox: 0 0 498 413 %%Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save newpath 0 413 moveto 0 0 lineto 498 0 lineto 498 413 lineto closepath clip newpath -25.0 424.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /reencdict 12 dict def /ReEncode { reencdict begin /newcodesandnames exch def /newfontname exch def /basefontname exch def /basefontdict basefontname findfont def /newfont basefontdict maxlength dict def basefontdict { exch dup /FID ne { dup /Encoding eq { exch dup length array copy newfont 3 1 roll put } { exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall newfont /FontName newfontname put newcodesandnames aload pop 128 1 255 { newfont /Encoding get exch /.notdef put } for newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat newfontname newfont definefont pop end } def /isovec [ 8#055 /minus 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde 8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis 8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron 8#220 /dotlessi 8#230 /oe 8#231 /OE 8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling 8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis 8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot 8#255 /hyphen 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus 8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph 8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine 8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf 8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute 8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring 8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute 8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute 8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve 8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply 8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex 8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave 8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring 8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute 8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute 8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve 8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide 8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex 8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def /Times-Bold /Times-Bold-iso isovec ReEncode /Times-Roman /Times-Roman-iso isovec ReEncode /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin %%Page: 1 1 10 setmiterlimit 0.06000 0.06000 sc % % Fig objects follow % /Times-Bold-iso ff 360.00 scf sf 3525 2475 m gs 1 -1 sc (C) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 2850 2475 m gs 1 -1 sc (C) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 2550 2700 m gs 1 -1 sc (0) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 6975 4875 m gs 1 -1 sc (Z) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 6375 4350 m gs 1 -1 sc (C) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 5700 5100 m gs 1 -1 sc (1) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 6075 5550 m gs 1 -1 sc (MUX) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 6225 5175 m gs 1 -1 sc (2-1) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 5700 4575 m gs 1 -1 sc (0) col0 sh gr % Polyline 7.500 slw n 1050 6450 m 2400 6450 l gs col0 s gr % Polyline n 1050 5775 m 2400 5775 l gs col0 s gr % Polyline n 1050 5175 m 2400 5175 l gs col0 s gr % Polyline n 1050 3825 m 2400 3825 l gs col0 s gr % Polyline n 1050 3225 m 2400 3225 l gs col0 s gr % Polyline n 1050 2625 m 2400 2625 l gs col0 s gr % Polyline n 2325 825 m 2325 1125 l 6525 1125 l 6525 3975 l gs col0 s gr % Polyline n 3600 1875 m 4575 1875 l 4575 4425 l 3675 4425 l 3675 4725 l gs col0 s gr % Polyline n 2925 1875 m 2250 1875 l 2250 4425 l 3000 4425 l 3000 4725 l gs col0 s gr /Times-Bold-iso ff 360.00 scf sf 3075 3300 m gs 1 -1 sc (3-1) col0 sh gr /Times-Roman-iso ff 300.00 scf sf 825 2850 m gs 1 -1 sc (0) col0 sh gr /Times-Roman-iso ff 300.00 scf sf 825 3375 m gs 1 -1 sc (1) col0 sh gr /Times-Roman-iso ff 300.00 scf sf 825 5400 m gs 1 -1 sc (4) col0 sh gr /Times-Roman-iso ff 300.00 scf sf 825 6600 m gs 1 -1 sc (6) col0 sh gr /Times-Roman-iso ff 300.00 scf sf 825 5925 m gs 1 -1 sc (5) col0 sh gr /Times-Roman-iso ff 300.00 scf sf 825 3975 m gs 1 -1 sc (2) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 525 2700 m gs 1 -1 sc (X) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 525 6525 m gs 1 -1 sc (X) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 525 5850 m gs 1 -1 sc (X) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 525 5325 m gs 1 -1 sc (X) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 525 3900 m gs 1 -1 sc (X) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 525 3300 m gs 1 -1 sc (X) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 2550 3900 m gs 1 -1 sc (2) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 2550 3225 m gs 1 -1 sc (1) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 3975 3300 m gs 1 -1 sc (Z) col0 sh gr /Times-Bold-iso ff 270.00 scf sf 3825 2550 m gs 1 -1 sc (0) col0 sh gr /Times-Bold-iso ff 270.00 scf sf 3150 2550 m gs 1 -1 sc (1) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 2925 3675 m gs 1 -1 sc (MUX) col0 sh gr % Polyline n 3825 825 m 3825 1200 l 3600 1200 l 3600 2100 l gs col0 s gr /Times-Bold-iso ff 360.00 scf sf 2850 675 m gs 1 -1 sc (C) col0 sh gr /Times-Bold-iso ff 270.00 scf sf 2400 750 m gs 1 -1 sc (2) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 2175 675 m gs 1 -1 sc (C) col0 sh gr /Times-Bold-iso ff 270.00 scf sf 3825 750 m gs 1 -1 sc (0) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 3600 675 m gs 1 -1 sc (C) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 8325 4875 m gs 1 -1 sc (Z) col0 sh gr % Polyline n 8175 4500 m 8700 4500 l 8700 5025 l 8175 5025 l cp gs col0 s gr /Times-Bold-iso ff 360.00 scf sf 2550 6525 m gs 1 -1 sc (2) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 2550 5850 m gs 1 -1 sc (1) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 3975 5925 m gs 1 -1 sc (Z) col0 sh gr /Times-Bold-iso ff 270.00 scf sf 3825 5175 m gs 1 -1 sc (0) col0 sh gr /Times-Bold-iso ff 270.00 scf sf 3150 5175 m gs 1 -1 sc (1) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 2925 6300 m gs 1 -1 sc (MUX) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 3075 5925 m gs 1 -1 sc (3-1) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 3525 5100 m gs 1 -1 sc (C) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 2850 5100 m gs 1 -1 sc (C) col0 sh gr /Times-Bold-iso ff 360.00 scf sf 2550 5325 m gs 1 -1 sc (0) col0 sh gr % Polyline n 2400 4725 m 4275 4725 l 4275 6825 l 2400 6825 l cp gs col0 s gr /Times-Bold-iso ff 270.00 scf sf 3075 750 m gs 1 -1 sc (1) col0 sh gr % Polyline n 3075 825 m 3075 1200 l 2925 1200 l 2925 2100 l gs col0 s gr % Polyline n 2400 2100 m 4275 2100 l 4275 4200 l 2400 4200 l cp gs col0 s gr % Polyline n 1575 1425 m 7725 1425 l 7725 7050 l 1575 7050 l cp gs col0 s gr % Polyline n 7275 4725 m 8175 4725 l gs col0 s gr % Polyline n 4275 5850 m 5175 5850 l 5175 5100 l 5625 5100 l gs col0 s gr % Polyline n 5625 3975 m 7275 3975 l 7275 5775 l 5625 5775 l cp gs col0 s gr % Polyline n 4275 3150 m 5175 3150 l 5175 4425 l 5625 4425 l gs col0 s gr % Ellipse n 750 6450 270 270 0 360 DrawEllipse gs col0 s gr % Ellipse n 750 5775 270 270 0 360 DrawEllipse gs col0 s gr % Ellipse n 750 5175 270 270 0 360 DrawEllipse gs col0 s gr % Ellipse n 750 3225 318 318 0 360 DrawEllipse gs col0 s gr % Ellipse n 750 3825 270 270 0 360 DrawEllipse gs col0 s gr % Ellipse n 750 2625 318 318 0 360 DrawEllipse gs col0 s gr % Ellipse n 3600 1875 75 75 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr % Ellipse n 2925 1875 75 75 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr % Ellipse n 3827 516 318 318 0 360 DrawEllipse gs col0 s gr % Ellipse n 3077 516 318 318 0 360 DrawEllipse gs col0 s gr % Ellipse n 2325 525 318 318 0 360 DrawEllipse gs col0 s gr $F2psEnd rs %%EndDocument endTexFig 90 2581 a Fn(C2)45 b Fm(\(10)26 b(pts\))h(D)o(esign)g(a)e(cir)n(cuit)k (which)e(implements)f(the)h(follo)m(wing.)46 b(Elegant)27 b(answ)o(ers)e(\(i.e)n(.)44 b(simple)317 2694 y(ones\))21 b(r)n(eceive)f(mor)n(e)h(cr)n(edit.)27 b(H)m(o)m(w)o(ever)-5 b(,)20 b(any)g(v)o(alid)i(answ)o(ers)d(will)j(get)f(some)f(cr)n(edit.)p 1326 2864 1507 4 v 1324 2977 4 113 v 1375 2943 a Fj(x)1427 2957 y Fi(3)p 1515 2977 V 1566 2943 a Fj(x)1618 2957 y Fi(2)p 1706 2977 V 1757 2943 a Fj(x)1809 2957 y Fi(1)p 1897 2977 V 1948 2943 a Fj(x)2000 2957 y Fi(0)p 2088 2977 V 2105 2977 V 2156 2943 a Fj(z)2198 2957 y Fi(3)p 2286 2977 V 2337 2943 a Fj(z)2379 2957 y Fi(2)p 2467 2977 V 2519 2943 a Fj(z)2561 2957 y Fi(1)p 2649 2977 V 2700 2943 a Fj(z)2742 2957 y Fi(0)p 2830 2977 V 1326 2980 1507 4 v 1324 3093 4 113 v 1397 3059 a Fm(0)p 1515 3093 V 143 w(0)p 1706 3093 V 143 w(0)p 1897 3093 V 143 w(0)p 2088 3093 V 2105 3093 V 155 w(0)p 2286 3093 V 133 w(0)p 2467 3093 V 134 w(0)p 2649 3093 V 133 w(0)p 2830 3093 V 1324 3206 V 1397 3172 a(0)p 1515 3206 V 143 w(0)p 1706 3206 V 143 w(0)p 1897 3206 V 143 w(1)p 2088 3206 V 2105 3206 V 155 w(1)p 2286 3206 V 133 w(0)p 2467 3206 V 134 w(0)p 2649 3206 V 133 w(0)p 2830 3206 V 1324 3319 V 1397 3285 a(0)p 1515 3319 V 143 w(0)p 1706 3319 V 143 w(1)p 1897 3319 V 143 w(0)p 2088 3319 V 2105 3319 V 155 w(0)p 2286 3319 V 133 w(1)p 2467 3319 V 134 w(0)p 2649 3319 V 133 w(0)p 2830 3319 V 1324 3431 V 1397 3398 a(0)p 1515 3431 V 143 w(0)p 1706 3431 V 143 w(1)p 1897 3431 V 143 w(1)p 2088 3431 V 2105 3431 V 155 w(1)p 2286 3431 V 133 w(1)p 2467 3431 V 134 w(0)p 2649 3431 V 133 w(0)p 2830 3431 V 1326 3435 1507 4 v 1324 3548 4 113 v 1397 3514 a(0)p 1515 3548 V 143 w(1)p 1706 3548 V 143 w(0)p 1897 3548 V 143 w(0)p 2088 3548 V 2105 3548 V 155 w(0)p 2286 3548 V 133 w(0)p 2467 3548 V 134 w(0)p 2649 3548 V 133 w(1)p 2830 3548 V 1324 3661 V 1397 3627 a(0)p 1515 3661 V 143 w(1)p 1706 3661 V 143 w(0)p 1897 3661 V 143 w(1)p 2088 3661 V 2105 3661 V 155 w(1)p 2286 3661 V 133 w(0)p 2467 3661 V 134 w(0)p 2649 3661 V 133 w(1)p 2830 3661 V 1324 3774 V 1397 3740 a(0)p 1515 3774 V 143 w(1)p 1706 3774 V 143 w(1)p 1897 3774 V 143 w(0)p 2088 3774 V 2105 3774 V 155 w(0)p 2286 3774 V 133 w(1)p 2467 3774 V 134 w(0)p 2649 3774 V 133 w(1)p 2830 3774 V 1324 3886 V 1397 3853 a(0)p 1515 3886 V 143 w(1)p 1706 3886 V 143 w(1)p 1897 3886 V 143 w(1)p 2088 3886 V 2105 3886 V 155 w(1)p 2286 3886 V 133 w(1)p 2467 3886 V 134 w(0)p 2649 3886 V 133 w(1)p 2830 3886 V 1326 3890 1507 4 v 1324 4003 4 113 v 1397 3969 a(1)p 1515 4003 V 143 w(0)p 1706 4003 V 143 w(0)p 1897 4003 V 143 w(0)p 2088 4003 V 2105 4003 V 155 w(0)p 2286 4003 V 133 w(0)p 2467 4003 V 134 w(1)p 2649 4003 V 133 w(0)p 2830 4003 V 1324 4116 V 1397 4082 a(1)p 1515 4116 V 143 w(0)p 1706 4116 V 143 w(0)p 1897 4116 V 143 w(1)p 2088 4116 V 2105 4116 V 155 w(1)p 2286 4116 V 133 w(0)p 2467 4116 V 134 w(1)p 2649 4116 V 133 w(0)p 2830 4116 V 1324 4229 V 1397 4195 a(1)p 1515 4229 V 143 w(0)p 1706 4229 V 143 w(1)p 1897 4229 V 143 w(0)p 2088 4229 V 2105 4229 V 155 w(0)p 2286 4229 V 133 w(1)p 2467 4229 V 134 w(1)p 2649 4229 V 133 w(0)p 2830 4229 V 1324 4341 V 1397 4308 a(1)p 1515 4341 V 143 w(0)p 1706 4341 V 143 w(1)p 1897 4341 V 143 w(1)p 2088 4341 V 2105 4341 V 155 w(1)p 2286 4341 V 133 w(1)p 2467 4341 V 134 w(1)p 2649 4341 V 133 w(0)p 2830 4341 V 1326 4345 1507 4 v 1324 4458 4 113 v 1397 4424 a(1)p 1515 4458 V 143 w(1)p 1706 4458 V 143 w(0)p 1897 4458 V 143 w(0)p 2088 4458 V 2105 4458 V 155 w(0)p 2286 4458 V 133 w(0)p 2467 4458 V 134 w(1)p 2649 4458 V 133 w(1)p 2830 4458 V 1324 4571 V 1397 4537 a(1)p 1515 4571 V 143 w(1)p 1706 4571 V 143 w(0)p 1897 4571 V 143 w(1)p 2088 4571 V 2105 4571 V 155 w(1)p 2286 4571 V 133 w(0)p 2467 4571 V 134 w(1)p 2649 4571 V 133 w(1)p 2830 4571 V 1324 4683 V 1397 4650 a(1)p 1515 4683 V 143 w(1)p 1706 4683 V 143 w(1)p 1897 4683 V 143 w(0)p 2088 4683 V 2105 4683 V 155 w(0)p 2286 4683 V 133 w(1)p 2467 4683 V 134 w(1)p 2649 4683 V 133 w(1)p 2830 4683 V 1324 4796 V 1397 4763 a(1)p 1515 4796 V 143 w(1)p 1706 4796 V 143 w(1)p 1897 4796 V 143 w(1)p 2088 4796 V 2105 4796 V 155 w(1)p 2286 4796 V 133 w(1)p 2467 4796 V 134 w(1)p 2649 4796 V 133 w(1)p 2830 4796 V 1326 4800 1507 4 v 1917 5497 a(17)p eop %%Page: 18 18 18 17 bop 317 119 a Fm(Clearly)16 b(label)g(inputs)h(\(b)n(y)e(cir)n (cling)j(them\))e(and)g(outputs)g(\(b)n(y)g(bo)n(xing\).)26 b(Y)-8 b(ou)16 b(can)f(use)g(any)h(par)q(t/gate)317 232 y(y)o(ou)22 b(wish.)317 382 y Fn(Answ)o(er)r(:)h Fm(S)o(ome)18 b(people)g(tr)q(ied)h(to)g(wr)q(ite)f(sum-of-pr)o(oducts)n(.)26 b(I)n(t)18 b(wor)o(ks)o(,)h(but)f(it)n(')-10 b(s)19 b(slo)m(w)-7 b(.)25 b(S)o(ome)18 b(tr)q(ied)317 495 y(encoder)n(-decoder)-5 b(.)39 b(Also)25 b(wor)o(ks)n(.)38 b(Also)24 b(slo)m(w)h(\(but)g(mor)n (e)g(cr)n(eative\).)37 b(This)26 b(one)e(only)i(r)n(equir)n(es)f(4)317 608 y(wir)n(es)n(.)h(M)o(any)-8 b(,)20 b(many)h(students)f(got)i(this)f (corr)n(ect,)h(so)e(I)h(was)e(r)o(ather)i(happ)n(y)-9 b(.)317 758 y(The)21 b(cir)n(cuit)i(looks)e(like:)1611 859 y 5594039 6153442 0 0 9406791 10393518 startTexFig 1611 859 a %%BeginDocument: Figs2/simp.eps %!PS-Adobe-2.0 EPSF-2.0 %%Title: simp.eps %%Creator: fig2dev Version 3.2 Patchlevel 3c %%CreationDate: Mon Nov 4 04:09:20 2002 %%For: clin@chexmix (Charles Lin,1127 AVW,(301) 405-2709,,) %%BoundingBox: 0 0 143 158 %%Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save newpath 0 158 moveto 0 0 lineto 143 0 lineto 143 158 lineto closepath clip newpath -106.0 216.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin %%Page: 1 1 10 setmiterlimit 0.06000 0.06000 sc % % Fig objects follow % /Times-Roman ff 360.00 scf sf 3900 3450 m gs 1 -1 sc (3) col0 sh gr /Times-Roman ff 360.00 scf sf 3900 2850 m gs 1 -1 sc (2) col0 sh gr /Times-Roman ff 360.00 scf sf 3900 2250 m gs 1 -1 sc (1) col0 sh gr /Times-Roman ff 360.00 scf sf 3900 1575 m gs 1 -1 sc (0) col0 sh gr /Times-Roman ff 360.00 scf sf 2250 3450 m gs 1 -1 sc (3) col0 sh gr /Times-Roman ff 360.00 scf sf 2250 2250 m gs 1 -1 sc (1) col0 sh gr /Times-Roman ff 360.00 scf sf 2250 2850 m gs 1 -1 sc (2) col0 sh gr /Times-Roman ff 360.00 scf sf 2250 1575 m gs 1 -1 sc (0) col0 sh gr /Times-Roman ff 600.00 scf sf 3600 3300 m gs 1 -1 sc (z) col0 sh gr /Times-Roman ff 600.00 scf sf 3600 2700 m gs 1 -1 sc (z) col0 sh gr /Times-Roman ff 600.00 scf sf 3600 2100 m gs 1 -1 sc (z) col0 sh gr /Times-Roman ff 600.00 scf sf 3600 1425 m gs 1 -1 sc (z) col0 sh gr /Times-Roman ff 600.00 scf sf 1950 3300 m gs 1 -1 sc (x) col0 sh gr /Times-Roman ff 600.00 scf sf 1950 2700 m gs 1 -1 sc (x) col0 sh gr 7.500 slw % Ellipse n 2175 1987 321 321 0 360 DrawEllipse gs col0 s gr % Ellipse n 2175 2662 321 321 0 360 DrawEllipse gs col0 s gr % Ellipse n 2100 3262 321 321 0 360 DrawEllipse gs col0 s gr % Ellipse n 2175 1312 321 321 0 360 DrawEllipse gs col0 s gr % Polyline n 3525 1050 m 4125 1050 l 4125 1575 l 3525 1575 l cp gs col0 s gr % Polyline n 3525 1725 m 4125 1725 l 4125 2250 l 3525 2250 l cp gs col0 s gr % Polyline n 3525 2325 m 4125 2325 l 4125 2850 l 3525 2850 l cp gs col0 s gr % Polyline n 3525 2925 m 4125 2925 l 4125 3450 l 3525 3450 l cp gs col0 s gr % Polyline n 2400 3300 m 3525 1950 l gs col0 s gr % Polyline n 2475 2625 m 3525 1350 l gs col0 s gr % Polyline n 2475 1275 m 3525 3225 l gs col0 s gr % Polyline n 2475 2025 m 3525 2700 l gs col0 s gr /Times-Roman ff 600.00 scf sf 1950 1425 m gs 1 -1 sc (x) col0 sh gr /Times-Roman ff 600.00 scf sf 1950 2100 m gs 1 -1 sc (x) col0 sh gr $F2psEnd rs %%EndDocument endTexFig 90 1887 a Fn(C3)45 b Fm(\(10)21 b(pts\))f(F)m(or)h(a)f(carr)r(y)g (lookahead)h(adder)-5 b(,)20 b(what)h(ar)n(e)f(the)h(gener)o(al)f(for)q (mulas)h(for)q(:)317 2100 y Fn(\(a\))47 b Fj(g)522 2114 y Fh(i)571 2100 y Fm(and)20 b Fj(p)795 2114 y Fh(i)517 2229 y Fn(Answ)o(er)r(:)k Fm(The)d(for)q(mulas)f(ar)n(e:)1898 2434 y Fj(g)1941 2448 y Fh(i)2053 2434 y Fg(=)83 b Fj(a)2255 2448 y Fh(i)2303 2434 y Fl(\001)21 b Fj(b)2388 2448 y Fh(i)1896 2571 y Fj(p)1942 2585 y Fh(i)2053 2571 y Fg(=)83 b Fj(a)2255 2585 y Fh(i)2303 2571 y Fg(+)20 b Fj(b)2433 2585 y Fh(i)317 2792 y Fn(\(b\))46 b Fm(B)o(r)q(ie\003y)21 b(explain)g(what)f Fj(g)1362 2806 y Fh(i)1411 2792 y Fm(and)h Fj(p)1636 2806 y Fh(i)1684 2792 y Fm(r)n(efer)g(to)g(\(not)h (just)f(the)f(names)o(,)g(but)h(the)g(purpose\).)517 2922 y Fn(Answ)o(er)r(:)26 b Fj(g)927 2936 y Fh(i)977 2922 y Fm(is)21 b(the)h(\223)-6 b(gener)o(ate)h(\224)19 b(par)q(t.)29 b(I)o(f)21 b(this)h(v)o(alue)g(is)f(1,)h(this)g(means)e (the)i(sum)f(of)h Fj(a)3544 2936 y Fh(i)3593 2922 y Fm(and)g Fj(b)3812 2936 y Fh(i)517 3035 y Fm(gener)o(ates)e(a)g(1)h(r)n(egar)n (dless)g(of)g(the)f(v)o(alue)h(of)g(the)f(carr)r(y)h(in)g Fj(c)2631 3049 y Fh(i)2659 3035 y Fm(.)517 3164 y Fj(p)563 3178 y Fh(i)611 3164 y Fm(is)e(the)h(\223)-5 b(pr)o(opagate)g(\224)20 b(par)q(t.)25 b(I)o(f)20 b(this)g(v)o(alue)f(is)h(1,)g(this)g(means)e (that)i(the)g(carr)r(y)m(-in)g Fj(c)3436 3178 y Fh(i)3464 3164 y Fm(,)g(if)g(1,)g(gets)517 3277 y(pr)o(opagated)k(to)f(the)g (carr)r(y)m(-out)g Fj(c)1718 3291 y Fh(i)p Fi(+1)1837 3277 y Fm(.)31 b(I)o(f)22 b(the)h(carr)r(y)m(-in)g(is)g(0,)g(this)g (gets)f(pr)o(opagated)i(too)l(,)g(but)517 3390 y(only)e(if)f Fj(g)837 3404 y Fh(i)886 3390 y Fm(is)f(not)i(1.)317 3536 y Fn(\(c\))46 b Fm(Assume)19 b(y)o(ou)j(ar)n(e)e(adding)i(two)f (4-bit)g(numbers)1791 3740 y Fj(a)1839 3754 y Fi(3)1879 3740 y Fj(a)1927 3754 y Fi(2)1966 3740 y Fj(a)2014 3754 y Fi(1)2054 3740 y Fj(a)2102 3754 y Fi(0)2161 3740 y Fg(+)f Fj(b)2291 3754 y Fi(3)2331 3740 y Fj(b)2370 3754 y Fi(2)2409 3740 y Fj(b)2448 3754 y Fi(1)2488 3740 y Fj(b)2527 3754 y Fi(0)517 3945 y Fm(and)g Fj(c)734 3959 y Fi(0)792 3945 y Fm(is)g(the)f(carr)r(y)m(-in)h(to)f(the)h(least)e (signi\002cant)j(bit)f(\(nor)q(mally)-8 b(,)21 b(a)d(r)q(ipple-carr)r (y)i(adder)g(has)517 4057 y(no)h(carr)r(y)m(-in)h(to)f(the)f(LSB)n(,)h (but)g(pr)n(etend)g(y)o(ou)h(have)d(a)h(full)h(adder)g(adding)h(the)f (LSB\).)517 4187 y(W)l(r)q(ite)26 b(a)e(for)q(mula)h(for)h Fj(c)1371 4201 y Fi(2)1436 4187 y Fm(for)f(a)f(carr)r(y)m(-lookahead)h (adder)-5 b(,)26 b(using)g(only)g(the)f(follo)m(wing)i(v)o(ar)q(i-)517 4300 y(ables:)e Fj(c)819 4314 y Fi(0)859 4300 y Fj(;)15 b(a)947 4314 y Fi(3)987 4300 y Fj(;)g(a)1075 4314 y Fi(2)1115 4300 y Fj(;)g(a)1203 4314 y Fi(1)1243 4300 y Fj(;)g(a)1331 4314 y Fi(0)1371 4300 y Fj(;)g(b)1450 4314 y Fi(3)1490 4300 y Fj(;)g(b)1569 4314 y Fi(2)1608 4300 y Fj(;)g(b)1687 4314 y Fi(1)1727 4300 y Fj(;)g(b)1806 4314 y Fi(0)1846 4300 y Fm(.)26 b(N)m(ot)21 b(all)g(v)o(ar)q(iables)f(need)h(to)g (appear)f(in)h(the)g(for)q(mula.)517 4429 y Fn(Answ)o(er)r(:)j Fm(The)d(gener)o(al)g(carr)r(y)f(for)q(mula)h(is)f Fj(c)2092 4443 y Fh(i)p Fi(+1)2236 4429 y Fg(=)25 b Fj(g)2375 4443 y Fh(i)2424 4429 y Fg(+)20 b Fj(p)2561 4443 y Fh(i)2589 4429 y Fj(c)2628 4443 y Fh(i)2656 4429 y Fm(.)517 4559 y(U)l(sing)i(this)o(,)f(w)o(e)f(can)h(see)e(that)i Fj(c)1656 4573 y Fi(2)1721 4559 y Fg(=)k Fj(g)1860 4573 y Fi(1)1920 4559 y Fg(+)20 b Fj(p)2057 4573 y Fi(1)2096 4559 y Fj(c)2135 4573 y Fi(1)2175 4559 y Fm(.)517 4688 y(U)l(sing)i(the)e(same)g(for)q (mula,)h Fj(c)1581 4702 y Fi(1)1646 4688 y Fg(=)k Fj(g)1785 4702 y Fi(0)1845 4688 y Fg(+)19 b Fj(p)1981 4702 y Fi(0)2021 4688 y Fj(c)2060 4702 y Fi(0)2099 4688 y Fm(.)517 4818 y(P)o(lug)i(in)h(the)e(expr)n(ession)i(for)f Fj(c)1614 4832 y Fi(1)1674 4818 y Fm(into)h(the)f Fj(c)2054 4832 y Fi(2)2114 4818 y Fm(for)q(mula)g(to)g(get:)26 b Fj(c)2782 4832 y Fi(2)2847 4818 y Fg(=)f Fj(g)2986 4832 y Fi(1)3046 4818 y Fg(+)20 b Fj(p)3183 4832 y Fi(1)3222 4818 y Fg(\()p Fj(g)3300 4832 y Fi(0)3360 4818 y Fg(+)g Fj(p)3497 4832 y Fi(0)3536 4818 y Fj(c)3575 4832 y Fi(0)3615 4818 y Fg(\))p Fm(.)517 4947 y(M)m(ultiply)i(and)f(r)n(ewr)q(ite)g(as:)j Fj(c)1550 4961 y Fi(2)1615 4947 y Fg(=)h Fj(g)1754 4961 y Fi(1)1814 4947 y Fg(+)20 b Fj(g)1948 4961 y Fi(0)1988 4947 y Fj(p)2034 4961 y Fi(1)2094 4947 y Fg(+)f Fj(p)2230 4961 y Fi(1)2270 4947 y Fj(p)2316 4961 y Fi(0)2355 4947 y Fj(c)2394 4961 y Fi(0)2434 4947 y Fm(.)517 5077 y(P)o(lug)i(in)h(for) f Fj(g)1003 5091 y Fi(1)1043 5077 y Fm(,)f Fj(g)1130 5091 y Fi(0)1170 5077 y Fm(,)h Fj(p)1261 5091 y Fi(1)1300 5077 y Fm(,)f Fj(p)1390 5091 y Fi(0)1429 5077 y Fm(.)517 5206 y Fj(c)556 5220 y Fi(2)621 5206 y Fg(=)25 b(\()p Fj(a)800 5220 y Fi(1)840 5206 y Fj(b)879 5220 y Fi(1)919 5206 y Fg(\))20 b(+)g(\()p Fj(a)1148 5220 y Fi(0)1188 5206 y Fj(b)1227 5220 y Fi(0)1266 5206 y Fg(\)\()p Fj(a)1384 5220 y Fi(1)1445 5206 y Fg(+)g Fj(b)1575 5220 y Fi(1)1614 5206 y Fg(\))h(+)f(\()p Fj(a)1844 5220 y Fi(1)1904 5206 y Fg(+)f Fj(b)2033 5220 y Fi(1)2073 5206 y Fg(\)\()p Fj(a)2191 5220 y Fi(0)2251 5206 y Fg(+)h Fj(b)2381 5220 y Fi(0)2421 5206 y Fg(\))p Fj(c)2495 5220 y Fi(0)2535 5206 y Fm(.)1917 5497 y(18)p eop %%Page: 19 19 19 18 bop 517 119 a Fm(I)20 b(like)g(this)g(kind)h(of)f(pr)o(oblem)i (because)d(it)h(has)g(enough)g(for)q(mulas)g(that)g(y)o(ou)h(need)f(to) h(spend)517 232 y(time)j(\002gur)q(ing)h(it)e(out,)i(and)e(I)g(didn)-7 b(')g(t)25 b(co)m(ver)e(it)h(in)g(class)o(,)f(so)g(y)o(ou)h(had)g(to)f (r)n(ead)h(the)f(book)h(and)517 345 y(wor)o(k)32 b(it)g(out)h(y)o (ourself)f(or)g(with)g(fr)q(iends)n(.)59 b(This)32 b(kind)h(of)e (question)h(is)g(mor)n(e)g(common)g(in)517 458 y(engineer)q(ing)d (courses)e(\(wher)n(e)g(y)o(ou)g(must)g(lear)q(n)g(to)h(der)q(ive)f (for)q(mulas)g(and)g(\002gur)n(e)h(things)517 571 y(out)22 b(fr)o(om)f(books\).)26 b(R)n(eading)21 b(and)f(lear)q(ning)i(fr)o(om)g (books)f(is)f(an)g(inv)o(aluable)i(skill)f(to)g(lear)q(n.)517 700 y(Lear)q(ning)h(fr)o(om)g(class)e(is)h(gr)n(eat,)h(but)g(y)o(ou)g (will)g(\002nd)g(many)f(mor)n(e)h(occasions)g(wher)n(e)f(all)g(y)o(ou) 517 813 y(have)e(is)g(book,)i(and)f(y)o(our)h(ability)g(to)f(sit)g(and) f(think)i(about)f(what)f(it)i(says)o(,)d(r)o(ather)j(than)e(hear)n(-) 517 926 y(ing)j(an)e(explanation)i(and)e(asking)h(questions)f(when)h(y) o(ou)g(ar)n(e)g(stuck.)90 1138 y Fn(C4)45 b Fm(\(10)20 b(pts\))h(D)o(r)o(ool)g(K)q(itty)g(is)f(a)g(kitty)h(that)f(dr)o(ools)i (so)f(much,)f(that)h(she)e(needs)h(a)g(to)m(w)o(el)i(to)e(sop)h(it)g (up)l(.)26 b(S)o(he)317 1251 y(also)e(lo)m(ves)g(cir)n(cuit)i(pr)o (oblems)n(.)38 b(S)o(he)24 b(ar)o(gues)h(that)f(another)h(way)e(of)i (per)q(for)q(ming)g(two)-6 b(')c(s)25 b(comple-)317 1364 y(ment)k(oper)o(ation)h(is)e(to)h(subtr)o(act)g(1,)h(and)f(\003ip)g (bits)g(\(the)f(usual)g(way)g(is)g(to)h(\003ip)g(bits)g(and)g(add)f (1\))317 1477 y(wher)n(e)e(subtr)o(act)h(1)f(may)g(wr)o(ap)g(ar)o(ound) i(\(thus)e(0000)h(-)e(1)i(r)n(esults)f(in)h(1111,)h(for)f(4)f(bits\).) 43 b(I)n(s)26 b(D)o(r)o(ool)317 1590 y(K)q(itty)21 b(corr)n(ect?)317 1740 y(I)o(f)c(so)l(,)h(pr)o(o)m(vide)g(a)e(mathematical)h(ar)o (gument.)25 b(T)-9 b(o)17 b(do)g(so)l(,)h(use)e(facts)g(about)h (function)h(composition)317 1853 y(and)k(function)i(inverses)o(,)d(and) h(also)g(check)f(boundar)r(y)i(cases)d(\(what)h(happens)h(near)g(all)f (0')-10 b(s)22 b(or)h(all)317 1966 y(1')-10 b(s\).)317 2116 y(I)o(f)22 b(not,)g(der)q(ive)f(a)g(counter)n(example)h(wher)n(e)f (this)h(fails)n(.)27 b(Y)-8 b(ou)22 b(should)h(assume)c(that)j(the)f (oper)o(ation)317 2229 y(applies)g(to)g Fj(k)j Fm(bit)d(numbers)g(wher) n(e)g Fj(k)28 b Fl(\025)d Fg(2)p Fm(.)317 2380 y Fn(Answ)o(er)r(:)g Fm(This)c(question)h(is)f(\223)-7 b(easy\224)19 b(pr)o(o)m(vided)k(y)o (ou)f(r)n(emember)f(y)o(our)h(250)g(ver)r(y)e(w)o(ell.)27 b(The)21 b(ques-)317 2493 y(tion)f(was)d(\223inspir)n(ed)n(\224)h(b)n (y)g(a)g(student,)h(and)f(the)g(answ)o(er)g(was)f(pr)o(o)m(vided)k(b)n (y)d(D)o(r)-5 b(.)24 b(Kr)q(uskal.)g(I)n(ts)17 b(inclu-)317 2605 y(sion)24 b(in)g(the)f(exam)g(is)g(mostly)h(to)g(illustr)o(ate)g (the)f(follo)m(wing)j(point:)33 b(y)o(ou)24 b(sometimes)f(need)g(math) 317 2718 y(to)e(ver)q(ify)g(an)f(idea)g(y)o(ou)i(believe)e(is)h (intuitively)h(tr)q(ue)n(.)317 2869 y(A)c(lot)i(of)f(people)g(feel)g (discr)n(ete)g(math)f(or)i(any)e(math)g(is)h(useless)n(.)24 b(P)m(ar)q(t)17 b(of)i(this)g(feeling)h(comes)e(fr)o(om)317 2982 y(\002nding)k(the)d(mater)q(ial)g(dif\002cult.)28 b(I)o(f)19 b(it)h(w)o(er)n(e)g(easy)-8 b(,)19 b(then)g(y)o(ou)i(wouldn) -7 b(')g(t)21 b(car)n(e)e(whether)h(it)n(')-10 b(s)20 b(useless)317 3094 y(or)26 b(not.)41 b(H)m(o)m(w)o(ever)-5 b(,)26 b(a)f(good)i(gr)o(ounding)h(in)e(math)f(allo)m(ws)h(y)o(ou)g(to) g(see)f(a)f(pr)o(oblem)k(like)d(this)h(and)317 3207 y(convince)c(y)o (ourself)f(\(in)g(a)f(mathematical)h(way\))e(that)i(the)g(answ)o(er)f (is)h(tr)q(ue)n(.)317 3358 y(I)n(n)30 b(CMSC)f(250,)j(y)o(ou)e(studied) g(functions)n(.)53 b(F)o(unctions)31 b(can)e(have)f(inverses)g(pr)o(o)m (vided)j(that)f(the)317 3471 y(function)23 b(is)e(1-1)g(and)g(onto)l(.) 29 b(The)21 b(two)h(oper)o(ations)g(used)f(in)h(two)-6 b(')c(s)21 b(complement)h(is)f(\003ipping)i(bits)317 3583 y(\(call)e(this)g(function)h(\003ip)q Fg(\()p Fj(x)p Fg(\))p Fm(\))f(and)g(adding)h(1)e(\(call)h(this)g(function)h(add1)q Fg(\()p Fj(x)p Fg(\))p Fm(\).)317 3734 y(B)o(oth)g(these)e(functions)i (ar)n(e)f(1-1)f(and)h(onto)l(.)28 b(That)21 b(is)o(,)g(given)f(the)h(v) o(alue)g Fj(f)10 b Fg(\()p Fj(x)p Fg(\))p Fm(,)20 b(ther)n(e)h(is)g(a)f (unique)h Fj(x)317 3847 y Fm(that)d(it)h(is)e(mapped)h(fr)o(om)h (\(that)n(')-10 b(s)18 b(1-1\).)24 b(Also)l(,)19 b(ever)r(y)e(v)o(alue) g(is)h(mapped)g(to)g(\(that)n(')-10 b(s)18 b(onto\).)26 b(F)o(lipping)317 3960 y(bits)21 b(is)g(mor)n(e)g(ob)m(vious)n(.)27 b(A)o(dding)22 b(1)e(is)h(adding)h(1)e(modulo)i Fg(2)2419 3927 y Fh(k)2483 3960 y Fm(for)f(some)f(v)o(alue)h(of)g Fj(k)s Fm(.)317 4110 y(Thus)o(,)35 b(if)d(a)f(function)i(is)f(1-1)g (and)f(onto)i(\(i.e)n(.,)i(it)n(')-10 b(s)32 b(a)f(bijectin\))j(then)e (the)f(functions)i(both)g(have)317 4223 y(inverses)n(.)43 b(The)27 b(inverse)f(of)g(\003ip)r Fg(\()p Fj(x)p Fg(\))h Fm(is)f(\003ip)q Fg(\()p Fj(x)p Fg(\))p Fm(.)44 b(That)27 b(is)o(,)h(\003ipping)h(bits)e(is)g(its)f(o)m(wn)i(inverse)n(.)43 b(The)317 4336 y(inverse)20 b(of)h(add1)q Fg(\()p Fj(x)p Fg(\))g Fm(is)f(sub1)q Fg(\()p Fj(x)p Fg(\))p Fm(,)h(i.e)n(.,)g(subtr)o (acting)h(1)f(modulo)h Fg(2)2646 4303 y Fh(k)2689 4336 y Fm(.)317 4486 y(I)o(f)c(two)h(functions)g(ar)n(e)e(1-1)h(and)g(onto)l (,)i(then)f(their)f(composition)j(is)d(also)g(1-1)f(and)h(onto)i(\(pr)o (o)m(vided)317 4599 y(the)26 b(domains)g(and)g(codomains)g(ar)n(e)f (the)h(same)e(in)j(both)f(functions\).)42 b(Thus)o(,)27 b(add1)e Fl(\016)g Fm(\003ip)h(is)g(1-1)317 4712 y(and)21 b(onto)l(.)317 4862 y(This)g(means)d(the)i(function)h(has)e(an)g (inverse)n(.)25 b(The)20 b(inverse)f(of)h(a)f(composition)k(is)c(the)h (inverses)f(of)317 4975 y(each)d(function)h(in)g(r)n(everse)e(or)n(der) -5 b(.)25 b(Thus)o(,)17 b Fg(\()p Fm(add1)q Fl(\016)q Fm(\003ip)r Fg(\))2274 4942 y Fb(\000)p Fi(1)2385 4975 y Fm(is)e(\003ip)2604 4934 y Fb(\000)p Fi(1)2699 4975 y Fl(\016)q Fm(add1)2950 4934 y Fb(\000)p Fi(1)3044 4975 y Fm(,)i(which)f(is)g(\003ip)r Fl(\016)q Fm(sub1)q(,)317 5088 y(which)21 b(is)g(just)g(subtr)o(acting)h(1)f(and)f(\003ipping)j (bits)n(.)1917 5497 y(19)p eop %%Page: 20 20 20 19 bop 317 119 a Fm(F)o(inally)-8 b(,)20 b(since)e(add1)9 b Fl(\016)g Fm(\003ip)20 b(is)e(its)g(o)m(wn)h(inverse)e(\(that)h(is)o (,)h(\003ipping)h(bits)e(and)g(adding)h(1,)g(then)f(doing)317 232 y(it)f(again,)g(pr)o(oduces)h(back)e(the)g(same)f(number\),)j(then) f(add1)s Fl(\016)s Fm(\003ip)27 b Fg(=)e(\()p Fm(add1)s Fl(\016)s Fm(\003ip)r Fg(\))3239 199 y Fb(\000)p Fi(1)3359 232 y Fg(=)g Fm(\003ip)s Fl(\016)s Fm(sub1)317 382 y(The)e(only)g(par)q (t)g(of)g(the)f(\223)-5 b(pr)o(oof)6 b(\224)24 b(that)n(')-10 b(s)23 b(somewhat)f(w)o(eak)f(is)i(that)f(two)-6 b(')c(s)23 b(complement)g(is)f(its)h(o)m(wn)317 495 y(inverse)17 b(\(which)g(was)f(assume)n(,)h(r)o(ather)g(than)g(pr)o(o)m(ven\).)26 b(H)m(o)m(w)o(ever)-5 b(,)17 b(anything)h(even)e(par)q(tly)i(r)n(esem-) 317 608 y(bling)k(this)f(got)h(full)f(cr)n(edit.)317 758 y(S)o(ome)h(people)h(tr)q(ied)f(\223induction)-7 b(\224)-12 b(,)24 b(but)f(only)f(sho)m(w)o(ed)h(a)e(base)g(case)n(,)h (and)f(no)i(indication)h(of)e(ho)m(w)317 871 y(they)27 b(might)h(tr)r(y)g(to)f(sho)m(w)g(an)g(inductive)h(hypothesis)g(or)g (pr)o(o)m(ve)g(an)e(inductive)i(case)n(.)44 b(S)n(uch)28 b(an-)317 984 y(sw)o(ers)20 b(r)n(eceived)h(minimal)g(cr)n(edit.)1917 5497 y(20)p eop %%Trailer end userdict /end-hook known{end-hook}if %%EOF fs/www/class/fall2002/cmsc311-0101/Exam/exam_soln.html~0100664000077300017440000000323707576743073020411 0ustar cmsc311 CMSC 311: Computer Organization
computer organization
c m s c 311  
s p r i n g   2 0 0 2  

Exam Solutions

[Solutions]
Topic
Postscript
Posted
Exam 1 Solutions [Postscript] [Solutions] November 4
Exam 2 Solutions  
Summer 2002 Final NOT POSTED YET  

Web Accessibility

fs/www/class/fall2002/cmsc311-0101/graphics/0042775000077300017440000000000007541173433016233 5ustar cmsc311fs/www/class/fall2002/cmsc311-0101/graphics/buttons/0042755000077300017440000000000007541173433017727 5ustar cmsc311fs/www/class/fall2002/cmsc311-0101/graphics/buttons/Build.gif0100644000077300017440000000176307541173433021457 0ustar cmsc311GIF89a ̙fff̙̙̙fff3f̙̙fffff333fff3ffffff3fffff3f3f3ff33f33f333f333ff3f33f33f333333f3f333f3UD"wUD""ݻwwwUUUDDD""" 00@'ppp P$dH H < " !R, RQQQ>OKQ?I;QOQ3R LGKQ=' #Q1KJQQMƐQ PQ$QQ2QJJQҎBQIQ'1OO'2K+?NQP;I98BQ!l !$BHaISB?DDf\)(2iJAP:hRfPB%#D221NC`d0D#QXDxc, #l$J%(Gc~ \@!BHm(d4~Ģ .BR( 8̀#}Қ %*Vǎ8n Ie"\!&0 P Q0 UBk'S]yeBq_R he;fs/www/class/fall2002/cmsc311-0101/graphics/buttons/arrowrs.gif0100644000077300017440000000015307541173433022107 0ustar cmsc311GIF89a!,B mpλW1#Y">k'S]yeBq_R he;fs/www/class/fall2002/cmsc311-0101/graphics/buttons/arrowub.gif0100644000077300017440000000015507541173433022073 0ustar cmsc311GIF89a!,D {qXR#y؉8T^K_3J̦Y$ES;fs/www/class/fall2002/cmsc311-0101/graphics/buttons/arrowus.gif0100644000077300017440000000015407541173433022113 0ustar cmsc311GIF89a!,C 4Jox`}`ibŭiTfntMIh9Kfiʤ$7D%E3O;fs/www/class/fall2002/cmsc311-0101/index.html0100664000077300017440000004771307617504653016445 0ustar cmsc311 CMSC 311 - Main Page
computer organization
c m s c 311  
f a l l   2 0 0 2  

   
VISIT MEESH
  Meesh 311 Page
ADMINISTRIVIA
  Syllabus
PROJECTS
  Project 0
Project 1
Project 2
Project 3
EXAM
  Exam Dates
Exam Topics
Exam Solutions
OTHER
  Lecture Topics
Tutorials
Quiz
Definitions
Announcements

Exam 2 Information
Exam 2 is Monday, December 9, in CSIC 3117 (classroom) from 5:00-6:15. Closed book, closed notes, closed neighbor exam.
Final Exam Information

Final is Tuesday, December 17, in CSIC 3117 (classroom) from 4:00-6:00. Closed book, closed notes, closed neighbor exam.

  • Feb 2 Project grades are now included in your overall grade. The updated scores (if any) will appear on MARS in a day or two. Basically, I computed your project grade average, counted it 25% to your overall grade (75% was your exams), and recomputed cutoffs. 25% isn't a very large amount, so many grades stayed fairly similar. Recall that doing the projects doesn't guarantee your grade improves. For many, grades will stay the same. Also, recall that the higher your grade was, the better you had to do on projects to make that grade leap (so it was a little easier to get to a B- than to an A-).
  • Jan 15 It looks like I'm a little more backlogged than I thought (had some CMSC 214 things from last semester to fix up, so that took a little time). Anyway, grades should be ready soonish (for now, let's say by Sunday or Monday). For the purposes of the dean's office, I'm going to enter the D's and F's now (based on exam grades only), and fix that up once project grades are complete.
  • Jan 9 I'm basically back from vacation, and will be working on projects the next few days. I'll post something up once they're done, but I'm looking at sometime early next week to get done.
  • Dec 23 Grades should be ready in the next 8 hours, but unfortunately, project grades won't be ready before I have to head out of town tomorrow. I will submit your grades based on exams first.

    If you have a D/F (based on exams), I will submit them after your project grades are computed. However, if you receive an F, project grades may only help you to a D (I think I wrote that in the syllabus somewhere).

    I will try to get some work done through a bad Internet connection, but will be back in early January to finish the project grades.

    Note: accounts will disappear by December 30. If you need to save stuff, you should do so before then.

  • Dec 22 At this point, I'm hoping to have final grades ready by Monday evening. I should have some idea of cutoffs based on exams ONLY, but then, I'm also trying to get project grades completed as well. Once that's done, I should post something on the webpage, so keep an eye on that.

  • Dec 18 You should be able to pick up exam 2 around 1:30 on Wednesday. I will leave them with Kinga somewhere near the TA office (we'll put a note in the TA office, if she's elsewhere)

  • Dec 16 Stuart will hold office hours Monday at 1 PM, as usual. Kinga will hold last minute office hours on Tuesday at 1:30 PM.

  • Dec 14 Note: sllv and slrv are NOT on P2. They were added last minute, but for use NEXT semester, not this semester. So don't implement them.

  • Dec 14 Final exam is expected to be a combination of Exam 1 and Exam 2 material. Only new topic is interleaved memory. Should be asking a question on timing diagrams too. I will be in office hours at 1 PM Sunday. You should be able to pick up exam 2 then, as well.

    BTW, I haven't been reading email lately.

  • Dec 14 Sorry, got a little backlogged. Most solutions to Exam 2 now posted. Click on Exam Solutions on the left.
  • Dec 14 I will meet students at 1 PM on Sunday for review. You can pick up exams then. I will be posting solutions to parts 5, 6, and Challenge by about 4 PM. I should have some solutions to 4 up as well.
  • Dec 14 Primary output for "ori" corrected.

    For a variety of reasons, the current project is now OPTIONAL. In particular, I had to correct the primary output for the last line (I had digits transposed on the "ori" instruction).

    To compute your final grades, I will total the score from the first 3 projects (0, 1, and 2) and give a grade to the entire class (i.e., A, B, C). This will count 20% to your final grade. Note: doing P2 then helps because it adds more points to your project total (I will accepts P2 up to Friday of exam week).

    I will also compute your final grades due to exams only. I will take the higher of the grades computed by exams only and by exams plus projects.

    As long as you submitted P0 and P1, then I take the better of the two grades. However, if you do abysmal on exams only (i.e, get an F average), I reserve the right not to pass. I primarily want students who are just under the C cutoff to move up.

    If you really need the final exam grade, I would suggest studying for your finals, and trying the projects after the fact.

  • Dec 11 You should be able to submit now. I will be checking student emails off and on to see if there are "bugs" (mostly the output being incorrect). I have updated the printBin so it doesn't print out that extra line. There is a sample Makefile which you can use to help out.

    I should be in AVW 1151 around 1 PM on Saturday and Sunday. On Saturday, I will answer questions about the projects. On Sunday, I will answer questions about the final exam.

  • Dec 10 A NEW sample input is ready in the posting account. Drivers should be posted soon (it will basically read the input file from "sample.file" and then print out the "English" version of the MIPS instructions").. I will be re-reading some of the posted MIPS instructions in the project to make sure they look good (a student emailed me that a few instructions seem off). Read README.more in the posting account.
  • Dec 9 A sample input is ready in the posting account, which has an add and addi instruction. The actual primary should be ready by morning, but I may have it sooner. Check here for further notices. Read README.more.
  • Dec 8 The solution to the problem about equivalent flip flops (each flip flop can be implemented by another) is basically to draw a 2-state finite state machine representing the flip flop's behavior. For example, with a D flip flop, the D value is the inputs, and the "z" valus are the outputs of the flip flop.
  • Dec 7 More solutions posted. Click on link below. I will provide the MIPS instructions similar to that on the inside back cover of the book (at least, I think they're in the back of the book).
  • Dec 7 Some answers ready for practice exam. Some answers here. It's in Postscript. More solutions later.

  • Dec 6 Cache Tutorial and Tutorial from Spring 2002. Read "Finite State Machines". Skip Karnaugh maps. There may be some minor errors, so be careful while reading.

    I should be in AVW 1152 Sunday at 2 PM, if you have questions

  • Dec 6 Chapters to read: Chapter 3 (most of it), Chapter 7.1-7.3 (mostly 7.1 and 7.2) on "cache". The tutorial on finite state machines from Summer 2002 CMSC 311 webpage (I will have a link added soon, but I trust you can find it).
  • Dec 6 I will be working on a "Cache" tutorial this evening, which should answer questions in the middle part of the sample exam. I will post up the sample exam too. Finally, I should be able to get some answers to questions on the first part. The MIPS section, I will post sometime Saturday.

    I hope to have primaries up Saturday too. Check announcements later this evening for more info.

  • Dec 5 The description to "Load" now has the description of reading from and writing to a binary file.

  • Dec 3 P2 posted. There are some corrections to the assembly instructions. In particular, the $rs, $rt, $rd are currently being corrected.
  • Dec 3 Makeups for quizzes are at 2 PM on Tuesday, Thursday. On Wednesday/Friday, they are at 2:15. We will meet in room 1152 on all days except Wednesday, where we will meet in 1112.
  • Nov 28 Power outage all day Friday (29th) due to repairs in AVW.

  • Nov 4 Posted solutions to Exam 1. Click on "Exam solutions" on left. This is in Postscript. This is also in the posting account under the Exam directory.

  • Oct 30 Signed numbers in Register should use 2C. If you used other representations (such as signed magnitude), you can turn in the project a few days late (say Sunday), provided that you ALSO turn in the Register version with signed magnitude (give that version a different name, like RegisterSM).

    Also, you should have bit 0 be the least significant bit, and bit 31 (or whatever the size) be the most significant bit. Bits in registers are numbered right to left, not left to right.

  • Oct 26 The moment you've been waiting for! You can turn in Project 1. The primary only checks the Convert class, so if you have questions about Register, ask in class or email: clin@umd5.umd.edu.

    As announced in class, this means the project has 4 more days to be submitted, so you can turn it in by Thursday midnight for regular credit. Yes, I know that there is a 330 project due at the same time. However, this project has been out for at least a month. The ability to do projects without primary inputs and outputs is something you will need for 400-level courses (you can ask questions such as "if this is the input, is this the corresponding output?).

  • Oct 19 I just posted solutions to P1. I will hold office hours between 1-2 PM on Sunday, if you have questions for the exam. Stuart will have office hours between 1-3 PM on Monday as usual.
  • Oct 19 P1 is extended to October 23, 2002. Drivers should be up this evening (perhaps late-ish). Postscript solutions to exam should be up in ~chf11001/Exam.
  • Oct 13 P1 is extended to October 19, 2002. Drivers should be up Monday-ish.
  • Oct 5 Register specs up. However, they were written in a rush, which means small errors may appear. The files are currently not in the posting account, however, feel free to write them based on the specs. The files should be up this evening or Sunday.

    I plan to add one additional function to Convert. which will read in a series of 32 bit values from a binary file, with a given endian-ness. That should be up fairly soon.

    At this point, barring any inspirations, that should be it for P1.

  • Sept 30 OK, more functions in Convert. That should be it for that class.

    I will work on a Register class (for C++/Java) and try to have that ready tomorrow. Send email if you see anything that seems odd.

  • Sept 27 Some students are eager to start P1, so I've posted a few things to keep you busy for now. I will add a few more functions tonight and tomorrow.

    However, expect that there may be a few tiny problems, so read FAQ, etc. regularly. You have two weekends to work on this. It's not all that bad though.

  • Sept 21 To submit:
    ~chf11001/submit p0.tar 0
    
    Include a README file. Read HOW_TO_SUBMIT from the posting account: ~chf11001/Proj/P0/

  • Sept 21 You can put anything in the README including nothing. It's there in case you have some comments about how your project runs to the TA.

  • Sept 19 A student noticed the primary output doesn't match the description. According to the description, getLeftToken() should be left trimmed (though not right trimmed).

    As an additional extra credit, I would like getRightToken() to behave differently. It should look for the first real delimiter from the right, but NOT trim the spaces. Thus, if the string were "***cat***,***dog**", then the rightmost token would be "***dog**", and the rest of the string would be "***cat***".

    See FAQ.

  • Sept 19 g++-3.2 still appears to be broken, actually. YOU MAY SUBMIT now. Early due date is now moved to 11 PM on Saturday, Sept. 21. The bonus is 10% of the project worth. Ontime is 11 PM on Sunday, Sept. 22. Read the HOW_TO_SUBMIT. There's a driver and a main, that you need to copy over.

    NOTE: Only the latest submission counts. If you turn in an early and an ontime, then only the ontime will be graded.

    NOTE: The late policy is pretty generous. Up to 7 days late, at 2 points off a day.

  • Sept 19 g++-3.2 is back again. However, if you can get it to work with cxx -w0 -std strict_ansi, that will be fine too. Still getting primary ready.

    Read about extra credit in project FAQ.

  • Sept 18 Project due Sunday at 11 PM. Early due date Saturday at noon. Primary should be up by this evening or Thursday morning. Read announcements here for information on that.
  • Sept 18 Both versions of g++ appear to be broken. In particular, some library for g++-3.2 is missing. So, use cxx -w0 -std strict_ansi for now.
  • Sept 17 I'm creating a "definitions" page. Alas, it's not in alphabetical order. Click on "Definitions" under OTHER to the left.
  • Sept 15 Some students have asked more clarification questions, so those are now in a P0 FAQ (see P0 webpage).
  • Sept 15 If the delimiter has more than two characters, then the backslash only appears before the first character. Thus, if you have :: as a delimiter, the escaped version is \::
  • Sept 13 Note: g++ and g++-3.2 are different compilers. g++ is version 2.95 (which doesn't support namespaces) and g++-3.2 is the one that does support it.
  • Sept 12 Clarifications to project 0 are located at the top of project 0 webpage.
  • Sept 6 Project 0 is basically ready. You should be able to code now. However, there may be clarifications and corrections, so read the announcements for more info. Click Project 0 link.

  • Sept 6 Webpage just put up. Project 0 should be ready pretty soon. There will be a note when that happens.

  • Web Accessibility

    fs/www/class/fall2002/cmsc311-0101/index.html~0100664000077300017440000004654007611307735016634 0ustar cmsc311 CMSC 311 - Main Page
    computer organization
    c m s c 311  
    f a l l   2 0 0 2  

       
    VISIT MEESH
      Meesh 311 Page
    ADMINISTRIVIA
      Syllabus
    PROJECTS
      Project 0
    Project 1
    Project 2
    Project 3
    EXAM
      Exam Dates
    Exam Topics
    Exam Solutions
    OTHER
      Lecture Topics
    Tutorials
    Quiz
    Definitions
    Announcements

    Exam 2 Information
    Exam 2 is Monday, December 9, in CSIC 3117 (classroom) from 5:00-6:15. Closed book, closed notes, closed neighbor exam.
    Final Exam Information

    Final is Tuesday, December 17, in CSIC 3117 (classroom) from 4:00-6:00. Closed book, closed notes, closed neighbor exam.

  • Jan 15 It looks like I'm a little more backlogged than I thought (had some CMSC 214 things from last semester to fix up, so that took a little time). Anyway, grades should be ready soonish (for now, let's say by Sunday or Monday). For the purposes of the dean's office, I'm going to enter the D's and F's now (based on exam grades only), and fix that up once project grades are complete.
  • Jan 9 I'm basically back from vacation, and will be working on projects the next few days. I'll post something up once they're done, but I'm looking at sometime early next week to get done.
  • Dec 23 Grades should be ready in the next 8 hours, but unfortunately, project grades won't be ready before I have to head out of town tomorrow. I will submit your grades based on exams first.

    If you have a D/F (based on exams), I will submit them after your project grades are computed. However, if you receive an F, project grades may only help you to a D (I think I wrote that in the syllabus somewhere).

    I will try to get some work done through a bad Internet connection, but will be back in early January to finish the project grades.

    Note: accounts will disappear by December 30. If you need to save stuff, you should do so before then.

  • Dec 22 At this point, I'm hoping to have final grades ready by Monday evening. I should have some idea of cutoffs based on exams ONLY, but then, I'm also trying to get project grades completed as well. Once that's done, I should post something on the webpage, so keep an eye on that.

  • Dec 18 You should be able to pick up exam 2 around 1:30 on Wednesday. I will leave them with Kinga somewhere near the TA office (we'll put a note in the TA office, if she's elsewhere)

  • Dec 16 Stuart will hold office hours Monday at 1 PM, as usual. Kinga will hold last minute office hours on Tuesday at 1:30 PM.

  • Dec 14 Note: sllv and slrv are NOT on P2. They were added last minute, but for use NEXT semester, not this semester. So don't implement them.

  • Dec 14 Final exam is expected to be a combination of Exam 1 and Exam 2 material. Only new topic is interleaved memory. Should be asking a question on timing diagrams too. I will be in office hours at 1 PM Sunday. You should be able to pick up exam 2 then, as well.

    BTW, I haven't been reading email lately.

  • Dec 14 Sorry, got a little backlogged. Most solutions to Exam 2 now posted. Click on Exam Solutions on the left.
  • Dec 14 I will meet students at 1 PM on Sunday for review. You can pick up exams then. I will be posting solutions to parts 5, 6, and Challenge by about 4 PM. I should have some solutions to 4 up as well.
  • Dec 14 Primary output for "ori" corrected.

    For a variety of reasons, the current project is now OPTIONAL. In particular, I had to correct the primary output for the last line (I had digits transposed on the "ori" instruction).

    To compute your final grades, I will total the score from the first 3 projects (0, 1, and 2) and give a grade to the entire class (i.e., A, B, C). This will count 20% to your final grade. Note: doing P2 then helps because it adds more points to your project total (I will accepts P2 up to Friday of exam week).

    I will also compute your final grades due to exams only. I will take the higher of the grades computed by exams only and by exams plus projects.

    As long as you submitted P0 and P1, then I take the better of the two grades. However, if you do abysmal on exams only (i.e, get an F average), I reserve the right not to pass. I primarily want students who are just under the C cutoff to move up.

    If you really need the final exam grade, I would suggest studying for your finals, and trying the projects after the fact.

  • Dec 11 You should be able to submit now. I will be checking student emails off and on to see if there are "bugs" (mostly the output being incorrect). I have updated the printBin so it doesn't print out that extra line. There is a sample Makefile which you can use to help out.

    I should be in AVW 1151 around 1 PM on Saturday and Sunday. On Saturday, I will answer questions about the projects. On Sunday, I will answer questions about the final exam.

  • Dec 10 A NEW sample input is ready in the posting account. Drivers should be posted soon (it will basically read the input file from "sample.file" and then print out the "English" version of the MIPS instructions").. I will be re-reading some of the posted MIPS instructions in the project to make sure they look good (a student emailed me that a few instructions seem off). Read README.more in the posting account.
  • Dec 9 A sample input is ready in the posting account, which has an add and addi instruction. The actual primary should be ready by morning, but I may have it sooner. Check here for further notices. Read README.more.
  • Dec 8 The solution to the problem about equivalent flip flops (each flip flop can be implemented by another) is basically to draw a 2-state finite state machine representing the flip flop's behavior. For example, with a D flip flop, the D value is the inputs, and the "z" valus are the outputs of the flip flop.
  • Dec 7 More solutions posted. Click on link below. I will provide the MIPS instructions similar to that on the inside back cover of the book (at least, I think they're in the back of the book).
  • Dec 7 Some answers ready for practice exam. Some answers here. It's in Postscript. More solutions later.

  • Dec 6 Cache Tutorial and Tutorial from Spring 2002. Read "Finite State Machines". Skip Karnaugh maps. There may be some minor errors, so be careful while reading.

    I should be in AVW 1152 Sunday at 2 PM, if you have questions

  • Dec 6 Chapters to read: Chapter 3 (most of it), Chapter 7.1-7.3 (mostly 7.1 and 7.2) on "cache". The tutorial on finite state machines from Summer 2002 CMSC 311 webpage (I will have a link added soon, but I trust you can find it).
  • Dec 6 I will be working on a "Cache" tutorial this evening, which should answer questions in the middle part of the sample exam. I will post up the sample exam too. Finally, I should be able to get some answers to questions on the first part. The MIPS section, I will post sometime Saturday.

    I hope to have primaries up Saturday too. Check announcements later this evening for more info.

  • Dec 5 The description to "Load" now has the description of reading from and writing to a binary file.

  • Dec 3 P2 posted. There are some corrections to the assembly instructions. In particular, the $rs, $rt, $rd are currently being corrected.
  • Dec 3 Makeups for quizzes are at 2 PM on Tuesday, Thursday. On Wednesday/Friday, they are at 2:15. We will meet in room 1152 on all days except Wednesday, where we will meet in 1112.
  • Nov 28 Power outage all day Friday (29th) due to repairs in AVW.

  • Nov 4 Posted solutions to Exam 1. Click on "Exam solutions" on left. This is in Postscript. This is also in the posting account under the Exam directory.

  • Oct 30 Signed numbers in Register should use 2C. If you used other representations (such as signed magnitude), you can turn in the project a few days late (say Sunday), provided that you ALSO turn in the Register version with signed magnitude (give that version a different name, like RegisterSM).

    Also, you should have bit 0 be the least significant bit, and bit 31 (or whatever the size) be the most significant bit. Bits in registers are numbered right to left, not left to right.

  • Oct 26 The moment you've been waiting for! You can turn in Project 1. The primary only checks the Convert class, so if you have questions about Register, ask in class or email: clin@umd5.umd.edu.

    As announced in class, this means the project has 4 more days to be submitted, so you can turn it in by Thursday midnight for regular credit. Yes, I know that there is a 330 project due at the same time. However, this project has been out for at least a month. The ability to do projects without primary inputs and outputs is something you will need for 400-level courses (you can ask questions such as "if this is the input, is this the corresponding output?).

  • Oct 19 I just posted solutions to P1. I will hold office hours between 1-2 PM on Sunday, if you have questions for the exam. Stuart will have office hours between 1-3 PM on Monday as usual.
  • Oct 19 P1 is extended to October 23, 2002. Drivers should be up this evening (perhaps late-ish). Postscript solutions to exam should be up in ~chf11001/Exam.
  • Oct 13 P1 is extended to October 19, 2002. Drivers should be up Monday-ish.
  • Oct 5 Register specs up. However, they were written in a rush, which means small errors may appear. The files are currently not in the posting account, however, feel free to write them based on the specs. The files should be up this evening or Sunday.

    I plan to add one additional function to Convert. which will read in a series of 32 bit values from a binary file, with a given endian-ness. That should be up fairly soon.

    At this point, barring any inspirations, that should be it for P1.

  • Sept 30 OK, more functions in Convert. That should be it for that class.

    I will work on a Register class (for C++/Java) and try to have that ready tomorrow. Send email if you see anything that seems odd.

  • Sept 27 Some students are eager to start P1, so I've posted a few things to keep you busy for now. I will add a few more functions tonight and tomorrow.

    However, expect that there may be a few tiny problems, so read FAQ, etc. regularly. You have two weekends to work on this. It's not all that bad though.

  • Sept 21 To submit:
    ~chf11001/submit p0.tar 0
    
    Include a README file. Read HOW_TO_SUBMIT from the posting account: ~chf11001/Proj/P0/

  • Sept 21 You can put anything in the README including nothing. It's there in case you have some comments about how your project runs to the TA.

  • Sept 19 A student noticed the primary output doesn't match the description. According to the description, getLeftToken() should be left trimmed (though not right trimmed).

    As an additional extra credit, I would like getRightToken() to behave differently. It should look for the first real delimiter from the right, but NOT trim the spaces. Thus, if the string were "***cat***,***dog**", then the rightmost token would be "***dog**", and the rest of the string would be "***cat***".

    See FAQ.

  • Sept 19 g++-3.2 still appears to be broken, actually. YOU MAY SUBMIT now. Early due date is now moved to 11 PM on Saturday, Sept. 21. The bonus is 10% of the project worth. Ontime is 11 PM on Sunday, Sept. 22. Read the HOW_TO_SUBMIT. There's a driver and a main, that you need to copy over.

    NOTE: Only the latest submission counts. If you turn in an early and an ontime, then only the ontime will be graded.

    NOTE: The late policy is pretty generous. Up to 7 days late, at 2 points off a day.

  • Sept 19 g++-3.2 is back again. However, if you can get it to work with cxx -w0 -std strict_ansi, that will be fine too. Still getting primary ready.

    Read about extra credit in project FAQ.

  • Sept 18 Project due Sunday at 11 PM. Early due date Saturday at noon. Primary should be up by this evening or Thursday morning. Read announcements here for information on that.
  • Sept 18 Both versions of g++ appear to be broken. In particular, some library for g++-3.2 is missing. So, use cxx -w0 -std strict_ansi for now.
  • Sept 17 I'm creating a "definitions" page. Alas, it's not in alphabetical order. Click on "Definitions" under OTHER to the left.
  • Sept 15 Some students have asked more clarification questions, so those are now in a P0 FAQ (see P0 webpage).
  • Sept 15 If the delimiter has more than two characters, then the backslash only appears before the first character. Thus, if you have :: as a delimiter, the escaped version is \::
  • Sept 13 Note: g++ and g++-3.2 are different compilers. g++ is version 2.95 (which doesn't support namespaces) and g++-3.2 is the one that does support it.
  • Sept 12 Clarifications to project 0 are located at the top of project 0 webpage.
  • Sept 6 Project 0 is basically ready. You should be able to code now. However, there may be clarifications and corrections, so read the announcements for more info. Click Project 0 link.

  • Sept 6 Webpage just put up. Project 0 should be ready pretty soon. There will be a note when that happens.

  • Web Accessibility

    fs/www/class/fall2002/cmsc311-0101/Practice/0042775000077300017440000000000007574457622016200 5ustar cmsc311fs/www/class/fall2002/cmsc311-0101/Practice/prac.e2.f02.ps0100664000077300017440000020072507574457276020372 0ustar cmsc311%!PS-Adobe-2.0 %%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software %%Title: prac.e2.f02.dvi %%Pages: 3 %%PageOrder: Ascend %%BoundingBox: 0 0 612 792 %%DocumentFonts: Utopia-Regular %%EndComments %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips prac.e2.f02.dvi %DVIPSParameters: dpi=600, compressed %DVIPSSource: TeX output 2002.12.04:1620 %%BeginProcSet: texc.pro %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3 1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{ rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B /chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{ /cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{ A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse} ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17 {2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{ 1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop} forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ /Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) (LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end %%EndProcSet %%BeginProcSet: 8r.enc % @@psencodingfile@{ % author = "S. Rahtz, P. MacKay, Alan Jeffrey, B. Horn, K. Berry", % version = "0.6", % date = "1 July 1998", % filename = "8r.enc", % email = "tex-fonts@@tug.org", % docstring = "Encoding for TrueType or Type 1 fonts % to be used with TeX." % @} % % Idea is to have all the characters normally included in Type 1 fonts % available for typesetting. This is effectively the characters in Adobe % Standard Encoding + ISO Latin 1 + extra characters from Lucida. % % Character code assignments were made as follows: % % (1) the Windows ANSI characters are almost all in their Windows ANSI % positions, because some Windows users cannot easily reencode the % fonts, and it makes no difference on other systems. The only Windows % ANSI characters not available are those that make no sense for % typesetting -- rubout (127 decimal), nobreakspace (160), softhyphen % (173). quotesingle and grave are moved just because it's such an % irritation not having them in TeX positions. % % (2) Remaining characters are assigned arbitrarily to the lower part % of the range, avoiding 0, 10 and 13 in case we meet dumb software. % % (3) Y&Y Lucida Bright includes some extra text characters; in the % hopes that other PostScript fonts, perhaps created for public % consumption, will include them, they are included starting at 0x12. % % (4) Remaining positions left undefined are for use in (hopefully) % upward-compatible revisions, if someday more characters are generally % available. % % (5) hyphen appears twice for compatibility with both % ASCII and Windows. % /TeXBase1Encoding [ % 0x00 (encoded characters from Adobe Standard not in Windows 3.1) /.notdef /dotaccent /fi /fl /fraction /hungarumlaut /Lslash /lslash /ogonek /ring /.notdef /breve /minus /.notdef % These are the only two remaining unencoded characters, so may as % well include them. /Zcaron /zcaron % 0x10 /caron /dotlessi % (unusual TeX characters available in, e.g., Lucida Bright) /dotlessj /ff /ffi /ffl /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef % very contentious; it's so painful not having quoteleft and quoteright % at 96 and 145 that we move the things normally found there to here. /grave /quotesingle % 0x20 (ASCII begins) /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash % 0x30 /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question % 0x40 /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O % 0x50 /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore % 0x60 /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o % 0x70 /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef % rubout; ASCII ends % 0x80 /.notdef /.notdef /quotesinglbase /florin /quotedblbase /ellipsis /dagger /daggerdbl /circumflex /perthousand /Scaron /guilsinglleft /OE /.notdef /.notdef /.notdef % 0x90 /.notdef /.notdef /.notdef /quotedblleft /quotedblright /bullet /endash /emdash /tilde /trademark /scaron /guilsinglright /oe /.notdef /.notdef /Ydieresis % 0xA0 /.notdef % nobreakspace /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen % Y&Y (also at 45); Windows' softhyphen /registered /macron % 0xD0 /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown % 0xC0 /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis % 0xD0 /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls % 0xE0 /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis % 0xF0 /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis ] def %%EndProcSet %%BeginProcSet: texps.pro %! TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]/Metrics exch def dict begin Encoding{exch dup type/integertype ne{pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def} ifelse}forall Metrics/Metrics currentdict end def[2 index currentdict end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{ dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[exch{dup CharStrings exch known not{pop/.notdef/Encoding true def} if}forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def} def end %%EndProcSet %%BeginProcSet: special.pro %! TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N /vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N /rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N /@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{ /hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B /@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{ /urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known {userdict/md get type/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup length 20 add dict copy def}if end md begin /letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{ itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack} if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{ noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{ Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale }if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState save N userdict maxlength dict begin/magscale true def normalscale currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts /psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR/showpage{}N/erasepage{}N/copypage{}N/p 3 def @MacSetUp}N/doclip{ psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict begin/SpecialSave save N gsave normalscale currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR }{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N /@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X /yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end %%EndProcSet %%BeginFont: Utopia-Regular %!PS-AdobeFont-1.0: Utopia-Regular 001.001 %%CreationDate: Wed Oct 2 19:10:38 1991 %%VMusage: 32987 39879 %% Utopia is a registered trademark of Adobe Systems Incorporated. 11 dict begin /FontInfo 10 dict dup begin /version (001.001) readonly def /Notice (Copyright (c) 1989, 1991 Adobe Systems Incorporated. All Rights Reserved.Utopia is a registered trademark of Adobe Systems Incorporated.) readonly def /FullName (Utopia Regular) readonly def /FamilyName (Utopia) readonly def /Weight (Regular) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /Utopia-Regular def /Encoding StandardEncoding def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /UniqueXX 36552 def /FontBBox{-158 -250 1158 890}readonly def currentdict end currentfile eexec fa444f2716d92b815f58ca9049c815358e22e32e73a3e6a653c538ee56873363 67713b8cab082730570f5b5efcf34c2cdfb6f8dd2b7905a37c1924a2424c16e8 711db76501f564506b0f45fef10d83c3e3c6df2dc0af7802e7f42c81b4243697 ca09088b868d983e79e4b2c3e17321993cc8837921fd4ff7b92a1294c5ba33e6 8fd40e63df624b51865721e034f71bf57bee0e0c2a9c169c7a626496540d45db 585d2bc93f83e6829eacb859a194d7a57904cfae75e6188c7121003ae40153f0 0fe6fb52f339e72d4aef38469328465a3bf0ca1ef58dfb447612eef4ada248e3 ca525b0884971b85099d73538152affcad51d03eb4060a5c580f453ee78e5c4b 991f77c6e9600c135395d56335a7c3a75c0341979d6b404ee496214a5d20ae06 e17d80d37bd3540b8fe913bae1674afe37d0c41e3d9836a7b5147be32f9ba01a df1a73b89d30bb595a4b279032e37c8230b6d4933065947c3e9150d2c7c4d439 d60197eb69991ef059edf886ec0bdd28158a71a2df96dcb67fc0bf81c34cf27e 12d6ec950a75993af99fbb040af595134198151e7361672d8538cfadb4716785 dbd48da442ccc911ae9157b14e433559dba1a1c5619e99b57274d6998eeca3a4 7e804d8fe3a664f39f33237831385949a230a21e52a2dda733f2f89b02ef4ce2 5d603c9bd2f8e4c0443070940f0380dd1ac60ff462a9a71965a79d787e0711df 0a69bd86a4846965ac6c77f2e1699c4620c1bd9f5b2263e13a2213631c55f7ab cf60d2e63a7830d5011d9b9934bcee2103f4a5d56942ce0f590a15dab480e5e5 723afc8e1d8d96f3e0d8629b88ee477ea6cb8121b0adddf20405f8a32756004a 8a59b2cf922a6dc0747bc15e99079aa12ac0d9fabf8b47c5a61ca5268e01317e 1f0a38c468ffea597a392ae3399daf7c03126987750258b5e077d703cdbe05b9 a5fc4d80e8551c2c06a2c579272877fd462fac6569a7a9f964797df79628ba7f f77447fc2aefb25089ce946e0aa5c5ff21370f0cf84d8e2affa8b30891081b16 6fb86fdfe65e7e02ee551c6b3e2e324cf7e18664883dc538018ec8cadf7093f4 a13708013d6ca2afdf644c0155342917c2725598fcafddaf8807200682fcf04a 4efd5919c21ed2ec2f7951c2db953ed292a54783f5c541bca68d305b05df5c5c f17b9af31035dd8a77ed8b54d4de7d684f54c58a28f0dc55e7c692cfe444216b 18751c24ec1c8a00a5cbd458a0ad54e7c13f26b4c4257fd992fbd1338845fc69 6b97a2ee6a4d4f03fd387e745eeb8e97eb67e40bacbdf1d6c08e9fa2e317d30a c4234559096affd5b2e65600d083ceb0bf09f6c2bc3af8cc00ff5e91aeda4c82 320fb38c437df9dfc5e0b2ae2a80c35b1f180872d18617a48b118914a9aa4b53 ff57f329d2a63f1ce7610399e8d65a00b58f4f7d05f7e46270f6572b2601547f f3414db6bfc5905df0093102be959b4f1928ffe29907c31002ffb9146594a29e 0e16fba9001f0a71d2b85ac48b7ae6e7c736c6b29d3f58d5acc6fb82b1d1b754 ffb26a9642215861570e72f74f17c92641a795ae1918dacd54ecac51f75e060a 7a4cff21863b4524917b756664264b3c74150bc7238b1d5b2261a2ad18262a07 708799d9948d6217bcb423e67b1864381683aa06e35cdc60a57d9b7e9349e2cc 71911a0fa7dd60a2ae8edd0d34a23dde422c4040ffd3bb82a4aef63b9a787cd0 3593ee11bd953888aca122ae5b0aa22aa29cb0b30f7ac7c7cb5d045bc640a82d baa1b5a2d4b93eaa0de6cb59dc2b327eddca1d059e0bf58efbea7bb5ac26919e 4bc6876bcaed5dcb2ef39f1aa8ee6396fcdeee15f4be56d723abd366444817c6 b0e1c9f7328e41c3fc8af463252d2d2d6f3b85a039b6fc0ffe1e258e60c167b3 4ce9c38201c812b1a690124b8a3d04ab545887fe7a20100a84f9cd1a1784d9e1 30b3dcd4340f32f4578998cdbc99ab89d7cea83c2a2458a250e6d08f6b6594a4 be2e55eafbd3cb9b31f099d3e4eefd5a40c731402e5b51cd068a2eab68c7c63d 8977595eb25aef0ecdf6d93fada40da1bbaa394102354a12018ca8638879f0dd 20a098234c71b9407fde0d0c0dc1ea6cf00e58c3a1629b2103a40ec2e34a1490 cea746e697c7a4fbdb82c06b539cbb7b947afd7f636c50e55b1d71daf2e62187 d674671b92ac94c58bdd6dd0043e90aacac425756b3cbf93cf292a0c40adf2de 81364c50ee52435b31ab448247bf09d6a0efb4feac15746c93c00f4bc0cc7ef7 78454a1e1fd7278a318f9b49999d23aa94c1d701a42b39e56de96c0e872977af ec186508892a595af02de1afdeee2d82fdcf7c1990d1883abc9e5a80e38929a7 907f03cfc3f88989b77983df1d195d76ec6ac41e62124aba3c9e16191e98b1a6 cc389e9c9b13d974343a5df4bd2b4a8ac5de573d57d8965866587f36243e53bd 8fb86c814aaf4a14a019c9cec0c192561b2df773b92475906ffbbb859edb9f9c e8db2aa514556532dd3ccb54d3d40aa985dc18b3b3a2c3b6e442bf31f10e6394 b532008d9a07a45b94774acc953ad4d3048460ea9011897338f4b871311ecc87 7aa89c4c417ff9aa13232560fd3fd20d240627cdc3d6dde1d0a03deab202e01c e34455b56a357f386dc8b9a017afcb16e17c13871ecbe52cec7fbaa3043842d5 edd0a83e7f3336b0b85e3e0fbeee8f3d3a15f129f354754c9eb5f293583ae3bc fc109a3578ef055f2878c30c34066380e3a776c862ca9e504ea49f6fabfaede6 b5b522adbb70685f4dfc4765bc793759ee206b5ab5181be7929b47eab29b57e3 52b51b45c1c50256e8892456444ba95efae0153f52546cfbd9820e74c16e875e 9e7d976ab123583396c7e4e057bf3820c4108211b9ba2afd0cfb80d2f8a213f6 76431d3e9fdc33db264894728eab6f56f1b4ce49cb036a4fb33262e7f3dede94 d41133314aec7f1f27a0872afe6076e4e2b7d135278f48541efed38c5a9784b6 449dc7f2b5719f6beddd2a4d92b6ec0d2679216e5698b4c033e07e886cdcad9d e14907b01f6d3973a621e839837ab45ee1fc01b991c12535cf9bf81ed19167fb 0fa5ce2b0c05a750c2540e7d02015bc81f01f2960f8d28de59c99cfb50132566 de653fcea13161a33de1b6dae15974c08c1c41502cc4e7648e3a88475ecbec3a e1294a53a585c8f848de04506ffa42213030dfee4d55dc3d847f1680659fcff6 b32933784ed3e01bd0532ccf26068d8eb988ef6a5a88b156db922ac9c14d69bd b2d60cf6c97539fec16dc841a70ac676f41c5e45b3d9f2021e43da33f15aee79 37588e8a5670eb9bca739185b57e60207dc0d98bf470859b94b170f45d2121b5 3beb1e1fedd52b9947928fac0fc8c78039da6627122fa7c4d6c1c00d138ffed1 0858c763ce47fbce4e8b0080799f8805c83fcf4a596def299974b3d9cd77feb2 9bcdc7e05f524b2a16aafba95eeeac79e0037636be516106fea3a2e2f4776b9e 66e2e457c0a27949e70965a0491365add82586e52cadd61147943cc6c1e6b003 b841794ae126004ddf0ccd3f0d0ab645b6fa3c36ef4695b6ca5730be97243476 ec02c2ca7365fa666b38fcc29e5cc57f9b7e5d14df6ea3a08bca66c5d873dd41 4d816b1fddc6b634b9935c65f61976452b6575ae3ade4cd9d9ff7c5bb7fb54b4 f1a1b1c7ea3d87315c814ce4c0b31ea0681edb4e77f027f20cd8774079650bba f76db67974e8a7dfa58c52ba94d855760f919df76aef8adc3ed6af4a65088711 1a9843f64bbb8257afcf78b5ad07dedcfe9b49df080be239f144fd894ee6d13b 578c0ff4e7e323b31afb3808ae4159439e5a66150f0f0357e4d23371d0630c6e 24841c486e2507843e37cfc81233343f7c9c8c260efddaf09a9f160f7d1c0264 5b9a201c1a506b1fa0698976873d0cc62901119f81c42d87a2f1c15713e0138c 5f92925161b8470bf3cc4754257591db7bd172b0a6a0911f28d4e6c820246bb3 fb48d6066651493c2fd3734f91534b3d51a450c23d3b1e3b5756c5739800ee43 55646df43919be23d9fa51d00cbb017148ed98476053c13d34b4a0d9aa00a5d1 80a641ee4e1fe29ac0ba093aac35a283242d0e283ce43227584736882f4b74d8 c6c57a9445b2f0fdbb6983b4c0df83dfa4c6e598d28515ce6918ceb3b58d8ae5 6eaa52389253212dc842ace8434ad88be7cf024763965e5b56b380917b2c432f 15ff1b4bdda850abbe554265bcc54f4014e423c992ee85b291acbcf9b87f5286 40902d0983077666c4b58d2b825bd91451282e085443633d9dc9fbc5d75a7fc5 9b0d90a93c78181a50ecfc484159564bfef2c01c50652a60b4fad30938626548 af4089e0c8b293359b7b41eb7c76ed13aec8493229cac28b36f3dc3dd4815f2a b3d44ea76c173108ec80ed39f33ed82f019c968a2d6fd296a6d2da8b6949f4f1 28cfefc4da00eb6f6db81bcf2c692df0dea25f4dba35e7f59d478a395366aaf1 11b0aecab39ddc944e7edabfd4e3036de3e5d6b2213444e0b615b26c69c27ff9 80b9eee659d97bc50ec0db9f2d847e33309f659200bd15a75bc469c13b4646ad 08f3ec445be0b6ac9ad3c08e97ea3c8c9c894691e213d4b01a923865863aba37 0e5abd6f707c2e6f23094d22d593aee969118594121ec2c5d4a6615d00e02819 7608c1acceae835c011bcdf50dda59803e9cd5ac9c43bba60e3ad3cd53420435 f7f21179b6f417d070273a34671c69238f339adb3d76d2f5c37e25976ddbc894 6233a9213930b4f162b614fbd015e45ee3b8415845e1d7ac3b1eba04214e0941 64173acdd6e63f940e6720cd6c6464675c441769d98f9184fc2d7ee852ce8207 bc463c7c2fbc607debe01601779c3d66bc04b380723cb0a1068571b084dca660 f1c6b8b686769bf30bb16f7b3dca5b094cd030545c03169c4be597c8f670e542 8e273e2a701c09dd1b045da4ad2444e5478c1f59f29c20baa0970b1191dec55a 294cee9acdde9197cba24a3898e5e0bda91f1886b0e2bf0b947620f39ff1b680 d4d61f6fb0e72bd8b0ea4844ed49e1474b9447da9d6d0aac8815fdde692db733 a8efeff329ab0fed6d56f11cee4b59553cdede340b51bc505a572d52c757472d 101e48b8c7098dc460ebd48ea102843a33c41b26b15b37279b854a7e3e13d361 4f4cacac0ed0f50f906fe5409e7844400c8d66f5617e19a86924a0ab8b0ffa8a 237e6eaa11922c0e34fb0fd1711f217f9c895e121e3d1f87f846350bd9b4adfe 822d40e023a49c4c4547f741fe2cc9f51aa2b27de7039da9526b22d5cf2d69b5 1cedda168f4d96b3ed84c63370f98442cd2416ec9db18cb160eadc84d64660d9 674a0318b6e940505c19d9568c83768b3aa2d4fa13c0a3756bf43a2aa42d2a41 46478580e0c88d2b1578898052c216df4c7d2fc3711281d4daf8ee22ed9905bd 673a5c79da2993f1671053fa4126dcbdf67e57e3a9d00da81e12a4944be7635d b276948a921721774441ff6877b731bd974ebf8d1f713aa2a429d2c6cc6cf5d5 de1bbcffd7b7bd2a043345b291d6656f5cf6e1afc945d3f216504889090112fd 62608aef89a1c72aa19cb7f5ca06ab335e8db4895f1f95d5f0d1d04666ad5e86 b70426aca3ac95c416b93d4f5481fb2a9b658b035211e525817d13b31f4e01ea eb8c4fbd74ce764211e4d150e052b87e0491f35d4304965dc23fb76f17b43999 6bd92640db864fadf64d0aff680e8041328b1b9ee834fe73328fafdcc4315254 3a57288cc0e69fac766c4f06ffc3f9ad1ed443d86814ce5d74b07f97ab755fe0 c8128662d8803bde17bb3d296e42a58a85865ae936e44bd35115ff0f236e809a be92c2630c9ed6657dca5919a940748cae5455182454a92ed6d8d95e7bd121a1 04d906b3971f44730d4129e03c392747c2f4bc2f90e0a739071f2850fddcdef7 9af841ca8a53a67568a2f65ba84099e94697d6ea34100b34e52342932ae643db 3dd94da1b817763980d9a974e6199aae11b20dc77e7752157a1c05588fa9fd1a 279c522632349c844b199de3447da95c7518e5e21136a5a421f9fb0937023912 2d0030083bb738d1204462e4ac328e0e7503a085f1736e465981dcaee5506b4c c1ec0dfb5742ef0fb6eab66ef7165f321bc6640d70f0ebf5211c728ed8b44563 da1b28cf8a7d23c2f918602dd665c9a0e5f9182c793cce4ef5f8d96166cf4669 41d603209f034658052323d68795e84f6d144c8c5c82c460b49595a17ddb5ad0 c092c76aa1e1d420db40ccd344a89cc5f5ebcb39343fb3a7e55a734da0e270fe bd4e865a3fbc8064b49ea0509fdbef0d262f4a4332e04ae1a1409795b4ae330b 73777cc26715521567328c4a66fa151c3d9d22f3c29eb76abfb5664172447ab5 85bc68add14a73f2a38f8878aff4e894b2b0c252756db6d6b122b98752c0140b 040338a4e018cd3b7326dbd8e569eb03e12849124c049422591aa1b8458f4cd7 fd9338a09eaee7a25f394cd1358d03d5db4b8781b9fe19d80f492fd5e2b140f3 c1dc504a1cdda0b64a8d846de22f9b44e7c2854bc1b78b90ee5e8ef08e407e61 3bb30c93b25ba5156ce6263c5cc553bd3eb454eca230947924816e78bb7f7a94 7b9726cbdc0e70ec6b15c267c8a48ef33d2effb1999e262b5aa96b8f0a793db3 1d5e979f33c219f2a27afd38424f23384bcf27df98b7f84d2cb1bed210f918f5 9a021e709eb3d620a446df116dd15d77a564d197ab8fce19067e7f3de6eeaac8 dde96f2ae4aa8d3e938c8c15b972d41ab49d975b359af155273a9b34921a5019 dc2e8b8f8b291929a75f7b457e088acb6faba902d083cde15796cdd07a1d3990 786016be648bdb4bdaf73527a84c2ebda9c8c878a19b53e278cb480263a14dd6 75b6681a3a149ecbf9f1a1e1e4d514d690f7af1125f2aabccb62cb1f33e1da7d 4c5ca201c9eae46ae7555c2f2a2f19345b9c2a454438953c23937159c5c9b92f 8222754ac7339384d14fe0adf32f5e0ee30b59819d972732cc3301e580c59fbc b3d0377b8f276516a1d6ed27df905c2508fd3f9b84f4ba00d186110f9e552a12 c2a60335340c7845d34f339c0c1139421d678c03e068636c58caa7d3c4bf0b17 e0cd96c76f22879988bcae9b298b7d494f7cd29d9d45215479a701bbe75ea1ff 83142c867db5806aa899429893a2d39291470cd08b2106f99bbe5bd4fa2aa7a4 8db20e53149ca378b6d36f6399e8400ae111241f20960e47c7bc41d181ae803f 00d5ff50634c2bd169c75fba4a21ab23ebd7fe2d2d9bc30d110e44c066de7f8e edd8bee39b875b3f135d01e7befa3f3a0f48bc6f4a2666fd92eee63a9989f2dc 09bee9a4c048fbadf75c9ef7545e7c22420fd7d971c7c400187efb573743d8a0 3b9aff131a01d41ed629a8cdf1f0b3ad55393ea502c6ad317f78e19a802d2c3c dd67ce1d684b027ae6bc0da4f4e18b26647afb50eb2f85a2b73a001b34d8f85a 1d5884442e45dac1e437f64e23bfcbb162a4eccdb4e1823cb025e1828892f23d 6df885220ab72776c9e82eba1bc721f1704f91315705f8f30b707b9caa174c22 e724a66586de6ac8aed16f429412ea75ecb0de30db4c6326f60853ebf8788871 0c1870b8445328d5287011091431af2fb780d2e02dd5903df15da290df439452 0819e0cbe647e1263601ae32689d1cb98ef095db872bf0efe4397a55e843608b 9900dee9d5b51b2a7c187a61b7097f65c8c2cad47db0c0564ef5eedb2daa2099 a0e2c7eee1780af445e4b984049df56fc504afde25fad930b5e21a4fbdc8233c 8e7e160a7fe70ea823f63e95383b6cf962748bab1f7d01898f90a612a41f9ec9 0324a665473bc3623cbda1ade67a02d6c7c0c168737f692713c6be698e9abe28 2d194447ed73acd567806d763986d70f52c9251a7672a12a2d1ab2f7f729f98c 523e82cbd0cd2ef1a93da8022d29d2148e5d9604495fab6c86fa661fa51e2d33 5a2078c3d211b2a16adf4c7123bcff38b12ac04c79167d8867b460ee814c21a4 d31553245cb99911a1ee87987678b02788f99e5402306f863e84297cadb2eb20 28109b3a2089de149d8f720f15987da742c3722d8b460cac9e4983be973c982a 15824aeb53596d23d81d1f0a3cc579ee6c6666bdd52495b8d2c44406b1628ea6 5514210a12f526494e2b8cf6b64e199dc1e4863e26b3ab96cf7b9f39661d7d3e 1fa93f922f9cf7a92b591e3385df7e6a9a94d4f213a2ba602ec39696fc7a41cb 8f579daebc901d0edf0e697c24e9aedba984ad015374bc5554a2c4d233d5762a fd711498393f83e8582524ef51ca99adb7eff049b30b385a0720085bd28220ea ef00bab9826aaf6f95183bf35f0870e41d4cb3910cb4c04f0c16027b37a8a881 24f1487fe0707a4180a333d745251c458ad39663bace336040651f735a89aaf9 3c697954566f8b1d9cdcd187bd4f7be54ebbbad1027edbd900a4cf25acefb705 02162b3865b11c8e2ce1f254ac9d2e872731fdf824c4679fa41edab1ee50809f cb59195d6089bc179b389f204c920929ba24842670f4ee5f692241c61ae97d67 897c65ff09302d3d69325e0142413e0590ea10f42d9f44afb21381258d6cdcb6 096e2ef9d264b7cffd26b6ea751fa3497e9d13ef8563bb107141e5a38652fe64 70c066f99e8eaa708fe695e29f98e56b5affaa4f5212743503f17d2e82ffdae6 8ec19ae4802911db48b0d18c6bfc56c78f9dc164432d5dd7d578d01878c314a4 68ee6282c4e9db507f91cbd785b671c2b69c9692b2e9174b58d351458ad73cc6 4e9c31e647d7d2c4b2837d0a8d6ac135bfa75a9ef30174ae0946f86deba50330 6f3bd02dbacb88ea4b9d2fea4836e4638ac290ed96fbc9afca79b16a409aa187 cd0d44e350ac33af6051516263731504af099ec8066c6db1defc3fb465d3ffc2 a9de32d08d44908be582b050e8086f18d0374725390d93374a544fdad182591b aee82e6985d6744eb330eadb9942ad44f01bdc5f69960a0f7cff99a4abcf28fe 40803dd498f3a7b2bbd0b152156081be230e1e0fa55794b28c88dd46acd1ac3f 593bd6bca71e3d40d42ee3335d601500389c263e56a8e4ca391bbacedce96ba5 c5eba17dd409a3577922e0c9458331b457d64a14f30272752554a6488fdf3d9c 5194f7b6920a56e1a5c0791201e1be954cbeca4ff7e53291c6e7195bc93c8ac1 27c2bf474b6d2db8d2cb2a581f045ee93a3075f2a4c5a3974d9decdec54def91 05a1a4ad4a3aaaec12b10adb972427f46eec52f7b74c8d575aa766c4df534a52 d11e6e23fea2f6aeef2a9f930f705b86efe34fac5da6268523e7edb0d77fefe8 ae0eb2d1c7b2665093ea63b5427bfc1d0503f5bc59eaf89726c3c935b163eadc 847718ad2e1a730e40ac2a8f8c7405bc757b300a6752c8eb0ba717ab04da6e32 d146a574e14601d3497fa24e113b03511cc22d90264fd9ab16b67f51266eef8e 375cbf8bea36ccf55a381501b4a81c741a7f53a746db0936eef1b33391128e30 9f5f2bda70b643af8bf6a9013e24333e571630ca0bd0282982605ab44364a0ec 1b715e64d0c1a4fd1cf47799771a8c29f4c2a40ac060f7f1bd24e2ac56beccc8 e16ecdac553103099b37d7875617f3ad145feb792c09e98426b6874c5e198ac8 b69f80378b4543b7b0b9e50536ae225d5125a8310ace19e4ef1d6c036890f803 cc354f8bacb247c7e8983dc45c64a456e5392d8a70b4990498b118b40fce6f82 288d65250cd24a20558c0f4acf18ac27ccbe1a0431a0226241dc32496d3bf232 03c5822adee32ccd109e62554ba981f1f64e950ea1822e686f3f3c59389ea4c8 671b53eae66984808e4f192c169bdfd6c700d9b457ae15e87b1ee462015e5193 b5436c5f91b68afe6d4b3a18221bf6933475131c5f272f3a8bb57dd9965b170f f7ab9d3674a1c4d98b4e4bb44ec0c30528a8e5e0fd80b63c196498a74467d7eb 5187a066600e28dbe62a09c34371782ce6683334bb0e725e4b57cbee1f675690 e657da12f0bddda4e87a9c637d05c5053a5c6a7ccb8c2d1d91c24d86678d2c1c 4c33fb00ded1a5532a85daace70f35ed60cfb1609655d80ec3abebeca38ba584 5a5f45126093d3f6494bf27e4df9ad36fc2a647202586dfd9916f2a3f0405232 ce2b985ec369cdee998326144234ec32ddcb9e043893f5c853defdaf2899fae1 6b001db803ad0583e248092ca705ed9432ea06a85dcd199fe4d3d2eb398ec719 a87ee997a64f12a5766ff21e547157e59c308c83ac6be8c1793e357b2676d30e c9a8c051b7ca311cbaeaaea4e33770d7a197b77dd830d7a64c0145167415cdce 63034e30e40bd523c967584750fde8e383f8544121539c7fe9221f442ca2cba4 7367cfa33f384f857c50ed0451c29b244e98a84f68f55523ce15e15f57dca294 bc7010e0e9f674e12397dcee46112ad87c18d4d39bc8ee2c032acc51a68a514f a287ac119213fcc511ad4531763fc369b60b50d38fbdf926d0ae5713140686a5 adda14742875668f6c0b011b44d6bde94bf1edec7c6432e9222d9f342f2e2800 72bf7b6d591ae88889225b0c44762157907a99109bcf3d4147b79d6874d33e8e 6275318e2721cd41f2bbcbd3a01785f97a9f0c3dc542956bbf99c7b385c2fa57 e8945cce73930a50bd31df00404e744262a5908b05f6d5a489aa8b1aad54f8ad 28a2ae0869f740b4afcc6f87c8c92d9ddecb8205d7a28988f421d2232618ef3d e8e882070b5fa8c16597c4a53308cc72e4c3bde1c84654ed28f372b96b0b2ee2 1218c27a249e998f3000d2dc0eac5bd67c9b227797098680ac0bb02902d945c8 1b2fd9bd05ec513315508ae4174c9a4a06a3d788ae931ec5283bda252ee0cc3f fbd3ce147ae11acc3ae35c46faf830f5a8036178ebcbdd29b432af00d108b2c5 7c1274af6f15e6e5fbeb0ed7b3bdb008d405cf9e7fb2fea2af4b9eedd4416271 721a1abebb07658fe75c8cffe169e36c6569aabdd537461fe53afae218ad6842 008dc48159058edc748479e5b5b19162b4998dc4938196998166fba143243cc9 4ff0d7b058d568db6c9c921c3dcaccb5f966f0bbb29da491b9b3498b5b617f46 4c7a0ed321f1eab683e6708335f4063ed1446a7eeb4f6e30c741a85a3d5f3205 7fea6fab4adb18e21f1c82d404798e1fa7ce4410166848f5b58cf4712b6a0a5b c4cb56e6e9c6f00fa758b694f5ce0e46e474ae2aacede9a3549f9604e0334a6e 8e7b10815e9b0759ee54b8899203146399ac59ab29cb1178a2d601c175936421 d0aae6243ba01823e76d7687944356e27d03696e24ac8b10b79443dea873792f e52775666ffcca18b2fdf30fcd6836063281ab18c6ef8288cb37184ce6522bbc 4b3e821867c018da18d60c032a7b32a9000229c384bc3533d0a72e38ca8a772b c277185bb02643d6c0c6a0ba18be8ee27595e944bd808d1900b6880b251163a2 28415392779831dbf13939e6fe780a5886c6a64a3ec198245107a035674cc643 18f1005796d38dedc9c9e586dc7bbf84dbfa0b93991a01cb5d8b7ab7fa569b51 d8e4a57ab1fb8241a2b4a2ac9c257a61b69bc10f59539e2c66cbc5ff7fedd974 c3cff12a3e12fbc669acc2149b2eaa58b3128aae31b28630f75792c5ba4343c7 7070fe35082f2aa8255cc62f5475849303cdfed6fb59cef520dbfe84a95397ba 58b72396a9686695c949ebd8c88c5f645f1b2dfda3d67af5bf02edb08ed7d78e 034df61ead5d7c844c4c8fba47e123e7976c902ff8bd0f645d4b7e1dcaf0eee4 eb37bb7bbd0b98f5bcd76c22c940773d1b9f4cf8d8200cbc63d5148a5d56bc0b b637f0601eb6a3dace31efcc2a955d0b4751a9591b4bb58a6818e4d0cd244b0f a30400f370c2325f29f86f9b76ec04eee46caa5609bd029564d55ba11efb294a 202900204e3bce579901c709a5926d2c52164fc9ddfac59263ccac0e0cb26969 8f408bb9472e59802e61979ca09b134d948562e6481b0dd228cea3515f9954e0 412ea41df4fd3c87a0e6a13180db38210bda97cd27313840c7f0b30af4b3640d f8696c0edd04a6e79dc884aac487ad8eaeb4d1b3d983e7898e8f8d97364592bc 4f44055aa1469f55db04e3bcabd8df5270106f423455565866f862e833802333 04264aef75b8a58c552b4450687b306180a6a468b03355149ed2e01d5c2e42fb e35cac8def3f637af5d76166f579009dfb7241931519061b7df8291e06e08145 a7b5456ebb62403380ed85c0c4074b47cf50db20d4f296c277e5971a59f3e950 5ce7d84422eb8e4963c14e04c61946ae683abde766fecf8412588cd8f740736f b27e6022bdf707b695fa66c4262e670183348e9f9ab812a3e05ce75b1cc7522a 556d549c255cb352bef7b2194f2e78a7c325f3c3ad5c074dbd851219bf97b1f2 d506f584c1f1d4f6bb6f56e6c72a4ac6ad9364ea2889df5360ac2d02d77c44aa c5743bfdf29322bbfe2cce41cb87302f76eb6c1072c3379dea4c21e96f5022e0 8cf562b1a8a4427282c8f57dae1ebee1ae96d03aaf36b763c0d4bf2501becc3f d56e1b3092aff2c5d241147f412a24cfcf267a4a9c9a79b4c989c4ac6e846e9c dbdcf8d13d4e6f08152051763e1f2d2effc12478ede2e75d5dc61a99f20a710c 946828e0e992cb8c15ffde52935e697895555b2f67aaa6c44bd27c05a56dc348 1e33ec559990e2a5e65f43d73d439f22b9ce9fba9586c1e94c31f2707c34b369 93e306df78de31bd87095aa289e271c9ca0b6d845a4446859a85c0f1e5e9f095 ad4a29ca33a9e802c56f17e47d34fba49757d0d3c2a3eb8c84b8b891212eab8a 51db976db70fe04451c7c90b0af2f787c36553cc1271e5e442d5dd9664559b52 b311cf4d3809ed50620bac1534dc4b167ded982fe20feeffe6b8a8d25a0d49af 6f70c3c1d7a68d79bd07a2b80c671d99f63d56441711edcac380eb0ae35f5e30 77c9a668385675c8e21b46a9424b4bb1e0fa0dab467625cc90da995716c8818e 2c878e0b051c89f1eeb3eac9af03f0263ad2904df37ee15b3ac7b1723f379f47 69e7a9954a5cc852a06c27992cf5c1c3542b30b5fa7927148df3e562b7e696da 4834328491fb7d643a3fc686eda861bf1991ea24a6141bd8cb4e9299bf97cdc2 86ff81b561f14b12474ddd46e0c122524449ccda7814a55cc45d53264bf7e508 81bec33d9f86a7f86db6ef19a5e23298e01c382ceae5a2f85478e4d81f44abbd 07fd207c65a575fddee2e763151c14c87d2102ab60b61cd3a0159d5ceea9e935 d575760bde412b4103ba9bf6803e10ee77848017b12a6e27b820f1e9699eece5 4fa46f1ee06461c08a4504f46de165887b6ce3d59d2fe388742423fc6c848d96 5d330c5c948f5aa94d89c722ce3081e0db5ca69636752d4de0e5a9a94ac4d87e 389fa585a3b5031270191e2197ee9d3806fdc10a0dc197295daf79cf794d102b 0b7a301b5b36aa36b1563cde9ed5719eb02d5272990fe69186f9c88e8a2eaa2c b5dd3db149200e71cb6f61923b779dd0aebbc86b306a06ae7211728992f77b9b 85b9110ccccacc57118c35a3731129ddc84b0ea8ad5c045b8b607c173d93936f b53547a1ce4c5f44d0bcc374818904e46d83b2aa84aa7909fca04c5e22864346 19cdecb8d36c64546b934a52ed9c987ebb90a034104bbddcc977af54779080c9 c9420be76dde703761546c918e54e099a70d08f9b845d1faa5eec731783d297c ba6cae8f9ca66f10c8c59560e3982554389c714d6e68d0aa53f81b55637f0e50 f04053c4d06bc441935621f8d68a4f98098de43bc84c500ef80a6b3cce7bf21b 4f9846d4ba42578ae567849d5e58a3e89a41c2fd4ff56f0ddad301693dd79e0d 13e6f8e4a1c611a9755d36b425da5ac6b60e19a427ce5e24076e098ad649171b f55455ee7b967d03d0c5c796d71001b75d8ee117c600cd1e2a357c87a072ee1a 4cd119a4508f44f71dcab3ae33ccc79727e2eb8855695fb246b302b4523fa8dc 9bb1c1057842b9badfe15acf03ccbcd02830b0b82d6fc298ad35a7cd9e474b2b 69178cf1afa1df8270a1514d91e23793635ddecd40dec3f0da955d03208aa599 ac3ff3ca062f607390a6481c656431ab5d233d4bc9e0a05199e20d5bb43efee3 83437121e45c198ecc1af8e6ff82c8aa43abf0ccc66b5fcf36df113029f2cd64 708fab71ba5961f022d2be1413a62f06ee024eb84228ea51cc30f2d57cba73ee ac15587ffad59e864cbeda5ed443c5581e01ff1873997f893ac48051634811bb 45cf14d0e88ebfd1fb8b850660d8372e54a70dda84eb0796c680c5b2041c873e 5ad03196c6262ec1a2a6619c15c7ba1d54f07d01b5588083535a1c29e3d76366 f1a06894708eb3747cb38a48949b4920f735a2a3b025df2b2557fd54b95a357f 910e5fcbb879fad4a75d5462ca5aa2daad4d11f7ac033de41eab71f5ea15c7cb a54a91ba33ff57255dc5afc6f8600d90aa4a8f73854f9c9b6dba4a19fac71206 709cee829a666ff2be03c2647f8a4bd752f8a957b26c331c2a8ec16c1adc3d1b 47721a41a9b3bd139d0e48b60717001e4f102b8a7bde47cd54a4e4ac58674232 d7fec53495cbccabb72e417a76c53a26d41e93f595a0f87b03455377d8153012 07ad54aa1b783c8b252ca5a87d4e76dae08fb40adde2e7323c36df2f88eeb5d5 02284ee9a173d1fda77761077013b164b0c9a1126197bdcdc4aad0abe05aad63 916fd58e86448cf6381a7c20308bdf9d6767aca3f9013c69385e6a83c83fdeae 85c7c313ff80b27e527e706d348c44e656a0f7778c10c5b0ef3574ec77ae19c3 728172939d59682abd336f3371516ee252f85b3538d2c6d613c16593d6dcef56 7d580b3111b11ce137a427c85c3a93152d50c0654f30f48aa861fcec62cef3e4 403b934788a457295ec0743b17f57b80b5d939b89a819a69a424e5bc92abdfe5 f5a0b5c0a7bf7796dcef3f41d4d4f69fa4036631952cd1a38dc97ee664d061bf 66c3c7e1234edfaf5b0234b3ea2a5c433422b777cd0f67ae54867719cbd4af76 6d5ef7cb70c4fba8deffa60d7fd45075aa9b89fbdf7209d93bcca44908884689 efe911209a4a6a97171ec00b0e3612e7b246fc24e498c117e732b0a53e2336c6 84e59b2c718ef0a25cfe73e9d76c23816c88f6dd9c5494d6caa0c874eda9c86c 77786b06035df0801987d742b0b9c6ce91aafd71721069d5fd8c6d56615dd325 b323ff4e895b6e1e9eb428da73d13adaf30e3391e6308c90226775b50d547e4e 99d943a7261b8b21fc743edabddbe36a2605b05fd99e574e9e24ccccfe6d1623 c61c135373fa15490c04b99c3520b6a6edafaee06e8a20483991a12f815a73ac b995b41ceb221815c4e412d5021ff1e7860b4fd758eff7c1bdc2689218477b1f e9e80dd3f26fc54ef691d948458a65529c4e6a81bdf7c74c66ee2e812a363ca7 3b9a47e2f941b84bdfcca94c8458e84854f5c1dc9e4a01882771bebbafddb88b 8f645f622b9f683b07bc983ec808adaa8bf354574459cdae5ae7e069252f48d6 c305a19379b78e364ba57af49a92e2bf681977de7abdb489bb5bdfd21216b597 8ee51b572346db1618a589d15f6a889c3832c5f4f2cf92ea0e40f7519000f596 2ea1bbec02df5a66fb73cc80782c097358eadd721bbf8b1d4002c9865e7fde48 e5755aa5156ce183f47cd0467c843e0a4d7f21d1866c70a43b1e230db98ce181 438528b92a31e7a99b74e9f799c1eee94dbe93df5b1289cb2fc40b66babe75b8 bc796184d2aaa3680ea8765becdf89b4c05481aa46692d14528e1c7673190a0b dab08ad6d85dc8581117967dfcfdf987a219d02bcd18ee1c273681c6b8356ac0 c9ddf589c6d7827745659180d6aad3952f728ece7841ced7868c9daf825c4c05 2571be449317797398bf8743292f9bdfd400ccf735824a87353b39a0bf0759f0 5a41e18d55c06aa35a0087e60b0e4c5f9359ddf90a67a1298cc6f416c8251b24 35dbc42208ce4d325a9db63b89d3d459136b014464f66ce471e750d0f7bcd1d4 7026adb719ee32bd372b41c6d4fa96fadab1f12a29034b88c78df3950d12a27c 02890a6a9ff0349d76d09522466fcf48af72a546e968a307d97a49a734b16473 a182e8cbef626240fc02bbd6d82306a1c735dd99bb01c10dac5490cff7af38f8 d62419facc5dfaa9dbec0da2a083820f26ddba3647df9f90f62c22c8b1a6a1cc cf0f6f375c577dfb0be524cf5ad195432684754f84818cee8d52c3fa863ba20f 2302f8863eb741d249f7ede92cba57bbf5020271cb0c386b7153fe85dda608b7 7f2969222de25ca08d66ad9ed07e0457258d9065d2bee676623e65723f6b7e23 42caf8fc2b51bf98cab4ed05813d108458e99c7a6e65fc1a4f780db8e6b6421f 89b9d7b87b85e5e21934020ec298a7ee8d41339d381ca56b5ebaf76aac9dfaf8 29df83fa98817c94c4ad9b1128d3343c38f2273748ea7c8858774ce2a2eb4216 2702de707d5bfac679aa634c6641e064db8b39bdbb1d34373470aec323a07fa4 eaa05b069e92faea6c914cfe2ecd13e8e3b1ea97a7c99b1baef3117cbec0764a 340062e0e85013e7185abad663e10389b48d9c27719c5813aabe94b67fdb4eeb 65f000fdb7402f9d093656c8462ecd138c7bb0d0050c4e7ef3b4e548ad7468f8 1dfd2c9f1c145e4e83902dfeebc0158213fdbc678b79cbf9afebdbca7e25913d ee94e97e26a2d115513c92b6f8fc5df43940191fe451ccd267fde3e6638482b8 2795ecd2282d08d18f491ea9d3cf79033e9fe59fdee057783b4b492377f97b42 3df49ed30efc0898be22f35d5e6684def94475b79262c1b56c15b5518a4d689e 9414fa1200bc111a8f8ec720b223279d4cf81db72050218569ae7d1c656cdc33 a35ab659deb140bf7bb0d981d9a232cbc50e8e0f49bbeb4bd9249ed0403de0cf 347b8ff42ad83fc4d693dbd5825c64c53c004604346ee68b5999a0dfc4bcb591 a96fca70c1ec8b97ae08c5b1afde8458cdcb81b83079eb0674191df88f239aee 1ac2b7aeb293e753a299eb450ec080308b3b2729e3358b9f4839ad94674a2862 30be903ffccb69995492a31f90319ca15db9501e8bab60a12b7f1605c42eed77 cd0bfaa91811b7ef18affcdfacdab95c9efefdca55090c210385a27b692f96ab 2d98fd4f4056d559fb8fc31af1b881441056909720a815398290921963eb3cd0 9efc4f4d775162212d8fcb6be314d35d1e0bad56eacbc2e4b072b304f6382774 b094062c50723a11dfc4c25dd83629c6202d487671597e787857171f5c939697 e0b56b067959c375ef35cf8099c505a24934e89a820b99d5774db2bbaa730711 83d1493c2cddc033874a3f7b473c5fc7771e576ffcc1f8ba080f66a6f8ead18a a3e8be96ba3255e4217e1121a59d43dc80e2c6aa76b4f7c0d924895e7fe93fcd 870c247a9814be78c7a8cad1d5e0ca75617d0d665cb4f536feb22bdff348b4e2 079e00c722391e8767b9a9af3086934458b2d0e7895217175c1b419e70ad1117 4152e8ca4e874b4928abc20f6f4559de3e1e8dc5d0f2fd031ea138d7d0bfa69f 785e555657b85c68033cdabf8d2be43bf3481ebd0517ae6a4260a0c67185bf4c 80e69515ec589fe1521a0bb5f826ea098fa31050ae4c74634aed6d4a0fdaaefe ca966be2323798eaa1c49ac7870d883f2fe4a9e79d7fe8703a6359490500d991 f1113d3110b872b03dd9bd2e9ac5499e73407e71620484a4943a3dfa09740d12 dcdc63949e3c1836ffd06d23d9ec2fc242d658ce2eaea4fffb78c047e21ec6e5 95973e5baecb6c38dfe9152444676fb69969ec7185e7459a3423596284654851 890cce39cf7802022eccbfe8ce8403b3cbe60af994f0207a05f85a63e94521b7 0aa1c1f31ec375fa380991485d25ba3d812ce390ee0eafe4c4a7f3fa140fc8a8 3e5043837344299b9b1ff0078d651763ce07d04652957da9610cf9df6eb428d2 4f600ab5c4c83dbe1d1a2f16dd99408135bd0aa196c644fd6991b3ada88ccea2 f4e592963c75d1a5574c6ebe4c6091d41d223b11b589357249d20a7ffd202bcc d4bc078b1f4812ad692b17cf7fd8ac683dd47e475653ac7b027703afaed30082 04614a23d4cfcb3aead3c937f19cf0e240785c84084768d201912e7b2bb3d835 a90046b75392d0be8f191bf337733fd084830cf06d87ee1411bfac8619ef0ea6 ee8d9d442bea513e0151da3e6842eca243479296e2979743a745527460f21374 3e691e9a4ebfc99977911ce5ae11a7a397e05be4aab5b8aeae0a34efc6f4fbe6 ac7887866bde703dbf73e4b3a0e3cd6625c7410e657e0461ba2d74dd77af75c4 98af538bda02a83152b0041f194c9dc79e9209777c075582109b5f8f53b20483 9a518f426d3b878e1a008c06d2da4f87d66389a5ce79dd43d214f7a0350fe466 0ee3672d39cdaafac794a1eb1339bc35faa10d0a3b434d6c8de8945e845f3266 d5877a9ca33d77f553520e872e2208db3940450477c0e2c2c02541c21313c5e1 2743641e97b6f9fef8b11b45f6db43e2a60f507c9dce8e72ef24e282c0e65f68 3dfcb1c4ba7d1c224ff29356130a1889ec23c0bdc4ad3a64d20e2d6ce9486506 f55aee7763390020e8e724d91deea7662024ec7997e86f2e7b8be245cf3ac4f5 4c6af8d2d91b9eeb7928a967890104de8a2cb8c0d870f2e381498f0c837c5523 3069e9a40ba231e73f5662b52c276d283ddd67563f9d33a4d0faf1855576dd8a af63e1340f4d2d8c5a3ad21ff145941e7556c76d469c838a8738d8fb83771c2d d5d8301ba44e136665a1ce34808eef0300d365d81b9bcb94259994ed9e0ff5c5 d07d9b588792641614643032449612b9ddec587c1ac563aaa7adc6a13e0968aa e307ee553382aeb603d57867e19a8e2ee2a30512efe57e198004e49f51f811e0 15dcfe485448cbb3b813bf74d5b014f48254a40a2edbea946b557011a4d2fda6 b9ba7288923177632b67fe11352527d3a0b01632bd8fb01403c4f18ab15b2542 d2b1f8674035163e23e6679c2e486e49e8ddb1d179d80c23050f3187205534c0 3982224519308513d77e807706f3edd6b876da4731df3d866cdb2c041a158d21 bc4080944ddf7d63d9dd8fb3a548b1a2f36e13c8b9cda5d741af050e5c290d7c da9725814e9b996d1cdbf46f1a9519f869bed1ba11ed7d3d7be7bb3dc03dee86 c9c7ad0bcf728d3a15a42fa99bc0b581d56a796d293833ac1f2c9e74092bceeb d2353b42381f109fcd895565880e69ada2243a6ad6a17eb8c2cba929509f0ff4 639c7b37f6df9fa214c21b6c22ecd0cc53d542a1572eba03eeb56d960c5236a1 78b7f2f52cc682bd9d6af3e434cffb6ac72a082969cc784623a65f3f8ff5ecd3 d884b2629617fd6da60a34650ca117d8fd0026d13e95b3014739169f582f23c0 92a2f41905c347cacc00e96087c6efa37d972229e51535ce915b30a3a6b3d80a 9dc19bc31d142dd46f0e58bb11f674e4dbb865e6f2c73b7a9a25b6776c55c07a b463e212e93bd6ba96e0500a19d3a8cc1c2ef21f28f2037881fab9e1670d6af8 02efaf4f20c6dc63e4da6a7f6ac99f35703cde087e8686ed01fc4b03c354c662 3f18ba03895c5b9bbe35126486ecc35be6dc9d189ce167f85645dcc73258a94b 863f88cb5cab02e474035f35c3273967145227b90337cbd12b0903caa3d25b7a 3912293d 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont TeXDict begin 40258431 52099146 1000 600 600 (prac.e2.f02.dvi) @start %DVIPSBitmapFont: Fa cmtt10 10.95 27 /Fa 27 125 df<1438147C14FCA4EB03FF011F13E090B512FC4880000780481580261FFE FD13C09039F0FC3FE0D83FC0131FD87F80EB0FF001001307007E15F800FE14035A1507A3 6CEC03F0A2007F91C7FC138013C0EA3FF0EA1FFE13FF6C13FF6C14E0000114F86C6C7F01 1F7F01037F0100148002FD13C09138FC7FE0151FED0FF015070018EC03F8127E1501B4FC A35AA26CEC03F07E01801307ED0FE0D83FC0131F01F0EB7FC0D81FFEB512806CB612006C 5C6C5CC614F0013F13C0D907FEC7FCEB00FCA5147C143825477BBE30>36 D<141E147F14FF5BEB03FEEB07FCEB0FF0EB1FE0EB3FC0EB7F80EBFF00485A5B12035B48 5A120F5BA2485AA2123F5BA2127F90C7FCA412FEAD127FA47F123FA27F121FA26C7EA27F 12076C7E7F12017F6C7EEB7F80EB3FC0EB1FE0EB0FF0EB07FCEB03FEEB01FF7F147F141E 184771BE30>40 D<127812FE7E7F6C7E6C7EEA0FF06C7E6C7E6C7E6C7EEB7F80133F14C0 131FEB0FE014F01307A2EB03F8A214FC1301A214FE1300A4147FAD14FEA4130114FCA213 0314F8A2EB07F0A2130F14E0EB1FC0133F1480137FEBFF00485A485A485A485AEA3FE048 5A485A90C7FC5A1278184778BE30>I<143EA2147FAF007FB7FCA2B81280A36C1600A2C7 6CC8FCAF143EA229297DAF30>43 DI49 DI59 D<16F01503ED07F8151F157FEDFFF014034A13C0021F138091383FFE00ECFFF8495B0107 13C0495BD93FFEC7FC495A3801FFF0485B000F13804890C8FCEA7FFC5BEAFFE05B7FEA7F F87FEA1FFF6C7F000313E06C7F38007FFC6D7E90380FFF806D7F010113F06D7FEC3FFE91 381FFF80020713C06E13F01400ED7FF8151F1507ED03F01500252F7BB230>I<147F4A7E A2497FA4497F14F7A401077F14E3A3010F7FA314C1A2011F7FA490383F80FEA590387F00 7FA4498049133F90B6FCA34881A39038FC001F00038149130FA4000781491307A2D87FFF EB7FFFB56CB51280A46C496C130029397DB830>65 D<007FB512F0B612FE6F7E82826C81 3A03F8001FF815076F7E1501A26F7EA615015EA24B5A1507ED1FF0ED7FE090B65A5E4BC7 FC6F7E16E0829039F8000FF8ED03FC6F7E1500167FA3EE3F80A6167F1700A25E4B5A1503 ED1FFC007FB6FCB75A5E16C05E6C02FCC7FC29387EB730>I<007FB7FCB81280A47ED803 F8C7123FA8EE1F0093C7FCA4157C15FEA490B5FCA6EBF800A4157C92C8FCA5EE07C0EE0F E0A9007FB7FCB8FCA46C16C02B387EB730>69 D<383FFFF8487FB57EA26C5B6C5BD801FC C9FCB3B0EE0F80EE1FC0A9003FB7FC5AB8FCA27E6C16802A387EB730>76 D98 D<49B4FC010713E0011F13F8017F7F 90B57E488048018113803A07FC007FC04848133FD81FE0EB1FE0150F484814F049130712 7F90C7FCED03F85A5AB7FCA516F048C9FC7E7EA27F003FEC01F06DEB03F86C7E6C7E6D13 07D807FEEB1FF03A03FFC07FE06C90B5FC6C15C0013F14806DEBFE00010713F8010013C0 252A7CA830>101 D103 DI<14E0EB03F8A2497EA36D5AA2EB00E091C8FCA9381FFFF8487F5AA27E7EEA0001B3 A9003FB612C04815E0B7FCA27E6C15C023397AB830>III<387FFFF8B57EA47EEA0001B3B3A8007FB612F0B712F8A46C15F025 387BB730>I<49B413F8010FEBC1FC013F13F14913FD48B6FC5A481381390FFC007F4913 1F4848130F491307485A491303127F90C7FC15015A5AA77E7E15037FA26C6C1307150F6C 6C131F6C6C133F01FC137F3907FF01FF6C90B5FC6C14FD6C14F9013F13F1010F13C19038 03FE0190C7FCAD92B512F84A14FCA46E14F82E3C7DA730>113 DI<90381F FC1E48B5129F000714FF5A5A5A387FF007EB800100FEC7FC4880A46C143E007F91C7FC13 E06CB4FC6C13FC6CEBFF806C14E0000114F86C6C7F01037F9038000FFF02001380007C14 7F00FEEC1FC0A2150F7EA27F151F6DEB3F806D137F9039FC03FF0090B6FC5D5D00FC14F0 D8F83F13C026780FFEC7FC222A79A830>II<3B3FFFC01FFFE0486D4813F0B5 15F8A26C16F06C496C13E0D807E0C7EA3F00A26D5C0003157EA56D14FE00015DEC0F80EC 1FC0EC3FE0A33A00FC7FF1F8A2147DA2ECFDF9017C5C14F8A3017E13FBA290393FF07FE0 A3ECE03FA2011F5C90390F800F802D277FA630>119 D<127CA212FEB3B3B3AD127CA207 476CBE30>124 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fb cmmi10 10.95 4 /Fb 4 121 df<143C14FEA21301A314FCEB00701400AD137E3801FF803803C7C0EA0703 000F13E0120E121C13071238A2EA780F007013C0A2EAF01F14801200133F14005B137EA2 13FE5BA212015B0003130E13F0A20007131EEBE01CA2143CEBC0381478147014E013C138 03E3C03801FF00EA007C173E7EBC1F>105 DII120 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fc cmsy10 10.95 1 /Fc 1 16 df15 D E %EndDVIPSBitmapFont /Fd 104[91 2[42 42 24[44 46 44 70 46 55 31 40 35 54 55 52 56 84 25 48 25 26 55 47 29 47 54 45 54 48 9[85 1[72 56 49 59 1[55 69 71 86 52 60 32 32 73 67 53 55 71 62 1[58 1[35 4[24 48 48 48 48 48 48 48 48 48 48 1[24 36 24 2[32 32 25 2[48 32[55 55 2[{TeXBase1Encoding ReEncodeFont}70 90.9091 /Utopia-Regular rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin %%EndSetup %%Page: 1 1 1 0 bop 90 119 a Fd(The)21 b(exam)f(will)h(consist)g(of)g(3)g(par)q (ts:)226 369 y Fc(\017)46 b Fd(F)o(inite)22 b(state)e(machines)o(,)g(r) n(egisters)o(,)h(counters)226 553 y Fc(\017)46 b Fd(C)o(ache)20 b(\(NE)o(W)l(\227D)o(atapath)i(on)f(\002nal,)g(instead\))226 737 y Fc(\017)46 b Fd(Assembly)20 b(language)h(\(facts)e(about)j(MIPS,) d(wr)q(iting)k(in)e(MIPS\).)90 987 y(The)g(follo)m(wing)i(ar)n(e)d(pr)o (actice)i(questions)n(.)k(They)20 b(may)g(be)h(lengthier)h(than)f(the)f (actual)h(exam.)200 1237 y(1.)45 b(G)o(iven)20 b(the)g(follo)m(wing)i (\002nite)f(state)f(machine)n(,)g(implement)h(using)g(D)e(\003ip)i (\003ops)o(,)g(T)g(\003ip)g(\003ops)o(,)g(and)317 1350 y(JK)26 b(\003ip)i(\003ops)f(\(i.e)n(.,)h(der)q(ive)f(3)f(differ)n(ent) i(cir)n(cuits\).)45 b(U)l(se)26 b(a)g(R)n(OM)f(for)j(the)e(cir)n(cuitr) r(y)-9 b(.)46 b(F)o(ill)27 b(in)g(don)-7 b(')g(t)317 1463 y(car)n(es)20 b(as)g(needed.)1020 1560 y 14917438 9397980 0 0 21642199 13682606 startTexFig 1020 1560 a %%BeginDocument: Figs/circ.eps %!PS-Adobe-2.0 EPSF-2.0 %%Title: circ.eps %%Creator: fig2dev Version 3.2 Patchlevel 3c %%CreationDate: Wed Dec 4 15:54:01 2002 %%For: clin@chexmix (Charles Lin,1127 AVW,(301) 405-2709,,) %%BoundingBox: 0 0 329 208 %%Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save newpath 0 208 moveto 0 0 lineto 329 0 lineto 329 208 lineto closepath clip newpath -72.0 248.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin %%Page: 1 1 10 setmiterlimit 0.06000 0.06000 sc % % Fig objects follow % /Times-Roman ff 450.00 scf sf 3900 3225 m gs 1 -1 sc (x=0) col0 sh gr /Times-Roman ff 450.00 scf sf 3075 2175 m gs 1 -1 sc (x=0) col0 sh gr /Times-Roman ff 450.00 scf sf 1200 2925 m gs 1 -1 sc (x=1) col0 sh gr /Times-Roman ff 450.00 scf sf 4425 2625 m gs 1 -1 sc (x=1) col0 sh gr /Times-Roman ff 450.00 scf sf 4350 4050 m gs 1 -1 sc (x=1) col0 sh gr /Times-Roman ff 450.00 scf sf 5700 2325 m gs 1 -1 sc (x=0) col0 sh gr /Times-Roman ff 450.00 scf sf 5700 3750 m gs 1 -1 sc (10/1) col0 sh gr /Times-Roman ff 450.00 scf sf 2775 3675 m gs 1 -1 sc (01/1) col0 sh gr /Times-Roman ff 450.00 scf sf 4275 1500 m gs 1 -1 sc (00/0) col0 sh gr % Polyline 2 slj 7.500 slw gs clippath 2802 2995 m 2885 3031 l 2976 2823 l 2863 2970 l 2893 2787 l cp eoclip n 2475 3525 m 2474 3526 l 2471 3528 l 2467 3531 l 2459 3536 l 2450 3543 l 2437 3551 l 2422 3560 l 2405 3570 l 2387 3581 l 2367 3592 l 2346 3602 l 2325 3612 l 2303 3620 l 2281 3626 l 2260 3630 l 2238 3632 l 2217 3630 l 2196 3625 l 2175 3616 l 2155 3601 l 2135 3582 l 2117 3556 l 2100 3525 l 2088 3494 l 2077 3460 l 2068 3425 l 2060 3390 l 2053 3356 l 2046 3323 l 2041 3292 l 2036 3262 l 2031 3234 l 2027 3208 l 2023 3183 l 2019 3159 l 2016 3135 l 2012 3112 l 2010 3090 l 2007 3066 l 2006 3042 l 2005 3017 l 2005 2991 l 2007 2963 l 2010 2933 l 2014 2902 l 2021 2869 l 2031 2835 l 2043 2800 l 2059 2765 l 2078 2731 l 2100 2700 l 2128 2671 l 2158 2647 l 2188 2627 l 2219 2613 l 2248 2602 l 2276 2595 l 2302 2591 l 2327 2590 l 2350 2590 l 2371 2593 l 2392 2596 l 2412 2601 l 2431 2606 l 2451 2612 l 2471 2618 l 2491 2625 l 2513 2631 l 2537 2637 l 2562 2644 l 2589 2651 l 2617 2657 l 2648 2664 l 2680 2672 l 2713 2680 l 2745 2689 l 2775 2700 l 2806 2715 l 2832 2731 l 2853 2748 l 2869 2766 l 2880 2784 l 2888 2803 l 2892 2822 l 2894 2840 l 2893 2859 l 2891 2878 l 2887 2897 l 2883 2915 l 2877 2932 l 2872 2948 l 2866 2962 l 2861 2974 l 2857 2984 l 2850 3000 l gs col0 s gr gr % arrowhead 0 slj 15.000 slw n 2893 2787 m 2863 2970 l 2976 2823 l 2893 2787 l cp gs 0.00 setgray ef gr col0 s % Polyline 7.500 slw gs clippath 5593 3260 m 5671 3215 l 5557 3018 l 5609 3197 l 5479 3063 l cp eoclip n 5625 3225 m 4800 1800 l gs col0 s gr gr % arrowhead 15.000 slw n 5479 3063 m 5609 3197 l 5557 3018 l 5479 3063 l cp gs 0.00 setgray ef gr col0 s % Polyline 7.500 slw gs clippath 5490 3420 m 5490 3330 l 5263 3330 l 5443 3375 l 5263 3420 l cp eoclip n 3675 3375 m 5475 3375 l gs col0 s gr gr % arrowhead 15.000 slw n 5263 3420 m 5443 3375 l 5263 3330 l 5263 3420 l cp gs 0.00 setgray ef gr col0 s % Polyline 7.500 slw gs clippath 3328 2989 m 3405 3036 l 3524 2841 l 3392 2972 l 3447 2794 l cp eoclip n 4200 1650 m 3375 3000 l gs col0 s gr gr % arrowhead 15.000 slw n 3447 2794 m 3392 2972 l 3524 2841 l 3447 2794 l cp gs 0.00 setgray ef gr col0 s % Polyline 7.500 slw gs clippath 3660 3630 m 3660 3720 l 3887 3720 l 3707 3675 l 3887 3630 l cp eoclip n 5475 3675 m 3675 3675 l gs col0 s gr gr % arrowhead 15.000 slw n 3887 3630 m 3707 3675 l 3887 3720 l 3887 3630 l cp gs 0.00 setgray ef gr col0 s % Polyline 7.500 slw gs clippath 5132 1615 m 5053 1658 l 5164 1857 l 5116 1678 l 5242 1813 l cp eoclip n 5100 1650 m 5850 3000 l gs col0 s gr gr % arrowhead 15.000 slw n 5242 1813 m 5116 1678 l 5164 1857 l 5242 1813 l cp gs 0.00 setgray ef gr col0 s 7.500 slw % Ellipse n 6075 3525 586 586 0 360 DrawEllipse gs col0 s gr % Ellipse n 3075 3525 586 586 0 360 DrawEllipse gs col0 s gr % Ellipse n 4650 1275 586 586 0 360 DrawEllipse gs col0 s gr $F2psEnd rs %%EndDocument endTexFig 200 2994 a Fd(2.)45 b(What)21 b(kind)g(of)g(machine)g(is)f(sho)m(wn)i (in)f(the)f(pr)n(evious)i(pr)o(oblem?)27 b(\(M)m(ealy)20 b(or)i(M)m(oor)n(e\))200 3179 y(3.)45 b(What)21 b(is)g(the)f(purpose)i (of)f(\002nite)g(state)f(machines)g(for)i(computer)f(har)n(dwar)n(e?) 200 3363 y(4.)45 b(D)o(r)o(aw)30 b(a)f(timing)i(diagr)o(am)g(for)f(the) g(abo)m(ve)g(\002nite)h(state)e(machine)n(.)54 b(Assume)29 b(that)h(y)o(ou)h(star)q(t)e(in)317 3476 y(state)20 b(0,)h(and)g(the)f (input)i Fb(x)e Fd(is)h(0,0,1,1,0,1.)200 3660 y(5.)45 b(W)l(r)q(ite)22 b(the)e(char)o(acter)q(istic)i(equations)e(for)i(each) e(of)g(the)h(3)g(types)f(of)h(\003ip)h(\003ops)n(.)200 3845 y(6.)45 b(W)l(r)q(ite)22 b(the)e(ex)o(citation)i(table)f(for)g (each)f(of)h(the)g(3)g(types)f(of)h(\003ip)g(\003ops)n(.)200 4029 y(7.)45 b(H)m(o)m(w)21 b(much)g(infor)q(mation)h(can)f(a)f(single) h(\003ip)h(\003op)f(stor)n(e?)200 4213 y(8.)45 b(What)21 b(do)g(\003ip)h(\003ops)f(pr)o(o)m(vide)i(y)o(ou)e(that)g (combinational)i(logic)f(cir)n(cuits)g(do)g(not?)200 4398 y(9.)45 b(D)o(esign)21 b(an)g(asynchr)o(onous)h(counter)f(using)g (T)g(\003ip)h(\003ops)n(.)151 4582 y(10.)46 b(D)o(esign)21 b(an)g(asynchr)o(onous)h(counter)f(using)g(D)g(\003ip)g(\003ops)n(.)151 4766 y(11.)46 b(What)21 b(does)g(it)g(mean)f(for)h(a)f(counter)i(to)f (be)g(asynchr)o(onous?)151 4950 y(12.)46 b(D)o(esign)21 b(a)f(par)o(allel)h(load)h(r)n(egister)f(using)g(D)g(\003ip)g(\003ops)n (.)151 5135 y(13.)46 b(I)n(t)n(')-10 b(s)22 b(said)g(that)g(a)g(T)g (\003ip)h(\003op)h(is)e(equiv)o(alent)g(to)h(a)e(D)h(\003ip)h(\003op)l (.)31 b(This)23 b(means)e(that)h(y)o(ou)h(can)f(put)h(a)e(D)317 5248 y(\003ip)h(\003op)g(in)f(a)f(black)g(bo)n(x,)i(add)f(logic)h (gates)o(,)e(and)h(the)f(black)h(bo)n(x)h(behaves)d(like)h(a)g(T)h (\003ip)h(\003op)l(.)1941 5497 y(1)p eop %%Page: 2 2 2 1 bop 151 119 a Fd(14.)46 b(What)21 b(is)g(the)f(purpose)i(of)f(a)f (tr)q(i-state)g(buffer?)26 b(H)m(o)m(w)21 b(is)g(it)g(differ)n(ent)h (fr)o(om)f(an)f(AND)g(gate?)151 303 y(15.)46 b(Why)21 b(ar)n(e)g(tr)q(i-state)f(buffers)h(useful)f(when)g(designing)j(cir)n (cuits)f(with)f(a)f(bus)n(.)90 552 y(C)o(ache)g(and)h(memor)r(y)-9 b(.)200 801 y(1.)45 b(List)21 b(these)f(fr)o(om)h(slo)m(w)o(est)g(to)h (fastest)d(\(in)i(ter)q(ms)f(of)h(access)e(time\).)26 b(D)o(isk,)21 b(cache)n(,)f(r)n(egisters)o(,)h(RAM.)200 985 y(2.)45 b(E)o(xplain)22 b(spatial)f(locality)-9 b(.)27 b(E)o(xplain)22 b(tempor)o(al)g(locality)-9 b(.)27 b(H)m(o)m(w)21 b(do)g(caches)f(help?)200 1169 y(3.)45 b(F)m(or)17 b(a)e(fully)m (-associative)h(cache)n(,)h(explain)g(what)f(happens)g(when)g(an)f (instr)q(uction)k(to)e(load)f(a)g(32-bit)317 1282 y(int)22 b(is)e(gener)o(ated?)26 b(Assume)20 b(the)g(data)g(is)h(in)g(the)g (cache)n(.)200 1466 y(4.)45 b(What)21 b(happens)g(if)f(it)n(')-10 b(s)22 b(not)f(in)h(the)e(cache?)200 1650 y(5.)45 b(S)n(uppose)25 b(y)o(ou)g(have)d(a)i(cache)f(with)i(64)f(slots)g(and)h(each)e(slot)i (has)e(a)g(data)h(block)h(with)g(128)f(b)n(ytes)n(.)317 1762 y(U)l(sing)c(the)e(conventions)i(in)g(class)o(,)e(ho)m(w)h(many)g (bits)g(ar)n(e)f(used)h(for)g(the)g(offset)f(and)h(tag)g(for)g(a)f (fully)m(-)317 1875 y(associative)i(cache)n(.)25 b(Which)d(bits)f(ar)n (e)f(used?)200 2059 y(6.)45 b(S)n(uppose)31 b(y)o(ou)h(have)d(a)h(dir)n (ect)i(mapped)e(cache)n(.)55 b(Which)32 b(bits)f(ar)n(e)f(used)h(for)g (the)g(tag,)i(slot)e(and)317 2172 y(offset?)200 2356 y(7.)45 b(S)n(uppose)23 b(y)o(ou)h(have)d(a)h(set-associative)f(cache)n (.)32 b(Which)24 b(bits)f(ar)n(e)f(used)h(for)g(the)g(tag,)g(set)f(and) h(off-)317 2469 y(set?)j(Assume)19 b(each)h(set)g(contains)h(8)g(slots) n(.)200 2653 y(8.)45 b(T)-7 b(r)q(ue)21 b(or)g(F)l(alse)n(.)j(The)d(v)o (alid)g(por)q(tions)i(of)e(the)f(cache)g(ar)n(e)h(a)f(subset)g(of)h (physical)g(memor)r(y)f(\(RAM\).)200 2837 y(9.)45 b(E)o(xplain)22 b(wr)q(ite-thr)o(ough)h(vs)n(.)i(wr)q(ite-back.)151 3021 y(10.)46 b(E)o(xplain)22 b(what)f(the)f(dir)q(ty)i(bit)f(is)g(used)f (for?)151 3205 y(11.)46 b(H)m(o)m(w)17 b(ar)n(e)f(caches)f(differ)n (ent)j(fr)o(om)f(r)n(egisters)g(\(fr)o(om)h(the)e(point)i(of)f(view)f (of)g(an)g(assembly)g(language)317 3318 y(pr)o(ogr)o(ammer\)?)90 3567 y(MIPS)200 3816 y(1.)45 b(H)m(o)m(w)30 b(many)f(commonly)h (accessible)f(integer)h(r)n(egisters)g(does)f(a)g(MIPS)f(pr)o(ocessor)j (have?)50 b(\(As-)317 3929 y(sume)20 b(R2000)h(model,)g(as)f(used)g(in) h(the)g(book\)?)200 4113 y(2.)45 b(Which)22 b(r)n(egisters)f(ar)n(e)f (\223)-5 b(special)o(\224?)200 4297 y(3.)45 b(MIPS)22 b(does)g(not)h(have)e(a)g(push)h(instr)q(uction.)33 b(W)l(r)q(ite)23 b(a)e(ser)q(ies)h(of)g(MIPS)g(instr)q(uctions)i(to)e(emulate)317 4410 y(pushing)g(an)e(int)i(v)o(alue)e(on)h(the)g(stack)f(fr)o(om)h(r)n (egister)h(2.)200 4594 y(4.)45 b(MIPS)29 b(does)i(not)f(have)f(a)h(bge) g(instr)q(uction.)56 b(T)-7 b(r)o(anslate)30 b(the)g(follo)m(wing)i (instr)q(uction)h(into)e(v)o(alid)317 4707 y(MIPS)20 b(code:)26 b(\(H)n(int:)g(use)20 b Fa(slt)p Fd(\).)317 4921 y Fa(bge)47 b($r1,)g($r2,)f(LABEL)200 5135 y Fd(5.)f(T)-7 b(r)o(anslate)21 b(the)g(follo)m(wing)i(C)e(code)g(into)i(MIPS.)d (Assume)f(r)n(egisters)i Fb(i)g Fd(is)g(stor)n(ed)h(in)f($t0,)h Fb(j)k Fd(is)21 b(stor)n(ed)317 5248 y(in)g($t1,)h(and)e Fb(k)k Fd(is)c(stor)n(ed)i(in)f($t3.)1941 5497 y(2)p eop %%Page: 3 3 3 2 bop 317 119 a Fa(while)47 b(\()g(i)h(<)f(j)g(||)h(i)f(<)h(k)f(\)) 460 232 y(k++)g(;)317 345 y(j++;)200 570 y Fd(6.)e(W)l(r)q(ite)25 b(MIPS)f(assembly)f(code)i(that)f(deter)q(mines)g(if)h(bit)g Fb(i)g Fd(in)f(r)n(egister)h($r2)g(has)f(a)f(v)o(alue)h(of)h(1.)37 b(The)317 683 y(v)o(alue)22 b(of)f Fb(i)h Fd(is)f(stor)n(ed)i(in)f ($r3.)28 b(I)o(f)22 b(it)g(is)o(,)g(set)f(the)g(v)o(alue)g(of)h($r4)g (to)g(1,)g(and)f(if)h(not,)h(set)e(the)g(v)o(alue)h(of)f($r4)317 796 y(to)g(0.)26 b(C)o(omment)21 b(each)f(line)h(of)g(code)n(.)200 983 y(7.)45 b(W)l(r)q(ite)23 b(MIPS)d(assembly)h(code)h(that)g(sums)f (an)g(arr)o(ay)g(of)h(integers)n(.)29 b(Assume)21 b(the)g(siz)o(e)h(of) f(the)h(arr)o(ay)317 1096 y(is)j(stor)n(ed)h(in)g($r1,)h(and)e(the)g (star)q(ting)g(addr)n(ess)g(of)g(the)g(arr)o(ay)g(is)g(at)g(label,)h (ARR.)e(The)h(sum)g(should)317 1209 y(be)c(placed)g(in)g($r2.)26 b(\(M)o(ight)21 b(wr)q(ite)g(this)g(in)g(C)g(code)g(\002rst\).)26 b(C)o(omment)21 b(each)f(line)h(of)g(code)n(.)200 1397 y(8.)45 b(N)m(o)m(w)22 b(solve)f(the)h(pr)n(evious)h(using)f(r)n (ecursion.)30 b(When)22 b(using)g(r)n(ecursion,)h(y)o(ou)g(may)e(need)g (to)i(use)d(a)317 1510 y(stack.)25 b(\(Again,)c(wr)q(ite)f(the)h(code)g (in)g(C,)g(then)g(conver)q(t\).)k(C)o(omment)d(each)e(line)h(of)g(code) n(.)200 1697 y(9.)45 b(Why)21 b(doesn)-7 b(')g(t)22 b(MIPS)d(have)h(a)g (single)h(instr)q(uction)i(to)e(load)g(a)f(32)h(bit)g(v)o(alue)g(in)g (a)f(r)n(egister?)151 1885 y(10.)46 b(N)m(ame)20 b(the)h(thr)n(ee)g (kinds)f(of)h(MIPS)f(instr)q(uctions)n(.)151 2072 y(11.)46 b(E)o(xplain)22 b(ho)m(w)g(the)e(addr)n(ess)g(for)i(a)e(jump)h(instr)q (uction)i(is)d(computed)i(fr)o(om)g(an)e(instr)q(uction.)151 2260 y(12.)46 b(What)21 b(kind)g(of)g(addr)n(essing)h(mode)e(is)h(used) f(in)h(a)f(br)o(anch)i(instr)q(uction?)151 2448 y(13.)46 b(What)21 b(kind)g(of)g(instr)q(uction)i(is)e Fa(beq)p Fd(?)151 2635 y(14.)46 b(MIPS)20 b(is)h(consider)n(ed)h(a)e(load-stor)n (e)h(ar)n(chitectur)n(e)n(.)27 b(E)o(xplain)22 b(what)f(this)g(means)n (.)151 2823 y(15.)46 b(E)o(xplain)22 b(some)f(aspects)e(of)i(RISC)f(ar) n(chitectur)n(es)n(.)151 3011 y(16.)46 b(E)o(xplain)22 b(what)f(needs)f(to)h(occur)h(to)f(tr)o(anslate)f(the)h(follo)m(wing)i (instr)q(uction.)317 3236 y Fa(bge)47 b($r1,)g($r2,)f(LABEL)151 3461 y Fd(17.)g(What)21 b(is)g(a)f(stack)f(pointer?)151 3648 y(18.)46 b(MIPS)31 b(uses)g(r)n(egisters)h(to)g(pass)f(par)o (ameters?)58 b(Why)32 b(is)g(this)g(adv)o(antageous?)58 b(What)32 b(potential)317 3761 y(pr)o(oblems)22 b(ar)n(e)f(ther)n(e?) 151 3949 y(19.)46 b(E)o(xplain)21 b(the)f(differ)n(ence)g(betw)o(een)g (caller)n(-saved)e(and)i(callee-saved)d(r)n(egisters)n(.)26 b(When)20 b(does)f(this)317 4062 y(occur?)1941 5497 y(3)p eop %%Trailer end userdict /end-hook known{end-hook}if %%EOF fs/www/class/fall2002/cmsc311-0101/Practice/prac.e2.f02.soln.ps0100664000077300017440000036705007574550750021340 0ustar cmsc311%!PS-Adobe-2.0 %%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software %%Title: prac.e2.f02.soln.dvi %%Pages: 8 %%PageOrder: Ascend %%BoundingBox: 0 0 612 792 %%DocumentFonts: Utopia-Regular Utopia-Bold Utopia-Italic %%EndComments %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips prac.e2.f02.soln.dvi %DVIPSParameters: dpi=600, compressed %DVIPSSource: TeX output 2002.12.07:2359 %%BeginProcSet: texc.pro %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3 1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{ rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B /chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{ /cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{ A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse} ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17 {2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{ 1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop} forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ /Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) (LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end %%EndProcSet %%BeginProcSet: 8r.enc % @@psencodingfile@{ % author = "S. Rahtz, P. MacKay, Alan Jeffrey, B. Horn, K. Berry", % version = "0.6", % date = "1 July 1998", % filename = "8r.enc", % email = "tex-fonts@@tug.org", % docstring = "Encoding for TrueType or Type 1 fonts % to be used with TeX." % @} % % Idea is to have all the characters normally included in Type 1 fonts % available for typesetting. This is effectively the characters in Adobe % Standard Encoding + ISO Latin 1 + extra characters from Lucida. % % Character code assignments were made as follows: % % (1) the Windows ANSI characters are almost all in their Windows ANSI % positions, because some Windows users cannot easily reencode the % fonts, and it makes no difference on other systems. The only Windows % ANSI characters not available are those that make no sense for % typesetting -- rubout (127 decimal), nobreakspace (160), softhyphen % (173). quotesingle and grave are moved just because it's such an % irritation not having them in TeX positions. % % (2) Remaining characters are assigned arbitrarily to the lower part % of the range, avoiding 0, 10 and 13 in case we meet dumb software. % % (3) Y&Y Lucida Bright includes some extra text characters; in the % hopes that other PostScript fonts, perhaps created for public % consumption, will include them, they are included starting at 0x12. % % (4) Remaining positions left undefined are for use in (hopefully) % upward-compatible revisions, if someday more characters are generally % available. % % (5) hyphen appears twice for compatibility with both % ASCII and Windows. % /TeXBase1Encoding [ % 0x00 (encoded characters from Adobe Standard not in Windows 3.1) /.notdef /dotaccent /fi /fl /fraction /hungarumlaut /Lslash /lslash /ogonek /ring /.notdef /breve /minus /.notdef % These are the only two remaining unencoded characters, so may as % well include them. /Zcaron /zcaron % 0x10 /caron /dotlessi % (unusual TeX characters available in, e.g., Lucida Bright) /dotlessj /ff /ffi /ffl /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef % very contentious; it's so painful not having quoteleft and quoteright % at 96 and 145 that we move the things normally found there to here. /grave /quotesingle % 0x20 (ASCII begins) /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash % 0x30 /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question % 0x40 /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O % 0x50 /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore % 0x60 /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o % 0x70 /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef % rubout; ASCII ends % 0x80 /.notdef /.notdef /quotesinglbase /florin /quotedblbase /ellipsis /dagger /daggerdbl /circumflex /perthousand /Scaron /guilsinglleft /OE /.notdef /.notdef /.notdef % 0x90 /.notdef /.notdef /.notdef /quotedblleft /quotedblright /bullet /endash /emdash /tilde /trademark /scaron /guilsinglright /oe /.notdef /.notdef /Ydieresis % 0xA0 /.notdef % nobreakspace /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen % Y&Y (also at 45); Windows' softhyphen /registered /macron % 0xD0 /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown % 0xC0 /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis % 0xD0 /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls % 0xE0 /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis % 0xF0 /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis ] def %%EndProcSet %%BeginProcSet: texps.pro %! TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]/Metrics exch def dict begin Encoding{exch dup type/integertype ne{pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def} ifelse}forall Metrics/Metrics currentdict end def[2 index currentdict end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{ dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[exch{dup CharStrings exch known not{pop/.notdef/Encoding true def} if}forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def} def end %%EndProcSet %%BeginProcSet: special.pro %! TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N /vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N /rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N /@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{ /hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B /@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{ /urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known {userdict/md get type/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup length 20 add dict copy def}if end md begin /letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{ itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack} if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{ noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{ Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale }if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState save N userdict maxlength dict begin/magscale true def normalscale currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts /psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR/showpage{}N/erasepage{}N/copypage{}N/p 3 def @MacSetUp}N/doclip{ psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict begin/SpecialSave save N gsave normalscale currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR }{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N /@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X /yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end %%EndProcSet %%BeginFont: Utopia-Italic %!PS-AdobeFont-1.0: Utopia-Italic 001.001 %%CreationDate: Wed Oct 2 18:58:18 1991 %%VMusage: 34122 41014 %% Utopia is a registered trademark of Adobe Systems Incorporated. 11 dict begin /FontInfo 10 dict dup begin /version (001.001) readonly def /Notice (Copyright (c) 1989, 1991 Adobe Systems Incorporated. All Rights Reserved.Utopia is a registered trademark of Adobe Systems Incorporated.) readonly def /FullName (Utopia Italic) readonly def /FamilyName (Utopia) readonly def /Weight (Regular) readonly def /ItalicAngle -13 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /Utopia-Italic def /Encoding StandardEncoding def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /UniqueXX 36549 def /FontBBox{-166 -250 1205 890}readonly def currentdict end currentfile eexec a9994c496574b9cb23f8cbcd64a4a16861c70f0f2da82f0c7b06ceacd6521bb0 cc26f1cf47836cbab75757d7a81793f43e56cc8f22f926da04d715ab6ff2e257 5a135dabbaaa58f31f548cbe8a76c69e2402589b9e5e46e757f06bf2eddbbe6e e48a624cbe1c4840a338e90f7efbe9f2194aee1c869bc4cd76e2f1937d78e207 d8149c05b50ef0bb361f5905977c40be7d4dad07b54e087896acda5aa70ab803 9dfc55a73134c7f1c9be9028d3ec6ccb0fbb8fda52bba4d7551a8124e68481d0 775ed7f8ec68d8073bfdd3b67f72ec68634ffc57727e16b9aba841546ae54d99 b60e227682315510edda09bd6ead4d1652f449d737592c44bb178689a3840169 53d899636686efc6f838b19f966be5f833f5e7d41af38a899df96fdce1ebc116 9b0ec87c930d9fdcbab7e74880e9693a24de9c67dbb0dd75b3dbd113b079c490 60018433ccc06ac1df33fc090c4642fd5225fa0a188c131974ca8820319704dd 14b1719b958779d1475d92e712322eb2e6a79d652c4e3f5833aca3091675fef3 fde103446e565428267b009d87bb7d6bc40f46b498b19bf1223aba33079e41ba a9561254a9df97a48d71015b6a24cf952539f664f172d565f39a55e063154d80 a960cd56c34011fe26e8849c6677427b2c7e728cd16272363d76661b3ab8bb2c 85c20b747519a4431421d4c83783feb896c45688ff7f824381cff5654a1bfc68 6f4894e1d265455fc00064d08c37dc3a47b59a5b2d14dd893a2b871492b07c4a 591695c8df012ef46a750d6cb7fd86696e7ead280648bd737e9ea490140f3b1b 1dffab2ff8e085a8b1c78e4b9ae9cee277a29233cec5ab2588d1cdaf4bbb6512 e1b1476c68fd3db18ecc2536968ebebf4333c2c3709ca354f21fffc38c3858c0 561378a701158ed0201a3b236ca9cb7f7528d1e5e07a9bfab04f8d0fa3d12405 5ba2fa9dff76f41b980bfb36e8db1300f7172c902dcb9f5f0bba3cb9c212bf31 76cb802ddebe556f4610021fa3700d476a2be2a66ae6c658fd0a95bc1b9629ad 03fe4e775ffdfa9f87a274fd904c0db5beae258f9af213f257db2be0265b964a 681fc4d2855f5356fc87576d847db274fed9ca5bb4961ffcf53f28b673f50e31 c3c634604e718b7666b466557f4f6bb6239339e028de3909dc47cd634205ddd4 69a944f11883dbf89344c43c513c35ae966a37a89795177b9fa95f3713e4d48c 379e33ffebb1bbc92521cefdc36e4cf5265d28522cb874b9e8459abfa31effa0 e0dc4d34692fbeeeecea87355dbde65528d1f76b89c4b5885e3d70b3ed028f5a 0510fa7044cbe74a030a9bf06c592dc447f9ed889988e7ad42cee85d5c3687a2 1d78ff32ab9f4cc829e7119f3d144ab2c78da8230df854cf4a690b27d715174f dc062ff5c7fc09639067d72d5e1d2d0c4ad7cb68577cba081ac2b96ab6b0bc31 89672edbf088b8faf8ac4d75f000db534e2efb3eb4abfebeebfe490c427799b6 3b7c5cda43779a004e3b6240034e9df8864e1d4133c6b3f0a82e9c90a3e6daa1 500aa415819dccd9beb3b63673332331c60dd99752265b0cbce52c9579138f0a 40a8ea9853b58b28e03983265877f0ecb42c2032a361eef0ee68eae434ec7291 b92c3ab60a2269dfea64f5078f3b0f10f284e9632ad89881f6f55d64d7d9cdd4 ec5a431ae7326e7dcc4f64fba2bf105546d5fa52654f2a7e1b66502bddd3461d 038c68ddf21bbc5defd24d6a66e940359b7a549b18c5bcc826c3a9767ee6ba4c d3554becc7b86a50812d68610254b1721319662e297e47f05e4d5aa96ad302ff 2587554df6fb3518e820468f0ff7dea36106dec355d7b3485595498f5710cd16 df97e66d79bd81730210eab86f7b912ff30f7c839c84e7d6bf2003d31d5e2e8b 6045bdc990283e6aaac58acb589afc64b7b3a0d61c044f324c46448f56818519 790ddb16120a6778b69b414d1209101126ed87cf64e5b2b6c25a3bef8e2d8f14 25a85c9edd2e25217c152d594d65c0c6cbf20d2aa3f9ef8fb968bbce5aaf1469 23081eb7772ffd72a311a5881b3dcd8726f0e88d7242a416716824f24d35c66c 4ec716b86b6b5a1ef9e9e7cef0698075a5b6bf65754f2ef115b8b185aa933eda b4c3c7f50a144087a691453f9fc1a57a17be052f62b5a5510e542b4072db576c 0f8f856ab2030f3b0666230a005d4804c92961fdfcda1f7fbc01713fde9a6ca3 1da5107f2796fddaa150acd9457570a0d3ed05c678b2b4d30b001e8281278485 dabbe5d0920d38e92d8431999dcf100dd9de9bb4868527351bba6214e45d68c1 5476cdd323617c3d2bda184d581c9dac737c05b4b7150801ef622f51f967b2ea 6ced263f75328193cd7f54b947c620989d8064bcb455cb3040209f0c93f02f70 543f6dee93515abb88eb436f0191afd202703ec2b8e3d782620b4b60fab1794c 7634939b3095cb260505cf4b12b06c9065cb5b430d19baecf6f5d11f4f95792b 28dc9be7e38f8561a104df2410acc28f40f71625bde74ef3e05c0793c26287a7 7e3ae4c46e79181e9f8b61b0a3c04886c53814a478cb219e30c69ce7172ac790 1c22137ec503d59f25e4a8df0a88b35627c8fc2996d81cc96a1ddc5cc3cb5389 d3ceb7d3978518140aa5410b22abd8e4420f0b55114b0a75d4877a13f9b985c1 575246ceca2c043aaccc460463115c3cf8308f12bd9c984ee78fb8e88da0aaac 62689b0fcd21fb965cbdd94227f99773f7588f2966bf7aec3b2f8b9bc558e7f5 7c44cc52907af5b3232462ee8bea083d868f554748cfa554ee4c40044e35227d 5c39961dc432084e199f886ef809c2937a070b033873e92d3de024880087dbbe 2768b2c51c874ea8e472df545d24a046d0f9f02141059a99c57f910d79f03afa 23ebaeb7a113d7a6bd6cd6924044d343f8279dcf2942e1dad052fa85e9929834 9af85aae480898c93005277bc098d241c485dfff14f74924475d125b6b46e182 88240982e3964ef7f2c06c52005d3ead1ee52ea39a4edfcf9ae5513d3c18e983 add40de87ecf23c587235c83460c1a327a4e0d2b2a4610657b7623d406c3d31b 2a4f23ca39b18c31759358cc34669f9bc912d676359c0ea9cf5be0d983da0778 0df87921353ab20a0572bf120ddf434f19e1b892ee9aabfbc7e80b1bbda7419c b0122178b936f3b3eecc5ed5256e589e002169e0d2c6140d3f08e614e6fe5cee 4395db069e8ecbc1a0f16e2628a4698b2c0f9238c5a1843ce65efcb5d8e61373 98190604730272afb4ba9a342e7fb82532cd7cc3050666d34f6571325396b661 ca5e6e4fbfcd251ced2294a51ffce256ad3ed3974722d9de0a92a93daf66d4f2 d30e62ad762f3ad42dc77ceacc276a1e0c8309ccd8a77e042ba5154ab08fbdc0 cc1ee84b140c7ff7999fe0ad3a10103f3e10e18a4aa37884db9cda4b6fd1d152 539449e1d83a1ad3096db329c2a984bff1c6a210935365440b41d5ed2b356dca 3e265770a8d88ad48c87b6c86b799493c06992ef64e2c256a1e89bc2fb7d6f80 0078de34c7604e48a10c48e5ce54446b139758da7f18b4a2116be226690253b2 5aa2525748adf189aace14e12cd64289271b267adcabe25d1713b3aa4fc6c453 2b6b473de7b705d0e501481f746ffc0d9b4a6216c4a425791cf0bd7915ec06fe cb8f53c8c05f5e6ed64f9e3e05dcd2f3d866b74484400c2f32955a20a61d1843 bd5a8d3345af9e9b9ac9adaf64 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: Utopia-Bold %!PS-AdobeFont-1.0: Utopia-Bold 001.001 %%CreationDate: Wed Oct 2 18:24:56 1991 %%VMusage: 33079 39971 %% Utopia is a registered trademark of Adobe Systems Incorporated. 11 dict begin /FontInfo 10 dict dup begin /version (001.001) readonly def /Notice (Copyright (c) 1989, 1991 Adobe Systems Incorporated. All Rights Reserved.Utopia is a registered trademark of Adobe Systems Incorporated.) readonly def /FullName (Utopia Bold) readonly def /FamilyName (Utopia) readonly def /Weight (Bold) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /Utopia-Bold def /Encoding StandardEncoding def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /UniqueXX 36543 def /FontBBox{-155 -250 1249 916}readonly def currentdict end currentfile eexec f9cd86fd4821715265f16a614e3770ef80561e77ba6ecbb4ef4232445eef2839 94e93e3c8c9b09c09d71542241821e07888ceb54e8cacc8a45802f50c0afeeca 5e3d9114c1860bcb2ba5fd2a879a0d79953e30c90d8347513f4ca5f05b2e231b 4973bd1e9db66a39d846a8b3d9e48da72e2de8743ba2e104893167c235719245 87b43ed3b6552cd85e4bbdeb9f46bd813298d531c74be81995a52ceaad4112c7 f65773b088bffbc9874f615371c5e7b50ae99d5b6acf9c80d87057bf3a424377 f4284b7232096b6ea623dacd1c925ce09cfa6515f675aacf815c38e984b4ba40 0d409bb62cd4ebac75201c8e782e68fd73e8622c46b696b1ba37ca9621400041 d95b948a6bbc089fe6b230b39bd358228af9b3e68418166a9adc4e7665341088 c47c074aa4b21b0949fef9929e1a32ffddd2d02145cdb256863cf6067d27ed9a f0aba85b1e0cfcbab7e74880e9693b5626ad31e6b5c2d208087d86c116513212 710c9d6ca50e1503f8d4c2863fa378f8184189af0cf109f4affe7cb74563d513 2104fb9dc6f3f5992e075633a0baebda8ebe9a07c3ec4b25fef015d9915a26b1 d401a6722015090672714181580350560caf79bccd6040c0c1651d917c73107c 2d46aad5d4a370b55e896ce1eed127b6f0aabaf7c4ca62e89003032abb2c95ba 58c4a0eb0bb1a59a439a6a0c2082e50725b9e8139324af06ff03b4269a697342 8fab0c1fabd320f1452d9c435e48037eb8cf6df4233cd9c05691604146cc813f 7ea131f21e9863b7bd1b087a583af14675b9bd31fd364d5dbddbc9b533a6ac38 c4bdeb28a1ae3d2b374da72405acf67b1b3a83d80726301b3677c067c748d857 ae1da4f723d4365647de10f90e96dd7e9ab9ef5c7e6866a13b807fd3f78136d5 72950a10bb0165e61f12c60a813c7e35eeb9a0500725dd912ca2deebb238538e 790af851b14643f40e5eea13660e57b5c407735079a292a7c162dd11d0a3d342 67290f1c9261fa5de6b92ca1e7daeb7cb970c766b3e0396ec0ce55dffbef0bdc b437fbb4d63634b9abcf5844e76f9313ab2182e1fb3c47a705a1d97b79e93dbc 5e48ac19b45f9be4b9225e5a7e1d3679dd21001eca3c08d6febd35fa5453290e 1269c1d195e45338c10aa60fb8ab9e5a5aaf08c82e737f082bb6216d7cc1d5d8 8906c8b05c4432d04561377438447eb5fade66deb7f36322f503109da8b55b5e cd2f9ddf2c75bcd699f4a195d7bf14c910fad15824eba1298c3bd0263c6b9b37 71bab266e433ddaf00657d2f9dd10a68ac317cc09f8f985472d9b8b258d64c3f 2a018fa5ed6218913bbefa7f70dc8f70564d20c666c4ec53a90da78f1a51cb02 0a8f65b1822c00589f34a2ea0817c6ae9391e4a8b82dedfe4dc44bb8d0511fb5 7b9b0d6fdaaf50b97d96db8a4dd7b92f7f895f71274887d955b77c504f2aa780 ea1887e616ac7643e0bef734b37a72a6cc300fd27ec19c8d31c9313546251290 c53b9a6c05415ed58ae04c4f779b0ea1689efea26ad6ae0d448ecacb7d380efe 11d271c572ea6f1b249812d575eff65122ce10dcfc74f2d75129fb47e85db1a9 5d8bd0991b7d3893574644855d5930ef6592856eacd334014b92d1ec7cba9051 de7ece5ae71c5553a14c595ba16ca3f4b585ada09acc22fdd6c4e27c64540659 d6faff5979d819dea9503526270e0e1b4c09ec17b46e732f08d27ea9f868a387 8647d5e17bbc07452b837dc5bd4f7512cd8abd38d23774ecb6ca8166788d7ffc e4c0dadeeb1847936d8e40a68d07749746b517a29f469456ff2c2fbc9c4ae27b 56b0cfa5140ec9dd43418619f22ff5ac37326a3a8bace5e27194a39c5daa15cf 202761a8bc1116d35873223705133750a96afaf49638930d9aaa4290e8a7870c 0a3b7ead188847e1d95a36f2da628672a92ba07d564c8e876a7d4053121a96ad f518bf018353f84c4a43c108ab05c286e665b275f0f1d250dda950187378b138 5a2b9bca57b50a2db25ef6035d681cc59af6f8345b09d03bc781d45acebe230b 2f0130d5d1feefad8e8c59d8c6f885ea226d2162f11ead012d8f4f3e155465aa 3ddf90e72d3eab21554e41520d4d37027e37c7758bbecb3cd45f72f0b09844e0 cb964d3e4109f34ee958b116f11ede7a56ac8d6f7f2c9e048509e975dfaf1108 7260f68cea2ff2fe16377a6d79997eca36f335b1acd5d92ba287087368d17bc2 02ca3b8efe6ea48a19129d9b735330e806bf1168f812a4c2807407e3af3b69a9 f7dffe8c6dae5e8bbb9a5970dfd7bd4a895b7b3e4d1d6c9831a88cc612b168df 00f80f2dcc96644050bbf88b473a443b31f126ee404367106bd71371363e1fb0 363dd03954f947065a9812b002f16a001762a8bf5ffee2ce1f3418544660b7e6 352b01a125ddd7c6853542f4fd74da343562d05611234640deddc9c5bc3d8ac0 50da68318288f9eeb15e1394d72804f52a4c4c920eb1dadb425717e0f9425e58 0801878a9410c5889c3e61de7345705b70bd772f40032c336a6b91932ab02e17 385eb4b584991a35f4a6ef1d23b50c2b300354bdcc828337b23d4b9d421e1241 5195cdbe7e36892524907fedfb79f7232a4696d32957ba9610acbefdb643861c 3d94c7ad22ab17a73d08d1a92f32fdff1683772dd011bd67682ca8bb043cc12a 39315b1640e75b1253844ebd21d2bc1c2691d4a0d093b5971afffdf087faa30c 1d82e9e666fd219100deb1d5bfb6e191ad4a0bc93f89355584679dd7950e7d9a 760daeebf7d35a6168c684e65208d8d8238bb4d12494a69f2927a36ff5b932cb 75c7a6f01d735b145d3610a589333f0a10d66265e5c1ec15df7b8ce078cbf4bd 4f9694ab6e571286c7c0a258107518460440850c9b84b4ca058c6e44938d1084 f974b0a127ffbb863ef204c8b0cc83f1878c50f06a64f750efe43cb0ea22b97f e2d1bc62236d456aaf6a1a8eef982235cc383ce5cfac455dec44df6f4c52397a d13ce0c7edee588f02343c5806fa26a6564cc6c852dfce923f4ed5dc4304beb5 9beb5be7f4719881f0e1a3aad296b772d1317a5d9ae8226a344bf3f8154fccb7 0eac910ac15ac926f2bbdba70883ff87555940c37dfca6d975ff311188c45877 47e27fbfab649e6df98472bbe9cd6329b8a3cdb3b713459e8b24739b8b91a83e 9fcce82f51b8e78a6d497c315f5a090cb0bb6b5920c2d735bf510f589fb14a55 797ce62963d961f456485b72568fcf63ee0f2c926726ac8204e2c98c9f664daf 7dadf82bd90370db3764a7ab339f840ff896a13982a9f8ea1ff7528f1ff1bb25 05a6aaf3d899ddaf41078e42a5ae83644d16e618727ab4148c014db65a9af7f4 5d70b2bedc08172d9f544c2eb37bca3d623cd1726b20f5fd18f80e91029122b1 f72ae5390da2f70ebdd90460a5d3a09d8a8f161dc74bf4510e3a2ae79e678bb5 81222ba436bbbbbd8ee8debedca6615828733ad94ee8c4ca32b548e54eb6be4a 2bc2ab098e6ae6aa06844cb969b4b164bb5e8fc586fb1f5413a2c47ea083e4ac a14f967725736322ef9a5c31c610cbe0d144099cffa598637dd61d45ceff92a6 7d201a144192cebba474c27d5cfd4751259253451c57bd5206b8299bd92fde2a 054cfd439f06fca44bcee7679eb79c6aca3c122c4a1af5c3a6500f2ffe80881e dc7e69dc63aeafdae5d22f1dc54abc73e46857d3c787ba45a10d8e5180e70ff0 4c345fea31b47a7ac6f9ef209860698f383ca3216a8180b0d2dd3a29f15214b5 6e37cb0773976687ecb26a6a8725ace41ae5249050dd97a3eef10a312f001619 b749bc172dad8331833ac280ce8cd85b34afa2c37b585a5e56a90f0479edd87e 96aa25718a435a845ef304139d951b6b1e953ee80f74b0b36a1f8c42a7b55e72 96747655531be435faa0b98ea8a2e9db5492dc8e0103b072598a6fa4c75261a0 f5147a7650e454f92fe3af186124089d3a1640c7c7aa31dec6a4f6707a60f093 e12fb2c4d30d0fde95f71b81ddad5473838cf9508aa531916c437bbe4bc8f600 7b0301385537ef0aedd4192f90fec779837ee670475eb7dfa697e809c7174990 e58e5e5f3b722f67cceb4560a6dc497392de741607e0c642e6fd3d8cefa0a386 8048ea8ca3de1c64b2aca1d8fdb6fb6a037bc1e5f9bdd7e91ec3e792f117e579 93ecb0861dab 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: Utopia-Regular %!PS-AdobeFont-1.0: Utopia-Regular 001.001 %%CreationDate: Wed Oct 2 19:10:38 1991 %%VMusage: 32987 39879 %% Utopia is a registered trademark of Adobe Systems Incorporated. 11 dict begin /FontInfo 10 dict dup begin /version (001.001) readonly def /Notice (Copyright (c) 1989, 1991 Adobe Systems Incorporated. All Rights Reserved.Utopia is a registered trademark of Adobe Systems Incorporated.) readonly def /FullName (Utopia Regular) readonly def /FamilyName (Utopia) readonly def /Weight (Regular) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /Utopia-Regular def /Encoding StandardEncoding def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /UniqueXX 36552 def /FontBBox{-158 -250 1158 890}readonly def currentdict end currentfile eexec fa444f2716d92b815f58ca9049c815358e22e32e73a3e6a653c538ee56873363 67713b8cab082730570f5b5efcf34c2cdfb6f8dd2b7905a37c1924a2424c16e8 711db76501f564506b0f45fef10d83c3e3c6df2dc0af7802e7f42c81b4243697 ca09088b868d983e79e4b2c3e17321993cc8837921fd4ff7b92a1294c5ba33e6 8fd40e63df624b51865721e034f71bf57bee0e0c2a9c169c7a626496540d45db 585d2bc93f83e6829eacb859a194d7a57904cfae75e6188c7121003ae40153f0 0fe6fb52f339e72d4aef38469328465a3bf0ca1ef58dfb447612eef4ada248e3 ca525b0884971b85099d73538152affcad51d03eb4060a5c580f453ee78e5c4b 991f77c6e9600c135395d56335a7c3a75c0341979d6b404ee496214a5d20ae06 e17d80d37bd3540b8fe913bae1674afe37d0c41e3d9836a7b5147be32f9ba01a df1a73b89d30bb595a4b279032e37c8230b6d4933065947c3e9150d2c7c4d439 d60197eb69991ef059edf886ec0bdd28158a71a2df96dcb67fc0bf81c34cf27e 12d6ec950a75993af99fbb040af595134198151e7361672d8538cfadb4716785 dbd48da442ccc911ae9157b14e433559dba1a1c5619e99b57274d6998eeca3a4 7e804d8fe3a664f39f33237831385949a230a21e52a2dda733f2f89b02ef4ce2 5d603c9bd2f8e4c0443070940f0380dd1ac60ff462a9a71965a79d787e0711df 0a69bd86a4846965ac6c77f2e1699c4620c1bd9f5b2263e13a2213631c55f7ab cf60d2e63a7830d5011d9b9934bcee2103f4a5d56942ce0f590a15dab480e5e5 723afc8e1d8d96f3e0d8629b88ee477ea6cb8121b0adddf20405f8a32756004a 8a59b2cf922a6dc0747bc15e99079aa12ac0d9fabf8b47c5a61ca5268e01317e 1f0a38c468ffea597a392ae3399daf7c03126987750258b5e077d703cdbe05b9 a5fc4d80e8551c2c06a2c579272877fd462fac6569a7a9f964797df79628ba7f f77447fc2aefb25089ce946e0aa5c5ff21370f0cf84d8e2affa8b30891081b16 6fb86fdfe65e7e02ee551c6b3e2e324cf7e18664883dc538018ec8cadf7093f4 a13708013d6ca2afdf644c0155342917c2725598fcafddaf8807200682fcf04a 4efd5919c21ed2ec2f7951c2db953ed292a54783f5c541bca68d305b05df5c5c f17b9af31035dd8a77ed8b54d4de7d684f54c58a28f0dc55e7c692cfe444216b 18751c24ec1c8a00a5cbd458a0ad54e7c13f26b4c4257fd992fbd1338845fc69 6b97a2ee6a4d4f03fd387e745eeb8e97eb67e40bacbdf1d6c08e9fa2e317d30a c4234559096affd5b2e65600d083ceb0bf09f6c2bc3af8cc00ff5e91aeda4c82 320fb38c437df9dfc5e0b2ae2a80c35b1f180872d18617a48b118914a9aa4b53 ff57f329d2a63f1ce7610399e8d65a00b58f4f7d05f7e46270f6572b2601547f f3414db6bfc5905df0093102be959b4f1928ffe29907c31002ffb9146594a29e 0e16fba9001f0a71d2b85ac48b7ae6e7c736c6b29d3f58d5acc6fb82b1d1b754 ffb26a9642215861570e72f74f17c92641a795ae1918dacd54ecac51f75e060a 7a4cff21863b4524917b756664264b3c74150bc7238b1d5b2261a2ad18262a07 708799d9948d6217bcb423e67b1864381683aa06e35cdc60a57d9b7e9349e2cc 71911a0fa7dd60a2ae8edd0d34a23dde422c4040ffd3bb82a4aef63b9a787cd0 3593ee11bd953888aca122ae5b0aa22aa29cb0b30f7ac7c7cb5d045bc640a82d baa1b5a2d4b93eaa0de6cb59dc2b327eddca1d059e0bf58efbea7bb5ac26919e 4bc6876bcaed5dcb2ef39f1aa8ee6396fcdeee15f4be56d723abd366444817c6 b0e1c9f7328e41c3fc8af463252d2d2d6f3b85a039b6fc0ffe1e258e60c167b3 4ce9c38201c812b1a690124b8a3d04ab545887fe7a20100a84f9cd1a1784d9e1 30b3dcd4340f32f4578998cdbc99ab89d7cea83c2a2458a250e6d08f6b6594a4 be2e55eafbd3cb9b341cba65104473194a083e58e5a74d1f3fbcdf7dbb3c35b3 7d24cfa170c05d7eafe1125277241875180aa13c3bcd77cc73b6ca3a229697ab e7dca3350e020e039dc4776133f3593c942539038e5e2b944f785ff63212dcbc 2f848a1382d98afbeaebe0e34b8af842a8aeb2a6c6cf77260ef06a3653fe0a2e d3642178135b9f5b360154cb54d21e54f1c175d6a9125d9002ff29b64c360d5c bda4d03b83bc69d694d2c43cb2770d4a391f3de34ece16708f999268f0eae6d3 a02c1467fd3fd20d240627cdc3d6ddeed2d77a5ee050b7f405d7504f626a4ae8 7370bb4d224381b027c1e0ec65cf291222fec2ca3eb2b55f447c7de0bdb181ac d2da6f0cd797078cabb3e2b0b66233eb2b9500907738b4918bbf88a1631ee3d0 ea7fec8adffbee9c34a5c019cf66f1ade36165f3ab42f123fce462b8073894f4 504adc7e2806822dbe170052d1215969db6fce18d7b1805d7b5b4b244fbbc13b bafdb31bf67bcb631e20f071d093934a38776752440540326deb1c2d28c29e7f 9f510c8cb146d8bba7cd432bce0046e59512a47168e3bdcb53a0644f736cb777 b71e703d35edf9b5df2d7ae01744b88c6d8b25495272a00ec863cf1759f9828d 89709b6a5a040726e1cec7b0b61dadb958d3acfb9c3e88a7b7403d6f43eae7df ef2df124fa2dc9942329ed6e6bd88b267b534693892b3360af22dd78132ea3a8 8493304c9c6636257ba74e12115bbcbfabbf97ef750e319c02486b32f1fadd09 8caa2f52b97d989e9b5c28e461c99f8fe2e10c45f01237a5678f09487406e962 6c05d11ba12709d3ce778ea7c548c96c95080d2aadeb9d4348778967a2751632 bcadb5671c2670fd9620dd82365d3bb27cb311d1944c3799af425983d000c8e6 f78708e45ff06e1748fb453492e9a362ee5d5d98d7808fdab21347a96d124f73 ff91cfe4713fdde430602251098a86ec179b4871b9bc33c4810d13fa6cc1b18e 1fc5b5b3685902d2e79f421b08bdff28313ade8556f6ad5c1a1d757a6c3db4d8 41d70c1eb6c2f9f1182686995edca2cd0b8330ab4af9443709071deb6ec76b65 cd6a5ac6af07a94bc7b84c0b4a8233c1547168f6543ed72054464b3466bfdf55 894a4ddf9e8076c9dba89eb8d386545bb39f0446580a1a679a4510d3035bdc03 e8000b2bd41a28d1bfb654fa0b1f4c11315be881020f108c3de13ad25f1ccd7e 56297ace1ffa5d6d3b4c2451aa63ac4a58564b89d652bc7899bbac8ea1aa70aa 46c44c09897ddbb80a81cd06b0f932d90ad2994c79a40b31ee434d73ac85a789 4f5f27cc9a1b9be3ab283f8e04ea1ca54943aa2c3ae49219226be1b0da01038a ea7378786abd1f5365c26bb813865bf0135a802485e4737190dae0538ba243b1 56e80b67e2baba102e0ffa1d6203537524d73a8beada7801765b66b5c8a07d73 1505a6dadca71c4b9f6985dd4ad86b46ac98a5d88f6fcc99afa05072095b0f60 dd766815f39078cd82576f0041c8b660746e0444b3d364b719550bb7e12d9961 09702900d39beb302fcb6f2e4aba62c7de66a6be66f42fc440f3bcdbc83a08e0 af113d575d02b79ee964c6569778ec373d35bf046417a24d6c40b8d5cc3a4bf4 9895337b3818f678b245609513eddda2d7097aee470ad5f1e30de7a4c956a1bc 29e8c82aae65dc84bd1d529c4dc7a7a579a8dd11728d94d1dda916e4a8a7c2cd b43261a0008201f4f9450a1dfa221a67f65a303607611b6aca2dffd8fd7e75cd ef3fbe7fe5588a989cc0db1f320987c25246ce805c7c481b8f590aa5ed7d3c1c 8c86e1299d3060c9b6b38c7a49217fbfe4dd5759a9dc5d9ac91af92611c52a18 ac068167ce1b3f322c574a896266217737103a272f02bde4aaa298d3cc99a375 5a4d59954c1595db9910583873ee1f824ebf206b57a01b04f43339fcf6d00649 d3e7407b64aff4d70fc454cdb9b855cbab764ee2c84a31c68dac4b8d7779f751 3f15630fea9b9e71cf141c5e9264ca6ba79a0975cec7b0b61dadb95b6a915479 de5ee8463fc58da414939ffc37be0f29ae62baeab202e01ce3445669bcb99f25 0f1a801bd25e39d7388a7492062045cbec4858b99f8ef56ed5b87d1f72630a5b c3aa49dddaba9573d6d0d27bc189a8daf21f2dd97bf158a67b832c1aa4af8824 475e7d925ec52f41657bc022fb47122de11a3ac76f864961153efd9458eb48b1 10b996bc0bfb11b80f0b8701ef07f83662e0e5f78cb2f20f09bd3f652b6150d0 3c338f98b5d75ce1d33b1af9c294c27ed096da3b1f8128acf24719fa8de38f2b 3e7cd80cf099d3d01379f585f83730c148802260b2aef736bdbab459c4672543 dcc130407c638571b76a18bf4b42fface646392bcc3e6c052a59243bce866db1 7d641a0d2289231f07baa9844e43dc71a9260f36d6b9d8f13078b3cbf741daf6 8e4114143e04fdcdecddce533216bb352557f7439139edd80fb165ad50ae31c2 9bf4ccbb422139dd5cb905e04d43b1098794e9166c52bdfde396c123efdfb94b 5eb84855baa0abcc95d70804e30516d88899c3a54021d4989ff3bcbb28366858 34eb80b8b6e875a67095f7e64231e58123abb6d4197710f9cbb88fa3dbb23f5c 3d242695ff070d1be81fb46c94a97992fe8722a0984e286d874e53a01989eca4 d8269eea164c16d34dddf75e4b337a6cfe211d85ab4cb6a4bcde7eea12fba762 7382ce1984b9c7139ffd7321c266f0c8b58f6404f20348c9660ec8d94da8043e 09445f29559c379b970886424e58e51969623f8cf82943872feba0472d9ec49d 6e086c584ffa11b7e5ce36fb29caab3bde0a1f3901369de7a3df55a7b80de8d4 b162c7fd499bcb2548aa3ece8403a60829754d899bd8967256cbaa92e1751845 2a616169fef7f6c2a4c2b46ffbd7e6e6dd1774cde06db377874832aac4206843 0d76d834e8f8677a92392eb9f888d70ee74e4ed11a3d105427b6bfe9311f66f9 fc83b3a505bd2c3a9ee65b3a250d2e75d185da636b144385556f5459587261f4 290b1c35119589407b9d957489ee1cc9fa547be2e9f400107fab860ef31b4b56 31c0b0ac5e57ecf59170bf5b88c9f8dec25d2997771cd4f9f5adfb59b70f0557 02d82795da0adf0653753b0c6927a9d4abd88f27cc5a05ddaab90636a71e51ba a95be62d5f70110bd45bff39dc1c736866977f7da14915258b4ea76425f63dbc 3c7c17ecd7f7c492ec7d32a4fdfb16c5d2b9e6d5c2d8c503e12659b26b2053e3 484d48d5f7c63013a8bca37d7a44ad8f770d1955a5ed332d5adc97e849113f8e e3678d101fa8724e8f97509273e4087e9b0081cbf488a71e2b3e88a1995d46c7 2eef942819204b37d927b8235d4530d8e3929530a22ddb5f0ccf6c5294c611ab 190929d8140ad0b93791dc06a6fdb786179a86b38802ca99f0e18e1fd4b60842 1cb03a037899f2e269093bf4239e9282a3bff47625f87cf41067b6ccb6bf0f74 250745acbaf9470d5986cbeb76202907c962c742502252a857716770e15d86b0 9f599614ce5046bf35c7111bba489b78a8214b6f7a27d4d855f248ba56aead53 6ff688f5d4d1100cf7979910a15fd940779e141856b4084917788b57c33553f6 cda316ac147e13ec9853cde9265784aeaa6714eabbd86fbee03ee488d3f47b60 598c3b4f5b0898753067045739a2d58503a59219fa01b48c7e6de93e25372b37 aa66b91459646ee85d903f0c8c03f3e99d4a4adcfc101e90337aed9ce74a1fbc ba0225518d9ee2fbe5797f3a9c79d76e691eff6958aa4ceb6f0eb2114880207e 115426588a37bd6f20d8ae1fd8ff9f9e7ae6058c5a99c2c39e5de454bff2b1e9 90d07cd32652cd1154c8074ff697cc4c3c809939d97497c2e166ee65bf6aaa26 b8a7db18ffcf32ab9b8e73714691af24e6c51b993187e2c4452d56f069d37662 f1adb61a6cd32cba44e75660d3f5d6277010e9580340b357b9d37557de1ae3b3 4d981394ed4811869f0b566c559675d81b18ab8e8bdf56b704002ec0301b8160 148bffd03a1453b65a080d4a0ef403374f841508d6790299ca0e1f369db58250 90dbed77ee177d56359624564ce6f9c76b8a4e8d174cd982b0908ab3b16fa138 22ecaa97ca287aa284f5c2f54bf0fa1822f1e0856b2430e40b14f1865836360d 0f595a92724a83f02ee3890f39660923a5acd658ffe80505faaf57d2b98ae857 9aa8afc5d64ce31103e3884c2f286997bd56b5e511993cff9f08a2facee264b6 3825a101d905271ac5d5e834e2dcbe79dcc1339765e539afb9078041474f0b65 e239b6bc5ef2cc5bc1e179233a8949091213b41c50d6abbf2fa3ae02468bdb4e fa435e32675d11b0eb04feb380bb2188e13c7697cb599ffb41c626e814a5054b 2b1c8f18a4ae040b339fda52446869e6da6415f31f380a219aedc74a5cc291e0 a0fd4e9f2dc6a42a57c9721c8cef8521593e2fea090736dbfa3109b83daed6ac 88b377dcdb03017fb88c7f02525676c1bcc504634e7076b8f215536575dc0615 4b8750c0b6d5cea325551f0c2c80f525b1d42fe8512879c5f933e2e750375fde 56d74eca7b412c3e1f7f9119649a69bda5c33c4313fcf9a981c7f70a0fcc165a b686533f8c46f65f195064876bd2224e29e0318216f7285a6ad28f7dc3cd0f24 e059d177593294c252f5359bd8c17e6f2232bc1306349ad934295dda3385c7c7 84aa04b2822a29e5f6adce824531c3a42d36886304d1472a8cc337251b70dc4a 6800fed434986229ce4eb0d081afca71017a6a9299cffad257faf66403598774 967c9ad71366c9052168831910d81cba3c6d483fcffa5ac4f114139f9ffb9f19 1ca800ef6352210d46106e815e5ec75175c11aede7d142e9c034aa47fd0982f2 6d79209cf1a646daf4c199a9fabc665aa428387acbdf157e32b6e53ef720e937 74a932d227e75213e3b3b4005f9aa856c8c37632e5fe3e93f956c389ea5d4fdf 508078edcbb705b7ca5810cb8bc911360fa788cac410a26a4e0fa0a96f1601ea 64fcee9783c617114354c3a81934f49655e7e6db0dc6af2a30dbf58ba413c3f1 7b966600ef442c4dbf5992f0920bbaaac962c9e143f636197e0f2da6abf804b2 3622a73969826eddcbb77dece0b2b447a53438260326f2438b0ac5d6eb4d6469 2d51353038147fbe8aa71376af13130f9658d78391da0379a58e1ca5c4ce9261 44eec58a00eb27368c81ccd235ac0fd6fd83f3c6bb3a79ec47e2a7e26606f57a 28d18f79986ca2e99f8ada7e8039b5c43ad5a1c8a2f460832254061a2e614535 333ffcbca876273bcd6788d676d39755ee9554e862a42d15ae6d5618371f4b61 3b72d63121133985d4fe346c9661f06b84d52821cf422eab05fdb05798c74c32 4f715d6d5c11afdcb689ccdaf09069282d44b8e06d01a525c287c4759a00d434 61ff3cd207aaac2a78f85dd7eee3f14460b0693af7758fe1de2704f5ebe68622 56294711807784e0d805ad8f751bd7812f22cbb4db6d9c7055162e3fe268b8b5 c3179395cb9977e3329a763914e31e01a50337ad37d3b6d836397d450cca044e 62b8b5b2b6fe129635936b56d9f44019dfecba8c5515bcd8f761cae52cb4a15d 663db5eec54bf2805f529a1536b843f08b8b2f80216b5fc86a3f46225256fa5d 3b4cf7531fbd84d9c324d2dc6dcb3488bceb73e0cc82e241e6faef488882efd9 fd97f2db837b4ad410eb11fbdd40654e2a54db1993d15a2ad4b1712025082d2f 14b492a27ce45501702fbc49af177256c38aa3f6d6460e9c62e68ca7cf4a544e 3678e35518ff35ecb176d426ff76dd3b28c73f8b616b06a58e2353cc4d6467f9 14149a74a9a4352bd886168cfcc7eed2257e649369cec260fa7ebe06ec4639f5 6663cf1248784cc08b86a3021a501230241a067a37ef3c4154bdeed60a8d2003 f7c50649f3397288f9e0583f3b815fb6b2105085d1c90053afa09bb32d447497 86b9fe0535fb1e3d04e239682f78d79d847d360c941fec3b79a2a25ac180c31a 3d2a75ab2dbef26f6f511edd4cd18623fc277578f783fe3e4b342de641b832a1 452b2340dee91d5252bafd27079daa9606be5f4975f7e1b022a468652085c364 a37169f090f3f16a19cd2a532de7947d61ed21b819fd481fb8fe5dc5c2cbee3b 5ce79b3c0a8804a7f563f5ae4d791fa3f72b84736246aa8967c016baaf8c5b46 a2453bba98f7e2e49b91fa1c9a353f69fb0197fd00198962f54702afab93de98 e5d6917b13ffb14e7a93aa015f9609d503dbace4b276965e638dfc4f9a95546f 287db040292c1985af5270ec88a3cc6c642303f1c7ccf78213ceb8f4e4a1fb77 0d87601f07816c326ee8255ea2185f99a3545d8667ff97be576890d00e32cee9 03751d8622537444431d57480776da0b72980e67ca3565450a1b7c8a77e25305 66459e0177adab6c88b67bc401ebefbc00f692c0dfa0182010d1b69b1fb61a08 34131a098f51944940272b5e5f02be32456a63b396da5b6978635f67ebad78d0 9153d54c5901d6cdea9984c0c10a5dd16ecbe305f0cc17918f48e5ba1e844d87 d8b44147658fcc604395d8947b65e0ab90d383769388a1fd1e38f2a82d28ebf7 e28dc0d30deb53bc6ae2ac3fb2265174a649fedeb61a59b8291f1e24d3d9d906 6b7ccc0b5e7104fbce1cf394f0d10c1f0312e9a207101bd3227a3fae18303c79 dc4314314a689b54df4c6c4058d77686b29d8bf1e2a41aa6262007cd6f76a93e 5f831ebc389af59def29d27aa03ed8b5721fcc3e31849ec5a5fe91174b8b0918 1d8c57cc3f2ad21b36367927a7ec54c6e7b93acebeeed16dbc3c25c1592435f0 db87044cb10d4f5e8e6d3d5bb9c571f67602e31f46af9b21508dd521bb74acc4 4751c690cfe91cd315a289151e2185bb43310f5246e98d1ac513f6cb5a50c614 a3cf4648153e2d533a56576005169a0d506ca0f35eb0eeabc675425925983d11 353e4d5f1ca88ccae9d25e3ffc7a80ffe7d7875932bbf6a5c4c13525ab4397fb 67e203875eb17a93c08b5e7f338c4dd0d714e5542fdd128b6b9ceebe7a9756bc 325b73cdcab9a6ede565b852782bde113599834f1340eb08e7c91a1e7d0d2e8d a2b15079fbf9a9d8884a209c1663a67941d15251aeea82881a959be9b281b389 d07d7b7fb7e87ce654f0f4061b0fffe0e10e6d24d7847786b5f7c12d5f041a2f a1e861f2214fabc98a98455d1ead5e9cf8859a655bdee62c427c975d5d09bbcd b6c49fe36ba586c71d74cfdda0974c4d38b61e0dbffff06630432e34e3ffc099 18f07f8716b8cc5d78ff1b96ecd772c7c84972b7378ddbaf15e99c5150838a1e e9840335a32ffb07acb9aaab91698c280575216d0d01fd81cdfce2b23cfcc896 18a20fe2f824bf598f28a0d01766d697e30b996b1649eb4af0cda161181f19b2 72b8651a85def9588ff2bdbc7b2279e110bc9688ac4eba58c53efda87f0deef2 fc9d2532cba4643dacfac7b2fb46c93175435b046d16891e83682ba37c9b6610 65a17c2d930181fe13ebac6bd4f648475ecc64da55ced31689056f40ac358b43 4c5576fb26d1b964b9a39ebf895f06270f22993ab03e894d04ac4a5bd92d1e07 37b4166ebff04c43b13d861835c7da698b02193e436376db2da0b6ed3f16ca50 dad912aabdb6cd26559c6f6d7ecd06c5c677e969e33f1b28c3009365c51803ef 8eda80de54ce0b13629b9430f92819ec669753d660f8e159c80eedb678156bd5 abc51fcba6005e792dfe0e6db131dc3a6ce88d108700906c4f71096c73cb3ecf 81026add0095e8dbe8a6cc29046eff16ea07961861e7b6f3c073a84838306923 c68be922a85c444411f9aca0c0d8d5fb0e4faa5261169561ad2c3f9ad23771a4 fdf4d62d96aa2a6cd74b6d82c823464fca40163386f49fa31f776d532dab9150 459ea510c75c455193ea20c68915dff08a801302b911792b2a27fb963c47824b 9581e3f29ffe9c692ea5b021db14cc8656eb0e8bc41368fbc2d897e43d63adf9 2a04d749d4124c529ad00df584fa7bf5527c1050dbac7816b58ed0e56292645c 5a7cb1c291e6968cd64b88a82d6d0d3af1113a684cc22a6bb652fd655ae792e6 627f6d40af85343f6c3874b267ec0077a7b5f0c2d047bcdd8b9a4569b3afb67c 2f58de6bea4283c79721dcf908312ad8a690830e0e4c65581668af20527c0757 7f3a480d23115802277ba5b3c21042d64c3f24989af6994bce32995ecdc83c89 ed0cb4c21067ae5787a32be27bfed9b0d398c46c01e903851f015d1d9cc35ee0 e04bf4743c06d8c693797c86e27b95be4a99bd8675630269d7026d66fedc5555 6fc91972c741f526e454ae330bb197865bea99dfb57a3314fa8b88379cc6a560 73febe6e08924b024861066bccfac774ad1fecb732a58d1807f7a48ebf2bd1c8 d35f9dec813383ba18e4f572819dc7e3f6a1f2b4a1ab674c62e4e2455e5382ef d17beb38f3098c7489d0d3bc15657fce7f5e2dd2d61e7a282869159b8cc78b14 ec05a70eb5e08867c4d0666664a8f571ee23adf0209098477c21914a9205524d bf7145303c1001229e031faca7cb6b074eff32410763f04f70ff517153928dd5 693adce84387a4311f25981e04dd9ce2e1bbd0c1376774d1af28474a87ef0a67 03b20e1e5a74f6ce0dcf677fd86e4b87a8a496eae616abdba02285cc22fec259 3548584f771f2ccc2f8bca65d6322ba2e88e73b6d10d4e556799c448f7e91b0b 94abf69e1e45d0df7cf398f789d2c4934a9b485e005c22a0734f40a59e9c1213 c04dbabdfe45439844b90a9cb90195b4b1464c64402613863914ef08871e379f f4138bd18579e26282813f9bbea698410401c10b529872f6a648fa245c209f1a b84d27112fedd7ce4071234b4d526dde1bdaa54cb8599760a911ee2f6e6321fd 526ce870f08bb0684f413a567b269ee44eb6a4d59847a37af85c6dea5b7b330d 7ac73745f8180126e5181db6f084e6899a0450e98f9e91f811f605cc6bc4fc8b c794fe444a2e1e18928aae56036fb72091f910b2c01a428f932b2c13e233ee6b 41bae57345526f52a4f9f316c68e0a5c0002b126ea1c1d9ff011677996bbbdb8 badefa23efe458ffa3f58d670f63d3f050e861e8221def5a2ce351cdfd415aa9 0bfbfa925ea13aa9e8ef3751949b3d6089c1bf44e437da3bba13d9dcd8690d5b d7a90cf004997f481b6c43700426e4d7807ab1b7307fe08559864889d14efbde c10e08e159542eecf4bfea3e3d8e5a99097a1a4072a0605196da87943907e2fe f8cf0c1754a7014eaf695bdafc82802a30e7a5f41b1e5239f61c5e3ca5b2b303 a1599ec6f8c74e5ad9ef17a409edd1a2e903b20029011532d0fba7372cd01ae6 7ccf5ab75127258841d900985db88de69ef3783c7d2f928b84b9b67aa32eb15f 0f12cd7e27229ea040666aee7b2df3ca86fb9d96cb99d5a3aa3aee5c86f9c7dd 247f83ec08a4a76140361bebff16c462f37a20a792097cd41b59e8cded7fad12 736a55c3329bf677edb9405bbcd32d20e4f37f68afe22938776672246040e590 13e84e6447c10efeb412c456fdca12a72a459f43f3d41207954024e561a75e66 8330270935718123f551917b2f5cb35216ecea3c22fab4db5db28a0372aa4983 e8612f4203a738d5560b6577d505e5aa08c82451e2017e0af81a5607dcf5e00a ab50bbb33691f64bededb3a9d02cb5dcc21668ed2b7227b728494cdb5c2fa2be 031f0460fca3273594131b54e4ee2b41e4396a8427b14078e60e3d77588cb411 96b21207438f46cfdc4c335e91440803d5cad31086f1812d66429205524e36c5 3eac7fe57c27dfbe94cc711215eeab131aee78739b829f576b7c581d1767b98e f64efb1b7ff82019f6f0ec07286f9358301d3ec5f9f1c58a02efc0ff67122653 b942e493c553d3b2d099132a1dde14698e80593aaf513cc1d0cd75d419d7a70f 1e9ada91edad0e089188769085444f1b36a6b97d382eee6e0782fb4a4633578b 3b8e6ca1f16b02fe31cac2fcac47b5c79eb2df9d1e053ce404adb4b7d33fc886 54ac785af719498ecdd40ff0676fa039e7fd2015cd48d1b0ffcdcab1432dde7b 22b3e71200d75f01ab2e8fa63223a49ef833a4cc820ac614ca8de3a617f1c551 9057f5fa78599f9ec280e726f458f9c09810527027982c4582ed49f29dd357b5 880a165511794d801172d46d3cf76e62667381b8676f570e4a5fa4cafe4e6d82 8d9a4ae2cc03d8e0c84ff47ee2bc9d1c3ef10da0081fa43dac8d545c59704f50 ddf246b992579f30b8ed1c1957648ab0d1dc2c4f2cf4308fdb7c757f925032bb c97be8fbc4354ef167f476b0713f097a7a7ce8b4729f2a461a7084dbb51502fc 5853647ee57ad2ac897cc8d3b90abf59c8eb10cfc3d3653ae4db6f6fe1c8207a 87545de4d853a5a1773293cc21c01adfe3eba74875d3f104c0cd6f184c4d90f6 bd4e47ccf7fcaa3c3d3c6884576ff9f4dca081ed8e08925c3995dd8bed5515b1 ca788065a581a46d35bfd5e90cb64c8798a64176775017c8977352885000abd3 4305a75a06125342d4e68f2d2744a4c093a687fd9ece67872c7fe3877abd042c 1a53281c9e0949709b5b821355fb2a19cd99f648c90c1a89baa876769b95fbbd 4d226888b3640fa1e81f22eaf34041e6f6ba409a6290dadf96089e63c85e9ecf 0c846fcb0512dd82431d1b87171f6024612608765ac27fec7ae556a9d812207c e1a4be62b7075943402929821ee24032808f53d95aed1231b318c336aeab16bc 16291c09f334ee63009f4dc2a620080a46edf0b13d01b1807ad7bb1886de84cc 8f7f666fb961e60e7b484f0a0f74ed5ffe9bd57beb9728c383eb51fb12e1a917 14e595923af2280692fed11e578e33dc0e4e787a7562aa48c88eb8de9dc390e5 6263dea02e2aa749e1f3248ec76c9b6d5d4dcc8d9dd15889fc29bbb8ba3c74c9 9fe7694f4c9eb12f1da1f75b53177f94620a9a7377eac90e738424101a710d86 b7ceab4f519a70af2d7eaafb1913e95ee0e430d00d014b88e9fcefb4c25c880a 336e636a890dc8f3c5dc8f20bf7fb1766eee31f6081beee5469666593da16764 c6c3b18df67e0cfc67f8681c88eae3a715aff78e3eafd78ed06f8322558a8b4d 126340bd1cd11573908e20c29a0d49a7a6f7fd2b540b24cff33338e67966015d df9002e234e8ddfb4302d91353d281f2a391ae7a7006064cf8532887c3cf2742 7c77a3ce037d92d27b0e437eccf99d7f4a70b47cf5a121384b35d90f5a8ee132 09a5f047d20487ede4079a311846b76ccea05d73b69ac735671953f631f661c5 ffeb2cfe358a9c153039172a4e45ac0bee4ab6354efbe332cf387d2a55d150ca 6b89acac19085c3e5945ac0335fa1aac5b54634d473526296a259c619ccc1501 a777cf487a39915f7c9aa88b7f8f734cf9ddf20b3b5dd506db9bc3fcb6678a05 ea4fadc5dc8a1e090aa5e3556499db6ab551e692531eac647a8f37a2aa3db80c 4376243e905ad43f5f9c8f536793ad99020203386d4dbcc839c91b5edd903c0a 29d8ab98b57d2963729252bff278ec3e26c4096a98a194a60a439cfdfd9f0aa8 24c2cf812cfd1fa947534ddaae0620de9b069db2f84e0a2a8ff1b91401c07d06 5b85489ada65233f9a9c9905f37a2f9d070841ed69ca3289811f8faffd686306 099c4049257b3d6303659fe1e10b8e56348339f974a705d681272e4970ab13a6 eddba4f9bc5318f686559e2fd03e0a6771bc78c417b84a42acb7e6238f76631c 3ca7e0989df0bb30065af56c6024a32af2863568769da536047a1a56f954d0ee 9fff774a89583b1a66e960adae468ce3783582fd2fea5fa27e9006cad00d4765 610ec145e50faa77a2375ea4d76fc21b580fdaa9b6fd6cd67ee7da87efd8c6fc f5f563869754c194bbae936079b6d4e65cda17b657e5f4be13802027417a0548 ede36cc7bb458de4fe71b813e81a0b057b8e4f0c1441d2d916e5205122b66452 72992455f2b33ac9c586b459b38b5901a353406e6c0301a62c32da8768764012 0044c8dc077394447383096f59ef7b54f75aca1b7d34438e6ef519f9653de7da b54bbf2b166b30c276e8d100f4cc1dc27cafc07f5fec0c478e5e4b34f957d758 b8906d11b55c97867975f4a25da63a17eee2c9f3ddd3416ce20f2fc33064e0f5 a2fcfae017cf8eb785aeade6be6e43cb8cc1a7756332d8e4280d0d9511202eff a101c77a987ebaae932b1f4a8105e35f733670446113bff9dee7bdb05f977ee3 5e47ca5f2efb3727585f0436f1f4c7a1006c31d432d349dac98072f5b7ded6c3 c807185b8e515670c6437579ff1a7b2e972784e1dd6ce22e3bf7e51dbc149eee ec30ae3d2e5cacfef99bc5f3b0b834ca0d1feb05c0073e7acfd5ecc42a104222 050260c4ac62afbdf6deb39cdbfa03abf08ab2449dc1f167f88e9e6283839608 c9f9b4d10236c90c092e4b1c0267463b2b5eb65f46b089522f6aff619ffc75e6 0aabefb76bfe49b8d59c8b39a5787942fd64b1833306814d6d0e577a0d527596 8697a330774e938ebcc2bf62d3412e8b672c7c85aca136fd09b273a3a0690903 c4caae47919b5adeb898b1e23c23518678c876dd2ccd846ef2860747c6e2f229 c8a721833e51f01306a1296f0a18d98f05ac5170fd66465ce64d4bd641c74da9 a796f96fcdf4bdb7006d02babc28eaac2b7d8648c39f01f82edec56a1ad958e0 4c46ffd0eab001d5cff6dcff8270bb53d0c0ebc594b5429b0b9bfebcdee15e86 216dac18bb28bf61fd98c4b3a45e23b8f094faa4309810d1e2bba2c1931b63ed ea4938941bd640b32a76cf683b3888d554ad1be8343e9444ce56619561c97704 75bb0df823b72e599e00cc98a7892528a28f551e2e72f5c2d65de7cb6e44b414 8fa4914ea38f7924efb32016d29652a18e2cdebfa994bab3beb23b500856058e e1c3ac8b017ecc328e6d1a8beaddf8fc50c12ce16f3695e51c704ce69e7d8aae cf21e02683c31ce494bcff0e14c79a6921209765a185e8ad6535ae43989d1f66 92b7502558c6e5e811af8c426db1477a43f73fd41b96a5c273c93a04201e3ab4 95dae39b8b14309df9cab68fb550853aec49cdf7897caf971e5b04accb7e7e52 98d24525135596b628963c9eac440413c6d588913bf5cfbe7a39a2425285f3fb dea471e75da3c9eb831aee7a3b008f229e4c03ffc99c6736b215a5dc2035b3b0 9b7f8eb66846f3c72123ba387c7ad0c6d673489982c22a9d74442ff49bd66083 495cbc7a095b4993c8282801a8fa4de369d34da182b6d1aeaebd7a2160b15635 d012082bb870e1d2cb4a959b2e301b1a748d166fbdb7a9b8d3e14e335d855fec 29676fb952fddbba72e30bb35560498ebc96de9ef567266c126bf254893c03fb ff4b01a623f786192466cbb031077a98ce0ccf50187bb89f587f5b7d3a002b1a 662bf25e0c3292cb6b841caf05bbe5977ac1d82f8db76674a6fdc236cb2eb199 b1aec2c75b68af5d98797c1f52914bd31a17b1c2b3a4f8ef8b5eec77165018de 0c0a99c27692fb4b92680a0b737eb3bb9099616499186fdc13873a1a2445f309 159fda506329e4f03edd846d35ce985de3c0e674da4ed3520c810746f897a4ab 3bd8c98f5173d70b411bc11a86b6ec364ccff5afe47495d3b76ba909713d331d 1af8212d0fbf60ce6fde6c2ef96950e3a96d114bd8a8861b0afbaf8dc8d4755d 82f536b4799d8c4eeb12eaa6051e6e906a9d5fe84fe0e45ff5b01efc9e079f52 d177da9c7d2a3914903255f1f3aff2e90dbe7d452078b33678e897137a4b64fe 60395549b130de7e358d67ff0b6f7e5f278caed00baf8bc5c352ae5c81701d5d fb10da903a33717da20b7bcb0f836e0afddef913cdbb20271ea0e17f8b122bdb 7824f81eb1e47f116ef9ee1dd7774a678b3ae00ce04201b4b2d7e40aecbf005a 7371885a67876dc9d08412259023c4614fe4241d628a9206c9ec9da3fb0a0852 507d97fee6a2aeab2259d910d9373019796ca3a62c94d182477f42b6794081cb 19e994ce4ff8842e70ff22bf06afae8fe042787fbeec5d1920ca5471f142ca56 174afc22a7ade3ac1b72d2a7fa8655e7ccab555e4f686fa4d2d85d2ec59cc903 16f739f2f8fa752310814118703495014f18964d8286af6a31fbe50725c8f5fc b12783878b127f4bfd7649c2ba5a72304c0fb489e96bdd188b8ad530ec1712c6 267fa2b6dde23145f057ff9b837988f83378cfed0723b4139b85f1b6b998d545 c8e60bf1fc45f706b848220852cc8256ccbac91d68ffce899bae39fce857069f 7bd700802dba404f2d68fae009a1ebcc770275f123a577287239edf9ee87a68c 6137388f8cfaa386ba33d99f7d70deb0e037d8a8d81fd46c58a221caafd173ff 5e69e2d426d7351a7a19b663e74d42d8805c74c1ed0cdee1a1d7318ebe25df09 2c06ce212b582776f2819e2490a1f1bb6d8b82d801b81b82ad213a85b6c5d5a9 844a09eedeab4f9c98b05cb261496f47f456111c518626dae783d6fe4d4428f3 9290460b79573e1b4f35433fbab1c9df21a9ac6c21b6f564bc1421dd6e46c85d 942b26a196928f9ae64064e544b7e7dfe3eaedb17756fc8774372a71955e4c4c f8fb993a722d4da3518571c78e36f042e0700f28179eac240c6d4f66dcb11748 cc2cefe0e3713f88399affe7b7f728a0794c9ba047ba972a66f34b48c9e3315b de91c4516fdb4368414e6a0beba3fc735b6bde435806008d89b92c9dadedde05 eb008c5edde50d5a60715f984adab409c2fdb894444101ea5db59d6d24491cbf 7d699baf1759c426754bdb3e16de3194e40af93707c632a4bc38b133b339bc97 0d9199178020dcf73096edb2d075f76a8a0e48f92f9d8cc1874a33e05e36e69e c663f34eb8f8522aed4399a22335ef6b75819482850227dfa250c2910b7cae93 32824d0495c37dcc828fc5dc7724fb2338c5638584b3271e18dc3fd3e2f01530 fb0a772d78c19316bd8b67dc0636b3de9c142336898574cbef3868cc0f24c985 da80543a70e01f639adc576cf90c0bb6e1d17e0a27a2ecb87a7acdc4668148fa 1e109035e1b14e539b41212c6ca8fa6a3ffd3afb390b4f34d059d0d42baad192 59f385fe05e3831815d624f8effbde23689c7f83b8fe8985e04139e46ff8982e eddd8ed99b975bb6fb43b2b761a6bc34a02d5d14f999ab941b61d848cf62912a 1f58150d42861bcca49ef4b18fadc3f0afdffffeeb89d9e263fe2ad6d7b8ee5b 5470e18398e53ef9a273408b41da8e763ab000ed32d78bededcfd50835b5def3 d646d13aa3fb9b42dffece4f39df6e9c6de0c1ea21625fc8201cf0cf2b00b254 a8760731016f53e8139f015f2c01229b1fdb308572befc5ffb9c81a06863bbbe edb3c9a255ec4aad5c55dc1003409e03f3baebeecc883bc5cc32553206f46f86 c95d157c1a02dd7beb8d5b06989d6d4f512c27bc11bd27ab2e13624cf3512af5 83183377942d9a293133a8d6777d5e8e46cffe964b05141bf79083eb0218c40f 2acdb5d0c1556937789fca85a380fa70e6d302645d7f03f184d1074c4f4da7f3 9576e6b0fe14068bfe51400060c2bb669ec7e345172ecb9d96a405b03a4d4cb4 33c1abd3fd3647cdfe20c224bf6bf2b58dfb9f12a4db63a0465adf61e9148ae3 9eaafe62793f18ebb0972d622f4b3d5188d9bbeff727dbb059e3f75f46e8b093 10fcb0966aa8719aa1d93ea248fde68f8db2e678616156d864454159f90c3530 37bc7ab0daf9c1897f5289053d3a802b89c537d2a60bf6258d8b6ccef45ac064 3b1b4f1d01c615557e0073d0424440a85365d5b3ac0d051b0e99575123a7c01e c8327020ff1eac406b80afb6d696c41fc726027a398354901d2e38d3527e1d18 2e263145b75dd9e2f8f196c179063e702099213068cfb456896710f714219042 99ccc74090cffd2e1936bcd96aa99eb1ad1fbd98d10821ba68ce436bb2453372 1adfa4a4ca3d8f916818a6457a9afd2a05e8e975cab9981a9ec66ecb66e3aa4e f219566a2dfb5346d744b5a3c64f21cb2ba6db77dc8f1366fee15b121a14b2f2 934843a82f6f00f8810e201681acb5e92b41e809e62d60dbc4dc6e7c4aa0944d ea06b10e46b1a99d0c3576f147aa986cf64529377d6591ae66bc19d18a509f68 365ef8e2c32573165b25c9c37b2909503186cd5dc1fae6d0c71fb6bb23cc6c8a d9a976f794320cc266f4a0b3fe95b48356aff338eaf222e1217ef732f0dd5309 e32bc5ca1a6a7690cc263fbf485bda7a16c2d5c0550579939d47174ff8e858eb 253268317493196a5b9db7e2b3a15a25271f337420472133cb3cd0dcc4affa57 ae4ae19c3f65847e41f42fe1ff8b67aee996d6fe9f03150e066727c8e21c457b 469671c41c1265e97a88635f2751aef4f0eb9685bd0a688f4764eb56043701ef d12782a8a7c29a807c1c0d01b57b63ca592c2ce4a60cb0290f0da3c45ace9ef5 0929703bb138351fccd549d0eeda296a317f94fb00ddd9166d847b4b163e21fe 01ed79634c3ed6ca1f298220b79b0ddd86ff5b74b484cb7485279c0f099d0845 ea1f534d2a0a8c2651dcf8fb75a635bddc9430271864678ae48625d7885ae239 d203c774fc8d5c21b2e7f598708c11d62e285e098abc7900c48c5b6ad95b8050 72727ee31a4f7901a0dcd82d4b7c67ea842aed2072bad33137de3589a0044b9c ccee4fd158a395935fb464a377d208d32dc9f13641e11d94a882dfd22fe9b4c6 9d8949753bbe02cfe726813358e58330cdb2bb04cb9c780bd2dcd70af6e555f6 c9e54231d3d5fd620afa53464cb5169b9f2333e22ca731a2e24b889274a0e74a eb1d78487291bc206398d7a1ce4a85a24b5b9f7e9dd3a5d51077f1f4e767deb2 56bbe44473a7d4ecd99dc9762787682e7218accbe1e01db6c64cb677ef96527c 6e8afaa5fb26b2b1910dab68d033fb5b1754f97f87cee66bfaf904666481696e fb8cea4c6b7c45ede1c14bc033c6b9eab47238e5559df169df8b51329895db86 417fc66a2ddcf4f35cd5bf3de3a25cc6909a145c4da92114fe9bdf0ce24cf775 b45065eaa84f85caf8d13744653a448a77772d0f90cdf4904f64ccc2f7823238 1afd3a5e99a93db08c7d35d13a8dcee759dc6b71be5e6af64d99efb03d39b89c fb00cff31e87c88c6a2f1c81bdbe71d2f299d14b24a3e8c55483949dd86a29fa d14c1d215c670751d29f13ac7e310657c8d667a8783e6b43dde13b2970ed916c adb134f72414c65ada83cb9af92ba34fa4e06950084e7e02d195acb992618e9f cbcf1b7bbb3c95415625fda9e3a0c9ec20c8564ec40a096a0db201c124a7c8f8 92be9ae3caebeebe1fb1339b1d7aad20703b9de82afd35dfb316ceb09ecd4986 55d6bcf106363e67693fae3531daf979e25cef13068ad8dab018fb2189b62584 341feb5cbdb3ba0368be0b1c32b738a0278ba2cd9de3b2adef24da5192c5573b 20d19cb966c9f5278d5bf4c9fa3ded5ff54de2321ffe92b8dd86c90b04aac827 35a12e80c224b5b7aa4b6d79ae654bacbfeb0470f6313e750ed6da5b0ca63fcb 0eaf350a8deafb9622fd7b0642f5625efef30819a4a30f078ac75cbd9a6eb843 0a8a229c720e8ef6656ef4cca2a82060ba43484f4195e5ee10814b21009ee76b fefd07053a14f64b57b2407f0d9370102d8244fe3d50ec716299776eb94719b1 04220a0252644c1cc695b20100b2a3aa5d24027641135af9ba513cdcfbd9124c 3152146377ef257ba553bb1b96a6f6fd12377860d7baa08f64a178d7354f5c10 3e3635ba5dff188d4d69f231bbf496f5e4c9a4ec127b72cc4783e2489b66ec39 ecfdad9559a6c7268c1d9f9d25a6143ec66157142b8a49cf423f1aa23ec3d041 0556132d5d97f3b3267e66afaf0d757a62a5e57f78d4faa530748c39ef539af1 014d8969f113a3c8bb1f3b25624cca436659165424de5533bf4c8bac0f2e9a10 801b29b88265060b4d074b9267ee35f70d89f32ab11c853866cfa7f0210b21e2 312d826ed4e038ef18bce89fc5a30cb5439c198377815dadb7380ae26a001c7d ab48012827d5d14e2b1d8840ffcebe3fc9734064b6282c2bccda04c20c5f0375 65259d130fc0b24d6f6dee41a6390e31b46073e7b573e2d939ef1e1a70c52b0b edec2dce1c9d61f9a2f5e4884dcccc5ca57ba9dd47036ef59a14f1b2ae16edbf 75764601d8369f5d258a793e13b8400016d53b3d2a6dd8f670619b4bf6543f99 3f762694e33389eef67de266976fcca00d91fbd99002275fc2c9ad8bdf553d69 233a40bfae99ef24b8d05a96ef22e8fe479a1d5a802cd328dc91580bec34ecd1 240c8cd41da68daa5564ce50c1802fe26752ae96e9fabcb17e3307395a6b55f7 88cd89c398ac2d244e8bac3a2fdf5c5b2e758e1a1cc65d7d3178eed6b844cf50 9fdb04fe50a0e6ff2164cfdfe72d77b898d8c9ca0699ccb2f8ea708c1eeb9de3 cb812de905df917673096f7d04c64dce3a042c77d038ec8b5a2cc10ca0fb1fdf 6ca438bcf1b950687321e3d51a510bf82c581e7327f2beb09c868318e7b4d21e 72edbb18fa9615de8e78b2464289958b68c06c6889f352b30cfd45de6c269417 0282bf000a9c54965e11b6da6f548b1e77a72b7bad5fea8574da83d41238eefd 9a383e7fbb334f2c6e91c528e09140c7ba1154135095ba7f347c5cf56ea065d2 ef5964323068d7893ee96e9725cd8f6b8f25028975b39df753eee3f2effc3207 de7d54a2755cde9c9eecc20bf855fc64ea1a8a6cef286c5338e149e1528b15d7 be63a83a73f43256cfb966d76769678d9f9d731a34b49186367fbe44110cd4c5 19421296dcb79a186cb4fda856e8b268f14d3a97bb7f65829480b8cf8903e8b4 a698ee46063af158b70ec863a1cfc9a973 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont TeXDict begin 40258431 52099146 1000 600 600 (prac.e2.f02.soln.dvi) @start %DVIPSBitmapFont: Fa cmtt10 10.95 47 /Fa 47 125 df<121C127FEAFF80B3EA7F00B2123EC7FCA8121C127FA2EAFF80A3EA7F00 A2121C09396DB830>33 D<903907C007C0A2496C487EA8011F131FA202C05BA3007FB7FC A2B81280A36C16006C5D3A007F807F80A2020090C7FCA9495BA2003F90B512FE4881B812 80A36C1600A22701FC01FCC7FCA300031303A201F85BA76C486C5AA229387DB730>35 D<1438147C14FCA4EB03FF011F13E090B512FC4880000780481580261FFEFD13C09039F0 FC3FE0D83FC0131FD87F80EB0FF001001307007E15F800FE14035A1507A36CEC03F0A200 7F91C7FC138013C0EA3FF0EA1FFE13FF6C13FF6C14E0000114F86C6C7F011F7F01037F01 00148002FD13C09138FC7FE0151FED0FF015070018EC03F8127E1501B4FCA35AA26CEC03 F07E01801307ED0FE0D83FC0131F01F0EB7FC0D81FFEB512806CB612006C5C6C5CC614F0 013F13C0D907FEC7FCEB00FCA5147C143825477BBE30>I<141E147F14FF5BEB03FEEB07 FCEB0FF0EB1FE0EB3FC0EB7F80EBFF00485A5B12035B485A120F5BA2485AA2123F5BA212 7F90C7FCA412FEAD127FA47F123FA27F121FA26C7EA27F12076C7E7F12017F6C7EEB7F80 EB3FC0EB1FE0EB0FF0EB07FCEB03FEEB01FF7F147F141E184771BE30>40 D<127812FE7E7F6C7E6C7EEA0FF06C7E6C7E6C7E6C7EEB7F80133F14C0131FEB0FE014F0 1307A2EB03F8A214FC1301A214FE1300A4147FAD14FEA4130114FCA2130314F8A2EB07F0 A2130F14E0EB1FC0133F1480137FEBFF00485A485A485A485AEA3FE0485A485A90C7FC5A 1278184778BE30>I<143EA2147FAF007FB7FCA2B81280A36C1600A2C76CC8FCAF143EA2 29297DAF30>43 DI<007FB6 12F0A2B712F8A36C15F0A225077B9E30>I<14FE903807FFC0497F013F13F8497F90B57E 48EB83FF4848C6138049137F4848EB3FC04848EB1FE049130F001F15F0491307A24848EB 03F8A290C712014815FCA400FEEC00FEAD6C14016C15FCA36D1303003F15F8A26D130700 1F15F0A26D130F6C6CEB1FE0A26C6CEB3FC06C6CEB7F806D13FF2601FF8313006CEBFFFE 6D5B6D5B010F13E06D5BD900FEC7FC273A7CB830>48 DIIII<49B4FC010F13E0013F13F890B57E4880488048010113803A0FFC007F C0D81FF0EB3FE04848131F49EB0FF048481307A290C7EA03F85A4815FC1501A416FEA37E 7E6D1303A26C6C13076C6C130F6D133FD80FFC13FF6CB6FC7E6C14FE6C14F9013FEBE1FC 010F138190380060011400ED03F8A2150716F0150F000F15E0486C131F486CEB3FC0157F EDFF804A1300EC07FE391FF01FFC90B55A6C5C6C5C6C1480C649C7FCEB3FF0273A7CB830 >57 D59 D<16F01503ED07F8151F157FEDFFF014034A13 C0021F138091383FFE00ECFFF8495B010713C0495BD93FFEC7FC495A3801FFF0485B000F 13804890C8FCEA7FFC5BEAFFE05B7FEA7FF87FEA1FFF6C7F000313E06C7F38007FFC6D7E 90380FFF806D7F010113F06D7FEC3FFE91381FFF80020713C06E13F01400ED7FF8151F15 07ED03F01500252F7BB230>I<007FB7FCA2B81280A36C16006C5DCBFCA7003FB612FE48 81B81280A36C1600A229157DA530>I<147F4A7EA2497FA4497F14F7A401077F14E3A301 0F7FA314C1A2011F7FA490383F80FEA590387F007FA4498049133F90B6FCA34881A39038 FC001F00038149130FA4000781491307A2D87FFFEB7FFFB56CB51280A46C496C13002939 7DB830>65 D<007FB512F0B612FE6F7E82826C813A03F8001FF815076F7E1501A26F7EA6 15015EA24B5A1507ED1FF0ED7FE090B65A5E4BC7FC6F7E16E0829039F8000FF8ED03FC6F 7E1500167FA3EE3F80A6167F1700A25E4B5A1503ED1FFC007FB6FCB75A5E16C05E6C02FC C7FC29387EB730>I<007FB7FCB81280A47ED803F8C7123FA8EE1F0093C7FCA4157C15FE A490B5FCA6EBF800A4157C92C8FCA5EE07C0EE0FE0A9007FB7FCB8FCA46C16C02B387EB7 30>69 D<383FFFF8487FB57EA26C5B6C5BD801FCC9FCB3B0EE0F80EE1FC0A9003FB7FC5A B8FCA27E6C16802A387EB730>76 D<90390FF803C0D97FFF13E048B512C74814F74814FF 5A381FF80F383FE001497E4848137F90C7123F5A48141FA2150FA37EED07C06C91C7FC7F 7FEA3FF0EA1FFEEBFFF06C13FF6C14E0000114F86C80011F13FF01031480D9003F13C014 019138007FE0151FED0FF0A2ED07F8A2007C140312FEA56C140716F07F6DEB0FE06D131F 01F8EB3FC001FF13FF91B51280160000FD5CD8FC7F13F8D8F81F5BD878011380253A7BB8 30>83 D<3B7FFFC007FFFCB56C4813FEA46C496C13FCD803F8C7EA3F80B3B16D147F0001 1600A36C6C14FE6D13016D5CEC800390393FE00FF890391FF83FF06DB55A6D5C6D5C6D91 C7FC9038007FFCEC1FF02F3980B730>85 D97 DII<913801FFE04A7F5C A28080EC0007AAEB03FE90381FFF874913E790B6FC5A5A481303380FFC00D81FF0133F49 131F485A150F4848130790C7FCA25AA25AA87E6C140FA27F003F141F6D133F6C7E6D137F 390FF801FF2607FE07EBFFC06CB712E06C16F06C14F76D01C713E0011F010313C0D907FC C8FC2C397DB730>I<49B4FC010713E0011F13F8017F7F90B57E488048018113803A07FC 007FC04848133FD81FE0EB1FE0150F484814F0491307127F90C7FCED03F85A5AB7FCA516 F048C9FC7E7EA27F003FEC01F06DEB03F86C7E6C7E6D1307D807FEEB1FF03A03FFC07FE0 6C90B5FC6C15C0013F14806DEBFE00010713F8010013C0252A7CA830>IIII< 14E0EB03F8A2497EA36D5AA2EB00E091C8FCA9381FFFF8487F5AA27E7EEA0001B3A9003F B612C04815E0B7FCA27E6C15C023397AB830>III<387FFFF8B57EA47EEA0001B3B3A8007FB612F0B712F8A46C15F025387BB7 30>I<02FC137E3B7FC3FF01FF80D8FFEF01877F90B500CF7F15DF92B57E6C010F138726 07FE07EB03F801FC13FE9039F803FC01A201F013F8A301E013F0B3A23C7FFE0FFF07FF80 B548018F13C0A46C486C01071380322881A730>II< 49B4FC010F13E0013F13F8497F90B57E0003ECFF8014013A07FC007FC04848EB3FE0D81F E0EB0FF0A24848EB07F8491303007F15FC90C71201A300FEEC00FEA86C14016C15FCA26D 1303003F15F86D13076D130F6C6CEB1FF06C6CEB3FE06D137F3A07FF01FFC06C90B51280 6C15006C6C13FC6D5B010F13E0010190C7FC272A7CA830>II<49B413F8010FEBC1FC013F13F14913FD48B6FC5A4813 81390FFC007F49131F4848130F491307485A491303127F90C7FC15015A5AA77E7E15037F A26C6C1307150F6C6C131F6C6C133F01FC137F3907FF01FF6C90B5FC6C14FD6C14F9013F 13F1010F13C1903803FE0190C7FCAD92B512F84A14FCA46E14F82E3C7DA730>II<90381FFC1E48B5129F000714FF5A5A5A387FF007EB800100FEC7FC4880A46C143E 007F91C7FC13E06CB4FC6C13FC6CEBFF806C14E0000114F86C6C7F01037F9038000FFF02 001380007C147F00FEEC1FC0A2150F7EA27F151F6DEB3F806D137F9039FC03FF0090B6FC 5D5D00FC14F0D8F83F13C026780FFEC7FC222A79A830>III<3B3F FFC07FFF80486DB512C0B515E0A26C16C06C496C13803B01F80003F000A26D130700005D A26D130F017E5CA2017F131F6D5CA2EC803F011F91C7FCA26E5A010F137EA2ECE0FE0107 5BA214F101035BA3903801FBF0A314FF6D5BA36E5A6E5A2B277EA630>I<3B3FFFC01FFF E0486D4813F0B515F8A26C16F06C496C13E0D807E0C7EA3F00A26D5C0003157EA56D14FE 00015DEC0F80EC1FC0EC3FE0A33A00FC7FF1F8A2147DA2ECFDF9017C5C14F8A3017E13FB A290393FF07FE0A3ECE03FA2011F5C90390F800F802D277FA630>I<127CA212FEB3B3B3 AD127CA207476CBE30>124 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fb cmsy8 8 1 /Fb 1 1 df0 D E %EndDVIPSBitmapFont /Fc 134[43 9[49 56 1[28 7[53 2[51 97[{TeXBase1Encoding ReEncodeFont}6 90.9091 /Utopia-Italic rf %DVIPSBitmapFont: Fd cmmi10 10.95 12 /Fd 12 123 df<17075F84171FA2173F177FA217FFA25E5EA24C6C7EA2EE0E3F161E161C 1638A21670A216E0ED01C084ED0380171FED07005D150E5DA25D157815705D844A5A170F 4A5A4AC7FC92B6FC5CA2021CC7120F143C14384A81A24A140713015C495AA249C8FC5B13 0E131E4982137C13FED807FFED1FFEB500F00107B512FCA219F83E417DC044>65 D<49B712F818FF19C0D9000190C7EA3FF0F00FF84BEC03FCF000FE197F0203EE3F805DF1 1FC0A20207EE0FE05D1AF0A2020F16075DA21AF8141F5DA2190F143F5DA21AF0147F4B15 1FA302FF17E092C9123FA21AC049177F5C1A8019FF010318005C4E5A61010716034A5E4E 5A180F010F4C5A4A5E4E5A4EC7FC011F16FE4A4A5AEF07F8013FED0FE0EF3FC04A49B4C8 FC017FEC0FFCB812F017C004FCC9FC453E7DBD4B>68 D<92B612E0A39239003FF000161F 5FA2163F5FA3167F5FA316FF94C7FCA35D5EA315035EA315075EA3150F5EA3151FA25EA2 153FA25EA2157FA25EA2D80F8013FFEA3FC0486C91C8FCA25CD8FFC05B140301805B4948 5A00FC5C0070495A0078495A0038495A001E017EC9FC380F81FC3803FFE0C690CAFC3340 7ABD32>74 D<49B600C090387FFFF896B5FC5FD900010180C7000F130093C813F84B16E0 1A804FC7FC0203163C4B15F84E5AF003C002074B5A4B021FC8FC183E1878020F5D4BEB03 E0EF07804DC9FC021F143E4B5B17F04C5A023F1307EDC00F4C7E163F027FEBFFF8ED81EF ED83CF92388F87FC9138FF9F0792383C03FE15784B6C7E4913E0158092C77F5C01036F7E 5C717EA213074A6E7EA2717E130F4A6E7EA284011F15035C717E133F855C496C4A13E0B6 00E0017F13FFA34D3E7DBD4D>I81 D<48B912FCA25A913A0003FE000F01F84A1301D807E0EE00F8491307491778000F5D90C7 FC001E140FA2001C4B1470123C0038141FA200785D1270033F15F000F018E0485DC81600 157FA25EA215FFA293C9FCA25CA25DA21403A25DA21407A25DA2140FA25DA2141FA25DA2 143FA25DA2147FA214FF497F001FB612FCA25E3E3D7FBC35>84 D<143C14FEA21301A314 FCEB00701400AD137E3801FF803803C7C0EA0703000F13E0120E121C13071238A2EA780F 007013C0A2EAF01F14801200133F14005B137EA213FE5BA212015B0003130E13F0A20007 131EEBE01CA2143CEBC0381478147014E013C13803E3C03801FF00EA007C173E7EBC1F> 105 DII<91381F800C9138FFE01C903903F0707C90390FC0387890391F801CF890383F000F 137E4914F000011407485A485A16E0485A121F150F484814C0A3007F141F491480A300FF 143F90C71300A35D48147EA315FE007E495A1403A26C13074A5A381F801D000F13793807 C1F33901FFC3F038007F03130014075DA3140F5DA3141F5DA2143F147F90381FFFFE5BA2 263A7DA729>113 D120 D<02F8130ED903FE131ED90FFF131C49EB803C 49EBC0784914F090397E07F1E09038F800FF49EB1FC049EB07800001EC0F006C48131E90 C75A5D5D4A5A4A5A4A5A4AC7FC143E14785C495A495A495A49C8FC011E14E05B5B491301 4848EB03C0485AD807F8EB078048B4131F3A1F87E07F00391E03FFFE486C5B00785CD870 005B00F0EB7FC048011FC7FC27297DA72A>122 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fe cmr8 8 7 /Fe 7 57 df43 D48 D<130C133C137CEA03FC12FFEAFC7C1200B3B113FE387F FFFEA2172C7AAB23>I51 D<140EA2141E143EA2147E14FE A2EB01BE1303143E1306130E130C131813381330136013E013C0EA018012031300120612 0E120C5A123812305A12E0B612FCA2C7EA3E00A9147F90381FFFFCA21E2D7EAC23>I<12 30123C003FB512F8A215F05A15E039700001C000601480140348EB0700140E140CC7121C 5C143014705C495AA2495AA249C7FCA25B130E131EA2133EA3133C137CA413FCA913781D 2E7CAC23>55 DI E %EndDVIPSBitmapFont %DVIPSBitmapFont: Ff cmmi8 8 2 /Ff 2 108 df<15E0EC01F01403A3EC01C091C7FCA9147CEB03FE9038078F80EB0E0713 1C013813C01330EB700F0160138013E013C0EB801F13001500A25CA2143EA2147EA2147C A214FCA25CA21301A25CA21303A25CA2130700385BEAFC0F5C49C7FCEAF83EEAF0F8EA7F F0EA1F801C3B81AC1D>106 D<131FEA03FFA2EA003FA2133EA2137EA2137CA213FCA25B A2120115F89038F003FCEC0F0E0003EB1C1EEC387EEBE07014E03807E1C09038E3803849 C7FC13CEEA0FDC13F8A2EBFF80381F9FE0EB83F0EB01F81300481404150C123EA2007E14 1C1518007CEBF038ECF83000FC1470EC78E048EB3FC00070EB0F801F2F7DAD25>I E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fg cmr10 10.95 3 /Fg 3 62 df48 D50 D<007FB912E0BA12F0A26C18E0 CDFCAE007FB912E0BA12F0A26C18E03C167BA147>61 D E %EndDVIPSBitmapFont /Fh 136[70 3[41 40 3[58 8[47 35[59 6[25 58[{ TeXBase1Encoding ReEncodeFont}7 90.9091 /Utopia-Bold rf %DVIPSBitmapFont: Fi cmsy10 10.95 1 /Fi 1 16 df15 D E %EndDVIPSBitmapFont /Fj 104[91 2[42 42 24[44 46 44 70 46 55 31 40 35 54 55 52 56 84 25 48 25 26 55 47 29 47 54 45 54 48 7[53 57 85 1[72 56 49 59 1[55 69 71 86 52 60 32 32 73 67 53 55 71 62 59 58 1[35 4[24 48 48 48 48 48 48 48 48 48 48 42 24 36 24 52 1[32 32 25 2[48 32[55 55 2[{TeXBase1Encoding ReEncodeFont} 75 90.9091 /Utopia-Regular rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin %%EndSetup %%Page: 1 1 1 0 bop 90 119 a Fj(The)21 b(exam)f(will)h(consist)g(of)g(3)g(par)q (ts:)226 379 y Fi(\017)46 b Fj(F)o(inite)22 b(state)e(machines)o(,)g(r) n(egisters)o(,)h(counters)226 566 y Fi(\017)46 b Fj(C)o(ache)20 b(\(NE)o(W)l(\227D)o(atapath)i(on)f(\002nal,)g(instead\))226 754 y Fi(\017)46 b Fj(Assembly)20 b(language)h(\(facts)e(about)j(MIPS,) d(wr)q(iting)k(in)e(MIPS\).)90 1014 y(The)g(follo)m(wing)i(ar)n(e)d(pr) o(actice)i(questions)n(.)k(They)20 b(may)g(be)h(lengthier)h(than)f(the) f(actual)h(exam.)200 1274 y(1.)45 b(G)o(iven)20 b(the)g(follo)m(wing)i (\002nite)f(state)f(machine)n(,)g(implement)h(using)g(D)e(\003ip)i (\003ops)o(,)g(T)g(\003ip)g(\003ops)o(,)g(and)317 1386 y(JK)26 b(\003ip)i(\003ops)f(\(i.e)n(.,)h(der)q(ive)f(3)f(differ)n(ent) i(cir)n(cuits\).)45 b(U)l(se)26 b(a)g(R)n(OM)f(for)j(the)e(cir)n(cuitr) r(y)-9 b(.)46 b(F)o(ill)27 b(in)g(don)-7 b(')g(t)317 1499 y(car)n(es)20 b(as)g(needed.)1020 1600 y 14917438 9397980 0 0 21642199 13682606 startTexFig 1020 1600 a %%BeginDocument: Figs/circ.eps %!PS-Adobe-2.0 EPSF-2.0 %%Title: circ.eps %%Creator: fig2dev Version 3.2 Patchlevel 3c %%CreationDate: Wed Dec 4 15:54:01 2002 %%For: clin@chexmix (Charles Lin,1127 AVW,(301) 405-2709,,) %%BoundingBox: 0 0 329 208 %%Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save newpath 0 208 moveto 0 0 lineto 329 0 lineto 329 208 lineto closepath clip newpath -72.0 248.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin %%Page: 1 1 10 setmiterlimit 0.06000 0.06000 sc % % Fig objects follow % /Times-Roman ff 450.00 scf sf 3900 3225 m gs 1 -1 sc (x=0) col0 sh gr /Times-Roman ff 450.00 scf sf 3075 2175 m gs 1 -1 sc (x=0) col0 sh gr /Times-Roman ff 450.00 scf sf 1200 2925 m gs 1 -1 sc (x=1) col0 sh gr /Times-Roman ff 450.00 scf sf 4425 2625 m gs 1 -1 sc (x=1) col0 sh gr /Times-Roman ff 450.00 scf sf 4350 4050 m gs 1 -1 sc (x=1) col0 sh gr /Times-Roman ff 450.00 scf sf 5700 2325 m gs 1 -1 sc (x=0) col0 sh gr /Times-Roman ff 450.00 scf sf 5700 3750 m gs 1 -1 sc (10/1) col0 sh gr /Times-Roman ff 450.00 scf sf 2775 3675 m gs 1 -1 sc (01/1) col0 sh gr /Times-Roman ff 450.00 scf sf 4275 1500 m gs 1 -1 sc (00/0) col0 sh gr % Polyline 2 slj 7.500 slw gs clippath 2802 2995 m 2885 3031 l 2976 2823 l 2863 2970 l 2893 2787 l cp eoclip n 2475 3525 m 2474 3526 l 2471 3528 l 2467 3531 l 2459 3536 l 2450 3543 l 2437 3551 l 2422 3560 l 2405 3570 l 2387 3581 l 2367 3592 l 2346 3602 l 2325 3612 l 2303 3620 l 2281 3626 l 2260 3630 l 2238 3632 l 2217 3630 l 2196 3625 l 2175 3616 l 2155 3601 l 2135 3582 l 2117 3556 l 2100 3525 l 2088 3494 l 2077 3460 l 2068 3425 l 2060 3390 l 2053 3356 l 2046 3323 l 2041 3292 l 2036 3262 l 2031 3234 l 2027 3208 l 2023 3183 l 2019 3159 l 2016 3135 l 2012 3112 l 2010 3090 l 2007 3066 l 2006 3042 l 2005 3017 l 2005 2991 l 2007 2963 l 2010 2933 l 2014 2902 l 2021 2869 l 2031 2835 l 2043 2800 l 2059 2765 l 2078 2731 l 2100 2700 l 2128 2671 l 2158 2647 l 2188 2627 l 2219 2613 l 2248 2602 l 2276 2595 l 2302 2591 l 2327 2590 l 2350 2590 l 2371 2593 l 2392 2596 l 2412 2601 l 2431 2606 l 2451 2612 l 2471 2618 l 2491 2625 l 2513 2631 l 2537 2637 l 2562 2644 l 2589 2651 l 2617 2657 l 2648 2664 l 2680 2672 l 2713 2680 l 2745 2689 l 2775 2700 l 2806 2715 l 2832 2731 l 2853 2748 l 2869 2766 l 2880 2784 l 2888 2803 l 2892 2822 l 2894 2840 l 2893 2859 l 2891 2878 l 2887 2897 l 2883 2915 l 2877 2932 l 2872 2948 l 2866 2962 l 2861 2974 l 2857 2984 l 2850 3000 l gs col0 s gr gr % arrowhead 0 slj 15.000 slw n 2893 2787 m 2863 2970 l 2976 2823 l 2893 2787 l cp gs 0.00 setgray ef gr col0 s % Polyline 7.500 slw gs clippath 5593 3260 m 5671 3215 l 5557 3018 l 5609 3197 l 5479 3063 l cp eoclip n 5625 3225 m 4800 1800 l gs col0 s gr gr % arrowhead 15.000 slw n 5479 3063 m 5609 3197 l 5557 3018 l 5479 3063 l cp gs 0.00 setgray ef gr col0 s % Polyline 7.500 slw gs clippath 5490 3420 m 5490 3330 l 5263 3330 l 5443 3375 l 5263 3420 l cp eoclip n 3675 3375 m 5475 3375 l gs col0 s gr gr % arrowhead 15.000 slw n 5263 3420 m 5443 3375 l 5263 3330 l 5263 3420 l cp gs 0.00 setgray ef gr col0 s % Polyline 7.500 slw gs clippath 3328 2989 m 3405 3036 l 3524 2841 l 3392 2972 l 3447 2794 l cp eoclip n 4200 1650 m 3375 3000 l gs col0 s gr gr % arrowhead 15.000 slw n 3447 2794 m 3392 2972 l 3524 2841 l 3447 2794 l cp gs 0.00 setgray ef gr col0 s % Polyline 7.500 slw gs clippath 3660 3630 m 3660 3720 l 3887 3720 l 3707 3675 l 3887 3630 l cp eoclip n 5475 3675 m 3675 3675 l gs col0 s gr gr % arrowhead 15.000 slw n 3887 3630 m 3707 3675 l 3887 3720 l 3887 3630 l cp gs 0.00 setgray ef gr col0 s % Polyline 7.500 slw gs clippath 5132 1615 m 5053 1658 l 5164 1857 l 5116 1678 l 5242 1813 l cp eoclip n 5100 1650 m 5850 3000 l gs col0 s gr gr % arrowhead 15.000 slw n 5242 1813 m 5116 1678 l 5164 1857 l 5242 1813 l cp gs 0.00 setgray ef gr col0 s 7.500 slw % Ellipse n 6075 3525 586 586 0 360 DrawEllipse gs col0 s gr % Ellipse n 3075 3525 586 586 0 360 DrawEllipse gs col0 s gr % Ellipse n 4650 1275 586 586 0 360 DrawEllipse gs col0 s gr $F2psEnd rs %%EndDocument endTexFig 317 3002 a Fh(Answ)o(er)r(:)f Fj(Ther)n(e)i(ar)n(e)g(thr)n(ee)g(steps) f(to)h(implementing)h(a)e(\002nite)i(state)e(machine)n(.)361 3215 y(\(a\))44 b(W)l(r)q(ite)29 b(the)g(data)f(inputs/states)g(as)g (the)g(tr)q(uth)h(table)g(inputs)g(\(thus)o(,)i(the)d(number)h(of)g(r)o (o)m(ws)517 3328 y(is)e Fg(2)655 3295 y Ff(j)t Fe(+)p Ff(k)812 3328 y Fj(wher)n(e)f Fd(j)32 b Fj(is)27 b(the)g(number)g(of)g (data)f(inputs)i(and)e Fd(k)k Fj(is)d(the)f(number)i(of)f(bits)g(used)f (to)517 3440 y(r)n(epr)n(esent)21 b(the)g(state\).)k(That)c(is)o(,)f (conver)q(t)h(a)f(\002nite)i(state)e(machine)g(to)i(a)e(tr)q(uth)h (table)n(.)517 3570 y(I)n(nputs)f(ar)n(e)g(labelled)g(with)g Fd(x)f Fj(plus)h(an)f(optional)j(subscr)q(ipt)e(\(only)g(if)g(ther)n(e) g(ar)n(e)f(two)h(or)g(mor)n(e)517 3683 y(inputs\))j(and)f(states)f(ar)n (e)h(labeled)h(with)f Fd(q)j Fj(and)d(subscr)q(ipts)n(.)31 b(This)23 b(is)f(str)o(aight-for)r(war)n(d.)31 b(J)m(ust)517 3796 y(\002ll)22 b(out)f(the)g(tr)q(uth)g(table)g(as)f(y)o(ou)h(nor)q (mally)g(do)l(.)p 1923 3908 511 4 v 1921 4021 4 113 v 1973 3987 a Fd(x)p 2073 4021 V 100 w(q)2166 4001 y Fe(1)p 2253 4021 V 2304 3987 a Fd(q)2345 4001 y Fe(0)p 2432 4021 V 1923 4024 511 4 v 1921 4137 4 113 v 1975 4103 a Fj(0)p 2073 4137 V 118 w(0)p 2253 4137 V 131 w(0)p 2432 4137 V 1921 4250 V 1975 4216 a(0)p 2073 4250 V 118 w(0)p 2253 4250 V 131 w(1)p 2432 4250 V 1921 4363 V 1975 4329 a(0)p 2073 4363 V 118 w(1)p 2253 4363 V 131 w(0)p 2432 4363 V 1921 4476 V 1975 4442 a(0)p 2073 4476 V 118 w(1)p 2253 4476 V 131 w(1)p 2432 4476 V 1923 4479 511 4 v 1921 4592 4 113 v 1975 4558 a(1)p 2073 4592 V 118 w(0)p 2253 4592 V 131 w(0)p 2432 4592 V 1921 4705 V 1975 4671 a(1)p 2073 4705 V 118 w(0)p 2253 4705 V 131 w(1)p 2432 4705 V 1921 4818 V 1975 4784 a(1)p 2073 4818 V 118 w(1)p 2253 4818 V 131 w(0)p 2432 4818 V 1921 4931 V 1975 4897 a(1)p 2073 4931 V 118 w(1)p 2253 4931 V 131 w(1)p 2432 4931 V 1923 4934 511 4 v 354 5094 a(\(b\))45 b(Then,)23 b(y)o(ou)f(add)g(the)g(outputs)h(\()p Fd(z)i Fj(with)d(subscr)q(ipts\)) g(and)g(the)g(next)g(states)e(\()p Fd(q)3274 5061 y Fe(+)3355 5094 y Fj(with)i(appr)o(o-)517 5207 y(pr)q(iate)f(subscr)q(ipts\).)1941 5497 y(1)p eop %%Page: 2 2 2 1 bop 1489 31 1379 4 v 1487 144 4 113 v 1539 110 a Fj(R)n(o)m(w)p 1763 144 V 1780 144 V 116 w Fd(x)p 1932 144 V 100 w(q)2024 124 y Fe(1)p 2111 144 V 2163 110 a Fd(q)2204 124 y Fe(0)p 2291 144 V 2307 144 V 2359 110 a Fd(q)2403 72 y Fe(+)2400 135 y(1)p 2510 144 V 2561 110 a Fd(q)2605 72 y Fe(+)2602 135 y(0)p 2712 144 V 2768 110 a Fd(z)p 2866 144 V 1489 147 1379 4 v 1487 260 4 113 v 1603 226 a Fj(0)p 1763 260 V 1780 260 V 182 w(0)p 1932 260 V 118 w(0)p 2111 260 V 132 w(0)p 2291 260 V 2308 260 V 159 w(0)p 2510 260 V 155 w(1)p 2712 260 V 130 w(0)p 2866 260 V 1487 373 V 1603 339 a(1)p 1763 373 V 1780 373 V 182 w(0)p 1932 373 V 118 w(0)p 2111 373 V 132 w(1)p 2291 373 V 2308 373 V 159 w(1)p 2510 373 V 155 w(0)p 2712 373 V 130 w(1)p 2866 373 V 1487 486 V 1603 452 a(2)p 1763 486 V 1780 486 V 182 w(0)p 1932 486 V 118 w(1)p 2111 486 V 132 w(0)p 2291 486 V 2308 486 V 159 w(0)p 2510 486 V 155 w(0)p 2712 486 V 130 w(1)p 2866 486 V 1487 599 V 1603 565 a(3)p 1763 599 V 1780 599 V 182 w(0)p 1932 599 V 118 w(1)p 2111 599 V 132 w(1)p 2291 599 V 2308 599 V 156 w(d)p 2510 599 V 149 w(d)p 2712 599 V 124 w(d)p 2866 599 V 1489 602 1379 4 v 1487 715 4 113 v 1603 681 a(4)p 1763 715 V 1780 715 V 182 w(1)p 1932 715 V 118 w(0)p 2111 715 V 132 w(0)p 2291 715 V 2308 715 V 159 w(1)p 2510 715 V 155 w(0)p 2712 715 V 130 w(0)p 2866 715 V 1487 828 V 1603 794 a(5)p 1763 828 V 1780 828 V 182 w(1)p 1932 828 V 118 w(0)p 2111 828 V 132 w(1)p 2291 828 V 2308 828 V 159 w(0)p 2510 828 V 155 w(1)p 2712 828 V 130 w(1)p 2866 828 V 1487 941 V 1603 907 a(6)p 1763 941 V 1780 941 V 182 w(1)p 1932 941 V 118 w(1)p 2111 941 V 132 w(0)p 2291 941 V 2308 941 V 159 w(0)p 2510 941 V 155 w(1)p 2712 941 V 130 w(1)p 2866 941 V 1487 1054 V 1603 1020 a(7)p 1763 1054 V 1780 1054 V 182 w(1)p 1932 1054 V 118 w(1)p 2111 1054 V 132 w(1)p 2291 1054 V 2308 1054 V 156 w(d)p 2510 1054 V 149 w(d)p 2712 1054 V 124 w(d)p 2866 1054 V 1489 1057 1379 4 v 517 1223 a(C)o(olumns)23 b Fd(q)957 1184 y Fe(+)954 1247 y(1)1016 1223 y Fd(q)1060 1184 y Fe(+)1057 1247 y(0)1140 1223 y Fj(r)n(epr)n(esent)f(the)g(\223)-5 b(next)n(\224)22 b(state)n(,)g(i.e)n(.,)g(the)g(state)f(that)h(occurs)g (after)f(input)i Fd(x)f Fj(is)517 1336 y(seen)e(in)h(state)f Fd(q)1088 1350 y Fe(1)1127 1336 y Fd(q)1168 1350 y Fe(0)1207 1336 y Fj(.)517 1465 y(Look)j(at)f(r)o(o)m(w)h(0.)32 b(This)23 b(is)f(wher)n(e)g Fd(x)29 b Fg(=)g(0)23 b Fj(and)f Fd(q)2157 1479 y Fe(1)2196 1465 y Fd(q)2237 1479 y Fe(0)2305 1465 y Fg(=)29 b(00)p Fj(.)i(This)23 b(means)o(,)f(y)o(ou)i(ar)n(e)e (in)h(state)f(00,)517 1578 y(and)f(have)e(an)h(input)i(of)f(0.)26 b(I)o(f)20 b(y)o(ou)i(look)f(at)g(the)f(diagr)o(am,)h(that)g(puts)g(y)o (ou)g(in)g(state)f(01.)517 1707 y(The)h(output)h(of)f(r)o(o)m(w)h(0)e (is)h Fd(z)29 b Fg(=)c(0)p Fj(.)h(The)21 b(output,)h Fd(z)t Fj(,)f(is)f(based)h(on)g(the)f(curr)n(ent)i(state)n(.)363 1854 y(\(c\))45 b(Then,)31 b(y)o(ou)e(decide)g(which)f(\003ip)i (\003ops)e(to)h(use)f(\(or)g(y)o(ou)h(may)f(be)g(told)h(which)g(\003ip) g(\003ops)g(to)517 1967 y(use\).)c(Let)n(')-10 b(s)20 b(use)g(2)h(D)f(\003ip-\003ops)n(.)27 b(W)-6 b(e)21 b(will)h(label)e (them)h Fd(D)2535 1981 y Fe(1)2595 1967 y Fj(and)g Fd(D)2849 1981 y Fe(0)2909 1967 y Fj(to)g(r)n(epr)n(esent)g(state)f Fd(q)3681 1981 y Fe(1)3720 1967 y Fd(q)3761 1981 y Fe(0)3800 1967 y Fj(.)517 2096 y(Y)-8 b(ou)22 b(use)d(the)i(\223)-7 b(ex)o(citation)g(\224)21 b(tables)f(to)h(deter)q(mine)g(ho)m(w)h(to)f (\002ll)g(out)h(the)e(tr)q(uth)i(table)n(.)p 1267 2187 1825 4 v 1265 2300 4 113 v 1316 2266 a(R)n(o)m(w)p 1541 2300 V 1558 2300 V 117 w Fd(x)p 1709 2300 V 99 w(q)1801 2280 y Fe(1)p 1889 2300 V 1940 2266 a Fd(q)1981 2280 y Fe(0)p 2068 2300 V 2085 2300 V 2136 2266 a Fd(q)2180 2228 y Fe(+)2177 2291 y(1)p 2287 2300 V 2339 2266 a Fd(q)2383 2228 y Fe(+)2380 2291 y(0)p 2490 2300 V 2545 2266 a Fd(z)p 2644 2300 V 2661 2300 V 125 w(D)2787 2280 y Fe(1)p 2875 2300 V 2926 2266 a Fd(D)3001 2280 y Fe(0)p 3089 2300 V 1267 2304 1825 4 v 1265 2417 4 113 v 1380 2383 a Fj(0)p 1541 2417 V 1558 2417 V 183 w(0)p 1709 2417 V 117 w(0)p 1889 2417 V 132 w(0)p 2068 2417 V 2085 2417 V 160 w(0)p 2287 2417 V 154 w(1)p 2490 2417 V 130 w(0)p 2644 2417 V 2661 2417 V 153 w(0)p 2875 2417 V 167 w(1)p 3089 2417 V 1265 2529 V 1380 2496 a(1)p 1541 2529 V 1558 2529 V 183 w(0)p 1709 2529 V 117 w(0)p 1889 2529 V 132 w(1)p 2068 2529 V 2085 2529 V 160 w(1)p 2287 2529 V 154 w(0)p 2490 2529 V 130 w(1)p 2644 2529 V 2661 2529 V 153 w(1)p 2875 2529 V 167 w(0)p 3089 2529 V 1265 2642 V 1380 2609 a(2)p 1541 2642 V 1558 2642 V 183 w(0)p 1709 2642 V 117 w(1)p 1889 2642 V 132 w(0)p 2068 2642 V 2085 2642 V 160 w(0)p 2287 2642 V 154 w(0)p 2490 2642 V 130 w(1)p 2644 2642 V 2661 2642 V 153 w(0)p 2875 2642 V 167 w(0)p 3089 2642 V 1265 2755 V 1380 2721 a(3)p 1541 2755 V 1558 2755 V 183 w(0)p 1709 2755 V 117 w(1)p 1889 2755 V 132 w(1)p 2068 2755 V 2085 2755 V 157 w(d)p 2287 2755 V 148 w(d)p 2490 2755 V 124 w(d)p 2644 2755 V 2661 2755 V 147 w(d)p 2875 2755 V 160 w(d)p 3089 2755 V 1267 2759 1825 4 v 1265 2872 4 113 v 1380 2838 a(4)p 1541 2872 V 1558 2872 V 183 w(1)p 1709 2872 V 117 w(0)p 1889 2872 V 132 w(0)p 2068 2872 V 2085 2872 V 160 w(1)p 2287 2872 V 154 w(0)p 2490 2872 V 130 w(0)p 2644 2872 V 2661 2872 V 153 w(1)p 2875 2872 V 167 w(0)p 3089 2872 V 1265 2984 V 1380 2951 a(5)p 1541 2984 V 1558 2984 V 183 w(1)p 1709 2984 V 117 w(0)p 1889 2984 V 132 w(1)p 2068 2984 V 2085 2984 V 160 w(0)p 2287 2984 V 154 w(1)p 2490 2984 V 130 w(1)p 2644 2984 V 2661 2984 V 153 w(0)p 2875 2984 V 167 w(1)p 3089 2984 V 1265 3097 V 1380 3063 a(6)p 1541 3097 V 1558 3097 V 183 w(1)p 1709 3097 V 117 w(1)p 1889 3097 V 132 w(0)p 2068 3097 V 2085 3097 V 160 w(0)p 2287 3097 V 154 w(1)p 2490 3097 V 130 w(1)p 2644 3097 V 2661 3097 V 153 w(0)p 2875 3097 V 167 w(1)p 3089 3097 V 1265 3210 V 1380 3176 a(7)p 1541 3210 V 1558 3210 V 183 w(1)p 1709 3210 V 117 w(1)p 1889 3210 V 132 w(1)p 2068 3210 V 2085 3210 V 157 w(d)p 2287 3210 V 148 w(d)p 2490 3210 V 124 w(d)p 2644 3210 V 2661 3210 V 147 w(d)p 2875 3210 V 160 w(d)p 3089 3210 V 1267 3214 1825 4 v 517 3379 a(N)m(otice)j(that)f Fd(D)1075 3393 y Fe(1)1139 3379 y Fj(and)g Fd(D)1396 3393 y Fe(0)1460 3379 y Fj(ar)n(e)f(the)i(same)d(columns)j(as)e Fd(q)2547 3341 y Fe(+)2544 3404 y(1)2630 3379 y Fj(and)h Fd(q)2856 3341 y Fe(+)2853 3404 y(0)2915 3379 y Fj(.)35 b(That)n(')-10 b(s)25 b(because)e Fd(D)k Fj(\003ip)517 3492 y(\003ops)f(wor)o(k)g(that)f(way)-9 b(.)38 b(I)n(n)26 b(y)o(ou)f(want)g(a)g(state)f(to)i(be)f(1,)h(then)f(y)o(ou)h(set)f(the) g Fd(D)i Fj(v)o(alue)e(of)h(that)517 3605 y(\003ip)c(\003op)g(to)f(1.) 1941 5497 y(2)p eop %%Page: 3 3 3 2 bop 354 119 a Fj(\(d\))45 b(D)o(r)o(aw)20 b(the)h(cir)n(cuit.)1020 230 y 14917438 12530640 0 0 29799137 25128632 startTexFig 1020 230 a %%BeginDocument: Figs/circ.soln.eps %!PS-Adobe-2.0 EPSF-2.0 %%Title: circ.soln.eps %%Creator: fig2dev Version 3.2 Patchlevel 3c %%CreationDate: Sat Dec 7 15:32:32 2002 %%For: clin@chexmix (Charles Lin,1127 AVW,(301) 405-2709,,) %%BoundingBox: 0 0 453 382 %%Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save newpath 0 382 moveto 0 0 lineto 453 0 lineto 453 382 lineto closepath clip newpath -39.0 415.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin %%Page: 1 1 10 setmiterlimit 0.06000 0.06000 sc % % Fig objects follow % /NewCenturySchlbk-Bold ff 420.00 scf sf 6225 1650 m gs 1 -1 sc (0) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 5625 1650 m gs 1 -1 sc (0) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 6825 2250 m gs 1 -1 sc (0) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 5625 4050 m gs 1 -1 sc (0) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 6750 3450 m gs 1 -1 sc (d) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 5625 5250 m gs 1 -1 sc (1) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 6825 5250 m gs 1 -1 sc (1) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 6825 4650 m gs 1 -1 sc (1) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 5625 4650 m gs 1 -1 sc (1) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 5625 2850 m gs 1 -1 sc (1) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 5625 2250 m gs 1 -1 sc (1) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 6225 2250 m gs 1 -1 sc (1) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 6750 4050 m gs 1 -1 sc (0) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 6750 1050 m gs 1 -1 sc (z) col0 sh gr /NewCenturySchlbk-Bold ff 240.00 scf sf 6450 1200 m gs 1 -1 sc (0) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 6150 1050 m gs 1 -1 sc (q) col0 sh gr /NewCenturySchlbk-Bold ff 240.00 scf sf 5850 1200 m gs 1 -1 sc (1) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 6825 1650 m gs 1 -1 sc (1) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 1275 750 m gs 1 -1 sc (x) col0 sh gr /Times-Roman ff 270.00 scf sf 4950 1650 m gs 1 -1 sc (000) col0 sh gr /Times-Roman ff 270.00 scf sf 4950 2175 m gs 1 -1 sc (001) col0 sh gr /Times-Roman ff 270.00 scf sf 4950 2775 m gs 1 -1 sc (010) col0 sh gr /Times-Roman ff 270.00 scf sf 4950 3375 m gs 1 -1 sc (011) col0 sh gr /Times-Roman ff 270.00 scf sf 4950 5775 m gs 1 -1 sc (111) col0 sh gr /Times-Roman ff 270.00 scf sf 4950 5175 m gs 1 -1 sc (110) col0 sh gr /Times-Roman ff 270.00 scf sf 4950 4575 m gs 1 -1 sc (101) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 6750 2850 m gs 1 -1 sc (0) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 6225 2850 m gs 1 -1 sc (0) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 6750 5850 m gs 1 -1 sc (d) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 5550 5850 m gs 1 -1 sc (d) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 6150 5850 m gs 1 -1 sc (d) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 6225 5250 m gs 1 -1 sc (0) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 6225 4650 m gs 1 -1 sc (0) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 6225 4050 m gs 1 -1 sc (1) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 6150 3450 m gs 1 -1 sc (d) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 5550 3450 m gs 1 -1 sc (d) col0 sh gr /NewCenturySchlbk-Bold ff 420.00 scf sf 5550 1050 m gs 1 -1 sc (q) col0 sh gr % Polyline 7.500 slw n 4800 3600 m 7200 3600 l 7200 4200 l 4800 4200 l cp gs col0 s gr % Polyline n 4800 3000 m 7200 3000 l 7200 3600 l 4800 3600 l cp gs col0 s gr % Polyline n 4800 2400 m 7200 2400 l 7200 3000 l 4800 3000 l cp gs col0 s gr % Polyline n 4800 1800 m 7200 1800 l 7200 2400 l 4800 2400 l cp gs col0 s gr % Polyline n 4800 1200 m 7200 1200 l 7200 1800 l 4800 1800 l cp gs col0 s gr % Polyline n 1500 3975 m 2925 3975 l 2925 5775 l 1500 5775 l cp gs col0 s gr % Polyline 30.000 slw n 1500 5175 m 1875 5325 l 1500 5550 l gs col0 s gr % Polyline n 2325 5100 m 2700 5100 l gs col0 s gr /Times-Roman ff 360.00 scf sf 2700 2850 m gs 1 -1 sc (1) col0 sh gr /Times-Roman ff 360.00 scf sf 2700 1875 m gs 1 -1 sc (1) col0 sh gr /Times-Roman ff 360.00 scf sf 1950 1875 m gs 1 -1 sc (1) col0 sh gr /Times-Roman ff 480.00 scf sf 2325 2775 m gs 1 -1 sc (Q) col0 sh gr /Times-Roman ff 480.00 scf sf 2325 1725 m gs 1 -1 sc (Q) col0 sh gr /Times-Roman ff 480.00 scf sf 1575 1725 m gs 1 -1 sc (D) col0 sh gr % Polyline 7.500 slw n 1500 1200 m 2925 1200 l 2925 3000 l 1500 3000 l cp gs col0 s gr % Polyline 30.000 slw n 1500 2400 m 1875 2550 l 1500 2775 l gs col0 s gr % Polyline n 2325 2325 m 2700 2325 l gs col0 s gr % Polyline 7.500 slw n 4800 4200 m 7200 4200 l 7200 4800 l 4800 4800 l cp gs col0 s gr /Times-Roman ff 270.00 scf sf 4950 4050 m gs 1 -1 sc (100) col0 sh gr /Times-Roman ff 360.00 scf sf 2700 5700 m gs 1 -1 sc (0) col0 sh gr /Times-Roman ff 360.00 scf sf 2700 4650 m gs 1 -1 sc (0) col0 sh gr /Times-Roman ff 360.00 scf sf 1950 4650 m gs 1 -1 sc (0) col0 sh gr /Times-Roman ff 480.00 scf sf 2325 5550 m gs 1 -1 sc (Q) col0 sh gr /Times-Roman ff 480.00 scf sf 2325 4500 m gs 1 -1 sc (Q) col0 sh gr /Times-Roman ff 480.00 scf sf 1575 4500 m gs 1 -1 sc (D) col0 sh gr % Polyline gs clippath 8190 6750 m 8190 6600 l 7909 6600 l 8149 6675 l 7909 6750 l cp eoclip n 6900 6000 m 6900 6675 l 8175 6675 l gs col0 s gr gr % arrowhead 15.000 slw n 7909 6750 m 8149 6675 l 7909 6600 l 7909 6750 l cp gs 0.00 setgray ef gr col0 s % Polyline 7.500 slw gs clippath 1515 4275 m 1515 4125 l 1234 4125 l 1474 4200 l 1234 4275 l cp eoclip n 6300 6000 m 6300 6900 l 900 6900 l 900 4200 l 1500 4200 l gs col0 s gr gr % arrowhead 15.000 slw n 1234 4275 m 1474 4200 l 1234 4125 l 1234 4275 l cp gs 0.00 setgray ef gr col0 s % Polyline 7.500 slw gs clippath 1515 1650 m 1515 1500 l 1234 1500 l 1474 1575 l 1234 1650 l cp eoclip n 5775 6000 m 5775 6600 l 675 6600 l 675 1575 l 1500 1575 l gs col0 s gr gr % arrowhead 15.000 slw n 1234 1650 m 1474 1575 l 1234 1500 l 1234 1650 l cp gs 0.00 setgray ef gr col0 s % Polyline 7.500 slw gs clippath 4815 3000 m 4815 2850 l 4534 2850 l 4774 2925 l 4534 3000 l cp eoclip n 1575 675 m 3900 675 l 3900 2925 l 4800 2925 l gs col0 s gr gr % arrowhead 15.000 slw n 4534 3000 m 4774 2925 l 4534 2850 l 4534 3000 l cp gs 0.00 setgray ef gr col0 s % Polyline 7.500 slw gs clippath 4815 4125 m 4815 3975 l 4534 3975 l 4774 4050 l 4534 4125 l cp eoclip n 2925 4500 m 3675 4500 l 3675 4050 l 4800 4050 l gs col0 s gr gr % arrowhead 15.000 slw n 4534 4125 m 4774 4050 l 4534 3975 l 4534 4125 l cp gs 0.00 setgray ef gr col0 s % Polyline 7.500 slw gs clippath 4815 3675 m 4815 3525 l 4534 3525 l 4774 3600 l 4534 3675 l cp eoclip n 2925 1650 m 3675 1650 l 3675 3600 l 4800 3600 l gs col0 s gr gr % arrowhead 15.000 slw n 4534 3675 m 4774 3600 l 4534 3525 l 4534 3675 l cp gs 0.00 setgray ef gr col0 s % Polyline 7.500 slw n 6000 1200 m 6000 6000 l gs col0 s gr % Polyline n 6600 1200 m 6600 6000 l gs col0 s gr % Polyline n 5400 1200 m 5400 6000 l gs col0 s gr % Polyline n 4800 5400 m 7200 5400 l 7200 6000 l 4800 6000 l cp gs col0 s gr % Polyline n 4800 4800 m 7200 4800 l 7200 5400 l 4800 5400 l cp gs col0 s gr $F2psEnd rs %%EndDocument endTexFig 517 2019 a Fj(W)-6 b(e)35 b(use)g(a)f(\223)n(R)n(OM\224)g(to)h (implement)h(the)f(cir)n(cuit.)71 b(Think)36 b(of)f(a)g(R)n(OM)f(as)g (simple)h(sever)o(al)517 2131 y(MUX)o(es)16 b(using)h(the)g(\223)n(MUX) q(\224)f(tr)q(ick.)24 b(Thus)o(,)18 b(the)f(R)n(OM)f(has)g(3)h(bits)g (at)f(each)g(addr)n(ess)n(.)24 b(H)m(o)m(w)o(ever)-5 b(,)517 2244 y(that)n(')-10 b(s)21 b(the)g(same)e(as)h(3)g(8-1)h(MUX)f (implementing)i(columns)f Fd(D)2771 2258 y Fe(1)2811 2244 y Fj(,)g Fd(D)2931 2258 y Fe(0)2991 2244 y Fj(and)f Fd(z)t Fj(.)517 2374 y(The)32 b(R)n(OM)f(r)n(epr)n(esents)h(the)g (combinational)i(cir)n(cuit)f(that)f(does)g(the)g(computation.)61 b(W)-6 b(e)517 2487 y(could)22 b(have)d(easily)i(used)f(sum-of-pr)o (oducts)i(instead.)200 2699 y(2.)45 b(What)21 b(kind)g(of)g(machine)g (is)f(sho)m(wn)i(in)f(the)f(pr)n(evious)i(pr)o(oblem?)27 b(\(M)m(ealy)20 b(or)i(M)m(oor)n(e\))317 2850 y Fh(Answ)o(er)r(:)g Fj(As)h(dr)o(awn,)h(it)g(is)f(a)g(M)m(oor)n(e)i(machine)n(.)34 b(M)m(oor)n(e)24 b(machines)f(have)f(outputs)j(that)e(depend)317 2962 y Fc(only)j Fj(on)e(curr)n(ent)h(state)n(.)33 b(M)m(ealy)23 b(machines)g(have)f(outputs)i(that)g(can)f(depend)h(on)g(curr)n(ent)h (state)317 3075 y Fc(and)31 b Fj(the)d(input.)50 b(Thus)o(,)30 b(the)f(outputs)g(of)f(a)g(M)m(ealy)g(machine)g(ar)n(e)g(placed)g(on)h (the)f(edge)n(,)i(r)o(ather)317 3188 y(than)21 b(in)g(the)g(state)f (itself.)317 3339 y(Ther)n(e)26 b(is)g(a)e(pr)o(oof)k(that)d(sho)m(ws)g (M)m(ealy)g(and)h(M)m(oor)n(e)g(machines)g(ar)n(e)f(\223)-7 b(equiv)o(alent)n(\224)-12 b(.)40 b(That)25 b(is)o(,)i(y)o(ou)317 3451 y(can)21 b(implement)g(a)f(M)m(ealy)g(machine)h(as)e(a)h(M)m(oor)n (e)i(machine)f(and)f(vice)h(versa.)200 3639 y(3.)45 b(What)21 b(is)g(the)f(purpose)i(of)f(\002nite)g(state)f(machines)g(for)i (computer)f(har)n(dwar)n(e?)317 3789 y Fh(Answ)o(er)r(:)f Fj(F)o(inite)i(state)e(machines)h(ar)n(e)g(often)g(used)g(as)f(contr)o (ol)k(units)d(for)h(har)n(dwar)n(e)n(.)27 b(Thus)o(,)22 b(they)317 3902 y(contr)o(ol)k(AL)n(U)l(s)o(,)d(MUX)o(es)o(,)g (encoders)o(,)h(decoders)o(,)h(etc)o(.)33 b(F)o(ur)q(ther)q(mor)n(e)n (,)24 b(they)f(sequence)f(the)h(oper)n(-)317 4015 y(ations)n(.)317 4165 y(F)o(inite)31 b(state)d(machines)i(ar)n(e)f(a)g(somewhat)g(cr)q (ude)g(for)q(m)h(of)g(a)f(pr)o(ogr)o(amming)j(language)n(.)53 b(P)o(r)o(o-)317 4278 y(gr)o(amming)24 b(languages)f(have)e(constr)q (ucts)j(that)f(make)f(it)h(easier)f(to)i(wr)q(ite)f(code)n(,)h(but)g (\002nite)g(state)317 4391 y(machines)32 b(can)f(do)i(many)e(things)i (the)f(a)f(pr)o(ogr)o(amming)j(language)e(can)f(do)l(,)36 b(but)c(with)h(much)317 4504 y(mor)n(e)21 b(effor)q(t.)200 4692 y(4.)45 b(D)o(r)o(aw)30 b(a)f(timing)i(diagr)o(am)g(for)f(the)g (abo)m(ve)g(\002nite)h(state)e(machine)n(.)54 b(Assume)29 b(that)h(y)o(ou)h(star)q(t)e(in)317 4805 y(state)20 b(0,)h(and)g(the)f (input)i Fd(x)e Fj(is)h(0,0,1,1,0,1.)200 4992 y(5.)45 b(W)l(r)q(ite)22 b(the)e(char)o(acter)q(istic)i(equations)e(for)i(each) e(of)g(the)h(3)g(types)f(of)h(\003ip)h(\003ops)n(.)1941 5497 y(3)p eop %%Page: 4 4 4 3 bop 317 260 1099 4 v 315 373 4 113 v 367 339 a Fd(D)p 493 373 V 102 w(Q)p 665 373 V 100 w(Q)788 306 y Fe(+)p 895 373 V 947 339 a Fj(O)o(per)o(ation)p 1414 373 V 317 376 1099 4 v 315 489 4 113 v 382 455 a(0)p 493 489 V 126 w(0)p 665 489 V 153 w(0)p 895 489 V 214 w(RESET)p 1414 489 V 315 602 V 382 568 a(0)p 493 602 V 126 w(1)p 665 602 V 153 w(0)p 895 602 V 214 w(RESET)p 1414 602 V 317 605 1099 4 v 315 718 4 113 v 382 684 a(1)p 493 718 V 126 w(0)p 665 718 V 153 w(1)p 895 718 V 271 w(SET)p 1414 718 V 315 831 V 382 797 a(1)p 493 831 V 126 w(1)p 665 831 V 153 w(1)p 895 831 V 271 w(SET)p 1414 831 V 317 835 1099 4 v 1565 260 1087 4 v 1563 373 4 113 v 1615 339 a Fd(T)p 1728 373 V 112 w(Q)p 1900 373 V 99 w(Q)2023 306 y Fe(+)p 2130 373 V 2182 339 a Fj(O)o(per)o(ation)p 2649 373 V 1565 376 1087 4 v 1563 489 4 113 v 1623 455 a(0)p 1728 489 V 121 w(0)p 1900 489 V 153 w(0)p 2130 489 V 218 w(HOLD)p 2649 489 V 1563 602 V 1623 568 a(0)p 1728 602 V 121 w(1)p 1900 602 V 153 w(1)p 2130 602 V 218 w(HOLD)p 2649 602 V 1565 605 1087 4 v 1563 718 4 113 v 1623 684 a(1)p 1728 718 V 121 w(0)p 1900 718 V 153 w(1)p 2130 718 V 168 w(T)n(OGGLE)p 2649 718 V 1563 831 V 1623 797 a(1)p 1728 831 V 121 w(1)p 1900 831 V 153 w(0)p 2130 831 V 168 w(T)n(OGGLE)p 2649 831 V 1565 835 1087 4 v 2800 31 1280 4 v 2798 144 4 113 v 2850 110 a Fd(J)p 2957 144 V 109 w(K)p 3141 144 V 106 w(Q)p 3312 144 V 3329 144 V 116 w(Q)3452 77 y Fe(+)p 3559 144 V 3611 110 a Fj(O)o(per)o(ation)p 4078 144 V 2800 147 1280 4 v 2798 260 4 113 v 2855 226 a(0)p 2957 260 V 123 w(0)p 3141 260 V 130 w(0)p 3312 260 V 3329 260 V 170 w(0)p 3559 260 V 218 w(HOLD)p 4078 260 V 2798 373 V 2855 339 a(0)p 2957 373 V 123 w(0)p 3141 373 V 130 w(1)p 3312 373 V 3329 373 V 170 w(1)p 3559 373 V 218 w(HOLD)p 4078 373 V 2800 376 1280 4 v 2798 489 4 113 v 2855 455 a(0)p 2957 489 V 123 w(1)p 3141 489 V 130 w(0)p 3312 489 V 3329 489 V 170 w(0)p 3559 489 V 213 w(RESET)p 4078 489 V 2798 602 V 2855 568 a(0)p 2957 602 V 123 w(1)p 3141 602 V 130 w(1)p 3312 602 V 3329 602 V 170 w(0)p 3559 602 V 213 w(RESET)p 4078 602 V 2800 605 1280 4 v 2798 718 4 113 v 2855 684 a(1)p 2957 718 V 123 w(0)p 3141 718 V 130 w(0)p 3312 718 V 3329 718 V 170 w(1)p 3559 718 V 270 w(SET)p 4078 718 V 2798 831 V 2855 797 a(1)p 2957 831 V 123 w(0)p 3141 831 V 130 w(1)p 3312 831 V 3329 831 V 170 w(1)p 3559 831 V 270 w(SET)p 4078 831 V 2800 835 1280 4 v 2798 948 4 113 v 2855 914 a(1)p 2957 948 V 123 w(1)p 3141 948 V 130 w(0)p 3312 948 V 3329 948 V 170 w(1)p 3559 948 V 168 w(T)n(OGGLE)p 4078 948 V 2798 1060 V 2855 1027 a(1)p 2957 1060 V 123 w(1)p 3141 1060 V 130 w(1)p 3312 1060 V 3329 1060 V 170 w(0)p 3559 1060 V 168 w(T)n(OGGLE)p 4078 1060 V 2800 1064 1280 4 v 200 1214 a(6.)45 b(W)l(r)q(ite)22 b(the)e(ex)o(citation)i(table)f (for)g(each)f(of)h(the)g(3)g(types)f(of)h(\003ip)g(\003ops)n(.)317 1365 y Fh(Answ)o(er)r(:)e Fj(S)o(ee)h(T)-7 b(utor)q(ial)200 1552 y(7.)45 b(H)m(o)m(w)21 b(much)g(infor)q(mation)h(can)f(a)f(single) h(\003ip)h(\003op)f(stor)n(e?)317 1703 y Fh(Answ)o(er)r(:)e Fj(One)i(bit.)200 1890 y(8.)45 b(What)21 b(do)g(\003ip)h(\003ops)f(pr)o (o)m(vide)i(y)o(ou)e(that)g(combinational)i(logic)f(cir)n(cuits)g(do)g (not?)317 2041 y Fh(Answ)o(er)r(:)d Fj(S)n(tate)i(\(or)g(equiv)o (alently)-8 b(,)21 b(memor)r(y\).)200 2228 y(9.)45 b(D)o(esign)21 b(an)g(asynchr)o(onous)h(counter)f(using)g(T)g(\003ip)h(\003ops)n(.)317 2378 y Fh(Answ)o(er)r(:)d Fj(Done)i(in)g(class)151 2566 y(10.)46 b(D)o(esign)21 b(an)g(asynchr)o(onous)h(counter)f(using)g(D)g (\003ip)g(\003ops)n(.)317 2716 y Fh(Answ)o(er)r(:)j Fj(Y)-8 b(ou)27 b(want)e(a)g(D)h(\003ip)h(\003op)g(to)f(\003ip)h(its)f(v)o (alue)g(after)f(each)g(clock)i(edge)n(.)41 b(The)26 b(easiest)f(way)317 2829 y(to)d(do)f(this)h(is)f(to)g(put)h(an)e(inver)q(ter)h(\(a)f(NO)m (T)i(gate\))f(on)g(the)g(output)h(of)f(the)g(D)g(\003ip)h(\003op)g (\(i.e)n(.,)f Fd(Q)p Fj(\))g(and)317 2942 y(feed)g(it)g(back)f(into)i (the)e(input)i(of)f Fd(D)s Fj(.)151 3130 y(11.)46 b(What)21 b(does)g(it)g(mean)f(for)h(a)f(counter)i(to)f(be)g(asynchr)o(onous?)317 3280 y Fh(Answ)o(er)r(:)e Fj(N)m(ot)j(all)e(\003ip)i(\003ops)f(hooked)h (to)f(a)f(common)h(clock.)151 3468 y(12.)46 b(D)o(esign)21 b(a)f(par)o(allel)h(load)h(r)n(egister)f(using)g(D)g(\003ip)g(\003ops)n (.)317 3618 y Fh(Answ)o(er)r(:)e Fj(Done)i(in)g(class)n(.)k(S)o(hould)d (be)f(in)g(the)g(T)-7 b(utor)q(ial.)151 3806 y(13.)46 b(I)n(t)n(')-10 b(s)22 b(said)g(that)g(a)g(T)g(\003ip)h(\003op)h(is)e (equiv)o(alent)g(to)h(a)e(D)h(\003ip)h(\003op)l(.)31 b(This)23 b(means)e(that)h(y)o(ou)h(can)f(put)h(a)e(D)317 3918 y(\003ip)h(\003op)g(in)f(a)f(black)g(bo)n(x,)i(add)f(logic)h (gates)o(,)e(and)h(the)f(black)h(bo)n(x)h(behaves)d(like)h(a)g(T)h (\003ip)h(\003op)l(.)151 4106 y(14.)46 b(What)21 b(is)g(the)f(purpose)i (of)f(a)f(tr)q(i-state)g(buffer?)26 b(H)m(o)m(w)21 b(is)g(it)g(differ)n (ent)h(fr)o(om)f(an)f(AND)g(gate?)317 4256 y Fh(Answ)o(er)r(:)30 b Fj(A)i(tr)q(i-state)g(buffer)h(when)f(active)n(,)i(allo)m(ws)f(the)f (input)h(to)g(pr)o(opagate)g(to)g(the)f(output.)317 4369 y(When)h(it)f(is)g(inactive)n(,)j(the)d(output)h(is)f(\223high)h (impedance)-5 b(\224)31 b(or)i(basically)f(nothing.)62 b(Thus)o(,)35 b(the)317 4482 y(output)30 b(of)f(a)f(tr)q(i-state)h (buffer)g(can)f(be)h(0,)h(1,)h(or)f(nothing)g(\(high)g(impedance\))e (wher)n(e)h(0)f(is)h(NO)m(T)317 4595 y(consider)n(ed)22 b(nothing.)151 4783 y(15.)46 b(Why)21 b(ar)n(e)g(tr)q(i-state)f (buffers)h(useful)f(when)g(designing)j(cir)n(cuits)f(with)f(a)f(bus)n (.)317 4933 y Fh(Answ)o(er)r(:)25 b Fj(A)h(bus)g(is)h(a)e(shar)n(ed)i (for)q(m)f(of)h(communication.)45 b(A)o(t)27 b(any)f(one)g(time)n(,)j (only)e(one)g(device)317 5046 y(should)20 b(output)h(v)o(alues)d(onto)j (the)e(bus)n(.)25 b(T)-9 b(o)20 b(pr)n(event)f(other)h(devices)f(fr)o (om)h(outputting)i(v)o(alues)c(on)317 5159 y(the)j(bus)o(,)g(tr)q (i-state)f(buffers)h(can)f(be)h(set)f(to)h(inactive)n(,)g(and)f(thus)h (not)g(output)h(v)o(alues)e(to)i(the)e(bus)n(.)1941 5497 y(4)p eop %%Page: 5 5 5 4 bop 90 119 a Fj(C)o(ache)20 b(and)h(memor)r(y)-9 b(.)200 379 y(1.)45 b(List)21 b(these)f(fr)o(om)h(slo)m(w)o(est)g(to)h (fastest)d(\(in)i(ter)q(ms)f(of)h(access)e(time\).)26 b(D)o(isk,)21 b(cache)n(,)f(r)n(egisters)o(,)h(RAM.)317 529 y Fh(Answ)o(er)r(:)e Fj(D)o(isk,)i(RAM,)f(cache)n(,)g(r)n(egisters) n(.)200 717 y(2.)45 b(E)o(xplain)22 b(spatial)f(locality)-9 b(.)27 b(E)o(xplain)22 b(tempor)o(al)g(locality)-9 b(.)27 b(H)m(o)m(w)21 b(do)g(caches)f(help?)317 867 y Fh(Answ)o(er)r(:)f Fj(S)o(ee)h(w)o(ebpage)h(on)g(cache)n(.)200 1055 y(3.)45 b(F)m(or)17 b(a)e(fully)m(-associative)h(cache)n(,)h(explain)g(what)f (happens)g(when)g(an)f(instr)q(uction)k(to)e(load)f(a)g(32-bit)317 1167 y(int)22 b(is)e(gener)o(ated?)26 b(Assume)20 b(the)g(data)g(is)h (in)g(the)g(cache)n(.)317 1318 y Fh(Answ)o(er)r(:)e Fj(The)h(instr)q (uction)i(to)e(load)h(a)e(32)h(bit)h(int)g(gener)o(ates)e(an)h(addr)n (ess)n(.)25 b(Let)n(')-10 b(s)20 b(call)g(this)g(addr)n(ess)317 1431 y Fd(A)385 1445 y Fe(31)p Fb(\000)p Fe(0)550 1431 y Fj(.)25 b(S)o(ome)17 b(of)h(those)g(bits)g(ar)n(e)f(used)g(to)h (compar)n(e)g(to)h(each)d(tag)i(\(usually)f(the)h(high)g Fd(k)j Fj(bits)d(wher)n(e)317 1544 y Fd(k)24 b Fj(is)c(the)h(number)g (of)g(bits)g(in)h(the)e(tag\).)317 1694 y(The)h(tag)g(bits)g(ar)n(e)f (compar)n(ed)h(to)h(all)e(tags)h(in)g(all)f(the)h(slots)g(wher)n(e)f (the)h(v)o(alid)g(bit)h(is)f(1.)317 1844 y(S)n(ince)27 b(w)o(e)g(assumed)e(the)i(data)f(is)g(in)h(the)g(cache)n(,)g(a)f(match) g(is)h(found.)44 b(B)o(its)26 b Fd(A)3137 1859 y Ff(k)r Fb(\000)p Fe(1)p Fb(\000\000)p Fe(0)3442 1844 y Fj(is)g(used)g(to)317 1957 y(\002nd)c(the)e(offset)h(into)h(the)f(data)f(block,)h(and)g(the)f (b)n(ytes)h(ar)n(e)f(fetched)h(fr)o(om)g(ther)n(e)n(.)200 2145 y(4.)45 b(What)21 b(happens)g(if)f(it)n(')-10 b(s)22 b(not)f(in)h(the)e(cache?)317 2295 y Fh(Answ)o(er)r(:)h Fj(I)o(f)h(the)g(data)f(is)h(not)h(in)g(the)f(cache)n(,)g(this)g(means) f(no)i(v)o(alid)f(tag)g(was)f(found.)31 b(S)o(o)l(,)23 b(the)f(data)317 2408 y(is)h(fetched)f(fr)o(om)h(physical)g(memor)r(y)f (\(RAM\))f(and)i(placed)f(in)h(a)f(slot)h(wher)n(e)f(the)g(v)o(alid)h (bit)h(is)e(0.)31 b(I)o(f)317 2521 y(all)23 b(the)g(v)o(alid)g(bits)g (ar)n(e)g(1,)g(then)g(one)g(of)g(the)g(slots)f(is)h(picked)g(to)g(be)g (\223)-7 b(evicted)n(\224)-12 b(.)31 b(The)23 b(data)f(block)h(in)317 2634 y(that)e(slot)g(is)g(copied)h(back)e(to)h(RAM,)e(assuming)i(the)f (dir)q(ty)i(bit)g(is)e(1.)200 2821 y(5.)45 b(S)n(uppose)25 b(y)o(ou)g(have)d(a)i(cache)f(with)i(64)f(slots)g(and)h(each)e(slot)i (has)e(a)g(data)h(block)h(with)g(128)f(b)n(ytes)n(.)317 2934 y(U)l(sing)c(the)e(conventions)i(in)g(class)o(,)e(ho)m(w)h(many)g (bits)g(ar)n(e)f(used)h(for)g(the)g(offset)f(and)h(tag)g(for)g(a)f (fully)m(-)317 3047 y(associative)i(cache)n(.)25 b(Which)d(bits)f(ar)n (e)f(used?)317 3197 y Fh(Answ)o(er)r(:)25 b Fj(F)m(or)i(a)f(fully)i (associative)e(cache)n(,)i Fd(A)1962 3211 y Fe(31)p Fb(\000)p Fe(8)2154 3197 y Fj(ar)n(e)e(used)h(for)h(the)e(tag.)45 b(The)27 b(r)n(emaining)h(bits)o(,)317 3310 y Fd(A)385 3324 y Fe(7)p Fb(\000)p Fe(0)536 3310 y Fj(ar)n(e)20 b(used)g(for)h(the)g(offset.)26 b(The)20 b(number)h(of)g(slots)g(is)g (not)g(used.)200 3498 y(6.)45 b(S)n(uppose)31 b(y)o(ou)h(have)d(a)h (dir)n(ect)i(mapped)e(cache)n(.)55 b(Which)32 b(bits)f(ar)n(e)f(used)h (for)g(the)g(tag,)i(slot)e(and)317 3611 y(offset?)317 3761 y Fh(Answ)o(er)r(:)23 b Fj(F)m(or)i(a)f(dir)n(ect-mapped)i(cache)n (,)g Fd(A)1912 3775 y Fe(31)p Fb(\000)p Fe(14)2137 3761 y Fj(ar)n(e)e(used)g(for)i(the)f(tag.)38 b Fd(A)3065 3775 y Fe(13)p Fb(\000)p Fe(8)3254 3761 y Fj(is)25 b(used)f(for)i(the) 317 3874 y(slot)21 b(number)-5 b(.)26 b(The)21 b(r)n(emaining)h(bits)o (,)f Fd(A)1749 3888 y Fe(7)p Fb(\000)p Fe(0)1899 3874 y Fj(ar)n(e)g(used)f(for)h(the)g(offset.)200 4062 y(7.)45 b(S)n(uppose)23 b(y)o(ou)h(have)d(a)h(set-associative)f(cache)n(.)32 b(Which)24 b(bits)f(ar)n(e)f(used)h(for)g(the)g(tag,)g(set)f(and)h (off-)317 4174 y(set?)j(Assume)19 b(each)h(set)g(contains)h(8)g(slots)n (.)317 4325 y Fh(Answ)o(er)r(:)h Fj(S)n(ince)i(each)f(set)g(has)f(8)i (slots)o(,)g(ther)n(e)g(ar)n(e)f(8)g(sets)n(.)34 b(Ther)n(e)24 b(ar)n(e)f(3)g(bits)h(needed)f(to)h(identify)317 4438 y(one)d(of)g(8)g(sets)n(.)317 4588 y(F)m(or)i(a)g(dir)n(ect-mapped)h (cache)n(,)f Fd(A)1540 4602 y Fe(31)p Fb(\000)p Fe(11)1763 4588 y Fj(ar)n(e)f(used)h(for)h(the)f(tag.)32 b Fd(A)2678 4602 y Fe(10)p Fb(\000)p Fe(8)2866 4588 y Fj(is)23 b(used)f(for)i(the)f (set)f(num-)317 4701 y(ber)-5 b(.)26 b(The)21 b(r)n(emaining)g(bits)o (,)h Fd(A)1385 4715 y Fe(7)p Fb(\000)p Fe(0)1535 4701 y Fj(ar)n(e)e(used)h(for)g(the)f(offset.)200 4888 y(8.)45 b(T)-7 b(r)q(ue)21 b(or)g(F)l(alse)n(.)j(The)d(v)o(alid)g(por)q(tions)i (of)e(the)f(cache)g(ar)n(e)h(a)f(subset)g(of)h(physical)g(memor)r(y)f (\(RAM\).)317 5039 y Fh(Answ)o(er)r(:)f Fj(T)-7 b(r)q(ue)n(.)1941 5497 y(5)p eop %%Page: 6 6 6 5 bop 200 119 a Fj(9.)45 b(E)o(xplain)22 b(wr)q(ite-thr)o(ough)h(vs)n (.)i(wr)q(ite-back.)317 269 y Fh(Answ)o(er)r(:)15 b Fj(W)l(r)q(ite-thr) o(ough)k(means)c(that)h(when)g(data)g(is)g(updated)g(in)h(the)f(cache)n (,)h(it)f(is)g(also)g(updated)317 382 y(in)23 b(RAM)e(\(usually)h(done) h(in)g(the)f(\223backgr)o(ound)n(\224)h(so)f(that)g(the)h(CPU)e(isn)-7 b(')g(t)23 b(held)g(up)f(b)n(y)g(the)h(update)317 495 y(in)c(RAM\).)f(W)l(r)q(ite-back)g(means)g(that)g(RAM)g(is)g(only)i (updated)f(when)f(the)g(data)h(block)g(in)g(the)f(cache)317 608 y(is)j(evicted)g(\(and)f(the)h(dir)q(ty)g(bit)h(is)f(1\).)151 796 y(10.)46 b(E)o(xplain)22 b(what)f(the)f(dir)q(ty)i(bit)f(is)g(used) f(for?)317 946 y Fh(Answ)o(er)r(:)f Fj(The)h(dir)q(ty)h(bit)g (indicates)g(whether)f(the)g(data)g(block)h(has)e(been)h(modi\002ed.)27 b(I)o(f)21 b(it)f(has)o(,)g(the)317 1059 y(bit)j(has)e(a)h(v)o(alue)g (of)g(1.)30 b(This)23 b(is)f(used)f(to)i(indicate)g(whether)f(the)g (data)g(block)g(needs)g(to)h(be)f(copied)317 1172 y(back)e(to)i(RAM)d (when)i(the)f(slot)h(is)g(evicted.)151 1359 y(11.)46 b(H)m(o)m(w)17 b(ar)n(e)f(caches)f(differ)n(ent)j(fr)o(om)f(r)n (egisters)g(\(fr)o(om)h(the)e(point)i(of)f(view)f(of)g(an)g(assembly)g (language)317 1472 y(pr)o(ogr)o(ammer\)?)317 1622 y Fh(Answ)o(er)r(:)22 b Fj(Assembly)h(language)g(pr)o(ogr)o(ammers)i(can)e(wor)o(k)h(with)g (r)n(egisters)g(\(it)n(')-10 b(s)24 b(par)q(t)g(of)g(the)f(lan-)317 1735 y(guage\).)i(H)m(o)m(w)o(ever)-5 b(,)20 b(they)h(ar)n(e)f(usually) g(unawar)n(e)g(of)h(the)f(cache)g(\(i.e)n(.,)h(ther)n(e)g(ar)n(e)f(no)h (constr)q(ucts)g(in)317 1848 y(the)g(language)f(to)i(deal)e(with)h (cache\).)k(C)o(ache)20 b(is)h(pr)q(imar)q(ily)g(handled)h(in)f(har)n (dwar)n(e)n(.)90 2108 y(MIPS)200 2368 y(1.)45 b(H)m(o)m(w)30 b(many)f(commonly)h(accessible)f(integer)h(r)n(egisters)g(does)f(a)g (MIPS)f(pr)o(ocessor)j(have?)50 b(\(As-)317 2481 y(sume)20 b(R2000)h(model,)g(as)f(used)g(in)h(the)g(book\)?)317 2631 y Fh(Answ)o(er)r(:)e Fj(32)i(integer)h(r)n(egisters)n(.)200 2819 y(2.)45 b(Which)22 b(r)n(egisters)f(ar)n(e)f(\223)-5 b(special)o(\224?)317 2969 y Fh(Answ)o(er)r(:)27 b Fj($r0)j(is)f(a)f (\223har)n(dwir)n(ed)n(\224)i(0)f(r)n(egister)h(\(it)n(')-10 b(s)30 b(v)o(alue)f(is)g(always)f(z)o(er)o(o\).)52 b($r31)29 b(is)g(used)g(in)h(the)317 3082 y(jump-and-link)h(\(jal\))g(instr)q (uction.)57 b($r29)31 b(is)g(the)f(stack)g(pointer)i(\(but)f(b)n(y)f (convention,)35 b(no)c(in-)317 3195 y(str)q(uctions)22 b(implicitly)h(r)n(efer)e(to)g(this)g(r)n(egister\).)200 3382 y(3.)45 b(MIPS)22 b(does)g(not)h(have)e(a)g(push)h(instr)q (uction.)33 b(W)l(r)q(ite)23 b(a)e(ser)q(ies)h(of)g(MIPS)g(instr)q (uctions)i(to)e(emulate)317 3495 y(pushing)g(an)e(int)i(v)o(alue)e(on)h (the)g(stack)f(fr)o(om)h(r)n(egister)h(2.)317 3646 y Fh(Answ)o(er)r(:)317 3895 y Fa(addi)47 b($r29,)f($r29,)h(-4)142 b(#)48 b(Subtract)d(4)j(from)e(stack)h(pointer)317 4008 y(sw)143 b($r2,)47 b(0\($r29\))236 b(#)48 b(Using)e(a)i(0)f(offset)f (from)h(stack)f(pointer,)g(store)g(value)g($r2)200 4258 y Fj(4.)f(MIPS)29 b(does)i(not)f(have)f(a)h(bge)g(instr)q(uction.)56 b(T)-7 b(r)o(anslate)30 b(the)g(follo)m(wing)i(instr)q(uction)h(into)e (v)o(alid)317 4371 y(MIPS)20 b(code:)26 b(\(H)n(int:)g(use)20 b Fa(slt)p Fj(\).)317 4596 y Fa(bge)47 b($r1,)g($r2,)f(LABEL)317 4821 y Fh(Answ)o(er)r(:)19 b Fj(I)o(f)i($r1)g(is)g(gr)n(eater)g(than)f (or)i(equal)e(to)h($r2,)g(that)g(means)e($r2)i(is)g(less)f(than)h($r1.) 317 5071 y Fa(slt)47 b($r3,)g($r2,)f($r1)95 b(#)48 b(Set)e($r3)h(to)h (1)f(if)g($r2)g(<)h($r1)317 5184 y(bne)f($r3,)g($r0,)f(LABEL)95 b(#)47 b(Branck)f(if)h($r3)g(!=)g(0)1941 5497 y Fj(6)p eop %%Page: 7 7 7 6 bop 200 119 a Fj(5.)45 b(T)-7 b(r)o(anslate)21 b(the)g(follo)m (wing)i(C)e(code)g(into)i(MIPS.)d(Assume)f(r)n(egisters)i Fd(i)g Fj(is)g(stor)n(ed)h(in)f($t0,)h Fd(j)k Fj(is)21 b(stor)n(ed)317 232 y(in)g($t1,)h(and)e Fd(k)k Fj(is)c(stor)n(ed)i(in)f ($t3.)317 449 y Fa(while)47 b(\()g(i)h(<)f(j)g(||)h(i)f(<)h(k)f(\))460 562 y(k++)g(;)317 675 y(j++;)200 893 y Fj(6.)e(W)l(r)q(ite)25 b(MIPS)f(assembly)f(code)i(that)f(deter)q(mines)g(if)h(bit)g Fd(i)g Fj(in)f(r)n(egister)h($r2)g(has)f(a)f(v)o(alue)h(of)h(1.)37 b(The)317 1006 y(v)o(alue)22 b(of)f Fd(i)h Fj(is)f(stor)n(ed)i(in)f ($r3.)28 b(I)o(f)22 b(it)g(is)o(,)g(set)f(the)g(v)o(alue)g(of)h($r4)g (to)g(1,)g(and)f(if)h(not,)h(set)e(the)g(v)o(alue)h(of)f($r4)317 1119 y(to)g(0.)26 b(C)o(omment)21 b(each)f(line)h(of)g(code)n(.)200 1304 y(7.)45 b(W)l(r)q(ite)23 b(MIPS)d(assembly)h(code)h(that)g(sums)f (an)g(arr)o(ay)g(of)h(integers)n(.)29 b(Assume)21 b(the)g(siz)o(e)h(of) f(the)h(arr)o(ay)317 1417 y(is)j(stor)n(ed)h(in)g($r1,)h(and)e(the)g (star)q(ting)g(addr)n(ess)g(of)g(the)g(arr)o(ay)g(is)g(at)g(label,)h (ARR.)e(The)h(sum)g(should)317 1530 y(be)c(placed)g(in)g($r2.)26 b(\(M)o(ight)21 b(wr)q(ite)g(this)g(in)g(C)g(code)g(\002rst\).)26 b(C)o(omment)21 b(each)f(line)h(of)g(code)n(.)200 1715 y(8.)45 b(N)m(o)m(w)22 b(solve)f(the)h(pr)n(evious)h(using)f(r)n (ecursion.)30 b(When)22 b(using)g(r)n(ecursion,)h(y)o(ou)g(may)e(need)g (to)i(use)d(a)317 1828 y(stack.)25 b(\(Again,)c(wr)q(ite)f(the)h(code)g (in)g(C,)g(then)g(conver)q(t\).)k(C)o(omment)d(each)e(line)h(of)g(code) n(.)200 2013 y(9.)45 b(Why)21 b(doesn)-7 b(')g(t)22 b(MIPS)d(have)h(a)g (single)h(instr)q(uction)i(to)e(load)g(a)f(32)h(bit)g(v)o(alue)g(in)g (a)f(r)n(egister?)317 2162 y Fh(Answ)o(er)r(:)28 b Fj(Y)-8 b(ou)31 b(wouldn)-7 b(')g(t)32 b(have)d(any)g(space)h(in)g(the)h(instr) q(uction)h(to)f(stor)n(e)f(the)g(opcode)i(nor)f(the)317 2275 y(r)n(egister)22 b(wher)n(e)e(the)h(constant)g(should)h(be)e (loaded.)151 2460 y(10.)46 b(N)m(ame)20 b(the)h(thr)n(ee)g(kinds)f(of)h (MIPS)f(instr)q(uctions)n(.)317 2609 y Fh(Answ)o(er)r(:)f Fj(R)m(-type)n(,)i(I-type)n(,)f(J-type)n(.)151 2794 y(11.)46 b(E)o(xplain)22 b(ho)m(w)g(the)e(addr)n(ess)g(for)i(a)e(jump)h(instr)q (uction)i(is)d(computed)i(fr)o(om)g(an)e(instr)q(uction.)317 2943 y Fh(Answ)o(er)r(:)25 b Fj(B)o(its)h(25-0)g(ar)n(e)g(taken)g(fr)o (om)h(the)g(jump)g(instr)q(uction.)45 b(B)o(its)26 b(31-26)h(ar)n(e)f (taken)f(fr)o(om)j(the)317 3056 y(pr)o(ogr)o(am)22 b(counter)g(\(which) f(holds)h(the)e(addr)n(ess)h(of)f(the)h(curr)n(ent)h(instr)q(uction\).) 151 3241 y(12.)46 b(What)21 b(kind)g(of)g(addr)n(essing)h(mode)e(is)h (used)f(in)h(a)f(br)o(anch)i(instr)q(uction?)317 3391 y Fh(Answ)o(er)r(:)d Fj(R)n(elative)h(addr)n(essing.)26 b(The)21 b(addr)n(ess)f(is)g(computed)i(b)n(y)e(adding)i(the)e(16)h (bit)h(immediate)317 3503 y(v)o(alue)n(,)e(sign)f(extended)h(to)g(32)f (bits)o(,)h(multiplied)h(b)n(y)e(4,)h(to)f(the)g(PC)g(+)g(4)g(\(the)g (pr)o(ogr)o(am)h(counter)h(plus)317 3616 y(4\),)g(which)g(is)g(the)f (addr)n(ess)g(of)h(the)g(next)g(instr)q(uction.)151 3802 y(13.)46 b(What)21 b(kind)g(of)g(instr)q(uction)i(is)e Fa(beq)p Fj(?)317 3951 y Fh(Answ)o(er)r(:)e Fj(D)o(espite)i(doing)h(a)e (conditional)k(jump)l(,)e(it)n(')-10 b(s)21 b(an)f(I-type)g(instr)q (uction.)151 4136 y(14.)46 b(MIPS)20 b(is)h(consider)n(ed)h(a)e (load-stor)n(e)h(ar)n(chitectur)n(e)n(.)27 b(E)o(xplain)22 b(what)f(this)g(means)n(.)317 4285 y Fh(Answ)o(er)r(:)f Fj(The)i(only)h(instr)q(uctions)g(that)f(wor)o(k)g(with)h(memor)r(y)e (ar)n(e)h(load)g(and)g(stor)n(e)g(instr)q(uctions)n(.)317 4398 y(The)f(r)n(emaining)h(instr)q(uctions)g(use)e(r)n(egisters)h(as)f (oper)o(ands)n(.)151 4583 y(15.)46 b(E)o(xplain)22 b(some)f(aspects)e (of)i(RISC)f(ar)n(chitectur)n(es)n(.)317 4732 y Fh(Answ)o(er)r(:)h Fj(M)o(any)h(r)n(egisters)o(,)h(small)f(instr)q(uction)i(set,)f (load-stor)n(e)g(ar)n(chitectur)n(e)n(,)h(equal-width)f(in-)317 4845 y(str)q(uctions)o(,)f(one)f(cy)o(cle)g(per)g(instr)q(uction.)151 5030 y(16.)46 b(E)o(xplain)22 b(what)f(needs)f(to)h(occur)h(to)f(tr)o (anslate)f(the)h(follo)m(wing)i(instr)q(uction.)317 5248 y Fa(bge)47 b($r1,)g($r2,)f(LABEL)1941 5497 y Fj(7)p eop %%Page: 8 8 8 7 bop 151 119 a Fj(17.)46 b(What)21 b(is)g(a)f(stack)f(pointer?)317 269 y Fh(Answ)o(er)r(:)j Fj(This)h(is)g(the)g(addr)n(ess)g(of)g(the)g (top)h(of)f(the)g(\223)-5 b(stack)l(\224)-12 b(.)32 b(S)n(tacks)22 b(gr)o(o)m(w)i(to)g(smaller)f(addr)n(esses)n(.)317 382 y(The)i(stack)f(pointer)i(contains)f(the)g(smallest)e(addr)n(ess)h (with)i(v)o(alid)f(data.)37 b(All)25 b(addr)n(esses)e(smaller)317 495 y(than)18 b(the)f(stack)g(pointer)i(ar)n(e)e(consider)n(ed)i(\223) -6 b(garbage)h(\224)15 b(\(within)k(the)e(r)o(ange)h(of)f(memor)r(y)h (wher)n(e)f(the)317 608 y(stack)j(is)g(allocated\).)151 796 y(18.)46 b(MIPS)32 b(uses)f(r)n(egisters)i(to)g(pass)f(par)o (ameters)n(.)61 b(Why)33 b(is)f(this)h(adv)o(antageous?)62 b(What)32 b(potential)317 908 y(pr)o(oblems)22 b(ar)n(e)f(ther)n(e?)317 1059 y Fh(Answ)o(er)r(:)e Fj(The)h(alter)q(native)f(is)h(to)g(use)g (the)g(stack.)k(The)c(stack)f(is)h(in)g(RAM,)f(so)h(it)n(')-10 b(s)21 b(slo)m(w)o(er)g(to)f(access)n(.)317 1172 y(U)l(sing)i(r)n (egisters)f(is)f(much)h(quicker)-5 b(.)317 1322 y(H)m(o)m(w)o(ever)g(,) 23 b(y)o(ou)g(can)f(only)h(call)g(one)f(function.)33 b(I)o(f)22 b(that)h(function)h(calls)e(another)h(function,)i(those)317 1435 y(r)n(egisters)18 b(will)h(need)e(to)h(be)g(used)f(for)h(par)o (ameter)g(passing,)g(which)g(means)f(that)g(the)h(r)n(egisters)g(will) 317 1548 y(need)j(to)g(be)g(saved)e(on)i(the)f(stack.)151 1735 y(19.)46 b(E)o(xplain)21 b(the)f(differ)n(ence)g(betw)o(een)g (caller)n(-saved)e(and)i(callee-saved)d(r)n(egisters)n(.)26 b(When)20 b(does)f(this)317 1848 y(occur?)317 1999 y Fh(Answ)o(er)r(:)d Fj(C)o(aller)n(-saved)g(r)n(egisters)i(means)e(r)n (egisters)i(that)f(need)g(to)h(be)f(saved)f(\(to)h(the)g(stack\))f(pr)q (ior)317 2111 y(to)21 b(calling)h(a)e(subr)o(outine)n(.)28 b(I)n(t)n(')-10 b(s)21 b(assumed)e(the)i(subr)o(outine)h(could)g(o)m (ver)r(wr)q(ite)f(those)f(r)n(egisters)n(.)317 2262 y(C)o(allee-saved)g (r)n(egisters)j(means)e(the)h(subr)o(outine)i(being)f(called)f(should)h (save)e(the)h(r)n(egisters)g(be-)317 2375 y(cause)e(the)g(code)i(that)e (called)h(the)g(subr)o(outine)h(wants)e(those)h(r)n(egisters)g(back)f (after)r(war)n(ds)n(.)317 2525 y(C)o(aller)n(-saved)g(is)h(analagous)f (to)i(a)e(pr)o(ofessor)i(who)f(copies)h(what)n(')-10 b(s)21 b(on)g(the)g(boar)n(d)h(befor)n(e)g(leaving)317 2638 y(class)e(\(the)g(next)h(person)h(can)e(then)h(use)f(the)g(boar)n (d)i(and)f(change)f(it\).)317 2788 y(C)o(allee-saved)k(is)h(analagous)g (to)h(a)f(pr)o(ofessor)h(cop)n(ying)h(what)n(')-10 b(s)26 b(on)g(the)f(boar)n(d)i(fr)o(om)f(a)f(pr)n(evious)317 2901 y(class)o(,)j(then)g(using)f(the)g(boar)n(d,)j(then)e(befor)n(e)g (leaving,)h(r)n(estor)q(ing)f(what)f(was)f(or)q(iginally)j(on)f(the)317 3014 y(boar)n(d)22 b(\(because)d(it)j(was)d(copied\).)317 3164 y(C)o(op)n(ying)j(is)f(done)g(on)g(the)g(stack.)1941 5497 y(8)p eop %%Trailer end userdict /end-hook known{end-hook}if %%EOF fs/www/class/fall2002/cmsc311-0101/Proj/0042775000077300017440000000000007571151477015354 5ustar cmsc311fs/www/class/fall2002/cmsc311-0101/Proj/P0/0042775000077300017440000000000007542515230015620 5ustar cmsc311fs/www/class/fall2002/cmsc311-0101/Proj/P0/proj0.html0100664000077300017440000002272307541173344017546 0ustar cmsc311 CMSC 311 - Project #0
    computer organization
    c m s c 311  
    f a l l   2 0 0 2  

    Project #0

    Due Wednesday, Sept. 18, 11:59 PM (just before midnight)
    Late Due Date Wednesday, Sept. 25, 11:59 PM (just before midnight)

    Posted: September 6, 2002

    Addendum

    Read this section frequently to check for updates/corrections/clarifications to the projects. There will be some, because the project description is rather rough right now. However, the methods should be more or less correct.

    Purpose

    The goals of the project are:

    • Change finger information
    • Write a (ad-hoc) tokenizer in C++.

    Academic Integrity Statement

    Please note that *all* programming projects in this course (including this one) are to be done independently or with the assistance of the instructional staff of this course only, unless otherwise specified IN PRINT by official webpages.

    Please review the policies outlined on the class syllabus concerning the use of class computer accounts and concerning the University's Code of Academic Integrity. The instructors of this course will review the programs submitted by students for potential violations of the Code of Academic Integrity and if it is believed that a violation has occurred it will be referred to the Office of Judicial Programs and the Student Honor Council.

    Hardcoding is considered a violation of academic integrity

    Collaboration Policy

    Should colloboration be permitted, you will need to pick a partner (groups of 2) or partners (3 or more), depending on the restrictions of each individual project.

    Only one person should submit the project, and have all the names on it. Suppose a project allows teams of 2. The two people can work together on a team, and code on the same project. However, teams are expected not to communicate with other teams. Thus, you should treat each team like an "individual" when it comes with helping other teams.

    Collaboration on P0

    You may work in teams of 2. You should inform the instructor and/or TA who your team members are, and do so in writing, with both the members having signed a paper. The paper should say "For project 0, xxx and yyy will work on the same team. We understand that working with other teams is a violation of academic integrity."

    The project is sufficiently short to be done individually. So, you do not have to work in teams.

    Should you work in teams, you should try pair programming. In this case, both of you agree to code side-by-side. One person types, the other person looks it over. After a while, you switch off. By discussing what you will do, you will avoid bugs, and hopefully code quicker.

    Project 0?

    Why is this called Project 0 instead of Project 1? Traditionally, at Maryland, Project 0 is a simple project meant to get you started. Usually Project 1 is more typical of a project in terms of size and complexity.

    dce_login: Changing Password/Shells

    In order to change shells or passwords or finger information, you must authenticate yourself. If you use "telnet", this isn't all that important, since it doesn't care. However, using "ssh" requires authentication, otherwise changing your password, finger information or default shell fails.

    To do this:

    1. Log into your account using ssh (secure shell).
    2. Type: dce_login, and hit return
    3. This will ask for some "Principal" name. Type in your username again.
    4. Then, it asks for the password. Type in your password again.
    5. This appears to start a new shell. You can then change your password by typing passwd (NOT password), hitting return, and changing the password.
    6. Once you are done, type exit. This exits out of the shell, and back into the previous shell.
    7. Then, type logout to exit your ssh session.

    Changing Finger Information

    You should change your finger information. If you use ssh to login, you must login a second time using dce_login (it will request your username and password a second time, and open a new shell). If you use telnet, you do NOT need to dce_login.

    To change your finger information, type:

    chfn
    
    You should ONLY change your name. Please have your first and last name as you are registered in the system. For example, if you are registered as "Samir Khuller", please use "Samir Khuller" rather than "Sammy Khuller" or "Biff Khuller", even if you prefer to be called "Biff".

    Ignore the parts that ask you for your phone number, office, etc. Just hit return, and don't fill anything in.

    In addition, you will probably also want to change your password.

    passwd
    
    Notice the unusual spelling of "passwd".

    This will ask for your original password, then your new password, and the new password again. If you use "ssh", it may take a day or so to take effect (it might work right away though). If you use "telnet", the changes should be immediate.

    Specifications

    You will be given a file called Tokenizer.h. The specifications are in the following link.

    Tokenizer Specification

    Implement the methods. You may add helper methods, if you want.

    Assumptions

    You may assume

    • Single quotes come in pairs. Double quotes come in pairs.
    • No tabs will appear in the input.

    Restrictions

    Restrictions.

    • You should write the program in C++.
    • You must translate \n to the newline character. It will be read in as two characters--a backslash and a newline. This should be converted to a newline character.

    You may use STL or any other features you want, provided it compiles and runs under either cxx or g++. A driver will be provided, so you can submit.

    How to Submit

    A driver will be provided soon to partly test your code. Details will be provided soon.

    See the class syllabus for policies concerning email
    Last Modified: Wed Jun 5 10:38:37 EDT 2002
    left up down right home

    Web Accessibility

    fs/www/class/fall2002/cmsc311-0101/Proj/P0/proj0.token.html0100664000077300017440000002640207536247547020676 0ustar cmsc311 CMSC 311 - Project #0
    computer organization
    c m s c 311  
    f a l l   2 0 0 2  

    Purpose

    The overall goal of the project is to write an assembly language interpreter. Thus, it may seem odd to start off with a parsing/tokenizing project.

    There are two reasons for giving this project. First, I think tokenizing is a useful skill everyone should have. Breaking up a line is just something that you tend to do when working with text.

    Second, the rest of the projects require you to manipulate text. Many students probably used all sorts of "cin" tricks to read the input in, and ended up with code that was difficult to read, write, and to fix up.

    The idea of these methods is to emulate features of the StringTokenizer in Java. Of course, this isn't the same thing, but it's close enough.

    To process a file, you will read in a line at a time, then break the line up using the methods below into tokens. At that point, you will process the tokens.

    Location of File

    Go to ~chf11001/Proj/P0/, and there should be two files. Use Tokenizer.h and create Tokenizer.cpp.

    Tokenizer Specifications

    Tokenizer

    Static Public Methods

    static string leftTrim( const string & str ) ;
    Given parameter str, removes any leading blank spaces. For example, if str is " hello, world ", then the string returned should be "hello, world ". Only the leading spaces have been removed. The remaining spaces are unchanged. If there are no leading spaces, just return the string as is (an empty string falls into this category).
    static string rightTrim( const string & str ) ;
    Given parameter str, removes any trailing blank spaces. For example, if str is " hello, world ", then the string returned should be " hello, world". Only the trailing spaces have been removed. The remaining spaces are unchanged. If there are no trailing spaces, just return the string as is (an empty string falls into this category).
    static string trim( const string & str ) ;
    Given parameter str, removes any leading AND trailing blank spaces. For example, if str is " hello, world ", then the string returned should be "hello, world". Only the leading and trailing spaces have been removed. The remaining spaces are unchanged. If there are no trailing spaces, just return the string as is (an empty string falls into this category).

    Use leftTrim and rightTrim to implement this static method.

    static bool isBlankLine( const std::string & str ) ;
    Returns true is the line consists of zero or more blanks. Returns false if there is a non-blank character.
    static std::string stripComment( const std::string & str, const std::string & commentStr ) ;
    Finds the leftmost occurrence of commentStr (that's not surrounded by single or double quotes). Removes the commentStr to end of string. For example, if the string were "add $r1, $r2, $r3 # adds", and the comment string were "#", then the retuen value would be: "add $r1, $r2, $r3 ".

    If there is no comment string, just return the string itself.

    static string getLeftToken( string & str, const string & delimiter ) ;
    A delimiter is a separator. Often spaces are used to separate words. Sometimes commas are used. You might have colons, slashes, etc. I will also assume you might use more than one character as a delimiter. For example, you might use double colons.

    The behavior of this method depends on what the delimiter is. If the delimiter is a single space or multiple spaces, then you should get the leftmost token by:

    • skipping leading white space in str
    • getting characters all the way up to the next white space character (or to the end of the string, if there is no additional white space).

    For example, if you have " cat dog ", then once the call is made to getLeftToken(), you should return "cat", and str, the parameter will be " dog ". This behaves very much like "cin" when reading in a string. If the string is empty or contains only blanks, then return the empty string.

    If the delimiter is anything else, you should search for the first delimiter not enclosed in single or double quotes. You should read up to that delimiter and stop. Should the delimiter not exist, then just return the token.

    For example, suppose the delimiter is ",". You have " ok "one, two, three" , four". The left (first) token should be "ok "one, two, three" ", and str should be " four".

    The delimiter is not kept.

    Also, "escaped" delimiters don't count. For example, if you have the string "paper \, scissors, rock", then the first (left) token is "paper , scissors" and str is "rock".

    Notice that escaped delimiters are replaced by the actual delimiter. Backslashes can also be delimiters, which means they can also be escaped.

    static string getRightToken( string & str, const string & delimiter ) ;
    Similar to getLeftToken() except your get the token from the right side. Basically, process the string right to left, instead of left to right.
    static int findRealDelimiter( const std::string & str, const std::string & delimiter ) ;
    This is useful helper function. This returns the index of the first character of a delimiter that is not surrounded by single or double quotes. If there is no such delimiter, return -1.
    static vector<string> split( const std::string & str, const std::string & delimiter, bool trimToken = true ) ;
    Calls firstToken() repeatedly to break a string into tokens. As each token is pulled out, if trimToken is true, call trim() on the token to remove leading and trailing blanks.

    Be careful. If the string was "h,," you would have 3 tokens. "h", "", and "". For delimiters that are not blanks, the number of tokens should be one more than the number of "real" delimiters.

    static std::string removeEnd( const std::string & str, char left, char right ) ;
    Suppose you had a string like " [ cat ]", and you want to remove brackets. There may be leading or trailing spaces. So, specify left as '[' and right as ']'. This returns back " cat ".

    More technically, it removes leading white space and left, should it exist. It removes trailing white space and right should it exist. Should left not exist, then this function does a left trim. Should the right one not exist, then it does a right trim (see the two methods above). Thus, if the string were " cat dog " and left and right were '[' and ']' respectively, then the result would be "cat dog".

    How to Call Static Methods

    To call a static method, you need to specify the class, followed by the double colons, followed by the method name and any arguments.

    Here's an example:

       vector<string> tokens = Tokenizer::split( str ) ;
    

    See the class syllabus for policies concerning email
    Last Modified: Wed Mar 13 20:20:09 EST 2002
    left up down right home

    Web Accessibility

    fs/www/class/fall2002/cmsc311-0101/Proj/P0/proj0.faq.html0100664000077300017440000001261007541173247020310 0ustar cmsc311 CMSC 311 - Project #0
    computer organization
    c m s c 311  
    f a l l   2 0 0 2  

    Project #0 Clarifications

    Some clarifications based on things brought up in class. Plus other stuff...

    • To make it easier to grade the projects, let's use the same compiler. Use g++-3.2 with the -Wall option. This compiler was just installed a few weeks ago, and I want to see how it's doing.

      This is one of the latest versions of g++, and it now enforces namespaces. If you need to read about that in the CMSC 214 Tutorial located here.

    • You should match double quotes with the next occurring double quotes that is not backslashed.
    • You should match single quotes with the next occurring single quotes that is not backslashed.
    • Process the string left to right. If the first non-backslashed quote is a double quote, then you look for the next matching double quote.
    • Do NOT strip off the double quotes, nor the single quotes during a getLeftToken() operation. (The reason is rather technical).
    • Handle the following escape sequences: \n, \', \", \\. Also, handle backslash followed by the delimiter. Thus, if the delimiter is : then \: is not meant to be a real delimiter.
    • You may assume ',",\n, \ are NOT delimiters (nor their backslashed version).
    • Yes, you have to handle spaces as delimiters.
    • You need to CONVERT \n to the actual newline character, \\ to a single backslash, \' to single quote, \" to double quote, and backslash followed by a delimiter to a delimiter.
    • The easiest way to test for these strings is to create a text file, and read in a line at a time.

      Here's sample code for how to do this.

      using namespace std ;
      int main()
      {
         string line ;
         while ( getline( cin, line ) )
           {
              // split line based on some delimiter, then print out
              // each token on a separate line, surrounded by slashes.
              // For example, if the line contained "cat, dog  , elk ",
              // print
              //   (1) /cat/
              //   (2) /dog/
              //   (3) /elk/
           }
      }
      
      That will give you some indication if your tokenizer is working.
    • Work on easy stuff first, then worry about complicated stuff later. You don't need to get EVERYTHING to work to submit (though certainly, you get more credit). If you worried about time, get the basics to work (such as splitting by spaces and commas, and handling \n).


    See the class syllabus for policies concerning email
    Last Modified: Wed Jun 5 10:38:37 EDT 2002
    left up down right home

    Web Accessibility

    fs/www/class/fall2002/cmsc311-0101/Proj/P0/proj0.faq2.html0100664000077300017440000002224007542515227020371 0ustar cmsc311 CMSC 311 - Project #0
    computer organization
    c m s c 311  
    f a l l   2 0 0 2  

    Project #0 FAQ

    • (9/19) Should I handle backslash followed by the delimiter?

      Yes, basically, it should not be considered as a delimiter. It should be considered a literal string. Thus, if comma is a delimiter, then \, is an escaped delimiter. You should not consider it as a delimiter, and get rid of the comma.

      When you get a token (using getLeftToken() or getRightToken()), you should take care of all backslashed (escaped) sequences. For all escaped sequences (except \n), you simply remove the backslash. For backslash followed by the character 'n' (which appears as \n, i.e. two separate characters), then replace that with a newline (a single character).

    • (9/19) Even more extra credit?

      Well, not exactly "more" (a little more perhaps). I noticed from the project description that getLeftToken() left trims the token. So, I am going to follow that. I think I did that to handle white space for space as delimiter.

      However, make getRightToken() find the rightmost delimiter and NOT trim the white space.

      Thus, if the string were "***cat***,***dog**", then the rightmost token would be "***dog**", and the rest of the string would be "***cat***" (without the comma).

    • (9/19) Extra credit? What's that?

      Yesterday, someone asked what we should do about escaped delimiters. Here is the part that's the usual stuff (i.e., not extra credit:

      • If a backslash followed by an n appears (i.e., two separate characters in the string), replace that by a single newline.
      • If \\, \', \" appear, replace that by \, ', and ", respectively.
      • If a \ followed by a delimiter appears, then replace that by the delimiter.
      You may assume that we will not use a delimiter such that a backslash followed by that delimiter creates one of: \\, \', \", or \n. Furthermore, no delimiter will begin with a backslash.

      You may assume backslashes do not appear for anything else. Thus, \a is not a valid substring, unless "a" is a delimiter.

      Extra credit

      Suppose you have :: as a delimiter (two colons). Then, you should be able to handle the following: \::: is considerd an escaped delimiter (thus not a true delimiter) followed by a colon. \:::: is treated as an escaped (non-true) delimiter followed by ::, which is a true delimiter.

      \\\\\\ is really three escaped backslashes and gets translated to a three real backslashes.

      Finally, findRealDelimiter, when looking for 1 or more blank spaces should return the index of the first non-quoted blank that appears after a string of non-blank characters. If such a blank does not appear, it returns -1. Thus, [***cat***], will return 6 (where * is being used to stand for blanks, to make it easier to see in this FAQ and brackets are used to show where the string starts and end, but is not part of the string itself).

      If you have "***'cat**'*", then findRealDelimiter() returns 10 since it skips the first three blanks, ignores the item in single quotes, and finds the space at the end.

      For any other delimiter, it just looks for the first non-quoted, non-escaped version of that delimiter. Only blanks used as delimiters have this weird feature.

    • Is space as a delimiter handled in any unusual way?

      Yes. Unfortunately, using space (blank, not TAB or newlines) as a delimiter has to be handled differently. Otherwise, it makes split() awkward to use. If " " is a delimiter, then getLeftToken() should skip over any blank spaces, then over any non-blank spaces, and stop at the next blank space, or the end of string, whichever comes first.

      Thus, if the string were "****cat***in*the*hat" where * represents a blank, then, the first token is "cat", and the rest of the string is "**in*the*hat". The tokenizer should skip the first four spaces, read over the non-blank "cat", then stop at the first blank after "cat". It removes that blank, and the rest of the string is "**in*the*hat". Again, blanks with double or single quotes are not to be considered delimiters. You can assume there will be no \* (i.e., backslash followed by a blank), though you can handle it if you want.

      Notice that it comes as "cat". If you didn't trim the token, then it would be "****cat".

      If the delimiter contains more than one blank (and nothing else) assume it's just one blank space.

      For any other delimiter, you simply look for the first "real" occurrence of the delimiter.

    • How does stripComment relate to the rest of the static methods?

      Actually, it doesn't. While the rest are useful for tokenizing, this one static method is used for later projects to remove comments from the assembly code.

      Therefore, you can assume that comments won't appear in methods dealing with tokenizing. (In any case, without knowing what the comment string is, you can't remove comments withother methods, so you have to make this assumption).

    • When should I replace the escaped characters?.

      getLeftToken() should get the first token (up to the first delimiter, should it exist), then replace the escaped characters in the token (replacing \' with ', \\ with \, \" with ", and \n with the newline). The rest of the string should remain unchanged (i.e. the substring after the token).

      So split() merely calls getLeftToken() over and over, until the string is empty. It doesn't need to do any substitutions of escaped characters.

    • Can I use any STL string functions?

      You are encouraged to do so. You may find there are many convenient methods available, that will help you avoid doing work. You're always encouraged to read through the set of methods available to you.

      Try this link. It's SGI (Silicon Graphics) reference to STL. It's not great, but it should do. There are various "find" and "replace" operations that might be useful.

    • Can I write helper functions?

      Do you need to ask? Of course, you can! One useful function to write is one that replaces escaped characters.


    See the class syllabus for policies concerning email
    Last Modified: Wed Jun 5 10:38:37 EDT 2002
    left up down right home

    Web Accessibility

    fs/www/class/fall2002/cmsc311-0101/Proj/P0/proj0.faq2.html~0100664000077300017440000002075407542510535020574 0ustar cmsc311 CMSC 311 - Project #0
    computer organization
    c m s c 311  
    f a l l   2 0 0 2  

    Project #0 FAQ

    • (9/19) Even more extra credit?

      Well, not exactly "more" (a little more perhaps). I noticed from the project description that getLeftToken() left trims the token. So, I am going to follow that. I think I did that to handle white space for space as delimiter.

      However, make getRightToken() find the rightmost delimiter and NOT trim the white space.

      Thus, if the string were "***cat***,***dog**", then the rightmost token would be "***dog**", and the rest of the string would be "***cat***" (without the comma).

    • (9/19) Extra credit? What's that?

      Yesterday, someone asked what we should do about escaped delimiters. Here is the part that's the usual stuff (i.e., not extra credit:

      • If a backslash followed by an n appears (i.e., two separate characters in the string), replace that by a single newline.
      • If \\, \', \" appear, replace that by \, ', and ", respectively.
      • If a \ followed by a delimiter appears, then replace that by the delimiter.
      You may assume that we will not use a delimiter such that a backslash followed by that delimiter creates one of: \\, \', \", or \n. Furthermore, no delimiter will begin with a backslash.

      You may assume backslashes do not appear for anything else. Thus, \a is not a valid substring, unless "a" is a delimiter.

      Extra credit

      Suppose you have :: as a delimiter (two colons). Then, you should be able to handle the following: \::: is considerd an escaped delimiter (thus not a true delimiter) followed by a colon. \:::: is treated as an escaped (non-true) delimiter followed by ::, which is a true delimiter.

      \\\\\\ is really three escaped backslashes and gets translated to a three real backslashes.

      Finally, findRealDelimiter, when looking for 1 or more blank spaces should return the index of the first non-quoted blank that appears after a string of non-blank characters. If such a blank does not appear, it returns -1. Thus, [***cat***], will return 6 (where * is being used to stand for blanks, to make it easier to see in this FAQ and brackets are used to show where the string starts and end, but is not part of the string itself).

      If you have "***'cat**'*", then findRealDelimiter() returns 10 since it skips the first three blanks, ignores the item in single quotes, and finds the space at the end.

      For any other delimiter, it just looks for the first non-quoted, non-escaped version of that delimiter. Only blanks used as delimiters have this weird feature.

    • Is space as a delimiter handled in any unusual way?

      Yes. Unfortunately, using space (blank, not TAB or newlines) as a delimiter has to be handled differently. Otherwise, it makes split() awkward to use. If " " is a delimiter, then getLeftToken() should skip over any blank spaces, then over any non-blank spaces, and stop at the next blank space, or the end of string, whichever comes first.

      Thus, if the string were "****cat***in*the*hat" where * represents a blank, then, the first token is "cat", and the rest of the string is "**in*the*hat". The tokenizer should skip the first four spaces, read over the non-blank "cat", then stop at the first blank after "cat". It removes that blank, and the rest of the string is "**in*the*hat". Again, blanks with double or single quotes are not to be considered delimiters. You can assume there will be no \* (i.e., backslash followed by a blank), though you can handle it if you want.

      Notice that it comes as "cat". If you didn't trim the token, then it would be "****cat".

      If the delimiter contains more than one blank (and nothing else) assume it's just one blank space.

      For any other delimiter, you simply look for the first "real" occurrence of the delimiter.

    • How does stripComment relate to the rest of the static methods?

      Actually, it doesn't. While the rest are useful for tokenizing, this one static method is used for later projects to remove comments from the assembly code.

      Therefore, you can assume that comments won't appear in methods dealing with tokenizing. (In any case, without knowing what the comment string is, you can't remove comments withother methods, so you have to make this assumption).

    • When should I replace the escaped characters?.

      getLeftToken() should get the first token (up to the first delimiter, should it exist), then replace the escaped characters in the token (replacing \' with ', \\ with \, \" with ", and \n with the newline). The rest of the string should remain unchanged (i.e. the substring after the token).

      So split() merely calls getLeftToken() over and over, until the string is empty. It doesn't need to do any substitutions of escaped characters.

    • Can I use any STL string functions?

      You are encouraged to do so. You may find there are many convenient methods available, that will help you avoid doing work. You're always encouraged to read through the set of methods available to you.

      Try this link. It's SGI (Silicon Graphics) reference to STL. It's not great, but it should do. There are various "find" and "replace" operations that might be useful.

    • Can I write helper functions?

      Do you need to ask? Of course, you can! One useful function to write is one that replaces escaped characters.


    See the class syllabus for policies concerning email
    Last Modified: Wed Jun 5 10:38:37 EDT 2002
    left up down right home

    Web Accessibility

    fs/www/class/fall2002/cmsc311-0101/Proj/P1/0042775000077300017440000000000007554661413015631 5ustar cmsc311fs/www/class/fall2002/cmsc311-0101/Proj/P1/proj1.html0100664000077300017440000001343107547646571017561 0ustar cmsc311 CMSC 311 - Project #1
    computer organization
    c m s c 311  
    f a l l   2 0 0 2  

    Project #1

    Due Sunday, Oct. 13, 11:59 PM (just before midnight)
    Late Due Date Sunday, Oct. 20, 11:59 PM (just before midnight)

    Posted: September 27, 2002

    Addendum

    Read this section frequently to check for updates/corrections/clarifications to the projects. There will be some, because the project description is rather rough right now. However, the methods should be more or less correct.

    Purpose

    The goals of the project are:

    • Learn how to write functions to convert from one base to another.
    • Learn how to tell if a machine is big or little endian.
    • Write a Register class.
    • Read from a binary file.

    Academic Integrity Statement

    Please note that *all* programming projects in this course (including this one) are to be done independently or with the assistance of the instructional staff of this course only, unless otherwise specified IN PRINT by official webpages.

    Please review the policies outlined on the class syllabus concerning the use of class computer accounts and concerning the University's Code of Academic Integrity. The instructors of this course will review the programs submitted by students for potential violations of the Code of Academic Integrity and if it is believed that a violation has occurred it will be referred to the Office of Judicial Programs and the Student Honor Council.

    Hardcoding is considered a violation of academic integrity

    Collaboration Policy

    This project should be done invidividually. You may discuss ideas, but not exchange or view each other's code.

    Specifications

    You will be given a file called Convert.h and Register.h. The specifications are in the following link.

    Convert Specification

    Register Specification

    (10/5 NOW READY)

    Implement the methods. You may add helper methods, if you want.

    Assumptions

    Restrictions

    Restrictions.

    • You should write Convert in C++.
    • You should write Register in C++ or Java.

    You may use STL or any other features you want, provided it compiles and runs under either cxx or g++. A driver will be provided, so you can submit.

    How to Submit

    A driver will be provided soon to partly test your code. Details will be provided soon.

    See the class syllabus for policies concerning email
    Last Modified: Wed Jun 5 10:38:37 EDT 2002
    left up down right home

    Web Accessibility

    fs/www/class/fall2002/cmsc311-0101/Proj/P1/proj1.reg_java.html0100664000077300017440000003341707547646250021336 0ustar cmsc311 CMSC 311 - Project #1
    computer organization
    c m s c 311  
    f a l l   2 0 0 2  

    Purpose

    The goal of this project is to implement a representation of a register. This is a software emulation of a register. The register supports the following information:

    • different number of bits (even though registers typically have 16, 32 or 64 bits).
    • bitwise operations such as &, |, ^, etc.
    • bitshifting operations
    • addition and subtraction

    Location of File

    Go to ~chf11001/Proj/P1/, and there should be Register.h and RegisterInterface.java for C++ and Java respectively. Create Register.cpp or finish Register.java.

    C++ Specifications

    Bit Specifications (Java)

    Bit

    Private Instance Variables

    Represents a single bit.

    Variable Description
    boolean value Represents a single bit. When value is true, the bit is 1, otherwise it's 0.

    Public Methods

    Bit() ;
    Default constructor. Sets value to false.
    int getValue() const ;
    Returns 0 if value is false, and 1 if value is true.
    Bit set() ;
    Sets value to true. Return this .
    Bit clear() ;
    Sets value to false. Return this .
    Bit flip() ;
    Sets value to its negated value (i.e., flips true to false and vice versa). Return this .


    RegisterInterface Specifications (Java)

    Register

    Private Instance Variables

    Variable Description
    ??? bit Pick a reasonably type to store an array of Bit objects (as defined above). The ??? means you get to pick the type for storing an array of bits. (There is a container class that begins with Array...look it up in the Java API at Sun's website).

    Public Methods

    Register( int numBits = 32 ) ;
    Default constructor. Creates a register with numBits bits. If the number of bits is less than 1, then set numBits to 32 bits. The user can pick an arbitrary size register.
    Bit getBitAt( int index ) ;
    Return the bit (by reference) at index. Assume user will not go out-of-bounds. If you want to throw an exception, then throw ArrayIndexOutOfBoundsException (this is already a built-in exception).

    String getSignedDecimal() ;
    Return the value in the register as a String. Treat the value as signed (thus, it may have a leading minus sign). Use as few digits as needed (minimum of 1).
    String getUnsignedDecimal() ;
    Return the value in the register as a String. Treat the value as unsigned. Use as few digits as needed.
    String getHex() ;
    Return the value in the register as a String. Treat the value as unsigned. The string should represent the value written in hexadecimal. The result should have a 0x (zero followed by x) prepended (i.e., in front), and use lowercase letters for a, b, c, d, e, f. Use as few hex digits as needed (minimum 1). For example, you might have 0xcafe001 as a result.
    Register signExtend( int totalBits ) ;
    Create a copy of this register, but with totalBits bits. The register should be sign-extended if totalBits > numBits. If totalBits <= numBits, return a copy of the register (which has numBits bits).
    Register zeroExtend( int totalBits ) ;
    Create a copy of this register, but with totalBits bits. The register should be zero-extended if totalBits > numBits (i.e., the high bits are all 0's, but the low bits are copied). If totalBits <= numBits, return a copy of the register (which has numBits bits).
    ??? bitwiseNot() ;
    Bitwise negation. Flip all the bits. Figure out the appropriate return value by determining how the C version of bitwise negation modifies variables.
    ??? bitwiseAnd( Register other ) ;
    ??? bitwiseOr( Register other ) ;
    ??? bitwiseXor( Register other ) ;
    Bitwise AND, bitwise OR, and bitwise XOR.

    You should determine what return type is appropriate for these bitwise operations.

    ??? bitwiseAndSelf( Register other ) ;
    ??? bitwiseOrSelf( Register other ) ;
    ??? bitwiseXorSelf( Register other ) ;
    Bitwise AND, bitwise OR, and bitwise XOR.

    You should determine what return type is appropriate for these bitwise operations, by basing it on C's versions of these operators: i.e., &=, |=, ^=.

    ??? addSigned( Register other ) ;
    Do a signed addition. If the size of other register is smaller than this register's size, then create a SIGN extended copy of the other register so that the copy has as many bits as the this register.

    If other has more bits than this, and this has N bits, then only use the lowest N bits of other to do the addition.

    Perform signed addition while ignoring overflow. The result should have numBits bits.

    This addition should "behave" like addition of int variables, when it comes to determining what (or what NOT to) modify.

    Thus, you should determine what return type is appropriate for addition.

    ??? addSignedSelf( Register & other ) ;
    Do a signed addition that behaves like operator+=. Again, ignore overflow.
    ??? addUnsigned( Register & other ) ;
    Do an unsigned addition. If the size of other register is smaller than this register's size, then create a ZERO extended copy of the other register so that the copy has as many bits as the this register.

    If other has more bits than this, and this has N bits, then only use the lowest N bits of other to do the addition.

    Perform unsigned addition while ignoring overflow. The result should have numBits bits.

    This addition should "behave" like addition of int variables, when it comes to determining what (or what NOT to) modify.

    Thus, you should determine what return type is appropriate for addition.

    ??? addUnsignedSelf( Register other ) ;
    Do an unsigned addition that behaves like operator+=. Again, ignore overflow.
    ??? minus( Register other ) ;
    Do a signed subtraction. Hint: think two's complement. Ignore overflow.
    ??? minusSelf( Register other ) ;
    Do a signed subtraction that behaves like operator+=. Hint: think two's complement. Again, ignore overflow.
    ??? addUnsigned( Register other ) ;
    Do an unsigned addition. If the size of other register is smaller than this register's size, then create a ZERO extended copy of the other register so that the copy has as many bits as the this register.

    If other has more bits than this, and this has N bits, then only use the lowest N bits of other to do the addition.

    Perform unsigned addition while ignoring overflow. The result should have numBits bits.

    This addition should "behave" like addition of int variables, when it comes to determining what (or what NOT to) modify.

    Thus, you should determine what return type is appropriate for addition.

    ??? negate() ;
    Negates the value in the register treating the binary value as signed. Hint: how does this differ (if at all) from bitwise negation?

    Determine an appropriate return type by thinking about how unary minus affects int variables.


    See the class syllabus for policies concerning email
    Last Modified: Fri Sep 27 19:41:52 EDT 2002
    left up down right home

    Web Accessibility

    fs/www/class/fall2002/cmsc311-0101/Proj/P1/proj1.conv.html0100664000077300017440000002727607546162227020527 0ustar cmsc311 CMSC 311 - Project #1
    computer organization
    c m s c 311  
    f a l l   2 0 0 2  

    Purpose

    The goal of this project is to have you implement code to

    • convert numbers, represented as strings, from one base to another,
    • convert strings from binary to octal and hexadecimal and back
    • convert int values to strings that represent signed magnitude, one's complement, two's complement, excess/bias
    • determine if a machine is big or little endian
    • determine if an int value is big or little endian

    Location of File

    Go to ~chf11001/Proj/P1/, and there should be Convert.h. Create Convert.cpp.

    Convert Specifications

    Convert

    Static Public Methods

    static std::string baseTenToBaseK( const std::string & num, int dstBase ) ;
    Given parameter num, which is a C++ string representing a base ten number (e.g., "23" ), convert this to another base (e.g., base 16) as a string (e.g. "17"), using as few digits as possible in the resulting string (i.e., don't write "0017").

    You may assume:

    • dstBase is between 2 and 36
    • num, when translated to base 10, can fit in an unsigned int of 32 bits.
    • num is unsigned (no negative signs).

    Use lowercase letters "a" to stand for 10, "b" for 11, ..., and "z" to stand for 35.

    You should convert the string to a base 10 unsigned int value, then divide by k, convert the remainder to a character, and create a string by concatenating onto an empty string.

    static baseKToBaseTen( const std::string & num, int srcBase ) ;
    Given parameter num, which is a C++ string representing a number (e.g., "1111" ), written in some base k (e.g., base 2), convert this to a string written in base 10 (e.g., "15"), using as few digits as possible in the resulting string (i.e., don't write "0015").

    You may assume:

    • srcBase is between 2 and 36
    • num, when translated to base 10, can fit in an unsigned int of 32 bits.
    • num is unsigned (no negative signs).
    • num is valid (but may contain leading 0's).
    • "a" stands for 11, "b" for 12, ..., "z" for 35. However, they may be written in uppercase. (Hint: convert to lowercase using transform).

    To convert, you need to convert each digit (which is a character in the string) to a number, and multiply that number by some power of k, and sum, as shown in class. The resulting value should be converted to a string. Hint: use ostringstream by #include <sstream>.

    static std::string srcToDstBase( const std::string & num, int srcBase, int dstBase ) ;
    Given parameter str, which represents a number in srcBase, convert that to a number in dstBase. Assume both bases are between 2 and 36. The rules that affect the srcBase are the same as in baseKtoBaseTen. destBase should produce a string that uses only lowercase letters.

    You can assume:

    • srcBase and dstBase are between 2 and 36 inclusive.
    • num may contain upper and lowercase letters and digits.
    • Your result should contain digits and lowercase letters, using as few characters as needed to represent the correct answer.
    • The value in srcBase once converted to base 10, can fit in an unsigned 32 bit value.
    • The values are unsigned.
    Hint: use the previous two static methods to help out.
    static std::string octalToBin( const std::string & num ) ;
    static std::string hexToBin( const std::string & num ) ;
    static std::string binToOctal( const std::string & num ) ;
    static std::string binToHex( const std::string & num ) ;
    You should convert these strings which represent values in base 2, 8, and 16, efficiently to one another. These strings can be arbitrarily long (i.e., they may not fit in 32 bit int values). Use the "quick" technique in class.

    You can assume these are unsigned values.

    Use lowercase to represent "a"..."f" (values 11 through 15).

    static std::bool isBigEndian() ;
    static std::bool isLittleEndian() ;
    isBigEndian() returns true if the machine the code is run on is big endian, and false otherwise (i.e., it's little endian.

    isLittleEndian() returns true if the machine the code is run on is little endian, and false otherwise (i.e., it's big endian.

    This function should return different answers on the OIT cluster and the Sun machines on WAM. They have different endianness.

    static int endian( unsigned int val, std:: string num ) ;
    Assume num represents an unsigned base ten value written as a string. You will be given an unsigned int value. This value is really four consecutive bytes in memory. Determine if those four bytes represent num in big endian (return 1), little endian (return 0), or neither (return -1).

    The idea is this. Suppose someone put 4 bytes into an unsigned int, but did not know how your machine endian was stored. They also sent a string indicating the number they meant to store ("num"), and based on that, you can determine what endian-ness the value is stored.

    Hint: determine the number you have, then reverse the bytes, and determine that number. See if either one match the value. You know which endian-ness your machine is, so you should be able to figure it out.

    Another trick is to take each of the four byte, cast it to an int, and shift the number of bits and sum. (Puzzling clue, I realize).

    static std::string toOnesComp( int num, int numBits ) ;
    static std::string toTwosComp( int num, int numBits ) ;
    static std::string toSignedMag( int num, int numBits ) ;
    static std::string toExcess( int num, int bias, int numBits ) ;
    You are given a signed value called num. Convert num to a string with numBits characters, if possible. If the number of bits is too small, then return the string "OVERFLOW".

    For example, if you were given num as -7, and written as one's complement, given 4 bits, your answer would be "1000". If it were 5 bits, you would return: "11000". If it were signed magnitude with 4 bits, you would return "1111". If you were asked to write -8 in one's complement, with 4 bits, you would return "OVERFLOW".

    static int fromOnesComp( const std::string & num ) ;
    static int fromTwosComp( const std::string & num ) ;
    static int fromSignedMag( const std::string & num ) ;
    static int fromExcess( const std::string & num, int bias ) ;
    You're given a binary value written as a string, written in one of four representations. Convert that to a signed value. You may assume the value can be stored in a 32 bit signed int.
    static std::string toIEEE754( std::string num ) ;
    This is extra credit. Assume you have a string which may or may not have a leading - sign. This string represents a number written in decimal, e.g., "3.625". You should return a 32 character string representing the IEEE 754 single precision value.

    You can assume the string does not generate repeated values, nor does it produce infinity or NaN.

    The string should have the most significant bit (i.e., the sign bit) to the far left, and the least significant bit to the far right, and be 32 characters long.

    The class Register should be ready soon.


    See the class syllabus for policies concerning email
    Last Modified: Fri Sep 27 19:41:52 EDT 2002
    left up down right home

    Web Accessibility

    fs/www/class/fall2002/cmsc311-0101/Proj/P1/proj1.reg.html0100664000077300017440000003625207547646033020334 0ustar cmsc311 CMSC 311 - Project #1
    computer organization
    c m s c 311  
    f a l l   2 0 0 2  

    Purpose

    The goal of this project is to implement a representation of a register. This is a software emulation of a register. The register supports the following information:

    • different number of bits (even though registers typically have 16, 32 or 64 bits).
    • bitwise operations such as &, |, ^, etc.
    • bitshifting operations
    • addition and subtraction

    Location of File

    Go to ~chf11001/Proj/P1/, and there should be Register.h and RegisterInterface.java for C++ and Java respectively. Create Register.cpp or finish Register.java.

    Java Specifications

    Bit Specifications (C++)

    Bit

    Private Instance Variables

    Represents a single bit.

    Variable Description
    bool value Represents a single bit. When value is true, the bit is 1, otherwise it's 0.

    Public Methods

    Bit() ;
    Default constructor. Sets value to false.
    int getValue() const ;
    Returns 0 if value is false, and 1 if value is true.
    Bit & set() ;
    Sets value to true. Return * this .
    Bit & clear() ;
    Sets value to false. Return * this .
    Bit & flip() ;
    Sets value to its negated value (i.e., flips true to false and vice versa). Return * this .
    Bit & operator=( int valueIn ) ;
    Sets value to false if valueIn is 0, otherwise set it to true.
    Bit & operator=( bool valueIn ) ;
    Sets value to valueIn.


    If there is a need to define the copy constructor, assignment operator, and destructor, in order to guarantee the correct behavior of this class, you may do so.

    Register Specifications (C++)

    Register

    Private Instance Variables

    Variable Description
    ??? bit Pick a reasonably type to store an array of Bit objects (as defined above). Hint: don't use an array of bits (although you can). The ??? means you get to pick the type for storing an array of bits.
    int _size Stores the number of bits, but only if needed (for example, if you choose an approriate class for the array of Bit, then that class may already keep track of the size), making this instance variable unnecessary.

    Public Methods

    Register( int numBits = 32 ) ;
    Default constructor. Creates a register with numBits bits. If the number of bits is less than 1, then set numBits to 32 bits. The user can pick an arbitrary size register.
    Bit & operator[]( int index ) ;
    Return the bit (by reference) at index. Assume user will not go out-of-bounds. If you want to throw an exception, then name the exception class exactly ArrayIndexOutOfBoundsException (read up on C++ exceptions if you wish). Note: this is the same name as the Java exception thrown.

    const Bit & operator[]( int index ) const ;
    Return the bit (by reference) at index. (Same thing as previous, but it will return by const reference). Can also throw exception as above.
    string getSignedDecimal() const ;
    Return the value in the register as a string. Treat the value as signed (thus, it may have a leading minus sign). Use as few digits as needed (minimum of 1).
    string getUnsignedDecimal() const ;
    Return the value in the register as a string. Treat the value as unsigned. Use as few digits as needed.
    string getHex() const ;
    Return the value in the register as a string. Treat the value as unsigned. The string should represent the value written in hexadecimal. The result should have a 0x (zero followed by x) prepended (i.e., in front), and use lowercase letters for a, b, c, d, e, f. Use as few hex digits as needed (minimum 1). For example, you might have 0xcafe001 as a result.
    Register signExtend( int totalBits ) const ;
    Create a copy of this register, but with totalBits bits. The register should be sign-extended if totalBits > numBits. If totalBits <= numBits, return a copy of the register (which has numBits bits).
    Register zeroExtend( int totalBits ) const ;
    Create a copy of this register, but with totalBits bits. The register should be zero-extended if totalBits > numBits (i.e., the high bits are all 0's, but the low bits are copied). If totalBits <= numBits, return a copy of the register (which has numBits bits).
    ??? operator~() ;
    Bitwise negation. Flip all the bits. Figure out the appropriate return value by determining how the C version of bitwise negation modifies variables.
    ??? operator&( const Register & other ) ;
    ??? operator|( const Register & other ) ;
    ??? operator^( const Register & other ) ;
    Bitwise AND, bitwise OR, and bitwise XOR.

    You should determine what return type is appropriate for these bitwise operations.

    ??? operator&=( const Register & other ) ;
    ??? operator|=( const Register & other ) ;
    ??? operator^=( const Register & other ) ;
    Bitwise AND, bitwise OR, and bitwise XOR.

    You should determine what return type is appropriate for these bitwise operations, by basing it on C's versions of these operators: i.e., &=, |=, ^=

    ??? operator+( const Register & other ) const ;
    Do a signed addition. If the size of other register is smaller than this register's size, then create a SIGN extended copy of the other register so that the copy has as many bits as the this register.

    If other has more bits than this, and this has N bits, then only use the lowest N bits of other to do the addition.

    Perform signed addition while ignoring overflow. The result should have numBits bits.

    This addition should "behave" like addition of int variables, when it comes to determining what (or what NOT to) modify.

    Thus, you should determine what return type is appropriate for addition.

    ??? operator+=( const Register & other ) ;
    Do a signed addition that behaves like operator+=. Again, ignore overflow.
    ??? addUnsigned( const Register & other ) const ;
    Do an unsigned addition. If the size of other register is smaller than this register's size, then create a ZERO extended copy of the other register so that the copy has as many bits as the this register.

    If other has more bits than this, and this has N bits, then only use the lowest N bits of other to do the addition.

    Perform unsigned addition while ignoring overflow. The result should have numBits bits.

    This addition should "behave" like addition of int variables, when it comes to determining what (or what NOT to) modify.

    Thus, you should determine what return type is appropriate for addition.

    ??? addUnsignedSelf( const Register & other ) ;
    Do an unsigned addition that behaves like operator+=. Again, ignore overflow.
    ??? operator-( const Register & other ) const ;
    Do a signed subtraction. Hint: think two's complement. Ignore overflow.
    ??? operator-=( const Register & other ) ;
    Do a signed subtraction that behaves like operator+=. Hint: think two's complement. Again, ignore overflow.
    ??? addUnsigned( const Register & other ) const ;
    Do an unsigned addition. If the size of other register is smaller than this register's size, then create a ZERO extended copy of the other register so that the copy has as many bits as the this register.

    If other has more bits than this, and this has N bits, then only use the lowest N bits of other to do the addition.

    Perform unsigned addition while ignoring overflow. The result should have numBits bits.

    This addition should "behave" like addition of int variables, when it comes to determining what (or what NOT to) modify.

    Thus, you should determine what return type is appropriate for addition.

    ??? operator-() ;
    Overloaded unary minus operator. Negates the value in the register treating the binary value as signed. Hint: how does this differ (if at all) from bitwise negation?

    Determine an appropriate return type by thinking about how unary minus affects int variables.


    See the class syllabus for policies concerning email
    Last Modified: Fri Sep 27 19:41:52 EDT 2002
    left up down right home

    Web Accessibility

    fs/www/class/fall2002/cmsc311-0101/Proj/P3/0042770000077300017440000000000007571151475015627 5ustar cmsc311fs/www/class/fall2002/cmsc311-0101/Proj/P2/0042775000077300017440000000000007575721407015635 5ustar cmsc311fs/www/class/fall2002/cmsc311-0101/Proj/P2/proj2.html0100664000077300017440000004333107575721407017556 0ustar cmsc311 CMSC 311 - Project #2
    computer organization
    c m s c 311  
    f a l l   2 0 0 2  

    Project #1

    Due Friday, Dec. 13, 11:59 PM (just before midnight)
    Late Due Date Sunday, Dec. 15, 11:59 PM (just before midnight)

    Posted: November 27, 2002

    Purpose

    The goals of the project are:

    • Learn how to read/write a "binary file" in C/C++ (this can be done in Java, but if you're using Java, you have to figure out how to do this).
    • To convert a binary MIPS instruction to a string.
    • To convert a MIPS instruction given as a string to an unsigned int.

    Academic Integrity Statement

    Please note that *all* programming projects in this course (including this one) are to be done independently or with the assistance of the instructional staff of this course only, unless otherwise specified IN PRINT by official webpages.

    Please review the policies outlined on the class syllabus concerning the use of class computer accounts and concerning the University's Code of Academic Integrity. The instructors of this course will review the programs submitted by students for potential violations of the Code of Academic Integrity and if it is believed that a violation has occurred it will be referred to the Office of Judicial Programs and the Student Honor Council.

    Hardcoding is considered a violation of academic integrity

    Collaboration Policy

    This project should be done invidividually. You may discuss ideas, but not exchange or view each other's code.

    Specifications

    You will be given a file called Translate.h and Load.h. The specifications are in the following link.

    Translate Specification

    Load Specification

    Implement the methods. You may add helper methods, if you want.

    Format of instructions

    Note: || means concatentation
    Note: 016 means 16 zeroes.
    Note: PC refers to the program counter
    Note:

    • rs stored at B25-21
    • rt stored at B20-16
    • rd stored at B15-11

    Note:

    • immed values for addi are written in signed base 10, but stored in 16-bit 2's complement.
    • immed values for logical operations (andi, xori, etc.) are written in unsigned base 10, and stored in unsigned binary.
    • Labels for jump instructions will be written in hexadecimal with a leading 0x followed by 8 hex digits. Use the low 26 bits, and store there.
    • Labels for branch instructions will be written in signed base 10 and stored in 16-bit 2's complement.

    Note: Bits are numbered so that B0 is the least signficant bit and B31 is the most significant bit.

    Note: Minimum instructions needed to pass primary: add, addi, beq, j, jal, or, ori. You need to translate to and from.

    Command Explanation
    add $rd, $rs, $rt
    • Reg[ d ] = Reg[ s ] + Reg[ t ]
    • R-type instruction
    • B31-26 = 000000 (SPECIAL)
    • B10-6 = 000000
    • B5-0 = 100000 (ADD)
    addi $rt, $rs, immed
    • Reg[ t ] = Reg[ s ] + (immed15)16 || immed15-0
    • I-type instruction
    • B31-26 = 001000
    • Immediate value is sign extended
    sub $rd, $rs, $rt
    • Reg[ d ] = Reg[ s ] - Reg[ t ]
    • R-type instruction
    • B31-26 = 000000 (SPECIAL)
    • B10-6 = 000000
    • B5-0 = 100010 (SUB)
    and $rd, $rs, $rt
    • Reg[ d ] = Reg[ s ] & Reg[ t ]
    • Bitwise AND
    • R-type instruction
    • B31-26 = 000000 (SPECIAL)
    • B10-6 = 000000
    • B5-0 = 100100 (AND)
    andi $rt, $rs, immed
    • Reg[ t ] = Reg[ s ] & 016 || immed15-0
    • I-type instruction
    • B31-26 = 001100
    • Immediate value is zero extended
    or $rd, $rs, $rt
    • Reg[ d ] = Reg[ s ] | Reg[ t ]
    • Bitwise OR
    • R-type instruction
    • B31-26 = 000000 (SPECIAL)
    • B10-6 = 000000
    • B5-0 = 100101 (OR)
    ori $rt, $rs, immed
    • Reg[ t ] = Reg[ s ] | 016 || immed15-0
    • I-type instruction
    • B31-26 = 001101
    • Immediate value is zero extended
    xor $rd, $rs, $rt
    • Reg[ d ] = Reg[ s ] ^ Reg[ t ]
    • Bitwise XOR
    • R-type instruction
    • B31-26 = 000000 (SPECIAL)
    • B10-6 = 000000
    • B5-0 = 100110 (XOR)
    xori $rt, $rs, immed
    • Reg[ t ] = Reg[ s ] ^ 016 || immed15-0
    • I-type instruction
    • B31-26 = 001110
    • Immediate value is zero extended
    beq $rs, $rt, LABEL
    • if ( Reg[ s ] == Reg[ t ] ) jump to LABEL else go to next instruction
    • I-type instruction
    • B31-26 = 000100
    • offset is B15-0
    • Jump to PC + [ (offset15)14 || offset || 02 ]
    • i.e., the offset is shifted to the left by 2, then sign extended.
    bne $rs, $rt, LABEL
    • if ( Reg[ s ] != Reg[ t ] ) jump to LABEL else go to next instruction
    • I-type instruction
    • B31-26 = 000101
    • offset is B15-0
    • Jump to PC + [ (offset15)14 || offset || 02 ]
    • i.e., the offset is shifted to the left by 2, then sign extended.
    slt $rd, $rs, $rt
    • if ( Reg[ s ] < Reg[ t ] ) Reg[ d ] = 0311 else Reg[ d ] = 032
    • R-type instruction
    • B31-26 = 000000 (SPECIAL)
    • B10-6 = 000000
    • B5-0 = 101010 (SLT)
    slti $rt, $rs, immed
    • if ( Reg[ s ] < (immed15)16 || immed15-0) Reg[ d ] = 0311 else Reg[ d ] = 032
    • I-type instruction
    • B31-26 = 001010
    jr $rs
    • R-type instruction (sort of)
    • B31-26 = 000000 (SPECIAL)
    • B20-6 = 000 0000 0000 0000
    • B5-0 = 000100 (JR)
    j LABEL
    • PC <- PC31-28 || immed || 02
    • immed is 26 bit value
    • J-type instruction
    • B31-26 = 000010
    jal LABEL
    • PC <- PC31-28 || immed || 02
    • immed is 26 bit value
    • Reg[ 31 ] <- PC + 4 (In the real MIPS, it should be PC + 8, but that's mostly because of pipelining--we use the simpler PC + 4, which is the next instruction).
    • J-type instruction
    • B31-26 = 000011
    lw $rt, offset($rs)
    • I-type instruction
    • offset is sign-extended to 32 bits, and added to Reg[ s ] to produce address. The content of that address (which must be word-aligned), is placed in Reg[ t ]
    • B31-26 = 100011
    • B15-0 is the offset
    lbu $rt, offset($rs)
    • I-type instruction
    • offset is sign-extended to 32 bits, and added to Reg[ s ] to produce address. The content of that address (which does NOT have to be word-aligned), is placed in Reg[ d ]
    • B31-26 = 100100 (CORRECTED)
    • B15-0 is the offset
    sw $rt, offset($rs)
    • I-type instruction
    • offset is sign-extended to 32 bits, and added to Reg[ s ] to produce address. The content of Reg[ t ] is saved at that address (which must be word-aligned)
    • B31-26 = 101011
    • B15-0 is the offset
    sb $rt, offset($rs)
    • I-type instruction
    • offset is sign-extended to 32 bits, and added to Reg[ s ] to produce address. The content of Reg[ t ] is saved at that address (which does NOT have to be word-aligned)
    • B31-26 = 101000
    • B15-0 is the offset
    lui $rt, immed
    • I-type instruction
    • Reg[ t ] = immed || 016
    • B31-26 = 001111
    • B25-21 = 00000 (normally where rs goes, but leave it all zeroes)
    bgtz $rs, LABEL
    • I-type instruction
    • B31-26 = 000111
    • B20-16 = 00000
    • Let offset = B15-0
    • PC-relative addressing. Let target = (offset15)14 || offset || 02
    • PC <- PC + target
    bgez $rs, LABEL
    • I-type instruction
    • B31-26 = 000001 (REGIMM)
    • B20-16 = 00001 (BGEZ)
    • Let offset = B15-0
    • PC-relative addressing. Let target = (offset15)14 || offset || 02
    • PC <- PC + target
    bltz $rs, LABEL
    • I-type instruction
    • B31-26 = 000001 (REGIMM)
    • B20-16 = 00000 (BLTZ)
    • Let offset = B15-0
    • PC-relative addressing. Let target = (offset15)14 || offset || 02
    • PC <- PC + target
    blez $rd, LABEL
    • I-type instruction
    • B31-26 = 000110
    • B20-16 = 00000
    • Let offset = B15-0
    • PC-relative addressing. Let target = (offset15)14 || offset || 02
    • PC <- PC + target
    sll $rt, $rs, shift_amt
    • R-type instruction
    • Shift left logical
    • B10-6 is the shift amount (between 0-31)
    • B31-26 = 000000 (SPECIAL)
    • B5-0 = 000000 (SLL)
    • Shift a copy of Reg[ t ] left by shift_amt bits, inserting zeroes into the low order bits.
    srl $rd, $rt, shift_amt
    • R-type instruction
    • Shift right logical
    • B10-6 is the shift amount (between 0-31)
    • B31-26 = 000000 (SPECIAL)
    • B5-0 = 000010 (SRL)
    • Shift a copy of Reg[ t ] right by shift_amt bits, inserting zeroes into the high order bits.
    sllv $rd, $rs, $rt
    (SPRING 2003)
    • R-type instruction
    • Shift left logical variable
    • B10-6 = 00000
    • B31-26 = 000000 (SPECIAL)
    • B5-0 = 000100 (SLLV)
    • Shift a copy of Reg[ t ] left by the amount stored in low 5 bits of Reg[ s ], placing shifted result in Reg[ d ].
    srlv $rd, $rt
    (SPRING 2003)
    • R-type instruction
    • Shift right logical variable
    • B10-6 = 00000
    • B31-26 = 000000 (SPECIAL)
    • B5-0 = 000110 (SRLV)
    • Shift a copy of Reg[ t ] right by the amount stored in low 5 bits of Reg[ s ], placing shifted result in Reg[ d ].

    See the class syllabus for policies concerning email
    Last Modified: Wed Jun 5 10:38:37 EDT 2002
    left up down right home

    Web Accessibility

    fs/www/class/fall2002/cmsc311-0101/Proj/P2/proj2.load.html0100664000077300017440000002212507573774551020500 0ustar cmsc311 CMSC 311 - Project #2
    computer organization
    c m s c 311  
    f a l l   2 0 0 2  

    Purpose

    The purpose is to load a series of unsigned int (32 bits) from a file. The file will have a 32 bit value (0xdabedabe). As you read it in, it may have been stored in the same endian-ness as your machine or a different endian-ness. (Imagine you have downloaded this file from somewhere on the web, but don't know what endian-ness the machine was).

    If you read in an unsigned int equal to 0xdabedabe, then this must mean the file is the same as yours. If it's some other value, then it must be a different endian-ness.

    Public Methods

    static vector<unsigned int> loadValues( const string & fileName ) ;
    If the file exists (in the current directory), read in the first unsigned int, and determine the endian-ness. If this is the same as your machine's endian-ness, read the rest of the values normally. Thus, if there are N * 4 bytes in the file, you will read in (N - 1) unsigned int values (after the initial 4 byte header with 0xdabedabe), and store them in a vector of unsigned ints.

    If the endian-ness is not the same as your machine, then you still read in the N - 1 values, but then afterwards, you must convert the values so they are the same endian-ness as your machine. (Thus, for each unsigned int, you must swap bytes 0 and 3 and bytes 1 and 2, assuming byte 0 is the least significant byte, and byte 3 is the most significant byte).

    If the file does not exist, then just return an empty vector. You can assume that there is at least 8 bytes in the file if it does exist (i.e., it has the 4 byte header plus at least one 4 byte integer).

    static bool writeValues( const string & fileName, vector<unsigned int> values, bool isBigEndian ) ;
    In this version, you will write out the values given the endian-ness. Add the header as needed (0xdabedabe). This may involve swapping bytes. If you read in the file, then call this function with the same endian-ness as the file, then print out the file, you should get the equivalent file (you can run "diff" to see if they result in the same binary).

    If the file exists, then return false, and don't do anything.

    Location of File

    Go to ~chf11001/Proj/P2/, and there should be Load.h. Those implementing it in Java should make the appropriate conversions.

    Writing Binary Files

    In C, to write to a file requires the unistd.h library. You need to open a file to write.
     int fd ; // fd is called a file descriptor
     ssize_t w1, w2 ;
     char header1[ 512 ], header2[ 1024 ] ;
    
     // Opens a file to be written, but only if file does not already exist.
     if ( ( fd = open( "newfile", O_WRONLY|O_CREAT|O_EXCL, 0644 ) ) == -1 )
       {
          cout << "Error opening file" << endl ;
          return -1 ;
       }
    
      w1 = write( fd, header1, 512 ) ;
      w2 = write( fd, header1, 1024 ) ;
    
      // close the file
      close( fd ) ;
    
    The write function takes a file descriptor of an opened file, a pointer to some array (any type) or even just a plain structure or variable, and the number of bytes that will be written. The function returns an int-like value telling you how many bytes were actually written.

    To open a file for reading (in C),

     int fd ; // fd is called a file descriptor
     ssize_t n1, n2 ;
     char buf[ 512 ], buf2[ 1024 ] ;
    
     // Opens a file for read only
     if ( ( fd = open( "oldfile", O_RDONLY ) ) == -1 )
       {
          cout << "Error opening file" << endl ;
          return -1 ;
       }
    
      n1 = read( fd, buf1, 512 ) ;
      n2 = read( fd, buf2, 1024 ) ;
    
      // close the file
      close( fd ) ;
    
    Nelson Padua-Perez offers the C++ solution.

    Note: you should switch "Person" to unsigned int.

    #include <iostream.h>
    #include <stdlib.h>
    #include <fstream.h>
    
    struct Person
    {
       int id;
       float salary;
    };
    
    // write takes a char *, and the number of bytes
    void create_file(char *filename)
    {
       int x;
       Person p;
       
       ofstream out(filename, ios::out);
       if (!out)
       {
          cerr << "File opening failed!" << endl;
          exit(1);
       } 
    
       for (x = 1; x <= 5; x++)
       {
          p.id = x;
          p.salary = x * 100;
          out.write(reinterpret_cast<const char *>(&p), sizeof(Person));
       }
    }
    
    // read takes a char * pointer, and the number of bytes.
    // Notice you can store into any object---endian-ness is an
    // issue, however.   If the file stores in big-endian, and the machine
    // is little-endian, the number will be read in the wrong order.
    // There's no information in the file to determine endian-ness.
    
    void read_file(char *filename)
    {
       int x;
       Person p;
    
       ifstream in(filename, ios::in);
    
       if (!in)
       {
          cerr << "File opening failed!" << endl;
          exit(1);
       }
       
       for (x = 1; x <= 5; x++)
       {
          in.read(reinterpret_cast<char *>(&p), sizeof(Person));
          cout << "ID: " << p.id << " , SALARY " << p.salary << endl;
       }
    }
    
    void read_entry(int id, char *filename)
    {
       Person p;
    
       ifstream in(filename, ios::in);
        
       in.seekg((id - 1) * sizeof(Person));
       in.read(reinterpret_cast<char *>(&p), sizeof(Person));
       cout << "SID: " << p.id << " , SSALARY " << p.salary << endl;
    }
    
    void write_entry(int id, float salary, char *filename)
    {
       Person p;
    
       ofstream out(filename, ios::out);
    
       p.id = id;
       p.salary = salary;
       out.seekp((id - 1) * sizeof(Person));
       out.write(reinterpret_cast<const char *>(&p), sizeof(Person));
    }
    
    int main()
    {
       create_file("data");
       read_file("data"); // sequential reading
    
       cout << "READING ENTRY" << endl;
       read_entry(2, "data");
    
       cout << "RANDOM WRITING" << endl;
       write_entry(2, 1345, "data");
       read_entry(2, "data");
    
       return 0;
    }
    
    OUTPUT
    
    % a.out
    ID: 1 , SALARY 100
    ID: 2 , SALARY 200
    ID: 3 , SALARY 300
    ID: 4 , SALARY 400
    ID: 5 , SALARY 500
    READING ENTRY
    SID: 2 , SSALARY 200
    RANDOM WRITING
    SID: 2 , SSALARY 1345
    % 
    

    See the class syllabus for policies concerning email
    Last Modified: Fri Sep 27 19:41:52 EDT 2002
    left up down right home

    Web Accessibility

    fs/www/class/fall2002/cmsc311-0101/Proj/P2/proj2.html~0100664000077300017440000004123607573157614017757 0ustar cmsc311 CMSC 311 - Project #2
    computer organization
    c m s c 311  
    f a l l   2 0 0 2  

    Project #1

    Due Friday, Dec. 13, 11:59 PM (just before midnight)
    Late Due Date Sunday, Dec. 15, 11:59 PM (just before midnight)

    Posted: November 27, 2002

    Purpose

    The goals of the project are:

    • Learn how to read/write a "binary file" in C/C++ (this can be done in Java, but if you're using Java, you have to figure out how to do this).
    • To convert a binary MIPS instruction to a string.
    • To convert a MIPS instruction given as a string to an unsigned int.

    Academic Integrity Statement

    Please note that *all* programming projects in this course (including this one) are to be done independently or with the assistance of the instructional staff of this course only, unless otherwise specified IN PRINT by official webpages.

    Please review the policies outlined on the class syllabus concerning the use of class computer accounts and concerning the University's Code of Academic Integrity. The instructors of this course will review the programs submitted by students for potential violations of the Code of Academic Integrity and if it is believed that a violation has occurred it will be referred to the Office of Judicial Programs and the Student Honor Council.

    Hardcoding is considered a violation of academic integrity

    Collaboration Policy

    This project should be done invidividually. You may discuss ideas, but not exchange or view each other's code.

    Specifications

    You will be given a file called Translate.h and Load.h. The specifications are in the following link.

    Translate Specification

    Load Specification

    Implement the methods. You may add helper methods, if you want.

    Format of instructions

    Note: || means concatentation
    Note: 016 means 16 zeroes.
    Note: PC refers to the program counter
    Note:

    • rs stored at B25-21
    • rt stored at B20-16
    • rd stored at B15-11

    Note:

    • immed values for addi are written in signed base 10, but stored in 16-bit 2's complement.
    • immed values for logical operations (andi, xori, etc.) are written in unsigned base 10, and stored in unsigned binary.
    • Labels for jump instructions will be written in hexadecimal with a leading 0x followed by 8 hex digits. Use the low 26 bits, and store there.
    • Labels for branch instructions will be written in signed base 10 and stored in 16-bit 2's complement.

    Note: Bits are numbered so that B0 is the least signficant bit and B31 is the most significant bit.

    Note: Minimum instructions needed to pass primary: add, addi, beq, j, jal, or, ori. You need to translate to and from.

    Command Explanation
    add $rd, $rs, $rt
    • Reg[ d ] = Reg[ s ] + Reg[ t ]
    • R-type instruction
    • B31-26 = 000000 (SPECIAL)
    • B10-6 = 000000
    • B5-0 = 100000 (ADD)
    addi $rt, $rs, immed
    • Reg[ t ] = Reg[ s ] + (immed15)16 || immed15-0
    • I-type instruction
    • B31-26 = 001000
    • Immediate value is sign extended
    sub $rd, $rs, $rt
    • Reg[ d ] = Reg[ s ] - Reg[ t ]
    • R-type instruction
    • B31-26 = 000000 (SPECIAL)
    • B10-6 = 000000
    • B5-0 = 100010 (SUB)
    and $rd, $rs, $rt
    • Reg[ d ] = Reg[ s ] & Reg[ t ]
    • Bitwise AND
    • R-type instruction
    • B31-26 = 000000 (SPECIAL)
    • B10-6 = 000000
    • B5-0 = 100100 (AND)
    andi $rt, $rs, immed
    • Reg[ t ] = Reg[ s ] & 016 || immed15-0
    • I-type instruction
    • B31-26 = 001100
    • Immediate value is zero extended
    or $rd, $rs, $rt
    • Reg[ d ] = Reg[ s ] | Reg[ t ]
    • Bitwise OR
    • R-type instruction
    • B31-26 = 000000 (SPECIAL)
    • B10-6 = 000000
    • B5-0 = 100101 (OR)
    ori $rt, $rs, immed
    • Reg[ t ] = Reg[ s ] | 016 || immed15-0
    • I-type instruction
    • B31-26 = 001101
    • Immediate value is zero extended
    xor $rd, $rs, $rt
    • Reg[ d ] = Reg[ s ] ^ Reg[ t ]
    • Bitwise XOR
    • R-type instruction
    • B31-26 = 000000 (SPECIAL)
    • B10-6 = 000000
    • B5-0 = 100110 (XOR)
    xori $rt, $rs, immed
    • Reg[ t ] = Reg[ s ] ^ 016 || immed15-0
    • I-type instruction
    • B31-26 = 001110
    • Immediate value is zero extended
    beq $rs, $rt, LABEL
    • if ( Reg[ s ] == Reg[ t ] ) jump to LABEL else go to next instruction
    • I-type instruction
    • B31-26 = 000100
    • offset is B15-0
    • Jump to PC + [ (offset15)14 || offset || 02 ]
    • i.e., the offset is shifted to the left by 2, then sign extended.
    bne $rs, $rt, LABEL
    • if ( Reg[ s ] != Reg[ t ] ) jump to LABEL else go to next instruction
    • I-type instruction
    • B31-26 = 000101
    • offset is B15-0
    • Jump to PC + [ (offset15)14 || offset || 02 ]
    • i.e., the offset is shifted to the left by 2, then sign extended.
    slt $rd, $rs, $rt
    • if ( Reg[ s ] < Reg[ t ] ) Reg[ d ] = 0311 else Reg[ d ] = 032
    • R-type instruction
    • B31-26 = 000000 (SPECIAL)
    • B10-6 = 000000
    • B5-0 = 101010 (SLT)
    slti $rd, $rs, immed
    • if ( Reg[ s ] < (immed15)16 || immed15-0) Reg[ d ] = 0311 else Reg[ d ] = 032
    • I-type instruction
    • B31-26 = 001010
    jr $rs
    • R-type instruction (sort of)
    • B31-26 = 000000 (SPECIAL)
    • B20-6 = 000 0000 0000 0000
    • B5-0 = 000100 (JR)
    j LABEL
    • PC <- PC31-28 || immed || 02
    • immed is 26 bit value
    • J-type instruction
    • B31-26 = 000010
    jal LABEL
    • PC <- PC31-28 || immed || 02
    • immed is 26 bit value
    • Reg[ 31 ] <- PC + 4 (In the real MIPS, it should be PC + 8, but that's mostly because of pipelining--we use the simpler PC + 4, which is the next instruction).
    • J-type instruction
    • B31-26 = 000011
    lw $rt, offset($rs)
    • I-type instruction
    • offset is sign-extended to 32 bits, and added to Reg[ s ] to produce address. The content of that address (which must be word-aligned), is placed in Reg[ t ]
    • B31-26 = 100011
    • B15-0 is the offset
    lbu $rd, offset($rs)
    • I-type instruction
    • offset is sign-extended to 32 bits, and added to Reg[ s ] to produce address. The content of that address (which does NOT have to be word-aligned), is placed in Reg[ d ]
    • B31-26 = 100100 (CORRECTED)
    • B15-0 is the offset
    sw $rt, offset($rs)
    • I-type instruction
    • offset is sign-extended to 32 bits, and added to Reg[ s ] to produce address. The content of Reg[ t ] is saved at that address (which must be word-aligned)
    • B31-26 = 101011
    • B15-0 is the offset
    sb $rt, offset($rs)
    • I-type instruction
    • offset is sign-extended to 32 bits, and added to Reg[ s ] to produce address. The content of Reg[ t ] is saved at that address (which does NOT have to be word-aligned)
    • B31-26 = 101000
    • B15-0 is the offset
    lui $rt, immed
    • I-type instruction
    • Reg[ t ] = immed || 016
    • B31-26 = 001111
    • B25-21 = 00000 (normally where rs goes, but leave it all zeroes)
    bgtz $rs, LABEL
    • I-type instruction
    • B31-26 = 000111
    • B20-16 = 00000
    • Let offset = B15-0
    • PC-relative addressing. Let target = (offset15)14 || offset || 02
    • PC <- PC + target
    bgez $rd, LABEL
    • I-type instruction
    • B31-26 = 000001 (REGIMM)
    • B20-16 = 00001 (BGEZ)
    • Let offset = B15-0
    • PC-relative addressing. Let target = (offset15)14 || offset || 02
    • PC <- PC + target
    bltz $rd, LABEL
    • I-type instruction
    • B31-26 = 000001 (REGIMM)
    • B20-16 = 00000 (BLTZ)
    • Let offset = B15-0
    • PC-relative addressing. Let target = (offset15)14 || offset || 02
    • PC <- PC + target
    blez $rd, LABEL
    • I-type instruction
    • B31-26 = 000110
    • B20-16 = 00000
    • Let offset = B15-0
    • PC-relative addressing. Let target = (offset15)14 || offset || 02
    • PC <- PC + target
    sll $rt, $rs, shift_amt
    • R-type instruction
    • Shift left logical
    • B10-6 is the shift amount (between 0-31)
    • B31-26 = 000000 (SPECIAL)
    • B5-0 = 000000 (SLL)
    • Shift a copy of Reg[ t ] left by shift_amt bits, inserting zeroes into the low order bits.
    srl $rd, $rt, shift_amt
    • R-type instruction
    • Shift right logical
    • B10-6 is the shift amount (between 0-31)
    • B31-26 = 000000 (SPECIAL)
    • B5-0 = 000010 (SRL)
    • Shift a copy of Reg[ t ] right by shift_amt bits, inserting zeroes into the high order bits.

    See the class syllabus for policies concerning email
    Last Modified: Wed Jun 5 10:38:37 EDT 2002
    left up down right home

    Web Accessibility

    fs/www/class/fall2002/cmsc311-0101/Proj/P2/proj2.translate.html0100664000077300017440000001241007571153620021534 0ustar cmsc311 CMSC 311 - Project #2
    computer organization
    c m s c 311  
    f a l l   2 0 0 2  

    Purpose

    The goal of this project is to translate instructions to and from a binary representation. A rather useful function for you to use is: write a function which takes an unsigned int and translates it to a 32 character string consisting of 0's and 1's.

    The only thing you have to be careful about is that C++ strings number the characters from left to right (i.e. index 0 in the MSB), while "real" bitstrings number right to left (index 0 is the LSB).

    You will need to implement the following two functions:

    Public Methods

    static string binToStringInstr( unsigned int instr ) ;
    The instruction is represented as a 32 bit unsigned int (thus, it's in "machine language" format). Translate this to the appropriate string (thus, if the instruction means "add $r1, $r2, $r3", that's the string that should be returned. Return the string "UNKNOWN" if you can't tell what instruction it is.
    static unsigned int stringToBinInstr( string instr ) ;
    The instruction is now written as a string. Convert this to an unsigned int. For example, the string could be "add $r1, $r2, $r3". You should translate the string to an unsigned int which is the machine language translation of "add".

    You should handle:

      Mixture of upper/lowercase letters (make it case-insensitive). Unusual spacing. The only space that's guaranteed is the one after the instruction itself (there may be no spaces before or after the commas). Comments. There may be a comments at the end. Comments begin with the character "#". You should ignore all characters beginning with "#" to the end of the string.
    You may assume registers are numbered from $r0 up to $r31 and that they are valid. We won't indicate registers using $t0, $v0, etc. (however, for extra credit, you can translate valid alternate register names as described by the book).

    Location of File

    Go to ~chf11001/Proj/P2/, and there should be Translate.h. Those implementing it in Java should make the appropriate conversions.
    See the class syllabus for policies concerning email
    Last Modified: Fri Sep 27 19:41:52 EDT 2002
    left up down right home

    Web Accessibility

    fs/www/class/fall2002/cmsc311-0101/Proj/P2/proj2.load.html~0100664000077300017440000001266607573413027020673 0ustar cmsc311 CMSC 311 - Project #2
    computer organization
    c m s c 311  
    f a l l   2 0 0 2  

    Purpose

    The purpose is to load a series of unsigned int (32 bits) from a file. The file will have a 32 bit value (0xdabedabe). As you read it in, it may have been stored in the same endian-ness as your machine or a different endian-ness. (Imagine you have downloaded this file from somewhere on the web, but don't know what endian-ness the machine was).

    If you read in an unsigned int equal to 0xdabedabe, then this must mean the file is the same as yours. If it's some other value, then it must be a different endian-ness.

    Public Methods

    static vector<unsigned int> loadValues( const string & fileName ) ;
    If the file exists (in the current directory), read in the first unsigned int, and determine the endian-ness. If this is the same as your machine's endian-ness, read the rest of the values normally. Thus, if there are N * 4 bytes in the file, you will read in (N - 1) unsigned int values (after the initial 4 byte header with 0xdabedabe), and store them in a vector of unsigned ints.

    If the endian-ness is not the same as your machine, then you still read in the N - 1 values, but then afterwards, you must convert the values so they are the same endian-ness as your machine. (Thus, for each unsigned int, you must swap bytes 0 and 3 and bytes 1 and 2, assuming byte 0 is the least significant byte, and byte 3 is the most significant byte).

    If the file does not exist, then just return an empty vector. You can assume that there is at least 8 bytes in the file if it does exist (i.e., it has the 4 byte header plus at least one 4 byte integer).

    static bool writeValues( const string & fileName, vector<unsigned int> values, bool isBigEndian ) ;
    In this version, you will write out the values given the endian-ness. Add the header as needed (0xdabedabe). This may involve swapping bytes. If you read in the file, then call this function with the same endian-ness as the file, then print out the file, you should get the equivalent file (you can run "diff" to see if they result in the same binary).

    If the file exists, then return false, and don't do anything.

    Location of File

    Go to ~chf11001/Proj/P2/, and there should be Load.h. Those implementing it in Java should make the appropriate conversions.
    See the class syllabus for policies concerning email
    Last Modified: Fri Sep 27 19:41:52 EDT 2002
    left up down right home

    Web Accessibility

    fs/www/class/fall2002/cmsc311-0101/spacer.gif0100664000077300017440000000005307536236632016375 0ustar cmsc311GIF89a!,D;fs/www/class/fall2002/cmsc311-0101/syll.html0100664000077300017440000004174507542000564016305 0ustar cmsc311 CMSC 311 - Main Page
    computer organization
    c m s c 311  
    f a l l   2 0 0 2  

    TENTATIVE
    (as of September 18, 2002)

    Instructor


    Name Charles Lin
    Section 0101
    Lecture Time 5:00 PM-6:15 PM Mon/Wed
    Email clin@umd5.umd.edu
    Phone 405-2709

    Only call the instructor for administrative matters (e.g., you are sick and can't make the exam). You should not call about project debugging/homeworks or extensions. See TAs for that. Email is generally preferable, instead of calling.

    Office Hours

    W 2:15-3:15, Th 11:15-12:15, F 2:15-4:15

    Description

    Prerequisite: CMSC 214 with a grade of C or better and CMSC 250 with a grade of C or better and permission of department.

    Topic Introduction to assembly language. Design of digital logic circuits. Organization of central processors, including instruction sets, register transfer operations, control microprogramming, data representation, and arithmetic algorithms. Memory and input/output organization.

    Texts

    Text:
    Computer Organization & Design: The Hardware/Software Interface, David Patterson & John Hennessy, Second Edition, Morgan Kaufmann, 1997. ISBN: 1558604286

    This is the required textbook. Sorry that it is so expensive. You may wish to share textbooks with a friend or buy a used textbook. This is NOT the same textbook as the one used in CMSC 411 (although the authors are the same).

    Teaching Assistants

    The TA for this summer is:

    • Kinga Dobolyi (kinga@cs.umd.edu)
    • Stuart Fletcher (stuart@cs.umd.edu)

    Office Hours

    TBA

    Kinga and Stuart hold office hours in AVW 1151, which is the TA room. Kinga's office hours are 12:30-2:30 on Tuesday and Thursdays. Stuart's office hours are 1-3 PM on Mondays and Fridays.

    Dr. Preston's TA is Konstantinos Bitsakos, and he holds his hours 10:15-12:15 on Tuesdays and Thursdays.

    Dr. Kruskal's TA is Anuradha Penmetcha, and she holds her hours 1-4 on Mondays.

    These TAs are available for all courses. However, 311 TAs are better for project questions, which can also be emailed to the instructor.

    Webpage

    Much of the course material will be available on the webpage. This webpage is located at:
        http://www.cs.umd.edu/class/fall2002/cmsc311/
    
    It is your responsibility to read the webpage often.

    In addition to this webpage, Dr. Hugue has provided a large number of resources on her main CMSC 311 including old homeworks, exams, etc.

    Visit Meesh's 311 Webpage

    Posting Account

    The posting account is on the DC cluster. It is ~chf11001.

    Course Grading Policy

    Your grade will primary be based on three exams. They consist of two midterms and a final exam. The breakdown of the midterms and final is:
    • Midterms: 30% each
    • Final: 40%
    There are occasional HWs and quizzes, but they are not counted in your final grade.

    Your final grade is also based on projects given throughout the semester.

    Basically, two grades are computed.

    Method 1

    If you pass the primaries of the required projects (currently, Project 0 through Project 4 are "required"), plus possibly passing secondaries (this will be decided during the semester), you will receive a "check" indicating you have completed the minimum requirements of the projects.

    You will have grades computed based on the percentages of exams given above.

    Method 2

    You will also be given points on the projects. Your grades will be based on your relative ranking with other students in the course. More than likely this means grading on some 100 point scale (or similar), and then determining letter grades for projects.

    The project grades will then count as 20% of your grade. The scores are combined with exam grades (exams are scaled to 80%), and then your grade with projects are counted.

    If your projects do not pass primary, then Method 1 is used, and deductions are taken on your letter grade. Basically, there will be a scheme for determining the weight of each project, that number will be scaled and the deductions taken. This may cause you not to pass the course.

    Also, if you receive an F using Method 1, then no matter what you do on projects, the best you can do is a D.

    Homeworks/Readings

    Homeworks are not required in this course. However, experience has shown that students who do not prepare for exams by working on homework problems traditionally do very poorly on exams. As you progress in your academic career, it should no longer be mandatory that homeworks be required, and you should learn to keep up.

    Solutions to text problems and additional HW problems are available on Dr. Hugue's CMSC 311 website.

    Additional problems may be provided to help you prepare for exams.

    In addition, you are expected to read the textbook. While many students find such a task painful (often because English is a second language), it is, nevertheless, an important skill to learn, and it's better to learn now than later.

    Projects

    There are expected to be 5 required projects. The topics are shown below.

    • Project 0. Tokenizing project. Mostly to make projects 1 through 3 easier.
    • Project 1. Number conversion, reading binary files, etc. Writing simulated registers.
    • Project 2. MIPS project 1. Reading in a basic MIPS file, and determining addresses of data segment. Also, translation of some instructions from binary to MIPS.
    • Project 3. MIPS project 2. Being able to simulate the actual instructions.
    • Project 4. Writing a MIPS assembly language program which will run on the simulator you wrote.

    Then, there is the optional projects.

    • Project 5. MIPS project 3. Converting the assembly to binary format. Being able to read and write from a file. Loading the binary format into memory. Disassembler.
    • Project 6. MIPS project 4. Simulation of hardware. (Unlikely to occur this semester).

    The optional projects may make the project grade worth more than the 20%. They are likely to be graded independently of the other projects (for example, if it's worth 10% more, you will get a numeric grade for the 10%). Generally, if you get something working that looks reasonable, you will get a good grade on this section.

    Project Late Policy

    There will be a late policy on projects, which will be stated in each project description. If other courses are causing problems for your submission, let the instructor know, and perhaps something can be worked out.

    Exams

    There will be two midterms and a comprehensive final exam given on the dates shown earlier. The midterms will be given in class. The location of the final exam will be announced in class and in the webpage. There may be makeups given to students who are unable to attend the exam. Under most circumstances, the makeups will be given within a week of the original exam.

    Makeups will only be given to students with valid documentation. If you are sick, you must have a doctor state dates of incapacitation. In particular, it must state (1) the date which you were incapacitated, (2) and that you were too sick to attend classes).

    You must contact the instructor via email/phone as soon as possible. If the instructor is contacted over a week after the exam has been given, you may receive a 0 on the exam, for failing to contact the instructor in a timely manner.

    Requests for regrades on an exam must be made IN WRITING within a week of the exam being handed back. If such a request is not made within a week, the instructor reserves the right not to regrade the exam.

    Academic Honesty Statement

    Please carefully read and consider the Computer Science Department policy regarding the use of computer systems, and the Office of Information Technology's policy regarding acceptable use of computer accounts provided for instructional use, in the Spring 2002 issue of the departmental newsletter, CS Tid-Bits, handed out with this syllabus. Note in particular the penalties for impermissible cooperation on programming projects, which is a violation of the University's Code of Academic Integrity. Any evidence of unacceptable use of computer accounts or unauthorized cooperation on exams or projects will be submitted to the appropriate authorities or to the Student Honor Council, which could result in an XF for the course, suspension, or expulsion from the University.

    NOTE SPECIFICALLY that projects are to be done INDIVIDUALLY, unless otherwise specified by your instructor IN WRITING TO ENTIRE CLASS (verbal assurances don't count). For academic honesty purposes, projects are to be considered comparable to an extended take-home exam. That is, any cooperation or exchange of ideas which would be prohibited on an exam is also prohibited on a project assignment. Working IN ANY WAY with another student will be considered a violation and WILL BE REPORTED to the Honor Council. Students may not discuss pseudocode, design of a program or of individual functions, coding of individual functions, or any high-level code with anyone except the instructors and teaching assistants. Should you have difficulty with a programming assignment you should see your instructor or the teaching assistants in office hours, NOT solicit help from anyone else in violation of these rules. Students are welcome to study together or to receive help in learning the course concepts from any others, but exams and projects are to be solely and entirely each student's own work.


    VIOLATIONS OF ACADEMIC HONESTY INCLUDE:

    1. failing to do all or any of the work on a project by yourself, other than assistance from the instructional staff.
    2. using any ideas or any part of another student's project, or copying any other individual's work in any way.
    3. giving any parts or ideas from your project, including test data, to another student.
    4. having programs on an open account or on a PC that other students can access.
    5. transferring any part of a project to or from another student or individual by any means, electronic or otherwise.
    6. publishing any of your code publicly (e.g., via a webpage) which other students can access, even if the project has already been completed.


    IT IS THE RESPONSIBILITY, UNDER THE UNIVERSITY'S HONOR POLICY, OF ANY STUDENT WHO LEARNS OF AN INCIDENT OF ACADEMIC DISHONESTY TO REPORT IT TO THEIR INSTRUCTOR.

    Working in Teams

    From time to time, you will be permitted to work in teams on projects. Teams will almost always be in groups of two. You should submit a single project, with both your names on it. The rules of collaboration are that you can talk and code as much with your team-mate, as you want. But you must observe the rules of no collaboration with anyone else.

    Also, for your benefit, you should indicate who your team member is early on. Thus, if you are a team member, and you change your mind, and break the team up, and there is similar code between you and a former team member, you will still be considered violating academic integrity.

    You may also work individually on projects. For now, working individually does not confer any benefits. However, this may change, depending on the project description.

    Course Topics (SUBJECT TO CHANGE)

    This list may vary according to the pace of lecture topics.

    Overview (1 lecture)

    • Introduction.
    • General Overview of Computer Organization (CPU, Memory, Fetch-Decode-Execute Cycle)

    Number Represenation (5 lectures)

    • What's a bit, byte, bitstring?
    • Conversion to and from base 10 from arbitrary base.
    • Binary, Octal, Hexadecimal
    • Unsigned binary
    • Signed decimal: 9's complement, 10's complement
    • Signed binary: 1's complement, 2's complement, signed magnitude
    • Binary Coded Decimal
    • How many bitstrings given N bits?
    • Range of numbers given N bits?
    • Floating Point Representation
    • Simple Addition/Subtraction

    Combinational Logic (5 lectures)

    • Gates and Identities
    • Combinational Circuit Parts
      • MUX, DeMUX
      • Encoder, Decoder
      • Half Adder, Full Adder
      • Carry Lookahead Adder
      • Shifter (Rotator)
      • Design of ALU

    Sequential Logic (5-7 lectures)

    • D, JK, and T flip flops
    • Sequential Circuit Parts
      • Registers
      • Synchronous, asynchronous counters
      • Register Files
    • Design with finite state machines with output (Mealy/Moore)
    • PLAs/ROMs used in design

    Assembly Language

    • MIPS assembly language
    • Encoding of instructions in binary
    • Basic MIPS architecture
    • Translation of C program snippets to MIPS
    • Addressing modes

    Datapath and Control (4-5 lectures)

    • How an assembly language instruction is executed
    • Internal bus
    • Control Units
    • Register Transfer Language
    • Microprogramming

    Memory

    • RAM
    • Interleaved memory
    • Cache
    • Virtual Memory
    • Direct Memory Access (DMA)

    Random Topics

    • Interrupts
    • Bitwise operators in C
    • Shift operators in C
    • I/O devices

    Pipelining (2 lectures)

    • Basics of Pipelining
    • Amdahl's Law (not really pipelining...)

    Web Accessibility

    fs/www/class/fall2002/cmsc311-0101/Tutorial/0042775000077300017440000000000007574263012016235 5ustar cmsc311fs/www/class/fall2002/cmsc311-0101/Tutorial/cache.html0100664000077300017440000004214607574263012020170 0ustar cmsc311 Memorhy Hierarchy
    computer organization
    c m s c 311  
    f a l l   2 0 0 2  


    Cache

    The Memory Hierarchy

    The following is a ordering of "memory" (i.e., places to store bits) from fastest to slowest:

    • Registers
    • RAM (physical memory)
    • Disk

    The rule of thumb for memory is this: As memory gets quicker and quicker, the cost is more expensive (per byte), and the total number of bytes decreases.

    For example, registers are the quickest memory, but typically you have very little of it (for example, MIPS has 32 integer registers). There's typically more RAM (these days, even 1 G of RAM is not too uncommon), but it's much slower than accessing information stored in registers, but it is cheaper per byte than registers.

    Finally, there's disk (20 G or more is not uncommon), which is slower than RAM, and there's a lot of it, and it's cheapest of all the memory (per byte).

    Thus, if you want faster memory, it's going to cost you, and you can't get too much of it. This is a combination of both economics and physics.

    The Need for Cache

    The goal of computer hardware designers is to make hardware go as fast as possible. There are two ways to do this. Either you do a brute force approach: make everything faster (via new technology), or you make a few observations about the kind of operations and the kind of data you are working on, and make hardware faster by being smart about what needs to get faster.

    RISC architectures were proposed and developed in the early 1980s. The ideas behind RISC architecture were:

    • Use lots of registers (32 to 128 registers common).
    • The only instructions that work with memory should be load/store instructions (i.e., don't add a register to the contents of a memory location).
    • Keep instructions simple and few, so the hardware that implements it can be simple (preferably, one instruction per clock cycle).
    • Don't have complicated instructions that do a lot, but take many clock cycles.
    • Have instructions be equal width (same number of bytes per instruction).

    In particular, because each instruction is "simple", the amount of code is expected to increase. Thus, you might have, say, 300 instructions to run instead of 250. As you might guess, running more instructions takes more time than running fewer instructions.

    The hope is to execute each of those 300 instructions much faster than the 250 instructions. Some of that comes with making simple instructions, but some of it also comes from placing the instructions in cache.

    So, the simple idea is this. Create a fast memory that sits between the physical memory and the registers. This fast memory is a subset of the data that is stored in physical memory. It acts as a middle man.

    Here's the analogy. Imagine you are in a large digital library (which represents RAM or physical memory). You sit at a study carrel (a desk with some space for CDs) and have a bunch of CD books. Let's say the carrel can hold up to 20 CDs, each CD being a copy of some "book" in the digital library.

    Unfortunately, the technology isn't perfect. When you don't have the CD of the book you want, you must go to the librarian and ask for the book to overwrite the CD you have. So, it's slow if you must go to the librarian to do this.

    Thus, when you want to get a book, the first thing you do is to see if you have it in the shelf in the study carrel. If it's there, you access it quickly and begin to read. If it's not there, you have to go the librarian to get the book "burned" on a CD, and that takes time.

    This analogy is reasonably close to what happens between cache and RAM, where the study carrel acts as the cache (fast, small subset of the library) and the library itself represents RAM.

    Why Cache Works

    Why does cache increase the speed of programs? Let's go back to the analogy and see where it might fail.

    So there you are in your study carrel, needing to write (or type) a paper on the ancient history of Rome. As you write, you need to read and refer to books. As long as the CDs are sitting in the carrel this is quick.

    However, as time passes, you may have to write on the history of China, and because most of your CDs are about the history of Rome, you need to get those new books. Even though they take some time to get the books you needed copied, once you have them, it's pretty speedy.

    Now imagine that you don't have a report, and you happen to like to read books rather randomly. One day you read part of one book, then another day, you read another part of another book. You rarely read the same book twice, and you rarely read the entire book.

    In this case, having all the CDs in the study carrel doesn't save much time. You're always having to go to the librarian to make new copies.

    Yet, for a typical person, this probably doesn't happen very often. You can often leave the books you want in the carrel, and will refer to them quite often. Thus, the study carrel does help you out, because it allows you to get access to frequently needed CDs fast.

    It turns out programs also behave in a similar fashion. In particular, programs exhibit the following two properties:

    • spatial locality If your program accesses address X, it is like to access X +/- Delta (where Delta is a small number). That is, it is likely to access addresses near X.

      This property occurs both in data and instructions. For example, most assembly language code is straight-line code. That is, you execute the instructions in order, one after another. Occasionally, you do a branch or a jump instruction. Even so, these often jump or branch to nearby parts of the code.

      With data, many programmers commonly program with arrays. Arrays are usually stored contiguous in memory. Thus, all the addresses are quite near each other.

    • temporal locality If your program accesses address X now, it is likely to access address X in the near future.

      Again, this property occurs both in data and instructions. For example, in instructions, you are often running loops. Thus, the addresses of the instructions are accessed over and over again.

      And these loops are often accessing the same data over and over again (for example doing some complicated processing of data in arrays).

    How can caches take advantage of spatial locality? Since you know you are likely to access addresses near X, then fetch the data in a large block near X. Instead of fetching the byte stored at address X, fetch 64 bytes that include address X, which is faster than accessing the 64 bytes one at a time.

    How can you take advantage of temporal locality? Place the frequently used data in cache to begin with. Since that data is faster to access than RAM, and since the data is likely to be accessed in the near future, you make the program faster.

    Typically, you have two sets of caches: an instruction cache and a data cache. Both have spatial and temporal locality, but don't overlap that much with each other's addresses.

    How Cache Works

    To begin, let's establish some terminology (some of this is borrowed from a book by Murdocca).

    • A cache consists of 2k slots.
    • Each slot consists of:
      • A valid bit (referred to as "V"), indicating whether the tag is valid or not.
      • A dirty bit (referred to as "D"), indicating whether the data block has been modified.
      • The tag which indicates which data block is in a slot.
      • The data block which consists of 2m bytes (copied from RAM).

    Here's the idea. Suppose a user wants to access address A31-0. This address might be the address of some data in memory, or it might be the address of an instruction to be fetched.

    Since the data block contains 2m bytes, we will fetch this many bytes, instead of fetching one (or four) bytes at address A31-0.

    For now, let's assume m=8, so each data block consists of 256 bytes.

    How do we get those 256 bytes? We need 256 consecutive addresses. The easiest way to accomplish this is follows.

    • A31-8 0000 0000
    • A31-8 0000 0001
    • ....
    • A31-8 1111 1111

    A31-8 is the upper 24 bits of the original address A31-0 that we want to access. We come up with all 28 = 256 ways of writing an 8 bit value. Combine A31-8 with 8 more bits to get a 32 bit address.

    Procedure for accessing data

    When an address is generated, the first step is to determine if the data exists in the cache (similar to a person checking to see if the CD is in the study carrel). This is done by searching through the cache (using hardware) to see if it's there.

    If there, then you have a cache hit. The data is returned to the main CPU. If not, then you have a cache miss (similar to not having the CD in the study carrel, and having to go to the librarian).

    This means, you need to fetch the data from RAM (this is done in hardware).

    In the process of fetching the data from RAM, you will need to pick a slot to place the data. If all slots are being used, one of the slots must be "evicted", which typically means copying the data back to RAM, and using the slot for the current data being requested.

    An entire data block is fetched from RAM, placed in the slot, and the tag updated accordingly.

    How this is done depends on the kind of cache you have.

    Fully Associative Cache

    There are three kinds of cache schemes: fully associative cache, direct mapped cache, and set associative cache.

    In a fully associative cache, when we fetch a 256 byte data block, it can go into any slot. When the hardware looks to see if the data is one of the slots, it checks to see if the tag of the slot matches the tag of the address.

    If the address is B31-0, then B31-8 is the "tag" portion of the address, and B7-0 is the offset. The number of bits in the offset is the log of the number of bytes in the data block. Since the data block has 256 bytes, the number of bits in the offset is 8 (which is log2256).

    The hardware checks each slot to see if it has a tag that equals B31-8 (which means the tag is 24 bits).

    It also checks to see if V=1 (the valid bit is true). If V=0, this means the tag is meaningless and data block contains garbage bits.

    If there is a slot that matches the tag portion of the addres and is valid (there can be at most one such slot), then the offset B7-0 is used as the index into the data block. Since the offset is 8 bits, you can access one of 256 addresses, which is, of course, the number of bytes in the data block.

    If there is no such slot, then the data is fetched from memory. In particular, you fetch bytes from address B31-8 0000 0000 all the way up to B31-8 1111 1111 (that's 256 addresses) and place them in a slot.

    Which slot should be picked? It depends. If there is a slot that's not valid, then that one should be picked.

    If all slots are valid, there's a variety of schemes to use. You can try to pick a slot where D = 0. This would mean the slot is not dirty (i.e., the data block hasn't been modified).

    The advantage of picking such a block is that you don't have to write this back to RAM, which saves time. The disadvantage is that this block may be a block that's frequently accessed.

    A better strategy may be to determine which slot hasn't been used in a while. In order to do this, you need to keep more information than the slots currently store. In particular, you need to keep something like an "age" counter. An age counter can be, say, a 2 bit counter.

    If the slot hasn't been acccessed in a certain time period, the counter is incremented. If the counter reaches 11, it stays at 11. If the slot is accessed, the counter is reset back to 00.

    When picking a slot to evict, pick a slot with the largest age counter.

    Such schemes (i.e. using age counters) are more likely to be seen when using virtual memory. Virtual memory uses the disk as additional memory. Think of RAM as a kind of cache for disk. When some data doesn't appear in RAM, you look for it on disk. The main difference between RAM and disk vs. cache and RAM is the speed. Disk is very slow to access compared to RAM.

    Direct Mapped Cache

    To understand fully-associative caches, it's helpful to understand direct mapped caches. In a fully associative cache, any slot can be used to store a data block.

    In a direct-mapped cache, only a single slot can be used to store a data block.

    So, how is that slot determined?

    Assume each slot has a slot number. Assume we have 64 slots. The slots are number 0 to 63. With 64 slots, you need 6 bits to identify the slot.

    We get these 6 bits from the address. So, if the address is B31-0, then B31-14 is the tag, B13-8 is the slot number (6 bits), and B7-0 is the offset as before.

    You might wonder why we picked B13-8 as the slot number. Couldn't we have picked any other 6 bits from bits B31-8? You could have, but usually the further right the bits, the more likely that the values are to vary. You want a lot of variance so that different addresses get mapped to different slots.

    If this scheme reminds you of hash tables, it's very similar. If you use the high 6 bits (i.e., B31-26), then you are likely to always pick the same slot, which is like hashing to the same bucket. Picking bits low down tends to make the data spread out more across the different slots.

    Thus, B13-8 uniquely determines the slot where the data block must go.

    This is similar to having a parking lot with 100 parking spots number 00 through 99 and using the middle two digits of your student ID to select a parking spot. Thus, if your middle 2 digits is 23, then you can only park in spot 23.

    The drawback of this scheme is clear. What if many students have 23 as the middle 2 digits, yet, very few have any of the other 2 digits? Then, there may be empty parking spaces, yet you're not allowed to park there (this happens frequently with apartment complexes which assign only one parking spot per apartment---you may have several people living at the apartment, each with their own car, yet only one of you can park in the slot, and others have to park far away---even if other people's parking slots are empty).

    The main advantage of this scheme is that it's simpler to implement (uses less hardware) than a fully associative cache.

    Set Associate Cache

    A set-associative cache is somewhere in between the two schemes. Suppose we have 64 slots. We put each slot in a set. Let's assume there are 8 sets, each containing 8 slots.

    We break the address up differently.

    B31-11 is the tag (23 bits), B10-8 is the set number (3 bits), and B7-0 is the offset as before.

    In a set associative scheme, you use B10-8 to identify one of 8 sets (numbered from 000 to 111).

    How do you decide which of the 8 slots to pick within the set? At this point, it becomes fully associative within the set. You can pick any of the 8 slots you want.

    Again, the parking lot analogy is useful. Assume that there are still 100 parking spots, but you use the last digit of your student ID. There are only 10 possible values using your last digit. However, there are 10 parking spots for each digit (thus 10 assigned to digit 0, 10 assigned to digit 1, etc).

    So, now you have a choice of 10 different spots based on the last digit.

    As you can see, the set-associative scheme combines ideas from fully associative and direct mapped.

    Web Accessibility

    fs/www/class/fall2002/cmsc311-0101/Tutorial/cache.html~0100664000077300017440000000000207574240106020346 0ustar cmsc311