[llvm-commits] CVS: llvm-www/ProjectsWithLLVM/2002-Spring-CS497CZ-Jello.pdf 2002-Spring-CS497CZ-Jello.ps index.html

Chris Lattner lattner at cs.uiuc.edu
Fri Dec 12 12:25:03 PST 2003


Changes in directory llvm-www/ProjectsWithLLVM:

2002-Spring-CS497CZ-Jello.pdf added (r1.1)
2002-Spring-CS497CZ-Jello.ps added (r1.1)
index.html added (r1.1)

---
Log message:

initial checkin of the "projects with llvm" page


---
Diffs of the changes:  (+5725 -0)

Index: llvm-www/ProjectsWithLLVM/2002-Spring-CS497CZ-Jello.pdf


Index: llvm-www/ProjectsWithLLVM/2002-Spring-CS497CZ-Jello.ps
diff -c /dev/null llvm-www/ProjectsWithLLVM/2002-Spring-CS497CZ-Jello.ps:1.1
*** /dev/null	Fri Dec 12 12:24:15 2003
--- llvm-www/ProjectsWithLLVM/2002-Spring-CS497CZ-Jello.ps	Fri Dec 12 12:23:35 2003
***************
*** 0 ****
--- 1,5633 ----
+ %!PS-Adobe-2.0
+ %%Creator: dvips(k) 5.90a Copyright 2002 Radical Eye Software
+ %%Title: paper.dvi
+ %%Pages: 8
+ %%PageOrder: Ascend
+ %%BoundingBox: 0 0 612 792
+ %%DocumentFonts: CMR17 CMBX12 Helvetica CMSY9 CMTT9 Times-Bold CMR9
+ %%+ CMTI9 CMBX9 CMBX7 CMR7 CMTI7 CMSY7 CMMI7 CMR6 CMMI9 CMR8 CMCSC10
+ %%EndComments
+ %DVIPSWebPage: (www.radicaleye.com)
+ %DVIPSCommandLine: dvips -q paper.dvi -t letter -o paper.ps
+ %DVIPSParameters: dpi=1200, compressed
+ %DVIPSSource:  TeX output 2003.03.12:1539
+ %%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/setpagedevice{pop}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
+ /setpagedevice{pop}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: CMCSC10
+ %!PS-AdobeFont-1.1: CMCSC10 1.0
+ %%CreationDate: 1991 Aug 18 17:46:49
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMCSC10) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMCSC10 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 70 /F put
+ dup 97 /a put
+ dup 98 /b put
+ dup 99 /c put
+ dup 100 /d put
+ dup 101 /e put
+ dup 105 /i put
+ dup 111 /o put
+ dup 115 /s put
+ dup 117 /u put
+ dup 118 /v put
+ readonly def
+ /FontBBox{14 -250 1077 750}readonly def
+ /UniqueID 5000772 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+ 3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+ 532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+ B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+ 986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+ D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A30EB76029337
+ 900ECFB1390CA5C0C3A04528044F266BA17BE487C79B94FAC6D6484684C5BFEA
+ 87BCCC77D40AD11552035E95E3007126418ED49B68468B38A14E88E68A267B98
+ 076F1C9769A5AFBC285E5B158EAC9F926F1D6C0B8F1D57D9C31D25AE27123518
+ 9D2CD92E5689E0213089BD268DA5E47525CB8EABAA4B78A15AEA34705889AB3A
+ FFB8953B5B3482E52BFA0940630ADF8C0AC2177D907324299EE980E850F203CD
+ B627962F43D5A678C44243CDE97853BDC6AB45FD5C09AD274DAF89929F583CC9
+ CCC24BDFC68B92111055ABA5F26D2DC67C70906F71C2957701D65AE746A60C30
+ 40E6CB24B97FCDAD0487AE38A201FBF0E41BABD2181981A71940F1E707F91E5D
+ C8CA50CB16D8702D188E56D014D92F76CE0B52ABDB9110E32438D2BBF3E6A40B
+ 7B005F10BB437812CAC6ED2996F7606DC962C4FDE207FF322782C343DF44CEC5
+ FF06A55C630C20E9AE1B0D1C5673753C43BA0767D65D1B451CC6380D8BB3C4DC
+ 81E8FD8AA79BE993218686F29D3CD925566DD587F541A0DA1B1CC3BCEA2E6C7D
+ 5E1016F6917A871F1BBAD96AF9E867735017119A381FCF33EB2D3E1E7093FD90
+ CDB0CED4818CFD9E201A03430CEC713620BE0D3254158931FB657C6877C1B3D2
+ 24030F377820DA58F4B95CFE645109F3F1B80DB5FACFD7D05AE2909EEFCF95AD
+ 9CB286C8B6C075CA2267C101B736139863186C193E31085E7C9FD88EF8BBECE3
+ 933542C85309013325B4BBFE9A5B606780C8580ABDA2F5D0064EBFC23939B307
+ 08568C3B7F5F053BF367DEBA349FABB9F760C44D100BDEEFBB01F27BFC61FCD2
+ 563451B80B58D7560AD591C87FC82B1489B1C780D3BE71EDF13D847C8E69FF77
+ DDFFF029286EC99949CBE83DFA9017E8830487D87ADBDBBE7B8B26FF0DC93C83
+ 5285F30FCE93DD1ED0A35FC129176EFDC4E2AA9F6D3D0770DD092A1ACF7BA73B
+ 6D96484A0F4156D2DA7742303304C865A2BCE4B951499857945B7938DE7564D0
+ F27580E56CF8F9A71DB5624305EFCE5B20EA50D5B43ED46CE5B165E8C2CDC6BD
+ 3B3C4BF5A6F27ABD23B4345835C9EC99E0948E632363D8DF34CADC6AB024E87A
+ BB10858BDFF671659B5A63757BB5EF084317EC26DB2B30FC19D86EEA63868BA2
+ B75CC9F3F71DB9577F35A9D14F2766FAA96FEB7DC32DFEA096C0975DB9381D6D
+ 40D9AE2B00CBD6BCC399DB4473F2DB2C5F641F68755F74E832A8B5017382CD6C
+ FD5B418CBB428A3921D9B47F7BE48B9A9C9EF22244EEA60B6EB171423E6DA315
+ C53FAFA79F7AC61617478F207D7590FBE015E793E3085361B1BF84EB063A846F
+ 1D7D91949870C64831BE3C9A19635D4F16E9A4E671A7C28146CE6DF39C263273
+ DAD87443C3FAD2ED5A8C28DF2B68A2F7C9CFE3127DE2FB0628E3D2291D93F974
+ 55839F4EDA49E1A9075461064BA0777835F596FB3D96463C11DD373B928047D0
+ B0BE201FD5B6A66AB14CD39902D540FBB43427A214F4B205854FBBF853BA74E9
+ F784240B2BA12DAFCE45FAD7A310B4BE060E2108D3127CECE44AD9E9F12ECEB5
+ D8E994268437E684F11AF5F251655AA707012050454984D9C8601ECA694EF10C
+ 069346F955A6915C7A2A848AB566252D296D077AC7134FFD13EBE5448893F238
+ 03668F1DB401018E8EBB468B7E47E4B4FC71A6EC5963A95685C0416AD1DE418B
+ 9B1FF62EA84BE02E253D481BEAB5020698497C0BC467E3F08047897B358AE092
+ 4F1F7A2E1F1362824A5F4796E4E3A629DCFA103E8BAF805294E12F54CBFDDCB0
+ 28A37C53DDB2085827D7664E4D7A44D658EEF7F2FE7C3C73FB3AD2EE7952C2B0
+ A28BF7A7302B81FB07FF8FE3C050613065BCD808ABB96A415282EDD2A5F5F345
+ BC47FBC6D7B1A5BE3C01A0DD4A9A65232709F99403B474B18911F0237D6DA524
+ 94CCAC167D29604E956045E00F17F283BCD77B5B6DF85FABC0B143BF2AF470E0
+ 2882091098FB5FC44DCE633069B383A34E7AEE640D4F1D0DC13A96511ADC2313
+ E8C178B7793E3A5F36A8367B6085796BA594342CCAE0001D6874245E4766B9C7
+ 9AEB0AADDF7EBA777E049AC29102F6F688BB62BFB112F708C65CFE10B05068CD
+ 87EE8D200F983AFD8CB4465E6ACDF185AA66E9CCE915366C9419B4080B643FC0
+ BCDBB03C2F4277A65E94FECF8706940F6EC6DCF2C43140A1B0F06D1A4AF1C5AF
+ 5F8AA1005D9AB56C1D90734702095512414FFEDE6A126192B180602EAA6ECBDC
+ 55D6C9EB8B8A0339C98B14796505F9E0D0000C3C155F50B3ECD256FB6B92FB33
+ 1C12A3CD0B27BDD43F616605CE98E69AB48EC9275CD1BE1D632EC0DF3AAD4C20
+ B428860A1C0820667585E92908FD22F24D2DF5AAB0562327C854795C34858E61
+ 6B954CACB889C6CAFE10D9B68853697A6C809825BCF19B409A721C179BDC629D
+ 800F632C7D568E00D2E96E04148D28EFA5C3747D5390B4C0ED4DFC58B9C77E7C
+ F1A6E0FE2DB88DA58B4F199C50C6DF63A24CEE60EADFD5B193AF8B85DC1BC741
+ 14AA5874570158D91B78FD57ABCFCC145D31D1843C1E4FC91075F0B8DF8292E1
+ E0A9A1EC9F63F594464507DF773DA2AF09831293C0131214FEBA3BF796A1C83E
+ 502592028F1868236006E4818858A1EAE87C881DDF4FA2D74BB189642E39209F
+ DBC64CC398E19D73292E2EA5D8EFA82B16F8451A9ACBB652133B297927580324
+ 4934104B74926B1F30AEC3CD77BB602E7E52FFD739D6F2BC013532E1191AE65F
+ 97C5C664118B49374CEEB1AFB35FBE12AEC2D284AD0961CC26DF6E3B1E1BB626
+ 783731C086EEAF21B589D49138A58C2DBCB90E6CE90EF50B1111954C00DB3D7D
+ F4EE1EF991297953B87D81D7B6D25F5045D7E785720F85C8D779FE1C7A6C9FA0
+ 6CAD8A9265E98B7D0DB276CAE35F4FC5E7EDBD97A18424341299DAEE9C8FA33A
+ 7B501B51386F23F4013B51CDDE10807FC693F5950EA8256B400A7FF3F7EAD536
+ 89D2664986C1EC57206DD50F8C7F8A365F332B740D417DCADB08BDAB1AD5AB93
+ DDADEAC6012431D1ABC6EB607156539CC28F05F6F1B0AE2D680432B0D573E9ED
+ 78C90D33B4CE86296FB350F14BFC87570AA1618A6DA5179C67521C12B5EEF5AE
+ F8EBFAE725A7969F61767269C273973B03E3DDA4370D192E6C890482151AB397
+ 285019A8AE3F76B05BB129760B6BFEB2D65EA52D6EE16021A040DB43BC928AE1
+ 2162F81AF4BF4F81BAC40D7190B71273D9A34829C342E3DD98ED919F2F5393B4
+ 6538290B5BC1E1A1E89163849E62598557E4BE940CC7EF90B49369775A7E6E08
+ 705C8BE8B79AB21B6E414CD3ABF83F0B0445E516DA580119B55D7B96036BF9D4
+ 4C4B17DACC
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMR8
+ %!PS-AdobeFont-1.1: CMR8 1.0
+ %%CreationDate: 1991 Aug 20 16:39:40
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMR8) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMR8 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 12 /fi put
+ dup 37 /percent put
+ dup 46 /period put
+ dup 47 /slash put
+ dup 48 /zero put
+ dup 49 /one put
+ dup 50 /two put
+ dup 51 /three put
+ dup 52 /four put
+ dup 53 /five put
+ dup 55 /seven put
+ dup 56 /eight put
+ dup 57 /nine put
+ dup 65 /A put
+ dup 67 /C put
+ dup 69 /E put
+ dup 70 /F put
+ dup 72 /H put
+ dup 73 /I put
+ dup 76 /L put
+ dup 77 /M put
+ dup 79 /O put
+ dup 80 /P put
+ dup 82 /R put
+ dup 83 /S put
+ dup 84 /T put
+ dup 86 /V put
+ dup 97 /a put
+ dup 98 /b put
+ dup 99 /c put
+ dup 100 /d put
+ dup 101 /e put
+ dup 103 /g put
+ dup 104 /h put
+ dup 105 /i put
+ dup 107 /k put
+ dup 108 /l put
+ dup 109 /m put
+ dup 110 /n put
+ dup 111 /o put
+ dup 112 /p put
+ dup 114 /r put
+ dup 115 /s put
+ dup 116 /t put
+ dup 117 /u put
+ dup 118 /v put
+ dup 121 /y put
+ dup 122 /z put
+ readonly def
+ /FontBBox{-36 -250 1070 750}readonly def
+ /UniqueID 5000791 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+ 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+ 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+ D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+ 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+ 2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
+ 68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
+ 3645B82392D5CAE11A7CB49D7E2E82DCD485CBA1772CE422BB1D7283AD675B65
+ 48A7EA0069A883EC1DAA3E1F9ECE7586D6CF0A128CD557C7E5D7AA3EA97EBAD3
+ 9619D1BFCF4A6D64768741EDEA0A5B0EFBBF347CDCBE2E03D756967A16B613DB
+ 0FC45FA2A3312E0C46A5FD0466AB097C58FFEEC40601B8395E52775D0AFCD7DB
+ 8AB317333110531E5C44A4CB4B5ACD571A1A60960B15E450948A5EEA14DD330F
+ EA209265DB8E1A1FC80DCD3860323FD26C113B041A88C88A21655878680A4466
+ FA10403D24BB97152A49B842C180E4D258C9D48F21D057782D90623116830BA3
+ 9902B3C5F2F2DD01433B0D7099C07DBDE268D0FFED5169BCD03D48B2F058AD62
+ D8678C626DC7A3F352152C99BA963EF95F8AD11DB8B0D351210A17E4C2C55AD8
+ 9EB64172935D3C20A398F3EEEEC31551966A7438EF3FEE422C6D4E05337620D5
+ ACC7B52BED984BFAAD36EF9D20748B05D07BE4414A63975125D272FAD83F76E6
+ 10FFF8363014BE526D580873C5A42B70FA911EC7B86905F13AFE55EB0273F582
+ 83158793B8CC296B8DE1DCCF1250FD57CB0E035C7EDA3B0092ED940D37A05493
+ 2EC54E09B984FCA4AB7D2EA182BCF1263AA244B07EC0EA912A2BCC6CA6105B29
+ 044005DDBEAF88E0F05541BBD233977A447B469F013D8535A9D7023CC0FB7B49
+ A95CD2B6F18935C37F49E9A73E97A8602C5C26EE13D7A04A188336FCAB4CDEE0
+ 23DE9D803FD6E8D846B3F729BD36137E834E016242CD2F7BF048959DD45AD413
+ 19B985D05E5D422F3D0968375EA6A90FBEBF8B42B15F15280469D69629C08A42
+ 1C298CC027CC288B9C984239ABB96B6A891C1360D08F9ECC22202861E4CE9B39
+ 8BF088BF2F1FA565DC5674588FA9BDE3AA2E28B60C6D0A5279F0E9B350DB243B
+ FFF3C86611849D0CA0F8F1A61F0A1651EC3D4751258D893C74E8B6E348B139CA
+ A648A1061CD6D6DCE6F02FD746ED1E2963FBEA8232043AB539F158D0DDE677BD
+ AD697F771E4BCA230623B788116798335986BE74B3CEDD6E457EAB1EFF94E5D8
+ BB3FA573E85620DC3928599543C1D186E06F9D002150BE8882F0E502703E4842
+ 27E13F2B10B0853F2D7F92D07E5BC55E99C664E047BC83946C1BD0E1D9CE76FB
+ FBF81269C4F4B3E8EAAB4DF8165D9D39E7A38D1CB29A16F92DD1B93779FA7AB8
+ 7451C3A9DD04CE7589A2EB484D7B73E782D6915CBE4856FD9DF5B7D450D8F4EE
+ 09F1FF23BBEF19A836D96E510DCAB2146154DDC8FE306DFFC56BEF23B1AAEAE2
+ 0C76C8970F295A2D0B5A8CAE8019243CB3B77CE72DA92465AE903F6343C5613A
+ 6D7B843124DC42711F3CEE13A4DAD702156664298CD17F2C8486283BD50BC809
+ 4477BEABC5416EBC17B9D7BCAE21F061D0A862FDF3267AEF1ABE29085A2E0FED
+ EF4715BAA267EEA24415935053E817A3E088D6D0073641234701CE6BF3BA6864
+ 0060366502C29DD4EC08966EF7515432B2C8014F5A88495E7EC492EED21873C5
+ B2218AA57C81D8403F77E3BC3371C7DE4C2E57959F8DAC9BBF5FA47C1F91D7ED
+ 7379EA6097178FB188498CEE007D7F201AA6FAAC67CAF2880B500BD84F93BBB8
+ 1A8A8350460F0AA6F511F5A7D8D03586FA6721B0205BF44DD13326DAEEAA6E81
+ 37B5372A0BC38027A9F021ABE7C7CB22B633C2A3CC087A0D63FD7086AEE80878
+ A3474C3898E3CE2D6B6EF2198C96D78FAC9A6EF964AEDCB7C15492DE3926E579
+ 9FD6B5B7AF4BAD66470ADB5593E6A07F70021BCB28059A11DA397370C129BF65
+ 7AAB669C1BCF246FFE4159BD0E3ACAA26F1855DF25205B14D74C64E3AF4046F8
+ CD227E8F2FB85D66A13B30866230F54AE054EC53C46A8A2DC775B7629E2B4A75
+ AEF07CAD046FF6CA7B9B6ACCC850E71B3402F7DB3B9B3232A6777CC60ECA076A
+ 0E3806BB1C4B673E80209EEDF7EB91E64A9FEFEBB81F6EE8E20151703195ED98
+ 85B5FBE65B6D73EAA3AEBA6B87BE7B90A2471A3E77A02EB239D7430D7ABDA363
+ CC8FDD1C0315507940CD575F80592A8094A3ACC86D9DCF7F5F2336AD2F8458CF
+ 59212745AC99F8EB38095568F7C72EDF6D537E53E50D75E972DB524E8956E801
+ 7A24433EE2C9352C2B9E345BD21755996286682F51D66DB5E33E5F12AB9096EC
+ 8C9ACF55C97F410826116203B39972C710ADB9B5B847F010999C915F72592D57
+ 5061EDF9A98715EA0E8DAFD268F7889099FA49F246B7309728FADEE81EDBF944
+ 6003A1B92D0DFD6BF81459F3017FDE5C47CED1D947B58A5C148DC938DBB72E53
+ 72B5828A2EC81C4233ABBD6092F6ECF3C56351ED951A746719C8944D98E4F29B
+ 5940FA8F8F11E255A9F586A8EE52B8A4AC9CF6D0CF100F91E8923499B7B27A5C
+ 05666E65A58F193B35FA3068D2CF7E099BC8A4FCFD1193BF22BDDB66FE8F8BC3
+ 23DAA4AE22A4C07ED1E10D01D1216AD376AF30BBF505561CFBF626ABD5E46954
+ A3BC065E6114AC9D62F513B33BC57E939DB832D068F1CA74E6C8FAE699CE710B
+ AFEAB6B0E341D072692FF5E6752F22EF20712D8A9D66C0354FD12D091398921B
+ 6CFD2167A9BB1065490770F9C9C9740C2CABB8D9428666C39E856AE323737CD0
+ 0DC794A8518F23D933E7E4749C55E493463A575C4239C2A8B1221DAB78E17C2C
+ DCC49860AF22B95565CF1DFAE9A1EED1E1A8509ECCF2E70DBE108939855BBD44
+ 4F8BCF33B1E229167BFE59391B12E955C61C216252A6CC752F52F9680C767BD7
+ 0A9752C6B109876F6DB9334213140407EF89E90799911E644FB51AF081A56FC5
+ 938FAB82E0D8D50B780FB0468DF264277193BA7C02D5F3E04DD460C2AE1735B4
+ 0B6E85920AD4299F679E78C46CCCD0EBEFE606FC17DA8F0FB702A627AEFAD965
+ 0B7EB8704BD51182FEECF52370014116D47ED72863A34AEB49ADC5BD3213B23E
+ AB65ACFD04844D1918FBEEBA2CB538C8A7A6288B76F555826BBDDB066963CC5C
+ 22565D8C29E29E3948F804840600E93D2EE596250AA643B3C1BFB0F2C72C1934
+ 6F8C9F300AE446FEB3D188A7D45FA172DF24FD6D421FB2592433A114F59EE18E
+ 5EC84832ECC9916DE176486E73291E076987AEB1CED3977FE7B9F2F2A77734F0
+ E19A8D73E9BCD71454B2506C710A2B436C9623A94E5B017887A127CCA5859A87
+ 07EC45F945040930E9ED1987B5F51AAC7C293E39BF4BEF9E60EEF8A8F6AE9B44
+ B68B3EF4B74187E24579A305C990043D9EBA3C532134DE3FA834607D98C0DE38
+ A46E745DCA30E3804F64B9F743FDE1AD4E345BF4DAFD0E6A3DE745016E9FA970
+ 9DF84816810CBD95A332D7598F6D207D4A04FD67BE7123AF3634D45B392D7FD8
+ 5AC1982FC321244CADD45DE7B637EADC7D85036D2561FB86494254B2411C0106
+ DEB79AC7D75829CA5E935DDEDD4E94FFE893553C69626B51742B50BE767F7CA3
+ F5339A48010B49E82BE6278C5BC72806F694B1A41AE1C2F0E05BA4ACF985D246
+ 91B73985CEB225FF9DD6006E9EAD9C71502186B5135BD7D9B1188C7765801B03
+ AC123417882A9B9EACC2DD00BC9E5032ED0E1B1735A9A3760212EAE12E4D08E1
+ B1F0E88701EE15D2AEB8D58431EE8212FA1208230CCAC2CA809E5CAD3DB7B0B3
+ 0626F6D1E2E11481A97A30DDA0C6E56BEB162AE53B8C7747EE05470390EBEEC0
+ 20A4897FC98F9EAAB7D3BFC71B2B63081AE59814AA9FFBDA310BA37EB79358FC
+ BE805B710600AE707CC7DF26D263D8DFFBCDC9DA89255A38FD307882D635DD0F
+ 0A77E210B72276DF3D189D2828F513AF12C8B6F75FCD23A6ACA0AB9FDBB960FF
+ 69884334DDE11C51B4D9C75798CC4D6DD1F4E3F2BF7F77B54ACE4469FF217D96
+ F7EFB761E522D625CEF4E6ED995756BD3D5F70BC10909425DF75CD1770D0DCE3
+ 5791B810FE0C15A5C7485DDE0FBCF84BA2F244AD2297C8825CCFA866C0FFFB7E
+ 0D7432F46AEDA5485FC36E9793D06BE6E28CF89DDC73EE610FA0C5E660AEB327
+ 173AD91E78CEC140EAF576082086B05EC910C93B5D97E807A85464420C6F29AC
+ B01764F040EB1B87355479D4174429D1D7DB2D5D7A5B91A8899C838AE5561B4F
+ 73CD7FE75A86A1B10F1BF7492B71C1C5C79FC7506C401C4AEEE651C47FBD1A16
+ 5D08EFA6E0D952B1AD96E011067086D272276107EB7B5D62E0FF249638A7B752
+ 4C37410BE21A02E2DD054C6E3B674DC124C3EFDE219CC9D2C0437E64D758C4F6
+ 930DA2656A23790C6267DFDC3583B79DE1DD408D5E2BF098E7286AAB02AC327D
+ BFCB8B0E8BC5D60AA9F5F809D4D6381F62A00217B87649DF8B08556DF817529D
+ 9D099E66D758AF203A3856D78B9772ED929BEE650905636F54843C8DA8EE78DA
+ E679C019EFCE695BC5EF75E6CE0BE12F3BCC8E49E89398017FC5639917470ECF
+ 8FA2A63A98C34CA8A199EFA6CD8571BD5D1BC20043E57360A5CFA5D5E054FD94
+ EDBC53F4D84D6821F3BFF7F193E9B6C609EB87F5BAE380F2B4F80329E0C7D019
+ 6DBD2BC7FBF169BDE2B44CE92A31948A20B9297598E308A990CCAD165AAB29E4
+ 71EF8A0BBB04F83818E93ACED7037E04C985B01A480DBD33339BB17AD32D703D
+ CF72F75A1B171421C648F33F7BBA8C7C5CFA9D3B2CDF86F3A14AE6581A49937F
+ D5C0631032E4E92BCD0E8B023B7328766E5BF6E14F07DAD73860E8573F6319F6
+ 930AD0A4B8B54D2BBF7446A98877BBB76C52B3D20EB18B2894C90CC3E91BBD75
+ 47A2E61320C5FB20DE5B699A8FAEAE96E50E11421626149406EBC7E99FABF8A5
+ 3B21790B790951EBA2A4A4A0552169787DB54095D4D518EB46ADD934EABEB55A
+ 98DFC7BE365BAD33485A39F60A654906B4AD4EB12F16838756E43EFD2E90B6F5
+ 9ED0B8B84A16F6230CFA921196BA696A5C3352947CC54B8E7E9B26E18116DD99
+ B0EF58AAA1E63C3AD0C1C483909DAEA7E3AE9BBE0CC20E1DBB73EFF3CBD080CD
+ F40FAA28FA034D8BE343AEE293289D4F41576EA6CF5B6AFECF09205676314C9D
+ 88B46B72057F1C2D1AA17A9192BFD9E9E81CB29C437E6D221C9C22A1BFEC4D0D
+ 9BCED814712F9D4EED97B1E2CD0EF5C8DFA616EE7ED100EC073D2C73E5AE0B43
+ BEF567BE932B2B6AD6BAAB63156D20AF5D2F97A324BFFC23A226F5E3A2FC48E9
+ D0418272A6FF5DF19E3A9B41BB5DF5AAFD41FEF7115B99F30817B56B3972271B
+ A25F07EF16713C67CF172C3D3EBE16EAD717C9751F71225B5386BB607A1E287C
+ F58EC46CEAE91CCE4073A9210CD859D4BABDA49E71E0B6158FA1C56D103C7895
+ 12D6340F2074EE7469B9F3B97F7B18F7DF4655BBD6D352E3A3E70209D24C63EA
+ C29625EFB6111BC59628D7E007CBF773AE344AD1F38867DDD69E0C658A381348
+ D47A075BF7E7EDE435CEE61F3585637FD89EBF4CF015A1092EA7FD1245E0FB4E
+ 0498EA51250B96D8920FAFD976C8CEDC3A948446E06BD6CFC0D976BB3856D907
+ F10083F86B9835DF0A61AFA5499CCE698120C676119AF20950CA8CE0892436AA
+ 3576B9C306BD29866A0DF041AA732507007402741028FF9E856DD8E26C03933C
+ D11CD8CAF5B3239207E936E147CF86ED0700B45B4FA2AF5F2460987FB35387FF
+ 484B61064F9B4405B7025D345A62AE8F2EA256B43C39942080535D5B23F7A14F
+ 3232DA381F043CF5AEC09068BFFD87DCF2C37749FA56E1FA74A7710010CBF824
+ 15A6266BB13D7361821458B42DAA83E3F35AF73530083396F28CAB28DFE515A3
+ 44B01B9F102DB1E954E31CDE6BEDAA40AB9DADCBBAC54205781B57C0D8A26667
+ 947E551B1FAC097BD8170C505CA2C195CB25240BB947C529C9FF3E2E129574C4
+ 78A27D0280D90BAA438317B9830614B778BD70A75280951B18395522592B1A14
+ 0BA9A661C3E4B034990E8524A3628361A37BDD460EB1B966EFE512631845115F
+ F902C2FD28C5ACB75C716E4C835AEE18A0673C269EA1BB1CD95212BB4238FB1B
+ 43FD5FB1599FE4868BC548CBF979041D09F54E4AA6B3814F021FB625284E321E
+ C127D09E52A05058AD9808444E27341EBDBE346008AE7DDE81814D734C903EE2
+ 93A8768659A1B543F765C725C83DC8F6CC904C05BD7CDE293D6F81CCC0B9B5E7
+ 322D3E1D5D1704EDC07DE110A3363A24484BCD2185D9C1E0943B6668EF9A4FA2
+ 8D79BFD8AB88B6CCE8D267260FB0A7334BF6CBA3ED5B1F09422CC12164FBD8EA
+ 16C70F1AB823AB7607C38E699084732636C5CDEFFAB9F62444CAB548D62A12CF
+ DE940B6D667EA7D61BBA5225933454E5D748815062ADC6947A30590AB959F169
+ D2DC7D0FDF4E2FFAACB38FEA3CDF76FC869CD96F2EC34610C6FD2347BC8E65F9
+ 36A4F5C1A078C85528A5A5443F3775B60FC6C4CEAAAE75834D9F7720DC1473A0
+ 50F4DD56AD61C21D104A56271DC79565791AF3590795F850EF6DD9EC03BA8DD5
+ C7F360FB468B55CE580FE358CA118F09BCA82EFA998E799FBA999C695469E5DF
+ 3D2AAC4834E48B086C0F8DE0B97328AF0DC5E447177EBEFAECB443DFD6660E4F
+ 413E5D9FD538F01FD8DCC23A272A2775D007FD6A3A8B889C1DF0F0A19842B2C2
+ 5DC958735F7D975EBA580EFF295C0AEE4BE1F2C176A3DEE1DFEC837534A8BDCE
+ FB01242A06654A147079E2BBFEE79567F5DEE38A3D676D584B49A370557EB7F3
+ 6C8CA2A4C54BFDB3BE1CC79CA3FF65C37CC7FC71D3D5A5551868A294CE6A21CB
+ 78D7FFF67EF75C1BA2B3921E11B3006B162C2781485C278967C28651A4073D29
+ E5137FBC9842447D10CC3A1A0029F8E455002DD58FFB24F83059B68685033347
+ DE5F34D4396C13F56DE8469AF59DFB84AB0DCEEEC70F6D5416CB10E8CB59217D
+ C0CE6C7DF6427AE2FE7E6F5BFAA748CBAF64BB821B347337778F17021D4CA1B4
+ FFBAC8FCE1A6CF58CDD1F66B3F557D69CE0CA05E66E1CC22BBE3D97ADB0278E9
+ E6434D5490DEEB04D71EC9270DE13BA732953B183EE81E5D8A0162E5EF898CF5
+ 3D6B40280C79DAE19A6BC394EDFF9C2A6358DE3DC2B92F2AC1EBED16A29F1CB4
+ 085F9340E966708A8B817C4CF459473DEFEF2B0FC44A3019DF48041BFB32C823
+ 8A83E66735850BECC8C107462EC85D7E5BB671105EC722AE4CA746EDC3A40757
+ 7FAA7CB197D52D294B5EF425A6D658E967BFBA99ECCA9BD383EEE2A54B3A0709
+ FE7137CFA9D03F70DDA7CD6F0A9ACAF49841FA1714378953C690AC3D173AC502
+ 2B3AD969EE73771A0CC23DAF544B973082AC0E98FD2943FE6D92A884D157CA43
+ F13303533728480FA14187BFF18ECE2FA9F92C4589A22D8977AE1420FFB54FE3
+ 4F6E08A0E9CACE9E7EE483D0EBE6E895C43717DDD58B8A3A2E49CEE6562C844E
+ 8D239015D85E388B064B979442683228ACCED37B8C7AE4754F1F20B53CCE01D8
+ C44244C5AAEFC2233BF61F177160EFC7BA0533D851409105BDB006671069B9E7
+ D88A8C50DD30567701E1E6EE298205BED2F35D2FB55933F587542741CDF4BA30
+ 1FBB1020CFCD92CE7453AC7E08B575B4717E8E866660872D9F3894D450B6658E
+ 1AAEB8D2E967DE58924386E56BAF981292491A507BFB571480326378114331E3
+ D1634ABC3B69354EA50835567CA86EBEDF3937FDE1DA521177C63CF9B6936299
+ 4B3EC427BEEB601847552676F27F9CF8A94798B1C4AD74909E824BA582FC74BE
+ 2F807EF68E22386959CD2CB525C59F21F0DC8C87872FA72440F11EC22E950E74
+ B828D41D8EA2E6410AFFB503309979EB1A4A05428A478B900C3566FEB5BB7C82
+ 13E3085C7F3D66F30910AC9A6FEB8A96E772CB9F6C994F53974A91DADCA781AB
+ 9E305A21196CC9ABF886643CFA8DFBD6758629F5D9881E71865D1EFBA01DB036
+ 47092F7030E2313BA0A5199F509525B9724B25186AE2F1825851A3A5249AB32E
+ 74AA1B37D6B4F6CF0C41FEE81FACDDE240DAA722BC902A972675FDCE7B1B76A0
+ A1F9C4D2F0073183385145013449EF6E8026CF39631E13F8F4706B64F39B9756
+ 46C9EF10073D7964E7FDD3F03E0CB353E8A59B756BC75B49B740EACEC541F5CB
+ 06FC32F75303242E28381255CE2289EF2E5D4C2A52F441C0572BBAE2DF4756DE
+ 8B763D165FEE26DF9ACB6B524D936F587B94C1A6CEF84980B080E34EED057D6E
+ 57D1169FB1EA3CB70DAC7D0C21A31A0B4FB4D0A26621BFF8428F0CFF43F35653
+ FB60CB742CA7DB526BEBC1294209D8B3CF1BEEC731976F759E38F634C3C0B8DF
+ D6B50D213BC6A717C53C4CAF42D90D041A361154E06E464F85D376AAD028D383
+ 5EC90214C006AE786936FA333E197CCB3C42887346D68893C0E5C2995D516502
+ 7E5620F9021FBC4BD3BAF36833D2C8D54B6F07945B8E9A91664836C00D0DEEFC
+ C1590903AE9ABC6AC326F5DA0419AB9689B92FD23D0BC2B9E27C2C8D2CE59B74
+ 3E3103527F15A749FD580B1D8BB7F096FD2AA9C5D1700B3C0DF285F139E377A9
+ 3A116F5577C65966D14FA813899FD3FD39AA6BE9380E02F09DE4B8D5CDDDF5A6
+ 1CED9F58A9809BACE4816565148753F541D60E5FE2CA225420805ED75C15E5B8
+ 7914EC796854EFB3B5748A2D75659360B72E8C90EF2C8700545240F6996CD954
+ 8F6F7DB7AE60396D55DA7D22045BA1CDB1929A2C8B27F285BD27F7D302CBBC1A
+ EEF55B77C5FC33958D573325592F7721B49AE623A5F2ED2F75624033E53AF53E
+ 20C87787EC5E0EAFD4E9E46A0348CD4D7E7CE0F4B7EE7AB3792DB0A988B3D562
+ 397414C065CD03EE7AC828AF3AA15CAD8E565EE730CA8287BA587FC49FF0C098
+ D2C29CB21B6EB43385335AF48D3C4932B0D63203FC50A818AFA6340E9403E476
+ 9037D70D63036FA5BEDF8E6B1094BDEBC6FC5D7863BADE1AFDC62C11D31BBCB7
+ 423B963A298CAEE7A1AE327FC54C3370EB9461A731A60BAF1959FF9F3DFCA54C
+ AA6B384A02374F88FE74176293B0829E3D8F582E0377532D97B852A2E75215AE
+ E68D3A0904EC31EC357DF4171B0688CB44D580B4F013C44A7D145082FFEDEC19
+ F9E7656B649BC75576EAD6D96769D481ED80575018707DE10B4FBA81BD0DFF52
+ FE93D5C44478C45CB8627A31B5DF8AA8C99A23D58F4BE27EDE75A3D15CA8E872
+ EF35EF81C1E8CB249E2B993228E280779700C4006EB7342554D02835CB39FD56
+ 39A6D1824D012F3E59FE639F4667935F689EFAFACD4709D8DB2E73CF31B8423B
+ 5A82D2A85F42BF1BF96DDB3FCB91F68997E807F26C3BB28F74CFDBA7AAFF1662
+ 748B948E676C295B456F990D66CF03D8628FE20449E92FAA398AF4D29C38F3D0
+ 08CF72E7794F434D5B4703E2EA32D138AD574E56C84874A87E50E6E56A0358E0
+ E3E1C8AF653A67AE755D17514639A72AD4E37A8B9CF9C61A74270097FD6F2C5A
+ DADFB676B292D73252BA994B0733D2D08B91F81A70E27FC0F4A215BB3ACDFF41
+ 61960B846ED18524CDAE951BA3D96C462865681D0D00AA773A6C8E305ECD3A9C
+ 8529F63DF33513284CFDCC622C2BBA0882B6A744FA3CB94E24D6417BABF5BD30
+ 1C23DC584400F630AADBB4FB2A42B71748DD7A5010D4DD8A6C4C9CA25991AF6E
+ 444F710395B5FE9F663FE8CFFAFF0718DDAC595EED2177447BD01B03F404F460
+ 61BCBE324A17395AB3C082349288F44FC0C69ED8C4B9F7C1EB08EA9361F5C89A
+ F8A17ED07D41CEEA57BB0E6F3F01922FE8703E3E05FA94B60B8FFDB030AC7617
+ D4CE4DA5C0C7E01DCE2B1F47601A4D96A8B9528CEF58757AD14519908945D60D
+ 789E38741C7F2EA98DBC3C1480B9C4FF2568A2059907C6F805E4CE01BE02609E
+ A419678E12204AC91D5A037B80DBE2C0FB5E923F10E45375116D0DE82E0B0C61
+ 6AA57D764A03A2C917CA6AF78BFB85BA6F69DC5BBC659A5A73BCE9192D5E2D89
+ B323D840472136A8A3E783E8015B13A8D63F69FE21F5DBCDD8AD258D6DF54BC3
+ 4A4B2B1B86D03E8DF7626A250E9AF6BDBBF09E6CC2E7EE9CA492CC3D59460C93
+ 36477AD648CFD2C07E786A5DD9BE5497EAD24D95655FA88A079A6DD0C5D4A193
+ 9E4A47C403E78BB5A4172FD635411B910C751DDCDF28403EB064DFAA302A40C6
+ F84D27EC2C14FE7014A3D17798AAF236A5F7FDC86383A3DB701B85C9D7F3AA8A
+ AD7602C94225E8F1E3E8068532BB65200D33D9FE425F9AABD034E7C0F6011D8D
+ 6FEEDBE7534823FB6EC9813F10027BC1765597DF98AB7D602CB75B8B1B580494
+ 00913B462EAD33379E5741CF913568C8B84F4D0A9511631AFC9C35D95CBD1BAA
+ 9D6FD0BC293C327A4B19CE7D736F812A20872572609FD2E5BCD5BF5A4BC67C9B
+ 8E45546456BD2C6CE14B5C55053491DAFECA4B3F777C2AC16DF727BC946EC98D
+ 08B94FA3278CDE0BD6D5D8498EE59D1DBA1794F5FFA96E47125FC052154D0EC5
+ BDF3BA81788D7B63EE9ECB07AE4D2A4F0EB64C450044EEA3EA083AD83A051DDF
+ DD4B5208D10E95D3A6BE9DE07E679A48FB5963B2D6C96A10B40DE478E604299D
+ C54AADE111B32688EEFB41390507430D680409DEF44B1AD57562C1253BBE1B61
+ D364F73E604A406833B0A196991B0F436ADEAC05D0FED0D09AA318192A461189
+ 9D1106567ABE1BD615DB18467BA5E5A3EAA5D0FDE3438CC74A0B4177B14F589E
+ E5C5FEA20D1E229D9DAF2DC98553C4862FE2BF919AD143027D26474D2EA0B61F
+ BAF91127C8A11820E476A0FD35869AD4620A8D1EC6E8162C9FB9E06587B7924C
+ B1B3787686A090A257B912DB6C7E5C6C41429E37CF6E677A65D79E2B5432EAAE
+ C01E719F9C02AFA87E3E64968D8549FAE0D7BBC7AAB811F1FB743A55A18BB139
+ AA36F17E6AE92C42532CE1D219D22E1249A319D22589EFC2DCF0F720A1D6AFF3
+ 71AD88B7D369F711B27F9F99958E6D466A91E33634B851731D9DEAA7E70B2912
+ F18F5E491EBD153388847BC2D8544C272790F3893FB01E52B21F495F0DE5B38B
+ A886260D126328D727A76EE2DB9AC1521D78D9A4F69FB39561598A24CD108BA0
+ ABD19FC174EC522FBE00059B57B3FE0312776570E4F2858136850944ACD961F6
+ D0A01BBE61033816D6F6998BABA307436A0364CD60B3E9DE9CD78330B7BE32C9
+ 29F6288925C5A6D687DC45D14861761486AF31CF813965816D63632838BDA478
+ 8382A54C5A37595105546FA52C8ED6138D9A69A8F6EB96BD20FEAE023B3A00D9
+ C5DA6F1B64B003A52F9826F5B390E4D1EEB9FB813107A99E35366A89B60E3807
+ 848E897DDFE7AC7B03FE831FC9CB8DA26936584F26BD39E02508E35C0B90FB98
+ 416F65ABBC5477EAC80907BD4EF119CBDD82074CCD24524384FEA3D5A49F570E
+ 97BB4EBC376A37B278A73CC6B84E4BB50A4483DE5EBA115E05FC4600DEF04434
+ 2917EE3CF0F1C5EF5A3A5F5D7E2EEF4224BBF15F7A28507EAC6AAC74011D93D7
+ 8A669A224388F14565E27B130D2EB5730811947FD930EC8CD45F5D7C10FD77E8
+ 293DCD7226863A793EC4C61D84F45B8EC485BB4A933FF53BF717C3D297EAE582
+ CEBE95FECF81C26AF627581D0653300BBB2BE8B965C5E29B59AB7EC1E69BBA78
+ B950761397669D9F0DAF92052F06876899B5A58A68C907E0F8A8A6078CF2CC1F
+ 4D75B3D8D8B1F0DD6A085FD396A6CD3954FC36040DCD63B6515ABA8910C43C3D
+ ECAC488D9866C48F37CFCDF5BC8CECE10DCD0EC7B72E9501C72D587E770974CA
+ 44D83FBB284377C42935DF29496B00BEEB34D554B1E5D2AF260C408514F0756A
+ 61B8306464583F9F8FAA8F2F58504328A1AAFF3708D54A5CF344B8EEAEFD2A72
+ 414708256E9BC5C0299290B25D01DA8B7BECDB2ED54F481F602F74B096CC6C6F
+ 13089D58449A8AFDDB37C9A66E61B6D8E399284C21BDB3B163252B846E87C691
+ 8C02AF8AB4E9F85EA04A149CD8FE0F8CAFB4F9569F1382A27C69186E4C35E0A7
+ 6EF05659C23E16F3A796F51E9594BA8FCCC339DAAC4E425E9E93271E35D6FFBD
+ 26912E3BB5926154A2C8EE77D7050640DADF83E10E2D6CE57B7A4B83296CC3D2
+ 0BA7E2389842C8915C57D8AD07E2A1FD
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMMI9
+ %!PS-AdobeFont-1.1: CMMI9 1.100
+ %%CreationDate: 1996 Jul 23 07:53:55
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.100) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMMI9) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle -14.04 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMMI9 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 102 /f put
+ readonly def
+ /FontBBox{-29 -250 1075 750}readonly def
+ /UniqueID 5087384 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+ 3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+ 532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+ B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+ 986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+ D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
+ 9E394A533A081C36D6F5CA5FED4F9AC9ADE41E04F9FC52E758C9F45A92BED935
+ 86F9CFDB57732045913A6422AD4206418610C81D882EE493DE9523CC1BFE1505
+ DD1390B19BC1947A01B93BC668BE9B2A0E69A968554239B88C00AF9FBDF09CCD
+ 67D3B2094C11A04762FE8CC1E91D020A28B3C122D24BEAACF82313F4604F2FEF
+ 6E176D730A879BE45DD0D4996EF0247AEB1CA0AB08FF374D99F06D47B36F9554
+ FAD9A2D3CE451B7791C3709D8A1DDDEFBD840C1B42AB824D5A0DFF0E0F15B0B7
+ 22AEEB877FF489581DA6FA8DA64944555101EB16F7AB0B717E148B7B98D8DBFD
+ 730C52937E226545CF8DC3E07C5BA30739BAFCD0F2B44275A6D503F582C0FB4F
+ 449963D0AD2FAFDE33BA3D77BCA9D1DF878DDAFCA2E22CC4BACD542B282164C7
+ 97C2BDE318AF9D501CA21F6E662E7AAB75A5F24D2C182E598D175D44E88AB19A
+ E7CD59584F95B389183EE21B525BF52A3F23C0FE5383A5565A19361D716F508C
+ AAB78411CA5A4D27552CC1C435760D5A89D535B71C593E755C616661363308DA
+ A683F54ED0C23FB2C225A008392B0B719F66F11A946A090B7C00B662A3C69599
+ B4ECB0CC70C85C4BBBF207E0026F6C7A19F2ACFB7A60804FC98A4BFFD7BFFF2B
+ 9529E6D9D4238002BBC255BC62959D6F3381FE06E0621B879D5FE5B541D45A1E
+ 759A6E7DC32B1D1632368D09A97039DF255B6492B1B2B7E2C1434E8306ECA7D3
+ 5A79B6D614B4979F10988BC76ED53A5F45315CD7DA216221F842FD0F3E050DD2
+ BAC23C984D506D8F7D614BCB6B244F5F41321549BB0BD041FBF3053307168680
+ 3435E9C9445A59A7C666418C4F2512C32058B1CE1EA47A465A4C1CDF8835170C
+ 41FFD588AA252FA656CD529A971EFAED8361BE8663C8A498B9B46F2F7721E274
+ 841BF68FEF13DF70E3A40AFE2839D1DF53DEECF80A8999D3E237780DBFBC927B
+ ABC27ACA21A9D44BF4EA1C5872EFC7DC7C21C1983F5CA69FC9FE90D48F41C566
+ 3160471E8D42EF123F81DACE178D582599A604C79B94AC89D6F5B5C7B74ABA82
+ BECC9113E7013A6131FAC788A548867CCEA8D5B0182EC22C0323D2F81DB337E3
+ 875F14E812CC69FB04DC051BED04D5BA90212565BB3E9D002DBA7BED643EDACE
+ CEAD10E0B9D7896F9FF83233AC8BB04554227E9271245CEF1AFF7082C159948F
+ B630866250ECE17A7AECBDF7216F099B0D0F3AAA77FFB2B9BA7588CA050A8437
+ E6B65103465F7D201326441E744D5FCEAAED183E348728B02E5D695264FF99B7
+ 3391C03221C9FF222678D251B51A563772BC842738F075B835591460140604
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMR6
+ %!PS-AdobeFont-1.1: CMR6 1.0
+ %%CreationDate: 1991 Aug 20 16:39:02
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMR6) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMR6 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 49 /one put
+ dup 50 /two put
+ readonly def
+ /FontBBox{-20 -250 1193 750}readonly def
+ /UniqueID 5000789 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+ 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+ 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+ D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+ 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+ 2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
+ 68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
+ 3645B82392D5CAE11A7CB49D7E2E82DCD485CBA17D1AFFF95F4224CF7ECEE45C
+ BFB7C8C77C22A01C345078D28D3ECBF804CDC2FE5025FA0D05CCC5EFC0C4F87E
+ CBED13DDDF8F34E404F471C6DD2E43331D73E89BBC71E7BF889F6293793FEF5A
+ C9DD3792F032E37A364C70914843F7AA314413D022AE3238730B420A7E9D0CF5
+ D0E24F501451F9CDECE10AF7E14FF15C4F12F3FCA47DD9CD3C7AEA8D1551017D
+ 23131C09ED104C052054520268A4FA3C6338BA6CF14C3DE3BAF2EA35296EE3D8
+ D6496277E11DFF6076FE64C8A8C3419FA774473D63223FFA41CBAE609C3D976B
+ 93DFB4079ADC7C4EF07303F93808DDA9F651F61BCCF79555059A44CBAF84A711
+ 6D98083CEF58230D54AD486C74C4A257FC703ACF918219D0A597A5F680B606E4
+ EF94ADF8BF91A5096A806DB64EC96636A98397D22A74932EB7346A9C4B5EE953
+ CB3C80AA634BFC28AA938C704BDA8DC4D13551CCFE2B2784BE8BF54502EBA9AF
+ D49B79237B9C56310550BC30E9108BB06EAC755D6AA4E688EFE2A0AAB17F20FE
+ 00CD0BFF1B9CB6BDA0FA3A29A3117388B6686657A150CE6421FD5D420F4F7FB5
+ B0DAA1BA19D638676E9CF159AC7325EF17B9F74E082BEF75E10A31C7011C0FFA
+ 99B797CE549B5C45238DD0FADD6B99D233AC69282DF0D91EA2DBD08CE0083904
+ A6D968D5AE3BD159D01BDFF42D16111BC0A517C66B43972080D9DD4F3B9AE7FB
+ 11B035CE715C1218B2D779761D8D7E9DEBE277531BD58F313EBD27E33BEF9DC5
+ 50C7821A8BBC3B9FDF899D7EAA0B94493B97AFEAC503EB5ED7A7AB67C3039A0F
+ BF0BA4B455D035FF3126F33A4DF59FF96752CF58DC0863924F6042B14DC2DEE4
+ 099CAA764A8EFFEB78F7FFD276F0928BA32624C3A69ACEB8777A461298B201D3
+ 4DA271476B8AC8966668D4E28A6FBA952F6D295AA80CC09B0CFD6BE840703B07
+ 7ED93999EB5630C2C7CD9BA683ED457D1341C3AA702B5FA8593A51E8E9165FF6
+ 1385693E19161FF1ADC1FE0BE16FD3AFCDC3916A309FCE6B3F2B362C9F958A16
+ 821E1EB2DD899522DD3155C0B7A7F0876E4DA32FD30D8289266D9F05E77F1F1C
+ D3BFD2D4D6C8B6FDE0E8957BDBBEC54458C70B96F4CD77E734EE0CF620684024
+ EB05DF0536FAFF10FC6F6050AB338D44EA9C38150D3779A550C505C06D417A71
+ 62D41C2D23843E0A2A73F72D4B5286E3CB7B8695B2434479776A59CB3BC6D352
+ 677CCABF4133E20F12D91CFD8978C09FB81DF801707194AB8FABA9A6599C20FA
+ B36DB0A166490D20BB0BD53581A8715B099754E6FA0F7D2892F5573380DDFF1E
+ F9C3DA9F74BDBEBBDFA5715AE23264F967BC7841CE58E5EE2764555978D904F6
+ E8DEF6ED66C478848FC35A9827ACEA1D7CE85C8626C162FF296869DE
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMMI7
+ %!PS-AdobeFont-1.1: CMMI7 1.100
+ %%CreationDate: 1996 Jul 23 07:53:53
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.100) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMMI7) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle -14.04 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMMI7 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 60 /less put
+ dup 62 /greater put
+ readonly def
+ /FontBBox{0 -250 1171 750}readonly def
+ /UniqueID 5087382 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+ 3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+ 532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+ B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+ 986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+ D919C2DDD26BDC0D99398B9F4D03D77639DF1232A4D6233A9CAF69B151DFD33F
+ C0962EAC6E3EBFB8AD256A3C654EAAF9A50C51BC6FA90B61B60401C235AFAB7B
+ B078D20B4B8A6D7F0300CF694E6956FF9C29C84FCC5C9E8890AA56B1BC60E868
+ DA8488AC4435E6B5CE34EA88E904D5C978514D7E476BF8971D419363125D4811
+ 4D886EDDDCDDA8A6B0FDA5CF0603EA9FA5D4393BEBB26E1AB11C2D74FFA6FEE3
+ FAFBC6F05B801C1C3276B11080F5023902B56593F3F6B1F37997038F36B9E3AB
+ 76C2E97E1F492D27A8E99F3E947A47166D0D0D063E4E6A9B535DC9F1BED129C5
+ 123775D5D68787A58C93009FD5DA55B19511B95168C83429BD2D878207C39770
+ 012318EA7AA39900C97B9D3859E3D0B04750B8390BF1F1BC29DC22BCAD50ECC6
+ A3C633D0937A59E859E5185AF9F56704708D5F1C50F78F43DFAC43C4E7DC9413
+ 44CEFE43279AFD3C167C942889A352F2FF806C2FF8B3EB4908D50778AA58CFFC
+ 4D1B14597A06A994ED8414BBE8B26E74D49F6CF54176B7297CDA112A69518050
+ 01337CBA5478EB984CDD22020DAED9CA8311C33FBCC84177F5CE870E709FC608
+ D28B3A7208EFF72988C136142CE79B4E9C7B3FE588E9824ABC6F04D141E589B3
+ 914A73A42801305439862414F893D5B6C327A7EE2730DEDE6A1597B09C258F05
+ 261BC634F64C9F8477CD51634BA648FC70F659C90DC042C0D6B68CD1DF36D615
+ 24F362B85A58D65A8E6DFD583EF9A79A428F2390A0B5398EEB78F4B5A89D9AD2
+ A517E0361749554ABD6547072398FFDD863E40501C316F28FDDF8B550FF8D663
+ 9843D0BEA42289F85BD844891DB42EC7C51229D33EE7E83B1290404C799B8E8C
+ 889787CDC0C51802EA1E0C63E6DE20980D3DD206F05365BAFFC8480251B55F22
+ 604D59D4C2CA4A8F65FBEA5D588E362EDD7BCFE6BD5F7F11160EC61912C1C4B5
+ 7062193A966C338C5DA9A059FA5F4B7262C6A8973A5566FA024EA42C609AA587
+ 4BFB0F642737EC09D42F4D95C419C25F0008B625F00A1D0A10F2E8A45E4F497D
+ DE1AF68967ECF18ECA3A2919A5769247B38AF39084D6328DB47A11606DDCF69D
+ 17D471D165C5161B04A01C6EED7F2B1427B82F6B6E50171F18E570EB5EDC1F45
+ 3212A2F1F202987D5F8A3F2841CB24F6190410D49B183421E6EB5F138B2F659B
+ A0B18267721341C8EF7907B02EEBB82C3B3BA7E7FE89D4FA240CDE585FAC1C67
+ 966D3DCA80A1725D6C008082CFFFD1E42D98B17A63233F3E8F5F3ADF8A9CBE47
+ 070F851CD80D9860380DE9BDFD2E34A4AFD03149FA04BE68145344C4144EB69F
+ 70CC929D7014060AAEBD220CB3BFD6E9EEA23F2E213AF397CAD50CD982EDF759
+ 1F22420BACADA3550B974507E271332FD68415C27DF380AB387429C0758B7345
+ 548524
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMSY7
+ %!PS-AdobeFont-1.1: CMSY7 1.0
+ %%CreationDate: 1991 Aug 15 07:21:52
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMSY7) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle -14.035 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMSY7 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 0 /minus put
+ dup 3 /asteriskmath put
+ dup 102 /braceleft put
+ dup 103 /braceright put
+ readonly def
+ /FontBBox{-15 -951 1252 782}readonly def
+ /UniqueID 5000817 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
+ 7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
+ A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
+ E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
+ 221A37D9A807DD01161779DDE7D251491EBF65A98C9FE2B1CF8D725A70281949
+ 8F4AFFE638BBA6B12386C7F32BA350D62EA218D5B24EE612C2C20F43CD3BFD0D
+ F02B185B692D7B27BEC7290EEFDCF92F95DDEB507068DE0B0B0351E3ECB8E443
+ E611BE0A41A1F8C89C3BC16B352C3443AB6F665EAC5E0CC4229DECFC58E15765
+ 424C919C273E7FA240BE7B2E951AB789D127625BBCB7033E005050EB2E12B1C8
+ E5F3AD1F44A71957AD2CC53D917BFD09235601155886EE36D0C3DD6E7AA2EF9C
+ C402C77FF1549E609A711FC3C211E64E8F263D60A57E9F2B47E3480B978AAF63
+ 868AEA25DA3D5413467B76D2F02F8097D28419D2EEAC108405E4AC2173E4304F
+ 5A8445E1A94C3022676F3B8E366AD06FBA451263D1014AD0ED97FBE558F363DF
+ DA6BD1699F2B52BCCD8A3F91F6F7AE84A72501DC904505DE87C6F10EB1874721
+ CA18FC4A7A7937BB915589A460E62278A7C52E2D75D8B1A29458ADE9F21B8596
+ 5D659D3BAB69F6FF11DE44938A28FF578EC12502ECABB442F42FB29C2E76B5EC
+ 9BE7255337BE899A9126EB7CFF1465CCD70877E16863C2A00C2E0BB4F3C8215F
+ AA0526ECB9D656F2F08E54994170BB60DBADD92ADAE03829D4F9BFCBF4A1CCB9
+ 64B518BD068EDB92E7C3D0F954AF63F051E1D9531424BFD7B47122A986191CE9
+ D1932DA8F549A439936DC5B41183B8F06FFA04EB737108F86378D7C791038663
+ 19CFEB6E26CAC5A284D2159240543E4EDCC912824B2E8CE6E88A6A6F090306F6
+ C504C1FB13517F2C136977A51D274CFBCAB6441AB5B5686F239483ED693A3C20
+ EADF3143877CCAFBA9CE194116E564FA1AB215CC8E5873988EE6C6BDF3DF9082
+ 768B33AE70509258BA658B8C0393E9CB98B2CABDC9FC58904CAA743964F69F6E
+ A5CBC181A501F7EA98A38CEE87F65DA8619A07278AC91D2359114567EF52D17C
+ 176496570CB2F965E646628886BD66F32F70C4647648BFBF895A81F454457192
+ 40C31A3C59BB21FAEF84F3DC86E0DFE20A1D2F615BAEC6381EF8539027FD853F
+ D910727580A23D69E626BEA87BE8F1DC07EEA21481471ED70DCBD74D809A2D00
+ E63D2F33323A812884D8EEDC3F2268DFEF7B83B38AB9556C06CBBB1A865C8AE6
+ DC8E2E604447E970F5BE29264276C490E1BF04BBD3EE01964528F56565C4BDBA
+ 14355A34652A0987E505E24D53C61A1FA3E3A156E9D8F0B3577B99D53AA94ED8
+ 471E3AC1B3903B30A8C6296713ED8D87AB3E89A37CE295BDD9B47A88A72F40F1
+ 9AAB8958C1898566C545260516049392C95FEB95147C081F9225626C11382D48
+ 14E8607C772E8FB747518527238079C6328FA35E696A4CC8627EEC7795E36693
+ E4B506940E6D5249B0FF5CD472AF28CF2C015EBAE973FBD8043F0452CB5A7924
+ ADDB7E19B85ECD0FF5111FE1F705A880577F9666C11D10DAFCDBBEEF0508A1D1
+ 684F5CC4CD
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMTI7
+ %!PS-AdobeFont-1.1: CMTI7 1.0
+ %%CreationDate: 1991 Aug 18 21:07:18
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMTI7) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle -14.04 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMTI7 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 37 /percent put
+ dup 38 /ampersand put
+ dup 44 /comma put
+ dup 47 /slash put
+ dup 48 /zero put
+ dup 49 /one put
+ dup 50 /two put
+ dup 52 /four put
+ dup 56 /eight put
+ dup 59 /semicolon put
+ dup 61 /equal put
+ dup 65 /A put
+ dup 68 /D put
+ dup 69 /E put
+ dup 77 /M put
+ dup 82 /R put
+ dup 83 /S put
+ dup 88 /X put
+ dup 97 /a put
+ dup 98 /b put
+ dup 99 /c put
+ dup 100 /d put
+ dup 101 /e put
+ dup 102 /f put
+ dup 103 /g put
+ dup 104 /h put
+ dup 105 /i put
+ dup 107 /k put
+ dup 108 /l put
+ dup 109 /m put
+ dup 110 /n put
+ dup 111 /o put
+ dup 112 /p put
+ dup 114 /r put
+ dup 115 /s put
+ dup 116 /t put
+ dup 117 /u put
+ dup 118 /v put
+ dup 121 /y put
+ readonly def
+ /FontBBox{-27 -250 1268 750}readonly def
+ /UniqueID 5000825 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+ 3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+ 532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+ B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+ 986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+ D919C2DDD26BDC0D99398B9F4D03D77639DF1232A4D6233A9CAF69B151DFD33F
+ C0962CCA6FACCEA6B71BEEF7C056FBD376F2F0D0BD6BE0A0A8259139B28B99C6
+ 25119B8C60FF7BA002476930DFDC2F6B1B5A80F1C0E544A22E3F0FB2FEAB64B6
+ A509B61E1AB96121FBF7F2BC27CDE5B4961048FC2169C8DB745FCC7AF0EED507
+ 284038B15CE53E69AA22CA76C2A208F6AD8614CD500D479A5E0FD25E7BB14C7F
+ C47C503E4CC38975CB0A8F7E109665FB69EBAE6EB68B2D6FA3C967D5BDE7830E
+ 9CE6F13DFAEBC852DF1D7D0CDD33DD4D5CD6D94DD8AE0D48AB638013CF75A25C
+ 04FDEA8775EC52A13AF40FA41F7354624D917EE620318C702237AF8C0E1FFA02
+ 127F862D4DFD0A56774235A881AFBB8F7F4BCB33811C581CFF38462F669B7F97
+ 1F97AC09373B8F9B7E653013AF8170613E8D7E17235A893BE296A0CD2096B71F
+ 16778388993EDF1B003EBCE23DD02949CBFAAAB5D9F6A08178BFB8ED1043FC1B
+ 0B90D9AFC27B19783740E8DDE0E5E01D116A8CB083C721FBB8EBF71018A9570E
+ 78590CD831116BC0FDA4229F79A581874FC3A1F108A4FCA80CE27FA54A2A7505
+ 5BDB3D52E2595512837732322FB5BBE459C0205EB38439E34A39544F0A1567C6
+ F29FBB7CF931708C8F92786CCBCBB443D54462B3B4B7BD38E90D325EBC31BA05
+ FB79C04C716319BB89139C80B8AC69378A13AB1A14B3E5D1EA15CB5936D07912
+ F4BECD821DA4B42857AD100F76F457321157D8552D351A76D3C4CDACA112DD1B
+ 17A8E6AE4B2506AFCABE4B1A4E16495D363BFD4C8D85C255A2E1DAE06D5E7837
+ 3124D9AAF134A6FAFED3D47621376F2A305A4C116A09BB5F7230F12486D1E6CF
+ 30B0CB5C4DCDE4313A20E0D99622392924BAB6E832224FDECE1467AB597594AF
+ A0C3E758C792348175F66F22AAEA93D794CDEF4A30D0256760A490B79B09CB93
+ BAAB6AE4252C1D066E62765BADE686090C36FB6EC7E1390C4C24AD7563B82084
+ DF556B6B256F96ABF9ADC561EF911526094BD316647A25835F84F5106EBE4A7C
+ 1FB8E03C5B5E45AB22D09A964FEDDE8E56C15DCD727CFB0658556E47843C840D
+ 3F6EBF57638DCB4E7F0897DAAACA6B40B9555976E7FDCAB69D9854C2BE9E5FBC
+ BB0354FFEA84C1960AD8A6B18CCB4A4DEC0B7041F4D1C913002BA02A8A865F3C
+ EE26480B916BC8EDDE55DDBD36A2FCBD5C5DDB6A340CD300561A9C229B90E83F
+ 62FF193FC34152373525147F730C317907988197DDE9B22C69F2DD28A0DB3682
+ 6A622ACDE5ED92C853877A1AFB251EF13B6F5B6912FA63DD08983E93EF8E5FCE
+ 141ECF3C7A64CF6933DABED5E161FA1F702620C81C95E18B300CBBE92816F391
+ 3A40FE26D2C785BC3B3CB1F68377836744DDDB7564F945360B3A8F92A42F5D4F
+ 0FCE606E98B20378FFE764080A1436BCA49B09EB0C43AA045E46D988BDD3D424
+ 4048D01569A690BA74FA46EAE7711EAC03EC5A4EFDC0D9793B81F9842A81D246
+ FD58FBC10E9EC0AF82DDBB684E7A862EFBD493D0C81B85B1E61B53AB50523CCD
+ 9D71AD55327E20216A1FA5F753D942298865B18D7017FCD588BF0A93A344E877
+ DFDE900196D81044D2D37B6C594C32DF732F8A402D0624207ED25CAD94ED8D4F
+ E5F41432C79676FFD313764C48288D07BEA83933355C1D3B3769621A68758F2A
+ 0C9AD31365B9244310FF21AB99032A2388E3D62E2D09E55EEBA10B1B6B2C57BB
+ 657E24A1D3C68D59892F2CCFD98321FBE57195D371A64782C4F5DB7D60F943F8
+ CB301880CD88612C8682C072AA9B28115E731B247677733A520491672758A217
+ BE70F91FDE7D9DE98A859752DE07F81E497060334BAC6A0978A92731513745E0
+ 47B9FC09EE4018D0641F142FB572F69F13C7DBC95ED1BFB668BE373B6DCAE935
+ 4D91D1F38A63C3B058A6B36D1A662CFCB83D29A9BC0A64DDCBAA5CEFEE685260
+ 89023DD12C5EB86F6A4B816DCC324E179C81FD27456B9D08BFC0240BA74AE98E
+ A0F56856029C8653E142BB7D12178110B09BE1F117C5F1882C6308E786AD28AC
+ 8A29F72B0AFA00666F52940F3EDA5BBECAA7A63A8D15BD50BF384EC5D76AB097
+ 3BAD39224FDECDFB8C59E758270E3A98C3CF2E632A93B235FB1147DB55B7A8D8
+ 1666E056390CEA4AB89D9B0C8C394299AE52F0F682226A3623DAB968BA3EB168
+ 87CEF038BE92047806084E109C9FF3497DF1AE9666200D65F9769BF3966DA0CE
+ BB5BABEFF2A52347241ABD632E19B80E8A209436E9AEBBE0BB0295204B671B98
+ 0E6309E1248A7ECD229DEBB7B61B76950F36DFF26C4ED7D1564EDC3818B2BED4
+ BFC52F39EB948D7E405055DF9511E9EC1BCF7766B2706B07860468F5304BBB96
+ 73C08314B141B2C98594098A5BDE16910F8C033F718B445F106F7D2BF2FEDD01
+ BA3611EA4243B061CEA18E2FC6DD7B10C05CA5248F1A6DE6D45C41737EF0A241
+ CFE87D9DC4D7945CFA69B58265F113D114416D89B6A9FE7BB3AC09C515D6A13D
+ D674FFE5D7FCB90D608CDBAC9856FB6DE9623C8D392299BA6E281860AC0AEF62
+ 232CE3CCCB38CF505456B9287D360068391D893D756E96EABC6637FB4FFF15B9
+ EC8FB139EB39097D6D970BDA20E49F653DD6DF366D6BC436B9256CFEFDDA9895
+ D1A15BB47CD4A62FEB04BBB141CC4A5321ABFBEB6461AC42EC1B4658287276BA
+ A4E15E608A32166D70E364CC581771B50C2C0CE177287BA20EF5CC26A751C271
+ B98543CF62E0444416AAC9C49B50EBBB7ED9473D77008AD1AA9C009FAD151389
+ E630969B44C0820D6A225F0FD2276C8443AF01FB07112DCD3E0C1AE755783ACD
+ 5EB13DB99F13E8E00DD9867B7A529A4EDEE5EAEB1DDE943424BA59E3A13A03F7
+ 89BA4B7B84B22873B0DD6B04FAD09074E3F1F1FA15A21BBA43AEF4C7B7548490
+ 01385B2B8FA152F430793FAD9E87D5111641B8342DE1CF934D0CBBF428C20987
+ D702A82255D134044133EBE742149503761C03303398FD024B717531BEE0FD25
+ EBBDE6539F0BF8269684484B0A6A0A31232FB7115539970E7B3BCB551112788E
+ 831D090C43AD54FA8305E439AD9CACCDD5D3D77C44D06F51939190ECB995FD92
+ 3FD1AB5AB52788BBC95662331B4CD8C345AF90D57F2D2F75D33505C7BF7B8480
+ A00C74A76D8E95056BC52DF2E6F926516E2BD154F1383986C4729B7C648C79E7
+ AD4427468010EB3D84FBE245C0C0B9C8422CA8379780124D8B9FC5C67BBCDFFB
+ BDB01D934CD636D18DDF610C499FD19BE04CA7F3B48E1EB1B470B234DF5C605E
+ F1F4E37574AA608ECCF677F0F099C7B75A44AAA47F465198B16842D13B7D7E70
+ 2E8F6C505095D0C5ECF8EDE136DDFA30F4379B0523C13F3F56BAA8F18BBCE5F9
+ 606CDA8AC44F83B269063A0E3511DDDB57EC83E36A8CE271352CD503D662C9EC
+ DADF8AE7589D72DEDDB995E4378CF68A097237EB2BA447422F4DEECD08BEA6DE
+ BE9A0532931B75154512ECA855ADD2B18E33EA912827E0E34C22F50751F98EBA
+ 274CC0E5412C1968120D8C62002AED18820A415E41939249170A19DDC5CD6CB5
+ 9F77E447F98C1F5F128E60EED799594A7E342F0C5942A3561CC897D0C77C6A00
+ D3C564C6B48019C6632A3A04945138580FE15E73ED5D7BC57A25C81B61FE5B72
+ 7C12064FDE67428D61AF7AF7E5CEF17AAB14AA46D609E9FA43E7ECFFD75BF472
+ E99D8F5D0D15419F8C7D04575D733E36483E692301DEFEA8EBB97A6B8537D7C0
+ 75A7D97788E012906EA409E15E7CCD4682A1520287142C488E3195A7FA92A160
+ BB4F263B8B2F659BA33F84FCB405CC9CF3409A7834A1FAC5D0078B9C33DB75A6
+ E98DA71749BB79396D753C69A6E356E89BF1A0034B372105FF288A841D24A8B4
+ 5F4E5551D41509D61A984F711F448B726661DB328FDD2F1549D35A69F29F335A
+ A3F81AB38A89A627A035544EAAAA1E57485D2E881957FE444D68C4830F5C7981
+ 2CAC142A29FB2B45C6564620DDC23DE5D71394F7D2EA09EC6F565AC7D2A6FC85
+ 0003312454D6CE9AC038BF0E02EBCC39EBD115FF726E6306F56C4CC8431A2E0F
+ D70E2172D3438C13AAF1C1667D844F16E6E2701E5D3BDA618792F13717D91A61
+ F7FD245000084BB9C458D365A3AC560A8753A010283F3E13CC5C8635E5FC22E1
+ 2AD8248B32765871C2C1B20BC2A48D64EB60D8F640318300736BAA6B8FDBBE02
+ A4F6006FCB2701E8EE7D2099A573F1C4C2432FB7CD15EFDAEAE7AEB37FFA290E
+ 8182CF61E788B18EF0061531E149EAEA30573E8EB96E30805F0726700FB018BD
+ B8BDEC42A711A342194BE8E11D0B1C0538898F5B08B48C8D7A0A02D1E261B478
+ 50D4CA77E5CADC8624A408252FBE10718D77F4486C6A1960B9E4D11CFE4D7538
+ 81541CB6D8D299ED5EF7A848B629CA6A9AE95BBE552972EE7FE7375FA44C2594
+ B3B806A63A9BB08427D142467C69A309AA37CAE9BFB6804B01F5E74C1B489769
+ 3665F3A2BE43D10618AF92B55E21DC6AF34AD5909EB7248F03A8318A862619F3
+ A74047A58DF4D846EEAA8754E2920AD088D5AEB3DA1AA9EAA17E7EBFA0F366FE
+ 3B46F2FBC914ED3DD4F992E2C8C9E4BDF69A3E259A06C9E414D076DE7334EDE6
+ 9A466D1F10C7F79912E49C088E8EEED1F0E243E4EF90A3BFBF7E56AD553CDDAB
+ 1BD04D90D0645E2FFA7C8911CF186009E5727964C8B2B6BF1AE47198FF76DCB1
+ FEAF169276B03EA5CA854500107A40A0C53855806052534CAF9CD630DC48F42C
+ A795C21013F5BEC034616D636CE6A4FE6EBBC3D7857CA1387EE0354BB5FDE40C
+ B6A0B3B71F33A7A771767B3A4C3C2C7BC5C68B3F9E7693B2FE68677427B07DD2
+ 2C9A1C218A34329BC0FA4F474BA8AA57F7942229BF702F89E30308C108686B80
+ BCDA4735CED6BD8AF074C2DA791301341FC18C4ECDD293BFC525B4829A7F5405
+ CA89B7FE7C727AC8F2BE242573177C1391B9C4263B960A3D876345931CAFE52B
+ 558CAFA599A7DB0374575E7B5DBDCEEDBAFC51CF3B47779E22AFA9C431A26311
+ 18DFD79A6357AD5590F859004647E18BDCA6B996C494219A8CF8F0055A50E234
+ 6265E87F37EECA50A6EA3CC074D3948DD4BD296D0B232F6A17C1F44448AE2F01
+ 685AC56FA75B1EEF150F00142DB95A7C7B6C32E4D4B66F765B7434855774920C
+ 66539BA140DD632C8E731578BFEAD63EC431DEB892C752BF417D3932D4D42C33
+ D526897551A6EB34BC471D9D1009629AFE84B4992EC77388F17FAFF5DE5E9BF9
+ 566ECF15D5D77EA7989736B5B1A2D0BB8F5E71A1F658CDE93F71CB6F805E8D7C
+ 96ECC1595101B4DA67A8CF62C78F9644BB9C7911E0854031A2D1A541E62B9699
+ E3CB22EFC3DA31FAEB5651C8CB681A125E62B6BBCD46BE3FB92D38B69716C81C
+ 68C54568C3F77E35023928CA50CFACDCC63BAE096991E871388B3B231299117D
+ 2D47985D6DB7E7911CC6F273AAFA3B3633F1070173D7CA4581B6A58D523EA80B
+ E2C4A1E8340DF7DC41A918040FB61ABA7EDB9FE29C00A1222297D717F5D226FB
+ 241E2707F561CE8E1D3917E693095B89FA0B38FDEC8419DA7A79F8D20F17A283
+ FCF9BAC5CAFB4CE1CF35297AF06AD746538E98E78A0552CF13F9AF9CD979E6B0
+ 762E16254604E2EB1DC3B1DE594844C32BF958CA21EF9E2CD394D9514483F91C
+ 33852489757B7A07D5DC747D4E3B16B4C94F5B157ECA25A9887502E33C0267CE
+ B3643B42CB7D3F93E767D73F88E63A0628A1F5B9C7C6141D04DEAEB1F59F89FB
+ B981A97DB1CA72CD6BD145A1941D03C3BA3B305FD9A94A9236ADCBBF83207C28
+ EFDF75B301B618C36A727D31F6A4286ED75E9F4E63CE189AEDCE583FD7491781
+ 87C07266E8CD55E1D71E42A3CBD54D80B41FC4CE5AF44B1712B10D056C13213E
+ 20C6AD07B83B134A3271A4EC9E074EABD3A9086BC8E6E71A7AA18D6A92727153
+ 382C618212D68B81C9ACCB7191A6B389B420B3CEBBEAAE189030286B04BD383B
+ 0B9F34F4B5FEDF8A972A061E65CADA263085E43735EE1F4C2BE4BF69462D6D84
+ DC04B27F9A9EEE138698DC2F750A0FD03D3B71B54E6CDC789B46D189604EB722
+ 62AB417A60361ED1D25A3C8AEAF290074ADA7BDD28102F998E6CA9BD7C7C7343
+ E2CA7F27DB8ACDC14AA2E7DF86C6A3700CD20BF11A309D0C6B25B763EFD6675E
+ 5199D66B3293091C6407D083D035BCB7260D10CBE1EC6B01D6099E85B0522550
+ B163BB9BAE27C2FA9360A72E61097A0D33102F9C93F28381212DAEBF9137CB60
+ 7DE7838D1A18F1584C99406AF162A5F82AEB067FE7105D3491FD5CBCA447168A
+ 2325632EA30C28FEC3AC3E5F7AAE32C918EFBDAE515738FD7660D505DCC10327
+ 12AA95822A47F6719446D48CB3430DE53EC1787E093A6E23AF831AF14A65D37C
+ EF383538E7CD634E5FFAD2F4EB0C54867C60A82DA89775897305E8A1B4987A6B
+ 2EF70136A95D0F25AB9402B9584A00EEA6C510AF19D1564A3829FDF10505F1A5
+ FBE96D708F083D99B8776796765DD28E774D2E6D045BD539A6E22D34CB7B51E8
+ BB00501C2B1B86CE789FB5F2F53D543B11348A6B95B60F5329CFF440ABBACB70
+ B964A9B394592A6A0A1693B79F96C54EE493A97F94FCAF7FC8D621A957FC0759
+ D92B3103D551C4384F8DC9AD893AA64206C42F539C4EE789147F95986168E166
+ 47731775956643030F18B7B9C938350BA1541ACB1642AEDFF6EEFECE4C0D2E67
+ 615714AA645C2B35F2EDAB972FB71C6CA7235632256B3344F8FFF348FAB4A212
+ 7A9C72F632422A4FDF00797181B8CEE177C2F48A9052BF780CC05EB8E7A6939C
+ 2EAE9B7AC5A0D7160763CE928123D651AE75C792FD467A011DDDF1200F6415F5
+ 573E920DFF11F67341490AB8DFC925547125CB0F6DBA10FBB28CD4E67B44B88A
+ 9BA179547246202585DF469043FD2D31572487DD6BF1C86BF04087C628CF4279
+ 267FFB658538BFDD471393068A61FC5B56D1A84EA48D268D8C5F3C1296B969B8
+ B5D7C601FDDACE3365466B911DE7A1556DC3145A6CCEC25ED6E3C5E9F0A46EB9
+ 9402BA906FA74ED7B20037395BF4070E22985BC0C3D309A09BD5BB9A18CE73B2
+ CCEED5EF1FEF76AB74360DA72A1F6CB25242D9D0FE18BC25E3D3A9BA2153403F
+ 2625CE7DD3945B216F973CB11D7902046AE4FAFCA82A723BC56E6C61E9901FC6
+ FC91C2540FA984F506D2F709A4557F9C28FB3D412C879FF6B222C1D96B421148
+ 37B76D28ED777D984E3C402B239BDE636FD59AE61568ADF293F57DAA67001D59
+ 9143C06F53398154FC8922ACD6F517B5493D295DFDD07F91B9C928787CDA9CB4
+ C4374327F8BFE201371DC7D7C2D115C21C58ED276EEF6DE973722FDEDD034A29
+ B4F082EDC32694B753532A34CE4F8FB352FB91F561CD79CE0B79A032E68A57B0
+ 4340CC0859B2BABD71EDAB7429BDA3AB18EA99BDEF913ED3B3564AA0A3F7B202
+ 923F9B9EBD908620955A308622681BA88DA89320D5B0AE7DD86BD8469E3C9C33
+ BF8BA034E4A3C7D2EEAD877935683128968A7BD2B932008BF87036E8361B60B9
+ BE40FAA41DED4120C4AFA8028B499D529359A02351EA76387A2F5E5FFEB0D431
+ 8A73E6217A6C90E5DE6B6B7AE5C0C9FA180CFCD9005F9C30F613C97704051508
+ 04AFBD571FE150535F771F015EEEE55F4873431ED6CF3E1E504C4C84CA784960
+ 7369D483E476E43C12FD4A636D47CD483433D00E5F251A345B8719C85475A1EF
+ CFD1FD7618E2C1CCBACA2A99FB236789EF9DD10EC0A699F40F805304B9A9E983
+ 39FE48B10456BE19224F9DC87A0B44CC2B7DC561A692D345BB51E147ABA4C779
+ 7011753FF0C698E23A7F346F64A40ADA1CBF784001A4A8F3D4B3EB917D67DA00
+ D45259E65F43DBF3684CF7AA37B0E970ED9394DF2AC6090EC81D86801B5032EF
+ 8FB495428AA6C5B3BB56C0869835B352DA79AB52084B6E99BF0889A6F09FB8A4
+ 85DDE4DA71597F2826F77BE99B9310DFE7C49FE1324A26635A82901A9658502E
+ 5EDFCE85AA5F0FE3300413A605BCDB3D7A1FF717E9AA8DDD7B204B3A0551DC0C
+ DDC2865C42A13E5BB495EF519F7148CC08B3668694981235051BD8739863F50C
+ 79A703EBA43BA148EBEF7B81F469836169F4822081BB0E32EC899455EC7A6006
+ E164A3C4CD911CA6EC7A33842C95191B577211514DB4BB05DFFF689B7F86AC7E
+ 176D386414365C6F6919A39AE70C03FB3548256B77F766E87E4F12372DF22E5B
+ DE093A8841ECEB61A931D527CB685B3EF9A82B37C84F5C4E45CE8D6B09B7C06A
+ B107CEDBEC9A5BFF79B9742E1C4C5ABCEA5A86F118C97A466ABDBA40D01C0ACF
+ 1220FE05249309A0F4B7BBFE0779C8937A108D97BD27C38C72B29F0BD7BD8073
+ FCEA2412EB92C60E8ACA6EEFE9AA0B5E58585C8ED1C6199B13CFE89FFF68E91F
+ 6FF1DC4A6269E4A10E860680944EA084FABE603DCD12B4F8001F272CD060CF7B
+ B92BA882634D3C906CBA88BA2BAF8B190906A6167EF57E7CD30D7D083F7FBBF4
+ 2C313BB7C3D71AB3FB3D8DFD2E80EDF314EB9EF644A62975A806F1EC39CB49A7
+ ED207C8069D33626D876C52C05EB02A2DE3851AD1E7F53A2FE03A0E8C4B0C17F
+ C9BE3D269C92B79B5021C002DF40ACCD30E606E93A4692D4501C91982BB5D530
+ 3B1973E0517A4BEB2408D16067845991118989ED2489BFC7CECD86E65ECBAB74
+ C5F14A46FBB19118814C57610FFADFB9C0D64D88D352E7ECB9DB926277DBA50A
+ 8D9F244B7A5B4BD97E55D756B3F7AD723CC4F201FDDDD0BFC689FB8E63C22B38
+ F6395AD8A92F3E12358FCAABF4FCB30CC6C77EE5219E2FE12317021CF7C5EB13
+ 0C763E5B5E5CD3B4BCE4926ABACAB993069ADCF11DA49A1FF701D46DDE92B31B
+ 4F5EF3785A96DDA15988787BF0433FEDE82177D94530D86A7AF90097312AB480
+ 06701B52494A79C1672C19AB793AA2A285223EB61DAE4806B767CEE50C8B226D
+ 6217542C758B73508CFCFEFBCBF852495AE21A696152F99952B362EB2C2E503C
+ CE098939EAFE3082D966C8630BAA722DF3952E8DF84EE5F5745CECCC0D886B67
+ 3FF18C1540AF310A7418C1035942E9A15FF30628CC7BEC9750EF3A7EFC2F1262
+ 25DB004D5B4064D766914B2481928289B72A3DE1EED82372B529531B619AD1FD
+ 85144050859A78E4CF61F4452A2C89D9C0C8544DA602FE09CE5D5462358B64A9
+ 761B1CC7C936A0B35B619EA89D61D4DD7A82D0E9D71E91FDDFC4D8E06EB2F0E6
+ C149320E8D55B2413A0BA05C17CAA51B3472D7721D30672B9D2377778570149E
+ 59A467D8CF84B9909CC416C2598220D2A553B719C999FBD7AC84CE772FA267AF
+ 0775F9AF9B306F15B5DAF906DFBAFC4BF3F30F6E15256B748789AC2B5FAACADB
+ C16E29E397BCD2B6B85B1B3FAFBDDCDE9625BCD1A0C75314B6CADADD5B62A746
+ 5D6224D790DB3B83E0C69554F458CBB3A4482D688A154AAF1BD38A21E938B090
+ 8B7DB9874498A18D9C3E003FA07118C5C9E33FEDD7A1E0FFA31B76EFEE7FA807
+ D736D71DB32BCD863B45A34D4D9F6FDE51D6FD07E47F90EC31482CE18D78C453
+ 00358870F8E62812E0AC61D8735A92FA017BA1D033789B71E08D75656FB64DB4
+ B1D120031DBAF8028F610064BCD5ADCE984B2150EC2C0B29B061E09BDBB75981
+ A6C443CD489D35FFD11821321E77F26FC69350ECA949F65B4407406BF927A0F4
+ 1643C11E0D34AE84918211C5721C48D1394A5AE755DBA9A57E49AC02477EFB87
+ 8E1B343BB327A0C18DCE2E0299C4925B33C2EAF1A6C22B28E3F760CD644E3DFE
+ 6C96873021500ACCDB447C0CF0C522856486476BCEFCECFB53566A6B9EC642BA
+ 71EA07188996D47A75EE12D2533967DD0C507E2359C802EDF6A6830C9CCB5A66
+ B1452C21DA0ED0FF693B6A6A03915E6AA50089C815017D8F7B2B4406E1BFA799
+ FF53A8FC7B6F2EAE853B58E64484F783970168D101D8731222F359440B8CCBFC
+ F39C06E807849E4EEF0D9AB8DF4EC331F526BC5DF1D82DC8B82F137D36176E00
+ 259E0AF1E2F4F72CF247B1F7F545B2DCC1662B1D6D1ED5870139AB94E07FD594
+ 53834F360B857A3E3FBD067A262552FC0D4A65FEB52613EEC39270AAF9430AF3
+ A4CD98636AA415F3798980B32EEFB57CE1D66B746CD36FB2663CC84693D8BFBC
+ 21AC7C40A2B13A4A4A42DAD5CD0CB9D29051AF1DBDD3F4FCF96628D3D176A569
+ A0DABB21F326DF8EDEA46F65A92F3F9B82A405B46C5CDBF43EFE9CC7A175C82C
+ 7930E5B20D507C5680495EF31E81B9EFABE735B3786A75467D18E1E5DD6E08C0
+ 02E807515B5084718FC35377B9883664C102AD4472E09287D1E61236A32C6DDC
+ 193C4CF24AFE678C516BA78A28117FD61ECC2A235F582D526A0CAE64EB7A3815
+ C04A13DA1740E3DCBDA029A147F7DB8B11D6233F67FA5B639EF84CD9B2FF0A9E
+ BA1367DF5F0C14B5FA72C82EF77F1A33F539C429904220B77BDB74022FE3E6B2
+ 6ABA0CCDDCBCC75C8364566075B8F99A0E8CF7FF2B9D11142072061FF0D915FD
+ EF83F90ECB584B05FAC00898F534F39EF9258B41E7A9996DC86E7A9CED57A76D
+ 9981FB8A223D91842947E3B51B91368D1F90D0B8055AE84096E3AF766C17412E
+ A51C9AE37E2F9DF50FEF02899617524A71C9867D482AA499F7195EC8E885421B
+ DE83314D3CB3E77C8BDB2D0D018D8B0D07105287BA64FF5C28AA52E2C13D8D4A
+ 6C528B8A71C9A6E3FDF909DC30B3B63E9317065DDAAFA5A7FE742AA3AFE570FA
+ 0D04AFF808F3CFA4C4737AB3FA346659CB0EAF1222559E1C256BCE70EF2B1B59
+ DB1E4FA0E75EAAA5B07A67BEC879B554A2B831182E053CE896EA4F00CA4AF524
+ 0DFD765BAD277D7B9AD3C373DB8BD74C6837546C51D68EE546487A361122624A
+ D4D760753B64094A5FA62A5AEBD0F65A8A7281386E4EF8739D03E26EEB30D00F
+ 1AA79D5F7265D1EFAD06DA401BF23DF89D036E18DA6B807B2D71427E52055547
+ 46A424CDB0AA21A9175AE6D414FFF1F5CBDD0336C976C4B6C1D229F1B5B70B84
+ FAE6780BCDF5390E38A7CEDCF288914DBC5A98283FCB6E4A86716FFD385C20B9
+ 106059FD960736651481D3FE94B6222C0E5546F051C008E7CCE651CDD15C902A
+ 442DD341E035032E12EA7831FC7A9FD0869F461DB30829899D023054B683CF9F
+ CA8AB7B3E8EF21FFD2C5A2759641D541DDAE27EEDB4A17734EF3D64F3FA32D88
+ A0631266BA9649234B00F17D42398FDB44698E5031078EEB1573F24502C71432
+ DF8A28A05490CEB475FE0649398294274D575286692BC257AD97390C6EA67545
+ 895D375099682DFF9CA29C648C664C29CF49033CB893C5B762AF8E02EA20BC76
+ 86BB9FE91F937BF98CBE3CE4EE528F6BD473869B6995C2353CDB3766195A6102
+ 7BE7BE76E7D056FFE728A95F25042541ADE3FA0D3FD86C238C9426C15D487778
+ 38239BFB80B593A1B57D97685FC85DCBF830FE9F5D94AD49663442C198BA660C
+ 046B029039773F275E8D0CC42E758DEDD48BCC508B28098757367343A86ED009
+ E444B04518C32397AE1F4E19DB088585E0E8425C0739FC5A1488B498CAC26FFC
+ 678CB82BF0367B3F8BFCE38249976D6331BDDFCB32937E58F5E8773A1DAAC36D
+ F51673FB3BC3E25B4AA8C53BC6C1E9964F1DB73F6D1B694D872E08C088D41F72
+ 1ABD5C9011C6AEEA048F359454276E2865B59F9955C804AE2617B9C2CD167F71
+ 3E386DB3A51110040EDA0C9D7073BE4EAE09338CF1E060D19BB9C98AA98E3F8E
+ EFC5B13927CFDF5BD3B5481B6D9DBFFEC48F3C09BBCBC1EF90423BAD4426BFC4
+ 36F3CE0EB3F83C75D3D5B930E06025353A9C380C9EF97824193999A012804510
+ A696C93C1F38A7BB0B426BF5810B6FAADBF760373D6B6505600DF6AB602F113D
+ 7F02CBEE847A3AA31F0DC782B05734A747138B7E915535F260155D9CB2149825
+ EE5157BB580286701B45962049675BF11B6BCD74BA5D04AF22E7E82FACE68F13
+ 07F44BA78221F61477992317AA90B4E54743F08817A7BDCAA8800BB3C24189F5
+ CA4047812121DE6B675DC6F3937CBEC62204CA2367BCB06469027CE140D983C1
+ CFFBCF9FBC28C81EFA0AED38710F271BEC1F396A2CABEABD052E912661047327
+ F9331218ACC54E416D6ED5D2AAD0DA30B403AB1294AD4E8EA4A03998C3A2CAA0
+ 52415C1CFAB841CDFC9697685DA90ED397349A72399C124C7EDC1C5894ED92C0
+ FDEBB9B1AF97D35EC33D28B3A674A2296D391A7E47F832964F3E282638F17816
+ C93F773C4F465488FBC0AFF55EEB8639DD2944D70ABAE46317EE65E350C572CF
+ 5E7274E5EF3E2DB37445A409A69B254A2C20777EEAEE78C5A0BF4BE04BC4C211
+ 5FC8DE189423A460537129CE958693CA2563BDECD2
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMR7
+ %!PS-AdobeFont-1.1: CMR7 1.0
+ %%CreationDate: 1991 Aug 20 16:39:21
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMR7) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMR7 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 12 /fi put
+ dup 13 /fl put
+ dup 35 /numbersign put
+ dup 37 /percent put
+ dup 38 /ampersand put
+ dup 40 /parenleft put
+ dup 41 /parenright put
+ dup 43 /plus put
+ dup 44 /comma put
+ dup 45 /hyphen put
+ dup 46 /period put
+ dup 48 /zero put
+ dup 49 /one put
+ dup 50 /two put
+ dup 51 /three put
+ dup 52 /four put
+ dup 53 /five put
+ dup 54 /six put
+ dup 55 /seven put
+ dup 56 /eight put
+ dup 58 /colon put
+ dup 59 /semicolon put
+ dup 65 /A put
+ dup 68 /D put
+ dup 69 /E put
+ dup 70 /F put
+ dup 79 /O put
+ dup 80 /P put
+ dup 82 /R put
+ dup 83 /S put
+ dup 84 /T put
+ dup 87 /W put
+ dup 88 /X put
+ dup 91 /bracketleft put
+ dup 93 /bracketright put
+ dup 97 /a put
+ dup 98 /b put
+ dup 99 /c put
+ dup 100 /d put
+ dup 101 /e put
+ dup 102 /f put
+ dup 103 /g put
+ dup 104 /h put
+ dup 105 /i put
+ dup 106 /j put
+ dup 107 /k put
+ dup 108 /l put
+ dup 109 /m put
+ dup 110 /n put
+ dup 111 /o put
+ dup 112 /p put
+ dup 114 /r put
+ dup 115 /s put
+ dup 116 /t put
+ dup 117 /u put
+ dup 119 /w put
+ dup 120 /x put
+ dup 121 /y put
+ readonly def
+ /FontBBox{-27 -250 1122 750}readonly def
+ /UniqueID 5000790 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+ 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+ 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+ D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+ 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+ 2BDBF16FBC7512FAA308A093FE5CF5B8CABB9FFC6CC3F1E9AE32F234EB60FE7D
+ E34995B1ACFF52428EA20C8ED4FD73E3935CEBD40E0EAD70C0887A451E1B1AC8
+ 47AEDE4191CCDB8B61345FD070FD30C4F375D8418DDD454729A251B3F61DAE7C
+ 8882384282FDD6102AE8EEFEDE6447576AFA181F27A48216A9CAD730561469E4
+ 78B286F22328F2AE84EF183DE4119C402771A249AAC1FA5435690A28D1B47486
+ 1060C8000D3FE1BF45133CF847A24B4F8464A63CEA01EC84AA22FD005E74847E
+ 01426B6890951A7DD1F50A5F3285E1F958F11FC7F00EE26FEE7C63998EA1328B
+ C9841C57C80946D2C2FC81346249A664ECFB08A2CE075036CEA7359FCA1E90C0
+ F686C3BB27EEFA45D548F7BD074CE60E626A4F83C69FE93A5324133A78362F30
+ 8E8DCC80DD0C49E137CDC9AC08BAE39282E26A7A4D8C159B95F227BDA2A281AF
+ A9DAEBF31F504380B20812A211CF9FEB112EC29A3FB3BD3E81809FC6293487A7
+ 455EB3B879D2B4BD46942BB1243896264722CB59146C3F65BD59B96A74B12BB2
+ 9A1354AF174932210C6E19FE584B1B14C00E746089CBB17E68845D7B3EA05105
+ EEE461E3697FCF835CBE6D46C75523478E766832751CF6D96EC338BDAD57D53B
+ 52F5340FAC9FE0456AD13101824234B262AC0CABA43B62EBDA39795BAE6CFE97
+ 563A50AAE1F195888739F2676086A9811E5C9A4A7E0BF34E6F4C9A04BEEA891E
+ 4D22B39729EE4F0ECBF3CF3C429B3BB657DF66811D3A108A73513A22D252AEBA
+ 66664B33422FED0E63D93F9F8E24320719C09F50626EABAAE93F5649E1981AEC
+ E8F19F6105EA978C51CBF54E94F3DBC93516313F00B281D1B8C8E4C1DB33363E
+ B81B61D7224245842A6B98939F0ACF3ED081BFE7A813215D36CD6ABC3EBD6B99
+ A5FAC5AA7A0DB126B0A1FB14B58525546D4D8BB6E95F803D6E48BADA30D9350A
+ 39923204C1F86B33F3D8AAE0FB1883959BF64FB8F1A38347DD1317E7274675C3
+ 991216CD1479259289265E06F48BC4042F92221E8A8F22AFE4C863F2E69F6478
+ 09E90164481E99BEC7D658CFDBB6C5EFB7E30E45672568B97E2E93F31C6A1E9C
+ ADFACB1813A10F085137F5799E6C41AC73CE028ECBCB5D1C0535B2BDE46E5701
+ D42AA7241212A64F53BBA3A246B4C7E3171DB76F64A5EC4B3C0796704392BBB4
+ 09AC91327D1B403E8385E233D8B4AF5124412EAD46D7590E09497EC0158E244A
+ 4D1BD27D88209B0924BB46B7B0186F93BF8DE57C3A623C637B30DC5CF5F87061
+ F68053CF983E33E3D07166F76A4CDD98406A310B8D4583C19D0171E70613D516
+ 62AF45E85EAFF2F23D94945D76699E34C287C705780EFBD5065A81CC46B9D201
+ 9F13DEDBDA33E5FC160D25D78D51AE976EF60F11878F306D36C2F1A25C00CB2F
+ 6E3E80274429DEC5263442CE286F9CE70805F7C5AA7638E193823B5A4967584C
+ 756852AEB35F67BB394C70C7745BE9646BF56291DE3E6F056614573B838EC7B5
+ 3F7EAB8C8476D572119B14CDC5CAAAD2E2D70ADBEB78D95C73A4BD3A5569428F
+ 59961EDD792ED80E845545900B2ECF24F58C53CA1D8B5E6F5462DF6039762CFF
+ 487196105B05DC4CDC871B45B967611C7355979BBDF917DC2DAF36F1B54338C5
+ D0C5AD54CD0A79C678C41850EAC1CF0A183376CC82D76B27D98426AF81893AB7
+ C209E41C8B082D50D8B68432FCD98B7B2B4FA48EB4E541EC7C451F05A6123A05
+ CD8EA03A2342B6FF6FDEBA6C308014D53DB22E86466E3712786DCF1EC1C0D28F
+ C3D21CD79F053506767DDB31909AA02D3008846402DB0AAA5592AA73D0ED56E2
+ 359F9EA938A1B7054F9EA31B3E69B9B5EE264A5FEA1F94DF6762EC56FD299C34
+ 444B125B36E64507760AD2D4BBA76895FC95A9BF7BA94BCFE4D4D54EA3C093E3
+ 14051BC8711FA6B01817E820D821155012A260DC5CBF741C8E1A98C98221FBFA
+ A0CEC65814590D67BB7D879CE479E337ABB3195C2A7BF88671FC99E2BAD7D101
+ 5565000D325B659D2AB551B8B3D81937F1B8A748CCD1E0340340FADAB0741C01
+ 83F09FC477D3124045B316454B09EC98DFEC0E9512DE66CFD48685207E8D0EF3
+ C6B54F5712074F87756C7F33EA76BC5986688DE150DE59DF02C3CEA61341EDDD
+ DAE907B30323773ABB22B254ED43DB8162E11012030AF3376DB941373655DDF0
+ F51BDF9611C29DC0090FCDEE074EFC1C89B966B32E99EA6D7F5EB7590F89A9C2
+ 976320D1EABEE68BA6AF32E082D87FE576F32A643DE4F7AEF5BABE755A1936B6
+ 12A91C0C826412ECCB08984840074696DE9F6FCA8B8B5870AD74C51803E56F77
+ FA2142785F7819458695764CF8DD373264FA9178CF2395D91F7DE27CC8C3ED92
+ A798CD01D1CBEC890EF9E639095648E048B0448E4FCD5F0F3AFB30644AD0018B
+ A13D7B0521E5D61DD73C713675B8D8ACA1503B86AC36D7CEC8A8F2E892C71ABA
+ D937A728561BF4780F945B6DC09A15608BBAD39330D1501923FCA6E3DCCE5F0A
+ 16EA1D1AC84DDFC4AA524893F1B142E20549C35DCFCCD1F05766D4F8E18BC5B1
+ 4E2FA5F323E383196387716A8C57DDA39D0373458589FF10A4D29438B1B0FECE
+ 5C22CFAC8348124CCDFBFCFB5BAA47545E170CD2351CD91FFA5504302CABA6DD
+ 34E2F49825219A3001112BA44AC7D08DEBA8D86FE7265131035D81DFEC189AA8
+ 900291F643161E22710A19CE860D88BDF99FCECF6FF9AD9EEDCA332E90C27E2B
+ 6CD8272618C19B38F840D398431288D686319F1D3607A36D2859C4368A453FF0
+ 7EB7EEAC0DD9C28779936DCEA5D37D0B9899744C9025BD8EF6C34C587FA13CD7
+ 2BE6F7FF2026105D51A0EEAADD1CF3738A208C858B615CD1FD435DA224013B0C
+ 442019DC0E32FBC191A25E8A4234FC504B0B81063ECE6C0154B5560DB93B2425
+ F90D6CF06BE7AF524FDA91D581287AACC7C60540B06AB7B0343A8B84A8E63445
+ 30CBE032BB04E89D3BA1455F2E32B7E86C6C73B5E9852DF41CF4C22E565E584F
+ 5BFE7E3B2E03BF146C9DC786CB85514E4562E0063BD20245C1BF21E7968F04A6
+ 326B8A5A5725C2350481B7A08C6A98685CC3E321268E262AD691E118218952D4
+ 68C910F037C3ADAA689D15BD8C2F518FEA304F9BEA7B81F330A9EEB756570D12
+ A3096BB7E6029F7A904768B7A6952F76B531C50146B0E473E67EBD8A64319EB8
+ 1D84128A44F38D1DCD7A03F254E87F85A395EF022E53EE1580DCA70EEE3EB0F4
+ F725CC6397542E5EF0CBD73D0CD4847B8DAE4BD5AC23C9EF94F5D74361A72587
+ 39D146761E0AB8718EDEB2B1CE2EECC9C3A1EC82BCFF08D6C4C17DB12B6191F9
+ 1EAE488F293FEA46ED7D7E8A5F7320F2279B54A595DE4E682CB7E5DA90292225
+ 5F013C88816CD90EFCCCF92B6E9342147C3C4D4982B8E26876A7AEBAB760F919
+ C13A78D9204E3453489B973EB05440C77A6567AD8F577E6476B08AE94FD2C227
+ 8A3BF7F0E36A9F1809DEF37DDBF73E2D9E97D56A0FC548CD97E325FC8C241CAD
+ E6BFE9296DD0C40F231DD2C66C7FED623DE7AA6DDA2BAD1824AD45CAAA6A6A5E
+ 3EE73FFEDBEAE344F605667737DFAB302B2237CB2A80D9F321EA5E468F381DF1
+ 83D86D92E224011F16FC2E27749BC14A61113727EA435D498A28E7E8000DDAAC
+ BB10BEEF7472F8089BB63476159FC1AA468F9D39F2748DCE312E277AB1A5185B
+ 883EA287EF4002EEC828015146D40D7EB867D4BC1CCE37F3D7F104254C2ABA7D
+ F079DE62FA13FA978CF406B08C0E398E3E9D6107A593826907324AF78B8F457F
+ 005AC1C722D588E8B1F69201D9E35D06A2BF16F5E405E6DECDD30C5ECCCA0615
+ FE412968E11EA1117F5C26986108264E5096711E5DC8F1D174F3CD25A5A22048
+ 201BFFC8025F8D1A0A2D005EF4570761994A0FF83C71D8770E0F6AE6F6BAD524
+ 5436EBCCEACF0805BC455B7277D575D8B7CC0C1241094012918EC8F5186BCB12
+ 1518FB098977E05CFD30D82769606908AF5C3B320BFAD9866A372957A19FD7B5
+ EBDC580EAED0DC0F64B0599D8E3C9487F5E7A294C1F486B82FA13445BDBCD00F
+ 61DEC0865A0FB02281A4DF2DC2DD4354D5F01683A6EF1D9DDFB4B82B2FE4466A
+ EEA0E51655AB8462DB98CDA8E881514CAB0D2BC4CAA4562A501C4C699C5BCC48
+ A08D088239DFD4952307D32803B4F1A98FC85BCDE0950A803C3E0FDF6A1BFD83
+ 80337ED2C8EACD98B93B3F50B9909148E8CA0F82BE562E8CA184A5AD64DBBED6
+ 729A0A4FF3B5F1EA5C0953B911364158296F1FD2BBE4F4786988B71BF855BAEA
+ 89210ABCF69B98D77A1A47970DFB171D846C630C94CEAC017408D884D69D638F
+ 8B2562B4CA875A87CA3AD9DA3D4C37B24138E300AC45013824E8F8129C9BB167
+ 8A1544FE3AD542E0BC97586F8615EF493FA40BCD2914E86FDAC351B47986E021
+ 77E2CBA08B052CDF74D4C7C62595F383D426693EFB6BDFBF2333CCE96807B34A
+ AB8AF348F89CF876AB98F78AAA964348CA52CED0ED6687861AD30EE1115272C7
+ 966CDD9162CA60CB65548637F0B8B3A42BCD55F45B65EF72192302A0B7824103
+ 3B9E510AF6CA821672EF8056103880A3C18EAC6BC1F22D2A669219F623577108
+ 168FB6A87FCC6BFFAFB5150AF00A3EFD3312E410F443C63F423B831769DF565C
+ 4529AD9B5091D93D7542B28942A4219BFC2ADF0B00CC9CEF4927108038F72805
+ 1D422497EE6BB8E273BEED67C55F59CD99D1BFADBE2684DDBCFD73BC3DF94521
+ 1372D065CC745859398656165785D737F8C4A054E7CF2098ED1ED194944F7943
+ E4F885C40AA078FDD0458C501181C4A81BA8155E6A2D63867B2C65E7036C9632
+ 69056BB1613B2DF6161D1BAC65521614929C73A6A8F81ED8C5BA7D37DDF28E77
+ 79A035931950DE92AC9FE81C547DCAFE3C1A8CD1D5122E59C89CF2DB6D82AD2A
+ F6AF7EC81F4F2A2AC9771784293C7B0285B5AD1E68FC3525BE85F4A2105FF9D6
+ C70AA6238DCC5F90044B70821F5AAA1BBBA1C41C3BECAED4132E26D5D6DFA008
+ FD305D90E839B31E8B946B2510B2231CD87A78267BEF4FD2C705167F572F37D1
+ CEDA2EB8ADD632BA822FAAD2ED660D5481367587BEE3BF23B60BA8431DFFF406
+ 42F5E86E50F897C0F3EAF181A04082E54DF2E6156644E952C878FD5726E66352
+ C77BA8F246CB313F9B535854DCC4306F4B7CFAF402F9284B0037AFCE92C256EA
+ 0228BA3B56EFBF572AB45A8271F39748569C0985E021522CA83304F6661E51B8
+ ACE3D71E87A79451856BD9D31C26118BBE33292190F119F9104A47E60E47BF5A
+ 4C0CBB6EABFB0FC94FDDAEC430769D5A8BE868D7247CABE09AF6EA3F253FE77B
+ 0D19871D7FA3D8802A07C018637DC5B5EAB9F16655A70EE94D6C03506D076467
+ E3960E457E42B63BA3FF89C77CBF45E4FC4C9421FB991A02A3C44E4435349055
+ E3A733C491BC3E040E09841971176BBB9E7034CA8F37F5F9175C8813E9932EDA
+ 30C1E6A9D5C5D4C7BA0BAE3A248223C268FAB857A29F722A00B6128AA3EBA83E
+ 59B533AB9D7850D7B3CBA51B8F34FA25A27A57A181B10EEF488E1DA1FCDAB96C
+ 1D5232859BADEF6C5A502B2974DD3959A71380B8CF37FD9CDE497F6C4AB7B0EA
+ C5DB2691B0B39D054C961C52D79D8348BA7D3BC92FA7C6FBE88EDD448C2FDD1B
+ 29F25FF2E752D204448423C263E0D76F0A12761FAD639D26060DE3CBDA46BF84
+ 7CCD07DE708858034264D0DE7A729F800BE3F7FA5DACC6C787C9FCB59FB3BC66
+ 63AFD4D02B4CD97646BDE224D03B2686B9E80168638A86D76A104C66A009A25D
+ 6393824B12139326DD6E7A6B40E665FD76763926B94363F01476A19F7F47A1D4
+ 2F7A91CE94500EE8F73FB6101ED9ABA32AEF46F46D877D22BCD849538BC12D13
+ C95EEF307BCD461E76A18BE2158EFF1EB8566E427480CFBC5873729644C0FC23
+ C5AA82C691BD0F43B887B906BB35995933F620E49DD831DFAB71D36063F7CF43
+ C12166D1FC41370E5816ABA8391F0AE37A6C5CBD86C35DE02CC1CF79E6C6C782
+ 08EED87067AEF41BCB96E6AB9E75CAB19E11DE1E7E2E8002982B35A972B52578
+ 9EEF712F05BE2474049BAE7602567902755FE985922A2E9F49A54CB30D38DB07
+ F0FE89DF422C25CBDA094DBF47F594786A2305F3D6427725989D09BA59375FA9
+ EFB4B78776700D440BE5E47BC530519DC861E1CDE6B8EDA8E4745897C3423D80
+ E6C1856F1B04D8FFF7E342FA2F4E9271DA76816ECD05EAEAC848E8C1D09832C7
+ BB0C59F16F84D305D7AC8C753874ECF6DD9168DBD0AAC7C2AADECB227A9F5CBB
+ 078D2C58B3C04E027A28A3AD37CC9FEB5CD7BFC404449217692EDB1D54C6E550
+ C5E5B69BBDA10AC25096582931668DB30A75768415DCF57EB7207603BB4DA1B7
+ F2BDD9A27BC4941048F8AF9F3B010161AA42536CF6F505A6635CA82BD7435337
+ 884849206128551D38508CD4A4924594F5EED3EE42AA5FD2E3F4D9E635434A3D
+ 7E9A678AA9E4EDA553249169C81633B1424F93352AA956D22074D01B2583DF33
+ 602C66A70079F3A134CD85D7BD927AD2C1A8529DEA2C55611CC264342C994CBA
+ D1BEE108A9DDAD84C0BD4F97156A800AC5C47B237BC6606A61EA016A3D7E423F
+ 278341BD212EFE5D99522F82E15DEEDF709FC2C18CF67D6B141364C97B6A11E2
+ ED1EE8005A3269A0D233F41D2E95077109181681078AD5132BDBDB804CA1278B
+ 3D55A4E8AD209DFA59DA759F0F9F31F27F766A8D3A9646B0F3BCAC7BE5080A50
+ 4CD3958A6060AF60E428E2510999D09E8B1C6A314D6C95B7320C85EBF966880B
+ A98FC80581E039F8740137571F959F14B3C1A319BBF3AB617AB26950AECE0ED6
+ B1FAB1A18EEE65DAA3B4EE27A250C80C13465E3FBD71228D153BE14F4F38CDBE
+ 7193B077EF660D9BB37C83312EA7D6D61D4C450F68A9ADEC75520BF9FE4AAB6C
+ CFDC541BDF6A88DCCA00CA885EE83063E5E210D7A2042FB4A857BF3AFB712ED0
+ D3AEE0CC91E1F098E7B1F13A2C85E9D8B6682DCFDEBD80FB3DCC8F9D6FBDE3CB
+ 4004B404D747BFC2C51AD8D172EB481023E21E1A5A25B1489941ABE5962054AE
+ 2206BC99A6EFEFFB3ACBFF8A4572EEEEBEF4FB898890AEB77F5688389DD27BFB
+ E6ACD741C1AC80AAB98F34DC3CA49E026EC81DFF8D038BB3CBFB4F60D646B6D6
+ F55BF5CA71E64F2D360B75F4B9FF487C3EF40A8D71DB74E88914924565F28E48
+ 8A2FAD2B96CF0EB04B71D7962BB7D264416146E1049EDB350D00A58313FA3AF3
+ 45FB9610098D9ACBE1BCD2F408EAAA967786D8AAAA47E60FB8DB7C405787510F
+ 6E83C4706EBC0F0EA8B176D3FAAAD18D9012FB3331E2F615B977AD767A33F756
+ 9871F22115CAEB3B465C09E6C433B017C289BD459EE41D19DA956458E06E0300
+ 1AF4ABF94FB5BCBF95EDCEDB924E8E6CD2732B6A6F22475E42B06A404A2F6BB9
+ CC501C084C6A37E7CC42FAC2CC84E4B0C0ADE5DEE00CDD0F33818F1C6AF56217
+ 21D1DCEA8577BF45057DC1DF7B22881E38A52FD9779DD8742EBDA230C84AD868
+ 07E1C2B47C789C792E5753DC2080D7E4468CDAC7E31D92F07FEA7D740CC3C2F3
+ B5F3FBFC95A615AF664D9E5B4C543BF38CAF99F53FA6484F84383ECE4FAC487C
+ 09136AD9B9CFFA4B24171A761DF408BB3A1974F42F0867A6C3C727741FE76F93
+ 308359F9F0823A028F187ED47B7E5E2722A1ED1A315F4D26563288B98C7ADE60
+ BA789DED1524A025A0081677FBAA80ED50729BD0B360B248F54B46F218645727
+ 9CA3BC4DF6FE80D4D68532055AAF4A679FA202E7B584409D08C4748B9FEDA030
+ CC67A72F13B88DE1B73436B912FE4D04C50B7E0375100D53E386C98342065B95
+ 35F1FAA70303716C4C9CB599B1624797A74C299DD7A223D7845B4612F48358A2
+ 7DCF7581F17A8E03764E708ABC35E4FEF7F3F5527C8429E83DD795B27D3808F7
+ 160DC5F50162F79D170CBC40D106E6AD614CE90D26C582F2AC7642F7FA983008
+ ECB2DFB6FD4C4D8AEC8E69943CE9D1FB775B6AA51573C53AE3108C1B6AEB1B6C
+ CD3FE4BE833A8A2293181DF757C4A989C7675818624B08E20485EDB50AFB1EF8
+ 1A50DA418EAB9C74C26F632EA5AAF0D316A6C4C68117F0D9E3C9AA306EFCF15C
+ 9B5EB1D23E3E6DB5C98411755DFBEAD5B943438619F86AA5F52D7FA3B95231E5
+ 40642A0F28CA9DA4C7A5488C09F5D3D29297D9185D1596ADF39035A2E1F13E58
+ 1F60BD68A14C8B2632B17328BF8AA85F5F64B5D174983AD13E51A5DB7E04E4F9
+ 024C720F4C4DA44762F2357BEF9A26EFB4B7A5FE766F1B338E6AF2DC441DBE6A
+ 0600C2B16B80D48B5D3922A7F78E2EE4449AB1FDBCEDE29CB5EC42B8211E08BB
+ 292711E4A2BEF75769ED479612753E5E9500CAD61F43DC911852D5BBEE923A29
+ 68B863D1CE3B6A8AD82495A53964A7E86A240C46FFF2288E00B67D6F7D6760E3
+ 4F42243172C6A9164B0D952D2E1D3B16ECC3C8C3C3894641D54B91F7C6CAFC18
+ AEC5C14E1E89725BCAD957585358E006A14413D47EA4275352FAF3842B7B3A5B
+ A7E980F41375C63651D9CE55DB38585598B623109CEB5E954D6C28D2182479BE
+ 044E70BA6DAC1CEBFAC2CFC97C5B9E9DB0EEF690DAC0F9C23DC645588A11FF15
+ 81A33D738B752690B6AC361ECD88EF92617B382B5D1055A54228DB82DE79ADE3
+ D970852B9A2CDA0A899098A38C1595C3C96CEFBC7A87D2CDA37365CF57D0CCDB
+ CB305C1CF5565A618064A7D62A2E4701A26C5F164374653457AF11FAF944C8A9
+ 5C3D25CFCCF7CFF9F769E67C42577C451370C626A97FC3DD600126ACBD026FDB
+ 910272392036F328CC53C8EB32E8B156161843709D65828B249D34789B737688
+ 9F79FBDBAC7519873A775898CEA264A27775F3AD6F040E1B16DD8A7EA1DC854A
+ 456802E8CB4974CF09B30BC80615963F41FEC87FB61D23240529336B3F9E304B
+ B59BB6CC0D8790035959771C309631FF28410D570D413F3C8756EAF741520070
+ 8E0384575BA4D404128404B001757A1E3AE591022F504EB94924DB0862AE6FA4
+ 3339EA71E953795A4A69EC5366CFE8D19003CF14B8D3105A407FB418F54AE12D
+ 85B07F4342EB1725766217237323FBC7B29A9120F57FCADABBB5075E8BE85484
+ F9FBF654EA201E00A51812F9D1D47BFD6BC85ACACA686612B7581CB0AF6871F6
+ 1DD1885A88B8FAFACFE9D0562606EC25B281C911EB0EC7333FE912483C7BC918
+ 3F0CBA8E0CDB8BAB8EA4CE9AAA7D6B1DFBCE7276467147D7ABBA829B2E1C3070
+ 5926B9C9425D9EE25FE87063B09711A21492BE873CD31DC2CF441066A83D9F40
+ DD53040F16B00138E7669CFB3DEC0369CFAB766556A8A651290EF9958A657F40
+ D916C53F06D83D3C8BFE5D30604EFE49EF540166961B60989EB55F3D0BC0FBEB
+ 873019F11A356C462FAE69F0D949141C60E3FEFB10F66FAFB465D0098E994CCE
+ DBB743F37C8C0969F706CB6CD92C024A606C9E65EBA29A3262A6608E89F2A13E
+ F6F284ACBDE47C38F62D0A5FD27A28485D00A1EBAF0A1F589D2510A88A3AFE73
+ 885BB12E2A5EEEDE9F478EBF7D5A14697B3D3E611E2FEFA577D4EDFD02A2ACF7
+ 0D23FF6E06D44B80FFC895B0DEE80D561AE41F5A3F20BD048B9E59BE4A45BBFE
+ 2636C973932324E43248C77B673C760926BB0204C1A5EE4C2984CCAB0D965CCE
+ B408020BDE8E7CD198F35CE6EBD0682C58931B646C4C52D1283756D9A5DDC699
+ 91CCDF1C02BCB53F9FB6030A0ED0C52C284AE548F9669619133922BA4943B3BF
+ 711E251B852E71316DDA440FB68F79B0EF45E2E4054E3BD4544EC480FA06CB6B
+ 8245A1EF37094229603AABC6819FF249AED3212BCA4C22F813CF32047F8A548E
+ 4C76CE102E814208E190A82ABCC3E9859567AA6464D930757385C9DD16E3C018
+ 4FA1CFCF5217236B1048159FFC72F0E92591A3F4B23BEA097A81266E2E214B25
+ 1D9C4F8A19891F2B2C7A258A3456C52153EB052BD8C83765890EFE219A6E77CF
+ 9D0EB5480253EF1C2071738249A97514C995FEDFB930081E51C7AA131F4C4BE8
+ 04819BF4054CDA505EDAE713F9AD5717B86AABB32CA3540675D82E7E06EE602D
+ 89B6E4B5C410418DDF42C950029988119FCEE166755FFF915F703F5202009002
+ 22788017432FACE95BDE5E516AC5B11A861793A04267B828BE0AB6AEFC385AFC
+ C1A8D83C7B0C597E3F6EEB4B231BD35B6706905729CEA5668F5D22BD7B011A46
+ 72810105B281768F8E0B659F8B3DEAA91B6CDFFC971CDCFED11F2E5F5BB06B83
+ 758A4DA9A48083374557AD268C562563B142427AFFE5C6FEF01A8CA04B7F7B80
+ 2F130F18CACC122DD0047EB00FAE67825357D65B9E30F6A56BD5C1927B0B2028
+ 21484553D4E4BE799858EB07F0C2B382344869F92D128831E2C70B5AE2D76EE9
+ CDB4A23DCC86817686CBDA939758E4E5C53C0010E3DE1CB1E2FC3543D83B0DCE
+ 3134C926C71FEA24FE5DF1BC541F5147E248DB42E8A66323FF8E72ABF8FEC151
+ A196E09FCF0292A1645A148D85A911DD2C9BF2BEA88BCC2E9A0B9416C924F237
+ CA7785FFC4D279929E70547D5E085BA5DE4E701AD9A3B0F70F275AD4A6EF43D1
+ 40674A8EBA40AFC7BE15D88E04998CC0E1575457D043B09300C454242D256378
+ 34647BC0FCF6353E1A6424835F97CBE7E9687462FA3993C65DA7255ADDBE38A9
+ 3A0C7D8D4551CF6C3303F2C7B0A9FBD4A7438BEB3A6B0BA3C98925DB81DF0ED4
+ B5E910BACA2D4960463693C53A9D12A3BDE61A8DB03F515B6C85D808B5BC711A
+ 4A9EEA4FE1B7F520D8C1677A0CE5D958E57024AD1B802D85C7B7274F5BF311EB
+ ABD591818D2CBE9FCD2D1320820390B8E1FF2514FB71E73E65D6AB7CF9405C51
+ 20B00A0CB0E0D448C0AD33253735AB8222642F0BE4804F7BA9DCBEA513862C5B
+ 6432760030D62909CB73C26A5FA234A596A44B1AA0745ADB4EB2687F9563A5FC
+ 9DDF6BB24CB4AAB01AEC044BCD651BF5DCBAD3B4FC60D61C662D25757550B7FB
+ CEC7AC2E66A18F35C7A2542BDF3969A8FBE78032C864886E52A746A01507E9B3
+ B1675F5A6ED039F88C1740650DF35483034519D0D86576EEC1EEFA4DDF43DE59
+ 2A803330C58ADD591243A07162312C3206A7DE843A21924DC1105E1C994AA04D
+ 8BFE15A68447A5220B19C846C192E6E7551FA7CC61C93BF3F4F8ABFE44D9A941
+ 91F8F7559FD4DDE564759409A1661DE7460BC73577B20C7D711DE771C87A4A75
+ 07826C8CD904A34562D8442922126710ACE0DEE6E3AD0AE22013414E7C7D5F5D
+ D3325B8DCE581642A7DE429D83F78F656CF09E02ED1C0928002541E8BFA1B826
+ 2CE02894EA1B0ECD3F8C2F17261DC8D2C0E4A64E521E07FD187F675C37466D61
+ DC8C1B604096749A0BA6D57A69201FA212F66DE68A3DF6985DBB9D6E10BE840D
+ 49D09994C9C49929DF7298591C005A2BBE9CDECB3A3957D0E12162F85049AA37
+ 2C119754DA8EE6AB669E9D5F62749966517A7BAFEC800F51428DA19148954B90
+ 140F24F9FF46A61BAE8725A6737F885BF5268277D8A11F0C9A4662267F37F94F
+ 9D8F5EA5397DB247E6AAF6186A89C5E77D6EE5B9E90E8FB4FEB9D7FD46ED9741
+ 322E9747BC51CA42788534B43D727FD38EA3481B8D5DAD52D4515112330A3015
+ 0DD140E4AD84672DD61B2BE216448294294E7697B1131DD971CE7FF098DF9A9A
+ 468F9D567768D8C71710C8585CB8F2680086179DF3E7DE43C55445D622F5EB20
+ 15E0DFA6CD29B57A5B0B8110787E4256CD45A1C85F474362C032489FB1AF1AD7
+ F261CCFF005893C6B4398F4FA22C1189F8B4F5A04E184826969A73D2FE56EC7E
+ 8B8EA56BCDDDCF773C7DAB00B23DE7790EE11E95042DC7603F1287202A164D6B
+ 9FC0BBD56B93A1D256DBD37D5A8E1ECA4D5ADAE7F70F3136510DCC44FE8F66F7
+ 1A6B27EC3A0F21CADF3B4712EB7454CE051B0BDA56C59F1971856E835C27E71F
+ D735EFD9BDB67A53E1CD17A441205DF085219A01AB1D6D4C3B5B966A943E554F
+ EC9D816CA721BB29D38BA04DEBFDDBE441AE559659C07FADBA1F09D48989B903
+ 7D196D6C55BA039D5267FA7E53EA375E8231C1E25EBD624D89EC9FADE51353CF
+ 74F7BDE5E9315B248A9D71F8BF5F5E2DFFF2E0CF511A2F0B2BB6673AF95BDB13
+ C60FA8736C35A70A8B06AFA31043000B17C230581B28B8BE319636B961B6E420
+ E953E1F4E78AED2A574E89DC3ABA7F06EE5C55A2470DDDB0E7DEFA8E4B88A2A0
+ 63881567DC23069E90DA653FEB7FAE727A11D44676F2AC7E8CA7C981C01977BA
+ 3FDB54CD7811BC81A780DD1DD929A38271AEC0B359FCE38803B61997B68E5F03
+ EB1FF0DB554ADF60426FCD55067B42FC7887CF245E9879C3B19F994273E02DFA
+ 86FC0E839F43DD561296B1B9FF2B221CF5359AB585A5B2EE0BF381346D9816F3
+ CB673C0FAAA13F1E5927B3EF3478D2FB48D2B45F0BADE091222ED3CD915E7E25
+ EFF50D9CBB13596819AE47B52C6989B01DF1986FE9F90EACBA37A8E1F18681FD
+ 94064A97DF21442201E2AECDACFC6469DBD8FA9066055E5D860160ACC0B45A0B
+ BBA6756B81867F0F5339A4E0C2F3111A12430CCD36D488F6B7B23AEAA2C12201
+ 065C6DE0D44115F39EC93549DADC221075D88D49E5242B3D173F4AB4F9497D43
+ 9A9C64675E84191EDDCB7F992BF3804DE9BC4AE999E42BDBC87C216E210083E8
+ 50BE8805CA3129A0F7E832812A0056E0B7B3626F3B6F9D911547A224067A7EAA
+ A841DB69A34ED849505F8FDC16835F3EE27F8BBE4B172A5DADF39B2E9B51A345
+ 2F69F282D57E846E819351A94765EB42D87A277CA4E643256F04CC39AAAFCA0A
+ 72AA5BA8824C4B83E75C83466DBC0BFDEC374333C1D0478281D87555347E98EC
+ 7C3B061B5D5F5F3A9BEB54B745758CF306AC95F9441E605A0B4C798EF2AB6807
+ 0B670AF56879808FBFD0040E683FFBB2996202B3ED22279F067105B4B339E914
+ 2448EA9C9D11B1C973980CCA2E46E191605E710D1B76E366F3A3D6C7EF1F0C5E
+ 3E6C8CBBFA3361A3F6E28706F49E1AE4226682AA178D2E4AE435AC507932E37B
+ 40A7C68D853D4EE1A38EC21E727EA60808612DCE7E764AF7FDEF86894E58D404
+ A68A36381DBA2F4EF404E80B83A847DD26F2FE00D5F67C7BEAE482E78B2632F4
+ 8D8AE2D09EB52BC9498EB5E3BCD895021D89453B3F79412B9E893F3911E2F7DF
+ 48994C84E37239E738578EAFF8E3539404361EF65F41038441D531245E5F52CE
+ 0BA083D3B2F2604D7DEE3C7DB87052D39B7B2C7CC6871F7B9D05602D59B85649
+ 2E78CF41E231C3410A22F9DE2EBBB29738F86AB72DB84BBD877F8E16E0B69F7F
+ F99776DC966B119C8068DA86D9A3694E7D902EC29BBAEDFB2C87F3F82FA61D11
+ DCA840AB19430448DBF9DE04A2BC6EA9E83A5BE7268E10FBBF9B0EA37CEC7845
+ 645177622ECB736A76B45FDE579B373EF5F9318F62DD4EC0EFFA95DB0DF82561
+ 68751A4084ED9EDAA9F91F7538AA00E3A70A6A1962545FE4C433E00AF36C3205
+ 68EC2047E7E3A902404E8395F91C4BA3BB1A8BFB3EE9B6EF95A15BE72094602B
+ 7B1047FCE57E10115211F8DB3EF3E7975394043507EF2F0E1A112E8DE99181AF
+ 20A050C40AE147B3B1FFADCFD1984D375BE4C996432146C66168816AE9819B61
+ 8529C738752B540ED52BA306334E97072E5887101FADFA68B62DC59107A2AE85
+ E84BEB0E81375877C6AF4DC3445C2C6ECF362D44F17DB7732807CE7CB1A525A6
+ 429A1E944C06EDFADA23CC5F238942F347CCA6B7AFFDE40882BF6AEB4CB15B07
+ 1BFF39F3031110B918B1A25FB3F26B701807328F56090702E0CCCFB417B7B4AA
+ F1A240355F406A3F28AEA7B28E4F42001F0FB86C057572CDA7DC51096BB36566
+ 37C1D9575FD7C8CE2BC5124A22C571FC7873B1532D081BAF1CB47C67267976D0
+ 20D9FC0270114728C59496EF0CBBFC29C7A74A195DA971756BE608743CB057E2
+ C874722D099C75D67EE802E05167DE3EDD36C8D455479D446D8548B576DFC868
+ 661D486EA35DE446E7538DD8E5B2524E2ABED24A2239034F38D07F0E2B9AB36C
+ 2A50827F5D9661987B8D3524A2CDFDCA11E067FC3F23C43D3FD9236B4E433AB8
+ 6A9E769BE8CB9D516F699838676700C8DFC6C8C799EB4F19B5336F53F71D4E7E
+ 636FE489ED0CA77A0F720620853472FF5ED320B24E84342685FC552359E2D6AC
+ B35429F8D749B447BA89F68A30227650238C938EADF9A8A1C39E474B5E228708
+ A6C3B5D5B19147B95788F3C91892B89D28B8C2C4430DCFDD30E19B06D8FA544F
+ 15F3DCF44DBBD74046A09A7EF23779ECE339CC71510C22B8D73580DCAC12CF28
+ DBFBEDD5A05B2DBD714B2DD293B2C29FC2ACB3E209C2714B77E9777AEEB12B2C
+ 1DFABC3AFB97944A0812D8A23A8C3286DF715FF24091638A9F48053E85EA1D96
+ 22CC32794B7833D1735743EE
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMBX7
+ %!PS-AdobeFont-1.1: CMBX7 1.0
+ %%CreationDate: 1991 Aug 20 16:35:49
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMBX7) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Bold) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMBX7 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 97 /a put
+ dup 98 /b put
+ dup 99 /c put
+ dup 100 /d put
+ dup 101 /e put
+ dup 105 /i put
+ dup 108 /l put
+ dup 109 /m put
+ dup 110 /n put
+ dup 111 /o put
+ dup 114 /r put
+ dup 115 /s put
+ dup 116 /t put
+ dup 117 /u put
+ dup 118 /v put
+ readonly def
+ /FontBBox{-55 -250 1289 751}readonly def
+ /UniqueID 5000765 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+ 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+ 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+ D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+ 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+ 2BDBF16FBC7512FAA308A093FE5F0364CD5660F74BEE96790DE35AFA90CCF712
+ B1805DA88AE375A04F3C90C160DE16F890E93B13B46BB2F4971D900BB550E53F
+ EC6248832A83CF441B4851445885479839AFAA2903A27676E5FDBCD653467C5B
+ 6757DA1B722133018873A10B4FD9D710BBD9BE518D989B67DD4533F8702D640E
+ B84C3CC2607748FBD7C4BC6DA98537C7A83BCDCD871BC342E318F22902994EA5
+ 8F5F698960BF55B6DD1ADBAA57D96E80D7C28E06447C5E0131B450234C39D332
+ D6EBE6E76DD503B658866DF4DB6774597338B1DB90AC6C0ABAEBA29CE9656E89
+ 167D88958F3BF262133689AD41A5B9A90DF2838A221C5067B73066612A0FAD18
+ 6A3670B2A69D1731367C8335600294ABC365F383F983A8AB1E37C1C1804893F7
+ DBF122DA9C3843D1715ACBEF92F28AECE850981251D1D25F13B0DE4320D26157
+ D14147622A29E7E7F6A037AF34A0197D57AB2A9F7129001F7F636F3B07E0F12F
+ D409D880B878EC8C911E3B1F24AE299AC56227FB9D6ECDDDC5F8DFCD18D8D0B1
+ 4BF4C36A2E36F69E7291A1A0F738ED27D586BAAE8C04E00D5B3C88316AD3374C
+ 5164218F5588EEDBF966055C55E9781D75B1D7B9C1A2FD2682E7CB88FA9C6889
+ 8C5510BD1964BB505CABF99F91C7110745DFBC4B8A2A15295320EAF27A97ED84
+ C6E59474C2832859A5E2536E33893D90929D6D2585C73A6F3D316B96DCF60413
+ 912E288DC3945E3A2C53EE1580FA68D40CC336D9AF2EDB87DAC04ACBF223D379
+ 5482F7EF56A8DE5175D4D988BD67040B7B4634B145F6C995009C1D9671217E37
+ 758B75D54A26EF8D6F56822318B256B2C43B27E2892E250E98F438334182171D
+ 99CF39FD8F18FECC0C511B82F9E4B4F4105FB790D635D44CC9EADB5CB50FDF52
+ 2144DE90DAF2CBF6E72EC7846A9C151C97362D1F63B69BF9EEFFC4B63C80362C
+ A34B4AFD8A71FADEC3CF187838FA09F252014141BA9F2DAF6E99ACE69D934684
+ D1936BF9B3EC4C6D7E219577CCC4937456BC58FE14C8C114BA318C724B3361DD
+ AC9DED00CD93D340A3D2A8E0FC0129592EEB30F2DD850A559EE80ED42B4D404D
+ A014A91F25DC812D50C7A26F2E04F2BFDE537C3B1542A5E45ECA837F47E2ECCE
+ 7AECE71F45695B4AD3A408A029ADF0A7930FD09558D4C49248766C884278B919
+ 584001CE08F2A0339FFE2C244A6FC3D6B1F7BC6053B4C02858B110AEF0E51E43
+ 5BC7AE2BE3C25FBE6A741377370FC647C40A38DAA55D6FCC01E1EA5257F47A70
+ FE21DB952766FB7A840528EC03E5C16D50ECE6A8161BDC766171A4FAE5700498
+ 494896922854798E3959D1D1033D4D7649CFDDEE1AB608336C5D394B1F7DA3E9
+ 948B1C03DF70FCBF196FB08A99BA09747CB8A6EFE5B769CBFADDE431D17A83B3
+ 5ABE8C4961BFFD8F71B14F40E7C83B70CEC788AFB21D02F3D4BF5E923CADB840
+ 3C5106BD26D358EA4B8590B5EE80B67237F5841A960355C04659F0B2EFA8949A
+ EBEE0C615955FD0E23DF00AA853CD13389DFED06AC288F3733A4589C6387254B
+ B4A40A0C71A20976A355E59AB9CC8C5606EDEB73B60B24BEE59647E91D66F063
+ C82239269C94A16F610F1FEF45D6503D8580AEC6496B63F2750076FD805E9FE7
+ 2296E75E278FFF27BBAF37A61443D30019E11C78F252FA6BC7AF3A1DB07A9117
+ 09ECCBD0912E130BE2A7161F79E33FEB8F58B6BC904D8310494477A2F85AC489
+ BD69BA1F03894BC3D157B6D11D013BADA96833548D167C63EFC94E1CCBCE1C2C
+ D3255B3039F74BB208C7398E4501F83C6ED8B0FF9D8304A1A692EB09FF02A09B
+ 1061754D1925518A4C6ED4EB1AF245E6F950E3432CFDCAB91630C570AF3D979A
+ 4186DC3EB550804811A6240EB7CEBCD418521C5B2B12D3B26BD0BAD696116846
+ 761BFF2E46C97CCA28580E3634DE987B0129B2E71ABB97721A9619B6A616F60B
+ 55065C840C180701F4A6DBC0172E84A407F195C6DE1D6EBB25036D92BE63FB82
+ A4852C670ED57121EC7025B671BD7208C675B5091309C24659810B8A668CB5F1
+ 2BF2A200077A60E72C688A231765366189FFECE2591EFBDF7872A3BC286B479C
+ 858A815178D57B5D8FD611B40A8A8015D0D07BFEB0AE1BACF03D234E71D0856A
+ 6DE0DFB8432ECC87F60ED71773219223BF5E7E895F713F8451B19CB497A768D7
+ A5401BF0E124185A2F6538A5C8E963294B117444C6DF0FAB756F397C878ED35D
+ 825A68FD27AFD92CC856263329F42B65055485A8C863A05D3AA215DF364E7500
+ 88916806621B5B08C405A0D8C30D305C9898C63CCD35AD9AF72AE91BCB907CAF
+ 522F6F12E3ED984FD11EB2264579397FEFB7814F3432E5C91933532AEFB82EFA
+ A41DFBF90241B18BAB962030EC75AED7A5482537BEB940C3E211B11A909485D2
+ 2444401BEE2B006A8E771011ED761EE4BF07CAEB1300CF37CA0EF89676DE9547
+ 7A486786F70EDC3712C51127CCDC190476504129140612C9295BA221159C0554
+ AECBD5E72C897C4CC5DEEC2AEFF2F69BDB52461FE2D7443838770CD45B48D1C4
+ 84E8B4B90A509B0387F929A21F110994E23DD39717A1FAF10E7B3B0BAFED5631
+ 6C998EBFF541DCF7149E7B9EBA28A21330CBDF1962E1E53A44141BF4CDA587D2
+ 6652F91114AC2DB7F1E515999DDBE6E63D7DC5F06B86DE17D3231A93A8FB7757
+ D8C4508E131F45C8269A63632F6BB4F46B814C432CE10BEE0CF7900A39C1DAD9
+ 6AEA72B0F332039CFC8130CC3BB2E1EBB9DF2BA64C9FF823F99F56537C64639C
+ 5BF7208F068FB9A4225CED38B4198F7DB7B0B2A4D0FD7E5C39109387F6C718B0
+ ACA4F105CF219D3D248277E465AF586994D346E5CE2B985D59769CE4156ACE20
+ 543FE1F7340E4017DB0D4B034D8E8D0E53420BD154BED13437DCDF3B5898C50C
+ C61F7D95FF1F2B7E54A4A231E34C993854D81892B77A0E409127902C5025306D
+ 6FDE8592D3908C9673903F5F42D840EBB07010224CBABC53B6AE6FD4E7245C18
+ C1FE4A3BC7113C8330FDD680286E7FDE6C5CD09720C4932083EA357C55BDE422
+ 180798551A6484058B5F6B7CE8541B44E25802B207D1B7BF00D2D7562B7B4EFB
+ 9CCB2ABCB0973F87C85390F4BF067C2C5DE6797B3338B3E8CA60631E5A3F6DCE
+ 516342D8DC4AF7EC824A78C02EC3BBE647027826D227CE5D9EDE01D5010DECC6
+ 4EC8E38F0BF39CE625C8B5653A704FA9794DEB1C88AAB1C5291C5FD9DB0162ED
+ F50D9CDE5599664338376E48C9531AE999FFF4FF52550E965ABF390544B3B2B8
+ 5A7261280880B7850BB30F4B2278CFD101906AB4C5444C2AA1A633F7CCF33602
+ 58EE06FF8AD3ECD76CD6A81AC7F89009F23E4C17D594298B1958502A4C16550D
+ 468AB7552F966864AE26D42E71F25B6D1AAB135B4CC2D74B74D5E9BD9183060D
+ 5F4E9ADABAFE230A3323F39D7619DBE0E8A691ECBC63538DA28708EFDD8A5658
+ 07B73B69CA77763A2351AECC9FF9359161F826872402E64DCF0ED24205C28A73
+ E6F8944C35B5FCEC335F0B6D2F32FAAE3B03863FEB1D206428F7A9549C07375F
+ 7517BB3B3258E59DBB81B5F65107D9FD913E009CD539B6835E97EB2B4551E9B1
+ 51FA9325A2769787A119F9D57D074752CB308D1E5C30060BB2E763F94ADA4FB7
+ 7D481192801A2683B324860C3826867981BDB90D287E41A11DF38CC555002EE2
+ 71CEEAD147172567C8276FF11CB8D860535CEDFEC544F8C3C7780747B1F1D6F6
+ 459147AB7A61137D4BF38F4574723F7A2C99F467CF9975CFD91302A7C36FB22E
+ A32043267F529937AF019F305895965B31B6A81525B8A7318784A51438999E44
+ 5A40918DECE1E8DDCBC6C1B69EF0F54B6A498B3EFFB981D165299F2F6B00B06B
+ D069152F682FE955B8AFA1BDB531A6D427D11821AA929426F46E1687C81CBAF5
+ 55AD50FD625209AF022863528C6D864B8E6F6F527760034E8AFBCA9EF908E1E1
+ E6D0FAC643D55E976944DB6D602456E3111469B791149119053721FF47BFF16F
+ 80A67D5924C894E7BFF15A9885558AF3A21381E23A9E6365D6ADE37519C52BE6
+ 419C521946877637A613C34BE066CD91F3C58A533262205E4EFD31D8E07D900B
+ 4B42E4BCC5167B330DC4B8EAA5C7A4
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMBX9
+ %!PS-AdobeFont-1.1: CMBX9 1.0
+ %%CreationDate: 1991 Aug 20 16:36:25
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMBX9) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Bold) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMBX9 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 11 /ff put
+ dup 12 /fi put
+ dup 67 /C put
+ dup 70 /F put
+ dup 73 /I put
+ dup 79 /O put
+ dup 80 /P put
+ dup 83 /S put
+ dup 97 /a put
+ dup 99 /c put
+ dup 100 /d put
+ dup 101 /e put
+ dup 103 /g put
+ dup 104 /h put
+ dup 105 /i put
+ dup 108 /l put
+ dup 109 /m put
+ dup 110 /n put
+ dup 111 /o put
+ dup 112 /p put
+ dup 114 /r put
+ dup 115 /s put
+ dup 116 /t put
+ dup 117 /u put
+ dup 121 /y put
+ readonly def
+ /FontBBox{-58 -250 1195 750}readonly def
+ /UniqueID 5000767 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+ 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+ 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+ D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+ 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+ 2BDBF16FBC7512FAA308A093FE5F0364CD5660F74BEE96790DE35AFA90CCF712
+ B1805DA88AE375A04D99598EADFC625BDC1F9C315B6CF28C9BD427F32C745C99
+ AEBE70DAAED49EA45AF94F081934AA47894A370D635D93B1823EC35EB8316AA1
+ 86031FCC99F57CB21E8400E54AA474B57112F0D4754A16BEC19117E9D3638986
+ 0777A71B135CC18E20E193AE6C2BCD89F4A27516DBD2BFE69FF9920D547796F9
+ 89E0825B6BD5F492B36AF136EA91B826501ADB1979A4204B2CB5C0517F2B9494
+ 9B2077F316D2B3DA256C99F7549E6BC4B04FE12072B09B4F5D482A126AE351F3
+ 97DB85F3026A793B51E6B28B54661FEB087F011F0BFF67272DD1E8825C180723
+ 22AE77CD6166D2605D0C0F131537417CB60086F08E7197AA916D590944BD801B
+ DEE8F29FFC516E11396CCB8395CFEC9262E22521882DC0316B0A129DBFA5FB57
+ E656890C2471675E0566FE461028FB05532E274E6DF77E7D320D09B2203BBB5A
+ 8B185B66B2F8A18A49589C4EE27596DD56260D0D759D2A12CEF7FC3010BA1B36
+ 85A2FD45129DC01A0C7570423305C25D957DFF9215102FFF35F428C823D549E5
+ 014E7F99ACA6C10B3C92805376D0F3F280D65852CEA54F5CC9DEF9EC1347824B
+ 0733D3341B34937316E77E952AD9366D3B2ED045165565F07CB636385E5A5911
+ 2620E185B105EF6C93890833054E05B6301137338A3F1D6AB2F80095E57AE60D
+ 6E5EE2764624849978C811EC38E014AE4A5823734C5CEB2BC22DDA46BB408D00
+ 4F25CA8ED287D35E26A4CACA77D2D4B986ED2ADD3BC0C3405741CAD56DE28C7C
+ 68E8944967C022CC55907B3DFACC1EFAFD38D3EDDA1AADB6E2C006ECBEFAC8D7
+ 18ED3C46C331623D8FAACC6CF9292B8F1B407806A0D4808F51A5BC97FC6C534C
+ A507D5F9798EDA35A1E5E2A5E60F809845B0C7801151B1D86FE2D53662787A39
+ 055C6E9017C59864C5EACBAC7E4360CC7BE05CB18976527DB3DFDF1D1AD7E38E
+ 40CEE08DF1D44A264AF7FB27A4D09C9D00D3854CFE9D9A2DF374856B35B24108
+ 93F13B4DC4B953E5DDC4A46094E7A0B2C63BCEDE3CA8A994196C9E31C734CA38
+ 88A20C70F37248D02D9FBCF2417762C49339D5296A3DA0B1FA5F92D6834BB9DD
+ 71CCAF9A223EDDBA0EB2465F95F320D5A7B1635CC1DCC5588A7F3DD2968C33AD
+ 2F8043FFE8E0FFDCAE447E17A472969E8B91277579BF32FB614426E66CAD0D5F
+ 5AC6AAC29F62D823B9A9FA9ACAF0CD617E520E6DD14CF2437D6587A9F5B4980F
+ 3DA30F2D849D58D53801EE797AFFAD7CE0FEC346351EED0485E246A6B3FF1CB7
+ B8439F1DDBB2A250B779CB385F58EC19E9C8F0D6074C735A90A332CE5E4EAC1A
+ F446DD62FBF1AEA1D3034E8F1623D694BA7B60EEA45E426050B663975A364DD8
+ C15CCD9CC2E6C3884ECCBB52C5946624E23503F40EDC41219F9E6691EA87BFBF
+ D4B435EC4B29037B77324EB0D0B2A1FAF894BF0645E4B5A1852D95F38BACAEAA
+ 8D9BC938FB8A19875EBEBDF0A2A61982974DB14BDEB35237EC57C81EEDD5CF26
+ 676FEC01FF10D6182CA983D5FD6725844A3C112826A2018E90FC7B689EF92601
+ 33B95EEB8C5722B64ACC4C36C36FE5FDAAC12A411B20A41EEE2D5A23DE1EA956
+ D8ED2C597C804C73837761238779F867A9AFBC351DE16449229C827269F6C408
+ 63229CB2B947DED131BDCDFE85A3AED42E79A4A5949DB6E3EAF77FFB512D9234
+ 6CB2746DC0EC5EF19563BE521F4D6A224A239B9CE086C5C1D0AFD5D469D16261
+ 2BA9F8673E58564CAAA1629DD6887497338C912BE2900E639C0EF4A24A0DB4AC
+ 9954A757C7638808978568ABBE77CACD295BD8048278C8D0242ACB97C955CA06
+ EE75521E0AC0BBFB2CEF1F0C7BEE9B09F4807DE44A63C4AA6E98D6A932314725
+ 2848BC20EECAA657ED9DD829A0D36D8789ABE30D840955417347C5557B5BC4A0
+ 072658235A4E250CAED47D576D51687593DB171BD9AA1B6CF46D4B08E84691D9
+ DD9CB6C14DC49D97A655D08553822CA8D73CB07576E82F96EF37DEAEBA06CA92
+ FE192EBE70EF574009FCCAED88F8FD7FF5A728B2B915FD404D2184F79A221C35
+ E355CB33D7D7356915808793CCFBD5A62722BB4A80A0B0DB9FAE17B2F561DC1F
+ ECBB64ACFAEFDBA75190DCBCD83D690C290D28580B4658431A0EE1B8CFFF53A9
+ 3F56468073F9820788B44A24DC956AAFF50466A052FE006EEC1D4DEF923C4222
+ 29B3FAECAB9C45A226A06929D8090EBDBF0E716316E57E77A1329E0B78EA98A4
+ A9AA4654A80BB1016E6C05C5B9C6CCF9CFF759703E264DA184E22087C01FE15A
+ 2C815677AA7961464CBA737BC648CF7562F3A355D1BE4FF3B92C57E39F2391F1
+ AD7418E941C0B4F950353E10A9965A910F781E0A0FBE0723D296AB16514CBC64
+ ABA01336807ADE1DC416585D2470EB2E7CA705167CB2AA6F3BBB486E66E1A835
+ 97CF3DA9D0DF1B807CD9351F571C6608E9173264594F0A8CBF1D28A888065998
+ 0CE4A149E22EFBE08FF2BEA8EFE751577B3467D9AC4A78B651DE762D041FB697
+ 1C2A42E4377746D43306B2B2BEEB03472F184207E99F016139872BA6D90B78E2
+ DA5B5A48A036EF0630DF54B52A36B21F33E14C74AC1BD30F0DA52E1B4C69A81A
+ 946B43AA27FC5A8E70C4B898F017C3A501F9DC31CA3DBB0CACDC6AA89EBFC47B
+ 32DE3EFA664905809B70F2884D007A0CD316713AD8707F65E21A43E2C1950353
+ 09357D1ACB4AEC53782B885D8BA4951AA00C0F655BE349C7B496C0F875A995E2
+ 0BB5B90BE2235E9D3B6DE338074C488FE6051EA56A1DF5D3E8C9568B5CF49446
+ AFC90F38F89697F757CBEB0F23D3CD4486E59005CCA28F8C5296401A9171D385
+ C3282015FF65B80811FAC209233C4892697056D7E3AD7213158840C19EAD305E
+ F8D701FDE8853291DBECD35D03ADE25BB09104686BC3151AE0DC65FE3D92C382
+ B6AEC51930AC5AF7E2320C8B78FC2F9A7765D0B0E406792CB448C95E123C527B
+ FAB8080070AE5291C279C50D371110D467AC9E4157D9D77474EE0D9D77408463
+ 157B7FA631178636BD055F25845575550635D60B71A73C6CBFC0DF059BBA5800
+ 6D0B6A7C5FF7C85D385368B6668CD3531F7CB072AC04607D5220D6D56FAA6E4F
+ BF78EB032C2AABF34C9E77FCBB665F9808F1966632906A3FF7ACB93DC6C93663
+ EF7E29ABF09E01B5F9B7442BFCD7CAF5964CC22E6E809E34DB3308EC4EDD6510
+ EA9AE5FEFB956EFE6E3BD763D578512F19B077C43B4F815BB0C8EB878602B19F
+ 680D152C24A6D776C6FD56073E5B10F19C6589F9CE508FB87EE4085E5F6B4855
+ 68F365DA89450817CAC02CEAD37F61BF11E0E60FD8401EE659120BC638B2E912
+ 5C6A5B0642467460EBE1BBAE6C49589E975F0E8C186DF534B0A8427277C48E8D
+ 851632C18297938C84E39BD7AFC8A4792B5B7860F68710458835FF8684EFA4F1
+ 77D6AD80A4665B33E969035455A9603C055ECC3770F3B6231E889F9E21324D23
+ A1BDE5A1047737B3A0FB5C8936B8B8C287EDFE014FB1AB1C8BCEFF9FE68837FB
+ 9E3B5AB8DE7E7143D41B295A8F09437D3D4001DD6CA5A8B6C14C78A2A40E3784
+ C1B6A25D5FE9A5526626016158847BC0875A7F5F642E8B7A2627449E49486CB4
+ 26DB4FFBA17F081CC681C40CAB0305E81AB4C9B1963E21252984100240A94247
+ 9D5036A97F920A70AD6B92E669A054BC823BEA14DB1EDE9971235A25887F110A
+ 7001EBE52894F9E25CD2C2D5A6C0EDF0E0E8026C0633A1EF3DB1E8ABEEB41FA8
+ 57859F8DB7C7A00EAE9AC880080175F90D118E847B9677E9A59CBAD614756D3F
+ D82DD08356B42002BE3603D8E69CF94F0A8B73F79067977D0DB95A5079CC80D2
+ 851DC46D8B36F65A7D9864EC5D8ADFA4752DFE670214C230865CE75C0048F5E4
+ 60302AD0D6E6031341C7FD138B1BCACD771EA6CAF85207642526EC955B692954
+ 26D82B58B9A3498813A56F423A3E46D0BD087C6BF3A9844EE29DA74E66BB3EA0
+ D17350835D316A8D618AD6C7D19CDDEFB9736DD522F152985507D61AAF534502
+ F8F7E368E03C8897F2ED9FFDE0FF1B359B41E7723FD904CEF7004EFDAFAAEDBC
+ EA0F3B3F7A235F43709D6AE7D3B1B61E9818A810B597C4E73E1088616A7B4861
+ E66E8108A57DC75566DFF7D5FD857902A695C218BA1C4CCC39A36911BD24C451
+ FD1B926A16082883A5AE3A4DBF88FE2B1D8AC8C83DCDC139B15CB10058A571D9
+ 5FF9E1DD07F813661A9A7F7A65DC81CA31ECDB3C350C2E753A4A72FB1B2F40CA
+ 8D2B2FB83D11EA82D8BCD948134F2E35F5DF18EF8963DD798E54095E38557BBD
+ 2E28ACFE315BDECC6BCCF953D7632B294999360A23E8257D2983BDF8FF59D72C
+ E830804F41CC04322920B6FFA10E27F09976ECD38A2583F9E5C807B57E883C60
+ 6794E9C7CA73CBBA5EF14ABAEDB2CBA8BFD3E819B4EA3C2471115DB5978410B7
+ 6817A7F0FC5986603513C0EF5B66B7EF9527B9FA2C039AD3C7824B6B3BC7ABCE
+ 791BA1F4A2604753158B2D622F8DF05B2235C3609C59CD51F639DAAF68488845
+ 9D7AD872BCC58E70E6701EA40007102CFDA11242A0B13546F6EF03188A2A548C
+ F9998D4553BB84E9071F9A07BD83803C7905F0161CBEB3939F430E46C6C548B6
+ 938B6D893AD468CDB9DDE2FCBDF7498516684F89DB8B4155F6B38CEFC85D173B
+ C3A496E95BD3A48179977BD51C07C8F7DF83974DEE8BDBF74989DFEAB5AF259C
+ E902232AD180472CCAC91316655C6D1A5DEB7DBC1D47D4ACF8B62593B94F2F38
+ 28B2A8143CCC6D5408C112B3F5E16BDEA1E645AE31D2BAEE474748792A7F806F
+ 98662A1DAE3862E08F817CC19DD17FB8D84968FB36EB4FB5C3063ECE7EF70C1B
+ 40781D2EC8F46D73A7B7362249D26DD2166C2931895F4253D509DDEF59BE840D
+ 46521F1B28A26D78AA3E472A7630A986B89B9EA3D4FADC4AC3836F1EDFD093B7
+ 6B91E044E5298D844D9B8794EC427888C93A5CAFF72B2FC7C26CF1D448F244EB
+ BFF4936D661D976D993F21DC8195C12246460BC8DF606E0E8C0FB8DF3C209473
+ 83FE18A50360853CF1FFBAFB8F97F313876DA250F615E3A79C493D5F306A163D
+ BC412B390CE63AD2717B61B006A03BEC1F37C13E1CB8E8DE4F14539719AD9611
+ 93D2F432A8E2408ABDAB018F420A73507E414311BAA9AFA09304C523C591765D
+ E2366C1EB898C0A26FA7592F47D85E12AADD7556F0875C28F8C0D800E4B600A7
+ A079D8CB1E969AFCD851179DAF48CACC3FABED7CABD9882EAF1E51C75C878AA4
+ EE5EF1F3F2336000AB114D1FFA15044282E53D3DD111C8F220BE9964E89DB3CE
+ 19DE5E33108ED9F5F8AF1A9A9C625207A6280E162EA37F3E4414586EB5EBA18B
+ 3BAC1454C73B71CD1A72ACB31534CF871B47985340FFD0342B1B86D03E9063FA
+ 6BC1A10E33FC140B9BE9FB82775FC186BEABAE5A140C9CBAACB9BB0A4675EE43
+ 8B19BEB9F779DEB1E139457DE1D9545DF6E32441CCAF70F21359EEE8D5CF5884
+ 170446EB366AB2DF8BDBF6005BDFD5C42DC671419C6E071EB45400A6D9EE2B0B
+ FB00C5E93F14BE8661016C89475B46A8AF08546E8E20F51D2AA907D4A4123C72
+ 5DE3B4B2CE6E15A0CD7919541BCC0BC69CC91188D0D26B9F6C3DD604B17BAC1D
+ 4FF71E8D45FD000DA663EBC7C4C54B9CF861DE74F1CFAAFCF58F6EF40D7B1241
+ BEF0577CAC5803701CE8826E402F39736C6F745D2196BF34A3F74BFFFEA18FE0
+ A1DA3F956B19DE74FB2CB36D3FAA1027D40DD54908D5210077CB3A2DA57E13E0
+ 32D0167021A941D843DEFB028A25D413A837BC12FEC3FDAE4465C4DE415BA5CE
+ EBDC41A07EA46DEE33C39C8164864E88C4237955241922EA5EED917B8377787E
+ B9958C506B261B85C754C1B528C821A03F995B3DB4EBBE5186371D5D0E931D66
+ 4F81339C6505BE8BCF1221F7020CAE43CED42FA8AE05A2E375851E1B221C9CCB
+ 4A05BF2832F19125EC35F4E855203B6518932A4B0AEAE1A3E786611BC7DBCA88
+ CEC4361EBC62C34E897AE13AA19B9F49B4FB82413D16C56BA1A1DF761C92F663
+ 45430ED80F26A6D2E15E3D66A897CB083A7B3B0F54F7C9EDF686BCF0AA3C32F5
+ 83C740A66CB027E98DAD50AC30D9508CD4F145BC64C1B6E308F86F4A2F192FDA
+ C119851DBED857D259EFF31B85AC2907424C7563F2AD0CEA81F0DFF93A4B0BEE
+ D743E8532AF57963CA9DC0AE3265521A6305C7454E4FF44AD18777EDECF49D06
+ 33B92F1FBCD7BCA3A9150784652C72FA0C7D4D51F603132D7FC3799B82B2639D
+ 7E1D56DF16C0A0F8F36A6AF21F20BD3CE58E4CAE76FBFC7275FF4EC91522EB76
+ 95F400152E2522555E33964A290E7B3A6E847BAF9709E5068D45368694B17BE7
+ 65EE719A3031FA0E3C657440208F827CAC77E7F3266D99B9C0BEC66E7238AE9D
+ B54AF6B86BFF8634BFEB17E51E85E471ED81AEAC752EB379483EF4086D02ABF1
+ E880CC6E5470BA67F99765D0961A92CF88923D8496DA840AF0D658B0606B843B
+ 6B439DD1BB8CC89CBBD1329998A8BEB71F7E31A8CB037E750473E971793A11AD
+ AD76DC199CF339C94B1E05E2945EAF9F3155069424BC1D7DF51EF16C52C2B8F7
+ 0F53E376
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMTI9
+ %!PS-AdobeFont-1.1: CMTI9 1.0
+ %%CreationDate: 1991 Aug 18 21:08:07
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMTI9) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle -14.04 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMTI9 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 12 /fi put
+ dup 39 /quoteright put
+ dup 40 /parenleft put
+ dup 41 /parenright put
+ dup 44 /comma put
+ dup 45 /hyphen put
+ dup 46 /period put
+ dup 47 /slash put
+ dup 50 /two put
+ dup 51 /three put
+ dup 52 /four put
+ dup 55 /seven put
+ dup 57 /nine put
+ dup 58 /colon put
+ dup 65 /A put
+ dup 67 /C put
+ dup 68 /D put
+ dup 69 /E put
+ dup 71 /G put
+ dup 73 /I put
+ dup 74 /J put
+ dup 76 /L put
+ dup 77 /M put
+ dup 78 /N put
+ dup 79 /O put
+ dup 80 /P put
+ dup 82 /R put
+ dup 83 /S put
+ dup 84 /T put
+ dup 86 /V put
+ dup 97 /a put
+ dup 98 /b put
+ dup 99 /c put
+ dup 100 /d put
+ dup 101 /e put
+ dup 102 /f put
+ dup 103 /g put
+ dup 104 /h put
+ dup 105 /i put
+ dup 106 /j put
+ dup 108 /l put
+ dup 109 /m put
+ dup 110 /n put
+ dup 111 /o put
+ dup 112 /p put
+ dup 114 /r put
+ dup 115 /s put
+ dup 116 /t put
+ dup 117 /u put
+ dup 118 /v put
+ dup 119 /w put
+ dup 120 /x put
+ dup 121 /y put
+ readonly def
+ /FontBBox{-35 -250 1148 750}readonly def
+ /UniqueID 5000827 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+ 3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+ 532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+ B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+ 986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+ D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
+ 9E3948FFB3DF7BFF10C9BDA4EFE5F68A8CB1526990D1357AE6D2F7C2D2EF8496
+ 4E47B39E6712EB8908A3265E5FAB40567E866C244814449F1E993AAB422C3F1D
+ DFA8C7118584F2E5197FD4BFA3A8AE9E953C6CD4672C0FF51E41C3A919749C1A
+ F06650DF4C5E17492164BDBCDF22609A74BFA7F69960A64B9F949FFC2A807458
+ 8579366C4F41BDE1FDFBCC4845FA19BBB6963D65EE8532549274BAEBDFF24FA6
+ 03235D1BE37C06B1938AF369DA75BF38DDBC87A1FF445EAA16E1895ABE9506B9
+ 211955753E447865D33CEF007391D2666A046277A30A49804FFCED3FEA5EB2C3
+ E52EE14A9F75241EA10C91974CDA6236EB840FD44D6DDE4D9B3266C3B99BD38B
+ D835BCA8CB819C073480FB972CC028D218F6A1D344CE1B63F4FBF2C826F412E1
+ 6E0B05A26125865A14FD7B7030B478BB8BC6BC395335C3BA940E1C348267F4F9
+ 0AF97BBEE253511940F1048E175D3569F7D05A28851B6F50765FEB6C9654FEDC
+ 1BF52F535DB5BB90C1BD5D2EBF75E0AEBE82B20507F3C28A03746781018D4EB2
+ 298E4F2C27ACF73FA73EBE43F014BB575AAD516C0407B29E1653375135ECB74D
+ C91372F06FA8EF37C31AF3FA48AE65318EAA6C34830A5377ABB2DFA5DA53A574
+ 4266FD34C25C8025FD7DD45F44301DCF03F51335198F9EE71CBD72BB906F445D
+ EE6AFBA2FA06A0A045D56CDE98A6F0DE807D81F26D017B74D1C7A5AE254B7705
+ 7D96CFB3C342DD38DB5730ED913639C2BF3CEBFA6F3D493DCE5F8218F8BD8035
+ 9E6CDFB95628F7198CFA2EBDE1905F051BFC4F835C5A787E3B43EAD947EC893D
+ 9D1B04A9A7EE7CF3E02A58BB0867AA7C77F30CFEBCB4B3E6EC68F6B234FB6B26
+ 7A9D88A3CBF7A2992E1A3887C334B255633AA1B18AB64327E46B507CA8131CD8
+ 65A99750C487916F0D4C128669DECF0289DDBCB7057FA68DD55D60CCEB003030
+ 0974BB32E5FC1593EBF56D7C15675826D268F84AF224CDCF3FEA5A47D1AEA5A1
+ 73617A55E13475DB23A43101CF85A0FBCB186B563064E88BB0A9A477ECC3E3BD
+ CABB707FF08FB59B9E999B5C6F4FF437DA62B727771D3BDCE86CD04E006007E1
+ 2EC627AD74884742528C8353938F600E2A2AB60367A78747B5DEB642B69BC370
+ 09A10A4B9F68E682113079FD061736803F2DE7297262A70D17D35D41471E1B87
+ D780D173C38E83EAEB7365DB28EFEAA8A4861149E3632E0B90B79B079401E6CD
+ 00E84AEB5BD135788BE5CE936CE9550279FDA1FBBE8F56CBE238585FFA0A318E
+ 6FD18A73EC10DA6908021091E42362F9B4791C053A1978A5383D4B985FF53AA3
+ B9AF065C625FFB81E9E68464F79E55F9A324FB41B059EF57341444443EEF7281
+ 98F70FF9A3707C1562EB7791757CDB00CAF9270ECA87E326418E93E1DA0B31CB
+ 534491CB82C7512AF09AC606753BFDCC18DCB9B2EC9089E18647435DC2662E4D
+ 77F40F01200C0F76E81F9E65D7E082DAFBCCF6B5F878F0EA1D2AFF21ABFB37A7
+ 9D8A84B584D3850EE98F7C2050488BE4AF7376C4577225EF633411887BE20A32
+ 5322271CF6B4763CF4832E3844841FBC50AEB2D809B020CC94257960333D6A67
+ F085A2C2E72AA743234693154979BEF79428FD09B0447A4B6C4174AE109E4775
+ 0DD6B86AF3AF51459EAF527544F5B89F34F07B0EDDB6E1C24F98DF5A513CE54D
+ 1CD2574F477CEBF23F57DB321C2DA6DC118EFB63DAA3E8FBA0230038D071AB51
+ 6FB4A9AF6F1DA33A8D4A5FA562491D6DDF8B2E55D75F7D2A0064F91AE512C91D
+ C222A1786820346B34104866EA91875001A464BFE97037578F4CB9253EF46BF2
+ 1271A4D44751CD0AE684E5470F09372827DAA1A3291A34E7264958618D1C58AE
+ CF0FD5061E309AF44206808FD650324C14776A97EBBC6C10F9B896DBE12252E6
+ F3D0A3E68008F127E464720F3BE878E0527D4CB2A495886CB407B99A8DC2C5C3
+ 7C73B1BD17B4B1D5BB9FEDC5EBC98E1669D8D46A77A4011DF7A2E494DDE5E249
+ 659F04ABAB992EEF53CBCEF7F118E6AD70F9A39B680709F53952BE3E813B3EEC
+ 3485D510BE61CCB16DDEFEB6771220E7CB58B138E937732D2D41FD2AB3B98E8B
+ 891958DBF304D3B99E0D19CB82B46B932497BBCC223A299E8AF88E8BB89B13F4
+ 739DF0AFF3CB10D3DEA10F810190C252930B1F33F86A673085513FEC4E4B7DB4
+ 40FE1D670232AA6B1A16AD228F30C707F23523CDBB0BBCF701C0D7A206C0555E
+ D63F806BEA3581407E66373BB0D986BB1909F6EB3C403765118CDD982EE864B7
+ 87D7626926FC110B37CF81B74EF25AF1F8A815DD4B86F9F2C0EB20BBD195A8E8
+ E5AF28187D0D9E991874BEF5C811FBAA40E3CC690DB9B076BBE0584CF9DEA0F7
+ C8CF89B089571B30CC1F9B1AC38A61E55A58DDEE63353604C36503A98936F791
+ 7346D2A83F660B22D97CCA242B4F241718C60A8373D817F0D782421265645763
+ 3312463946B30DFF3DC61184E734CB54B45EE8435B5D9750E7A161B5351F363B
+ 97D127C4759F068CFFD13D334F0D296FC23E9F45D6D2A8D98576D3D187AF7FB8
+ 7BF83C96048F2F2A2FEF60CF105E677C891DFB298EE877AC72C35744B1A8492F
+ 01365C0913988FBB57CE72A4D8448399793C4428D31C8F46E9F122C00988EEA6
+ 59CF4405C3FDC55B68F485B93622D96CF07C005357462CA68AB41F55091B9DD4
+ 7A3445D41D63EF255132B481E786E332D393208B4454190D16ECF0DF6DB64DEB
+ 20EF384F089E93ED0CAC88ED107DD9A41E4C283BF43052303D71B79E50594E9E
+ 454D82B6EF62369350CCCEE3BADBBC531390D3FFCB5EAD573FAF9029F6B4155B
+ 5179BC8CF69F4DF484D13D3672D923A72C7228D053C76FFCE57387D290CBC20F
+ 78E1672C5A7A832EB5CEB4F16932DC056E75EAAAA13FB7D83D2D4D6E926425E5
+ 3D63C429F28BD8AC8440F23E0405766115F84BAC8F03B729A38DDBF6FF779E71
+ 2CB5A883BC51914E302D55D2568B309138011AD36301DBB73B7B884E2C421923
+ 9CAEC76D1CB4FA0EDF561EEF3965C30AEF0B3F4CEA1B19C29803784F85A7A02C
+ 57443BEA546E339FE9A6DDBF85307C312C01EB8F08E3A9EE192B81974508E0BA
+ 14469CC36E12CCA6F60FB1EA454BE63E34B11FD6E7D7415862AFFB6CC1F83093
+ 956A1603D316176AA6A00A6274DDDD529CA86FF15F2D4D44B07917412224D8F4
+ 1E0C8F9E3B653D401709794F4E550420512E0D0B8D6F9310B891FDF313DA03BB
+ 57DBF7B2F106953A12ECB7989526B824457837EE45A7BD0D17162E84DEC2423E
+ A5A8371508DD142BABA262FE13BB7B85909677704F19793EC98CE5A55DF77B49
+ 82C832D4767A72352539F7313575EE81C70BF8E069E78AA925818DAEFD230FA4
+ A3A2A1492A3E9661ACF15A57473933C8AE6CA0987CFD39A9904F0F45157F50DF
+ 23B5D9FBC2BBFDE5DD340F64B2C2F4D489F311BC048C4D96C3D826D799D2B09A
+ 43C39A9A0869CFB29641C86FC3E9D1D8FB4D3E4DE1F757078A9955213397E967
+ 78F36F3D1BC6BD2973B3864DD9207840D3EEC18DA645CFC3246BBD8F5F60989E
+ 8DFEA858F1125B4FC276105F5855221958FCA2C5999979A9405A92CEBDB68E88
+ 4998D42EF55BDEC37CAFBEE55B1FF693BBB9F2FF4A6F9A3FAD8D5CA781E1C734
+ E76D064166DFF988EB95509F86C4B34132F956A02D60E6B0C22C5FB17270161C
+ 64C64DDB6694AE88E0A951D159D1039570CB97AEFD6D43346E137EB09100660C
+ 386B25F7E09A0A87464B2036923F7D473B5002D46A5DB52BF5B0B9B89C54603F
+ 6BDFBB9754F4323014A2ED130279107518A7CE219B6AEBCFC073B2936EB6501B
+ 69DEA55F1CE37475B0E38E77ACD9F7091A24E8F62010259E89356B82EA6C6820
+ DE98EF0A988BB72F23D9B1E3A3BE9F830EBC6A32F9AAFBE56A6B7DB31911D085
+ 47F6BE18348D13D47D7C2BD3022D296FA074D274A5CDEF94D013812EA78B4665
+ 10B60D53D701C2D611BA2E6E8C6BD6AABE1A3DB8042019EE7C1BF6E9A481FCCA
+ C7A78B9D667E948B6DF9208C209EEC359480BD792A5086ED822FC7E8CDB9C079
+ C089198E591AF3F66E4F04D7CBC38C60AB105B15B9C656197B7C7CEB322445DE
+ 5D753CBF4B2F915AB427073E37CF67C71525F0E679B42A24F4287141336E7529
+ 787E2FBD5CC8E51DB3FD95F5469CF75EF7677357F8D9E8381055FD94C85BF1A8
+ C5CEDE9DADF5931C861F6B62FB168E1D4855207CF00280AC5DAA771E8120D8D4
+ 9009F2078354F254FAE299B9F0A01395ADA669CA68BE192FB731ABBCA9C01F67
+ 5EE6800820CA2417320D6A80FC2A2DA7147D571C114C3A3032C26117B33346AF
+ 1D137BB5973D6A7C120ECC4B7DEC466720F4CB55B5F26E6A407C9379D43C099B
+ 8EE1644E4ABD389EA2D619DE1926236B2DD64D12A28026A8ACC0C679C77E8B84
+ D0C8284BDE985B4B13666CB65CF83F4031529B7B5E8E9E21A06CA4D42BC289F4
+ 122268373A6BC3C01A5E44F904C34BA19289504DC32D9971BF2925DE4B69CD16
+ 2D925CC7D9FD445CEBC540215BFA50C0550670BF0E0AB9C6977D7353A5B43D31
+ 216E5D3A29ADF294167F0440B9EEAE5CB090B002458BD58CAD7CC081A089B507
+ 8482E2F61DABB370163E38F121C5842C62041469F4FAC978C8953E9B8F418E68
+ 6CA0B8575AC15DDE93DB5B68EF730B45BF84FD8A68B93C059B6F1CA0497F1782
+ A3585D9EF6535E8C32190175B9A808FB45E6FBB6F33CDB4DE262180BC0E2F269
+ 049BCDFD56D3304244658B9F21EBFD4409D9EC538AA0BEA139E62AF8D8DF0F73
+ E52EEC2D66C8F388D4C77D20B98B6FB22B2AEA6A45FF98101504FFFD435197A0
+ 6E22173F774D1001BE4C9B4E30D0F304FD159ED6FA15388E351A00FFA0093790
+ 70CC703B8C099241C94DE7144B0D69CDBAF81676A26904151F30726D9CE1414E
+ F5C0747D7A00C6CD8DE276805FCBEF69E524300E29F364A50D3D24DB922076C5
+ CDE012536FD1965DEDE8D2B6C26F93B084AAE4A407D2A8B19C3FF5C46035171B
+ 78F6ECA5EFCF53AFA498677FBB75D5D55756ABA51EB0060198F838B5D9C97592
+ 01EE5053F39D31F960B8C9A8174FD0964344A39C8AA88DD43C9A9D10C2F8B852
+ 8E96A2AF3D9D393ABEC3FAEDC8EE53F9D3F3943A8E03445C196397656D4D550C
+ 8152AAB9D4F4FF96C95E78FBB1AB2F5375A8892776D5D841BF9CFB27587D0E6B
+ 5F87EBA6C67410E4F1B7867F39BC7918540106BB7A8A65EC3F69D05AF19E5C6F
+ 986CD9B011C7BD0113589FF6C30D2ED6F58C525C2735F9495838A1076C7C968F
+ 74C4A978074C0DFEE391C55F4B7DA0AB9D946FD2A13D6D7B7852EC07FA75B9E9
+ 9AC105A7E9B6EF305BAB91435B243D71E38DC78A77C4387568365A6171D373CF
+ 8B2B5BB176A948D8AA44A00160621AFCA2521067554C59C9ABE5EF7203CB656F
+ 3614234753DD9F638FC7D6C8AE6F4821248ED079E2B0471BE1B803A0466F0979
+ 5EDCE6A322B257E72601611D81CF5C072FDC469B62107420396EC34EACCD203A
+ 7605C056F4E510F5F3BFB99536F2B488751356D456C8BF454A6E7AA29B6775BE
+ 1F5FFD2BDA721F0D98667219DCF133F667921602620B6C213ED8E61452736DE6
+ 5C9159079D53F9A76AEC444D53E2B3318BE647BE36173A294157C8DA3B52339C
+ 3D6AE77A2AC6AB9AF09C10AEC55131B9829455507585CC0477CEA8986691A100
+ F0884355AC773C4C5B6309C39F709B61652D35591C15534CCEA0A43EEC1C6248
+ 60E3CE679132376E233F1D00A9162C1FD206008C07FCE938F0827173A7A61072
+ 5759199ADB3A794BE2E26D6228CDEB934DF2893D65886E604C1E8643680584DC
+ EAEDE75CB2D85B6ED7E78B2B4983BA785A06646233B8D06A7D38C40BFEE73289
+ 30DD318E8ED3B7B3662D7BF4CF407D0F922399CC157DD5C7C36342AD051311F3
+ DF3B66B8EEEAF0E3C4646607FCCD13B48A4FE542B059DFB9AD9470D3B9E3D0EB
+ 1100B7B59371C444281D2DC9403DD8DC638A76BAA5881420EA8D157957F52FE2
+ 8E93F53C50E089FBAA6D46B3DF7E62720634F8135B014F42F4E75D83B8AB96EB
+ CDEB183C120685D28C9FAB487B43BFEFE4D6C45FB64865EB2C5DCC5C5B227114
+ B9B8EC58DE6634DF68C4C66400D05C113CC6DDA66A47C9A4B2CA581244B8D226
+ D782371A7F8F33036E38EEFD077611A7BBABFA3F475047520B67242A8F03714E
+ C9CC8472C776F7FFDFE234179ED774EFEF6E0C554D3CC19A87C929EF6964CBDA
+ F2B94B196AF7F3A75E7892D5EED8C50F20A30D3B48633859DE03D6C9BFEF23AE
+ FA3F99EB9E0874AE19A3E2FB50DD64F237CAB3E043C250EAF58A9C8DDF68DC5C
+ 80EC392DE40FDB70C6845B66ED0E1054DA54519082E774E63017327BF4E89EF8
+ 19693CF9AB28C2D176A56DB86A16E0656E526E2BD9E5CC614BE0D4EB3E25284A
+ 96F594C73F42E3B0FC8C0CDF380EA2B30140A72DB09D843D26BB683589488A3A
+ BCD6D9E9ED68CD0B8976ADB2385162A6845DFCEA4B49EFCE8019B02191776C41
+ C7A430FE3930035AAA6E39FE5F13E2E811BA4AD0DF03A950E72E0B3443C34B60
+ B29C9F79A22ADAE0FFB445C05731686937E0EB000330CE00F41FA96A1A73AE0C
+ 5D0553E05A0357A819F3EBE5E3F3E979E42120F191CBC8A6D14537C6E46D2FC9
+ D16C8F7E4B1D249385C747FF63A645518FFEBE3CD633B37A68C01D855BAA5655
+ 578E5D47871DF21206CF4C4E4FC4B06BF9EB5944B8AAB9F9683AAC6E47AD8031
+ F673AB4BA1A18FFC7DABCFBCA64BC30CBF3FD2011448F6BB71E382CE396D725C
+ 951E700856E1B2B514F460FD33EFCFA65D62006BC9B03FD468DBE4CD1585C992
+ 49A621B615EA14A34066E5F7AEFDA2A6B30A8DB2B72472D0BBB565AF6FAFB3BA
+ 016D515C994E2C19780CED33A8C4D1D295D0964BC1D9C9562217B66C4E4BBB9F
+ 70BC041B6FE8C27EC9E822F9FCEFB91C375788CCF6E8902F3C73A7C856BDD563
+ 05659522BF4DA8D5A53A08C99986B0E7D5A15D01ACB56ADC7AB9368982331683
+ 4BAA1E3D5FC0CF5CCF4B6285C7CC2B145C886B918035BC7928E81774B722B345
+ D1CE1D2E1D564398529B57DDCA174ED5DA509DFAF7882E7E2650DF23367D89F8
+ E833AF1E3AC6B9157374D5624B8F4C1270AE5B97F7EE4B3D1A31AB9F68A7F442
+ BD304D42B16711234F57F737B672CFD6E409860FD1F873E5D98B6143BAED2958
+ DA34C8C1EE89FB2220913BA0E49DB0D7E74CD8E11F795CEA99C762C6501C9A2C
+ 02252FA62D2F7B2AD6225CF1C3236F5F60F048656BA162D34FF41AEBC58223EB
+ B7A52CC251FD4F2D69C1B10734B1F34A99D4204A7A1F785E3455DA6063E614F2
+ F876456B9188D3EAD2C57BC1EF72242AC6C422D7E9C4FD076D14F3A5256756ED
+ E515FAD2CE4F6C7612862698A0788A8646C96748E6A56B0A437E0364AFD7C999
+ 36387629018CE34FBD4DA2101789B7CC8DF62C91F1BD7495525F8E9530B2B841
+ 28E1B5BE67D4037BF7A54920FD6B8C72380F84C98A660E97EABF206E3D56424F
+ 4CEBB2B9C488A8B754A7185FB37326BAB69661E95D79678F30F7F382FE11157E
+ 94F2BF4FB1695813236E5FEE5C4C6D65F373E7669DEA028C89A189D3264F78A5
+ 38A450588D8B0E30D5DDD61311AA8EF1A1EBE06E3B21E54D6FAE6C6D0E638BED
+ 6CC23BEFE9143BF037A696ACF871C41AEBE527058FFEC9309EE8F38DDDC509C8
+ 83A137D0ABD9226DC08FFF2ED012B17ABAB8E7E228151AA20D086362CB4E456F
+ 0EB3D2E5B4A7BF5191193282CA409673D9C04BAD2491CEB8E10D77026B31D3E2
+ EB9D16340B4C57453361FFE17B9C4C5A05DC12A81C30A320BBFA057213617A6A
+ 06C0343A371FC3E643F8ADC4251F7E9F753F4AB17B5266E3FE193B9379957FC9
+ 34AE290E5DD6EDA142C35CCC6C8E52ACA2CDAF29AFAD59A0E754499B7E667747
+ 2417BA5D2ED0E8F1128F680231575DA1D29120351B17243A576742C7E11FD1A8
+ 2A2816B25932A0F266BAADBA47CCBE5170245F7A9914D15EC1443BA0CC30435F
+ DE71AA80E99334FF10B4C6C9CE5543B7E1F22B20693A3F23FB0B2A07FDC91CC9
+ CDDC81C649C09DA9F05599CE789FDDD5462D47CF738F668ADDE9A207FE74B332
+ 22858457203879FCA8AA3633FC3A501C6371F9203F796828C0553E4B9263FB9F
+ 15897E9BCB1565B8B1A87A3041BCC92E0E55EE44F28964D21E5784B8D6F88E39
+ 6DCF963C0D34525886CA7F026D53B4211CEBD435719D6DB2EA4B25218EB8458A
+ D327447C128BD11D3559D15606E2456C14D3B6A4CB5E890F35EF30A5F7715DBD
+ 1DDF0A97CE75930CC4428CED2808AA426D7E3A511FAC7AFE15DB453660F41B95
+ 7D0AF00E1B3F4992529211A525375E0BB00ABE237B5EF5D744E6233C12220E44
+ BF86AA35B36C408594AF38BA6CAB0D3112A9342F557336D474682547F415528F
+ 33BE3DF2FE01C68514CE0D48B27CA1BE8300B4E07F4A12C6BF1B95AFDB38B4DB
+ FAE855014BC05653012DB2EAA1DC3E61B820023DD583A0F1DA9792623D7E098B
+ E3C9A2FB837473C31DEA2074F8F809CD05D9631F7C88B1531556D7A13EED1A9A
+ 4240C19A3C2B83D237E0E6E266D628B92F6FB6A7C4ACD8C67EA2DF896D28160F
+ 0EB72CF402FF79981E4B0E3EAC0C3FD698BC91B136A2D423B7CC7BEE9960D486
+ E74843AE156A6CF2F1D4916C65E1A7B6A40407E2DD554936EA175703CCAAC3BF
+ 8949E2F560A430E581AF7FFE3850144FCBC12F1CDE0321D9FCD2ADADC07E2E85
+ 92F8ACED5A5DAA1E4599833E66E8D9781E2FCCE5BBCAB3790E649088B091B563
+ 0C4627304639B6B58307B041C8EA016BC0E5B36174D61B380A68F99531F7B5B7
+ E5C48749B0EC86C87E0F1BEA740DFEFF9B12762040D488FD943147999EE0CB67
+ 4FE5695E0B88C69C0044875D9190B2A499C976AD6C2BB7223E7EA32B5ACBC743
+ 795F836AC72F2F382CF41304EB2B174E9C5F2F086273112B1733EBD77B04C97A
+ FF48E39C1C5A00BE53861E64E0494B46866F247761B5FC4EA7ABFAFD0EB5AEB0
+ 79C737371C6818E9DCCB62601E6AD9BEA662E88B7048E768C4225041E14FBF7F
+ BBC2D3AF9A0C6EEA364EF6DA5927852AF7275A3D1082C5613D30C3B7A33A15BC
+ 42E20F404DD583B62AED8909979CDD4E8B98E7CE7D606165974564E626C32F24
+ 78AF55AE133EC95B96FE25D1FA58EC35AC60C09A2AF0234A4F1E144A4BCC171F
+ 7AD3E58EB14542943E474F75C66F0BA9854B501A00B494952A83800744C6F125
+ 42195CECB075C63DF07A3C58D5E17ABD3117067BA6E1808656F2192957785CE5
+ B3B545A8B9D80EE59212BA29D223339D96AFE6C46A4842938F4E0400CA5EC2E2
+ B3930C89544E452CA784C5D2046B29F44D31D86CDB187AE0C10652F6EA5B68CF
+ B86C21B94B7E2C189DA835B36B39A61319E9D0BB159A710C2FBDC914C8EDB471
+ E2667AE7C04CD80D89F57E17FFECD563C7CF449144E0D43B3B986DD50BF58C76
+ 0E1B2C7F9F5615A09F3859984D61B1916C82F4E8B5567F2892B805C99B467A29
+ 09410B125064D71DA4D15672F29CE4486890A97E4EA3FEED48B0184D6A29D2C9
+ 0A5199DD39AD722EBE5BA8C2324E8AB3BE66F5489C8091D89AB4112169E49A98
+ 10378AD6BE93D96B7AD1388FC793D645A97FA4B4B61FD89B8569339251C7841B
+ BE19C270D9B852B6ED8B6E719ACBB21C91F27F6215EEFE04DB3F085BE2203D89
+ 09B0E27DB853925820121185B8A81BACC4D5ABB7496F3E215466D83B929D970F
+ B836B1A5999C35022784CEDFEADE195A25AEAE9DCC4157FD8A1BE262009F20BD
+ 4600FDD5C4F96A087EEA0D6C055230C75C7F9C2163012A16A89714C620377056
+ 8D4B7B964FF712D39B15FDEAE3860A9484F379EE210ADC3C1FF5AD10CA6A8317
+ 3A548BF1DBC18DFBB0AC3586152A804D8760D5187D8B656172D3FED9FD0E6D96
+ 8E2A8AB456CC8310F5BDAA3A82EF1797006A80EAE116CE4AE86FB23BDF8AE33D
+ 592BE99590172834105459EE28B766C848F83272FF9A1EF093D7258CDFFBE531
+ DA5217E232876900270304856C600260A4B99DBCE302C0A354C4239AA7B02A68
+ 34DD263372A8C485976FF386BBEF9EB53E4393CD5C880B365EF8E0180B07C27F
+ 06CCCEC981C92ECD5054D1700D6DF25CE15F894DB99B3A0DBAB13EED118E247F
+ 3F89AC43DDC490D9EBBCCD29F1EC879D5C8169C45835E75295456B5A6CB210DF
+ B2D40F99C18DC52603906503ADE5219F095A3E4ECD2F85788241CBBDE3590605
+ 521FECFC8D63C838680A559DC440C2500E9E6FE4B70C2FFC3F9AD55F7B793FAD
+ 768395CE15B930B268344DDCB7857A4BC4DA05FE7A2187F268EBDF6F42397AC9
+ F80C8E1F9F5FBECFC9B71E9F679811E874BAA10FBDFC941846E08252F8185E99
+ F0BEB509E332B7620DB62CED90E11F2B9987BDE7A945AD38169624F1EB9ED624
+ AECCF2C48E5C5DF788AED6C35FB7375BA97C54BDC4E6DECEB9C6FEE35F098907
+ 88FDB4E49E30DF1DEE1341199A0DC9F935C0ECC8268FA324D51097999D0AA5C3
+ B87E690A5A5BD992470946C2FD8258BDD5D0CCFDFD9B8436957314844EB2C754
+ EC45B5082F56BD3A47BB8B55A91FB8FD93BA0DE77124B5CF4857C7F3BF902029
+ AA91519EAA22D50B3E80294CD734F89E4B202E000E7C8D49912F420935239F68
+ 645254DACE6D82C1D45E793AD6C0E6AEB3961B9AFEF97FC682DDA4FB2D841783
+ 310871CF5555DB51BF2F6C20363D9CB03D9AAD058954D2DD571AB48BD0E03A61
+ 4D59E8B070E043670DB36B01E49E91483265BB4057C08F9AE12C78D2E1D9D1DC
+ 37C87815DEF32D0132C4F20A7823EAF5E0D7AD56E441DBA5BCCFC1A6D1441CD0
+ F60E0BE42E9688F5A50D448B9F5D8C68B57850EF776C0475A35B24F74509FD64
+ E9A8E6B2B51A810898152B95A0F3EE3726B582A4D2F292D659757EA00C3B9A44
+ 1549EAB71021980FA8E7DDA0A41404C19DD305B2757E4E66BB31E4DA71D5B369
+ CF70BC5A496074728AE604AC10BB5F98550B756273550DB201EA31596F78EC70
+ 30B7AC9F6360C83F352CB5D72E9F751B90B0F3C328F1A2A5BC0761BF62A21E7B
+ AF14824657B66B22D7FB8B00CA3120C900B3094F210FAFE27A0FEF75B419F28C
+ CC0AA1C29C33FC02B9F54FEE257A035DAFED450B3E8F1BCE70A3D2324BABB01D
+ 2FC7977677138D7B85BD3F8C18A338107F290781E9B580E493B6AF7F3A271235
+ D4EE291AA2E879ADDF7FAD8128727DECACE630E7CDC91E937CA73AD66C5E51F3
+ 09161693D26F926CE6EA303A7399FA663F1D5779324BAFDAF804C64B4D225698
+ DEF3121B760FE8D38D5784408A556E2CA62806FE7CC43162A1356351968487BD
+ DE273E3D4017E3FDFBC34DB8E7C28E1BA61A803B68DC2D632086AD1D78698263
+ A5E681ECE2383D230CB66045CA27B16F1E8F02ED253318788BCAC0C98E1BC113
+ 5FA053716FC33DFFB1237BA47665611523068A6E4BB5268829279E7397304076
+ 964B813C3ECB09EBEBFB556E7C23DEA5BC22FB45DC74BF01E49633C55EDC0464
+ C4DFCF5E097CD5975243AEB1DFA7F8C904AA772CE97B2EEC4806C5B714816EBE
+ 8598CBAD0BF5D63ACB93D8BA086CB77837EA8ECDBCF9077C129D6174A56CF291
+ E854F48ED614DC7EB8134831D896980781A56651BFD53B05B94EEF71380EA5F2
+ 9A571C650498DB225035CA32952BB39CBAC136D0A3F809C281D0A211F4125DB3
+ C78CDF13A6239D418733C4B7DF9ABF8CA0345F41B7E202CEA7184DCA0AF675FD
+ AFA6C229730357D503BF45AD0A8648ADE2FF24D632DED4CF76C7A0805816FDBC
+ B73532D6FFDD6AE689CEEB3C2F66C4BA3F0CE9D4927F32897FB1DDF7645681E6
+ C688C08FCB73B3B71B8E7E5C11C9F6B9B5DB64ED44010A5D94761460847CF10F
+ 077D40D9B6DAF8A691820AF24A3963E68C58FA222EEDEA15BC9A495C370F34E3
+ 2F45D789533D574638BBAF8E7E90521A810E63F2DB8AF478232A987FC510E175
+ AE4562BCF01DFF7D3AE47F7E7CBF1B284F231C588CA288B64C809AF50B7C9E3F
+ A7278B520F4BC9310A999051B48B543BC705400ACE76E6A7FC8A6C8CC9E906E1
+ 9A5267EA5E457160A2E70F142A2B70161CC7153C2CE10031224F22035843C10F
+ 6B640FE770563CC771E1C41E361F782B9AB3EA0AE26F8EB215D1D1027F0DA83A
+ 8C0CAD84B972F7DD0334E42A0AF89B245B981650853BCE9D86D69DF6C23B0CFF
+ 6EEB805013E8955168CC7E4B60A378CA690877CFF86C51C9255F8924CC598381
+ CFCAB22F646B377C005615D8940EF234E9C637E114DC4E50DAF5D1813E3F5FAF
+ 8FD39CCF3FC79375A4061543EE73F4209DEF85280334AC265EDA516359504A2F
+ 54F87E262AD0F9DD547333D3BA2D68E682CA64E68FF676676E7428038329218F
+ 59019C8BD1B3D72AF2990CF964E66BF95610A7FC2A4A680DDDE9B389B56490D0
+ 5FE23D1E720D2D51089503F84B82A6DA9AEBB43A51675FC0622505003C035863
+ C1CB29BADB6E35A21FA909806A5E143CA6D01AF7F708EF11E7FCFFCC87EEBDC9
+ C5E168709E3308062BFFFBC014865475DB02FA3B6C77E762B6BC7F75D21194B0
+ 1AEEC8539C2C9C7B529519FDA02537EA6942E6BE285723C8E0CC5820B8722EB2
+ 262BECCD92CDE383908C47BB094D0546C9A9E9509BC0077A0BD2FBA8C9B91B5A
+ 10D877A8B2BEC473CCE4CE535F7865C4FFF2923C170443E923EBED3C61ADF14D
+ D022E0B8748A1EA036878FAFD347B3F0A8D2AF58057E262B100067B47EC610FB
+ 26FD09E62D5ACDB427322E4FF4B8825F66CE374425865E41CADF6846D198D0E5
+ 15BDC9F1AD9FB9F234FCB19771756D07C5B423A6ED970DFCD1F3E6D92C20BA72
+ 4809D97E01BCE9ABD8D17E49A6EA966E368AC408CE41A001E490A8D15596E184
+ ED31D94FE1708AE22EFF906C2F8BEF655A14380DDF0BF9D38A8CF29806A0275B
+ 3A8C71825AE94586CB9F920391CBA84CD5D68050472867A394BDA1E4551B6DC5
+ BD4BD4939CDE8A208CD365A91BCB5D52570095AF9471F582CA6A12AB284EFB2A
+ 8EB18004F5495EA0184DD109730627DED60D52C4B542302D258D65831612DF81
+ 54B1B56D53A5FCCC3B220F61C6F2FAD0014AD9856A5245AF68439DE814AFE845
+ 809E218DDF12993E4D5D9481CC9081A4EE96E4FAE37B1C8650ACF7C2AFB479CE
+ D6EF1A72134B06BFCAE182657860619D20851363D47324B476AD8EBD54DFF95B
+ 26648160B1600EDBAA07546C19F2DCC360910BC9C900B94F7AE975BD34239473
+ 27E91EFC7EC5A7DB53AE56C5873D3D418D69EC3856C3134F771ED8AC067B03FF
+ 6AFA3EF378A6BB4EFDF3F7CE9060C29E56A187A11E01AF8062DB7628C0E113DF
+ B014701F67F967AEC11B665A7EAFD4404C7955A3329C875A675F7EDEEB9E450F
+ 52FD3DF83D4CA1C75619AF4327336C15E50910D9CE09E68D3A56B2D10D40AF36
+ 771C116432DD3FB4A4BF0348CEBC60C0005AB3932F0BEA50A5981D35A5072C99
+ 5A41F783B35530E134E08DDE0119919DA7CA981357D51CB12E679083DF09E5D9
+ B5ECB3F6005BE26D60142534172F8E7363D4BE5C47B427647C4289496619BC0D
+ 0184F43D614D5BA4BBDE053ED2E3CA382504B55EAF6331D41D2A2365E61F71CB
+ 713B98F08BA27644F82A79C7B4EDE7A933012C135F4D22565037C294F5F95447
+ C3B9DD1F5364AEB8DA61AEC8C863B0B8115F7968A6F3F35E96B3419DB07BDCD8
+ 8F8DE144AA7589295B69FC56DBA4863FFE29A9E67C26AE3D31CBEE40ECDA102E
+ D3A186D3B41ABC835CAC97601B28C473271480D6067925CB2825FF301246978D
+ C1C7DBE9104A6E08833DFCEF8B06C25954F44A250221FEAB5B7359AAE787FF93
+ 953E62F204C2397F011D9A949EFC24632B0D4C8F678DF5F6B5CA29940C51ACEE
+ 1463E1F5752FBD3DFF18CBB8596760065CEAF10953129CE5E9B49D12438D515B
+ 5AB5798193B5F7FDE2B801B221E09B4CA7F1634732789EA0D52D32DEE1B16B5B
+ E898F08A1355466B866EA9AE0F0AE5DB09E9DCDA8DE66E278D12F1CF4F38FD5C
+ C27EE5BE38406C87AE29927FBDA2B32CA9D3DE3617F3020FF81AFEFEAED357BC
+ C9FBD360EC69C8C3372CDFDE760B438B90A62F6A109EC77D21D03BBF18BB4A3F
+ B78BD6310191B213847260962F985D99CE211D5988B715CCC482A0449B4D2736
+ DBCD7FD32C9BB39C67A8E0AF74724937905E6309B48BF89364F8ACA11C4474FA
+ 7C11602C81C7BBC793963FFE234473678C76E8B32EAFD3304C9F2A398D540AE7
+ BCAFBF81FFB106B7AC326B6085FE5FA7D5CA2334264A8C43F9776951A6208229
+ 950C4FB5C4B0D04B4EDFF009DA03268819D4A789F329FCB5893DAE4509889977
+ 1D392388C225F27E59C345F8049C0E7F16F9F42504C61650ED3A8A46305A3657
+ BD6DE114201980192CB2B44865FFCA0BD821BBD75CB0569544A8DE11A623405E
+ CB735F04C0B103420F8616DAC7647F7245CE55079CFBAD73535625B848DC2AE3
+ F97434BAB8F094DF5A5A5676978B45688C8DEE39815FFE4FCA7F151F078468E8
+ E5CF4687E70EC51047A2618BBE275154896A9D1FC5CF147757A3CD26DBF9D796
+ EF93DDEA294543798D501B59238CFB750A7587F902590564C6FC0A6B00A80F9A
+ 42B55178D71F42E88303AC6A13A79EF5AB96B06E2EE7CA90F304FB19E535B266
+ 055568B9965152F594A8F28869DFCBA2CA454C70450CA176306C0F64B2D5F863
+ 26BF95D59BA898D78987B7B6829214EDC9C7301376E8835495B916684265A821
+ 46AAD09BFE3EF68A6C237A585FD1E243FAD5BB35E8D8809E8F27000D1568EB1B
+ 98C08F28D7F5399EAA1F6D49F811745F3983C8CAD56E9A6308EB6DD4A9D1F248
+ 345DAE9BAB60D4050DD7717D5971EDA2386375C89BF1F126F6E5F215AAA9A073
+ 3CD76F67523E5C5AD195615176F6598A040C387152EFBD9E3C37BFAFD71333F5
+ 18AA24F170B488FD779FE821AB495ACCEB95C538893AEB7977DACA9D5F0116AE
+ 93A9B262997CDB98EA15918219F9AC67BEDE0337D711BD477680998EA7F14DEC
+ 4A10F49D25E030B616046326D3D453CB539029F4BBC6BD8476F199095CA8D126
+ 3C9B9D3A18CDEBA161024C0529E31A444D372B8D51EBB3085FD39DC10A609067
+ 56CF66ECD81DCFA30C98C5910F0443BFF25A9683DFA8415ADBA45E5D486A1A06
+ D14946DFB96D01F8CCD28E8EE136FA63EBBC858E299F42E1ED6E2627C754C5DA
+ D30270D5D783C021ABACFEF9126EF29C86AC9ABFB3C274CB894150414BCDCAF1
+ 730CE6E38D66CF0C9A109D0BA499EAC1E71FFF11CD94C0F1A65C6260F6A4BAF1
+ 057F503073043F96E06A45625BD942ED3CF39446DFD40C56E791D8A7F951E7E3
+ 5FC03138FF341EB5B9A1D08657C688E1DEB3DB
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMR9
+ %!PS-AdobeFont-1.1: CMR9 1.0
+ %%CreationDate: 1991 Aug 20 16:39:59
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMR9) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMR9 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 11 /ff put
+ dup 12 /fi put
+ dup 13 /fl put
+ dup 14 /ffi put
+ dup 34 /quotedblright put
+ dup 37 /percent put
+ dup 38 /ampersand put
+ dup 39 /quoteright put
+ dup 40 /parenleft put
+ dup 41 /parenright put
+ dup 44 /comma put
+ dup 45 /hyphen put
+ dup 46 /period put
+ dup 47 /slash put
+ dup 48 /zero put
+ dup 49 /one put
+ dup 50 /two put
+ dup 51 /three put
+ dup 52 /four put
+ dup 53 /five put
+ dup 54 /six put
+ dup 55 /seven put
+ dup 56 /eight put
+ dup 57 /nine put
+ dup 58 /colon put
+ dup 59 /semicolon put
+ dup 65 /A put
+ dup 66 /B put
+ dup 67 /C put
+ dup 68 /D put
+ dup 69 /E put
+ dup 70 /F put
+ dup 71 /G put
+ dup 72 /H put
+ dup 73 /I put
+ dup 74 /J put
+ dup 75 /K put
+ dup 76 /L put
+ dup 77 /M put
+ dup 78 /N put
+ dup 79 /O put
+ dup 80 /P put
+ dup 81 /Q put
+ dup 82 /R put
+ dup 83 /S put
+ dup 84 /T put
+ dup 85 /U put
+ dup 86 /V put
+ dup 87 /W put
+ dup 88 /X put
+ dup 89 /Y put
+ dup 90 /Z put
+ dup 91 /bracketleft put
+ dup 92 /quotedblleft put
+ dup 93 /bracketright put
+ dup 96 /quoteleft put
+ dup 97 /a put
+ dup 98 /b put
+ dup 99 /c put
+ dup 100 /d put
+ dup 101 /e put
+ dup 102 /f put
+ dup 103 /g put
+ dup 104 /h put
+ dup 105 /i put
+ dup 106 /j put
+ dup 107 /k put
+ dup 108 /l put
+ dup 109 /m put
+ dup 110 /n put
+ dup 111 /o put
+ dup 112 /p put
+ dup 113 /q put
+ dup 114 /r put
+ dup 115 /s put
+ dup 116 /t put
+ dup 117 /u put
+ dup 118 /v put
+ dup 119 /w put
+ dup 120 /x put
+ dup 121 /y put
+ dup 122 /z put
+ dup 123 /endash put
+ dup 124 /emdash put
+ dup 126 /tilde put
+ readonly def
+ /FontBBox{-39 -250 1036 750}readonly def
+ /UniqueID 5000792 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+ 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+ 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+ D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+ 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+ 2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4
+ 87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F
+ D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0
+ 92A36FADB679CF58BAFDD3E51DFDD314B91A605515D729EE20C42505FD4E0835
+ 3C9D365B14C003BC6DD352F0228A8C161F172D2551CD1C67CD0B1B21DED53203
+ 046FAFF9B1129167921DD82C5964F9DDDFE0D2686875BD075FC81831A941F20E
+ C5CD90040A092E559F6D1D3B0E9BB71733595AE0EA6093F986377A96060BF12A
+ A1B525CD9FA741FE051DD54A32BECD55A868DD63119A4370F8322CCBEC889BC2
+ A723CB4015FC4AA90AE873EA14DE13382CA9CF0D8DFB65F0ABEDFD9A64BB3F4D
+ 731E2E1C9A1789228FF44116230A70C339C9819676022AB31B5C9C589AE9094B
+ 09882051AD4637C1710D93E8DD117B4E7B478493B91EA6306FDB3FA6D738AAB1
+ 49FBB21A00AC2A999C21445DE3177F21D8B6AAB33869C882613EA6B5EC56476B
+ 5634181ECBF03BFEDB57F079EACE3B334F6F384BDF9D70AEBD592C8ECF21378B
+ 54A8B5DBF7CB9282E16AA517E14843909339B5E7C55B038BF3BB493F3B884A1C
+ C25F9E8FB912CBE23199AD9D2C3E573727701BA301526C66C3617B9514D6F11F
+ 11930B1D97C17816C85B1BFD9B973A191B33CC3B391815AC46268691C741B2D4
+ 48A840F1128D9B2F9CF07D0709FE796B23A836417BF7B5B12D67F74453C82F5F
+ 25F7B30701D6F6D4F4DC623C0C27D6A6FBECC7312A3CD10932FC7C10851C3C52
+ 24B75DEA8A648B7F34F5711DB0E843C914E25663C510185BC37BDB7593C1C259
+ 21D8DDAD33982C336BF272BAB2F48E68217403FE9F54877B243614A87E64784D
+ 2796EE4179FBF96123D1BEE3EF89D682B427BA4F12A1318A57F18BE5DD903815
+ 26191ECF886FE5790EAFA3837F2AA9330833EE21918D0127C078EBA28F6D07ED
+ 152CCBC48E3030457BF9461977F0A4C5927A6DB5DEE16ADEF2D9F2220D9EAE36
+ 3C35AACF4C2D8FFA467F42307060E42819CCA1951BFEAF79916C76A04FDEDE73
+ 1FA65700A592E7E0345DA0E470DB2F245BFED37363EE45988157B6B0544AB5FE
+ 7529D1F028DA9071651711ECF9BA2CBD30DCF158D5A0CA9DF69B2050E5C4C593
+ 0E04AB0D32FB95C0E97FE5C7B4C5A3CD63C8118BE951224D53781C5CF582D0C4
+ 62D70C764CD0E8859C5EF5A76D9CED05A76095F5DE23EAAC345E7F1FDF9C73E7
+ 219087850B8A26606E631E12833913B765A870DA19857AAD0C81E4A0E02CCCE9
+ 1F4933B5F8B168D72838B2A64EC66B96DEA978AFC90DEAFD2D5DA50D0E3706F9
+ B582167FE9820F568FBFC7A7CB7C5B199A9A06A1B1FEC555EE5B68976F778669
+ 76B5A421A42393C02FADD78648C27CC648C7BF9B98306D5A7F4EBF9EDB311F03
+ 1DA89C6D5F358E234E87B7DB8706EDCBAB8947982CE40EB2DB051EB8A4B38E3A
+ DC6650D337A347A623D80D1F419F3092F8D953A54475F1EE8CEDD0268F8A2146
+ 22DCE93D96E178ACC7BDFEEEED55317C4E059E51692A61A94B2BC3FA163EBBA7
+ 2872E8924F526F58C72593EF3BEE3D9FB52351FC5E9A4EEB132B6112CA46DC38
+ 5D62A061E067D0A937A191446A0AB31D5133135A570EDA16D369B5A3D9794C0B
+ D9FA4CDE7FE0B8208A3A48B5F6F18894533D0DB84661E224B978E3893195829E
+ CF69700D8E95218CAC6538C213DACD1BEAB3DA3B70369C43BFF929C1691CF694
+ 59635298E7D4A684C985F3BCDDC7FCBCC3C8CE46A576C2C64F30BCE1C9209C22
+ 1BA1F6FDA2458E0B0389210C1673F77B473B38914F2CF37DCC1F1C128ABC5C7F
+ 13AE4C369D93990752CF77BE8E0B4FE3AF68CDFD06670B825CBA36BDF12A702A
+ 7FF982799BDB1591D654EA8836C9268205726A88B42A1646434B6FB97A508B04
+ 71829125EA5D207A5110153C7BACDD4E28E6AEC9941A14BF2B8D1AFA4DA37AF5
+ 3198D0E48A9042ACEA103F1D9EA8F97FB67D34CD65A383EB9E3FB3CC47DAA70A
+ 6985C64F17B140726C92B3F3E81CE73BB8EB75506EA2648B389E52A98FF7881E
+ 8B4B370946258012EF4C1D64FDE77AA56E9F83685C6BC64619BA3776A5435696
+ 16ED0CE0E080FD7E5BA9CBEB0D83851DC21F982E9C3DF77702BCE7E974A4B8E3
+ 43EC650691789982AF06E431C700B8C46CEEA9589C85A8B0B550B3EF4A311774
+ 8FDF33D9346912FFEC6865EF01D827D756F1E724F516DB9C600CFB1F440247FF
+ 9470F4C69D7866DD1DEA7B94C49B65E421A44B18DE6BA6A8958E09E81804F5B5
+ 85D50489FDD44B06BD92ABEA379C11DA565BE7106A272680EE9388EDB8DCF23F
+ CF87A657C72DD58B28A104292F0B440CA6FE1C025D5174C76862C8E8DE1D8462
+ 6C62887425D9183C3AD3977CE2D304E5DE40B5BE56432347A99EFD4FF81A6965
+ DBA50C49EE862AAD351A4403FF57FE3AF575BD88305C520E66A37DE3DDA9EF4F
+ FAE172F5F8781F0A039BDF1AB8146491BD34FC95B150328123448156F114C20A
+ 436C5E33755BB23738C8DC5F55E7D1B810515DD21D68ECB359E8A05FE79A2442
+ F3A6D3241D909CE4012D97FDDA5A9C9A29963112F9F4BF3B14A4DD93D0E723F4
+ C6BD2D034F69D9722E57C1422A9B5340AD800BD8C7ED308C4E9F4F7756631DD3
+ B048B30B96F5585E69AC09AF83E2FF984159227F25FD3445A66D441956CFA243
+ EBDBA0EB732FAB49D355199ECF57BB7094A119014FA692E4E30CBE3AB098F2A5
+ BD023FD290B02CB2C8336450084A9916DDAC3709BF2E189B92E429D2F1BB63C0
+ 18B62B60EE511FE21C1CCF7658E4AE72A2DE193F7B2428D455ED183C454FE75A
+ E5DF0108C34697DD26460CEF04E63AC62978F7F4DD1F765A50259D4B10558FF0
+ AE523A32081A009647784F48F642E579FBF4B682A9C8120C8A0702ED31F64C0C
+ 1E575772EABCBBC1D8EB141CCE4BB7248D801BA074534069013A30E9DF16E86A
+ 2305DCF2B3D043E0FD04ACE8F655147F001A18A01F41C7D09FFCDE365F6D696E
+ 01EED24D4BFEE3B03C39E8403467707CD1F2D7A1B0A67EACA4F1441E986AA2E8
+ 2F8F9F55E1F7EB8C3D0AA815EE0E99B3AE5D9CA74218D6D8ED81A762C28A9C39
+ D5254F283685165F2D7CDE7B6B0F9F707A776F72B42FB740656E4515C4D09D83
+ A2C1DBF1B6C55C1398D49129E5E8CD4FC9ACC67FC60062DE3945169773941AA4
+ 2A5E7F6521617EF74140BC63D57C60C1B31655031EF667D0464DDE59D7A8B82E
+ 2008C1ACE8A390AE4BBC967E471BC35B74A25DCE2D5AE8CE6844BB227F396C3B
+ 810770FE4996BAB1095CE9D389FC9C5FEBB929769405F9BCB2B718220B7FE20A
+ 68E916C42005B9F8168F916A89C01DED458AD2B8A7D77B9990F607DDCD2D340A
+ 7A78AD31ADBC6C1B003C4E2F39F6903F0F443E2DE6B5BDA7F8B5A409EFE10BE7
+ A2BC8C6C75D57C5742D765B3B0DBE0CCB435BF7607BE4E8516135F98C5894F4F
+ D08C40A2972542090D27BE21B8618CA448C5A750BB0533EE7543A697A81C60D4
+ CEF9FD8EF01975F347B88DEC3AD31851E1431D104CBA602F2EAD727DE984BC82
+ B77D2D57A00AFDED656F907B3CD2199B13A2775730367C45601D923305EB2790
+ B2C2AA9C876D6B51698FC3EEC0EC62D92C0AF5A126091CA4FDF18E8ABCA7A138
+ 6A68E1CF0BFDA7CA886D71633B3C6EC2557F8535731D65E68EC13F7A5B0E161F
+ F7BD50EB46A4CD0C31A9560BDDDD609F93BF77E096EA32A3FACB34CC585B1462
+ CC09C9FA1A9D8527EAC558B7D3BBA60FB061D42EF95D6A3C608097FE220569DA
+ C8D56B817DBF2FA37BB78B045DB7336F1F22A7AC6E22378422086E350CF98969
+ BD762A836D7D0B56B7DE0E0AED707000BD8FF101940CB76593E409650E9CBB3E
+ 53FEF17B7A5AF42FAEDA1E7D0B71B80CCA450B9833EA82E85970635951899BE8
+ 1098997216F803FD131A9F8836A742D20755E300F4A4BC42BD53E17A1D337F87
+ 77685F47665F6C6B0B6BA7079D20C4337DC355BFF7CB0A87FE7AE6C4B05DB78F
+ D25D5D8DE36E05840847E3486F10BA59F3E4CE5A4C8DC757C1B6B043383F7E93
+ 1B088FFFED5486E20BD81886213FD9C0520BFAE94E8926AC9E44A8F1DB8AE558
+ EB7FF167E245B2698B3EA4FD91E8B3435BD75E2AB8055D91FDEA722A4CD58A25
+ EB924D6DE1C21B96FD5D696B70AE30C02EE0B942B2CBC8C4E9EEE752A8FC8A11
+ E01264030923E57E3885C6AC4D1D17B3E3024A69C94726E9F4922B37A150665B
+ 107BEB8943BA703C20A7FD2F4805DE6CBA58B45C5114FFC45394BC9F9491182A
+ B2F7A4BFA0F1092C258449FFF9ECC87FAB8BD9CD9ABBE9B61522EC63E70F612B
+ 6F6E75782E772D47E3A4C995665B9755944646508BD1547EBE56999F586D837F
+ 08297A1274FAA97BEA60E29AF6770199243E483592424170D3B55929D3500964
+ 6D4FCD3009C4EB57E7A7721FE45C85BC096805F9C52105DF1DA44D26518ED094
+ 382AF1F6A61C6D194072E20C5833932677598F27B7EE80D92C407D6CB46DA75A
+ 2652AABD96688D37F7694DEB3C8EE7E2F3F86E4124B85DCAD9CF038CD73D8EF3
+ 8DAFB06C1A49E81167A785FCC1F1D7F8130A592DE54357DC75C767AD795C5483
+ 8AA19D47096B00364C2CA3E03D8D728C49D8200391FAE6EC14B2EAC8E1AD86CB
+ FB8B839CCCDB5265B2546F5D0EB852B565DB8AB1A46C1D7520AEECBC4F89ECE6
+ E2BFE6AA6E22F5A4FE9CD3030B87F58D102FFB0F7E08AA5269C3572A15461FD2
+ 18BE35530B4E11DC021B1B620CB8173846F07904D1976801EF62EE4B7F7F14E1
+ 95C22365FA5D7BF07FBAD95BD130EBD992324315D56959F255A14B588E7A6E89
+ F0016FD1C4626D63A6D81B4A96BA80E342031C6BC095CF293E3B339715261926
+ 2A43414B76B4C91678594BC260F999495F44728ABFCBB3C4C397A70D0FD355E3
+ A10890C6F31F45F7757E5C470449DE87BFEA3AB766B8B29E87488C364394DD36
+ A371FCA4406B053E584621841BA0045E377F2CF80060B73009378F41590D6435
+ EE978D8F941A4D536A5EDC6A094CBCDB1F70ED2CF5D386682805434563EBE3EB
+ 90D82A6BD28D8A7BFAB8AA4EEEC95F4C61CE86635805EE1D60FB1BF15F1763F7
+ 9B9F10302D6C1ADB208085B7D23516D4157982F6C34F6761723C1D945AF17971
+ 431C7F01142D959F238DE8AC4F39324B4D6DB680A96BC1C8E2140F787E45F278
+ 2F2FDD5455875E34F9F39A6A969D9438317D43F7955B00BFAB95A627B21B853A
+ B271F832AC19867E2852020153E52B717B81E470EE968320B256E5CD33E090EB
+ 9899B26ED9DB79882D95B01776207221CCF4E12776FC0FC125E0B957D1D8B08D
+ 90611434993E1846E5AE6F723A6E2FD4068957D139DE88C879BA61CE6D84BEF4
+ F27B01E6322F0CA3130E4A9BFFC00DE1148FF07BEF800022E0DDBE3CD8E7A051
+ CEA980BB9F56AFB136451D756112BC552197880475865CB93A1C5DF381F2EE82
+ 7812D66F7AF260C274A186FDB4A785E4A3826DD81CD5D298F439EFEF81CBD4CF
+ 3B419415725E7DFD17D897C41FEE28E46BB8D8307E66005809DFA3F1E241549F
+ 652ABD4D0E6D718B4A41F4303844C3C0C301C2BBE39A6D4BE4C0B1057D2AF726
+ 95B2A78ADAC60AE89FAA27184593B6B9876CF7BE698822E132CEB22EC553B46D
+ 9048C6DB28560D5A77B1C872A70BF3C8F0CE991E5A8B22E0BF062ED1021F362F
+ 6404978C4D3A72AAA89B8DF127945A2407953C2832EA4D94221F607A6241055C
+ E4CBD9580EE70684F0E1B4733A97FAE941309AE2D595E0AAE15C0B834F742B85
+ C64724BC438C8B87A9D2D1427990A5A53CB635A2DF9537F219127D1954FD11C2
+ 76BDF5F3AD694532437406935A94D9DE84AF62D0D78F5621473D01EADC79AFA7
+ D1FD688B9757D19F5EAC2E176D3709049A1B1551BA9428164670AA4D37BC286F
+ D26E01D1C9FA62FFB200DDE43F78D9E92B1149B6E2DC6AB2FDC59E4382B6B322
+ DA0E3FB326780995DC670C7C6C3E9A1B6D9FE31F5A1E2F8BCE9A20E3E30B2865
+ 627FA1550AEA50F664A1EE0C1103E0CD9E029588448984AA432496C54BD5F3CA
+ 62189843CE5B885B09E06E67AB5A196AB3829DC9FC5F4F1C61FB697F9759A9EA
+ 89DC5D60C7E878D863003D87AAB48144B26E766BD6382ED3CCF53FF1A1BE549B
+ 168361D8B1B6C0F814BF971900760A8F7C4D889B3E8366A939FFB01890141E2D
+ EB937A97D455A684151E41B4DC25B6A403427A5A215957982BDD28EC7072ADC5
+ 8E8D2EDB021E8A2E56B7DA3BCC5246298B639CBB6FB3DCF279E97A4714944765
+ 58593E213A75CCFE018ED34B5EC753AB93E71E6A0F498BBAD4852378B1B84244
+ EB57C11D9B9F4D9C962B646C9AA942B0FC686BBCEBAC44C88A445B854D3A3D96
+ DE15EDCA774C84FA85998F4F14EC57452BD69CAA103B79CC12C2D382DE3B92D1
+ 87167C31E8DD4B28DF1D1FF1C0B32728402E3372708A0CD0E67D495BEE6EC83B
+ 96C3FAC68C7A70D73DC4EED7E004CCCBD48ECF78DA9A1D6F1D347AE864574F6E
+ 8711ABEAC7233E60B45009B8D75C9943A6AF9D102EE38557F8A24DB1E879237A
+ 65F3C05727F6E0E08BA155B1BAB90AE079029BE02631DE2A72D288FCFBF4593F
+ 22BA8EE5903658312B244CF7A24A891259CB3323DDAFF2892EDB0EC793B7238D
+ 2500FB7D1D4F9039974A71837D231136557B76A8FE301F6B47BD8C40FC60288C
+ B6463979B6434800B926E962295D17D2B5A9498918E19D9385C87F48465AABFD
+ EA1E702588368D5CE9BEDAF51B1CFA3D8A90F7BCD9BD33898832F620BE80F323
+ BC76231E66EB9D1F4E92F00F4EC9FE90355A811EA445A50761F05F916D4798F6
+ B213A0F391E06F60134D67C85E4BFBBFF33A46B28FA3386173A90DFD61CE882F
+ 85B3300DCE01FB0A12F6EC98633137F056A2B4B634DC76A180AF6A9CDDCD6595
+ A14AA82F496F2D382AF4AD431A3A997EC8E62835AE6A5A8CCCC33EBDA16E9D9E
+ CC36D06E9B65B35171C00B97D9DB0A0ABD46C41EE13FA5D8245CF3DCD10F6D0D
+ 28D93699F8B87EA2A94D425830F361CEFA56C4B4CE16103B1BF40A1AA93686CE
+ EC0F1DA9F4A97133F4A4B65E3D2D0336DE9D2C6260AC7336C90811FE5AD14F90
+ 5AF3A0810F4CFCFC0AA89BE005CAAD07FA9163F2E401B5CBE2AD23EAE66CF1BA
+ 0E09B3A2286B4D4A20C7588B73A2DC01D79E6CA6B52F71C4D1D2E614A02A42C3
+ A716B115A3628B9570C362FDED3013B9120E26FD913AB67F34B3D90065DA88D7
+ 59DF0967B7FD5A0472006F4583F329E6AD218E0937B99A939A5C709C91E742D8
+ 76F63008483945619BF04E07109BC17525D72DB32173D31D8E7BD39CC0FB4379
+ 1FB8103A5FC93818A958487C31C517F33F021F442BEB4E8160B0FBC8B67F6E8C
+ 7232340AF7776F4E507FA6A431F268D487753730BE1882187FEE0AC1CF9C1D70
+ 558438E717EB6BC830270A4311B7B351E52EBDA8BE368C380BFC2BA00972037D
+ 659BF7FE79813694473BBE3A14CEFBCB6EF11DF997645DFB2A712C25B91F8CC0
+ 3CE3E1E8A5EC0802D0D78205E93265F03DFE29358C3E0F6B5EDF25D13FF7ED70
+ BE451D49E91C190F3C09BA74EC292A9EE1C092430C338A42615909A7A4744CFB
+ AFEF87D001AAF93AA25D90915D30978174CEC5B87FEE45A43178BE34BA616052
+ 7A7FD0DB8FBA07A4F4E1398983E560C1CEAAD642C9105EFA3F9E7864F09E43DD
+ B992240AA86BCAE23477E1566C552167FF77E845A6D8D549B914018C948D8DF5
+ 3DC94DEC34120A12157295349739FED86340E1601C287F311CB22C3F2294F140
+ 01AB4567C0F96DE4096C1DEFE411C8F388F4130D00F19C81F3E3D38D43C3449C
+ 2FC07A030F60220CD1F177B335FEF49FD92E3A7D6B6DA2E75BA3DCBEE79DDA80
+ 6DA9B04B8B83649362D689DA73CB490E3D1BFEDC3B20E3416B5075196B685782
+ 9BE8AD6AAA2AD2EB4A690414679CADA1A1CBDCE0E4B6BE6B9EDBC7A5F55994D7
+ CBBE5AB2F9D6B6DE2260A8FA0731979C84A0083B5B0624336E889328FBA055EE
+ 72F83FA4C374BA4BA9D77EFF8B5D6477922D8CE8E2E13A39834A93D535134E3E
+ BFE9C19F1FA9634492D235832BFF63E01832A8347896C603BE01105C78506159
+ 23434E56513BBF564044044E5E7955C99547C2A4278254C59D4D1B35936C0D3A
+ FFD369B61A85F7E35C3E15587AE5FB24636AA439A37261ACABF0AC0A1F66810E
+ CA8728AA87F0EB48DD9A58E00608B27200681CA7C40CAD590D9164A2F4F6E077
+ E603DE89018C5F353B7247D02D3A1B6FCAD2217DFA265A12BD62DFFFCEF9406C
+ 66CAFE73C242D1A3DED6CBBA304B0AD52D34A19B02F335DF151B8C4161DF4938
+ E091B8CD7DDCA1D369E65AA2D16844C589E2A3C11DE60907A9B617738BAF9DEF
+ ACCEF244E44B100AA401A7774D7DDB059CC7BB19A23238E39F6564C2AD63B43C
+ B2889DB282C2860D8F17B48CED441E7F3D9903DD9040D9A0C654E8AF54E4DD2F
+ C38D2D77D9661C24F5AC04D6A8E5C8381C0C440357D907F345EF7439C3B55D3C
+ 4463AB13930F2F56CFF4F30A0DBC5CC904DFAC98FE36B89F03B02F846A363A99
+ F729CD1C12E931E16165E4E737F02D0B24F4D77A4EF944EF5E2138C3FA8C2856
+ 74459B1F45F986B7396DBD437BCB93BDE7116C926422D551F10B9DF597FFEEDC
+ ECFD068F472C21C7D99FE73E14B2BA426909C3DCB437558DC7317B1CD3174AD9
+ E7CA851DF9A1C8B353FEAD75233D1857A2A3F421473F846BF1327BC8AA599178
+ B87FED4BC78793B5D4F889038C9F05ACAAEFF82501FB8B9A7B9874CC0693BD14
+ AEAE0DE56D2945B72230D0A3828208EF2EDD0A705F22E3A4AC002FCAFE90A4CC
+ 6547A15556510BD188D5D9A5722B0737AB5F8376CF6D6563E3CFFCA60D6B1273
+ 326AC7F85A949E7BC3F1A0151361F09D3111E85A57DAE1F9A2341843C3DA4167
+ 85DC4F7B0FE491380F45DB64F2B1782C9555BAC755011CB43D29A5FD37BFDBCF
+ B5A5FD81EC5D0E83E7C5F4DD42F3CD99C6F3F3CC8C2A1319A4BCF2BB2E035121
+ 8DEB7A8FEC2D0DB22A7FA981B7208A063DDCAFEFEE382024ACD38A443C635BFA
+ E55E8569FB535A4C7B9C7057DC7FD41EF47B866291358FFED348E927AB56034D
+ C22998EDDE480ED260469DE0DEAFEE3A595FDFCDF14AC9BC91A4FC9A210841F0
+ EE08E670FD1F543D32A46A78F5A0F759826D4825BEF7C8F5F0A3A02D671FE75C
+ A772C1081411599FB6223F4AE6EEE9F9D22B8577E7B37271AD3F16F5BEFD053D
+ 2634C43A0FF90D63D3720871FA0E354E7040C6CD47ADD6030AA4D45B2E523C2E
+ 5A9F864347FF09FCEA73C6BCD36334DE82B32AB7AA83802C44E35A41E12DE9D1
+ E666933893A1D3AEBAFA4E0DAEA1891F3C84FC292894BDC28101FC1624E2F570
+ 4CA4EF9DB5CF660ACDFDC87B81B20ADE2661BB35579910DFEC2A2B7B9D06F1FB
+ D20992EDC80645FF54F56B5DACA80E27AB20F66D2F4602BDD15C3FAE56507155
+ EA451FD9AFDE9EBA81F7963524A1ED57CB74CA2D0BD671B8794C2B5ADFC12B2F
+ B72D136F007419C6C601B03320A9EE39F02B7B47E2C9DC8D194D297692B867B8
+ B2E611B5B809EFC40CB9ED6EB619AAEA39AD68D5297043C285A34980F072F6E5
+ F81752B00FEC89D960ACE3DEC25AD3E8F923A9BEB358040147378807333D83C3
+ FE75F9AD6B800AB046868EDA26CCA77A0A9F428B44F9C0750E1183088E30D5C3
+ 0D5B2A5608FB5103A706C253ECD9B45848D5F57EC61E1131137E203CED7FEB99
+ F2CDAF48588EEB8B36314EB38D42F6C2E9A1F4AC4E930758B6E8836E0F958221
+ 338BE83A4681A6924858BC646D3F0C7AA5D47F13713CA260F8356703B41F201F
+ 71F8490759C6E7FE0912F6D5C861EB5C33EAC9601E1DA3DDFFCB64973C55F137
+ 3F9760858ED38A8E4F6F6FE4089B67C2E2849FDF706406B383C2FB1EBEF16769
+ D6F5B16CC81E49F478A7BA7048F16A4B6BFA217A844CCC297A9F7D8C432C9BB7
+ 4BDC11CEA8BEB33D1CF75375E4FA338CC27BF2AD0508B84D5385EE24CB1E37A2
+ 8BDB4345DD2DEC520E9C0BA0F92633D8D17AE4BA68C8462E2FD259CD5E9CFEC8
+ 90A99827DC022E7BB6C97936338583252F0109FF00D5E0987DBBA955F6802A45
+ CEE8873EAAA859AF3DAE237E7FEBF7EC5F2E0F92B2A13C7E37EBBB3ECF535EAA
+ 1284C5C8376FF6F5EC6C60DC4A42940845E9500D654C36C8353AA0EB0D917842
+ 8D24EAD3297252DA5F78EB0EAF2233C56893549B63D3BAF3054F9BA0A7CE6B33
+ D7CAC6A390EB76E1E033E8E1CEA1D3F562FE64652D18E66C851E8F89768FA4DD
+ BB4E37AF18DA6BBF067D60F4E3AF931296E50BEBD3E77D36ED7C2BCF9B1AC1A1
+ 2A9DC8514630AFDBB7F6A94F2DBB48D289E1E7E4C53EB810E8D38290D810660F
+ 923206A31B3388949CB402480CD7680C81840EE9491DD86F06A9B1FA01CBBC32
+ 66D305763A74DC108FB8287BA170F5A4FC77C4C0DAECB290D17D6B7EDAB96B06
+ 0C8C8A22CEC2946CA2B54A6E15FA544031F5187DAA11B3904784DF5B720723EA
+ EA6EAA228B9C06BE0F72346258CBB9AE144A4AE691FC48780B59236DF4C0F5D9
+ E1B211513F58EC55D86BB5866AF7514602626396C893C8F5D9A8515B2E3B3D54
+ D5323C6C738717A31A3273928CB98B78B44A31B828A0B372265BE83F5F0C7D98
+ 20ACD29400884C3C73660DE457FB38B6915CC4CDA838F5A065D0F7F4EB03C63D
+ D21604D30CC901FC0A72D4C70D3B9D6F7691A6493445F5E43D94A5C436E07C2E
+ 32F8F513FF8A42E7B7A328C067DA2F3FA05D4CEE45990ACDCD16B692839EE09F
+ C34C5B925CA551E4C900FAAA30DF25D017A6449A7EC88D1D8F912C926418CE24
+ 6E8BC12B2E9FE02C3EC3DE05D2EED935E4968E1D300FA49F6B7CB68093CECC9A
+ 2DF2FA861C53807B7E3767873763E5A05F9A6DD432BA49341DD74DEC8B68D3C1
+ D0759D744E8DB447FB29C0245D73E98833AF512B0A7A636F0E71B33F6CCF938E
+ 21C9E015B352089D0072B0EBBCC043359C4FA0BB158C8104D1A95ED8A46BC74E
+ 26C36E70D1806EE807E86AB21C839A96E366E0C55F3BEC20E51EB4C5EB428453
+ 965DB0A89D141730A5C72B3C53E2A2C6140EB79899075F41BFB8C5A55A54F173
+ 04F5E62BC1B3EC1CF5A1961797D1347EEDE6DBA19B433DAB0AB2D41EDF6AC024
+ 7154BBEBE64613035041B90AD1639EBEF08180EDC91853D869B111031F4E52C6
+ 3A5EB1F9DCDD9DF974D790513EFEC30BD05A5726FEE54D37214EF3C8442CC1F2
+ C16459807B301247EF7198A1F708DD48DA538CE3CFE5628074E29E74262E4AED
+ 65CA65BDD426D14100E32DBEDA63319A10E3E34D0846E7CB40594A1DC0A5DD59
+ 5791C3A4BDE2CCA3F605CC1A327DA95FA2E326D1D83467EFB8B7FA565755EDE7
+ 80262C086064D6985AC3DE51D326626E1DEE7EC7772ED67A703CEDE76175EB6A
+ 1581BAF1EB03D0E90CEAE9D85811C9B09F963928B2A5C4FE8AB3EE81AC3666A8
+ D528C974CA0977B4BAE257FCAF012B2C2D1BED096709BD9670FDF7E2BF8D0E06
+ 7E210385F0E7BF4E8163D1662EBA51A3B9348FF3EB59A3405F71F21D7CCA23F7
+ FD264AE5763A4E56F17752CF92DAD319B9762013440AA79B4842244723632D9D
+ 9E063CC2CAFB6B5FA3A55FEA08E07846200DD1649194EB4CF491428BA4739C0D
+ 6101E62E6410D8B0B6785FB37847DA68B28199CFE23DF4A087FB60DC71FEAB95
+ B9C16694B87F8BD760F187332A275AFB33F3A3128E0E6089562CBB44F0DACBE2
+ 8D85A438A6E963E67550A0E459A7C4F91FE38EF31A1C022AD51B6501CFEAC4B3
+ 10D7E2BB928316DC10BAD5C09F367326134DA085EC15E22A1CCA62C8ECA6F0F8
+ E40F83D28AC8DF7B28F6A0855A9AE47945E9326065D70A85ACF690D5FA82792F
+ D81AEA2FDC728B4949F568B65C8B2A9152EB3C6E91422F243B7CBABA37C9CC23
+ 297ED49D985486A17D0AEE3CAD4892C404D4B2E19CD3037AE3BC5A6350620C7E
+ 8B1E36D7C6DA878F71D102657A0EE18DE7AC09844A37D2D441CBBD05E4EAA8F0
+ A39EA16A83AD4136AEA8CFD2A94ABB4341B52BDF1D852D3ACD248D7C769CCD97
+ 88A0B22F5DC70880469391629796EF4F806967A8731D846D46FA55EE80B05A00
+ A8F6E562AFCC515AB2A72BB031A30C342A6804785723552DFF9D6A46D2B03354
+ FE4F3EAEDAE39EAC9AD729B7FBC99C9C0C69A67E9532CF30E671DFC8EABF861A
+ C3608EC9D2DFB0F7DB85CA7692FA34864122D3CA86AE49753916EEBDC92A8618
+ DF74388953314F945A99401C0D490BE6674D2BD20899D2E7DADCB24E2F92C5D1
+ 7BFAC1798CA56A81CFD2CE6DDA3D3F355EF9CCA1977DFF35AB31E104338B1098
+ 0AD776ED4889F56B1A9858B07D22998B2B723BAD9026309CD2AF35565EA2DABC
+ 5D0813C92ED03F430D318D025E83B5401545CE337DD23468A5DA420C9730F9B5
+ B83EEC82F1C751BB2D984A08BACC6C74AC94A0F8149E101DF0F39854CDF46C6D
+ F883D3AADEDCB4D1378F3D26C84756130B71AFFDA09F449612F85042772A1A69
+ 456883CB30742208E26014EBADACDA0F4228552B0718F0CDF7DB0EA29D0F72FF
+ 4493AE12BE9FFAF2ACFDA7F783294389FCAC40A0D9DA41E4CBF3DF3F5393E8CA
+ 22710B959625043838F7B65D4F8F69AC4CEB13E8424617C8A30D1ED3744B5E33
+ 8AEF253D9131B668AEF93FFC287204374EA44DFC86E17DD627B29C247040FCF9
+ 8B00CBF7BB8991A1050C2385493BF42E657AFD25EA038A2E8D10EA66F489E701
+ 89038669EA0172FD4182C1066DD8E875E49800977B4969A08AA55BC17905F16D
+ 0F75B21AA3B4C97C88F0501784A02D3C728DE59DDE4B0D2095859D958B40AE80
+ BDF2E2BBB48AF2124987A311F2111FEB0806AE482ECA376DD5DB78A2C9735C79
+ 161C5BB31169F6C86B112F5B9509587F0632A6C06047417FEA16089D7558CF4D
+ DF712A1858D2E090151AE77AF486EDD4E4035E026899748B5D6772210EBA3835
+ B5433B5F56784F5733315E91C4ACCCCFF0F9F7170A61889D34945445D016903C
+ 497E3F5A26C998B1D7DB756CFD54056F5F30C63DDDEE8E6ABF4556E603E43051
+ 2CDE0389BA7B4B0FFE3F0AA52C32BE0C93998B726F56B25C448A45377657EDC1
+ CF4CF539B0368B3187ACC2022D9D4D7EC1208701FD89B42C2912832815690C51
+ 9982A91665558BFE46FDCA46DCF6EBB73B25250C4D8008A6C343F32BB68C3D2B
+ C8DB643F6242DB225F35A1CE11B7BA811302A72E8BBBB15B695EBA88F4A5BCBE
+ 04E3620522849E30A02A262AFA99D7C4982C51B448FF99F258BB3392866B9E4D
+ E6D335D6F1CD254B64F3164076F1A6D3241D90C65607B7F4A2885A83E969A44F
+ 050727EF498DDFEC839D586483422CD1A87285D581A3E440F17DE6ACA9CAC7EF
+ B93D5A0CCFAA7B1C6F95509744475609D35381F15A535E651F8732BCB8F47EB9
+ 4C301CFB0FBA6F4145E84CBBFBA88D785B1477A8F72CBCB4872A1C771E20A881
+ B0453439CAEE520B54C8C6C56405EE182090D0056731F6F3384EE10B5C381BC8
+ 783AF1DC33ED53EB7B7051D0D149A9189BFEF39AF1A79B8CF906E324AA518382
+ 104AE65ACF1931ADF7BA79EB8BCF90E9E0B84DBBAA3AB50E2F86CFFF8578ACEC
+ 7D8FAF43420F3C85BD531F3DF5336B808A727066A257A31D48707FBF5048136F
+ A6517C059766B9A8C51DE4F3EDDA2D8DC8849E9AD13CE71F44AAAFD44DD4C682
+ 92E05C7F5406ED57E3A089B25D2E98404391063DBF7B4972DE2AFA0DC23F0363
+ 3D27904299D82A8369E24B05118937A639BEC0E24C56036959459A3AE6F75FC5
+ 8A527BB1AB30A5A7C57CBC3A1DAC2282839DC0870F33AD82C6268D6B9AA242B3
+ E74C91FDC8D1C69C397072315BBF6B3400ADF7ED5857AA7E1A6EFB53CA25DB6B
+ 868BFDA5E5AAD81979070EC267B5ABE2F43B2BC0E2B562EBE5601DF56CDC2572
+ C95BEFAAE87710E221BC808DB679FAF11B2A8B4F2FD3BB294620B3BC985BDC8C
+ FBCEEC7932E104040D48173A90901E30A85CA9546B5DAEF8872DF44A28A5A793
+ 9C034FFA4E42750137C49DC67AAC2DC447C0F8E796AFE6B8316AF190479ED3DD
+ FA9164B9BFF232C542988FE60AF00B713B0E64459001D633901A39C56B88BE7B
+ 172F8ED682C80F88FCC6E60CCB16A5915416384D5D79612BFA5FCC4E367D5D48
+ 712D0B26A6E9E66ECE1BC9C4B0A9C70A73DA2AF41AC49002ABECF225D5F31859
+ 760853BFD746104E235FD42259F0546AAA3C224FC146F8974DFCE2A6031BA1E2
+ B3F32D1197FE63886A22CE76C0334077CC19A6CB1222F99786D32D46D90ECDBF
+ 198F98B3E8BBD24B3B3C3019F97D865650138EE43AAF74B79D1A5BFE433AEBF6
+ 08D83C3D435BB7E1AFD37FCE04DC11012ACECD3F319C65A8662DA9343491A89A
+ 54F1D60E7F67395F3F6C8D3D1F4263FA0E5AAD91F8AF4B9965417B9238B8E9B9
+ D370A97A353F2013B1AC5857DBB23746D9F62FF6C6000217E536AE4F1A6A8ED7
+ 0543C61357F36D098362E15B0761767A6F4081947244DE23285EDA3D82FC7663
+ FBA4FAF487388B41E9D61671AABCC4A4AA96155769234C7444E481042D4E7317
+ 75502B2DB807BF9E962A647F75ECBB23C9A40BCB7F25660EA1B00D198BC181B5
+ 36407C8BBBAF4555ED5060D1723D055EC5239E31B853F3ECC40E9A6DB93AB83F
+ D96DEA938DEEFA8FD579A7313790EFE3CA0217F49BCF055C9DA20478B1A3EF26
+ 015819D8489CED098D186D5806CA42E53EAE7033EE9D15A0CDF158B7E06A367D
+ 10AE0C9B8B11807272FF232ADBE2B99486CC5A9DF5ED53809B890FB8EF50DE7B
+ 41E183B68041F22955081A4F579EB3BC301D0E3C2ED5366443BAF1CADDF01109
+ CD4C4A1733FD5D3CB6BF39C3C5496457D5EEEFE8EB9F52B4DB11117101CB4CDF
+ 49C3AB6B44076DA0CA798022C2F1DDAF1C17648882489DCE45DD50E81570B382
+ 91D4205E39DEFEED0C4FB9872519D8BE9CB5A62D214FABFEF63E087DB4AB6312
+ 52ACDFBB8A91D51DE2DFA95342DF350FAC7AA3DDA8349BB0DA4632C7E660E38C
+ CB9A0EBCB36C61C1A7A479B01144921A3C533A6AA5E54FFC7638312A241AF3C8
+ 922C8D2222F2E3F8D92C368E9A489578080B69755B158D42E32E2B55380C67E2
+ 03E6D6A5D3E8911BDF70A1A4076A59C4741E8EAA440599ED1A152E5321AF6C3F
+ 920914DC5124F66CD68C35500030A330469483DC26C1A298CCE8B2E7F5A04A95
+ A1C15F39FC04879778A524DCE2A70A489577FAD26F3D3A66268C9954E83E8AED
+ 436A231B7C00EA6F730641626059F9866744F8F76CEA36F8C490EC18D31D1537
+ 8BE719ADE567B69A7C8FA5BCD5EC4F040DB47FFD881CED6891E6B25E2ECEC206
+ F58CD38637ABE7DFE7E42787CF53EAB2CF55DA23530BEA7FBB387D91FCA47969
+ 19E0F5775809698EE432846628A0D19F0F5AE8F55FD7CF304FE6C479296FACA5
+ 718840616CF32F934A6FC2EE0A1963407DDC1BE965CF3B022E8A0244494498D1
+ DAB3A2FD4561B23E0F9E429D0D63796D22CD4BCBC2B89B6F82CBFC25602D8F07
+ D34514602B47DD44C3A899DC63EE73B94330B45B9C2F8BD49800E7E6404FA203
+ 0E3D674D3EABB01806C36D3C0F8D1C8DEE535BBA9437854B6BE4BA2D7033B2B5
+ 3FEB4D18E25BFA194FF46A7871CD577AA2BC54DD103CC114C5A160511AD626AE
+ BD81117ABA822B26BB378749129FCE536B2B7D771AA80EECBEE3392DC0994EB1
+ 630FA137B1E0530B75A85F469FDC6D5BD054E7486F34B00D3389136DE1B65B9D
+ 644CCDE862BDC2F54E4D09B388FEDE6461B43D8B0CD12AC291DBD48BD0E863C0
+ 66089A9B3CBF95645AD10BE103655A0E357A8FDD679C00640FF004C85C700F96
+ 9D4D10CF3BBD4BD71B268ED736DE5A4A1F98001E62F138F03F0C8E35D6958045
+ ABF4113843FD2C4859CD02D05200FA67A6D6430C0AFF50A91B5ABFD98B2C8C9C
+ 627D4C2EABEEBE2782F4C966CCD693AA36C9768173EC8990827F5E01EB046D1F
+ 326FCE6F0584F92A788606780CE29B2F3D01BF429158417482C2C468489B8707
+ 533EF82726339C35501592C056C5A70FCB8BB48038A046F0B9358CDD8639383F
+ 28332295303937C5FAF144AFD2EC21FD240A152B32B90E4F0511E101A84CAACE
+ 70FD8A2D96FE72D5091F5EF27D4563B96EF74816FE60132E104CE7E70B339DE1
+ 0C7967D0F2DF094FA4F23DB04F55E2A613001E245FD78DE0FA943ADBBCECA8AD
+ 9134139935004E88A2A1EE303E661440D58FA9491EEF6DD470A1DC569A7754D6
+ B8396501659979AFF981F42D329205EC3FE6624280D8662EBA63B7203326D77B
+ 6ED7CDAE8FC4DCFAD2E633934536A9BB5FA693849D60D581FD701F97E7F94F1C
+ 52ACCC1669658CD162FE90A39381B7AD5230E9F1388059249609DF5A44AC6F52
+ D83765B5B47208E53F593E92F097F77983E4E61DE842B343C32FC04F73536057
+ 7059064DB35C5C8761CFDAE7A5C8B96D1EA1BB1A8F4757E27E5A77FFA4E49D12
+ AE8DCDBA865635A87335F7A9EBDF6864A90F14424212EAF678CC52F49E529AC3
+ 704751B47AC3067E5D2F423ADDEFC1257F0546EA2F788F28E671F519D857AA73
+ F54542E994E5CB6B919EB5F2FD19640126EB9FC894F03262948DD89AD54F3DA2
+ 770E3B5436CEEA3A2AD823A79C97282F64E856AF15E1EAFE250A60F2F5A74AED
+ DE63D89C9BFFE16078AE05F6D287E8F2E2A0290E7DB479F520B41310DA151EEA
+ 203EA7B2316E65E2744784AF427169CB380F74784AAAEE4A305F64685E0ECAA1
+ 226030E1140A13C2B46BD46920BAAB04684550F2587668327F286D91FDF61EAB
+ 2105371DFBBC55C8CB0E2883D48FC3A4D1CE522B8F21D8A3201DCA513B325BAD
+ 683143754DE5658607F70FB564BBFB4E88153E0A2D090370C738CDD6093128D0
+ 893427A325F39824FA561F59325E358063DDDB7A1E157EA5802F4B0D110AF50A
+ 30B84D30D04835E88F459B04389AB5F33F2209D751C0111068DC15463E6FD959
+ D048006131FC8C05E75C2D77B72FB8E0F5963B4D9BD6BC6836F8C52B5E8C0750
+ F79574B088AF5CE0C7A788B5C173D289046E7620E8B486FE7BC28AE9A3C72125
+ 1E64649B6B0332A45B777C2FF2AC34620ABF48D0354C3B258EBA2F2919EC384C
+ 2F7B1812A244A77F1A680A92681DC1223353645B821F43E296F0335497DFE63A
+ 328BE5A732ED04253DB4E5F46FE7C92D470B557C9A5FAA26CFE9D72920A62B46
+ DED69B135A3541B4097EA426A3073FDDAB17A120EA138448B1749CB5147ADFA3
+ E5A2935F340AFD7193CE0F95CDFB9464D03072FA148869748CC0FC4A06B1F80B
+ F35F97B35791102A3F7014B956D9DBBD52D2983C1DA11D80FC8EB1ECF058D72E
+ 29727022378661ADA17F79CC025F3C30C648F8B79DDA8840CC89F8C9283F34AC
+ 34AA005724F863674399B7FB2656E9A998DC7E002BD0D657CEA50D944AE2DCA0
+ 36A1E77E6BDF2F960262B41AE7D9530E6A1C86E592462589F68FC2D7E8F440FF
+ 796F4174BB0B2BC432106470E6A9282B2645F1C601AD66509C749ED16646DB92
+ 624D7F077E730F0409812ADB1BA77FB5DFB197CC27AFA21A4A02C2FC1969ED2F
+ 28AA3B55077D046BE9ABE954C9E25F3B5F19CBD01BCAA43C5D8D13259ABF5B24
+ 7222B918B4DE9737106B060B60B8D2C682AF52193F702DCA699ED299E747BB40
+ C3AD705A339110270BD0235A0F42DD57999782579BB34D1C8F6587CE65AC72F2
+ 456C51F70F451AABF373816CDDF5B2AFE28BBAB09455A9F45839ED3EE23D28BE
+ 6738CF0BF10B63F8BA3571F60F5608E02DC4F710363DE0324C3133CF75F53CF2
+ 36421FB446D0E8768948C1F2EE74BFA7E05C454ED47418A0C98BE898BD37D1E2
+ 7FC0FE52992602A01A50EA0F8DC3FBE732D698536DA7873A439184E618304D8F
+ 791D09FC30D5B6F51ECF149D830BE7048078D3B01395B103D07F737F815B10DA
+ 58E1ACDB7499762B9E64589ED086E21085A54CA0C8DEC6729539392BC37C765C
+ 4474F8AD294687AA32C13B712F21FBC4B05F62F5BCCEE4408953047268F82478
+ BBDBF5DB9D9A26FFD21E99ED7261E5A2D69D99117FCC8DE2ADE9BE684EF1670F
+ 76C61777B455149AF70213A184E3B775B12B29EF8368486A731C86B41FA01DCB
+ DCB126DE2F776AC676B9CA6C4D14FD38B93298EEC7D502B1EA02C0C56425FF9C
+ 049074B893C90C002C13191503C1703C6C195700811609AFC84770591A4E4A4A
+ 518DA46D6B89972FF8C084E7607CE6A98B0DC545E2D505A577809BE235CF1555
+ 68A3CB18575EFE27FA925D7C923A0AF64711E17B2A73B36F3FD27955AD02E4AB
+ 3EAB3190ADDD32448868740480A1FB76BEC05034AEF6DDB0381C9E2EA25FB5D8
+ B526D8255F573FEAD4826718711320FDE23F611B95AC239F34168F64E51C285D
+ CD67EE85B06C8E0E04408D0E13FC0FE0680656C52BDD126945D4B8437A4638DF
+ DC17ADEE81FEF57E9383FA2007D24B6A87D7525C2293E5267F0694E923309DCF
+ 1B418B999378962949B9CF306DBF12D742B5844BEE9FDE3BE379107F9D1FE2F7
+ ADADCA1D44070EEF238060E7ADA93868A123792D7724F92692821756C106E497
+ 6034F64336AEB27757AE4E6E42B0E2A04EA1B74DCD73EF6E0DF6B63A1DF948D1
+ 1DB5EE2CC2C4BAC64946D303E535A9A689F23252DEDA5FD968F40F74925787E2
+ 55DEBBDAA9A98FFB882DB46FBF951121B988564582EC8B7720D5359C9D649E63
+ 32967595BE80A9AB2C45D96FF5BD3D1E38DBCF63311073120959C223FDB1F6E6
+ 51F36B283271A591634BFA392C09FB26DAAC14EA80DBA09BF426F3D0B309BB4C
+ 10DCFF75B116BF02C894D813655A99B4E6814247A46715A2D9B0F522FC701365
+ 2AEF671C5CD926DB811B0762F832C932DE145C3A801FBFD79EB7FB824F159EF6
+ FE49B291244F253D61CBEA805E8E83653B16DD33AB58D5D69B96693CF2DD51DE
+ C5B54BAB48A1B134D5827AAAD870A2FFE948A406C2088C6B2EACF77A4B46E1B6
+ FB0ED88E51D3A9816485A59E022CF8D09E4A72D826DA8D30742CFE906C0AE172
+ 4C258068C6D5E4043DFF12ACC084A7CF4F5D945DD0194A66EC5D22BD967CDD04
+ 6AB46819E95CA8B698EE8E8F894626E4F51D5BC36101DF08BCCCFF01DF275F07
+ 6844B0D46A70C4CC9CBBE5770E08A126A2ADFB6232D906DD843810747C85F1E0
+ 99D894F516B149D68D0D3E328C925030D1585049265E36B3E133E1F4A9118F3E
+ 8853569562E3A991B2D7C510E3B1235FEC186F47E8856CD56A0CA4DA13F0713D
+ C32DA9C568A7C908ACC013219BB5B297F2F9FF2001387E2C9AB16834436863EE
+ 8403E16294E773BDC102A2DD79778F7F51053DBC65547A025C4F44A0AD313D45
+ F602BA3E13D88495A09D6457ECF666832D0E71C4FE7DF00766E85005662C9DED
+ 58989871CCDC2A6B240D28C07217B3AB5A1312BF0DABD61B1E0814ED17DC929B
+ 9A36622EFD19D2007DEBD8F57812EADD7CB480BD1D91A3965CAD160D15DE25EA
+ E15A98B5C6417554A34D54B75E280443AE319AC3C0AD0ECB286DDD9258615066
+ D04D41AACB0AB2D6D56E0382B85C3886E050CD60B53DA4333BA57A9EDF853E57
+ D91B40804A2BB45D97B29C95662726FB7FCA4389A53645FED821F3D3833B325C
+ 5DAD90B9C6AC29CC357C018B606AB0A1B23FA455C32653CF008D85F248458290
+ C240156A783F07691F6BA8D21BCEC1B10BE266E6FA4B9F261D70E35A01614353
+ BA998E290EBBA6265D7C88C3916CD17BCD36265BF57E16DE706A5304F409AB4C
+ 4AD9F311D6F9FA8B5078F62FFAC30DCFCA6DD362F38380F5FB7F22B2292618CA
+ 5BEF9DE4EAF7C4E3F64ECF4DCCC5DA11F0F919B58528761B4984401AFD8DFAB4
+ B07A2CAA4812D66A1AB067DC7E36C82425D4F278DEC02B709F0F5A95B427DDF8
+ 7D3BE1B37F29BA5EB28E189091731CCFE9C12622F31520DED5D133C5E6CC306D
+ 28664B42496910DBBA51A890E286877BB00C48E7A96EEF06CA03A847994948C4
+ F6D3A5899AC694EBD3F42F7CE18D19FA654C836E91389B909C0E5C2A104235CC
+ CBE17B22E5677B0DA08692C2B29DCD5CAE9CBA20D3B96252B78A06D631F348E0
+ 5B46A5933C0E5545C1ECBF88A43BC52AA1E387CF18216AF5FFBFD490151A7D80
+ 583B07B2BA912B15369CA9701FFAB9DDA57F5844FF4196ABF60FBA1CC1877380
+ C0F1F517578C9370625B4D457B0E079C68720AE8D62D8845EF248F984175CCE0
+ F61E3D61D9C930C8E36D335F7E16F750DEF7F0E8B18E3D453D03E859B54E52E5
+ E5942654100C30E18B34525B2AE19B859BF619DBD3B3EB15D61AC560BF
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMTT9
+ %!PS-AdobeFont-1.1: CMTT9 1.0
+ %%CreationDate: 1991 Aug 20 16:46:24
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMTT9) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch true def
+ end readonly def
+ /FontName /CMTT9 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 37 /percent put
+ dup 43 /plus put
+ dup 44 /comma put
+ dup 46 /period put
+ dup 48 /zero put
+ dup 49 /one put
+ dup 50 /two put
+ dup 51 /three put
+ dup 54 /six put
+ dup 60 /less put
+ dup 61 /equal put
+ dup 62 /greater put
+ dup 64 /at put
+ dup 65 /A put
+ dup 66 /B put
+ dup 67 /C put
+ dup 68 /D put
+ dup 69 /E put
+ dup 70 /F put
+ dup 71 /G put
+ dup 73 /I put
+ dup 80 /P put
+ dup 82 /R put
+ dup 83 /S put
+ dup 86 /V put
+ dup 88 /X put
+ dup 97 /a put
+ dup 98 /b put
+ dup 99 /c put
+ dup 100 /d put
+ dup 101 /e put
+ dup 103 /g put
+ dup 105 /i put
+ dup 106 /j put
+ dup 107 /k put
+ dup 108 /l put
+ dup 109 /m put
+ dup 110 /n put
+ dup 111 /o put
+ dup 114 /r put
+ dup 115 /s put
+ dup 116 /t put
+ dup 117 /u put
+ dup 118 /v put
+ readonly def
+ /FontBBox{-6 -233 542 698}readonly def
+ /UniqueID 5000831 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+ 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+ 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+ D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+ 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+ 2BDBF16FBC7512FAA308A093FE5F00F963068B8232429ED8B7CF6A3D879A2D1E
+ 2931CE5F5D18C658602059F07BE66E6EFC9239D7AB2FB8A4CBD41675B8ECF279
+ 650C29E53B14AC0E392A664848C1844B1CECBB2D5CFB72D0916B675C9A9A1E35
+ F12696A6F628473C604A95376468E06E295AD6F76CEB939D94113532050B9D5A
+ D2F41A9EFB9424D986612313B89EFE9C8A71313340B248F6853B1EDBF02B7F9E
+ F447220FE131D7D54CFB8AA1281DBAEA73E665BACB1F164552CC0CEDB63BD4B1
+ 4A9AE8AC6FA02242DBE8DA46B64B6BFC11762F0784F216FC8B9120D688D1705A
+ 438B14F5E5DEAF2A98408B3B64620DE3732A4DAE6D08D5D97E34C75DAE19EABD
+ BA0796165C1151BCBFB1DF8D29A63A8300DBDB9E3323CB82D0337598B83F4F2B
+ A97CF5196D4D1CEC1EDB8966E548C0D9C194C932319610FB43EA1B86322FE641
+ AB48770FF13BD475A7267E142388563D1A400419C585B22A9886074687BEDF74
+ D905BE8EE440BA2ABF28EAB673399B7F129B9729DD5564C681954621903B84BB
+ CAF89AC5ADB2932472DF29ADA2BDBDB4D05F65F28F5F4C529613D61858E0074A
+ 082A852710A62A147C966F2B85B51B0BE85F11D2057C66FDD61F6C5755367980
+ 9F4DE680601D4DA41B46F8D2148450000413C27AA39B586B74B977B25F0FD3C0
+ 4BA1EBFAFDBEC531EA1210365091671CE3C86A6D4BC591C37DCC02570042575A
+ 9D24252D6E01A8603753934D7EA5CAC1BE4E5AD2BA047DE8F3983B23A8A1511F
+ B08D373B69E5076CE4300137B8805EBCC0AAB89BBB312A77835795E3C069322D
+ 42C893A30AD739E2BDD299679B158F7493764F2321E3965141B5ED1C6F4765ED
+ F46D391A646B30C90002B1C461AEE79E5F094CACCA656CEA3DB921CC5205F328
+ A2C69F817061D6C60B121EEE844CA5008F23DF0B6C84A0E85EF031C63DF9EE9F
+ 5471FD5EB690F6C22A8DA3F1D3E8F302BB7B3FAF26CDEE9DBA2B89385EA1B705
+ 642D1B14F0FA45FCDEBF0703CE82FA696B15B36173118BE59DFEF76D2ED556E8
+ 43363255B732CDA7EB0B9E36B03BF9C03FCFEC6B8935E6BC191DA76CF589308C
+ 2B0D8E42B6BC5D54CA99E4B69BE18433C618B4D8396A87727BBD9A5054CF3422
+ 427531FED2142ACB73B3141C718A4979854A60FECEDFD0902F002686AE29D7F6
+ F9FF38DD2FFE75EEFF6D8FC54C1982646586E658507871014A6AAD262BC853E9
+ 22644D9A4CF443EAB0AD6970122BE5D26587F2EFB1052BD03E059C9BF10136EB
+ 642183150AACBE866DF6C88D17FBDD1402E9DE483614600209791859A9026A06
+ 70195F406AFD60F0E00640267F8181D6B3B4DDA011C2DEEC8171C85669818EF5
+ B5E7D1E99891A7BA9F06A785BEC9161760B4A53CC256328E04D3E2C516CEC04C
+ 254888634E93025224BFF39450F494C232F785298522CF030F199779854F909D
+ D298E27313F7A846F9533CB24444E3E8638DCB5EA56B41971F0F366E665BB7F3
+ 9AD280A19B7B06EFC5BB1F15981BEC4722C5A279877E2C55FF2E89679F516822
+ DC74937261B5A8DED74BFF59CE50E5EB1CA63D756531A49A8081CF375A8ABAAF
+ 4606C8F332F9C01297441CE9D627EA2CC6FFEE4C5703256F9C2DB7C0A7863F39
+ 346FFAECFC3723E020B86394B99CB4BDD2A6A5E414FE98D33D0B8BDF823490EE
+ 8F2F872DBC9A75FBD0CED2CCA1CC8F85340E3704C5293AAAD619952E91AB52EB
+ 8D3D72D989C8F9FD815C2D8ED5635461495BB38C3E2A5D945CB9028791480888
+ 526F7D0637FE8D3B4B95006F532EF74A5022273A6F17BAC09662AD3633C00E1C
+ 9DD411D388775F895FCF68F76DC8B468A03067C584A7A3BD2885F9D53DDF7355
+ 7782D79970879B5C4B96DC8C29ED5144003CC4C8B567AFBA10E608865ABAD49F
+ C887C40E1DC3738C1427E0463CD53C7FF1EF14747EA921BC4C74DF08668CD163
+ 63C2D96E83DF6F40068D8BC1C3D49E60A793851401FFB3A183013E333D1DF5F8
+ CDFC7B8A90D196DBF6D0A548677BFA6A41AE269B1AA161FCADB4514FAB398D64
+ B718BCD7C583D4AFA434970DB85955D28653CC79C60867D608DE04C8D9686D80
+ 9752B2876F799CEB13C6337A8BB0B881BED2CD93BEDD1F01A31E2DEF4146F38E
+ C9CD870A25EA45ECCE71BCBF2EAC235BE7C01371B7E6B8FD75FBD11737FDBD2D
+ B56A5C068456D083BCC9BA3B59D787A49C590D8D0E86094920C597D69EA172DD
+ 40C8924168002F14CED3F275D62FF3EB5300A34D9EB2DE43D9B3A9C1DCFEACB6
+ 91FDE0E9F897F29A71AD772120F23608EF75DA454E0EB6B2FA74DF068B72D530
+ C6C2FCF2C889334D90B72B314414362A160B7F47F4A0740B5251414CB63D3192
+ 276F923853239206FE4FC5CE18D42380ECEEFF47FBFCF41F9D3AF72CE299B0CE
+ AE4EF9B77565D90CA2C6F0FDFF0862F2174E37D9EA9984B4463644CEBDF0F348
+ 206649FC8BEE3D4D7D4BFB25DD48CABE03DDBD6412D375A6617B7B33E2CF61A4
+ 7080AC9237EE8692814EE628EAB03DA7E4F1209A076E0CBB2F6B2263D5D0467C
+ 8CFC921497719C4E588DA6E7A5D9EDF29D97E3CDDFEDD23EE4CB65C3773C592A
+ 6F38CB57FC6B565561DFD8DA704B8A2455595B13F7CC46EFF1738F8B89C66E52
+ E045DE256CCF19C49E6252E564EA16F56A50E21647BE6FC117DBF151561FCEB9
+ D03940D31E48A88CBF2927FF4ECA8093EDACEF4E3EE462B70779C99E1A6337D1
+ 81DB5DAAC6317EC53ECF432584AF2D73B64E41E8A6E9E7CAA69D4E9D7E3E0044
+ BBA8C7904307BA4E3D6001CF6C314FD0C1E550AD06112E0565BE39B46E723245
+ 81BE77CDC801D4F57CD0EB4FFA3A9D206D688C1C55FC59463B5F3E8CD516426D
+ F08645B7A179FE9FCA0B332C3E2DDCFD95D902A5969988DBCF30369C3315A71A
+ BF3E096C0F4195027532A5BE37267CAFE441AB4011262BED41CE8DD63EE7CD2A
+ 6968D5E6DC7067B6D8FCFE57F79B4181AC38145C7D1AB4D6CA0DB3F7A701E562
+ 53E17640DE223A26B2B5185B8D089B108372134388911F029F20194C2C0A6759
+ BBDAFFE6E271D6310A29A8458848B842D9411160F154A376411DD51AD8C65416
+ 442D5E5BEF442F285AF3BD2336D87AE1C169B7BFDA6D5DD7AF09B1CB579A6055
+ 236B91637494C71CF87CF524754D7BF0C47F65384BA1E3EA2199D7B314C6985F
+ 58858A42ABC631C7DC47FF8EB0DD89D06A947668D2B8793AEA57A0E4B4D08DDB
+ DC414B762B12606B1AB71BA0E9BA660372A447E36338386D9A9353B9650D3D32
+ 4C30B274E50A143338321AD53D0D568C4341E3B181D50D93174BA23214BF5F41
+ 5374FEBB401EBB13707B1C4818B9A4A37499D3E78F86E79AA1A5F210735EF144
+ 4FA1D9743FF7F8CC578B16F7BD324841F23D33A925B5AF25C7F3278698BD785B
+ 17F193C428D06E2433BCD751BA163010B4F87639EA502ECC1F07011143B9A538
+ 22087127372F58087116BC3E1B25BEAC225D8DE59612435F6EAB24B738571EAD
+ C33BFC80B8B59F7D6288C39A5444F35502CA70FF12BA32842AD980715D1D9C23
+ 3DEB0868C334CBAC0C9B8B11C540F14EAA87A5CCA604AD7356171861BA60A637
+ 16E58130CC9AFA8A6375F55458F2E1A43D090E495A08741A2786ACA9E706CEA0
+ 68FE49401FA733A6DFCBB6209E2DE07B817C319CDC7A5E95C6DE4DAF17F8600F
+ CAACD63954212F42D53EEF84AA98F590EF470918CC727BBDDBD02C314427881B
+ 68BA0ECAB9BC98ADF778399910B2168A84FC8503698F4D5A7D2111F4B004A40E
+ A8F904ED14737E78F7973889337C9B80FFE9AE3FA6A4C4D26765F606D3B6CE9C
+ E1F0C426AF2BB24D4DD11B639EB22F2AE6FADFC43E0B9E37E9AC0842DCC349E0
+ 32A7E8C3EE0A01ECEF33E85DB532A5B2F4CC2FCB893082539C2D3D0C467F56E2
+ 08334783FAC5B8A9077F1696FD59621B1E97CA4637EDB0FF1483A7FC99E16AAD
+ 31CA89A064E0AC2121F6FC5173823D2F609B8C4118481A87CCCDDE2B7BF7B38A
+ 0E351C0909505B208BD75AF81E1788161F25F695745737B7DB02EB6D00CD6D67
+ 233DB900C3842023D4AF2F9621EDC58CF784ACE7508235147D587297FB7FA02C
+ 6170E5B14720B460AC533CCBC6AA330C1251C26E409E3AA3083C6A0BAD1F4AE8
+ D15640361E36609F4DA2942BED6D35AB053ACB588D436C4167A9F78071A2D98D
+ 2E9E177612DB45D73340A5C132F7C526C8DE7B1E613007E63C27A0AE081C84F2
+ E0D42A1A798C672BD2A74CC84A3278F1BABF189253EB6998E3B5EBA49CD60410
+ DC5FB5E4197D2784535DFB3C29497E23DD64A765CE83C73746ECFCA2A37E3E32
+ FF91BE024EAE8FAD2C66D62BE2DC19A8F6A5FE77B3191FF2C5328E77A3D1CD49
+ 82A47C7BD8485C952AA83C0F029759EB17F72FD6065EB0DF300EC77763122A03
+ 8D3E2F9D9915041DAF3E47EDDCF8270904223ED9F80C8520FCB6D83CA2AF9156
+ 3138AA82537715D1369D1DF8C9C00736F801C558A2A1C83CC36A6378BECAFD4D
+ 53DA933F260DB258EB6077FFF9CBC45AB35E234DA4E9C7FB1BEA6BE1C9A66AE7
+ 90E360333650EE7EA7A09D09EB9BC9FE713DFC66A2F65821E06CCD1672BDBB9E
+ FAF1212EC554C5C7FDBFC1A955CC51525EEDDCC6FA3A788A5739411653D66633
+ 3DD592181B00CCC6D319D77FC9F8784030DE4D5A5856CDB0586A48287A0A1C15
+ 04E6AD1AC048E8C1D823BD11B1A03E7147ACCB8BB997DE0D44A790C82AD8EA8B
+ 5EA40E32F8B4A76E65FF69348B3E15915EDC681CF2E0BE060ECDD8197CDA6A5F
+ 64CE48AF3FC11B8FF33F34DE9FAFFD0B6C1C0C7EE7D517B45E0F304CB3650925
+ D81E9B29E8B2B73B521ACE2562D78DAEBBE110F7462B56596D6DFA63DB073610
+ 649A4940245E3BA2B75F520D40A50FFED154442169FDC0325887B8ECAD566AB1
+ FCD6B0102EE22AA6AA6BE4E346133EB7CF28AF7F300924743AD344BB8F081ED3
+ 2AB31F6185159E54979D4778776D7AB84EC064D46592DAF620C61B5C94C6222A
+ 3B0AD26458717D38BD2B0EB15E506D9B6BF1099866911D370ED8ED03A64AD726
+ 60D35820F795FCFC4B96DB3378B44CA5694B733BF5AB1AD28EEEBFA5E4F53D40
+ 7B7B6A9EC9AA28FEF9E301E317C98B991F755B48DAC5CC9AE085E9F08FE286ED
+ 789F6E7F432CE761E29C59753C1EC74B34D738F8ED16EB147FCFFFF0979F18B0
+ 8D6A62285AA8266E301EB2F4C0E7DD1F110D3E077368BBAFC1FAFB1507AB5814
+ 3C9C80A14851C012F2384DF3489D8FCD32E2154E7C52EBB978F74897F304C7C5
+ BE24A3788600BB80D6DEB0E8E03A9D6AE4EE43055DF4A284BFE6F10C577DAE11
+ D33B762DCC61B3820B6548295FC5CA6540ED8753F5986D5788847010C4B5F41A
+ A9608D3DBC1FD9EE4C7A2C35A36897726814F370401D8024DD3FE61D1F8A7A84
+ 34397F7218D42CFE57C3B2C2DF7ED5D1561FE7D5747BACBDCF1B76201DF6CE45
+ B7E84EF5C1AA11D673352E44F29B54FC8AA6EBC6F941832C6178EAF8ACD0C34C
+ 244FB5649327BAA049863DA031517AB1B1A594DE2446A59E903C35F30845DC73
+ 7D2D4FD69B2663CFC7C920DAE3C5F02EA295B07979933E0DABE1238D6647DB38
+ F32689B9439DA5DDC719F6112378545E13A9FA3921CA0DF89BD07D59E6C275B7
+ BAC0F859D1456593D5BAE06BD499023707AB14CE3E3EA2F44325468C3B22A9F9
+ AD3E3FF4F1318BD39979A509D225579993207D400CE635F1E2A38557A1041E24
+ C2B5351777ED969C9FCA3CBE4F066DFB4FE29B62C941249029FDC5CEE3316381
+ 01581466C045E850CE1D581CE80816EB93B655D8F8AFFDBF5DF41C01B713E169
+ C6857EC6B4014A4999B6B896591244CEB4F86532DF9994F4A26487077547618B
+ D87073D76D3214873692A726B5C7675E089FB2691A987A6FC49D2FBB8AB72418
+ 52DD1B8EF6C670DF1944155507719F2AB7785EFF00E050E4E2B6BC08A6081A2E
+ F861135E094F64561DCB951CBD1148A3F8A700CAD60786A7C9CDBA10F52F4DE3
+ 7C84D70D86966D0A2D0290F6C32FF46F718040C89AACA167C213B55004ED2B4F
+ CD1BADC9ECA70B1CB2926DE39C69B5996520F70482116CD6B85C045BCDB40EAD
+ BB088DE51A093FE2074425EB6507635192070E71715C631D0B09022D9E9434A2
+ B1B9341C2FEFC2F491B15B3C727C5560BD25152B89ED7D5CC1721FDE57F8E0F7
+ BF5EFD1CA89688F9F94D0D619B28D71851E2430EFAAD5E234E4C1ACDD1EF1E07
+ E73951DD8B4038A6FC38883DFF7C04A69209E3A16A3D8812C5F9206BD49AD86F
+ 9BF729BD41397CB04CBD6F2DECC0A41A97823200135161C11CCECF24A00254F4
+ D8142EDDE767850E73B04ECFFCB195773D25374B95835F0C577AB0A2B2290D9F
+ 5B7DE9B0891E837BA8DAFADF27B4A0BC66A95D51D91DE5D1DE7550005339E487
+ 2AE4AE517ECDB441494686BE8F3A2E3DE58F91AE8A5D4018FE13559C75AD7C2E
+ 41E14ECBFF96D02073873A777A9711DC069CBFEF16572BEF9E2F9C624B9085E0
+ 6405BD7F07DB97FF861ED5283F1E169BFF8F7721313F64C6CAE65310F0EB119D
+ D31965A78FFAADE2FEF34C945D050B15656750F65330BAAF9076B41DEE217532
+ 9260BA5AF41443E1984C9142C8BC499F7456C5CF2C11A34D41ED20E72FA7FDA8
+ 1E279D14838AFDD517831C991847F7C784674C8AEC137615732FBB28F2153C7C
+ C686E2573A7AAECF2CD5D840A925E7B44F3FFD95F36E7F06ADC86776407BAE46
+ 0B17F2631A3579FF248958D9EFC6801202312C7DEDFBB3C34986A5E8ED45B251
+ CAA2DEFEF9B0D87E41C34BC9A0193A81A07098623188BD1D7C714C9D06C8AA7A
+ 1CE9485F7A2850338DD2D63B92F445CC46A1B0A8783EFABBEC31D4659624AB81
+ D34B9843DCB52FD0F8B04B434E0E3A73520ED0F0B07D041A4FFC6A3C71E461C5
+ 1677C4E3D6EB8F41A1C116EF6D931797FA7FD622E602B5D8AEF622402D9AF711
+ 4E2D3DCC9C64990C4C2D7A670E42FE2D842C8026E1A288A88528F2D32C8681D4
+ FC3A5B15CBEAD75B20192EBCB4661644DBF86A382D02E012D85577BFB660DA4C
+ 54DD71E2C659E05EB192D5A124858568D1F5145B4BA0806E0F971E20D1582196
+ FB2F5ABF718E3F96769220DE599925FA238C6EC7D2762CFC62490066BB427258
+ 5A5EFA4C476ABBE514C783DBD36AF65C5C823880D734D23A6846147508820046
+ F393DCCDA8A0E151DCF77F815BD3B457DF9B764AFBAF9CD74740A43D43DC5249
+ 15005C04DA4B6BAC654B06E6FA5E22CA1ACB6BCBFA018016FD07DCB10498EA61
+ F3D8F494A325AF37D8577DD3C0F9118B9166556A84C932E1FE7AA986924C73AC
+ 750E1DBD6A21BAFA60A4B9DCA919F78C3BDEAF996A0F2B9C9FFBD92AE442862B
+ E0B91749C2CDAE0B0EE9D139A279B8F9AF84F6066E9F525E9DC92F654C238AE1
+ 87A6613813BA73C2F4FCF13E9D4FD702760449C5C275E3DCCF0374AC3283FE20
+ 02DDC4B615E9B12A832FF743745CEC230349BFC1530C6DD5E954AFF42D092856
+ 2619D3FBC825314ACAFEAE0284D3421BF470D99F16FF78CC4671E060D4DD935D
+ CAC7932111230BD01B80EED333AF837D06ADD189F3015273764B01BC08D1F423
+ 54531DF4D522CC9081DEC219A2DF959B1341D476D9E47F40CF64927539CDA948
+ C75EEC5E9892A7D49E774F3FE29790021E6412FFD6CD5FD5D5BBC43E7D83C66A
+ B7624EC833E8837691DB3CBEA538C0256E54518A26DC9FF21E75BE5C4F9D04A4
+ 9E06B0B911310C97E01CCF172ACEA18BA0403AEE485F50DCEC868ACB6AADF0DA
+ C940797C08F03668C1FFC77CD4D2B62E3CBB2185157283621818A81FE3B501F2
+ 4B576FC7A238813E949489DD62F46088EC6F6A01A33B9C15A99864C32C57DC5A
+ EBB31B05E22530A7BCE413B328D182E15C43FD17DAF81393582DCE3460B2FCED
+ E97C2FDEE7A99FACF044582BACDE4DB92E2472BC8D9C5D44CE38B851D8110D41
+ 0FD3A100815C54C205505AFA5526B229BD23FB40441EB92AD3EF224E9ED309AC
+ D3E0E9F8D989449C6829F9172F183419CB5F2BE842B1A32237EDD86E4D18B234
+ 722E125BDC0E1236873751B4241683CAE7850BA9FFB3B230F58F054CDF71941C
+ 819EFE882A253E4EB4279DA07FDB5BF7BA407E0876F360F367DD3CADD69BE8F2
+ 19EEB79D34E7DDD8E84A45FB52B24CB1EA83E07D0B134B7A2B0AFFAAFAAE9C07
+ 2CE2BB887D13E0DEE3B34AF7479BFE444D8B1FB1D7C12F26C6AD3CE109BD367B
+ 04D6C8AAF4A06B5C412B96C6273149BC7E046ABA989EF391F0EE30E39A9F2EC2
+ F3CF1213B5D25DF941C49F82A944B4F3858C2A86D30BEDDDDDEF36AC972B4C7F
+ 39F9E4B5138C9AC657B2256D064480D986BC2B464DBEA73F374D0C51603A7E4C
+ A8468B2E8BF5F9AA0CBF1BD9D36623B22F81361AB91C0C11700EDC1E06D0ED4D
+ 077356A3799159AE427CF3E58398EB07A0B4940ECA47794A1380418272882092
+ 8CB326AF953CF95223F76D90D437F75ABCFCA4FD562D5EDD25CBCCB8A935C55A
+ 7573F86C20AF1C4CF9086D3ED5170FCE9182F5BF0B9289AD3F15A4B5D8B77FC9
+ 37E33DD505BFDDED0A418ECA4F86F658E4C7E382DAA24F28FCA18D3E1FD8AA04
+ 83DC538C85B236A7EE94C6F742404E8FCD66FC6F1B685BB5C3129C7FF2614A09
+ 14B8D3C32B8217B93951D108BE7F35BD1196E34C15A992D39E71AF7A3A5CED9E
+ F9F92FA8BBF7AC435530AD6A9EBDF9F76E01964F7BC0AF8E313E0BD683DFB55D
+ 08FAC8400A9265787608EEB34A6B8831C9039D0416F7E82A8EBA7E48DB20FBA9
+ F70F3FE92F016BFF736CD499D78EE0236482BA53C81B91DDC4664EB7D21F0F8E
+ 8D30019B53F9CD9C88619BB492F57151BA42532A990210F96EA9C2094C1D1C83
+ 4C34BBF9B4D9A3232E3BF3EB1D230E22337BA2A9FB5302D68D30A586B0A1CF9E
+ C3B5F42D3F5FFFB53DD839A05684A21CF8C80049335E5005A86E2125CD6A5340
+ E70B187A8F03678EFAEE3BD03AA1C19C09D660235F80A0336219088FEFCC1303
+ D9427E0F2D280EAF9B9991DA5C78A665A9A1518FEAAEB6B6BB759605E455A7A6
+ 55063BEC3DCB03E2C0F2DFC7232BA006C24A744654B4B7E9DE416C3E85079CFF
+ 3B26A5DBDB248F447D68B7F160C6E1C07C15BDC19A08C343EE4F2B35D4C2C616
+ 6AA97E93A533DAFC2DBE8D4C6BDABFBF32CF63B1952F6D1ADD91BF107A93978A
+ 2BA28682374130B322557438F5B71A072472FA88828FDCE492EA621E0229319F
+ 173A659C382EBB8FF8597B27FE6DFA65C29B19004AB9DEFF6211725598B3F34F
+ 712DEBBCF0C93448078135311E58273D0A4E500F1E215DBAFD563FF42888CF11
+ 7663299965CB522068A431CCE71A713781ED6EDB7CEA69B97C9E01B125944A33
+ 863600A67F5834F99A6B99B97E3A7A7D4EBFE0A90A775528D16815D73E09AE21
+ 345A2C8F64E99C0A7B6DB8001FCB0289A2EAA5F6618502550ADDAD79FA8FDEFB
+ D18D0F2A22CDDB35B73241DE95EDAAC2D5AA6AAD96050ABE2340BE2390B3FFAC
+ 75F0E042997FD157D26DD550613E070F26991736E0C9D6D7377AD025DDF10BCD
+ 14CBC5E903A4F3147EF756D7DDE7D2D86A93A89ADC1E71BCFA0D70FCC8E96708
+ 8329DEDE18BDD7808E88B2F7D895414ECD1FD6751B21405EA7F1B2C142E44E7B
+ 161843E4D72E5BAEEDAA58E4D5ABE79DE1B5EC7E7BBA1D5D442FB4E445895DBD
+ 60761031990ED3E82B22A1D83A4B03629911BA21680C8DDE02B6C09BE09CA409
+ 88BCC1AD87AC59939F332B625C9C567DFCEA7D8926C072CF198104BBDDB3DA96
+ 3C0545A7582AE9A448E62BF212AEF77FD63231402A221703FD1F234BC88C8C6B
+ 70E40D232CABF4454A5AEA0CC36D8E29BFC4530FE3467B8DB061AD929951D676
+ 48FFC0184579F40FCA13AC98DED56E136F02A3CB689BD53594C4611ED07EE01C
+ 5849F071C275E4FC0788F846E0796E30CE98ECAD105DBC7531E586EFBABC
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMSY9
+ %!PS-AdobeFont-1.1: CMSY9 1.0
+ %%CreationDate: 1991 Aug 15 07:22:27
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMSY9) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle -14.035 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMSY9 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 0 /minus put
+ dup 33 /arrowright put
+ dup 102 /braceleft put
+ dup 103 /braceright put
+ readonly def
+ /FontBBox{-30 -958 1146 777}readonly def
+ /UniqueID 5000819 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
+ 7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
+ A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
+ E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
+ 221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A
+ 27D1663E0B62F461F6E40A5D6676D0037D33F24E2FAC2B0009AD3C8350CDF8CC
+ 65BCA87979C36D14CB552E9A985E48BE4E88ECA16DF418749AF04FDD2B0E1380
+ D281BB2476BB45FF30946B247DFD7F57305FA87E50CA338121C71CDFDF927A9C
+ 77FF14CB4A1D6D80356FB1171ED38C37702350497B44E42CE31DB2F493807DAA
+ 15B887C671199A54C4C1294BC520F5538C15556BC43C9F62342B121C6DCD6C5F
+ 491DA47FF360201EE21C08A781ED0589A6DF91B99FE118B9B29E4F068672E52F
+ 1A06C514D91C4C937D4E642503392B1CD1B984B04B674C2977A634F63B35677E
+ 9196FFCAFE09C7E6F1CE1C9BFFF79186529EC319648D4C32ED2C008E53CBB3D4
+ 6D1A29C993DC1660A599AAFE48F2613C4410C574222AD0C308648477D3267736
+ 664247C66B57B70DCEEE8F554122934FD79672AF972BF26906D504DD0CD08262
+ A821338725B0EFEEF12E831F3275DEFDD207B0F7AE6B24C576D8CA1EE9E17B20
+ 9E0EBD152CCCDCB1C966AE5CF27F183B2D8BC570ADBA75CA660E4338DF424CE0
+ 359CB1DDD47A9A3423F3DF340D4E3139A22A52B585E60AA05BF12FEEE9574BFD
+ 9489B7B3A7E1AAA73087DA6FA83118FDE06B006A926D10BE29DAED26CD4846D9
+ E24CEA0730AC715B5C111678694CD5E8FD5F90B1F7342E9098053017FAE4CC24
+ 96C8FACEC0DAB86D542BAF37BC62DED4B9070A6999FFF600E5CF1F41ED39E0D7
+ AFE21717FF96E61B548C41AEB2671E25BC966B3491345A5F6CEEE82BA6C10424
+ B673290A6D0CC9674B414D205417AD4CFE0146DAB1E9ABE9DC83F524D0D33DA5
+ 6657462423166BEEB4E1C475DAE705598D7A4AB1992641F29166DBF8B6CF8C86
+ AD725ABFD518E8E4577061562D96F100E215D27B8D5F63928B4D81B9E90AFCAC
+ 2F010131A891517F9FC27A7CE75FC6D3B1D807CACD98C61B80F5C5CBC651F423
+ E1EE7F9763ECA11AA62A424B3BDACEA9517615E9F6F4924339A2629FBA741BCB
+ C8D5D1AC818F3B384B0B8C988532A11EB31C6327DD4B286B19406683BB9BF4EE
+ 7326F03CC4F1B796B42E744A21DB21B92044A361C60BB892AE0723C9F064CCD1
+ 2368D940FD2F4A537C6C2B86CFD2A136BE661EBC2136C648E7B742D7780E1C1B
+ C4E073F102D116934C46D1F7D432FD8A05284160880DA42FE14DA8004ED44217
+ 474625EBC34B4F3B13685B4971BA6964FD9BB0E17411D3EFD5BA46A00046648D
+ EAA47C86CBAE9A42C878F0E3D60EF5A32234F16D7C2A7A32013A2258EB8E455C
+ 89A2F968E100E12AF3100ED66A03F1D3D53B4172B8431BBFCAC4E777DDB5313B
+ 35C1B2EF4734307C082BD021A8A3073F297571984A6B0E5D3182EA
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMBX12
+ %!PS-AdobeFont-1.1: CMBX12 1.0
+ %%CreationDate: 1991 Aug 20 16:34:54
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMBX12) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Bold) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMBX12 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 74 /J put
+ dup 76 /L put
+ dup 101 /e put
+ dup 111 /o put
+ readonly def
+ /FontBBox{-53 -251 1139 750}readonly def
+ /UniqueID 5000769 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+ 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+ 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+ D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+ 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+ 2BDBF16FBC7512FAA308A093FE5F0364CD5660F74BEE96790DE35AFA90CCF712
+ B1805DA88AE375A04D99598EADFC625BDC1F9C315B6CF28C9BD427F32C745C99
+ AEBE70DAAED49EA45AF94F081934AA47894A370D698ABABDA4215500B190AF26
+ 7FCFB7DDA2BC68605A4EF61ECCA3D61C684B47FFB5887A3BEDE0B4D30E8EBABF
+ 20980C23312618EB0EAF289B2924FF4A334B85D98FD68545FDADB47F991E7390
+ B10EE86A46A5AF8866C010225024D5E5862D49DEB5D8ECCB95D94283C50A363D
+ 68A49071445610F03CE3600945118A6BC0B3AA4593104E727261C68C4A47F809
+ D77E4CF27B3681F6B6F3AC498E45361BF9E01FAF5527F5E3CC790D3084674B3E
+ 26296F3E03321B5C555D2458578A89E72D3166A3C5D740B3ABB127CF420C316D
+ F957873DA04CF0DB25A73574A4DE2E4F2D5D4E8E0B430654CF7F341A1BDB3E26
+ 77C194764EAD58C585F49EF10843FE020F9FDFD9008D660DE50B9BD7A2A87299
+ BC319E66D781101BB956E30643A19B93C8967E1AE4719F300BFE5866F0D6DA5E
+ C55E171A24D3B707EFA325D47F473764E99BC8B1108D815CF2ACADFA6C4663E8
+ 30855D673CE98AB78F5F829F7FA226AB57F07B3E7D4E7CE30ED3B7EB0D3035C5
+ 148DA8D9FA34483414FDA8E3DC9E6C479E3EEE9A11A0547FC9085FA4631AD19C
+ E936E0598E3197207FA7BB6E55CFD5EF72AEC12D9A9675241C7B00AD58FAF645
+ 1297991B5D01701E82228D0313FC7C66B263BC79ACDDF9AAC48A3CBF42B96E38
+ 583E1D059953076D68148DC8B6C9527B3A74CE7DEF788A11531F44120BDF0F61
+ 0B2F3ED94EEBCDE4ACD23834C242AA4314B9EF98E4BE72DB76EBDD0A028CEA9D
+ B4C38C1F2D24B8FDE686832FE96204552C820E45B6BAF0C3308742AE2F230D3C
+ B337635E94E2E21519DC89511E33E75B54BCB340A55B3DD2CEBBB4D3FC1915AA
+ A47FA615A664F30E0B5507140C2E9D095F104D2BFEF1B7BD5964C6E26A62942A
+ D2897AB34E749B775DFD0ABBF6D32BF9F68276E2AFDD3526FB51BE6BC5E1EC92
+ AD58A3AD766D5803F6B02DE6D87DB7A6AD6BD84E7F92239849B2D21C1753B50D
+ A50183B963C99FF183E81EA0865584AC45411BADA9712DC3D65ED9F18271C8E1
+ 4567EEE5A67999CFB0B2E96928E04B09A71458440E255E24010791CFA4598272
+ 1D1454C9E7B67C810F651F7A910593809C7DE1945BA5BFF060326130004E4754
+ 75E0CC1912EF539B5EFC7DC0F3A19B15F7CE81E362E660F875FE98D1FFAA1DB4
+ 9336FBEB8D36AE551BE7E6417CA411582F1004F0C4BB5B94BE9474BB2E8BB1A5
+ AB8A1CE06944A7DD9AD67A6CCA0F6D2D8F0A92216E40A1A711FB54402D854026
+ 11A2D33191EE5412888225E004CD8444092E82F4F0011FC3F318B58BAE98CD40
+ CA9A62D874FE97B873B8F32EC0B4ACC215CE9E20485FCBB521468BA2E225278B
+ B2A37954457E80C973F6B36651E3D1C98645A420488CC6164AD42A1E0919F7DC
+ 7076727C63EE2811AACD6D05DB596C4130049AB47F07979368E2D7C446F21596
+ 06111FB32286DC3F2148648353CA4BC23F05B13D41DBB722B39D9DEFA198C351
+ 8E5EA171294E13983CFEDD781EE6F015DC38D25FA6A57FB024DCF6BF7751AB5F
+ F244836D07B2884583ABE73C3EDDC253979D09B1DAFD9D6B1D9DF914E09F473C
+ F30550645C0E00E950822EA0FC7921522955FF3CEF13E4EA71CBB70BDC7C94B0
+ ECC29BB8F9547383C5D853C983FF4158EA736DB37F82375C2E5BB82C28457537
+ 68C0B046D6FB3200C54DDEB9569490
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMR17
+ %!PS-AdobeFont-1.1: CMR17 1.0
+ %%CreationDate: 1991 Aug 20 16:38:24
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMR17) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMR17 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 45 /hyphen put
+ dup 58 /colon put
+ dup 73 /I put
+ dup 74 /J put
+ dup 77 /M put
+ dup 84 /T put
+ dup 86 /V put
+ dup 97 /a put
+ dup 98 /b put
+ dup 99 /c put
+ dup 100 /d put
+ dup 101 /e put
+ dup 102 /f put
+ dup 103 /g put
+ dup 105 /i put
+ dup 108 /l put
+ dup 109 /m put
+ dup 110 /n put
+ dup 111 /o put
+ dup 112 /p put
+ dup 114 /r put
+ dup 115 /s put
+ dup 116 /t put
+ dup 117 /u put
+ dup 121 /y put
+ readonly def
+ /FontBBox{-33 -250 945 749}readonly def
+ /UniqueID 5000795 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+ 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+ 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+ D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+ 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+ 2BDBF16FBC7512FAA308A093FE5F075EA0A10A15B0ED05D5039DA41B32B16E95
+ A3CE9725A429B35BAD796912FC328E3A28F96FCADA20A598E247755E7E7FF801
+ BDB00E9B9B086BDBE6EDCF841A3EAFC6F5284FED3C634085BA4EE0FC6A026E96
+ 96D55575481B007BF93CA452EE3F71D83FAAB3D9DEDD2A8F96C5840EAE5BE5DC
+ 9322E81DFF5E250DEB386E12A49FC9FBF9B4C25C3283F3CEA74B8278A1B09DA7
+ E9AE4FBAAF23EDF5A3E07D39385D521547C3AAAB8EB70549756EBA8EF445AF4A
+ 497CA924ACCC3DD5456F8E2C7E36946A5BF14E2E959895F7C94F49137256BE46
+ 4A238684D52792234869EAE1A6D8ADF4E138B79472D2A90A6CA99E2394CC20CD
+ 3841733046175B20CEBE372327BF13428EED6A3E2FDF84C2DBA4B0AD584EE9DF
+ B51828D3B8F385846158C29C9AC3496CB9692DD10219697B2ED4D425C3957FD8
+ C4600D76E045C561216EF05D38177243C314877A69A1C22E3BEC611A2EE5A216
+ 9B7C264CF6D1839DBBD78A40610F2C0D7C2FE09FFA9822FF55035AD52546970F
+ 83EED2D30EABB1F303091EBC11A5379B12BB3F405E371519A53EA9D66174ED25
+ A2E55463EC71A97BE4C04B39E68112956117C8252DB6FB14AB64534B4BCD568B
+ 246DB833982B38CDE7268BBF74B6B0C18091E1B1F87D32D66F4DD023D1F10D2A
+ 7736A960F72AC01F733A11023832CD68FB6288A5977743F781214D8FA9C0C3F7
+ 80001321D4397771F728FD9EE57CFE7D9192B887EC883EB1505068261DC40089
+ 7B7D2820F06515CD74513521F6397FEAB3AD3572D9A8269430E407E357422461
+ 1785FC2782047F4C0339D79B16862D939F3A37F78E4E2174E4FBF132539CB760
+ 207999FF86F6A3EBE48EB0A1CA635450FDEEF79EB16D853F3BF4B7AE5DF6AB7E
+ 8F0B7B8FADECE9C0E48E51C895D320F4398C43A73D2FB01A00434FBD569EE067
+ F79A798785C6736B213AA8422AE752F29AE6C209F79CAEF10DB7120AEBC08B46
+ E142A0105FB9ECD7CB868103DECEF9A3FDB22B405C8F5E452A7C14DD06E83A13
+ F65904148C701784BE62E99F7CCC636CD13EEB9CD20B4C41C6264A5A3DD3A1B0
+ 8CE3AC7B76E5F649DB6BDDA7EB439C870453AA10585B99742BA2CDB07780638F
+ F3D94E816B789967278F7C4713571C5DCD46F6B14B490019F3C02CB93A903B24
+ AAF018A59CB3481135FA0335E66D23F607B21F65ED6C17F06C4CE6124B484126
+ F78F74C2DA4A19EB58E095C816FD2C0EA2CA1B2D7656942ECD4D64D18A740DFF
+ 455A74ABB0C0C8CE8ACD1E0C1CAB48C382434A0C140005109CC34F8C36A8A529
+ 5029FC59803841A7DD9FAE2EF614D485E7A636306C8E10CEF1EC52B6282BD7C0
+ E5672F673A0D4083CE3AF20C96F759C5398BF70953DA075966434A318E6BDB9E
+ C7FE11FF1B324B95029503C1467A0558789C91A17B5A941333FDFBFB4C15EB75
+ B493FD3727B7E18A59441E4C938F58883946CBBAA072B137A2B53B61FF1EAC82
+ 7EBFCEC4CB4DFF781CC876A6E00E7B920315DB9FC8BB6997CF6FA504575F387A
+ AC46B2190559FB8E6499304CF02BB34BB39A28782C2308B3CD0932A3885B7F2D
+ 9BC581676FB00EECBEA5A23BFEDEEC632401A6AA850B9A8F84D6C0400923EF56
+ 376CA84B6511B50467FC89E745B6D2F58B358D67600FA9D2DBAFED783995EEE3
+ E70FAA63DE68478E8F6CA4E7EF424845342A38EC68F37E0A938202EEEDDB3185
+ BAA771037EF315F3412571F3A78D6D4A772047DD7ABF7806C7F9978655A17986
+ F937474379E7C7A70E86D0FC02B44F1F24ABBEA005D4EEC43F822F7380EB0CB7
+ 7097AB9CD6624F655C21A19456667322A5E7117F0E68C2AE0A649C68CD80B109
+ D49201FE26DD1CD044F9E7E93DFC455BF212DF34EB92C9929639975F423A5FED
+ 0112E513E1C74FCFCAA4977928BBDC3F6D23C5DB333A2739B1282C226C20C7BD
+ 024D85B11AC1E70F688FFD2B6BA2A16BAA9231C29D4860DD16BAB0D1E59185BD
+ E2EEDDDAA1CC717309C0934673D256FA2ECCC9A302FAA10EF9F5CA5953F861E2
+ D1F7E4F1C967C7DDC90576B4551C0AFA8A4FAB0BE25A9B753DFB6001CA6B3915
+ 22DF021783F4644B7EFF2B60BA5AC29B2F099D8DB1F43EDD53A4E4426CB04B02
+ 1E7F40B6AD5398E61041DB0FBE96FCA66BE7375699E75FBE8C0272E1BD0ADA92
+ 10554A69EBEF09C92348C7FEA97056F2C03A74885935DF84D0FDAA8A0C913106
+ 882024318B29C2675B3DA1C3DFB833351DE01319303C9BD94C52B8832F522F66
+ 8679BB828A5AA8FF560637714E32FC6CB565A08B87D03A5D34EAB55D19B7F0C0
+ C3188C52F27CFD19DBFADF26E4F2A81586D22D32D00B831C73048B5CED9DEB75
+ EC1511BAEE5A1E1F575E6B9D83AD14DC93B39A1E3FF1B246FBCAAA5FF7F44721
+ 3F737890BC5FB5381F463FC6EC2FB465CEBE8A87F1E5498E31423127D25BBABA
+ 413F8407A98BAFB4C0D420A7F15C147F24EFB436B56B6D476D70F0DBA787D26A
+ 0AFB6E907E53A5661B7A790643A94C043AB074BF3E10F024D4B97751D473D07E
+ 38ABA3ED14072F956D23CE5A9C801A57308B2E9F329F29874D02275DE5B2C1A1
+ 9B8B026CC5647EFAD8F75C20B7847EEE86732B23D7A2F9B8AD8504601F588BAD
+ D472A2354798B04902BCAF5E779222800171941E2A16F9E662B3EFDD469688BE
+ F333906171644DFD30DCFCE0D04BA6FA99328E4A21EC1A1C5FAB35697B98718B
+ 3EB92BA5B75B75232CAC53380C1DB24F7A28599372259130794FFA5F07B547CE
+ 93F8F3FD5AB3F6806440528D746C23A96F393BE0319ED2BBF33EB12D2AA44BF8
+ 8506A34790077F07A5AE5928286187BC26D4E14FD7DD6100D7FF29663C208764
+ 3752D35C6640EDC45A0AC7C2D49BE8AB80B9CD514BD87F8ED53301380CF74AAC
+ C39A0C851FDE8308D3A657A2222624C8CC99570F5B09180FA36956024A3845B9
+ 4566747AE1E5A4837C9DD1F463E95593115DA2A6C9D8FA3AC2ABE3331CD92371
+ 634C0C7CC4E87E282C850B66B63690CDF42DC3B8E163C2851915291AEC6DCFAD
+ D059683D9876CAA835959933F28CB7471AA40BAE7E9459D9168FE43D8EAC0A2D
+ 9CF5156A04A36C6F0F2354472D4AF5A318CDF64F4D776BEF9E768E6A33945C50
+ 8A4D6C10273633A07281776133DC8AE3D149F63FA352A797F45EFD78065ADBD5
+ CCA16FB31652B8924DE28304326ADF96B83D6C4D22DF28D86373A540B3A37D17
+ 9C3D6FC78BFB05B823C7A6D02E234ADA56AC7CE1D8782F3CF6A0A8E387924E7C
+ CFC7BF961E4CEC37DB7DECEAC366B13AD1376CDC778F946CA81157DA33B5B6F7
+ 7DD5A169D619BEBC542A371111C2CFB6180D0A5507C6BA4A06A2798DAD6C48F3
+ 82D174AB2BDF17068CBF461D878C3486D4DDB36833C28631BF1296A50982FA99
+ 134D34F946FF9ABCBE017349F65D454D145760DC97847E88B36D46082FBE8F87
+ 7CC83E4F7F389077160581656755447D579E4D2065E8D8A092C1080CEFB923F5
+ F9C6A108C11F38D41132712F5086A3637B03CBC468D173DB1209FA1A34AF49AE
+ E1C6B852C50E6FCF32A57E7F4E798A65025FE6A86F0A979E43B95972A646C982
+ 11FB04D91D6ECB44D7B96CF26A8E4D7A38EABCB4A7DFAD5D4F00AC3D9AF68F80
+ 57F33FFD8E2110413EF4D1FA9585E144A8340787EA74FF561A8CCAFCA5233372
+ A891CAA532D9B6156D6547E4D90989F501B3C09DF838E8108E458103A7E3DD47
+ 640AA0F199F38ECA32A1767C8A2C749510BD94BD2170EE8FEB4BBC5600B7ADA7
+ 023694466810FFCFF20D9187B25A9531DA9910BF799BEA9914661AB309E5CF4A
+ D437D7F2D985AD4A47E1FC8799C79BBC8863BFE9C2D6A1FC4CDDAA05C19AB879
+ B61B8AB8666C7760704BBF5EC67961A3ADF5A35B73977857463922BC3F54B06C
+ 2AAE17178E269FA9C6372DBE2FD331ACDE2872E3C0383AE0923FB170BB6AD91E
+ E2B4BCA55DB6CB79B0FE66B0C5CAC4355415AC62B19FAE0027FC6BA8E065852F
+ 41CCE0D73E386AA4816DCC3F7314D3FE1186992CF9856E7CF6E4537EF6D0E327
+ 59AF7B95EA0C2D3B0C01F554A168D950030801D092AF9122F2D22EF96849366F
+ 23DCCCC63CFFC6D0AF270BEE97B2EA5B2FB9B9B928E505030046E22E729D105A
+ FDB5B619AC0AE71C8E1669A16E40398C46BA7207A7ED0173C13866ACD6CF9048
+ 17CDBA1A5EF75F32B99A564BFD2135F870068BFE60E45D0121C8D90BC4F36DF0
+ DFBF461F8CA498E4138DF6C376F30E2B2010E4DB4525C86CA7EDF5CAE9E7B706
+ DAD680223088C9F7EBA0C1C01984D0E252A7F1A9C0D537927B6C96B60C7D20EF
+ C49C221467A728D9067672E091C421FDD035E08B5AB2C733EC6343BD41823F03
+ BD8E150966EABF5B66CCA545A8637F12956274AA028D3AF0EE8436696B37C909
+ FB310851085BB46151918B895C25836A907AF1BBFC123C7256AD1279657CB733
+ D9D7EDFD1E6E07B6590C15168454A9CC0AE2F260D0B707FE89A5B0C185179335
+ 262309E5F2264FEA0B2E5ED1789DDED273C72E3241C26085A668AFDD0344C9B7
+ A767D0B8BA6DAD06679CFD3E9E5B982A19F603FFAA1E84023470905407B68260
+ 0BCFC456BADEF57ED4C841C7341EC34E1559AC5EFE5176F46B6DBD04FB3FEB25
+ 8C25527EC947C1A9D43835CFBDE4DDFD84F4CB46E169832C71478AAF3255D58B
+ 0A0AB39EC3AA36F4AB7D2E9ACD7C1D05C3E2FB24F7198E382B3094CCF6CED223
+ 7DC420FF3B5433D86263D9F4FAADFD0636929BF7BCBBD623581ADA6FD039B89A
+ E7E2B0D15B711F4C5FCF822FBFB35FBBF3781B7CB938FED2D663797D05DF468A
+ 6BAD5CE9F38BBD6DEA0C0A69AFA85DCEDE2A1C8F43DCAA6B1C82970C8F9D8ADE
+ 85244CF01D80916495E6C2671489390703DBAB4346D2B33BEA50CC4B4776D3F5
+ 5AF293ED4F1868C08C5550B6E9BB6CDB24132D8D613F4D679BA30498BFBC62FB
+ A2EE3576DD90961AE0243CB6E46BF4DF8367985714E4CE5B15658415204F4CAD
+ E76987C67A81CBF7BE3DB0EB1ACF524E804CFE5C07CC618AE4E5095B0F8A0948
+ 2950E5C5A4849A492B7F3055B1E072097A5D44D4FE90E0507610DC3E5C0CF4C8
+ 36CA9CCD7765A87FDF4CC0F9EB8CA2D64B328B8F37A1D7E65EF54E2FF9F92C12
+ 8EF883849218FEFFD0475E4978BBB12DC870EE7F811D9C2436AF6F3202CDB87C
+ 20E30E9AB2E350D38BE8D906C6A2C99F072F983D2852309B0ABDAA0A108D11D3
+ 39A926AB754DF436910942B89D605C37240CB5C2D6E5ECD74EFB224F46C559BF
+ D08C329B50607BA82A61D898B54FEBD4E38E47EBD128F5E65B91A04C25C33A3D
+ FCC784632337D345DD08FBBD486B4FB66A2288D0C473B17165241543E2A7CC67
+ CF0D29204470534462670E047669D61BDD89B420B89B9D6CEE6751819E6F1B66
+ 9E563C843698CEB6110223A948ABC4F0FF443521C06BFB911FF7145756CF1ECE
+ 03BDC8D8EE755E1B44ADB6675489E62D5485DA7F03145FEB8E4A46A969939B40
+ 5CCAFCE60540EF8CDD667F6E9D6E73F949160A0F305126EF324B5FE63034048E
+ DD2C7F3202ADBB11AD76F037DB8D43F8279A27A87D4155A9B96FC2C250BF8C9C
+ 63AC5642EDE637604D3E5523E4DB39718F77436D47EDE71FE0AC5A077E987E82
+ 0FD4DBB5A1BA02D2F1C30FD76E8700128B1D0DE73294466F5C211454C367DB08
+ 6CF603F3DA120041449125A6005ADB0D29F0FD475D34EC9D5CF4456C51F748A9
+ 0C5500678F84F8AB61140DE872B5E52AAC4C7AE633FD364DB242101380A9DC34
+ BB55E92EF97CDA549E15CF3647C13D009983F4B2DC08F6324351605A9F5F9C90
+ 468B414C6693EEF76C73BC454C27293DB3D68A4F69AE0368635D28DFDEA4CE13
+ 0C5339989A68E555F10E1682CA257469D0D183913CACDF90BD0B0679C97BC4C5
+ 8F3B5D2815D052CF2D636081CED1A05E820AACF842F3FAE35103136FBAB48A6D
+ 8C8ADBCEC2740FB08DFF33A5D632BAA8F767784F3F89C9EAAD5218F11C1CB41D
+ C7D073234410BC8942E2A243B1A31403F85A39CB4891B52030B76CCB4C9024EB
+ B5B16E2A6B265CA5EFC7329E69AB9B1A80E8F98757413D74B41EAC6FFD1CC365
+ 2A3457F23C6F770E7EFA4BE726BBAFB59359E13C7AD2C03D4CC373652F60461F
+ 8DA0E62F4C9AE2A8D48BFC930EAEE09DB30138203E4AFB5D18A714B02232591A
+ A152B82135D02BD6D0B59D72A58A4323E1E472E3A0F0803DB54B9C09CE92975F
+ EA4B9142496F17BD8D3A3D1B4CDE8CF228EB748E1122E78D4C28F40C57F9657C
+ 0421CFE51B6DEDFFD0077714925A042FFB314F3962431125509A72F8B5B85046
+ B7236229CA0B643A7063EEC1
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ TeXDict begin 40258431 52099146 1000 1200 1200 (paper.dvi)
+ @start /Fa 137[92 92 1[68 3[95 5[45 3[83 93 88 87 92
+ 26[106 70[{}11 149.44 /CMCSC10 rf /Fb 133[63 74 2[74
+ 78 55 56 55 1[78 71 78 118 39 74 1[39 78 71 1[63 78 63
+ 78 71 10[106 1[102 78 104 1[96 110 1[129 88 2[51 106
+ 1[92 96 1[102 1[106 7[71 71 71 1[71 71 71 71 71 71 71
+ 39 8[118 24[78 12[{}48 132.835 /CMR8 rf /Fc 153[75 102[{}1
+ 149.44 /CMMI9 rf /Fd 205[61 61 49[{}2 99.6264 /CMR6 rf
+ /Fe 193[104 1[104 60[{}2 116.231 /CMMI7 rf /Ff 152[68
+ 68 98[68 2[104{}4 116.231 /CMSY7 rf /Fg 134[67 2[63 74
+ 46 56 58 1[70 70 77 111 36 63 1[43 70 63 43 63 70 63
+ 63 70 8[101 4[77 99 4[121 7[92 102 2[101 3[104 1[43 2[70
+ 3[70 1[70 70 70 70 2[43 5[104 111 37[{}39 116.231 /CMTI7
+ rf /Fh 134[70 70 95 1[73 52 53 52 1[73 66 73 109 38 70
+ 41 38 73 66 41 59 73 59 73 66 3[38 1[38 2[98 134 2[95
+ 73 96 1[89 102 8[86 89 100 2[98 5[38 38 1[66 66 66 66
+ 66 66 66 66 66 1[38 45 38 102 1[52 52 1[102 109 1[109
+ 21[75 75 12[{}58 116.231 /CMR7 rf /Fi 137[79 83 59 60
+ 62 2[75 83 125 42 2[42 3[69 83 67 83 73 97[{}15 116.231
+ /CMBX7 rf /Fj 134[93 3[98 69 70 73 1[98 88 98 147 49
+ 2[49 98 88 1[81 98 79 1[86 13[98 2[121 133 5[67 2[111
+ 2[128 54[98 103 11[{}25 149.44 /CMBX9 rf /Fk 134[74 71
+ 102 71 82 51 63 65 1[78 78 86 125 39 1[47 47 78 71 47
+ 71 78 71 71 78 10[114 1[110 86 112 1[104 118 114 138
+ 96 1[81 59 1[119 1[104 116 110 1[114 6[47 78 1[78 2[78
+ 78 78 2[78 47 55 47 2[63 63 47 26[86 12[{}53 149.44 /CMTI9
+ rf /Fl 129[77 1[154 77 68 81 81 111 81 85 60 61 60 81
+ 85 77 85 128 43 81 47 43 85 77 47 68 85 68 85 77 43 2[43
+ 77 43 94 115 115 158 115 115 111 85 113 119 105 119 115
+ 141 96 119 79 55 115 121 100 105 117 111 109 115 5[43
+ 43 77 77 77 77 77 77 77 77 77 77 77 43 51 43 2[60 60
+ 43 119 128 2[77 19[128 85 85 90 11[{}85 149.44 /CMR9
+ rf /Fm 82[66 50[88 100 2[100 111 66 78 88 1[111 100 111
+ 166 55 111 1[55 111 100 66 88 111 88 111 100 8[144 199
+ 144 144 133 111 144 1[122 155 144 188 133 155 100 78
+ 155 155 122 133 144 144 133 144 7[100 100 100 100 100
+ 100 100 100 100 100 1[50 46[{TeXBase1Encoding ReEncodeFont}57
+ 199.253 /Times-Bold rf /Fn 137[78 78 78 78 78 2[78 78
+ 78 78 78 78 78 1[78 1[78 78 78 78 78 8[78 1[78 2[78 78
+ 1[78 6[78 1[78 78 78 78 78 78 78 78 1[78 78 78 5[78 2[78
+ 78 78 78 1[78 1[78 78 5[78 37[{}44 149.44 /CMTT9 rf /Fo
+ 152[77 77 68[154 32[119{}4 149.44 /CMSY9 rf /Fp 82[66
+ 51[100 2[100 111 55 100 66 1[111 111 111 166 44 100 1[44
+ 111 111 55 111 2[111 111 11[144 7[166 111 2[55 1[155
+ 3[144 133 66[{TeXBase1Encoding ReEncodeFont}27 199.253
+ /Helvetica rf /Fq 144[161 9[147 24[194 1[167 74[{}4 286.924
+ /CMBX12 rf /Fr 134[139 3[147 102 103 102 1[147 132 147
+ 222 72 2[72 1[132 79 117 147 117 147 132 10[199 1[192
+ 6[244 2[135 94 14[72 12[87 45[{}25 286.924 /CMR17 rf
+ end
+ %%EndProlog
+ %%BeginSetup
+ %%Feature: *Resolution 1200dpi
+ TeXDict begin
+ %%BeginPaperSize: Letter
+ letter
+ %%EndPaperSize
+  end
+ %%EndSetup
+ %%Page: 1 1
+ TeXDict begin 1 0 bop 152 203 a Fr(Jello:)115 b(a)86
+ b(retargetable)c Fq(J)p Fr(ust-In-Time)h(compil)p Fq(e)p
+ Fr(r)h(for)i Fq(LL)p Fr(VM)g(b)-7 b(ytec)p Fq(o)p Fr(de)1352
+ 891 y Fp(Chr)s(is)55 b(Lattner)711 b(Misha)55 b(Br)s(ukman)710
+ b(Br)s(ian)55 b(Gaek)l(e)2023 1089 y(Univ)-5 b(ersity)55
+ b(of)h(Illinois)g(at)f(Urbana\255Champaign)2431 1263
+ y Fo(f)p Fn(lattner,)82 b(brukman,)g(gaeke)p Fo(g)p Fn(@cs.uiuc.edu)
+ -303 2403 y Fm(ABSTRA)-11 b(CT)-303 2644 y Fl(W)e(e)69
+ b(presen)l(t)h(the)g(design)f(and)h(implemen)l(tation)e(of)h(Jello,)k
+ (a)c Fk(r)-8 b(e-)-303 2818 y(tar)g(getable)71 b Fl(Just-In-Time)i
+ (\(JIT\))e(compiler)i(for)f(the)g(In)l(tel)g(IA32)-303
+ 2993 y(arc)l(hitecture.)104 b(The)64 b(input)f(to)g(Jello)f(is)h(a)g(C)
+ g(program)g(statically)-303 3167 y(compiled)56 b(to)g(Lo)l(w-Lev)l(el)g
+ (Virtual)f(Mac)l(hine)h(\(LL)-17 b(VM\))56 b(b)l(yteco)t(de.)-303
+ 3341 y(Jello)47 b(tak)l(es)h(adv)-9 b(an)l(tage)48 b(of)g(the)h
+ (features)g(of)f(the)g(LL)-17 b(VM)49 b(b)l(yteco)t(de)-303
+ 3516 y(represen)l(tation)h(to)h(p)t(ermit)g(e\016cien)l(t)g(run-time)g
+ (co)t(de)h(generation,)-303 3690 y(while)75 b(emphasizing)g
+ (retargetabilit)l(y)-13 b(.)139 b(Our)76 b(approac)l(h)g(uses)f(an)-303
+ 3864 y(abstract)68 b(mac)l(hine)h(co)t(de)h(represen)l(tation)f(in)g
+ (Static)g(Single)g(As-)-303 4039 y(signmen)l(t)c(form)g(that)g(is)g
+ (mac)l(hine-indep)t(enden)l(t,)72 b(but)66 b(can)g(han-)-303
+ 4213 y(dle)71 b(mac)l(hine-sp)t(eci\014c)h(features)f(suc)l(h)g(as)f
+ (implicit)g(and)h(explicit)-303 4387 y(register)h(references.)135
+ b(Because)73 b(this)f(represen)l(tation)h(is)f(target-)-303
+ 4562 y(indep)t(enden)l(t,)47 b(man)l(y)d(phases)f(of)h(co)t(de)g
+ (generation)g(can)g(b)t(e)h(target-)-303 4736 y(indep)t(enden)l(t,)40
+ b(making)34 b(the)h(JIT)h(easily)d(retargetable)i(to)g(new)g(plat-)-303
+ 4910 y(forms)43 b(without)h(c)l(hanging)h(the)f(co)t(de)i(generator.)66
+ b(Jello's)42 b(ultimate)-303 5085 y(goal)53 b(is)h(to)g(pro)l(vide)h(a)
+ g(\015exible)g(host)f(for)h(future)g(researc)l(h)g(in)g(run-)-303
+ 5259 y(time)f(optimization)f(for)h(programs)g(written)g(in)h(languages)
+ e(whic)l(h)-303 5433 y(are)e(traditionally)f(compiled)h(statically)-13
+ b(.)-303 5877 y Fm(1.)198 b(INTR)-6 b(ODUCTION)-154 6093
+ y Fl(Jello)79 b(is)g(the)g(co)t(de-name)i(for)f(a)f(retargetable)g
+ (Just-In-Time)-303 6267 y(\(JIT\))58 b(compiler)h(whic)l(h)g(curren)l
+ (tly)h(translates)e(b)l(yteco)t(de)i(for)e(the)-303 6441
+ y(Lo)l(w-Lev)l(el)47 b(Virtual)g(Mac)l(hine)h(\(LL)-17
+ b(VM\))46 b([13])h(in)l(to)g(IA32)g(mac)l(hine)-303 6616
+ y(co)t(de.)87 b(In)59 b(recen)l(t)f(y)l(ears,)g(JIT)g(compilation)f
+ (has)g(pro)l(v)l(en)h(itself)e(to)-303 6790 y(b)t(e)49
+ b(an)f(e\013ectiv)l(e)g(w)l(a)l(y)g(to)f(impro)l(v)l(e)h(the)h(p)t
+ (erformance)h(of)e(b)l(yteco)t(de)-303 6964 y(in)l(terpreters)58
+ b(for)g(a)g(v)-9 b(ariet)l(y)58 b(of)g(languages.)88
+ b(JIT)59 b(compilers)f(ha)l(v)l(e)-303 7139 y(b)t(een)51
+ b(built)e(for)g(man)l(y)h(systems,)e(supp)t(orting)i(a)g(v)-9
+ b(ariet)l(y)49 b(of)g(source)-303 7313 y(languages,)61
+ b(including)f(P)l(erl)f(6,)i(Ja)l(v)-9 b(a,)61 b(and)f(the)g(Microsoft)
+ f(Com-)-303 7487 y(mon)51 b(Language)g(Run)l(time)h([12,)e(17,)g(18].)
+ -154 7662 y(Jello)60 b(is)g(designed)h(as)e(a)i Fk(r)-8
+ b(etar)g(getable)59 b Fl(JIT)h(compiler,)j(only)d(re-)-303
+ 7836 y(quiring)e(implemen)l(tation)h(of)f(an)i(instruction)e(selector,)
+ i(mac)l(hine)-303 8010 y(co)t(de)69 b(emitter,)j(and)d(target)f(mac)l
+ (hine)h(description)f(to)g(add)h(sup-)-303 8185 y(p)t(ort)49
+ b(for)h(a)f(new)h(target.)67 b(The)50 b(in\015uence)i(of)d(this)g
+ (feature)h(globally)-303 8359 y(a\013ects)i(the)h(en)l(tire)g(co)t(de)h
+ (generator,)f(implying)f(that)h(supp)t(ort)g(for)-303
+ 8533 y(retargetting)k(m)l(ust)g(b)t(e)h(designed)g(in)g(from)f(the)h
+ (start.)87 b(Although)-303 8708 y(Jello)71 b(curren)l(tly)i(only)g
+ (targets)e(the)i(IA32)f(target,)77 b(w)l(e)72 b(feel)h(that)-303
+ 8882 y(b)t(eing)54 b(able)f(to)g(supp)t(ort)h(the)g(IA32)g(arc)l
+ (hitecture,)g(without)f(hac)l(ks)-303 9057 y(in)e(target-indep)t(enden)
+ l(t)i(co)t(de,)f(indicates)f(that)g(the)h(separation)e(is)4080
+ 2403 y(clean)45 b(b)t(et)l(w)l(een)f(target-dep)t(enden)l(t)i(and)f
+ (-indep)t(enden)l(t)h(co)t(de)f(\(the)4080 2578 y(IA32)52
+ b(arc)l(hitecture)f(is)g(kno)l(wn)g(for)g(its)f(\\quirks"\).)4230
+ 2752 y(This)71 b(pap)t(er)i(describ)t(es)g(the)f(design)g(and)g
+ (implemen)l(tation)g(of)4080 2926 y(Jello,)78 b(but)c(more)g(imp)t
+ (ortan)l(tly)-13 b(,)78 b(it)73 b(describ)t(es)h(design)g(decisions)
+ 4080 3101 y(whic)l(h)50 b(m)l(ust)f(b)t(e)h(made)g(for)g(an)f
+ (e\016cien)l(t)h(Just-In-Time)g(compiler.)4080 3275 y(The)64
+ b(design)f(of)h(Jello)e(is)h(in)l(trinsically)e(tied)j(to)f(the)g
+ (retargetable)4080 3449 y(nature)40 b(of)e(the)h(co)t(de)h(generation)f
+ (phases.)64 b(Being)38 b(able)h(to)g(generate)4080 3624
+ y(co)t(de)77 b(for)e(m)l(ultiple)g(pro)t(cessors,)80
+ b(in)c(an)f(e\016cien)l(t)h(manner,)82 b(is)74 b(a)4080
+ 3798 y(di\016cult)58 b(problem.)89 b(W)-13 b(e)58 b(also)f(describ)t(e)
+ i(ho)l(w)f(constrain)l(ts)f(on)h(the)4080 3972 y(implemen)l(tation)67
+ b(aided)h(or)f(hindered)j(the)d(dev)l(elopmen)l(t)i(of)e(the)4080
+ 4147 y(co)t(de)52 b(generator.)4080 4612 y Fm(1.1)199
+ b(Important)49 b(Pr)l(operties)i(of)f(LL)-18 b(VM)49
+ b(Bytecode)4230 4827 y Fl(LL)-17 b(VM)52 b(is)f(a)h(compiler)g
+ (infrastructure)h(whic)l(h)f(uses)g(a)g(lo)l(w-lev)l(el)4080
+ 5002 y(represen)l(tation)74 b(to)f(represen)l(t)i(programs)e(written)g
+ (in)h(arbitrary)4080 5176 y(source)f(languages)f(\(w)l(e)h(ha)l(v)l(e)f
+ (implemen)l(ted)i(a)e(C)g(fron)l(t-end)i(so)4080 5350
+ y(far\).)62 b(The)36 b(LL)-17 b(VM)34 b(infrastructure)i(uses)e(the)i
+ (LL)-17 b(VM)34 b(b)l(yteco)t(de)i(rep-)4080 5525 y(resen)l(tation)k
+ (to)g(supp)t(ort)g(aggressiv)l(e)g(traditional)e(and)j(in)l(terpro)t
+ (ce-)4080 5699 y(dural)f(optimizations)d(b)t(efore)j(nativ)l(e)f(co)t
+ (de)i(generation.)64 b(This)38 b(rep-)4080 5873 y(resen)l(tation)55
+ b(mak)l(es)g(use)h(of)g(a)f(lo)l(w-lev)l(el,)h(strongly-t)l(yp)t(ed,)g
+ (three-)4080 6048 y(address,)f(load-store)f(co)t(de)i(represen)l
+ (tation)e(in)h(Static)f(Single)g(As-)4080 6222 y(signmen)l(t)j([4])g
+ (form,)h(whic)l(h)g(is)e(the)i(input)g(to)f(the)h(Jello)e(run)l(time.)
+ 4080 6397 y(Also,)75 b(programs)70 b(compiled)h(to)f(LL)-17
+ b(VM)71 b(b)l(yteco)t(de)h(are)f(p)t(ortable)4080 6571
+ y(across)50 b(di\013eren)l(t)i(arc)l(hitectures)f(if)g(they)h(are)f(t)l
+ (yp)t(e-safe.)4230 6745 y(LL)-17 b(VM)45 b(has)g(sev)l(eral)g(features)
+ g(whic)l(h)h(mak)l(e)f(it)g(a)g Fj(signi\014can)-5 b(tly)4080
+ 6920 y(di\013eren)g(t)89 b(input)78 b Fl(for)e(a)h(JIT)g(compiler)g
+ (than)g(other)g(common)4080 7094 y(b)l(yteco)t(de)65
+ b(represen)l(tations)f(\(suc)l(h)g(as)f(the)i(JVM)e(or)h(.NET)g(plat-)
+ 4080 7268 y(forms)75 b([17,)80 b(18]\).)140 b(In)76 b(particular,)81
+ b(since)75 b(LL)-17 b(VM)75 b(is)g(already)g(in)4080
+ 7443 y(SSA)g(form,)k(Jello)74 b(do)t(es)g(not)g(need)h(to)f(construct)g
+ (SSA)h(at)e(run-)4080 7617 y(time)58 b(for)g(SSA-based)h(optimizations)
+ d(\(SSA)j(construction)e(is)h(ex-)4080 7791 y(p)t(ensiv)l(e,)78
+ b(but)73 b(allo)l(ws)e(for)h(p)t(o)l(w)l(erful)h(optimizations\).)130
+ b(Another)4080 7966 y(imp)t(ortan)l(t)75 b(asp)t(ect)g(of)g(LL)-17
+ b(VM)75 b(is)f(that)g(it)h(do)t(es)g(not)g(guaran)l(tee)4080
+ 8140 y(execution)46 b(safet)l(y)f(of)g(the)h(program)f(lik)l(e)f(Ja)l
+ (v)-9 b(a)46 b(and)f(.NET)g(do.)66 b(Be-)4080 8314 y(cause)54
+ b(LL)-17 b(VM)53 b(do)t(es)g(not)g(ha)l(v)l(e)g(implicit)f(b)t(ounds)i
+ (c)l(hec)l(ks)g(in)f(arra)l(y)4080 8489 y(accesses,)66
+ b(for)e(example,)j(the)d(static)e(compiler)i(can)g(p)t(erform)g(ag-)
+ 4080 8663 y(gressiv)l(e)59 b(optimizations)f(at)h(compile-time,)i(whic)
+ l(h)e(mak)l(es)g(man)l(y)4080 8837 y(optimizations)50
+ b(at)g(run)l(time)i(unnecessary)-13 b(.)4230 9012 y(Finally)g(,)58
+ b(LL)-17 b(VM)57 b(supp)t(orts)g(source)h(languages)f(\(lik)l(e)f(C\))h
+ (where)4080 9186 y(it)48 b(is)g(p)t(ossible)f(to)h(write)g(non-t)l(yp)t
+ (e-safe)i(programs.)66 b(In)49 b(these)g(pro-)4080 9360
+ y(grams,)69 b(some)e(asp)t(ects)f(of)g(the)h(target)f(mac)l(hine)h
+ (\(endianness)g(&)4080 9535 y(p)t(oin)l(ter)52 b(size\))e(can)i
+ (a\013ect)f(the)g(b)l(yteco)t(de)i(represen)l(tation)e([14].)4230
+ 9709 y(Prior)39 b(to)i(Jello,)g(the)g(LL)-17 b(VM)41
+ b(compiler)g(infrastructure)g(pro)l(vided)4080 9883 y(a)c(Sparc)h(V9)g
+ (static)e(co)t(de)i(generator,)i(a)d(C)g(bac)l(k-end,)k(and)d(a)f
+ (simple)4080 10058 y(in)l(terpreter)k(named)g(LLI.)g(With)f(the)h
+ (addition)f(of)g(the)h(Jello)e(exten-)4080 10232 y(sion)d(to)g(LLI,)h
+ (LL)-17 b(VM)36 b(no)l(w)g(has)g(an)h(e\016cien)l(t)g(platform)f(for)g
+ (dynamic)4080 10406 y(b)l(yteco)t(de)52 b(execution)g(on)f(the)h(IA32)f
+ (platform,)f(and)i(a)f(framew)l(ork)4080 10581 y(for)g(adding)h(new)f
+ (arc)l(hitecture)h(supp)t(ort)g(in)f(the)h(future.)p
+ eop end
+ %%Page: 2 2
+ TeXDict begin 2 1 bop -303 -137 a Fm(1.2)198 b(The)50
+ b(J)m(ello)g(V)-7 b(irtual)51 b(Machine)f(Ar)l(chitectur)l(e)-154
+ 79 y Fl(The)j(Jello)g(Virtual)f(Mac)l(hine)h(is)f(designed)h(to)g(mak)l
+ (e)f(it)h(easy)f(to)-303 253 y(add)60 b(new)g(targets)f(and)i(to)e(b)t
+ (e)i(\015exible)g(enough)f(to)g(supp)t(ort)g(new)-303
+ 427 y(researc)l(h)69 b(in)g(virtual)f(mac)l(hine)h(tec)l(hnology)-13
+ b(.)121 b(T)-13 b(o)68 b(supp)t(ort)h(these)-303 602
+ y(goals,)d(the)e(Jello)g(arc)l(hitecture)h(separates)f(the)h(co)t(de)h
+ (generation)-303 776 y(pro)t(cess)48 b(in)l(to)f(a)h(series)g(of)g(mo)t
+ (dular)g(stages,)f(simplifying)g(addition)-303 950 y(of)k(new)g(passes)
+ g(and)g(replacemen)l(t)h(of)f(existing)g(ones.)-154 1125
+ y(T)-13 b(o)39 b(mak)l(e)g(it)f(easy)h(to)f(retarget)h(Jello,)h(w)l(e)f
+ (designed)h(the)f(mac)l(hine)-303 1299 y(co)t(de)45 b(represen)l
+ (tation)g(to)f(b)t(e)i(target-agnostic,)e(using)g(a)h(target)f(de-)-303
+ 1473 y(scription)51 b(in)l(terface)h(to)g(get)f(concrete)i(information)
+ e(from)h(the)g(ab-)-303 1648 y(stract)37 b(mac)l(hine)i(co)t(de)g
+ (represen)l(tation.)64 b(This)38 b(design)g(cleanly)g(par-)-303
+ 1822 y(titions)43 b(phases)i(of)g(compilation)f(in)l(to)h(target-sp)t
+ (eci\014c)g(and)h(target-)-303 1996 y(indep)t(enden)l(t)53
+ b(phases.)68 b(The)51 b(o)l(v)l(erall)f(structure)h(of)g(the)g(Jello)g
+ (co)t(de)-303 2171 y(generator)g(is)g(diagrammed)g(in)g(Figure)h(1.)
+ -214 2493 y Fk(LL)-16 b(VM)77 b Fo(!)26 b Fj(Inst)58
+ b(Sel)77 b Fo(!)25 b Fl(SSA)52 b(Opts)77 b Fo(!)26 b
+ Fl(Liv)l(eV)-13 b(ar)51 b(Analysis)75 b Fo(\000)-25 b(!)130
+ 2667 y(\000)g(!)25 b Fl(Reg)51 b(Allo)t(c)77 b Fo(!)25
+ b Fj(FP)77 b Fo(!)25 b Fl(Prologue/Epilogue)75 b Fo(\000)-25
+ b(!)94 2841 y(\000)g(!)25 b Fj(P)-5 b(eephole)60 b(Opts)76
+ b Fo(!)25 b Fj(Co)5 b(de)60 b(emission)78 b Fo(!)25 b
+ Fk(IA32)349 3188 y Fl(Figure)51 b(1:)68 b(Jello)51 b(Co)t(de)g
+ (Generation)h(Phases)-154 3533 y(In)70 b(the)g(diagram,)j(the)d
+ (target-sp)t(eci\014c)g(phases)f(\(in)g(b)t(old\))h(are)-303
+ 3708 y(instruction)48 b(selection,)h(\015oating-p)t(oin)l(t)f(supp)t
+ (ort)i(\(to)e(supp)t(ort)h(the)-303 3882 y(IA32)59 b(\015oating-p)t
+ (oin)l(t)f(stac)l(k)h(arc)l(hitecture\),)i(p)t(eephole)f(optimiza-)-303
+ 4056 y(tions,)f(and)h(co)t(de)g(emission.)90 b(The)60
+ b(other)f(passes)f(in)h(the)h(pip)t(eline)-303 4231 y(are)44
+ b(mac)l(hine-indep)t(enden)l(t,)j(using)d(ho)t(oks)f(to)h(the)g(target)
+ f(descrip-)-303 4405 y(tions)51 b(to)g(extract)h(the)g(requisite)g
+ (information,)f(allo)l(wing)f(them)i(to)-303 4580 y(b)t(e)g(reused)g(b)
+ l(y)f(new)h(arc)l(hitectures)f(as)g(they)h(are)f(dev)l(elop)t(ed.)-303
+ 4881 y Fm(1.3)198 b(P)n(aper)50 b(Or)n(ganization)-154
+ 5097 y Fl(The)j(remainder)h(of)e(the)h(pap)t(er)h(describ)t(es)f(the)g
+ (design)g(and)g(im-)-303 5271 y(plemen)l(tation)67 b(of)g(Jello.)115
+ b(Section)68 b(2)f(starts)f(b)l(y)h(describing)h(ho)l(w)-303
+ 5445 y(the)81 b(abstract)f(mac)l(hine)i(co)t(de)g(for)f(a)g(function)g
+ (is)g(represen)l(ted.)-303 5620 y(In)57 b(order)g(to)f(implemen)l(t)g
+ (target-indep)t(enden)l(t)j(transformations,)-303 5794
+ y(target-agnostic)69 b(co)t(de)j(m)l(ust)e(b)t(e)i(parameterized)f
+ (based)g(on)g(the)-303 5968 y(target)65 b(it)f(is)h(w)l(orking)g(with.)
+ 110 b(Section)66 b(3)g(describ)t(es)g(these)g(in)l(ter-)-303
+ 6143 y(faces)46 b(and)i(Section)f(4)f(describ)t(es)i(the)f
+ (target-indep)t(enden)l(t)i(phases)-303 6317 y(of)35
+ b(co)t(de)h(generation.)63 b(Section)36 b(5)f(describ)t(es)i(target-sp)
+ t(eci\014c)f(phases)-303 6491 y(of)58 b(co)t(de)h(generation)g(that)f
+ (m)l(ust)g(b)t(e)i(implemen)l(ted)f(for)f(a)h(target,)-303
+ 6666 y(and)51 b(Section)h(6)f(describ)t(es)h(the)f(implemen)l(tation)g
+ (of)f(these)i(phases)-303 6840 y(for)f(the)g(IA32)h(in)f(particular.)
+ -154 7014 y(Section)i(7)f(describ)t(es)h(the)g(mec)l(hanism)f(used)h(b)
+ l(y)g(the)g(JIT)f(com-)-303 7189 y(piler)c(to)g(lazily)g(compile)h
+ (functions)f(of)h(the)g(program)f(on)h(demand.)-303 7363
+ y(Section)57 b(8)h(describ)t(es)g(high-lev)l(el)f(exp)t(eriences)i(and)
+ f(observ)-9 b(ations)-303 7537 y(w)l(e)53 b(ha)l(v)l(e)h(had.)76
+ b(Section)55 b(9)e(describ)t(es)i(related)f(w)l(ork)f(and)h(w)l(e)g
+ (con-)-303 7712 y(clude)e(with)f(Section)g(10.)-303 8098
+ y Fm(2.)198 b(MA)-11 b(CHINE)49 b(CODE)h(REPRESENT)-18
+ b(A)f(TION)-154 8314 y Fl(As)76 b(a)f(retargetable)h(virtual)f(mac)l
+ (hine,)81 b(Jello)76 b(m)l(ust)f(share)g(as)-303 8489
+ y(m)l(uc)l(h)46 b(co)t(de)h(b)t(et)l(w)l(een)g(as)e(man)l(y)h(targets)f
+ (as)h(p)t(ossible.)66 b(T)-13 b(o)46 b(do)g(this,)-303
+ 8663 y(phases)39 b(op)t(erate)h(on)g(abstract)f(mac)l(hine)h(co)t(de)g
+ (without)g(needing)g(to)-303 8837 y(kno)l(w)d(the)i(exact)f(seman)l
+ (tics)f(of)g(the)h(target)g(mac)l(hine)g(instructions.)-303
+ 9012 y(These)73 b(phases)g(op)t(erate)h(on)f(the)h(mac)l(hine)f(co)t
+ (de)h(b)l(y)f(insp)t(ecting)-303 9186 y(abstract)53 b(prop)t(erties)h
+ (of)f(the)h(co)t(de)h(\(suc)l(h)f(as)f(whic)l(h)h(registers)f(are)-303
+ 9360 y(read)c(and)g(written)f(to\),)g(allo)l(wing)f(them)i(to)f(b)t(e)h
+ (applicable)g(to)f(an)l(y)-303 9535 y(target)i(where)i(the)g(prop)t
+ (erties)g(apply)-13 b(.)-154 9709 y(In)69 b(particular,)j(mac)l(hine)d
+ (co)t(de)g(is)e(represen)l(ted)j(as)e(a)g(Con)l(trol)-303
+ 9883 y(Flo)l(w)c(Graph)h(for)f(eac)l(h)h(function,)k(with)64
+ b(a)h(list)e(of)i(abstract)f(ma-)-303 10058 y(c)l(hine)38
+ b(instructions)e(making)h(up)h(eac)l(h)f(basic)g(blo)t(c)l(k.)64
+ b(Abstract)37 b(ma-)-303 10232 y(c)l(hine)45 b(instructions)e(are)h
+ (represen)l(ted)i(b)l(y)e(a)g(unique)i(iden)l(ti\014er)e(and)-303
+ 10406 y(a)62 b(v)-9 b(ariable-length)64 b(list)d(of)h(op)t(erands.)104
+ b(Eac)l(h)62 b(op)t(erand)i(in)f(a)g(ma-)-303 10581 y(c)l(hine)58
+ b(instruction)f(holds)h(information)f(ab)t(out)h(the)g(t)l(yp)t(e)g(of)
+ g(data)-303 10755 y(held)d(\(immediate)g(constan)l(t,)g(register)g
+ (reference,)j(or)d(relo)t(catable)4080 -137 y(reference,)71
+ b(suc)l(h)66 b(as)g(branc)l(h)g(targets)f(of)h(function)g(names\).)112
+ b(F)-13 b(or)4080 37 y(register)57 b(references,)j(the)e(op)t(erand)g
+ (k)l(eeps)g(trac)l(k)f(of)g(whether)h(the)4080 211 y(instruction)51
+ b(writes)f(to)g(the)h(register,)f(reads)h(from)g(the)g(register)f(or)
+ 4080 386 y(do)t(es)i(b)t(oth.)4230 560 y(Note)80 b(that)h(the)g
+ (represen)l(tation)f(do)t(es)h(not)g(ha)l(v)l(e)g(an)l(y)f(infor-)4080
+ 734 y(mation)68 b(ab)t(out)h(what)g(the)g(instruction)g(itself)e(do)t
+ (es)j(or)e(ho)l(w)h(the)4080 909 y(op)t(erands)48 b(of)e(the)h
+ (instruction)f(are)h(pro)t(cessed)h(b)l(y)f(the)g(instruction)4080
+ 1083 y(\(this)64 b(is)g(abstracted)h(b)t(ehind)i(the)e(unique)h(iden)l
+ (ti\014er)g(for)f(the)g(in-)4080 1257 y(struction\).)i(This)50
+ b(v)l(ery)g(abstract)f(represen)l(tation)h(is)g(ligh)l(t)l(w)l(eigh)l
+ (t,)4080 1432 y(k)l(eeping)c(only)g(the)f(minim)l(um)h(required)g
+ (information,)g(but)f(is)g(able)4080 1606 y(to)51 b(represen)l(t)h(mac)
+ l(hine)g(instructions)e(for)h(arbitrary)g(targets.)4230
+ 1780 y(A)i(k)l(ey)h(decision)f(w)l(e)h(made)f(w)l(as)g(to)g(use)h(SSA)g
+ (form)f(in)g(the)h(ma-)4080 1955 y(c)l(hine)73 b(co)t(de.)133
+ b(Because)72 b(LL)-17 b(VM)72 b(is)g(already)g(in)h(SSA)g(form,)k(this)
+ 4080 2129 y(is)57 b(easy:)82 b(the)58 b(instruction)g(selection)g(pass)
+ f(con)l(v)l(erts)h(SSA)g(LL)-17 b(VM)4080 2304 y(co)t(de)50
+ b(to)f(SSA)h(mac)l(hine)g(co)t(de.)68 b(SSA)50 b(is)e(then)i(a)l(v)-9
+ b(ailable)49 b(for)g(target)4080 2478 y(indep)t(enden)l(t)82
+ b(transformations,)j(enabling)80 b(more)h(e\016cien)l(t)f(and)4080
+ 2652 y(p)t(o)l(w)l(erful)51 b(optimizations)f(on)h(mac)l(hine)h(co)t
+ (de.)4230 2827 y(Register)74 b(op)t(erands)i(to)f(instructions)f(ma)l
+ (y)g(b)t(e)i(ph)l(ysical)f(reg-)4080 3001 y(isters)e(or)i(SSA)g
+ (registers,)j(and)d(are)g(trac)l(k)l(ed)f(in)g(a)g(v)l(ery)h(simple)
+ 4080 3175 y(target-indep)t(enden)l(t)45 b(manner.)66
+ b(Eac)l(h)42 b(target)g(register)g(is)g(assigned)4080
+ 3350 y(a)57 b(unique)h(\(small\))d(iden)l(ti\014er,)j(and)f(all)f(ph)l
+ (ysical)h(and)g(SSA)h(regis-)4080 3524 y(ters)63 b(are)h(represen)l
+ (ted)h(as)e(unsigned)h(32-bit)f(n)l(um)l(b)t(ers.)105
+ b(Register)4080 3698 y(v)-9 b(alues)61 b(larger)f(than)g(the)h(\\maxim)
+ l(um)f(ph)l(ysical)g(register)g(b)t(ound-)4080 3873 y(ary")h(are)f
+ (used)h(to)g(represen)l(t)g(SSA)g(registers,)h(and)f(v)-9
+ b(alues)61 b(lo)l(w)l(er)4080 4047 y(than)67 b(the)g(b)t(oundary)h(are)
+ f(ph)l(ysical)f(registers.)113 b(A)67 b(lo)t(okup)f(table)4080
+ 4221 y(is)51 b(built,)f(con)l(taining)h(an)h(en)l(try)f(for)g(eac)l(h)h
+ (register)f(indicating)g(the)4080 4396 y(register)e(class)g(and)h(the)g
+ (instruction)f(whic)l(h)h(de\014nes)h(an)e(SSA)i(reg-)4080
+ 4570 y(ister)g(\(pro)l(viding)f(use-def)j(c)l(hains\).)4230
+ 4744 y(Though)60 b(a)g(ma)9 b(jorit)l(y)58 b(of)i(the)g(mac)l(hine)h
+ (co)t(de)g(is)e(in)h(SSA)h(form,)4080 4919 y(some)50
+ b(references)h(to)e(ph)l(ysical)g(registers)g(m)l(ust)g(alw)l(a)l(ys)f
+ (exist.)67 b(F)-13 b(or)4080 5093 y(example,)66 b(Figure)e(2)f(sho)l
+ (ws)f(a)h(case)g(where)h(IA32)f(mac)l(hine)g(co)t(de)4080
+ 5267 y(m)l(ust)55 b(use)g(a)g(mix)g(of)g(SSA)h(virtual)f(registers)f
+ (and)i(ph)l(ysical)f(regis-)4080 5442 y(ters.)4229 5762
+ y Fi(m)-10 b(o)g(v)37 b Fh(\045)15 b(r)e(e)g(g)g(1)g(0)g(2)g(4)46
+ b(,)87 b(1)22 b(0)g(0)185 b Fg(;)115 b(D)17 b(e)g(f)g(i)g(n)g(i)g(t)g
+ (i)g(o)g(n)112 b(o)15 b(f)91 b(S)l(S)l(A)d(r)13 b(e)g(g)4229
+ 5895 y Fi(m)-10 b(o)g(v)59 b Fh(E)-10 b(D)g(X)j(,)68
+ b(\045)26 b(r)14 b(e)g(g)g(1)g(0)g(2)g(4)193 b Fg(;)111
+ b(S)13 b(e)g(t)107 b(t)15 b(h)g(e)107 b(s)13 b(o)g(u)g(r)g(c)g(e)110
+ b(o)15 b(f)109 b(t)15 b(h)g(e)110 b(d)16 b(i)g(v)4229
+ 6028 y Fi(m)-10 b(o)g(v)59 b Fh(E)-9 b(A)g(X)i(,)68 b(\045)26
+ b(r)14 b(e)g(g)g(1)g(0)g(2)g(5)193 b Fg(;)111 b(S)13
+ b(e)g(t)107 b(t)15 b(h)g(e)107 b(s)13 b(o)g(u)g(r)g(c)g(e)110
+ b(o)15 b(f)109 b(t)15 b(h)g(e)110 b(d)16 b(i)g(v)4247
+ 6161 y Fi(d)8 b(i)g(v)58 b Fh(\045)16 b(r)e(e)g(g)g(1)g(0)g(2)g(6)591
+ b Fg(;)87 b(E)-11 b(A)g(X)l(,)s(E)d(D)g(X)53 b(=)j(E)-11
+ b(D)g(X)-5 b(,)t(E)-14 b(A)g(X)-21 b(/)-7 b(\045)s(r)11
+ b(e)g(g)g(1)g(0)g(2)g(4)4229 6294 y Fi(m)-10 b(o)g(v)37
+ b Fh(\045)15 b(r)e(e)g(g)g(1)g(0)g(2)g(7)50 b(,)83 b(E)-12
+ b(A)g(X)166 b Fg(;)98 b(Move)j(r)20 b(e)h(s)g(u)f(l)g(t)116
+ b(i)16 b(n)g(t)g(o)93 b(S)l(S)l(A)88 b(r)13 b(e)g(g)4438
+ 6568 y Fl(Figure)52 b(2:)68 b(Example)50 b(of)h(mac)l(hine)h(co)t(de)g
+ (in)f(SSA)h(form)4230 6920 y(In)43 b(this)f(example,)i(the)f(IA32)g(')p
+ Fn(div)p Fl(')g(instruction)f(divides)h(the)f(64-)4080
+ 7094 y(bit)g(v)-9 b(alue)42 b Fn(<EDX,EAX>)k Fl(b)l(y)c(a)g(register)g
+ (op)t(erand.)66 b(The)42 b Fn(EAX)i Fl(and)e Fn(EDX)4080
+ 7268 y Fl(registers)47 b(are)g(\014xed)i(b)l(y)f(the)f(instruction)g
+ (set)g(as)g(op)t(erands)i(for)e(the)4080 7443 y(')p Fn(div)p
+ Fl(')59 b(instruction.)90 b(In)59 b(order)g(to)g(represen)l(t)g(this,)g
+ (the)g(generated)4080 7617 y(mac)l(hine)43 b(co)t(de)h(con)l(tains)e(a)
+ h(n)l(um)l(b)t(er)h(of)e(\\cop)l(y")h(instructions)f(con-)4080
+ 7791 y(v)l(erting)54 b(SSA)g(registers)f(to)h(the)g(appropriate)g
+ (\014xed)h(ph)l(ysical)e(reg-)4080 7966 y(isters.)76
+ b(This)53 b(allo)l(ws)f(the)j(mac)l(hine)f(co)t(de)h(to)f(explicitly)f
+ (represen)l(t)4080 8140 y(\014xed)f(register)f(assignmen)l(ts)f
+ (without)h(external)g(annotations.)4230 8314 y(Ph)l(ysical)61
+ b(registers)h(that)g(are)h(used)g(in)f(this)g(manner)i(are)e(only)4080
+ 8489 y(allo)l(w)l(ed)37 b(to)h(b)t(e)g(liv)l(e)g(for)f(the)i(duration)f
+ (of)f(the)i(basic)e(blo)t(c)l(k)h(in)g(whic)l(h)4080
+ 8663 y(they)59 b(are)g(con)l(tained.)91 b(This)58 b(allo)l(ws)f(a)h
+ (single)g(linear)g(scan)h(o)l(v)l(er)f(a)4080 8837 y(basic)f(blo)t(c)l
+ (k)g(to)f(e\016cien)l(tly)h(\014nd)h(def/use)f(c)l(hains)g(and)g(reuse)
+ h(reg-)4080 9012 y(isters.)66 b(An)49 b(imp)t(ortan)l(t)e(p)t(oin)l(t)i
+ (to)e(notice)i(ab)t(out)f(ph)l(ysical)g(register)4080
+ 9186 y(references)57 b(is)e(that)g(they)h(are)g(fairly)e(rare)i(in)g
+ (mainline)f(computa-)4080 9360 y(tion.)89 b(Ev)l(en)59
+ b(in)f(the)h(IA32)g(instruction)e(set,)j(only)e(a)g(few)h(instruc-)4080
+ 9535 y(tions)c(need)i(to)e(use)g(preallo)t(cated)h(registers)f(lik)l(e)
+ g(this;)h(almost)e(all)4080 9709 y(are)i(pure)h(SSA)g(form.)81
+ b(When)57 b(the)f(register)f(allo)t(cator)g(runs,)h(SSA)4080
+ 9883 y(register)70 b(references)i(are)f(transformed)f(in)l(to)g(ph)l
+ (ysical)f(registers,)4080 10058 y(and)52 b(the)f(ph)l(ysical)g
+ (register)g(lifetime)f(restriction)h(is)f(lifted.)4230
+ 10232 y(One)64 b(of)f(the)h(most)f(imp)t(ortan)l(t)g(asp)t(ects)g(of)g
+ (this)g(design)g(is)g(the)4080 10406 y(fact)72 b(that)g(target)g
+ (registers)g(and)h(target)e(mac)l(hine)i(instructions)4080
+ 10581 y(are)e(represen)l(ted)h(with)f(unique)g(ID)h(n)l(um)l(b)t(ers)f
+ (that)g(are)g(opaque)4080 10755 y(to)48 b(the)g(target-indep)t(enden)l
+ (t)i(co)t(de.)68 b(In)49 b(order)g(to)e(get)h(information)p
+ eop end
+ %%Page: 3 3
+ TeXDict begin 3 2 bop -303 -137 a Fl(ab)t(out)38 b(the)h(seman)l(tics)e
+ (of)i(the)f(instructions)g(or)g(information)f(ab)t(out)-303
+ 37 y(the)43 b(registers,)g(the)h(T)-13 b(arget)43 b(Description)g(in)l
+ (terfaces)f(\(describ)t(ed)j(in)-303 211 y(Section)51
+ b(3\))g(m)l(ust)g(b)t(e)h(used.)p -303 323 3986 9 v -6
+ 556 a Fi(v)7 b(o)g(i)g(d)110 b Fh(t)20 b(e)h(s)f(t)41
+ b(\()20 b(\))85 b Ff(f)159 688 y Fi(i)13 b(n)g(t)85 b
+ Fh(X)16 b(;)420 b Fg(/)7 b Ff(\003)91 b Fg(4)101 b(b)17
+ b(y)g(t)g(e)g(s)101 b(o)t(n)e(s)16 b(t)g(a)g(c)g(k)105
+ b Ff(\003)7 b Fg(/)177 821 y Fh(.)31 b(.)g(.)162 954
+ y(f)16 b(o)g(o)i(\()r(&)-8 b(X)17 b(\))26 b(;)262 b Fg(/)7
+ b Ff(\003)91 b Fg(4)101 b(b)17 b(y)g(t)g(e)g(s)111 b(t)14
+ b(o)107 b(p)13 b(a)g(s)g(s)101 b(a)8 b(r)g(g)g(u)g(m)g(e)g(n)g(t)96
+ b Ff(\003)7 b Fg(/)177 1087 y Fh(.)31 b(.)g(.)157 1220
+ y(b)12 b(a)g(r)35 b(\()23 b(2)48 b(,)91 b(3)23 b(\))h(;)98
+ b Fg(/)7 b Ff(\003)91 b Fg(8)101 b(b)17 b(y)g(t)g(e)g(s)111
+ b(t)14 b(o)107 b(p)13 b(a)g(s)g(s)103 b(a)10 b(r)g(g)g(u)g(m)g(e)g(n)g
+ (t)g(s)93 b Ff(\003)7 b Fg(/)177 1353 y Fh(.)31 b(.)g(.)-8
+ 1485 y Ff(g)1014 1654 y Fl(\(a\))50 b(Example)h(C)g(co)t(de)86
+ 2007 y Fh(t)21 b(e)f(s)g(t)42 b(:)228 2140 y Fi(s)s(u)s(b)80
+ b Fh(E)m(S)m(P)21 b(,)94 b(4)272 b Fg(;)108 b(R)11 b(e)g(s)g(e)g(r)g(v)
+ g(e)110 b(s)16 b(t)g(a)g(c)g(k)110 b(s)12 b(p)g(a)g(c)g(e)112
+ b(f)17 b(o)g(r)85 b(X)256 2273 y Fh(.)31 b(.)g(.)228
+ 2405 y Fi(s)s(u)s(b)80 b Fh(E)m(S)m(P)21 b(,)94 b(4)272
+ b Fg(;)108 b(R)11 b(e)g(s)g(e)g(r)g(v)g(e)102 b(a)8 b(r)g(g)g(u)g(m)g
+ (e)g(n)g(t)101 b(s)12 b(p)g(a)g(c)g(e)244 2538 y Fh(l)19
+ b(e)g(a)88 b(E)-9 b(A)g(X)6 b(,)73 b(D)-22 b(W)g(O)g(R)g(D)45
+ b(P)-11 b(T)g(R)86 b([)22 b(E)m(S)m(P)80 b(+)k(4)20 b(])181
+ b Fg(;)84 b(E)-14 b(A)g(X)39 b(=)54 b(&)-8 b(A)215 2671
+ y Fi(m)e(o)g(v)46 b Fh(D)-22 b(W)g(O)g(R)g(D)45 b(P)-11
+ b(T)g(R)86 b([)22 b(E)m(S)m(P)e(])47 b(,)80 b(E)-12 b(A)g(X)243
+ 2804 y Fi(c)19 b(a)g(l)g(l)71 b Fe(<)15 b Fh(f)e(o)g(o)h
+ Fe(>)224 2937 y Fi(add)77 b Fh(E)m(S)m(P)18 b(,)89 b(4)256
+ 3070 y(.)31 b(.)g(.)228 3202 y Fi(s)s(u)s(b)80 b Fh(E)m(S)m(P)21
+ b(,)94 b(8)272 b Fg(;)108 b(R)11 b(e)g(s)g(e)g(r)g(v)g(e)102
+ b(a)8 b(r)g(g)g(u)g(m)g(e)g(n)g(t)101 b(s)12 b(p)g(a)g(c)g(e)215
+ 3335 y Fi(m)-10 b(o)g(v)46 b Fh(D)-22 b(W)g(O)g(R)g(D)45
+ b(P)-11 b(T)g(R)86 b([)22 b(E)m(S)m(P)c(])44 b(,)88 b(2)215
+ 3468 y Fi(m)-10 b(o)g(v)46 b Fh(D)-22 b(W)g(O)g(R)g(D)45
+ b(P)-11 b(T)g(R)86 b([)22 b(E)m(S)m(P)80 b(+)j(4)19 b(])38
+ b(,)83 b(3)243 3601 y Fi(c)19 b(a)g(l)g(l)71 b Fe(<)12
+ b Fh(b)d(a)g(r)e Fe(>)224 3734 y Fi(add)77 b Fh(E)m(S)m(P)18
+ b(,)89 b(8)256 3867 y(.)31 b(.)g(.)224 3999 y Fi(add)77
+ b Fh(E)m(S)m(P)21 b(,)94 b(4)272 b Fg(;)110 b(R)12 b(e)g(s)g(t)g(o)g(r)
+ g(e)108 b(s)12 b(p)g(a)g(c)g(e)101 b(f)7 b(r)g(o)g(m)77
+ b(X)237 4132 y Fi(r)12 b(e)g(t)656 4301 y Fl(\(b\))50
+ b(T)-13 b(raditional)51 b(IA32)g(Assem)l(bly)504 4542
+ y(Figure)g(3:)68 b(Co)t(de)52 b(generation)f(example)p
+ -303 4625 V -303 4969 a Fm(2.1)198 b(P)l(er)-7 b(\255Function)50
+ b(Constant)f(P)l(ool)-154 5185 y Fl(Most)j(targets)h(do)g(not)g(allo)l
+ (w)f(initializing)f(registers)i(with)g(arbi-)-303 5359
+ y(trary)37 b(constan)l(ts)g(in)h(a)g(single)g(instruction:)60
+ b(man)l(y)38 b(limit)f(the)h(v)-9 b(alues)-303 5533 y(and)47
+ b(size)g(of)g(constan)l(ts)e(that)i(ma)l(y)g(b)t(e)g(used.)67
+ b(In)48 b(order)g(to)e(supp)t(ort)-303 5708 y(these)39
+ b(targets,)h(the)g(p)t(er-function)g(constan)l(t)f(p)t(o)t(ol)g(trac)l
+ (ks)f(constan)l(t)-303 5882 y(v)-9 b(alues)54 b(to)g(b)t(e)h(spilled)f
+ (to)g(memory)-13 b(,)56 b(allo)l(wing)c(these)j(constan)l(ts)e(to)-303
+ 6056 y(b)t(e)62 b(referenced)i(with)e(load)f(instructions.)99
+ b(F)-13 b(or)62 b(the)g(IA32)g(target,)-303 6231 y(this)50
+ b(is)h(required)h(for)f(\015oating)g(p)t(oin)l(t)g(constan)l(ts.)-154
+ 6405 y(In)36 b(the)f(mac)l(hine)g(co)t(de)h(represen)l(tation,)i(en)l
+ (tries)c(in)h(the)g(constan)l(t)-303 6579 y(p)t(o)t(ol)j(are)g
+ (represen)l(ted)i(as)d(sym)l(b)t(olic)h(o\013sets)f(in)h(the)g(constan)
+ l(t)g(p)t(o)t(ol,)-303 6754 y(allo)l(wing)55 b(instructions)i(to)g
+ (reference)i(an)f(address)f(that)g(do)t(es)h(not)-303
+ 6928 y(y)l(et)48 b(exist.)66 b(A)l(t)49 b(the)g(mac)l(hine)g(co)t(de)g
+ (emission)f(stage,)f(the)i(constan)l(t)-303 7102 y(p)t(o)t(ol)44
+ b(is)g(committed)g(to)g(memory)h(and)g(these)g(sym)l(b)t(olic)e
+ (o\013sets)h(are)-303 7277 y(resolv)l(ed)51 b(to)f(the)i(appropriate)f
+ (ph)l(ysical)g(addresses.)-303 7575 y Fm(2.2)198 b(Stack)50
+ b(Space)g(Repr)l(esentation)-154 7791 y Fl(With)63 b(a)g(traditional)f
+ (approac)l(h)i(to)f(co)t(de)i(generation,)h(a)d(com-)-303
+ 7966 y(piler)50 b(assigns)f(stac)l(k)h(slots)f(to)h(sequen)l(tial)h(ph)
+ l(ysical)f(o\013sets)f(on)i(de-)-303 8140 y(mand,)59
+ b(generating)g(concrete)g(mac)l(hine)f(co)t(de)h(immediately)-13
+ b(.)88 b(F)-13 b(or)-303 8314 y(example,)84 b(Figure)77
+ b(3\(a\))g(sho)l(ws)f(an)h(example)h(C)f(function,)84
+ b(and)-303 8489 y(Figure)75 b(3\(b\))f(sho)l(ws)f(the)i(co)t(de)g
+ (generated)h(b)l(y)e(this)g(traditional)-303 8663 y(approac)l(h.)83
+ b(The)56 b(standard)g(IA32)h(calling)e(con)l(v)l(en)l(tions)g(cause)i
+ (all)-303 8837 y(argumen)l(t)42 b(v)-9 b(alues)43 b(are)f(passed)g(on)h
+ (the)f(stac)l(k,)h(requiring)g(stac)l(k)e(ad-)-303 9012
+ y(justmen)l(ts)53 b(for)h(argumen)l(ts)f(to)h(called)g(functions.)76
+ b(V)-13 b(ariable)54 b(sized)-303 9186 y(stac)l(k)37
+ b(ob)9 b(jects)37 b(\(allo)t(cated)g(with)h(the)g(`)p
+ Fn(alloca)p Fl(')i(function\))e(generate)-303 9360 y(co)t(de)52
+ b(to)f(mo)t(dify)g(the)g(stac)l(k)g(p)t(oin)l(ter)g(as)g(the)g
+ (function)h(executes.)-154 9535 y(In)57 b(con)l(trast,)g(Jello)e
+ (builds)h(a)h(list)e(of)h(abstract)f(stac)l(k)h(lo)t(cations)-303
+ 9709 y(used)61 b(b)l(y)g(the)g(function.)96 b(F)-13 b(or)61
+ b(eac)l(h)h(stac)l(k)d(ob)9 b(ject)61 b(allo)t(cated,)h(the)-303
+ 9883 y(stac)l(k)38 b(frame)i(manager)f(k)l(eeps)h(trac)l(k)f(of)g
+ (alignmen)l(t)g(and)h(size)f(infor-)-303 10058 y(mation)g(for)h(the)h
+ (ob)9 b(ject,)42 b(assigning)d(it)h(a)g(sym)l(b)t(olic)f(iden)l
+ (ti\014er.)65 b(The)-303 10232 y(stac)l(k)46 b(frame)g(manager)h(do)t
+ (es)g(not)g(assign)e(a)i(ph)l(ysical)f(frame)h(o\013set)-303
+ 10406 y(un)l(til)40 b(the)h(prologue/epilogue)g(generations)g(phase)g
+ (executes.)66 b(Op-)-303 10581 y(erations)51 b(that)g(temp)t(orarily)g
+ (allo)t(cate)g(stac)l(k)g(space,)g(suc)l(h)h(as)f(call-)-303
+ 10755 y(ing)c(a)g(function,)h(add)f(instances)g(of)g(the)h(`)p
+ Fn(adjcallstack)p Fl(')k(pseudo-)4080 -137 y(instruction)58
+ b(in)l(to)f(the)h(co)t(de)h(stream)f(to)f(represen)l(t)i(this)e
+ (informa-)4080 37 y(tion)51 b(\(see)g(Figure)h(5\(a\)\).)4230
+ 211 y(Using)f(this)f(abstract)h(represen)l(tation)h(of)f(stac)l(k)f(ob)
+ 9 b(jects)51 b(allo)l(ws)4080 386 y(Jello)36 b(to)h(b)t(e)g
+ (simpli\014ed)g(in)g(a)f(n)l(um)l(b)t(er)i(of)e(imp)t(ortan)l(t)h(w)l
+ (a)l(ys)e(and)i(also)4080 560 y(mak)l(es)66 b(it)g(more)h(p)t(o)l(w)l
+ (erful.)114 b(The)67 b(co)t(de)h(generator)f(is)e(simpli\014ed)4080
+ 734 y(b)l(y)d(ha)l(ving)f(a)g(single)f(target-indep)t(enden)l(t)k(in)l
+ (terface)d(to)g(allo)t(cate)4080 909 y(stac)l(k)k(ob)9
+ b(jects.)112 b(The)67 b(instruction)f(selector)f(can)i(use)f(the)g(mec)
+ l(h-)4080 1083 y(anism)d(to)g(pro)l(vide)h(the)g(address)f(of)g(stac)l
+ (k)g(allo)t(cated)g(automatic)4080 1257 y(v)-9 b(ariables,)51
+ b(the)g(register)g(allo)t(cator)e(uses)i(the)h(mec)l(hanism)f(to)f
+ (allo-)4080 1432 y(cate)56 b(spill)e(slots,)h(and)h(the)g
+ (prologue/epilogue)g(inserter)f(uses)h(the)4080 1606
+ y(mec)l(hanism)65 b(to)f(allo)t(cate)g(spill)g(slots)f(for)i(callee-sa)
+ l(v)l(ed)f(registers.)4080 1780 y(This)h(represen)l(tation)g(also)f
+ (allo)l(ws)f(for)i(the)h(traditional)d(\\frame-)4080
+ 1955 y(p)t(oin)l(ter)49 b(elimination")e(optimization)g(to)h(b)t(e)h
+ (con)l(v)l(enien)l(tly)f(imple-)4080 2129 y(men)l(ted)69
+ b(\(describ)t(ed)g(in)g(Section)f(6.3\).)118 b(Finally)-13
+ b(,)72 b(b)t(ecause)d(stac)l(k)4080 2304 y(ob)9 b(jects)50
+ b(can)h(b)t(e)g(reordered)i(without)d(ha)l(ving)g(to)g(mo)t(dify)g(the)
+ h(ma-)4080 2478 y(c)l(hine)69 b(co)t(de)h(represen)l(tation,)i(the)d
+ (stac)l(k)f(ma)l(y)g(b)t(e)h(optimized)g(to)4080 2652
+ y(increase)54 b(lo)t(calit)l(y)f(and)h(stac)l(k)e(ob)9
+ b(jects)54 b(can)g(b)t(e)g(pac)l(k)l(ed)g(to)g(reduce)4080
+ 2827 y(space)e(w)l(asted)e(due)i(to)f(alignmen)l(t.)4230
+ 3001 y(The)40 b(prologue/epilogue)g(phase)g(of)f(co)t(de)i(generation)e
+ (is)g(resp)t(on-)4080 3175 y(sible)k(for)h(con)l(v)l(erting)f(the)h
+ (abstract)f(frame)g(references)j(in)l(to)c(ph)l(ysi-)4080
+ 3350 y(cal)c(o\013sets.)62 b(First,)39 b(it)e(adds)h(spill)e(and)j
+ (restore)e(co)t(de)i(for)e(an)l(y)h(callee-)4080 3524
+ y(sa)l(v)l(ed)67 b(registers)f(mo)t(di\014ed)h(b)l(y)g(the)h(function.)
+ 115 b(Next,)71 b(it)66 b(assigns)4080 3698 y(ph)l(ysical)51
+ b(stac)l(k)f(o\013sets)f(to)i(all)f(stac)l(k)g(ob)9 b(jects)51
+ b(in)g(the)g(stac)l(k)f(frame)4080 3873 y(manager.)125
+ b(Third,)74 b(it)c(scans)f(the)i(function,)j(rewriting)c(an)l(y)g(ab-)
+ 4080 4047 y(stract)44 b(frame)i(references)g(with)f(ph)l(ysical)g
+ (frame)g(references.)67 b(Dur-)4080 4221 y(ing)62 b(this)g(pass,)i(it)d
+ (tak)l(es)h(note)g(of)g(the)h(maxim)l(um)f(v)-9 b(alues)62
+ b(passed)4080 4396 y(to)46 b(a)g(`)p Fn(adjcallstack)p
+ Fl(')52 b(pseudo-instruction,)47 b(and)g(uses)f(the)h(target)4080
+ 4570 y(description)62 b(to)g(rewrite)g(the)g(abstract)f(instructions)g
+ (in)l(to)g(ph)l(ysi-)4080 4744 y(cal)44 b(instructions.)65
+ b(Finally)-13 b(,)45 b(it)f(uses)g(the)h(target)f(descriptor)h(to)f
+ (add)4080 4919 y(target-sp)t(eci\014c)63 b(prologue)g(and)g(epilogue)g
+ (co)t(de)g(to)f(the)h(function,)4080 5093 y(using)53
+ b(information)f(gathered)i(through)f(this)f(analysis)g(\(the)h(IA32)
+ 4080 5267 y(implemen)l(tation)47 b(of)g(these)g(ho)t(oks)g(is)f
+ (describ)t(ed)j(in)e(Section)h(6.3\).)4080 5658 y Fm(3.)199
+ b(T)-18 b(ARGET)49 b(DESCRIPTION)4230 5873 y Fl(The)f(problem)h(of)f
+ (JIT)h(compilation)e(for)h(a)g(target-indep)t(enden)l(t)4080
+ 6048 y(b)l(yteco)t(de,)d(if)d(solv)l(ed)g(in)g(a)g(target-indep)t
+ (enden)l(t)i(manner,)h(requires)4080 6222 y(an)57 b(e\016cien)l(t)g
+ (represen)l(tation)g(of)g(target-sp)t(eci\014c)g(attributes)f(suc)l(h)
+ 4080 6397 y(as)51 b(the)g(register)g(\014le)h(and)f(instruction)g(set.)
+ 4230 6571 y(Registers)g(are)h(mo)t(deled)h(as)e(opaque)i(en)l(umerated)
+ g(v)-9 b(alues)53 b(with)4080 6745 y(asso)t(ciated)63
+ b(\015ags)g(that)f(describ)t(e)j(prop)t(erties)f(of)f(these)g
+ (registers.)4080 6920 y(This)74 b(organization)f(is)h(designed)h(to)f
+ (minimize)g(the)h(amoun)l(t)f(of)4080 7094 y(information)58
+ b(exp)t(osed)i(to)f(the)h(target-indep)t(enden)l(t)h(co)t(de,)g(while)
+ 4080 7268 y(pro)l(viding)51 b(e\016cien)l(t)h(access)f(to)f(required)j
+ (information.)4230 7443 y(The)76 b(prop)t(erties)f(of)g(the)h
+ (registers)e(that)h(target-indep)t(enden)l(t)4080 7617
+ y(co)t(de)62 b(t)l(ypically)e(needs)i(to)f(exp)t(ose)g(are)h(the)f(t)l
+ (yp)t(e)h(of)e(the)i(register)4080 7791 y(\(for)40 b(example,)j(in)l
+ (teger)e(v)l(ersus)f(\015oating)g(p)t(oin)l(t\))g(and)h(the)g(size)g
+ (\(bit-)4080 7966 y(width\))j(of)f(the)h(register.)65
+ b(These)45 b(prop)t(erties)f(are)g(describ)t(ed)h(in)f(our)4080
+ 8140 y(curren)l(t)52 b(implemen)l(tation)f(using)g(\015ags)f(in)i(a)f
+ (bit)g(v)l(ector.)4230 8314 y(As)46 b(describ)t(ed)j(ab)t(o)l(v)l(e,)e
+ (in)g(the)g(lo)l(w)l(er-lev)l(el)f(in)l(termediate)h(repre-)4080
+ 8489 y(sen)l(tation)61 b(used)i(b)l(y)f(Jello)g(for)g(co)t(de)h
+ (generation,)i(target-sp)t(eci\014c)4080 8663 y(\\ph)l(ysical")103
+ b(registers)f(with)i(direct)g(reference)h(to)e(actual)g(ar-)4080
+ 8837 y(c)l(hitected)f(state)f(can)h(b)t(e)g(freely)g(in)l(termingled)f
+ (with)h(target-)4080 9012 y(indep)t(enden)l(t)80 b(\\virtual")d
+ (registers)g(that)h(m)l(ust)f(b)t(e)h(assigned)g(to)4080
+ 9186 y(\\ph)l(ysical")58 b(registers)h(b)t(efore)h(execution)g(ma)l(y)e
+ (pro)t(ceed.)93 b(This)59 b(is)4080 9360 y(ac)l(hiev)l(ed,)50
+ b(as)e(describ)t(ed)i(in)e(Section)i(2,)e(b)l(y)h(assigning)e(b)t(oth)i
+ (t)l(yp)t(es)4080 9535 y(of)65 b(registers)g(to)g(the)h(same)f(t)l(yp)t
+ (e)g(of)h(en)l(umerated)g(v)-9 b(alue,)69 b(with)c(a)4080
+ 9709 y(threshold)48 b(v)-9 b(alue)48 b(separating)f(the)h(t)l(w)l(o)e
+ (t)l(yp)t(es.)67 b(The)48 b(result)f(is)g(that)4080 9883
+ y(target-indep)t(enden)l(t)74 b(co)t(de)f(can)g(manipulate)f
+ (instructions)f(that)4080 10058 y(reference)77 b(registers)d(of)h(an)l
+ (y)g(t)l(yp)t(e,)80 b(size,)h(or)75 b(relation)f(to)g(arc)l(hi-)4080
+ 10232 y(tected)52 b(state,)e(without)h(ha)l(ving)g(to)f(in)l(tro)t
+ (duce)i(sp)t(ecial)g(cases.)4230 10406 y(The)i(target-indep)t(enden)l
+ (t)j(co)t(de)e(also)e(needs)i(to)f(b)t(e)h(able)f(to)g(in-)4080
+ 10581 y(sp)t(ect)63 b(one)f(of)f(these)i(opaque)f(register)f(v)-9
+ b(alues)63 b(to)e(\014nd)i(out)e(what)4080 10755 y(its)51
+ b(attributes)g(are.)70 b(Th)l(us,)51 b(the)h(mac)l(hine-indep)t(enden)l
+ (t)j(in)l(terface)p eop end
+ %%Page: 4 4
+ TeXDict begin 4 3 bop -303 -137 a Fl(to)42 b(the)i(register)e(\014le)i
+ (exp)t(orts)f(metho)t(ds)g(whic)l(h)h(allo)l(w)d(for)i(a)g(target-)-303
+ 37 y(indep)t(enden)l(t)58 b(mo)t(dule)f(to)e(insp)t(ect)i(the)f(sets)g
+ (of)f(callee-sa)l(v)l(ed)h(and)-303 211 y(caller-sa)l(v)l(ed)h
+ (registers,)i(en)l(umerate)h(the)e(v)-9 b(arious)58 b(classes)f(of)h
+ (reg-)-303 386 y(isters)e(a)l(v)-9 b(ailable)57 b(on)h(the)g(target)f
+ (mac)l(hine,)i(and)g(get)e(the)h(register)-303 560 y(allo)t(catable)49
+ b(registers)h(in)h(a)g(particular)f(class.)67 b(This)50
+ b(is)g(useful,)h(for)-303 734 y(example,)59 b(when)f(trying)e(to)h
+ (\014nd)h(a)f(\\ph)l(ysical")g(register)f(to)h(store)-303
+ 909 y(the)63 b(con)l(ten)l(ts)g(of)g(a)f(\\virtual")g(register.)104
+ b(The)63 b(register)g(informa-)-303 1083 y(tion)55 b(in)l(terface)h
+ (also)f(exp)t(oses)h(information)f(ab)t(out)h(aliases)e(in)i(the)-303
+ 1257 y(register)50 b(\014le,)i(whic)l(h)f(is)f(crucial)i(for)f(the)g
+ (IA32)h(in)l(teger)f(registers)3565 1194 y Fd(1)3633
+ 1257 y Fl(.)-154 1432 y(The)g(target)g(description)f(also)g(exp)t(oses)
+ h(abstract)f(sequences)i(of)-303 1606 y(target-sp)t(eci\014c)k(co)t(de)
+ h(useful)f(for)g(all)f(targets.)82 b(F)-13 b(or)56 b(example,)h(the)
+ -303 1780 y(prologue/epilogue)40 b(insertion)f(pass)h(ev)l(en)l(tually)
+ g(uses)f(these)i(ho)t(oks)-303 1955 y(to)69 b(insert)h(a)f(target-sp)t
+ (eci\014c)i(prologue)f(and)g(epilogues)g(in)l(to)f(the)-303
+ 2129 y(program.)92 b(Similarly)-13 b(,)60 b(the)f(register)g(allo)t
+ (cator)f(uses)h(these)h(ho)t(oks)-303 2304 y(to)50 b(spill)g(and)i
+ (reload)f(spilled)g(v)-9 b(alues)51 b(from)g(the)h(stac)l(k.)-154
+ 2478 y(The)64 b(target)f(description)g(exp)t(oses)h(a)f(small)f(amoun)l
+ (t)i(of)f(infor-)-303 2652 y(mation)51 b(ab)t(out)i(the)g(opaque)g(mac)
+ l(hine)f(instructions)g(as)g(w)l(ell.)70 b(F)-13 b(or)-303
+ 2827 y(example,)70 b(a)c(set)g(of)g(\015ags)g(is)f(asso)t(ciated)h
+ (with)f(eac)l(h)i(instruction)-303 3001 y(t)l(yp)t(e,)86
+ b(indicating)79 b(whether)i(it)d(reads)i(or)f(writes)g(memory)-13
+ b(,)86 b(can)-303 3175 y(c)l(hange)53 b(con)l(trol)f(\015o)l(w,)g(etc.)
+ 72 b(Also)52 b(it)g(exp)t(oses)h(information)e(ab)t(out)-303
+ 3350 y(registers)k(that)g(are)h(implicitly)f(read)h(or)g(written)f(b)l
+ (y)h(the)h(instruc-)-303 3524 y(tion.)66 b(On)51 b(the)e(IA32,)h(for)f
+ (example,)h(the)f(32-bit)g(`)p Fn(div)p Fl(')h(instruction)-303
+ 3698 y(implicitly)55 b(reads)h(and)g(writes)g(b)t(oth)h(the)f
+ Fn(EAX)i Fl(and)e Fn(EDX)i Fl(registers,)-303 3873 y(although)49
+ b(neither)i(are)f(represen)l(ted)h(in)f(the)g(mac)l(hine)g(co)t(de)h
+ (in)l(ter-)-303 4047 y(mediate)68 b(represen)l(tation.)120
+ b(This)69 b(information)e(is)h(necessary)h(for)-303 4221
+ y(phases)51 b(lik)l(e)f(register)h(allo)t(cation.)-303
+ 4615 y Fm(4.)198 b(T)-18 b(ARGET)g(\255INDEPENDENT)48
+ b(PHASES)-154 4831 y Fl(With)78 b(a)g(mac)l(hine-indep)t(enden)l(t)j
+ (instruction)d(represen)l(tation)-303 5006 y(and)84 b(target)f
+ (description)h(framew)l(ork,)91 b(w)l(e)84 b(can)g(create)g(target-)
+ -303 5180 y(indep)t(enden)l(t)57 b(phases.)77 b(Curren)l(tly)-13
+ b(,)56 b(Jello)e(con)l(tains)g(three)h(target-)-303 5354
+ y(indep)t(enden)l(t)j(phases:)79 b(Liv)l(e)56 b(V)-13
+ b(ariable)56 b(Analysis,)g(Register)g(Allo-)-303 5529
+ y(cation,)50 b(and)i(Prologue/Epilogue)d(co)t(de)k(insertion.)-303
+ 5834 y Fm(4.1)198 b(Li)n(v)n(e)50 b(V)-18 b(ariable)50
+ b(Analysis)-154 6050 y Fl(The)e(liv)l(e)g(v)-9 b(ariable)48
+ b(analysis)e(phase)i(constructs)g(liv)l(e-ranges)f(for)-303
+ 6224 y(SSA)72 b(and)h(ph)l(ysical)e(registers)g(to)h(b)t(e)h(used)f(b)l
+ (y)g(the)h(register)e(al-)-303 6398 y(lo)t(cator)c(\(it)g(is)g(also)g
+ (used)h(b)l(y)g(the)g(IA32)g(sp)t(eci\014c)h(\015oating-p)t(oin)l(t)
+ -303 6573 y(supp)t(ort)58 b(phase,)h(describ)t(ed)g(in)e(Section)h
+ (6.2\).)86 b(F)-13 b(or)58 b(eac)l(h)g(register)-303
+ 6747 y(v)-9 b(alue,)47 b(liv)l(e)g(v)-9 b(ariable)46
+ b(analysis)f(iden)l(ti\014es)i(the)g(instructions)f(where)-303
+ 6921 y(the)e(register)f(v)-9 b(alue)45 b(has)e(to)g(b)t(e)i(a)l(v)-9
+ b(ailable.)65 b(The)44 b(Jello)f(liv)l(e)h(v)-9 b(ariable)-303
+ 7096 y(analysis)42 b(phase)j(tak)l(es)e(adv)-9 b(an)l(tage)44
+ b(of)g(the)h(SSA)f(form)g(for)g(mac)l(hine)-303 7270
+ y(instructions)50 b(to)h(e\016cien)l(tly)g(compute)h(liv)l(e)e(ranges.)
+ -154 7444 y(F)-13 b(or)45 b(eac)l(h)f(SSA)i(register)d(de\014nition,)j
+ (w)l(e)f(insp)t(ect)f(all)g(of)g(its)f(uses.)-303 7619
+ y(Due)61 b(to)e(prop)t(erties)i(of)f(SSA)h(form)e(\(de\014nitions)h(m)l
+ (ust)g(dominate)-303 7793 y(their)35 b(uses\),)i(w)l(e)e(simply)f
+ (recursiv)l(ely)h(mark)g(an)l(y)f(predecessor)i(basic)-303
+ 7967 y(blo)t(c)l(ks)65 b(of)h(a)g(use)g(as)g(liv)l(e)f(un)l(til)h(w)l
+ (e)g(reac)l(h)g(the)h(de\014nition.)113 b(SSA)-303 8142
+ y(form)53 b(allo)l(ws)f(us)i(to)f(use)h(sparse)f(algorithms)g(whic)l(h)
+ h(op)t(erate)g(o)l(v)l(er)-303 8316 y(the)49 b(en)l(tire)g(function)g
+ (at)g(a)f(time.)67 b(Ph)l(ysical)48 b(registers,)g(whic)l(h)h(ma)l(y)
+ -303 8490 y(app)t(ear)38 b(in)f(mac)l(hine)g(co)t(de)i(at)d(an)l(y)h
+ (time,)j(are)d(handled)h(with)f(purely)-303 8665 y(lo)t(cal)48
+ b(tec)l(hniques)i(b)t(ecause)g(their)f(lifetimes)f(are)h(constrained)g
+ (to)g(a)-303 8839 y(basic)h(blo)t(c)l(k)i(\(for)e(phases)i
+ Fk(b)-8 b(efor)g(e)50 b Fl(register)h(allo)t(cation\).)-303
+ 9144 y Fm(4.2)198 b(Register)51 b(Allocation)-154 9360
+ y Fl(Register)d(allo)t(cation)f(transforms)h(mac)l(hine)h(co)t(de)g(in)
+ g(SSA)g(form)-303 9534 y(\(with)37 b(the)i(o)t(ccasional)f(ph)l(ysical)
+ g(register)g(men)l(tioned\))g(to)g(only)g(use)-303 9709
+ y(ph)l(ysical)e(registers.)62 b(T)-13 b(o)37 b(do)h(this,)h(it)d(allo)t
+ (cates)g(some)h(SSA)h(registers)-303 9883 y(to)59 b(ph)l(ysical)h
+ (registers)f(and)h(spills)f(others)h(to)f(the)i(stac)l(k.)94
+ b(It)60 b(uses)-303 10057 y(the)f(target)f(descriptor)h(information)f
+ (to)g(get)h(information)e(ab)t(out)-303 10232 y(whic)l(h)k(registers)f
+ (are)h(a)l(v)-9 b(ailable)61 b(for)f(allo)t(cation,)i(whic)l(h)g
+ (registers)p -303 10319 1594 7 v -295 10426 a Fd(1)-227
+ 10489 y Fh(This)44 b(is)f(a)i(generic)f(solution)g(to)g(a)h(problem)f
+ (that)h(manifests)f(on)g(other)h(tar-)-303 10622 y(gets)50
+ b(as)h(w)l(ell.)76 b(F)-11 b(or)51 b(example,)h(the)f(Sparc)h(arc)l
+ (hitecture)g(has)f(aliasing)f(in)h(its)-303 10755 y(\015oating-p)t(oin)
+ l(t)45 b(register)f(\014le.)4080 -137 y Fl(are)71 b(implicitly)d(read)j
+ (and)g(written)e(b)l(y)i(a)f(mac)l(hine)g(instruction,)4080
+ 37 y(and)52 b(to)f(generate)g(spill)g(and)g(reload)g(co)t(de.)4230
+ 211 y(One)88 b(piece)g(of)e(information)g(a)h(register)f(allo)t(cator)g
+ (needs)i(is)4080 386 y(\\t)l(yp)t(e")61 b(information)e(for)h(virtual)g
+ (registers,)i(so)d(it)h(kno)l(ws)g(whic)l(h)4080 560
+ y(ph)l(ysical)71 b(registers)g(are)g(compatible)h(with)f(a)g(certain)h
+ (SSA)g(reg-)4080 734 y(ister.)127 b(F)-13 b(or)71 b(instance,)76
+ b(the)71 b(IA32)g(arc)l(hitecture)h(con)l(tains)e(8,)75
+ b(16,)4080 909 y(and)45 b(32-bit)e(in)l(teger)h(registers,)g(and)g
+ (\015oating)g(p)t(oin)l(t)f(registers.)65 b(W)-13 b(e)4080
+ 1083 y(m)l(ust)60 b(b)t(e)i(sure)f(to)f(allo)t(cate)g(SSA)i(registers)e
+ (to)g(the)h(correct)g(class)4080 1257 y(of)51 b(ph)l(ysical)g(register)
+ f(giv)l(en)i(a)f(target)f(with)h(m)l(ultiple)g(t)l(yp)t(es.)4230
+ 1432 y(Stated)64 b(more)h(generally)-13 b(,)67 b(w)l(e)e(need)g(to)f(b)
+ t(e)i(able)e(to)g(map)g(from)4080 1606 y(the)58 b(t)l(yp)t(e)g(and)g
+ (size)f(of)g(the)h(data)f(represen)l(ted)i(in)f(SSA)g(v)-9
+ b(alues)58 b(to)4080 1780 y(the)43 b(subset)g(of)f(the)h(mac)l(hine's)f
+ (registers)g(that)g(can)h(hold)g(that)f(t)l(yp)t(e)4080
+ 1955 y(of)j(data.)66 b(The)46 b(solution)e(w)l(e)h(implemen)l(ted)h
+ (for)g(this)e(problem)i(is)f(to)4080 2129 y(ha)l(v)l(e)f(eac)l(h)f
+ (target)g(mac)l(hine)h(description)f(exp)t(ort)h(an)g(in)l(terface)f
+ (for)4080 2304 y(its)61 b Fk(r)-8 b(e)g(gister)63 b(classes)p
+ Fl(.)99 b(Eac)l(h)62 b(register)f(class)g(is)g(a)h(set)f(of)h
+ (registers)4080 2478 y(that)k(can)h(hold)g(a)f(particular)h(piece)g(of)
+ f(data.)114 b(F)-13 b(or)67 b(IA32,)j(these)4080 2652
+ y(sets)g(are)g(the)g(8-,)75 b(16-,)f(and)d(32-bit)e(in)l(teger)h
+ (registers,)k(plus)c(the)4080 2827 y(\015oating)63 b(p)t(oin)l(t)h
+ (registers.)105 b(During)64 b(instruction)g(selection,)i(eac)l(h)4080
+ 3001 y(SSA)76 b(register)e(created)i(adds)f(an)g(en)l(try)g(to)f(the)h
+ (register)g(table,)4080 3175 y(whic)l(h)52 b(indicates)f(the)g
+ (register)g(class)f(it)h(b)t(elongs)g(to.)4230 3350 y(Jello)58
+ b(curren)l(tly)h(has)g(t)l(w)l(o)f(pluggable)h(register)f(allo)t(cator)
+ g(algo-)4080 3524 y(rithms)f(implemen)l(ted:)82 b(a)57
+ b(\\p)t(eephole")i(register)f(allo)t(cator)e(and)i(a)4080
+ 3698 y(\\lo)t(cal")g(register)h(allo)t(cator.)89 b(The)60
+ b(p)t(eephole)g(allo)t(cator)e(do)t(es)h(not)4080 3873
+ y(hold)64 b(v)-9 b(alues)64 b(in)g(registers)f(across)g(instructions:)
+ 92 b(Before)64 b(a)g(com-)4080 4047 y(putation,)75 b(it)70
+ b(loads)f(all)h(v)-9 b(alues)70 b(in)l(to)g(registers;)79
+ b(after)70 b(the)h(com-)4080 4221 y(putation,)i(it)68
+ b(stores)g(an)l(y)g(computed)i(v)-9 b(alues)69 b(to)g(memory)-13
+ b(.)121 b(The)4080 4396 y(lo)t(cal)47 b(register)f(allo)t(cator)g(k)l
+ (eeps)h(v)-9 b(alues)47 b(in)g(registers)f(across)g(a)g(sin-)4080
+ 4570 y(gle)60 b(basic)f(blo)t(c)l(k.)93 b(W)-13 b(e)60
+ b(are)g(w)l(orking)f(on)g(implemen)l(ting)h(a)f(global)4080
+ 4744 y(linear-scan)39 b(algorithm)e([19,)j(21],)g(but)e(getting)g(the)h
+ (system)f(up)h(and)4080 4919 y(running)52 b(quic)l(kly)f(has)g(b)t(een)
+ i(our)e(primary)h(goal.)4080 5267 y Fm(4.3)199 b(Pr)l(ologue)49
+ b(and)g(Epilogue)h(Code)g(Insertion)4230 5483 y Fl(As)62
+ b(describ)t(ed)i(in)f(Section)g(2.2,)h(a)f(separate)g(phase)g(is)e
+ (used)j(to)4080 5658 y(write)50 b(out)h(the)f(prologue)h(and)g
+ (epilogue)g(for)f(eac)l(h)h(function.)68 b(This)4080
+ 5832 y(phase)46 b(actually)g(do)t(es)g(three)g(separate,)h(but)f
+ (related,)h(transforma-)4080 6006 y(tions.)62 b(The)36
+ b(\014rst)f(is)g(to)g(scan)g(the)h(mac)l(hine)g(co)t(de)g(lo)t(oking)f
+ (for)g(writes)4080 6181 y(to)60 b(callee-sa)l(v)l(ed)g(registers.)94
+ b(Eac)l(h)60 b(callee-sa)l(v)l(ed)f(register)h(is)g(then)4080
+ 6355 y(spilled)52 b(and)h(reloaded)g(in)f(the)h(en)l(trance)g(and)f
+ (exits,)g(resp)t(ectiv)l(ely)-13 b(,)4080 6529 y(of)46
+ b(the)h(function.)67 b(The)47 b(second)g(e\013ect)g(is)f(to)g
+ (\014nalize)g(the)h(la)l(y)l(out)f(of)4080 6704 y(the)37
+ b(abstract)e(stac)l(k)h(ob)9 b(jects)35 b(trac)l(k)l(ed)i(b)l(y)f(the)g
+ (frame)h(manager,)i(fol-)4080 6878 y(lo)l(w)l(ed)48 b(b)l(y)h
+ (rewriting)f(references)i(to)d(abstract)h(stac)l(k)g(ob)9
+ b(jects)48 b(with)4080 7052 y(references)60 b(to)d(their)h(newly)g
+ (assigned)f(ph)l(ysical)h(o\013sets.)86 b(Finally)-13
+ b(,)4080 7227 y(the)72 b(phase)g(uses)f(the)h(target)f(descriptor)g(to)
+ g(insert)g(the)h(canned)4080 7401 y(prologue)63 b(and)f(epilogue)h(co)t
+ (de)g(sequence)h(for)e(the)h(target,)h(whic)l(h)4080
+ 7575 y(ma)l(y)c(optionally)f(use)h(information)f(obtained)i(during)f
+ (the)h(previ-)4080 7750 y(ous)e(steps)f(to)g(customize)h(the)g
+ (generated)h(co)t(de)f(\(see)g(Section)g(6.3)4080 7924
+ y(for)51 b(an)h(example\).)4080 8273 y Fm(4.4)199 b(Futur)l(e)50
+ b(T)-18 b(ar)n(get\255Independent)51 b(Phases)4230 8489
+ y Fl(The)76 b(co)t(de)h(generation)f(diagram)f(in)g(Figure)i(1)e
+ (includes)h(t)l(w)l(o)4080 8663 y(target-indep)t(enden)l(t)54
+ b(stages)c(whic)l(h)h(are)h(planned,)g(but)g(curren)l(tly)4080
+ 8837 y(not)j(implemen)l(ted.)80 b(These)55 b(phases)g(p)t(erform)g
+ (target-sp)t(eci\014c)h(op-)4080 9012 y(timizations)c(on)i(either)h
+ (the)f(SSA)h(v)l(ersion)e(of)h(the)g(function)g(or)g(on)4080
+ 9186 y(the)65 b(p)t(ost-register)e(allo)t(cation)g(v)l(ersion)g(of)h
+ (the)h(function.)106 b(Other)4080 9360 y(optimizations,)47
+ b(suc)l(h)i(as)f(instruction)g(sc)l(heduling)h(ma)l(y)g(b)t(e)g(added)
+ 4080 9535 y(in)i(the)h(more)f(distan)l(t)f(future)i(as)f(w)l(ell.)4230
+ 9709 y(The)68 b(\\SSA)g(Opts")f(phase)h(is)f(in)l(tended)h(to)f(host)g
+ (a)g(v)-9 b(ariet)l(y)68 b(of)4080 9883 y(ligh)l(t-w)l(eigh)l(t)c(SSA)i
+ (optimizations)e(that)h(are)h(useful)g(to)f(impro)l(v)l(e)4080
+ 10058 y(the)55 b(e\016ciency)h(of)e(co)t(de)i(generated)f(b)l(y)g(the)g
+ (instruction)f(selector.)4080 10232 y(Although)63 b(the)f(input)h(LL)
+ -17 b(VM)62 b(co)t(de)i(is)d(highly)i(optimized,)i(some)4080
+ 10406 y(optimization)36 b(opp)t(ortunities)h(will)f(not)h(b)t(e)h(exp)t
+ (osed)g(un)l(til)e(after)h(in-)4080 10581 y(struction)50
+ b(selection)g(has)g(b)t(een)h(p)t(erformed.)69 b(F)-13
+ b(or)51 b(example,)f(man)l(y)4080 10755 y(RISC)c(pro)t(cessors)e(m)l
+ (ust)h(use)g(a)f(sequence)j(of)d(instructions)g(to)h(load)p
+ eop end
+ %%Page: 5 5
+ TeXDict begin 5 4 bop -303 -137 a Fl(arbitrary)34 b(in)l(teger)h
+ (constan)l(ts)f(in)l(to)h(a)g(register.)62 b(If)35 b(t)l(w)l(o)g
+ (similar)e(con-)-303 37 y(stan)l(ts)53 b(are)i(loaded)g(in)l(to)f
+ (registers,)g(there)h(man)l(y)g(b)t(e)h(redundancy)-303
+ 211 y(in)51 b(the)g(generated)i(co)t(de)f(that)f(ma)l(y)f(b)t(e)i
+ (eliminated.)-154 386 y(The)89 b(\\P)l(eephole)g(Opts")g(phase)g(is)f
+ (in)l(tended)i(to)f(supp)t(ort)g(a)-303 560 y(table-driv)l(en)44
+ b(p)t(eephole)h(optimization)d(phase)i(whic)l(h)g(uses)f(target-)-303
+ 734 y(sp)t(eci\014c)75 b(tables)f(to)f(driv)l(e)i(a)f(target-indep)t
+ (enden)l(t)i(optimization)-303 909 y(algorithm.)66 b(This)50
+ b(phase)h(can)g(b)t(e)h(used)f(to)f(repair)h(sub)t(optimal)f(se-)-303
+ 1083 y(quences)36 b(of)e(generated)i(co)t(de)g(that)e(cannot)h(easily)f
+ (b)t(e)i(incorp)t(orated)-303 1257 y(in)l(to)50 b(the)i(earlier)f
+ (algorithms.)-303 1652 y Fm(5.)198 b(T)-18 b(ARGET)g(\255SPECIFIC)48
+ b(PHASES)-154 1868 y Fl(The)90 b(t)l(w)l(o)f(target-mac)l(hine-sp)t
+ (eci\014c)i(phases)f(of)g(compilation)-303 2042 y(found)72
+ b(in)g(Jello)g(are)g Fk(instruction)j(sele)-8 b(ction)71
+ b Fl(and)i Fk(machine)h(c)-8 b(o)g(de)-303 2216 y(emission)p
+ Fl(.)107 b(W)-13 b(e)64 b(describ)t(e)h(eac)l(h)g(in)f(detail)g(and)g
+ (what)g(asp)t(ects)g(of)-303 2391 y(their)51 b(inner)h(w)l(orking)e
+ (require)i(them)g(to)f(b)t(e)h(target-sp)t(eci\014c.)-303
+ 2696 y Fm(5.1)198 b(Instruction)50 b(Selection)-154 2912
+ y Fl(The)73 b(\014rst)f(target-dep)t(enden)l(t)i(pass)d(is)h
+ (instruction)f(selection,)-303 3086 y(where)39 b(the)g(kno)l(wledge)g
+ (of)f(the)h(target)f(platform)g(guides)g(the)h(trans-)-303
+ 3260 y(lation)58 b(of)h(LL)-17 b(VM)60 b(b)l(yteco)t(de)g(to)g(a)f(lo)l
+ (w)l(er-lev)l(el)g(mac)l(hine)h(instruc-)-303 3435 y(tion)g(stream.)97
+ b(Although)61 b(the)g(pass)f(is)g(mac)l(hine-dep)t(enden)l(t,)66
+ b(i.e.)-303 3609 y(it)50 b(enco)t(des)j(particular)e(kno)l(wledge)h(ab)
+ t(out)g(the)g(arc)l(hitecture,)f(the)-303 3783 y(output)63
+ b(of)f(this)g(pass)g(is)g(abstract)g(mac)l(hine)h(instructions)e(whic)l
+ (h)-303 3958 y(can)51 b(b)t(e)h(pro)t(cessed)g(b)l(y)g(the)f
+ (target-indep)t(enden)l(t)i(phases.)-154 4132 y(The)47
+ b(t)l(w)l(o)f(most)g(common)h(strategies)e(for)i(instruction)f
+ (selection)-303 4306 y(are)56 b(simple)g(expansion)h(follo)l(w)l(ed)e
+ (b)l(y)h(p)t(eephole)i(optimization)e([5,)-303 4481 y(11],)c(and)i
+ (instruction)f(selection)g(via)f(optimal)h(pattern)g(matc)l(hing)-303
+ 4655 y(on)64 b(the)i(in)l(termediate)e(represen)l(tation)h([9,)i(10].)
+ 108 b(An)65 b(expansion-)-303 4829 y(based)51 b(co)t(de)g(generator)g
+ (expands)h(eac)l(h)f(instruction)f(in)h(the)g(in)l(ter-)-303
+ 5004 y(mediate)63 b(represen)l(tation)g(\(whic)l(h)g(is)g(LL)-17
+ b(VM)62 b(in)i(this)e(case\),)j(in)l(to)-303 5178 y(a)f(canned)h
+ (sequence)h(of)e(target-sp)t(eci\014c)g(instructions.)106
+ b(Because)-303 5353 y(the)55 b(co)t(de)h(generated)g(through)g(this)e
+ (sc)l(heme)i(is)e(often)h(quite)g(inef-)-303 5527 y(\014cien)l(t,)67
+ b(in)l(tensiv)l(e)c(p)t(eephole)i(optimization)e(is)f(used)j(to)e
+ (impro)l(v)l(e)-303 5701 y(the)54 b(qualit)l(y)-13 b(.)77
+ b(This)54 b(is)f(the)i(approac)l(h)g(curren)l(tly)g(implemen)l(ted)g
+ (in)-303 5876 y(the)c(IA32)h(instruction)e(selector.)-154
+ 6050 y(Instruction)81 b(selection)g(via)g(pattern)g(matc)l(hing)g(op)t
+ (erates)h(b)l(y)-303 6224 y(computing)46 b(a)f(co)l(v)l(ering)h(of)g
+ (the)g(in)l(termediate)g(represen)l(tation)g(us-)-303
+ 6399 y(ing)53 b(tiles)f(whic)l(h)h(represen)l(t)h(instructions)f(in)g
+ (the)h(target)e(mac)l(hine)-303 6573 y(co)t(de.)131 b(Costs)70
+ b(are)j(assigned)e(to)h(these)g(tiles)f(\(whic)l(h)h(often)g(rep-)-303
+ 6747 y(resen)l(t)f(the)h(execution)h(time)e(or)g(size)h(of)f(the)h
+ (instruction\),)j(and)-303 6922 y(a)59 b(dynamic)i(programming)e(tec)l
+ (hnique)i(is)f(used)g(to)g(compute)g(the)-303 7096 y
+ Fk(minimum)70 b(c)-8 b(ost)68 b(c)-8 b(over)64 b Fl(for)h(the)h(input)g
+ (IR.)f(This)g(approac)l(h)h(pro-)-303 7270 y(vides)77
+ b(faster)g(compilation)g(and)h(more)f(e\016cien)l(t)h(co)t(de)h(than)f
+ (an)-303 7445 y(expansion-based)70 b(approac)l(h)g(\(b)t(ecause)h(p)t
+ (eephole)g(optimization)-303 7619 y(is)45 b(largely)g(unnecessary\),)j
+ (but)e(cannot)h(op)t(erate)f(on)h Fk(gener)-8 b(al)45
+ b Fl(D)l(A)l(G)-303 7793 y(structures)51 b(in)g(the)h(in)l(termediate)f
+ (represen)l(tation)g(e\016cien)l(tly)g([8].)-154 7968
+ y(As)99 b(w)l(ork)g(on)g(Jello)f(con)l(tin)l(ues,)111
+ b(w)l(e)99 b(plan)g(to)g(replace)g(our)-303 8142 y(expansion-based)35
+ b(instruction)e(selector)h(with)g(a)g(pattern-matc)l(hing)-303
+ 8316 y(selector.)67 b(Ertl)48 b(has)i(sho)l(wn)f(in)h([8])f(that)g
+ (although)g(tiling)g(D)l(A)l(Gs)f(is)-303 8491 y(NP-complete)54
+ b(in)h(general,)g(it)f(can)h(b)t(e)g(p)t(erformed)h(in)f(linear)f(time)
+ -303 8665 y(for)37 b(a)h(useful)g(subset)f(of)h(general)g(grammars.)62
+ b(W)-13 b(e)39 b(b)t(eliev)l(e)f(that)f(this)-303 8839
+ y(approac)l(h)44 b(will)e(pro)l(vide)i(the)g(b)t(est)g(tradeo\013)f(b)t
+ (et)l(w)l(een)i(compilation)-303 9014 y(time)51 b(e\016ciency)h(and)g
+ (the)f(e\016ciency)i(of)d(the)i(generated)g(co)t(de.)-303
+ 9319 y Fm(5.2)198 b(Machine)50 b(code)h(emission)-154
+ 9535 y Fl(A)l(t)68 b(the)h(end)h(of)e(the)h(compilation)e(pro)t(cess,)
+ 73 b(the)c(mac)l(hine)g(in-)-303 9709 y(structions)46
+ b(need)k(to)d(b)t(e)i(assem)l(bled)e(and)h(loaded)g(in)l(to)f(memory)h
+ (as)-303 9883 y(a)55 b(binary)h(image)g(whic)l(h)g(will)e(b)t(e)j
+ (executed)g(directly)f(b)l(y)g(the)g(pro-)-303 10058
+ y(cessor.)66 b(Jello)48 b(do)t(es)g(not)g(dep)t(end)i(on)f(an)l(y)f
+ (external)g(assem)l(blers)f(to)-303 10232 y(aid)62 b(it)h(in)g(this)f
+ (pro)t(cess.)104 b(Therefore,)67 b(w)l(e)c(ha)l(v)l(e)g(enco)t(ded)i
+ (the)f(bi-)-303 10406 y(nary)56 b(sequences)g(that)g(instructions)e
+ (are)i(translated)f(to,)h(and)g(the)-303 10581 y(width)d(of)h
+ (bit-\014elds)g(for)g(parameters)f(and)i(\015ags)e(that)g(need)i(to)f
+ (b)t(e)-303 10755 y(enco)t(ded)h(in)l(to)d(the)i(instructions)e(for)h
+ (them)h(to)f(b)t(e)h(executed)h(with)4080 -137 y(the)d(in)l(tended)g
+ (side-e\013ects.)4230 37 y(Our)71 b(con)l(tin)l(uing)f(w)l(ork)h(in)l
+ (v)l(olv)l(es)e(dev)l(eloping)i(an)g(instruction)4080
+ 211 y(description)55 b(mec)l(hanism)g(that)g(will)f(create)i(mac)l
+ (hine)f(co)t(de)h(emit-)4080 386 y(ters)50 b(based)g(on)g(a)g(target)f
+ (instruction)h(set)f(description.)68 b(This)49 b(to)t(ol)4080
+ 560 y(accepts)59 b(a)f(description)h(of)f(the)h(target)f(ISA)h(whic)l
+ (h)g(is)f(written)g(in)4080 734 y(a)53 b(sp)t(ecial)h(mark-up)g
+ (language)f(whic)l(h)h(allo)l(ws)d(instructions)h(to)h(b)t(e)4080
+ 909 y(separated)43 b(in)l(to)f Fk(classes)f Fl(based)i(on)f(their)h
+ (common)g(traits,)f(suc)l(h)h(as)4080 1083 y(n)l(um)l(b)t(er)h(of)f
+ (parameters)f(they)h(can)h(accept)f(or)g(their)f(implicit)g(side-)4080
+ 1257 y(e\013ects,)72 b(and)d(allo)l(ws)e(for)h(a)h(\\class)e
+ (structure")h(to)g(inherit)h(these)4080 1432 y(commonalities)50
+ b(so)g(that)h(rep)t(etition)g(in)g(instruction)g(descriptions)4080
+ 1606 y(ma)l(y)64 b(b)t(e)h(factored)f(out.)107 b(Also,)66
+ b(this)e(metho)t(d)h(allo)l(ws)d(the)j(target)4080 1780
+ y(instruction)71 b(set)f(description)h(to)f(b)t(e)i(k)l(ept)f(readable)
+ h(and)f(easily)4080 1955 y(extensible,)g(allo)l(wing)64
+ b(it)i(to)g(b)t(e)i(tuned)f(and)g(extended)i(b)l(y)d(users)4080
+ 2129 y(who)51 b(are)h(not)f(comfortable)g(with)g(the)g(Jello)g(source)g
+ (co)t(de.)4080 2576 y Fm(6.)199 b(THE)34 b(IA32)g(T)-18
+ b(ARGET)34 b(IMPLEMENT)-18 b(A)f(TION)4230 2791 y Fl(The)62
+ b(\014rst)f(concrete)i(target)f(that)f(Jello)g(supp)t(orts)h(is)f(the)h
+ (In)l(tel)4080 2966 y(IA32)53 b(arc)l(hitecture.)74 b(W)-13
+ b(e)53 b(c)l(hose)g(this)f(arc)l(hitecture)i(as)e(our)h(target)4080
+ 3140 y(b)t(ecause)67 b(it)e(has)h(a)g(n)l(um)l(b)t(er)h(of)e(p)t
+ (eculiar)i(features,)i(making)c(it)g(a)4080 3314 y(great)h(c)l
+ (hallenge.)114 b(In)67 b(addition,)j(the)d(IA32)f(arc)l(hitecture)h(is)
+ f(one)4080 3489 y(of)61 b(the)g(most)e(widely)i(a)l(v)-9
+ b(ailable)60 b(and)h(cost)f(e\013ectiv)l(e,)j(with)d(man)l(y)4080
+ 3663 y(implemen)l(tations)49 b(a)l(v)-9 b(ailable)49
+ b(and)h(man)l(y)g(systems)e(supp)t(orting)i(it.)4080
+ 3838 y(An)71 b(IA32)f(bac)l(k-end)i(is)d(also)g(a)h(useful)g(addition)g
+ (to)g(the)g(LL)-17 b(VM)4080 4012 y(compiler)36 b(infrastructure)g
+ (whic)l(h)g(could)g(previously)f(only)h(generate)4080
+ 4186 y(nativ)l(e)51 b(co)t(de)h(for)f(the)h(64-bit)e(Sparc)i(platform.)
+ 4230 4361 y(The)38 b(IA32)h(bac)l(k-end)g(is)f(comp)t(osed)h(of)f(four)
+ g(primary)g(pieces:)62 b(an)4080 4535 y(implemen)l(tation)45
+ b(of)f(the)i(T)-13 b(arget)44 b(Description)h(classes)f(\(describ)t(ed)
+ 4080 4709 y(in)53 b(Section)h(3\),)e(an)h(LL)-17 b(VM)53
+ b(to)g(IA32)g(instruction)g(selector,)f(a)h(ma-)4080
+ 4884 y(c)l(hine)73 b(co)t(de)g(emitter)f(\(whic)l(h)h(writes)e(binary)i
+ (mac)l(hine)f(co)t(de)i(to)4080 5058 y(memory\),)51 b(and)h(an)f(assem)
+ l(bly)f(co)t(de)i(prin)l(ter)g(\(for)f(debugging\).)4230
+ 5232 y(The)89 b(IA32)h(implemen)l(tation)e(of)h(the)h(target)f
+ (description)g(is)4080 5407 y(straigh)l(t-forw)l(ard.)76
+ b(W)-13 b(e)55 b(curren)l(tly)g(exp)t(ose)g(four)g(register)f(classes:)
+ 4080 5581 y(one)60 b(eac)l(h)f(for)g(8-bit,)i(16-bit,)f(and)g(32-bit)f
+ (in)l(teger)g(registers,)h(and)4080 5755 y(one)38 b(for)f(the)h
+ (\015oating)e(p)t(oin)l(t)h(registers.)63 b(Our)38 b(curren)l(t)g
+ (implemen)l(ta-)4080 5930 y(tion)52 b(has)g(a)g(v)l(ery)h(simple)f
+ (implemen)l(tation)g(of)g(the)g(mac)l(hine)h(co)t(de)4080
+ 6104 y(instruction)e(information)f(classes.)4230 6278
+ y(The)71 b(IA32)g(instruction)f(selector)g(is)g(the)h(largest)e(part)i
+ (of)f(the)4080 6453 y(IA32)65 b(bac)l(k-end)h(\(in)e(terms)g(of)g
+ (lines)g(of)g(co)t(de\).)109 b(In)65 b(an)g(e\013ort)f(to)4080
+ 6627 y(mak)l(e)57 b(this)e(transformation)g(as)h(swift)g(as)g(p)t
+ (ossible,)h(the)f(IA32)h(in-)4080 6801 y(struction)35
+ b(selector)f(consists)g(primarily)g(of)h(metho)t(ds)g(that)f(p)t
+ (erform)4080 6976 y(data-directed)49 b(table)e(lo)t(okups)h(on)g(LL)-17
+ b(VM)48 b(instructions')e(op)t(erand)4080 7150 y(t)l(yp)t(es,)41
+ b(and)e(emit)f(short)g(sequences)h(of)f(mac)l(hine)h(instructions)f
+ (that)4080 7324 y(p)t(erform)49 b(appropriate)f(op)t(erations.)66
+ b(In)49 b(other)f(w)l(ords,)g(it)f(is)g(a)h(sim-)4080
+ 7499 y(ple)e(co)t(de)h(expansion-based)f(instruction)f(selector,)h(m)l
+ (uc)l(h)g(lik)l(e)f(the)4080 7673 y(one)58 b(used)f(in)g(GCC)f([11].)85
+ b(This)56 b(implemen)l(tation)g(is)g(v)l(ery)i(simple)4080
+ 7847 y(and)e(relativ)l(ely)f(e\016cien)l(t,)i(and)f(can)g(lead)g(to)g
+ (e\016cien)l(t)g(co)t(de)g(when)4080 8022 y(com)l(bined)c(with)f(an)g
+ (aggressiv)l(e)f(p)t(eephole)j(optimizer)e([5].)4230
+ 8196 y(The)82 b(IA32)g(mac)l(hine)g(co)t(de)h(emitter)e(and)h(prin)l
+ (ters)7414 8133 y Fd(2)7565 8196 y Fl(are)g(the)4080
+ 8371 y(other)71 b(large)f(part)g(of)g(the)h(IA32)f(bac)l(k-end,)76
+ b(largely)70 b(b)t(ecause)i(of)4080 8545 y(the)k(o)t(dd)g(enco)t(dings)
+ g(that)g(m)l(ust)e(b)t(e)j(used,)82 b(and)76 b(the)f(fact)h(that)4080
+ 8719 y(they)52 b(ha)l(v)l(e)f(all)f(b)t(een)j(implemen)l(ted)f(man)l
+ (ually)-13 b(.)4080 9050 y Fm(6.1)199 b(Thr)l(ee\255Addr)l(ess)51
+ b(Instructions)4230 9266 y Fl(One)69 b(p)t(eculiar)g(feature)g(of)g
+ (the)f(IA32)h(arc)l(hitecture)g(is)f(that)g(it)4080 9441
+ y(do)t(es)59 b(not)f(ha)l(v)l(e)h(\\three)g(address)f(instructions")g
+ (whic)l(h)g(read)h(t)l(w)l(o)4080 9615 y(op)t(erands)72
+ b(and)g(write)e(a)h(third.)128 b(Instead,)76 b(the)71
+ b(IA32)h(has)e Fk(auto-)4080 9789 y(up)-8 b(dating)78
+ b Fl(instructions)e(whic)l(h)h(read)g(t)l(w)l(o)f(op)t(erands)h(and)g
+ (o)l(v)l(er-)4080 9964 y(writes)56 b(one)g(of)g(them)h(\(for)e
+ (example,)j Fn(EAX)80 b(+=)f(ECX)58 b Fl(instead)d(of)h
+ Fn(R1)4080 10138 y(=)79 b(R2)g(+)g(R3)p Fl(\).)h(This)54
+ b(is)g(problematic)h(to)g(represen)l(t)g(in)g(SSA)h(form,)4080
+ 10312 y(b)t(ecause)d(an)e(SSA)h(register)f(ma)l(y)f(only)i(ha)l(v)l(e)f
+ (a)g(single)f(de\014nition.)p 4080 10451 1594 7 v 4088
+ 10559 a Fd(2)4157 10622 y Fh(The)45 b(mac)l(hine)h(co)t(de)f(prin)l
+ (ter)h(is)e(not)i(in)f(the)g(critical)f(path;)h(it)g(is)f(only)h(used)
+ 4080 10755 y(for)g(debugging.)p eop end
+ %%Page: 6 6
+ TeXDict begin 6 5 bop -154 -137 a Fl(T)-13 b(o)51 b(solv)l(e)f(this)g
+ (issue,)g(w)l(e)h(actually)f(represen)l(t)h(the)h(t)l(w)l(o-address)
+ -303 37 y(IA32)47 b(instructions)f(as)g(if)h(they)h(w)l(ere)f
+ (three-address)h(instructions.)-303 211 y(This)74 b(allo)l(ws)f(the)j
+ (SSA)f(represen)l(tation)g(to)g(w)l(ork)f(in)h(a)g(natural)-303
+ 386 y(w)l(a)l(y)-13 b(,)46 b(allo)l(wing)f(SSA)j(based)e(p)t(eephole)j
+ (optimizers)d(to)g(b)t(e)h(v)l(ery)g(ag-)-303 560 y(gressiv)l(e.)100
+ b(When)63 b(register)f(allo)t(cation)f(o)t(ccurs,)k(the)e(instructions)
+ -303 734 y(con)l(tain)70 b(\015ags)g(whic)l(h)h(indicate)f(to)h(the)g
+ (register)f(allo)t(cator)f(that)-303 909 y(t)l(w)l(o)52
+ b(of)i(the)g(register)f(op)t(erands)i(m)l(ust)e(b)t(e)h(allo)t(cated)g
+ (to)f(the)h(same)-303 1083 y(ph)l(ysical)49 b(register,)h(th)l(us)f
+ (pro)l(viding)h(auto-up)t(dating)h(instructions)-303
+ 1257 y(for)g(the)g(\014nal)h(mac)l(hine)f(co)t(de.)-303
+ 1557 y Fm(6.2)198 b(IA32)48 b(Floating)i(P)l(oint)f(Support)-154
+ 1773 y Fl(Another)68 b(p)t(eculiar)f(feature)g(of)g(the)g(IA32)g(arc)l
+ (hitecture,)k(from)-303 1948 y(the)50 b(compiler)g(writer's)f(p)t(ersp)
+ t(ectiv)l(e,)i(is)f(that)f(it)h(do)t(es)g(not)g(exp)t(ose)-303
+ 2122 y(a)i(regular)g(register)f(\014le)i(for)f(\015oating-p)t(oin)l(t)f
+ (op)t(erations.)71 b(Instead,)-303 2296 y(\015oating-p)t(oin)l(t)59
+ b(op)t(erations)g(op)t(erate)i(on)f(a)f(stac)l(k)g(of)g(v)-9
+ b(alues;)64 b(this)-303 2471 y(stac)l(k)72 b(implemen)l(ts)h(the)h
+ (usual)f(push,)79 b(p)t(op,)g(duplicate)74 b(and)g(ex-)-303
+ 2645 y(c)l(hange)61 b(op)t(erations,)j(and)d(instructions)g(op)t(erate)
+ h(on)f(the)h(top-of-)-303 2819 y(stac)l(k)50 b(and)i(a)f(sp)t
+ (eci\014ed)h(elemen)l(t.)-154 2994 y(In)67 b(recen)l(t)g(implemen)l
+ (tations)e(of)h(the)h(IA32)f(arc)l(hitecture,)k(the)-303
+ 3168 y(exc)l(hange)78 b(op)t(eration)f(is)g(implemen)l(ted)h(using)f
+ (the)h(register)f(re-)-303 3342 y(name)42 b(table)g(and)g(incurs)g(no)g
+ (signi\014can)l(t)f(pip)t(eline)h(o)l(v)l(erhead)h(when)-303
+ 3517 y(paired)67 b(with)g(a)g(\015oating-p)t(oin)l(t)f(calculation.)115
+ b(This)67 b(means)g(that)-303 3691 y(op)t(erands)72 b(to)f
+ (\015oating-p)t(oin)l(t)g(calculations)f(ma)l(y)h(e\013ectiv)l(ely)g
+ (re-)-303 3865 y(side)51 b(in)g(an)l(y)g(stac)l(k)f(slot)g(without)h
+ (loss)f(of)h(e\016ciency)-13 b(.)-154 4040 y(Using)39
+ b(this)g(insigh)l(t,)h(w)l(e)f(can)h(use)f(the)h(standard)f(register)g
+ (allo)t(ca-)-303 4214 y(tion)h(algorithm)g(to)h(assign)f(v)-9
+ b(alues)41 b(to)g(the)h(\015oating-p)t(oin)l(t)e(op)t(erand)-303
+ 4388 y(stac)l(k)57 b(slots)f(just)h(as)g(w)l(e)h(assign)f(v)-9
+ b(alues)58 b(to)f(general-purp)t(ose)i(reg-)-303 4563
+ y(isters.)67 b(The)52 b(algorithm)e(w)l(e)h(use)h(is)f(describ)t(ed)h
+ (in)g(a)f(recen)l(t)h(rep)t(ort)-303 4737 y(b)l(y)f(Leung)h(and)g
+ (George)f([16].)-154 4911 y(F)-13 b(or)52 b(purp)t(oses)h(of)f
+ (register)f(allo)t(cation,)g(the)h(IA32)g(mac)l(hine)h(de-)-303
+ 5086 y(scription)g(de\014nes)j(7)e(\015oating-p)t(oin)l(t)f(registers)h
+ Fn(\045FP0)80 b(...)158 b(\045FP6)p Fl(,)-303 5260 y(as)82
+ b(w)l(ell)g(as)g(RISC-lik)l(e)h(three-address)h(\015oating-p)t(oin)l(t)
+ e(pseudo-)-303 5434 y(instructions)67 b(that)h(op)t(erate)h(on)g
+ (registers.)119 b(A)69 b(separate)f(target-)-303 5609
+ y(dep)t(enden)l(t)52 b(phase)f(runs)g(after)f(register)g(allo)t(cation)
+ f(that)h(rewrites)-303 5783 y(\015oating-p)t(oin)l(t)59
+ b(register)h(accesses)g(as)g(stac)l(k)f(op)t(erations,)j(pairing)-303
+ 5958 y(these)72 b(op)t(erations)f(with)g(appropriate)h(exc)l(hange)h
+ (op)t(erations)e(so)-303 6132 y(that)37 b(v)-9 b(alues)38
+ b(are)g(mo)l(v)l(ed)g("just-in-time")f(to)g(the)i(stac)l(k)e(slots)f
+ (where)-303 6306 y(they)43 b(are)g(needed.)67 b(In)44
+ b(practice,)h(w)l(e)e(\014nd)h(that)f(only)g(a)f(small)g(n)l(um-)-303
+ 6481 y(b)t(er)52 b(of)f(exc)l(hange)h(op)t(erands)g(are)f(actually)g
+ (necessary)-13 b(.)-303 6780 y Fm(6.3)198 b(IA32)48 b(Stack)i
+ (Optimizations)-154 6996 y Fl(The)k(IA32)f(arc)l(hitecture)g(only)g
+ (pro)l(vides)g(8)g(32-bit)f(in)l(teger)h(reg-)-303 7171
+ y(isters.)70 b(This)52 b(dearth)h(of)f(registers)f(causes)h
+ (considerable)h(pressure)-303 7345 y(for)59 b(the)g(register)g(allo)t
+ (cator,)h(more)g(so)e(if)h(one)h(is)f(used)h(as)e(a)i(stac)l(k)-303
+ 7519 y(p)t(oin)l(ter)45 b(and)h(another)g(as)f(the)h(frame)g(p)t(oin)l
+ (ter.)66 b(Ho)l(w)l(ev)l(er,)46 b(in)g(most)-303 7694
+ y(cases,)63 b(it)f(is)f(p)t(ossible)h(to)f(completely)h(eliminate)g
+ (the)g(need)h(for)f(a)-303 7868 y(dedicated)70 b(frame)f(p)t(oin)l
+ (ter,)k(th)l(us)68 b(freeing)i(up)f(another)g(register.)-303
+ 8042 y(The)44 b(traditional)d(la)l(y)l(out)i(of)g(a)g(stac)l(k)f(frame)
+ i(is)e(sho)l(wn)h(in)g(Figure)h(4.)609 10064 y @beginspecial
+ 0 @llx 0 @lly 541 @urx 457 @ury 1296 @rwi @setspecial
+ %%BeginDocument: StackFrame.eps
+ %!PS-Adobe-2.0 EPSF-2.0
+ %%Title: StackFrame.dia
+ %%Creator: Dia v0.90
+ %%CreationDate: Fri Mar  7 14:00:56 2003
+ %%For: lattner
+ %%Magnification: 1.0000
+ %%Orientation: Portrait
+ %%BoundingBox: 0 0 541 457
+ %%Pages: 1
+ %%EndComments
+ %%BeginProlog
+ /cp {closepath} bind def
+ /c {curveto} bind def
+ /f {fill} bind def
+ /a {arc} bind def
+ /ef {eofill} bind def
+ /ex {exch} 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 pop} bind def
+ /tr {translate} bind def
+ 
+ /ellipsedict 8 dict def
+ ellipsedict /mtrx matrix put
+ /ellipse
+ { ellipsedict begin
+    /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
+    savematrix setmatrix
+    end
+ } def
+ 
+ /mergeprocs {
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+ %%EndProlog
+ 
+ %%BeginSetup
+ %%EndSetup
+ 28.346000 -28.346000 scale
+ -1.954000 -16.050000 translate
+ 
+ 0.100000 slw
+ [] 0 sd
+ [] 0 sd
+ 0 slc
+ 0.000000 0.000000 0.000000 srgb
+ n 8.000000 13.000000 m 16.000000 13.000000 l s
+  [ /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /R /e /t /u /r /n /space /A /xi /xi /d /s /I /c /o /m
+  /i /g /a /S /k /P /parenleft /E /parenright /v /F /x /z /O /b /j
+  /V /l /C /B /period /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+ ] /e0 exch def
+ /Courier_e0 undefinefont
+ /Courier_e0
+   /Courier findfont
+   dup length dict begin
+   {1 index /FID ne {def} {pop pop} ifelse} forall
+   /Encoding e0 def
+   currentdict end
+ definefont pop
+ /Courier_e0 ff 0.800000 scf sf
+ ( !"#$%&'**$!++) sw
+ 2 div 12.000000 ex sub 5.000000 m ( !"#$%&'**$!++)
+  gs 1 -1 sc sh gr
+ 0.100000 slw
+ [] 0 sd
+ [] 0 sd
+ 0 slc
+ n 8.000000 9.000000 m 16.000000 9.000000 l s
+ 0.200000 slw
+ [] 0 sd
+ [] 0 sd
+ 0 slc
+ n 8.000000 4.000000 m 16.000000 4.000000 l s
+ /Courier_e0 ff 0.800000 scf sf
+ (,%-./0%1) sw
+ 2 div 12.000000 ex sub 3.000000 m (,%-./0%1)
+  gs 1 -1 sc sh gr
+ ('$1#/!%"&'$!2) sw
+ 2 div 12.000000 ex sub 3.800000 m ('$1#/!%"&'$!2)
+  gs 1 -1 sc sh gr
+ /Courier_e0 ff 0.800000 scf sf
+ (,%-./0%1) sw
+ 2 div 4.000000 ex sub 3.000000 m (,%-./0%1)
+  gs 1 -1 sc sh gr
+ (3"2-4) sw
+ 2 div 4.000000 ex sub 3.800000 m (3"2-4)
+  gs 1 -1 sc sh gr
+ (5.0%"!$) sw
+ 2 div 4.000000 ex sub 4.600000 m (5.0%"!$)
+  gs 1 -1 sc sh gr
+ (67358) sw
+ 2 div 4.000000 ex sub 5.400000 m (67358)
+  gs 1 -1 sc sh gr
+ /Courier_e0 ff 0.800000 scf sf
+ (5$!90.#+) sw
+ 2 div 19.000000 ex sub 1.000000 m (5$!90.#+)
+  gs 1 -1 sc sh gr
+ (3"2-4) sw
+ 2 div 19.000000 ex sub 1.800000 m (3"2-4)
+  gs 1 -1 sc sh gr
+ (:$2/!) sw
+ 2 div 19.000000 ex sub 2.600000 m (:$2/!)
+  gs 1 -1 sc sh gr
+ 0.050000 slw
+ [] 0 sd
+ [] 0 sd
+ 0 slj
+ 0 slc
+ n 16.000000 0.000000 m 17.000000 0.000000 16.000000 2.000000 17.000000 2.000000 c s
+ 0.050000 slw
+ [] 0 sd
+ [] 0 sd
+ 0 slj
+ 0 slc
+ n 16.000000 4.000000 m 17.000000 4.000000 16.000000 2.000000 17.000000 2.000000 c s
+ 0.100000 slw
+ [] 0 sd
+ [] 0 sd
+ 0 slc
+ n 6.000000 5.000000 m 8.000000 6.000000 l s
+ 0 slj
+ n 7.105573 6.000000 m 8.000000 6.000000 l 7.463344 5.284458 l f
+ /Courier_e0 ff 0.800000 scf sf
+ (:0;!*&30<!) sw
+ 2 div 12.000000 ex sub 7.000000 m (:0;!*&30<!)
+  gs 1 -1 sc sh gr
+ (3"2-4&=>?!-"+) sw
+ 2 div 12.000000 ex sub 7.800000 m (3"2-4&=>?!-"+)
+  gs 1 -1 sc sh gr
+ /Courier_e0 ff 0.800000 scf sf
+ (@2$02>A!&30<!) sw
+ 2 div 12.000000 ex sub 11.000000 m (@2$02>A!&30<!)
+  gs 1 -1 sc sh gr
+ (3"2-4&=>?!-"+) sw
+ 2 div 12.000000 ex sub 11.800000 m (3"2-4&=>?!-"+)
+  gs 1 -1 sc sh gr
+ /Courier_e0 ff 0.800000 scf sf
+ (=#"1.0%1) sw
+ 2 div 12.000000 ex sub 14.000000 m (=#"1.0%1)
+  gs 1 -1 sc sh gr
+ ('$1#/!%"&'$!2) sw
+ 2 div 12.000000 ex sub 14.800000 m ('$1#/!%"&'$!2)
+  gs 1 -1 sc sh gr
+ /Courier_e0 ff 0.800000 scf sf
+ (B#$$!%") sw
+ 2 div 4.000000 ex sub 12.000000 m (B#$$!%")
+  gs 1 -1 sc sh gr
+ (3"2-4) sw
+ 2 div 4.000000 ex sub 12.800000 m (3"2-4)
+  gs 1 -1 sc sh gr
+ (5.0%"!$) sw
+ 2 div 4.000000 ex sub 13.600000 m (5.0%"!$)
+  gs 1 -1 sc sh gr
+ 0.100000 slw
+ [] 0 sd
+ [] 0 sd
+ 0 slc
+ n 6.000000 12.000000 m 8.000000 13.000000 l s
+ 0 slj
+ n 7.105573 13.000000 m 8.000000 13.000000 l 7.463344 12.284458 l f
+ /Courier_e0 ff 0.800000 scf sf
+ (:$2/!) sw
+ 2 div 4.000000 ex sub 8.000000 m (:$2/!)
+  gs 1 -1 sc sh gr
+ (5.0%"!$) sw
+ 2 div 4.000000 ex sub 8.800000 m (5.0%"!$)
+  gs 1 -1 sc sh gr
+ (67C58) sw
+ 2 div 4.000000 ex sub 9.600000 m (67C58)
+  gs 1 -1 sc sh gr
+ 0.100000 slw
+ [] 0 sd
+ [] 0 sd
+ 0 slc
+ n 6.000000 8.000000 m 8.000000 9.000000 l s
+ 0 slj
+ n 7.105573 9.000000 m 8.000000 9.000000 l 7.463344 8.284458 l f
+ 0.100000 slw
+ [] 0 sd
+ [] 0 sd
+ 0 slc
+ n 8.000000 6.000000 m 16.000000 6.000000 l s
+ /Courier_e0 ff 0.800000 scf sf
+ (B#$$!%") sw
+ 2 div 19.000000 ex sub 9.000000 m (B#$$!%")
+  gs 1 -1 sc sh gr
+ (3"2-4) sw
+ 2 div 19.000000 ex sub 9.800000 m (3"2-4)
+  gs 1 -1 sc sh gr
+ (:$2/!) sw
+ 2 div 19.000000 ex sub 10.600000 m (:$2/!)
+  gs 1 -1 sc sh gr
+ 0.050000 slw
+ [] 0 sd
+ [] 0 sd
+ 0 slj
+ 0 slc
+ n 16.000000 4.000000 m 17.000000 4.000000 16.000000 10.000000 17.000000 10.000000 c s
+ 0.050000 slw
+ [] 0 sd
+ [] 0 sd
+ 0 slj
+ 0 slc
+ n 16.000000 16.000000 m 17.000000 16.000000 16.000000 10.000000 17.000000 10.000000 c s
+ /Courier_e0 ff 0.800000 scf sf
+ (D&D&D) sw
+ 2 div 12.000000 ex sub 2.000000 m (D&D&D)
+  gs 1 -1 sc sh gr
+ 0.100000 slw
+ [] 0 sd
+ [] 0 sd
+ 0 slc
+ n 8.000000 0.000000 m 8.000000 16.000000 l s
+ 0.100000 slw
+ [] 0 sd
+ [] 0 sd
+ 0 slc
+ n 8.000000 16.000000 m 16.000000 16.000000 l s
+ 0.100000 slw
+ [] 0 sd
+ [] 0 sd
+ 0 slc
+ n 16.000000 16.000000 m 16.000000 0.000000 l s
+ showpage
+ 
+ %%EndDocument
+  @endspecial 487 10238 a(Figure)51 b(4:)68 b(IA32)51
+ b(Stac)l(k)h(F)-13 b(rame)51 b(La)l(y)l(out)-154 10581
+ y(This)45 b(diagram)g(sho)l(ws)f(that)i(distinct)e(areas)h(exist)g(for)
+ h(\014xed-size)-303 10755 y(stac)l(k)65 b(ob)9 b(jects,)68
+ b(v)-9 b(ariable)66 b(sized)g(stac)l(k)f(ob)9 b(jects,)69
+ b(and)d(temp)t(orary)4080 -137 y(stac)l(k)49 b(allo)t(cations)f(used)h
+ (for)h(outgoing)e(function)i(call)f(argumen)l(ts.)4080
+ 37 y(In)58 b(most)d(functions,)j(ho)l(w)l(ev)l(er,)g(no)e(v)-9
+ b(ariable)57 b(sized)g(stac)l(k)f(ob)9 b(jects)4080 211
+ y(\(created)47 b(with)f(the)h(`)p Fn(alloca)p Fl(')h(in)l(trinsic\))d
+ (are)h(ev)l(er)h(created,)h(whic)l(h)4080 386 y(mak)l(es)65
+ b(the)g(frame)g(p)t(oin)l(ter)g(and)g(stac)l(k)f(p)t(oin)l(ter)h
+ (registers)f(to)g(b)t(e)4080 560 y(equal)50 b(throughout)h(the)f(b)t(o)
+ t(dy)h(of)f(the)g(function.)68 b(In)51 b(this)e(case,)h(w)l(e)4080
+ 734 y(can)j(use)f(the)g(stac)l(k)g(p)t(oin)l(ter)g(in)g(all)f(op)t
+ (erations)h(whic)l(h)g(w)l(ould)g(use)4080 909 y(the)g(frame)g(p)t(oin)
+ l(ter,)g(allo)l(wing)e(the)i(frame)g(p)t(oin)l(ter)g(to)f(b)t(e)i(used)
+ f(as)4080 1083 y(an)g(additional)e(general-purp)t(ose)j(register.)4230
+ 1257 y(When)66 b(register)e(allo)t(cation)g(is)h(p)t(erformed,)70
+ b(the)65 b(register)g(allo-)4080 1432 y(cator)57 b(queries)g(the)g
+ (IA32)g(target)f(for)g(a)h(list)e(of)i(allo)t(catable)f(regis-)4080
+ 1606 y(ters)j(in)g(the)g(32-bit)g(in)l(teger)g(class.)90
+ b(If)59 b(the)g(curren)l(t)h(function)g(has)4080 1780
+ y(no)50 b(v)-9 b(ariable-sized)50 b(stac)l(k)f(ob)9 b(jects)49
+ b(\(whic)l(h)h(are)f(only)h(created)g(dur-)4080 1955
+ y(ing)64 b(instruction)f(selection\),)i(the)f(IA32)g(target)f(returns)h
+ (the)g Fn(EBP)4080 2129 y Fl(register)j(as)g(an)g(allo)t(catable)f
+ (register)h(in)g(addition)g(to)g(the)h(stan-)4080 2304
+ y(dard)h(registers.)117 b(When)69 b(the)f(prologue/epilogue)g(pass)g
+ (rewrites)4080 2478 y(abstract)j(frame)h(references)h(and)g
+ (pseudo-instructions,)j(it)71 b(uses)4080 2652 y(the)c(same)f(target)f
+ (ho)t(oks)i(to)e(do)i(the)f(target-sp)t(eci\014c)h(manipula-)4080
+ 2827 y(tion.)g(If)52 b(the)f(frame-p)t(oin)l(ter)g(elimination)e
+ (optimization)h(is)g(p)t(ossi-)4080 3001 y(ble,)41 b(these)f(ho)t(oks)e
+ (simply)g(rewrite)h(the)h(abstract)e(frame)h(references)4080
+ 3175 y(in)51 b(terms)g(of)g(the)h(stac)l(k)e(p)t(oin)l(ter)i(instead)f
+ (of)f(the)i(frame)f(p)t(oin)l(ter.)p 4080 3333 3986 9
+ v 4271 3565 a Fh(t)21 b(e)f(s)g(t)42 b(:)4441 3698 y(.)31
+ b(.)g(.)4429 3831 y(l)19 b(e)g(a)66 b(\045)15 b(r)e(e)g(g)g(1)g(0)g(2)g
+ (4)49 b(,)73 b(D)-22 b(W)g(O)g(R)g(D)45 b(P)-11 b(T)g(R)56
+ b([)21 b Fe(<)26 b Fh(s)16 b(t)g(a)g(c)g(k)111 b(o)14
+ b(b)g(j)78 b(#)9 b(0)18 b Fe(>)9 b Fh(])80 b Fg(;)71
+ b(&)-9 b(X)4431 3964 y Fh(a)21 b(d)g(j)g(c)g(a)h(l)e(l)h(s)f(t)h(a)g(c)
+ g(k)98 b(4)4400 4096 y Fi(m)-10 b(o)g(v)46 b Fh(D)-22
+ b(W)g(O)g(R)g(D)45 b(P)-11 b(T)g(R)86 b([)22 b(E)m(S)m(P)11
+ b(])29 b(,)74 b(\045)29 b(r)14 b(e)g(g)g(1)g(0)g(2)g(4)4428
+ 4229 y Fi(c)19 b(a)g(l)g(l)114 b Fh(f)16 b(o)g(o)4431
+ 4362 y(a)21 b(d)g(j)g(c)g(a)h(l)e(l)h(s)f(t)h(a)g(c)g(k)80
+ b Ff(\000)5 b Fh(4)4441 4495 y(.)31 b(.)g(.)4431 4628
+ y(a)21 b(d)g(j)g(c)g(a)h(l)e(l)h(s)f(t)h(a)g(c)g(k)98
+ b(8)4400 4761 y Fi(m)-10 b(o)g(v)46 b Fh(D)-22 b(W)g(O)g(R)g(D)45
+ b(P)-11 b(T)g(R)86 b([)22 b(E)m(S)m(P)c(])44 b(,)88 b(2)4400
+ 4893 y Fi(m)-10 b(o)g(v)46 b Fh(D)-22 b(W)g(O)g(R)g(D)45
+ b(P)-11 b(T)g(R)86 b([)22 b(E)m(S)m(P)80 b(+)j(4)19 b(])38
+ b(,)83 b(3)4428 5026 y Fi(c)19 b(a)g(l)g(l)110 b Fh(b)12
+ b(a)g(r)4431 5159 y(a)21 b(d)g(j)g(c)g(a)h(l)e(l)h(s)f(t)h(a)g(c)g(k)80
+ b Ff(\000)5 b Fh(8)4441 5292 y(.)31 b(.)g(.)4422 5425
+ y Fi(r)12 b(e)g(t)5278 5593 y Fl(\(a\))50 b(Abstract)h(Jello)f(Co)t(de)
+ 4510 5946 y Fh(t)20 b(e)h(s)f(t)41 b(:)4651 6079 y Fi(s)s(u)s(b)80
+ b Fh(E)m(S)m(P)19 b(,)90 b(1)23 b(2)268 b Fg(;)114 b(r)16
+ b(e)g(s)g(e)g(r)g(v)g(e)123 b(a)25 b(l)f(l)119 b(s)16
+ b(t)g(a)g(c)g(k)111 b(s)12 b(p)g(a)g(c)g(e)4679 6212
+ y Fh(.)31 b(.)g(.)4667 6345 y(l)19 b(e)g(a)88 b(E)-9
+ b(A)g(X)7 b(,)72 b(D)-22 b(W)g(O)g(R)g(D)45 b(P)-11 b(T)g(R)87
+ b([)21 b(E)m(S)m(P)81 b(+)i(8)20 b(])261 b Fg(;)71 b(&)-9
+ b(X)4638 6477 y Fi(m)f(o)g(v)46 b Fh(D)-22 b(W)g(O)g(R)g(D)45
+ b(P)-11 b(T)g(R)86 b([)22 b(E)m(S)m(P)e(])47 b(,)80 b(E)-12
+ b(A)g(X)4667 6610 y Fi(c)19 b(a)g(l)g(l)113 b Fh(f)16
+ b(o)g(o)4679 6743 y(.)31 b(.)g(.)4638 6876 y Fi(m)-10
+ b(o)g(v)46 b Fh(D)-22 b(W)g(O)g(R)g(D)45 b(P)-11 b(T)g(R)86
+ b([)22 b(E)m(S)m(P)d(])43 b(,)88 b(2)4638 7009 y Fi(m)-10
+ b(o)g(v)46 b Fh(D)-22 b(W)g(O)g(R)g(D)45 b(P)-11 b(T)g(R)86
+ b([)22 b(E)m(S)m(P)80 b(+)j(4)19 b(])38 b(,)83 b(3)4667
+ 7142 y Fi(c)19 b(a)g(l)g(l)109 b Fh(b)12 b(a)g(r)4679
+ 7274 y(.)31 b(.)g(.)4648 7407 y Fi(add)76 b Fh(E)m(S)m(P)19
+ b(,)90 b(1)23 b(2)268 b Fg(;)115 b(r)18 b(e)g(s)g(t)g(o)g(r)g(e)120
+ b(a)25 b(l)f(l)119 b(s)16 b(t)g(a)g(c)g(k)111 b(s)12
+ b(p)g(a)g(c)g(e)4660 7540 y Fi(r)g(e)g(t)5392 7709 y
+ Fl(\(b\))51 b(Final)g(Jello)f(Co)t(de)4728 7949 y(Figure)i(5:)68
+ b(Jello)50 b(co)t(de)i(generation)g(example)p 4080 8032
+ V 4230 8314 a(The)68 b(frame)g(p)t(oin)l(ter)g(optimization)f(enables)h
+ (t)l(w)l(o)f(other)i(opti-)4080 8489 y(mizations)49 b(whic)l(h)i(also)e
+ (help)h(common)h(cases.)67 b(In)51 b(particular,)f(if)f(a)4080
+ 8663 y(function)60 b(con)l(tains)e(calls)g(to)h(other)g(functions,)i(w)
+ l(e)e(can)h(optimize)4080 8837 y(computation)c(of)f(the)h(outgoing)f
+ (argumen)l(t)h(area)f(for)h(these)g(calls.)4080 9012
+ y(Using)64 b(the)h(`)p Fn(adjcallstack)p Fl(')k(pseudo-instruction,)f
+ (describ)t(ed)e(in)4080 9186 y(Section)56 b(2.2,)g(Jello)f(computes)h
+ (the)g(size)g(of)f(the)h(largest)f(outgoing)4080 9360
+ y(argumen)l(t)73 b(area)g(\(in)f(Figure)i(5\(a\),)j(the)c(maxim)l(um)f
+ (is)g(8)h(b)l(ytes\))4080 9535 y(and)64 b(preallo)t(cates)e(space)h
+ (for)g(the)g(outgoing)g(argumen)l(t)g(areas)f(in)4080
+ 9709 y(the)43 b(same)f(instruction)g(that)h(it)f(allo)t(cates)f(space)i
+ (for)f(\014xed-size)i(ob-)4080 9883 y(jects.)80 b(F)-13
+ b(or)55 b(the)h(example,)g(the)g(\014nal)f(co)t(de)h(generated)g(b)l(y)
+ f(Jello)g(is)4080 10058 y(sho)l(wn)c(in)g(Figure)h(5\(b\).)4230
+ 10232 y(If)43 b(a)g(function)h(do)t(es)f(not)g(call)g(other)g
+ (functions,)i(i.e.,)f(it)e(is)h(a)g(\\leaf)4080 10406
+ y(function",)53 b(and)g(there)g(are)g(no)g(v)-9 b(ariable)53
+ b(sized)f(stac)l(k)g(ob)9 b(jects,)52 b(w)l(e)4080 10581
+ y(can)74 b(p)t(erform)h(a)f(di\013eren)l(t)f(optimization.)135
+ b(In)74 b(this)f(case,)79 b(there)4080 10755 y(is)74
+ b(no)g(need)h(to)f(adjust)g(the)g(stac)l(k)g(p)t(oin)l(ter)g(on)g(en)l
+ (try)h(and)f(exit)p eop end
+ %%Page: 7 7
+ TeXDict begin 7 6 bop -303 -137 a Fl(to)74 b(the)g(function)h(at)f
+ (all.)137 b(Instead,)81 b(the)74 b(IA32)h(target)f(rewrites)-303
+ 37 y(frame)53 b(references)j(to)d(use)h(o\013sets)e(from)i(the)g
+ Fj(original)h Fl(v)l(ersion)e(of)-303 211 y(the)f(stac)l(k)g(p)t(oin)l
+ (ter)h(to)f(access)g(stac)l(k)g(ob)9 b(jects)51 b(\\o\013)h(the)h(b)t
+ (ottom)f(of)-303 386 y(the)47 b(stac)l(k".)66 b(Eliminating)45
+ b(the)i(stac)l(k)f(p)t(oin)l(ter)h(adjustmen)l(t)g(in)g(the)-303
+ 560 y(function)i(sa)l(v)l(es)f(one)h(instruction)g(on)g(en)l(try)-13
+ b(,)49 b(and)h(one)f(instruction)-303 734 y(in)70 b(eac)l(h)g(exit)g
+ (of)g(the)h(function.)125 b(Note)70 b(that)g(this)f(optimization)-303
+ 909 y(applies)45 b(to)g(large)f(leaf)i(functions)f(just)g(as)f(w)l(ell)
+ h(as)g(it)g(do)t(es)g(to)g(small)-303 1083 y(leaf)51
+ b(functions,)f(whic)l(h)i(w)l(ould)f(probably)g(b)t(e)h(inlined)g(an)l
+ (yw)l(a)l(y)-13 b(.)-303 1388 y Fm(6.4)198 b(Big\255Endian)49
+ b(and)g(Long)g(P)l(ointer)i(Emulation)-154 1603 y Fl(A)86
+ b(problem)g(for)g(the)g(Jello)f(pro)9 b(ject)86 b(w)l(as)e(that)i(the)g
+ (curren)l(t)-303 1778 y(LL)-17 b(VM)62 b(C)g(fron)l(t-end)h(only)f
+ (generates)g(LL)-17 b(VM)62 b(b)l(yteco)t(de)h(for)f(the)-303
+ 1952 y(Sparc)i(V9)f(target.)104 b(This)62 b(is)h(problematic)g(for)g
+ (the)h(IA32)g(target,)-303 2126 y(since)41 b(non-t)l(yp)t(e-safe)i
+ (programs)d(will)h(fail)f(b)t(ecause)j(of)e(p)t(oin)l(ter)h(size)-303
+ 2301 y(\(64)50 b Fk(vs.)68 b Fl(32)51 b(bits\))f(and)h(endianness)h
+ (\(big)f Fk(vs.)68 b Fl(little\))49 b(di\013erences.)-154
+ 2475 y(Our)57 b(initial)d(solution)h(to)h(the)g(problem,)i(whic)l(h)e
+ (is)f(in)l(tended)i(to)-303 2649 y(b)t(e)70 b(temp)t(orary)-13
+ b(,)75 b(is)69 b(to)g Fk(emulate)h Fl(a)g(big-endian)g(64-bit)f(target)
+ g(as)-303 2824 y(necessary)-13 b(.)67 b(During)49 b(the)g(instruction)f
+ (selection)g(phase,)h(all)e(v)-9 b(alues)-303 2998 y(loaded)60
+ b(from)f(memory)h(are)g(b)l(yte-sw)l(app)t(ed)h(after)e(the)h(load,)h
+ (and)-303 3172 y(all)55 b(v)-9 b(alues)56 b(to)f(b)t(e)i(stored)f(to)f
+ (memory)i(are)f(b)l(yte-sw)l(app)t(ed)h(b)t(efore)-303
+ 3347 y(the)70 b(store.)123 b(T)-13 b(o)70 b(em)l(ulate)f(64-bit)h(p)t
+ (oin)l(ters,)j(w)l(e)d(simply)f(use)h(the)-303 3521 y(lo)l(w)62
+ b(32-bits)h(as)g(the)h(actual)f(p)t(oin)l(ter)h(v)-9
+ b(alue.)106 b(This)63 b(em)l(ulation)g(is)-303 3696 y(con)l(trollable)
+ 56 b(b)l(y)h(a)f(\015ag)h(in)g(the)g(b)l(yteco)t(de)h(indicating)e
+ (prop)t(erties)-303 3870 y(of)51 b(the)g(target)g(that)g(the)g(b)l
+ (yteco)t(de)h(is)f(compiled)g(for.)-154 4044 y(This)71
+ b(em)l(ulation)g(imp)t(oses)f(a)i(fairly)e(hea)l(vy)i(run-time)g(p)t
+ (erfor-)-303 4219 y(mance)55 b(cost)e(\(esp)t(ecially)h(for)g
+ (\015oating-p)t(oin)l(t)g(co)t(des,)h(whic)l(h)f(m)l(ust)-303
+ 4393 y(load)45 b(v)-9 b(alues)47 b(in)l(to)e(in)l(teger)i(registers)e
+ (to)h(p)t(erform)h(the)g(b)l(yte-sw)l(ap\),)-303 4567
+ y(but)60 b(has)g(b)t(een)h(critical)e(to)h(get)g(the)g(Jello)f(JIT)i
+ (compiler)f(up)g(and)-303 4742 y(running)c(quic)l(kly)-13
+ b(.)83 b(In)56 b(practice,)h(w)l(e)f(ha)l(v)l(e)g(found)h(that)e(this)h
+ (giv)l(es)-303 4916 y(us)48 b(almost)g(complete)h(compatibilit)l(y)f
+ (with)g(Sparc)i(b)l(yteco)t(de)g(\014les.)-303 5090 y(W)-13
+ b(ork)37 b(is)h(no)l(w)f(progressing)h(on)g(a)f(retargetable)h(C)g
+ (fron)l(t-end)g(whic)l(h)-303 5265 y(will)50 b(allo)l(w)g(us)h(to)f
+ (o\013er)h(comp)t(etitiv)l(e)g(p)t(erformance)i(on)e(the)h(IA32.)-303
+ 5658 y Fm(7.)198 b(THE)50 b(JELLO)f(VIR)-8 b(TU)c(AL)49
+ b(MA)-11 b(CHINE)-154 5873 y Fl(Being)39 b(a)g(Just-In-Time)h
+ (compiler,)h(Jello)d(m)l(ust)h(b)t(e)h(able)f(to)f(com-)-303
+ 6048 y(pile)70 b(a)h(function,)76 b(start)70 b(execution)h(of)g(the)g
+ (function,)76 b(and)71 b(then)-303 6222 y(regain)54 b(con)l(trol)h(if)f
+ (a)h(call)f(to)g(an)h(uncompiled)h(function)f(executes.)-303
+ 6397 y(In)k(order)g(to)g(supp)t(ort)g(this,)g(Jello)f(curren)l(tly)h
+ (emits)f(call)h(instruc-)-303 6571 y(tions)44 b(that)h(target)f
+ (functions)h(whic)l(h)h(ha)l(v)l(e)f(not)g(b)t(een)i(compiled)e(as)-303
+ 6745 y(if)64 b(they)i(called)f(a)g(n)l(ull)g(p)t(oin)l(ter.)111
+ b(When)66 b(the)f(call)g(instruction)f(is)-303 6920 y(executed,)52
+ b(a)f(segmen)l(tation)f(fault)h(will)f(b)t(e)i(generated.)-154
+ 7094 y(Jello)39 b(installs)f(a)i(trap)g(handler)h(for)e
+ Fn(SIGSEGV)p Fl(,)k(the)e(segmen)l(tation)-303 7268 y(fault)54
+ b(signal)f(in)h(Unix,)h(in)g(order)g(to)f(trap)g(these)h(ev)l(en)l(ts.)
+ 78 b(When)55 b(a)-303 7443 y Fn(SIGSEGV)c Fl(is)c(deliv)l(ered)h(to)g
+ (Jello,)f(w)l(e)h(\014rst)g(c)l(hec)l(k)g(to)g(see)g(if)f(it's)g(due)
+ -303 7617 y(to)65 b(lazy)h(function)h(compilation;)72
+ b(if)66 b(so,)j(w)l(e)d(lo)t(ok)g(up)g(the)h(return)-303
+ 7791 y(address)35 b(of)h(the)g(function)g(call)g(\(whic)l(h)f(w)l(as)g
+ (pushed)i(on)l(to)e(the)i(stac)l(k)-303 7966 y(b)l(y)70
+ b(the)h(call)f(instruction\).)125 b(Giv)l(en)70 b(the)h(return)h
+ (address)e(of)g(the)-303 8140 y(call,)43 b(w)l(e)g(consult)f(a)g(hash)l
+ (table)h(to)f(\014gure)h(out)g(whic)l(h)g(function)g(w)l(as)-303
+ 8314 y(supp)t(osed)52 b(to)e(b)t(e)j(called)e(from)g(that)g(lo)t
+ (cation.)-154 8489 y(If)i(the)g(function)g(has)f(not)h(y)l(et)f(had)h
+ (co)t(de)g(generated)h(for)e(it,)g(the)-303 8663 y(co)t(de)46
+ b(generator)g(is)g(in)l(v)l(ok)l(ed)f(at)g(this)h(time.)65
+ b(Finally)-13 b(,)47 b(the)f(program)-303 8837 y(coun)l(ter)51
+ b(of)g(the)h(pro)t(cess)g(is)e(mo)t(di\014ed)i(to)f(p)t(oin)l(t)g(to)g
+ (the)h(real)f(func-)-303 9012 y(tion)40 b(address,)i(the)f(original)e
+ (call)h(instruction)g(is)g(up)t(dated)i(to)e(p)t(oin)l(t)-303
+ 9186 y(to)62 b(the)i(newly-generated)g(co)t(de,)j(and)c(the)h
+ Fn(SIGSEGV)i Fl(handler)e(re-)-303 9360 y(turns,)55 b(causing)g
+ (execution)h(to)f(con)l(tin)l(ue)g(in)g(the)h(called)f(function.)-303
+ 9535 y(Because)60 b(w)l(e)g(up)t(date)h(the)f(original)e(call)i
+ (instruction,)h(w)l(e)f(should)-303 9709 y(only)42 b(get)h(at)g(most)f
+ (one)h(signal)f(for)h(eac)l(h)g(call)g(site.)64 b(This)43
+ b(tec)l(hnique)-303 9883 y(is)60 b(kno)l(wn)i(as)f(\\c)l(haining",)i
+ (and)f(is)f(a)g(w)l(ell-kno)l(wn)g(tec)l(hnique)i(for)-303
+ 10058 y(b)l(ypassing)40 b(the)i(main)f(translation)f(lo)t(op)h(of)g(a)g
+ (virtual)g(mac)l(hine)h([3].)-154 10232 y(Note)56 b(that)g(this)f
+ (approac)l(h)h(do)t(es)h(not)e(w)l(ork)h(for)g(indirect)g(calls.)-303
+ 10406 y(The)43 b(problem)h(with)f(indirect)g(calls)f(is)g(that)h
+ (taking)f(the)i(address)f(of)-303 10581 y(a)c(function)h(w)l(ould)f
+ (not)g(cause)h(a)f(fault)g(\(it)f(w)l(ould)i(simply)e(cop)l(y)i(n)l
+ (ull)-303 10755 y(in)l(to)e(a)g(register\),)i(so)e(w)l(e)h(w)l(ould)f
+ (only)h(\014nd)h(out)e(ab)t(out)h(the)g(problem)4080
+ -137 y(when)72 b(the)g(indirect)f(call)g(itself)f(w)l(as)g(made.)129
+ b(A)l(t)71 b(this)f(p)t(oin)l(t)h(w)l(e)4080 37 y(w)l(ould)57
+ b(ha)l(v)l(e)g(no)g(w)l(a)l(y)f(of)g(kno)l(wing)h(what)g(the)g(in)l
+ (tended)h(function)4080 211 y(destination)g(w)l(as.)88
+ b(Because)59 b(of)f(this,)h(w)l(e)g(immediately)f(generate)4080
+ 386 y(co)t(de)43 b(for)f(a)f(function)i Fc(f)57 b Fl(whenev)l(er)44
+ b(w)l(e)e(generate)g(co)t(de)h(for)f(another)4080 560
+ y(function)47 b(or)f(initialize)f(a)h(global)f(v)-9 b(alue)47
+ b(that)f(requires)h(us)f(to)f(kno)l(w)4080 734 y(the)61
+ b(address)f(of)g Fc(f)16 b Fl(,)62 b(side-stepping)e(the)h(problem)g
+ (completely)-13 b(.)95 b(A)4080 909 y(future)67 b(extension)f(to)g
+ (this)g(mec)l(hanism)g(w)l(ould)g(b)t(e)h(to)f(generate,)4080
+ 1083 y(as)58 b(a)g(resp)t(onse)g(to)g(the)g(need)i(for)e(function)g(p)t
+ (oin)l(ters,)i Fk(tr)-8 b(amp)g(oline)4080 1257 y(functions)54
+ b Fl(whic)l(h)g(let)f(us)h(kno)l(w)f(dynamically)g(when)h(a)g
+ (function's)4080 1432 y(co)t(de)e(needs)g(to)f(b)t(e)h(generated.)4230
+ 1606 y(Using)66 b(the)h Fn(SIGSEGV)k Fl(trap)66 b(for)h(this)f(purp)t
+ (ose)i(migh)l(t)f(seem)g(to)4080 1780 y(cause)78 b(problems)g(for)f
+ (programs)g(that)h(handle)g Fn(SIGSEGV)j Fl(them-)4080
+ 1955 y(selv)l(es,)86 b(b)t(ecause)81 b(the)f(signal)f(w)l(ould)h(not)f
+ (b)t(e)i(deliv)l(ered)g(to)e(the)4080 2129 y(program)66
+ b(whic)l(h)g(registered)f(its)g(o)l(wn)h Fn(SIGSEGV)i
+ Fl(handler.)112 b(Ho)l(w-)4080 2304 y(ev)l(er,)65 b(Jello)60
+ b(kno)l(ws)h(whether)i(a)e(trapp)t(ed)i Fn(SIGSEGV)i
+ Fl(is)c(due)h(to)f(its)4080 2478 y(lazy)70 b(function)h(resolution)e
+ (mec)l(hanism)h(or)g(not,)k(and)d(generates)4080 2652
+ y(the)59 b(co)t(de)h(whic)l(h)f(ultimately)f(ma)l(y)g(register)h(the)g
+ (signal)f(handler.)4080 2827 y(As)50 b(suc)l(h,)h(it)f(recognizes)g
+ (calls)g(to)g Fn(signal)j Fl(and)e Fn(sigaction)j Fl(whic)l(h)4080
+ 3001 y(are)48 b(trying)e(to)h(install)e(or)i(insp)t(ect)h(the)g(curren)
+ l(t)f Fn(SIGSEGV)k Fl(handler.)4080 3175 y(By)39 b(generating)h(co)t
+ (de)g(to)e(in)l(tercept)i(this)f(call,)h(Jello)f(can)g(record)i(at-)
+ 4080 3350 y(tempts)46 b(to)g(mo)t(dify)g(the)g(handler)h(and)g(return)g
+ (information)e(ab)t(out)4080 3524 y(the)72 b(logically)d(installed)h
+ (handler.)129 b(An)l(ytime)71 b(a)g Fn(SIGSEGV)j Fl(is)d(re-)4080
+ 3698 y(ceiv)l(ed)54 b(that)f(do)t(es)g(not)h(come)f(from)g(a)g
+ (recognized)i(call)d(site,)h(Jello)4080 3873 y(dispatc)l(hes)45
+ b(to)g(the)g(program's)g(logical)f(signal)g(handler)i(instead)f(of)4080
+ 4047 y(ab)t(orting)51 b(the)h(program.)4080 4437 y Fm(8.)199
+ b(EXPERIENCES)48 b(AND)h(OBSER)-11 b(V)-27 b(A)-19 b(TIONS)4230
+ 4653 y Fl(Dev)l(elopmen)l(t)75 b(on)g(the)g(Jello)g(pro)9
+ b(ject)74 b(is)g(curren)l(tly)i(far)e(from)4080 4827
+ y(o)l(v)l(er.)103 b(W)-13 b(e)64 b(are)f(no)l(w)g(at)f(a)h(p)t(oin)l(t)
+ g(in)g(time)f(where)i(the)g(co)t(de)g(gen-)4080 5002
+ y(eration)d(infrastructure)g(is)f(w)l(ell-dev)l(elop)t(ed,)k(and)d(the)
+ g(generated)4080 5176 y(co)t(de)g(is)f(stable)g(and)g(w)l(orks)g(for)g
+ (ev)l(ery)h(co)t(de)g(w)l(e)f(tested,)i(ev)l(en)f(in)4080
+ 5350 y(big-endian)45 b(\\em)l(ulation")f(mo)t(de.)66
+ b(Ho)l(w)l(ev)l(er,)45 b(the)g(p)t(erformance)h(of)4080
+ 5525 y(the)64 b(generated)g(co)t(de)g(is)f(appro)l(ximately)f(a)h
+ (factor)g(of)g(t)l(w)l(o)f(times)4080 5699 y(slo)l(w)l(er)36
+ b(than)i(the)f(co)t(de)h(generated)g(b)l(y)g(a)f(static)f(compiler)h
+ (\(whic)l(h)g(is)4080 5873 y(primarily)45 b(due)h(to)e(the)i(b)l
+ (yte-sw)l(apping)f(instructions)f(imp)t(osed)h(b)l(y)4080
+ 6048 y(em)l(ulation)50 b(mo)t(de)g(and)h(the)f(lac)l(k)g(of)g(a)f
+ (global)g(register)h(allo)t(cator\).)4230 6222 y(Although)c(the)g
+ (absolute)g(p)t(erformance)h(of)f(the)g(generated)h(co)t(de)4080
+ 6397 y(is)62 b(not)h(y)l(et)f(comp)t(etitiv)l(e,)j(w)l(e)e(ha)l(v)l(e)g
+ (learned)g(a)g(n)l(um)l(b)t(er)g(of)g(v)-9 b(alu-)4080
+ 6571 y(able)50 b(lessons.)66 b(In)51 b(particular,)f(w)l(e)f(feel)i
+ (that)e(our)h(goal)f(of)h(dev)l(elop-)4080 6745 y(ing)j(a)g
+ (retargetable)g(co)t(de)i(generator)e(has)g(b)t(een)i(a)e(success:)71
+ b(there)4080 6920 y(is)85 b(a)h(clear)g(distinction)f(b)t(et)l(w)l(een)
+ i(target-sp)t(eci\014c)g(and)g(target-)4080 7094 y(indep)t(enden)l(t)39
+ b(co)t(de)e(and)g(a)f(large)h(amoun)l(t)f(of)g(the)h(co)t(de)g(is)f
+ (sharable.)4230 7268 y(When)50 b(dev)l(eloping)g(the)g(co)t(de)h
+ (generation)e(in)l(terfaces,)h(w)l(e)f(tried)4080 7443
+ y(to)43 b(an)l(ticipate)f(the)h(t)l(yp)t(es)g(of)f(arc)l(hitectural)h
+ (c)l(hallenges)g(that)f(other)4080 7617 y(targets)47
+ b(migh)l(t)h(ha)l(v)l(e)g(whic)l(h)g(could)g(b)t(e)h(di\016cult)f(to)g
+ (prop)t(erly)h(sup-)4080 7791 y(p)t(ort.)117 b(In)68
+ b(particular,)j(w)l(e)c(feel)h(that)f(writing)f(a)i(new)g(target)e(for)
+ 4080 7966 y(the)56 b(Sparc)g(V9)f(arc)l(hitecture)h(should)g(b)t(e)g
+ (straigh)l(t-forw)l(ard,)e(ev)l(en)4080 8140 y(giv)l(en)35
+ b(features)h(lik)l(e)e(register)h(windo)l(ws,)i(branc)l(h)g(dela)l(y)e
+ (slots,)h(more)4080 8314 y(complex)i(calling)f(con)l(v)l(en)l(tions,)j
+ (and)e(aliasing)e(among)i(the)g(\015oating)4080 8489
+ y(p)t(oin)l(t)51 b(register)g(\014le.)4230 8663 y(Another)58
+ b(k)l(ey)g(lesson)g(learned)g(is)f(that)h(the)g(LL)-17
+ b(VM)58 b(virtual)f(in-)4080 8837 y(struction)37 b(set)f(w)l(orks)g(w)l
+ (ell)g(as)h(input)g(to)f(the)i(JIT)f(compiler.)63 b(In)38
+ b(par-)4080 9012 y(ticular,)48 b(not)f(ha)l(ving)h(to)f(p)t(erform)h
+ (extensiv)l(e)g(optimization)e(of)i(the)4080 9186 y(input)65
+ b(program)g(at)g(run-time)g(and)g(ha)l(ving)g(the)g(input)g(program)
+ 4080 9360 y(in)53 b(SSA)h(form)f(b)t(oth)h(dramatically)e(sp)t(eed)i
+ (up)g(dynamic)g(compila-)4080 9535 y(tion.)72 b(Our)53
+ b(measuremen)l(ts)g(indicate)g(that)f(compiler)h(o)l(v)l(erhead)g(is)
+ 4080 9709 y(t)l(ypically)62 b(less)f(than)i(5\045)f(of)g(total)f
+ (execution)j(time)e(in)g(a)h(sample)4080 9883 y(of)d(test)f(programs,)i
+ (ev)l(en)g(when)g(the)f(co)t(de)h(generator)f(is)g(built)f(in)4080
+ 10058 y(debug)52 b(mo)t(de)g(with)f(extensiv)l(e)h(assertion)e(c)l(hec)
+ l(king)h(enabled.)4230 10232 y(T)-13 b(able)69 b(1)f(sho)l(ws)g
+ (aggregate)h(timing)f(information)g(for)g(v)-9 b(arious)4080
+ 10406 y(phases)76 b(of)f(compilation)f(o)l(v)l(er)h(a)h(suite)f(of)g
+ (40)g(b)t(enc)l(hmark)i(pro-)4080 10581 y(grams.)112
+ b(The)67 b(table)f(sho)l(ws)f(that)h(w)l(e)g(sp)t(end)h(a)f(ma)9
+ b(jorit)l(y)64 b(of)i(our)4080 10755 y(time)36 b(in)g(the)g(register)g
+ (allo)t(cator)f(and)h(liv)l(e-v)-9 b(ariable)36 b(phases)g(of)g(com-)p
+ eop end
+ %%Page: 8 8
+ TeXDict begin 8 7 bop 514 -297 2304 7 v 511 -147 7 150
+ v 603 -192 a Fb(Phase)p 2196 -147 V 1381 w(Time)p 2814
+ -147 V 514 -141 2304 7 v 511 9 7 150 v 603 -36 a(Lo)t(cal)46
+ b(Register)g(Allo)t(cator)p 2196 9 V 178 w(35.87\045)p
+ 2814 9 V 511 158 V 603 113 a(Liv)l(e)i(V)-12 b(ariable)47
+ b(Analysis)p 2196 158 V 302 w(32.35\045)p 2814 158 V
+ 511 308 V 603 263 a(Instruction)g(Selection)p 2196 308
+ V 411 w(14.83\045)p 2814 308 V 511 457 V 603 412 a(Prolog/Epilog)f
+ (Insertion)p 2196 457 V 261 w(8.14\045)p 2814 457 V 511
+ 607 V 603 562 a(Mac)l(hine)i(Co)t(de)e(Emitter)p 2196
+ 607 V 311 w(5.35\045)p 2814 607 V 511 756 V 603 711 a(P)l(eephole)h
+ (Optimizer)p 2196 756 V 507 w(1.37\045)p 2814 756 V 511
+ 905 V 603 861 a(FP)g(Stac)l(ki\014er)p 2196 905 V 914
+ w(1.10\045)p 2814 905 V 511 1055 V 603 1010 a(Eliminate)g(PHI)g(no)t
+ (des)p 2196 1055 V 426 w(0.95\045)p 2814 1055 V 514 1062
+ 2304 7 v 366 1182 a Fl(T)-13 b(able)51 b(1:)68 b(Compiler)51
+ b(o)l(v)l(erhead)h(breakdo)l(wn)-303 1643 y(pilation.)97
+ b(This)61 b(mak)l(es)g(sense)g(as)g(the)h(other)f(phases)h(are)f
+ (almost)-303 1817 y(all)k(implemen)l(ted)i(as)f(a)g(single)g(pass)g
+ (that)g(only)g(a\013ect)h(a)f(subset)-303 1992 y(of)50
+ b(the)i(instructions)e(in)h(the)g(program.)68 b(In)52
+ b(con)l(trast,)e(the)h(register)-303 2166 y(allo)t(cator)46
+ b(and)j(liv)l(e)e(v)-9 b(ariable)48 b(analysis)e(phases)i(m)l(ust)f
+ (insp)t(ect)h(and)-303 2341 y(mo)t(dify)39 b(eac)l(h)i(instruction)e
+ (in)h(the)g(program,)h(and)g(p)t(erform)f(sev)l(eral)-303
+ 2515 y(passes)50 b(eac)l(h.)-303 2897 y Fm(9.)198 b(RELA)-19
+ b(TED)49 b(W)n(ORK)-154 3113 y Fl(There)69 b(are)f(man)l(y)g(virtual)f
+ (mac)l(hines)h(for)f(programming)h(lan-)-303 3287 y(guages,)41
+ b(notably)f(the)g(Ja)l(v)-9 b(a)40 b(Virtual)g(Mac)l(hine)g([17])f
+ (with)h(its)f(man)l(y)-303 3462 y(optimizing)63 b(JIT)i(implemen)l
+ (tations)e(\(for)g(example,)68 b([2]\).)106 b(Other)-303
+ 3636 y(language-sp)t(eci\014c)73 b(JITs)f(exist,)k(including)d(the)g(P)
+ l(arrot)d(JIT)j(for)-303 3810 y(P)l(erl)50 b(6)h([12])f(and)i(Psyco)e
+ ([20])g(for)h(the)h(Python)f(language.)-154 3985 y(What)d(sets)g(Jello)
+ g(apart)g(from)g(these)h(VM)g(tec)l(hnologies)e(is)h(that)-303
+ 4159 y(it)d(is)h(a)g(JIT)h(compiler)g(for)f(the)h(C)f(language,)h(whic)
+ l(h)f(is)g(usually)g(not)-303 4333 y(compiled)55 b(to)g(an)g(abstract)f
+ (b)l(yteco)t(de)j(and)e(executed)i(with)e(a)f(JIT)-303
+ 4508 y(compiler.)64 b(Additionally)-13 b(,)43 b(unlik)l(e)e(the)g(v)l
+ (eri\014ably)g(safe)g(virtual)g(ma-)-303 4682 y(c)l(hines)53
+ b(lik)l(e)f(Ja)l(v)-9 b(a)53 b(and)g(Microsoft's)e(CLR)i([18],)f(the)i
+ (LL)-17 b(VM)52 b(b)l(yte-)-303 4856 y(co)t(de)62 b(represen)l(tation)g
+ (do)t(es)g(not)f(enco)t(de)i(implicit)e(safet)l(y)f(c)l(hec)l(ks)-303
+ 5031 y(whic)l(h)73 b(will)g(b)t(e)h(executed)h(at)e(run-time.)135
+ b(Th)l(us,)79 b(the)74 b(co)t(de)g(can)-303 5205 y(b)t(e)79
+ b(extensiv)l(ely)g(optimized)f(at)g(static)g(compile)g(time,)85
+ b(without)-303 5379 y(the)53 b(p)t(ossibilit)l(y)e(of)h(extra)h(co)t
+ (de)h(b)t(eing)g(inserted)f(during)g(dynamic)-303 5554
+ y(translation)j(to)i(nativ)l(e)g(co)t(de.)90 b(Also,)59
+ b(as)f(a)g(lo)l(w-lev)l(el)f(represen)l(ta-)-303 5728
+ y(tion)38 b([14],)h(LL)-17 b(VM)38 b(do)t(es)h(not)f(enco)t(de)i
+ (high-lev)l(el)f(language-sp)t(eci\014c)-303 5902 y(constructs)51
+ b(either)g(\(suc)l(h)g(as)g(classes)f(or)h(ob)9 b(jects\).)-154
+ 6077 y(Retargetable)73 b(compilers)g(ha)l(v)l(e)g(b)t(een)h(long)f
+ (studied)g(and)h(are)-303 6251 y(w)l(ell)g(understo)t(o)t(d.)142
+ b(Examples)74 b(include)i Fa(v)m(code)g Fl([6],)k(DCG)75
+ b([7],)-303 6425 y Fa(F)-17 b(abius)52 b Fl([15],)f(and)i(GCC)f([11].)
+ 71 b(Dynamic)53 b(compilation)f(has)g(b)t(een)-303 6600
+ y(used)36 b(for)g(man)l(y)g(other)h(purp)t(oses,)i(including)e
+ (reoptimization)e(from)-303 6774 y(mac)l(hine)51 b(co)t(de)h([1].)-303
+ 7156 y Fm(10.)198 b(CONCLUSION)-154 7372 y Fl(Jello)50
+ b(is)g(designed)h(as)f(an)h(e\016cien)l(t)g(retargetable)f
+ (Just-In-Time)-303 7546 y(compiler)45 b(for)h(LL)-17
+ b(VM)45 b(b)l(yteco)t(de.)67 b(W)-13 b(e)46 b(ha)l(v)l(e)g(describ)t
+ (ed)h(the)f(design)-303 7721 y(and)55 b(implemen)l(tation)g(of)f(the)i
+ (system,)f(detailing)f(the)h(imp)t(ortan)l(t)-303 7895
+ y(design)61 b(features)h(whic)l(h)f(mak)l(e)h(it)f(mo)t(dular)g(and)h
+ (largely)f(target-)-303 8069 y(indep)t(enden)l(t.)91
+ b(W)-13 b(e)58 b(plan)h(to)e(use)i(Jello)e(as)h(a)g(test-b)t(ed)h(for)f
+ (future)-303 8244 y(researc)l(h)i(in)g(virtual)f(mac)l(hine)h(tec)l
+ (hnologies)g(and)g(run)l(time)g(opti-)-303 8418 y(mization)45
+ b(for)i(C)f(co)t(des,)i(taking)e(adv)-9 b(an)l(tage)46
+ b(of)h(these)f(mo)t(dularit)l(y)-13 b(,)-303 8593 y(extensibilit)l(y)50
+ b(and)h(p)t(ortabilit)l(y)f(features.)-303 8975 y Fm(11.)198
+ b(REFERENCES)-227 9153 y Fl([1])74 b(V.)51 b(Bala,)f(E.)h(Duesterw)l
+ (ald,)g(and)g(S.)g(Banerjia.)g(Dynamo:)68 b(a)10 9327
+ y(transparen)l(t)51 b(dynamic)h(optimization)e(system.)g
+ Fk(A)l(CM)10 9502 y(SIGPLAN)56 b(Notic)-8 b(es)p Fl(,)50
+ b(35\(5\):1{12,)e(2000.)-227 9692 y([2])74 b(M.)51 b(G.)f(Burk)l(e,)h
+ (J.-D.)g(Choi,)g(S.)g(Fink,)g(D.)g(Gro)l(v)l(e,)g(M.)f(Hind,)10
+ 9867 y(V.)h(Sark)-9 b(ar,)52 b(M.)e(J.)h(Serrano,)h(V.)f(C.)g
+ (Sreedhar,)10 10041 y(H.)g(Sriniv)-9 b(asan,)51 b(and)h(J.)f(Whaley)-13
+ b(.)51 b(The)h(Jalap)t(e)t(~)-81 b(no)51 b(Dynamic)10
+ 10216 y(Optimizing)g(Compiler)g(for)g(Ja)l(v)-9 b(a.)51
+ b(In)h Fk(Java)j(Gr)-8 b(ande)p Fl(,)51 b(pages)10 10390
+ y(129{141,)f(1999.)-227 10581 y([3])74 b(R.)51 b(Cmelik)g(and)h(D.)f
+ (Kepp)t(el.)h(Shade:)69 b(A)52 b(fast)10 10755 y(instruction-set)f(sim)
+ l(ulator)e(for)i(execution)h(pro\014ling.)f Fk(A)l(CM)4394
+ -137 y(SIGMETRICS)j(Performanc)-8 b(e)55 b(Evaluation)i(R)-8
+ b(eview)p Fl(,)4394 37 y(22\(1\):128{137,)48 b(Ma)l(y)i(1994.)4157
+ 228 y([4])74 b(R.)51 b(Cytron,)g(J.)f(F)-13 b(erran)l(te,)52
+ b(B.)f(K.)g(Rosen,)g(M.)f(N.)i(W)-13 b(egman,)4394 402
+ y(and)51 b(F.)h(K.)f(Zadec)l(k.)g(E\016cien)l(tly)g(computing)g(static)
+ f(single)4394 577 y(assignmen)l(t)g(form)h(and)h(the)f(con)l(trol)g
+ (dep)t(endence)j(graph.)4394 751 y Fk(A)l(CM)g(T)-12
+ b(r)k(ansactions)56 b(on)f(Pr)-8 b(o)g(gr)g(amming)56
+ b(L)-8 b(anguages)55 b(and)4394 925 y(Systems)p Fl(,)c(pages)g
+ (13\(4\):451{490,)d(Octob)t(er)k(1991.)4157 1116 y([5])74
+ b(J.)51 b(W.)f(Da)l(vidson)h(and)h(D.)f(B.)g(Whalley)-13
+ b(.)50 b(Quic)l(k)i(compilers)4394 1291 y(using)f(p)t(eephole)i
+ (optimization.)c Fk(Softwar)-8 b(e)56 b(-)e(Pr)-8 b(actic)g(e)54
+ b(and)4394 1465 y(Exp)-8 b(erienc)g(e)p Fl(,)50 b(19\(1\):79{97,)e
+ (1989.)4157 1656 y([6])74 b(D.)51 b(R.)g(Engler.)f Fa(v)m(code)p
+ Fl(:)69 b(a)51 b(retargetable,)g(extensible,)g(v)l(ery)4394
+ 1830 y(fast)f(dynamic)i(co)t(de)g(generation)f(system.)f(In)i
+ Fk(SIGPLAN)4394 2005 y(Confer)-8 b(enc)g(e)54 b(on)h(Pr)-8
+ b(o)g(gr)g(amming)56 b(L)-8 b(anguage)56 b(Design)e(and)4394
+ 2179 y(Implementation)p Fl(,)f(pages)e(160{170,)e(1996.)4157
+ 2370 y([7])74 b(D.)51 b(R.)g(Engler)g(and)g(T.)g(A.)g(Pro)t(ebsting.)g
+ (DCG:)f(an)h(e\016cien)l(t,)4394 2544 y(retargetable)g(dynamic)h(co)t
+ (de)g(generation)f(system.)f(In)4394 2719 y Fk(Pr)-8
+ b(o)g(c)g(e)g(e)g(dings)54 b(of)i(the)f(sixth)f(international)j(c)-8
+ b(onfer)g(enc)g(e)54 b(on)4394 2893 y(A)l(r)-8 b(chite)g(ctur)g(al)55
+ b(supp)-8 b(ort)56 b(for)f(pr)-8 b(o)g(gr)g(amming)56
+ b(languages)f(and)4394 3067 y(op)-8 b(er)g(ating)55 b(systems)p
+ Fl(,)c(pages)g(263{272.)e(A)l(CM)i(Press,)f(1994.)4157
+ 3258 y([8])74 b(M.)50 b(A.)h(Ertl.)f(Optimal)h(co)t(de)h(selection)f
+ (in)g(D)l(A)l(Gs.)f(In)4394 3433 y Fk(Principles)k(of)i(Pr)-8
+ b(o)g(gr)g(amming)56 b(L)-8 b(anguages)55 b(\(POPL)f('99\))p
+ Fl(,)4394 3607 y(1999.)4157 3798 y([9])74 b(C.)51 b(W.)f(F)-13
+ b(raser,)51 b(R.)g(R.)g(Henry)-13 b(,)52 b(and)g(T.)f(A.)g(Pro)t
+ (ebsting.)4394 3972 y(BUR)l(G)f(|)h(fast)f(optimal)g(instruction)h
+ (selection)g(and)h(tree)4394 4147 y(parsing.)e Fk(A)l(CM)55
+ b(SIGPLAN)g(Notic)-8 b(es,)54 b(27\(4\))p Fl(,)e(Apr)g(1992.)4080
+ 4338 y([10])74 b(C.)51 b(W.)f(F)-13 b(raser)52 b(and)f(T.)g(A.)g(Pro)t
+ (ebsting.)g(Finite-state)f(co)t(de)4394 4512 y(generation.)h
+ Fk(A)l(CM)j(SIGPLAN)h(Notic)-8 b(es)p Fl(,)51 b(34\(5\),)e(1999.)4080
+ 4703 y([11])74 b(F)-13 b(ree)52 b(Soft)l(w)l(are)f(F)-13
+ b(oundation.)51 b(GNU)g(Compiler)g(Collection.)4394 4877
+ y Fk(http://gc)-8 b(c.gnu.or)g(g)p Fl(.)4080 5068 y([12])74
+ b(D.)51 b(Grun)l(blatt)f(and)i(A.)f(B.)g(Hansen.)g(P)l(arrot)f(JIT)4394
+ 5243 y(subsystem.)4394 5417 y Fk(http://www.p)-8 b(arr)g(otc)g(o)g
+ (de.or)g(g/do)g(cs/jit.p)g(o)g(d.html)p Fl(.)4080 5608
+ y([13])74 b(C.)51 b(Lattner.)f(LL)-17 b(VM:)51 b(An)h(infrastructure)f
+ (for)g(m)l(ulti-stage)4394 5782 y(optimization.)e(Master's)h(thesis,)g
+ (Computer)i(Science)4394 5956 y(Dept.,)f(Univ)l(ersit)l(y)f(of)h
+ (Illinois)f(at)h(Urbana-Champaign,)4394 6131 y(Urbana,)g(IL,)g(Dec)i
+ (2002.)d(See)i Fk(http://l)8 b(lvm.cs.uiuc.e)-8 b(du)p
+ Fl(.)4080 6322 y([14])74 b(C.)51 b(Lattner)g(and)g(V.)g(Adv)l(e.)h(The)
+ g(LL)-17 b(VM)51 b(Instruction)g(Set)4394 6496 y(and)g(Compilation)f
+ (Strategy)-13 b(.)51 b(T)-13 b(ec)l(h.)52 b(Rep)t(ort)4394
+ 6670 y(UIUCDCS-R-2002-2292,)f(Computer)h(Science)g(Dept.,)4394
+ 6845 y(Univ.)f(of)g(Illinois)f(at)h(Urbana-Champaign,)g(Aug.)g(2002.)
+ 4080 7036 y([15])74 b(P)-13 b(.)50 b(Lee)i(and)g(M.)f(Leone.)g
+ (Optimizing)g(ML)g(with)g(run-time)4394 7210 y(co)t(de)h(generation.)f
+ (In)h Fk(SIGPLAN)j(Confer)-8 b(enc)g(e)54 b(on)4394 7384
+ y(Pr)-8 b(o)g(gr)g(amming)56 b(L)-8 b(anguage)55 b(Design)f(and)i
+ (Implementation)p Fl(,)4394 7559 y(1996.)4080 7750 y([16])74
+ b(A.)51 b(Leung)h(and)f(L.)g(George.)g(Some)h(notes)f(on)g(the)g(new)
+ 4394 7924 y(MLRISC)h(X86)e(\015oating)h(p)t(oin)l(t)g(co)t(de)h
+ (generator.)4080 8115 y([17])74 b(T.)51 b(Lindholm)g(and)h(F.)f(Y)-13
+ b(ellin.)51 b Fk(The)j(Java)h(Virtual)h(Machine)4394
+ 8289 y(Sp)-8 b(e)g(ci\014c)g(ation)p Fl(.)52 b(Addison-W)-13
+ b(esley)g(,)51 b(Reading,)g(MA,)g(1997.)4080 8480 y([18])74
+ b(Microsoft)50 b(Corp)t(oration.)g(.NET)h(F)-13 b(ramew)l(ork)51
+ b(Dev)l(elop)t(er's)4394 8655 y(Guide)g(-)h(Common)f(Language)g(Run)l
+ (time)g(Ov)l(erview,)h(2001.)4080 8846 y([19])74 b(M.)50
+ b(P)l(oletto)g(and)i(V.)f(Sark)-9 b(ar.)51 b(Linear)g(scan)h(register)
+ 4394 9020 y(allo)t(cation.)d Fk(A)l(CM)55 b(T)-12 b(r)k(ansactions)55
+ b(on)h(Pr)-8 b(o)g(gr)g(amming)4394 9194 y(L)g(anguages)55
+ b(and)h(Systems)p Fl(,)51 b(21\(5\):895{913,)d(1999.)4080
+ 9385 y([20])74 b(A.)51 b(Rigo.)f(Psyco,)g(the)i(Python)f(Sp)t
+ (ecializing)g(Compiler.)4394 9560 y Fk(http://psyc)-8
+ b(o.sour)g(c)g(efor)g(ge.net)p Fl(.)4080 9751 y([21])74
+ b(O.)51 b(T)-13 b(raub,)52 b(G.)e(H.)h(Hollo)l(w)l(a)l(y)-13
+ b(,)49 b(and)j(M.)e(D.)i(Smith.)f(Qualit)l(y)4394 9925
+ y(and)g(sp)t(eed)i(in)e(linear-scan)g(register)g(allo)t(cation.)f(In)
+ 4394 10099 y Fk(SIGPLAN)55 b(Confer)-8 b(enc)g(e)54 b(on)i(Pr)-8
+ b(o)g(gr)g(amming)56 b(L)-8 b(anguage)4394 10274 y(Design)54
+ b(and)i(Implementation)p Fl(,)d(pages)e(142{151,)e(1998.)p
+ eop end
+ %%Trailer
+ 
+ userdict /end-hook known{end-hook}if
+ %%EOF


Index: llvm-www/ProjectsWithLLVM/index.html
diff -c /dev/null llvm-www/ProjectsWithLLVM/index.html:1.1
*** /dev/null	Fri Dec 12 12:24:15 2003
--- llvm-www/ProjectsWithLLVM/index.html	Fri Dec 12 12:23:35 2003
***************
*** 0 ****
--- 1,92 ----
+ <!--#include virtual="../header.incl" -->
+ <div class="www_sectiontitle">Projects built with LLVM</div>
+ 
+ <p>This page is an incomplete list of the projects built with LLVM, sorted in
+ reverse cronological order.  The idea of this list is to show some of the things
+ that have been done with LLVM for various course projects or for other purposes,
+ which can be used as a source of ideas for future projects.</p>
+ 
+ <p>Note that this page is not intended to reflect that current state of LLVM or
+ show endorsement of any particular project over another.  This is just a
+ showcase of the hard work various people have done.  It also shows a bit about
+ how the capabilities of LLVM have evolved over time.</p>
+ 
+ <p>We are always looking for new contributions to this page.  If you work on a
+ project that uses LLVM for a course or a publication, we would definitely like
+ to hear about it, and would like to include your work here as well.  Please just
+ send email to <a href="mailto:sabre at nondot.org">Chris Lattner</a> with an entry
+ like those below.  We're not particularly looking for source code (though we
+ welcome source-code contributions through the normal channels), but instead
+ would like to put up the "polished results" of your work, including reports,
+ papers, presentations, posters, or anything else you have.</p>
+ 
+ <!--=========================================================================-->
+ <div class="doc_section">CS426: Advanced Compilers</b> (Fall 2003)</div>
+ <!--=========================================================================-->
+ 
+ <p></p>
+ 
+ <!--=========================================================================-->
+ <div class="doc_section">CS497YYZ: Hot Topics in Operating Systems</b> (Fall 2003)</div>
+ <!--=========================================================================-->
+ 
+ <p></p>
+ 
+ <!--=========================================================================-->
+ <div class="doc_section">COMP4133: Advanced Compiler Construction</b> (Spring 2003)</div>
+ <!--=========================================================================-->
+ 
+ <p></p>
+ 
+ <!--=========================================================================-->
+ <!--
+  <div class="doc_section">CS433: Advanced Architecture</b> (Spring 2003)</div>
+ -->
+ <!--=========================================================================-->
+ 
+ <p></p>
+ 
+ <!--=========================================================================-->
+ <div class="doc_section">CS426: Advanced Compilers</b> (Fall 2002)</div>
+ <!--=========================================================================-->
+ 
+ <p></p>
+ 
+ <!--=========================================================================-->
+ <div class="doc_section">CS497CZ: Dynamic Translation and Optimization</b> (Spring 2002)</div>
+ <!--=========================================================================-->
+ 
+ <!-- _______________________________________________________________________ -->
+ <div class="doc_subsubsection">
+ Jello: a retargetable <u>J</u>ust-In-Time compil<u>e</u>r for
+               <u>LL</u>VM bytec<u>o</u>de<br>
+ <a href="http://nondot.org/sabre/">Chris Lattner</a>,
+ <a href="http://misha.brukman.net/">Misha Brukman</a>, 
+ <a href="http://www.students.uiuc.edu/~gaeke/">Brian Gaeke</a>
+ </div>
+ 
+ <p>
+ "We present the design and implementation of Jello, a <i>retargetable</i>
+ Just-In-Time (JIT) compiler for the Intel IA32 architecture.  The input to Jello
+ is a C program statically compiled to Low-Level Virtual Machine (LLVM) bytecode.
+ Jello takes advantage of the features of the LLVM bytecode representation to
+ permit efficient run-time code generation, while emphasizing retargetability.
+ Our approach uses an abstract machine code representation in Static Single
+ Assignment form that is machine-independent, but can handle machine-specific
+ features such as implicit and explicit register references.  Because this
+ representation is target-independent, many phases of code generation can be
+ target-independent, making the JIT easily retargetable to new platforms without
+ changing the code generator.  Jello's ultimate goal is to provide a flexible
+ host for future research in runtime optimization for programs written in
+ languages which are traditionally compiled statically."
+ </p>
+ 
+ <p>
+ Note that Jello eventually evolved into the current LLVM JIT.
+ </p>
+ 
+ Project report: <a href="2002-Spring-CS497CZ-Jello.ps">PS</a>,
+ <a href="2002-Spring-CS497CZ-Jello.pdf">PDF</a>
+ 
+ 
+ <!--#include virtual="../footer.incl" --></html>





More information about the llvm-commits mailing list