blob: f4e3431d285fa24c0e691276f876b5e64e23a907 [file] [log] [blame]
%!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