(original) (raw)
%!PS-Adobe-2.0 %%Creator: dvipsk 5.58f Copyright 1986, 1994 Radical Eye Software %%Title: paper.dvi %%Pages: 8 %%PageOrder: Ascend %%BoundingBox: 0 0 612 792 %%EndComments %DVIPSCommandLine: dvips -f paper.dvi %DVIPSParameters: dpi=600, compressed, comments removed %DVIPSSource: TeX output 1996.07.16:1625 %%BeginProcSet: texc.pro /TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N /X{S N}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{dup dup 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 /IE 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 IE N end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /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 dup definefont setfont}B /ch-width{ch-data dup length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{ 128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data dup 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 /sf 0 N /CharBuilder{save 3 1 roll S dup /base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 sub]/id ch-image N /rw ch-width 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 dup 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 dup gp add /gp X adv}B /nd{/cp 0 N rw exit}B /lsh{rw cp 2 copy get dup 0 eq{pop 1}{ dup 255 eq{pop 254}{dup dup add 255 and S 1 and or}ifelse}ifelse put 1 adv}B /rsh{rw cp 2 copy get dup 0 eq{pop 128}{dup 255 eq{pop 127}{dup 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}]dup{bind pop}forall N /D{/cc X dup type /stringtype ne{] }if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup length 1 sub dup 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 dup 1 get dup mul exch 0 get dup 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 /IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for 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 /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V {}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7 getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false} ifelse}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail {dup /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: special.pro TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N /vs 792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP 0 N /rwiSeen false N /rhiSeen false N /letter{}N /note{}N /a4{}N /legal{}N}B /@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{@scaleunit div /vsc X}B /@hsize{/hs X /CLIP 1 N}B /@vsize{/vs X /CLIP 1 N}B /@clip{ /CLIP 2 N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{ 10 div /rwi X /rwiSeen true N}B /@rhi{10 div /rhi X /rhiSeen true N}B /@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X}B /magscale true def end /@MacSetUp{userdict /md known{userdict /md get type /dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup length 20 add dict copy def}if end md begin /letter{}N /note{}N /legal{} N /od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{itransform lineto} }{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{ itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{ closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}N /txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N /cp {pop pop showpage pm restore}N end}if}if}N /normalscale{Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale}if 0 setgray} N /psfts{S 65781.76 div N}N /startTexFig{/psf$SavedState save N userdict maxlength dict begin /magscale true def normalscale currentpoint TR /psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts /psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx psf$llx sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR /showpage{}N /erasepage{}N /copypage{}N /p 3 def @MacSetUp}N /doclip{ psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath moveto}N /endTexFig{end psf$SavedState restore}N /@beginspecial{SDict begin /SpecialSave save N gsave normalscale currentpoint TR @SpecialDefaults count /ocount X /dcount countdictstack N}N /@setspecial {CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR }{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury lineto closepath clip}if /showpage{}N /erasepage{}N /copypage{}N newpath }N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{ end}repeat grestore SpecialSave restore end}N /@defspecial{SDict begin} N /@fedspecial{end}B /li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{ /SaveX currentpoint /SaveY X N 1 setlinecap newpath}N /st{stroke SaveX SaveY moveto}N /fil{fill SaveX SaveY moveto}N /ellipse{/endangle X /startangle X /yrad X /xrad X /savematrix matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end %%EndProcSet TeXDict begin 40258431 52099146 1000 600 600 (paper.dvi) @start /Fa 54 124 df12 D<15301570A215F05DA314015DA314035DA3140792 C8FCA35C007FB712C0B8FC7EC7001EC8FC141CA3143C1438A314781470A314F05CA31301 5CA213002A2B76A537>43 DI<387FFFC0A2B5FCA26C1300 12057A901A>I<14031407140F141E143E147E14FEEB03FCEB1F7CEB7CFC1360EB00F8A2 1301A214F0A21303A214E0A21307A214C0A2130FA21480A2131FA21400A25BA2133EA213 7EA2137CA213FCB512F8A2182C79AB24>49 D<147F903801FFC0903807C1F090380F00F8 011E137C13380178133E13F3EBE380D801E1133F13C1120313810183137F0007EB007E5B 1306010E13FE4913FC3903F801F83901E003F0C7EA07E0EC0FC0EC1F80EC3F0014FC495A EB07E0EB0F80013EC7FC5BEA01F04848131C4848133C49133848C7FC001E14784814F038 3FC001397FFE03E00078B512C0EA703FD8F00F130038E003FEEB00F8202D7AAB24>II54 D<3A01C3E001C09038CFF0033A03FFF80780ED0F00485C9038F8383E390FE0 1C7C9038C00FFC48486C5A001EC7FC003E5C003C495A5A0070495A00F01307485CC7120F 4AC7FCA2143EA25CA214FC5C13015C1303A2495AA2130F5CA2131F5CA2133FA291C8FC5B A2137EA21338222D77AB24>I<143FECFFC0903803E1E090380F80F090381F0078133E01 7E137C5B5B1201A2485AA215FC12075BA2140115F813C01403A2EC07F00003130FEBE01F 0001133F3900F077E0EB7FE7EB1F879038000FC0A2EC1F80A21500143E0038137E007E13 7C00FE5B495A48485A48485A38700F80D8781EC7FCEA3FF8EA0FE01E2D79AB24>57 D<13F0EA01F812031207A3EA03F0EA01C0C7FCAD121C127F5AA45A12380D1D789C16>I< 16E01501821503A21507150FA2151FA2153B157B157315E382EC01C114031581EC0701A2 140EA2141C143C143802707F15005C13015C49B5FCA249C7FCA2130E131E131C4980167E 5B13F0485AA21203D80FF014FFD8FFFC011F13F0A22C2F7CAE35>65 D<011FB512FCEEFF80903A00FE000FC0EE03E04AEB01F017F80101140017FC5CA2130317 F84A1301A20107EC03F017E04AEB07C0EE0F80010FEC3F0016FE9138C007F891B512E049 14F89138C0007C4A7F82013F1580A291C7120FA25BA2017E141FA213FEEE3F005B167E00 015D4B5A49495A4B5A0003EC3F80B600FEC7FC15F82E2D7BAC32>II<011FB512FCEEFF80903A00FE000FC0EE03E04AEB01 F0EE00F80101157C173C4A143E171E0103151FA25CA21307A25CA2130FA24A143FA2131F 173E4A147EA2013F157C17FC91C8FC17F849EC01F0A2017EEC03E0A201FEEC07C0EE0F80 49EC1F00163E00015D5E49495AED07C00003023FC7FCB612FC15E0302D7BAC36>I<011F B612FEA2903900FE0001EE007E4A143EA20101151E171C5CA21303A25C16E00107130117 0002E05B1503130F15074A485A91B5FC5BECC01F4A6CC7FCA2133FA2DA000E13E0A24914 01030013C0017E1403178001FE14071700495C161E12015E49147CED01FC0003EC0FF8B7 FC5E2F2D7CAC30>I<011FB612F8A2903900FE000716014A13001778130117705CA21303 A25C16E001071301170002E05B1503130F15074A485A91B5FC5BECC01F4A6CC7FCA2133F A2EC000EA25B92C8FC137EA213FEA25BA21201A25BA21203B512F0A22D2D7CAC2E>I<03 FF1318020FEBC03891393F00F07802F8EB38F8D903F0131CD907C0EB0FF0EB1F8049C712 07137E49EC03E0485A485AA2484815C0485AA2485A178048CAFCA25A127EA312FE5AA292 B512E0A2923801FE006F5A15015EA3007C14035E127E123E001E1407001F5D6C6C130F6C 6C133F6C6C13793A00F803F1C090383FFF80D907FCC8FC2D2F75AD37>I<90381FFFF8A2 903800FE00A25CA21301A25CA21303A25CA21307A25CA2130FA25CA2131FA25CA2133FA2 91C7FCA25BA2137EA213FEA25BA21201A25BA21203B512C0A21D2D7CAC1B>73 D<91387FFFE0A2913800FE00A25DA214015DA314035DA314075DA3140F5DA3141F5DA314 3F92C7FCA35CA2147EA2003C13FE127E00FE5BA2495AEAFC0300F05B48485A38700FC0D8 781FC8FCEA1FFCEA07F0232E7AAC25>I<90381FFFFEA2D900FEC7FCA25CA21301A25CA2 1303A25CA21307A25CA2130FA25CA2131FA25CA2133FA291C7121CA249143C1638017E14 78167001FE14F0A249EB01E0A200011403ED07C049130FED3F80000314FFB7FC1600262D 7BAC2D>76 DII<4AB4FC020F13C091383E03 F09138F8007CD903E07FD907807F011FC77E013E15804914074915C0485AEE03E0485A48 5AA2485A121F90C8FC5AA2003E1507127EA348ED0FC0A3EE1F80A217005E163E167E167C 16FC4B5A007C5D4B5A6C4A5A4B5A6C4AC7FC6C6C133E6D13F83903E003F03901F80FC026 007FFFC8FCEB0FF02B2F75AD37>I<011FB512FCEEFF80903A00FE000FE0EE03F04AEB00 F8A20101157CA25C177E130317FC5CA20107EC01F8A24AEB03F017E0010FEC07C0EE0F80 4AEB3F00ED01FC91B512F04991C7FC0280C8FCA3133F91C9FCA35B137EA313FE5BA31201 5BA21203B512C0A22F2D7CAC30>I<011FB512E016FC903900FE003FEE0FC04AEB07E016 030101EC01F0A24A14F8A21303EE03F05CA20107EC07E017C04AEB0F80EE1F00010F143E 16FC9138C007F091B512805B9138C00FE091388003F06F7E133F6F7E91C7FCA2491301A2 017E5CA201FE1303A2495C17080001163C17384914E0EEF07800031670B5D8C00113E092 38007FC0C9EA1F002E2E7BAC34>82 D<91380FF00C91383FFC1C9138F80F3C903903C007 BC9039078003FC90390F0001F8131E491300A24914F0A313F816E0A216007F7F6D7EEB7F F8ECFF806D13E06D13F801077F01017FEB001FEC01FF6E7E8181A281121CA35D003C141E A25DA2007E5C5D007F495A6D485A26F1F01FC7FC38E07FFC38C00FF0262F7BAD28>I<00 0FB712F0A23A1FE00FE00701001401001E02C013E0481500141F12380078EC8001A20070 013F14C012F0481400A25CC791C7FC147EA214FEA25CA21301A25CA21303A25CA21307A2 5CA2130FA25CA2131FA25CA2133F003FB57EA22C2D74AC33>I<3B3FFFF007FFF0A2D801 FCC7EA7F00163C5B16380003157816705BA2000715F05E5BA2000F14015E5BA2001F1403 5E5BA2003F140793C7FC90C7FCA2485C150E127EA2151E00FE141C5A153C153815781570 007C5C1401007E495A003E495A6C49C8FC6C133C3807C0F83801FFE06C6CC9FC2C2E72AC 35>III97 D<13F8121FA21201A25BA21203A25BA21207 A25BA2120FEBC7C0EB9FF0EBF878381FF03CEBE03EEBC01EEB801FEA3F00A2123EA2007E 133FA2127CA2147F00FC137E5AA214FCA214F8130114F0EB03E0EA780714C0383C0F8038 1E3E00EA0FF8EA03E0182F78AD21>II<153EEC07 FEA2EC007EA2157CA215FCA215F8A21401A215F0A21403EB07C390381FF3E0EB7C3BEBF8 1FEA01F03903E00FC0EA07C0120FEA1F801580EA3F00141F5A007E1400A25C12FE48133E A2EC7E18153848137CA214FCD878011378397C03F870A2393C0F78E0381E1E3D390FF81F C03903E00F001F2F79AD24>II< EC01F0EC07FCEC0F9EEC1F1EEC1E3EEC3E7EA3EC7C381500A314FC5CA590387FFFF0A290 3801F000A313035CA413075CA4130F5CA4131F91C7FCA45B133EA4137E137CA3EA38F812 FCA25B12FDEAF1E0EAF3C0EA7F80001EC8FC1F3D81AE16>I<14F8EB03FE90380F873890 381F03F8137EEB7C0113F81201EA03F015F0EA07E01403120F01C013E0A21407121F0180 13C0A2140FA21580141F120F143FEC7F006C6C5AEA03C33801FFBF38007E3E1300147EA2 147CA214FC00385BEAFC015C495A48485A38F01F80D87FFEC7FCEA1FF01D2C7C9D21>I< 131FEA03FFA2EA003FA2133EA2137EA2137CA213FCA25BA21201147E9038F3FF809038F7 87C03903FE03E013FC13F8A2EA07F013E0A213C0000F130715C01380A2001F130F158013 00141F481406150E003E133F143E007E141EEC7E1C007C137CEC3C3812FC157048EB1FE0 0070EB07801F2F7BAD24>I<130E131FEB3F80A2EB1F00130E90C7FCA9EA03E0EA0FF0EA 1E78EA1C7C12381278127013FCEAF0F812E012E1EAC1F0120112035B12075BA2120F1383 1387121F13075BEA3F0E123EEA1E1C133C1338EA0FF0EA03C0112E7AAC16>II<131FEA03 FFA2EA003FA2133EA2137EA2137CA213FCA25BA21201EC01E09038F007F0EC1E380003EB 3878EC71F8EBE0E1EBE1C13807E381EC00E049130013CEEA0FFC13F0A213FF381F9FC0EB 87E0EB03F01301003F14301570123EA2007E14F015E0007C13E014E100FC14C0903800F3 8048EB7F000070131E1D2F7BAD21>I<137CEA0FFCA21200A213F8A21201A213F0A21203 A213E0A21207A213C0A2120FA21380A2121FA21300A25AA2123EA2127EA2127CA2EAFC30 137012F8A213F013E012F012F113C012FBEA7F80EA1E000E2F7AAD12>I<3B07801FC007 F03B1FE07FF01FFC3B3DF1E0F8783E3B38F3C078F01E3B78FF007DC01FD870FEEB7F80A2 D8F1FC1400D8E1F8137EA249137C00C302FC5B0003163E495BA200070101147E177C01C0 5B17FC000F0103ECF83018700180EBE00117F0001F010715F0040313E0010001C013E0EF E1C048010F1301EFE380003E91398000FF00001C6DC7123C341F7A9D3A>I<3907801FC0 391FE07FF0393DF1E0F83938F3C0783978FF007CEA70FEA2EAF1FCEAE1F8A25B00C314FC 00035C5BA2000713015D13C01403000FECE0C015E1EB800715C1001F14C3020F13800100 138391380787005A158E003EEB03FC001CEB00F0221F7A9D28>II<90383C01F09038FF07FC3901E79E1E9038C7BC0F000301F8 1380903887F00702E013C038078FC0130F1480A2D8061F130F12001400A249131F168013 3EA2017EEB3F00A2017C133E157E01FC137C5DEBFE015D486C485AEC0F80D9F3FEC7FCEB F0F8000390C8FCA25BA21207A25BA2120FA2EAFFFCA2222B7F9D24>I<3807803E391FE0 FF80393CF3C1C03938F781E03878FF07EA70FE13FC12F139E1F8038091C7FC5B12C31203 5BA21207A25BA2120FA25BA2121FA290C8FCA25AA2123E121C1B1F7A9D1E>114 DI<131C133EA2137EA2137CA213FCA25B A21201A2B512E0A23803F000A25BA21207A25BA2120FA25BA2121FA290C7FCA24813C013 01123E130314801307003C1300130E131E6C5AEA0FF0EA07C0132B7AA918>II119 D121 D123 D E /Fb 43 123 df<1238127C12FEA212FF127F123B1203 A41206A3120CA212181230127012200814798615>44 DI<1238 127C12FEA3127C12380707798615>I65 DII< B612FCEDFF803A03F8000FE00001EC03F0ED00FC167E82EE1F80160FEE07C017E0160317 F0A217F81601A317FCAA17F8A3EE03F0A217E0160717C0160FEE1F801700167E5EED03F8 0003EC0FE0B7128003FCC7FC2E2D7DAC37>II71 DI<90B512F0A201001300147EB3AD1238127C12FEA2147C 4813FC00785BEA70016C485A381E07C03807FF80D801FCC7FC1C2E7CAC26>74 DIII< D8FFF8903801FFFE7FD801FE9038001FE06DEC078001BFEC0300EB9F8080138FEB87E080 1383EB81F880EB80FE147E801580141FEC0FC015E0EC07F0140315F8EC01FC1400157E15 7F153FED1F8316C3ED0FE31507ED03F316FB15016FB4FCA28282A282486C80D80FF080B5 FC822F2D7DAC36>III82 D<90383F80103901FFF0303907C07C70380F000E001CEB07F0003C130300381301 481300A200F01470A315307EA26C1400127EEA7F80EA3FF013FF6C13F06C13FE6C7F0001 14806C6C13C0010713E09038007FF0EC07F81401140015FC157C12C0153CA37E1538A26C 14786C14706C14E06CEB01C038E7800339E1F00F0038C07FFE38800FF01E2F7BAD29>I< B53CC03FFFE003FFF0A22807F80001FEC7EA7F806C484AEC1E000300151C7F00016F1418 167E6D1738000003FF1430A26D1770017E496D1360169F017F17E06D9026030FC05BA2D9 1F804B5A92380607E0A2D90FC04BC7FC92380C03F0A2D907E0150692381801F8A2D903F0 5D92383000FCA2D901F85D4B137EA2D900FC5D4B133FA2027E5DDA7F80EB1FE0A2023F5D 92C7120FA26E5D021E1407A2020E92C8FC020C80442E7EAC49>87 D<003FB61280A29039E0003F0001805B003EC7127E003C5C003813015D4813034A5A5D00 60130F5D4A5A143FC790C7FC147E14FE5C13015C495A13075C495A131F5C133F91C712C0 137E13FE5B485A000314015B120748481480491303121F49130748C7120F48143F007EEB 01FFB7FCA2222D7BAC2C>90 D<14E0A2497EA3497EA3EB067CA2EB0E7EEB0C3EA2497EA3 496C7EA201707FEB6007A2496C7E90B5FC4880EB8001A2D803007F1400A20006147CA200 0F147E123F3AFFC003FFE0A223237EA229>97 DI<903803F802 90381FFE0690387E038E3901F800DED803E0137E4848133E485A48C7121EA2003E140EA2 127E007C1406A212FC1500A7007C1406A2127E123E150C7EA26C6C13186C6C13306C6C13 60D801F813C039007E038090381FFF00EB03F81F247DA227>IIII<903803FC0190381FFF0390387F03C79038F800EFD803E0133F48487F 485A90C77E5A003E80A2127E81127C12FC92C7FCA691380FFFF0127C007E9038003F0081 123EA27E6C7EA26C7ED803F05BC66C137790387F01E390381FFF81D903FEC7FC24247DA2 2B>I<3AFFFE0FFFE0A23A0FE000FE006C48137CAC90B512FCA29038C0007CAE486C13FE 3AFFFE0FFFE0A223227EA129>II107 DII<3AFFC001FFE013E03A07F0003F00151ED806F8130C7F137C7F 7FA2EB0F80EB07C014E01303EB01F014F81300147C143EA2141FEC0F8C15CC1407EC03EC 15FC14011400157CA2000F143C486C131CEAFFF0150C23227EA129>III114 D<3801F8083807FF18381E07B8383C01 F8383800785A143812F01418A36C13007E127EEA7FE0EA3FFE381FFF806C13C0000313E0 38007FF0EB07F81301EB007CA2143C12C0A46C133814786C137000FC13E038EF01C038C7 FF803880FE0016247DA21E>I<007FB6FCA2397C03E01F00701407006080A200E01580A2 00C01401A4000091C7FCB3497E48B512C0A221227EA127>I<3AFFFE01FFE0A23A0FE000 3F006C48131E150CB3A400035C7F12015D6C6C5B01785B90383E0380D90FFFC7FCEB01F8 23237EA129>I<3CFFF80FFF807FE0A23C1FC001FC001F806C486C48EB0E00816C6C150C A24A6C131CD803E001BE1318A21403D801F0011F5BA214073B00F8060F8060A3903A7C0C 07C0C0A3903A3E1803E180A390271F3001F3C7FCA390390FE000FEA36D48137CA36D4813 38A333237FA137>119 D121 D<007FB51280A29038001F00007C5B0078133E00705B14FC00605B13015C495A13070000 5B495A131F91C7FC133EA25B13FC9038F80180EA01F0120313E0EA07C0000F1303138000 1F1400495A003E5B007E5B007C137FB6FCA219227DA121>I E /Fc 66 124 df<9138FF807E01079038E1FF80903A1F807FC3C0D93E00EB87E049EBFF074913 FE485A00039138FC018049017CC7FCAAB712FCA22703E0007CC7FCB3A6486C13FE3A7FFF 0FFFF0A22B2F7FAE29>11 D<14FF010713E090381F80F090383E003849137C4913FC485A 1203491378153092C7FCA7157CB612FCA23803E000157CB3A5486C13FE3A7FFF0FFFE0A2 232F7FAE27>I<13031307130E131C1338137013F0EA01E013C01203EA0780A2EA0F00A2 121EA35AA45AA512F8A25AAB7EA21278A57EA47EA37EA2EA0780A2EA03C0120113E0EA00 F013701338131C130E1307130310437AB11B>40 D<12C07E12707E7E7E120FEA07801203 13C0EA01E0A2EA00F0A21378A3133CA4131EA5131FA2130FAB131FA2131EA5133CA41378 A313F0A2EA01E0A2EA03C013801207EA0F00120E5A5A5A5A5A10437CB11B>I<123C127E B4FCA21380A2127F123D1201A312031300A25A1206120E5A5A5A126009157A8714>44 DI<123C127E12FFA4127E123C08087A8714>I48 D<130C133C137CEA03FC12FFEAFC7C1200B3B113FE387FFFFEA2172C7AAB23 >III<140EA2141E143EA2147E14FEA2EB01BE 1303143E1306130E130C131813381330136013E013C0EA0180120313001206120E120C5A 123812305A12E0B612FCA2C7EA3E00A9147F90381FFFFCA21E2D7EAC23>I<000CEB0180 380FC01F90B512005C5C14F014C0D80C7EC7FC90C8FCA8EB1FC0EB7FF8380DE07C380F80 1F01001380000E130F000CEB07C0C713E0A2140315F0A4127812FCA448EB07E012E00060 14C00070130F6C14806CEB1F006C133E380780F83801FFE038007F801C2D7DAB23>II<1230123C003FB512F8A215F05A15E03970 0001C000601480140348EB0700140E140CC7121C5C143014705C495AA2495AA249C7FCA2 5B130E131EA2133EA3133C137CA413FCA913781D2E7CAC23>III<123C127E12FFA4127E123C1200AD123C127E12FFA4127E123C081D7A 9C14>I<4A7E4A7EA34A7EA24A7EA3EC1BF81419A2EC30FCA2EC70FEEC607EA24A7EA349 486C7EA2010380EC000FA201066D7EA3496D7EA2011FB57EA29038180001496D7EA34914 7EA201E0147F4980A20001ED1F801203000716C0D80FF0EC3FE0D8FFFC0103B5FCA2302F 7EAE35>65 D67 DIII< B539F03FFFFCA2D803FCC713006C48147EB290B612FEA201F8C7127EB3486C14FFB5D8F0 3F13FCA22E2D7DAC35>72 DI<90387FFFF0A201001300147EB3AD123812FEA314FE5C1278387001F86C485A381E07 E03807FF80D801FCC7FC1C2E7DAC24>I76 DIIII82 D<90383F80303901FFF0703807C07C390F000EF0 001E13074813034813011400127000F01470A315307EA26C1400127E127FEA3FE013FE38 1FFFE06C13FC6C13FF00011480D8003F13E013039038003FF0EC07F81401140015FC157C 12C0153CA37EA215787E6C14706C14F06CEB01E039F78003C039E3F00F0038E07FFE38C0 0FF01E2F7CAD27>I<007FB712F8A29039000FC003007C150000701638A200601618A200 E0161CA248160CA5C71500B3A94A7E011FB512E0A22E2D7EAC33>IIII<3B7FFFE003FFF8A2000390C713806C48EC7E00 0000157C017F14786D14706E5B6D6C5B6D6C485A15036D6C48C7FC903803F80601015BEC FC1C6D6C5AEC7F305DEC3FE06E5A140F816E7E81140DEC1DFCEC38FEEC307F14609138E0 3F8049486C7EEC800FD903007F496D7E010E6D7E130C011C6D7E496D7E49147E167F01F0 EC3F80000316C0D80FF8EC7FE0D8FFFE0103B5FCA2302D7EAC35>I91 D93 D<13FF000713C0380F01F0381C00F8003F137C80A2143F001E7FC7FCA4EB07FF137F3801 FE1FEA07F0EA1FC0EA3F80EA7F00127E00FE14065AA3143F7E007E137F007FEBEF8C391F 83C7FC390FFF03F83901FC01E01F207D9E23>97 DII<15F8141FA214011400ACEB0FE0EB7FF83801F81E38 03E0073807C003380F8001EA1F00481300123E127EA25AA9127C127EA2003E13017EEB80 03000F13073903E00EFC3A01F03CFFC038007FF090391FC0F800222F7EAD27>III<013F13F89038FFC3FE 3903E1FF1E3807807C000F140C391F003E00A2003E7FA76C133EA26C6C5A00071378380F E1F0380CFFC0D81C3FC7FC90C8FCA3121E121F380FFFF814FF6C14C04814F0391E0007F8 48130048147C12F848143CA46C147C007C14F86CEB01F06CEB03E03907E01F803901FFFE 0038003FF01F2D7E9D23>III<130FEB1F80EB3FC0A4EB1F80EB0F0090C7FCA8EB07C013FFA2130F1307B3AD 1230127838FC0F80A21400485AEA783EEA3FF8EA07E0123C83AD16>III<2607C07FEB07F0 3BFFC3FFC03FFC903AC783F0783F3C0FCE01F8E01F803B07DC00F9C00F01F8D9FF8013C0 4990387F000749137EA249137CB2486C01FEEB0FE03CFFFE0FFFE0FFFEA2371E7E9D3C> I<3807C0FE39FFC3FF809038C703E0390FDE01F0EA07F8496C7EA25BA25BB2486C487E3A FFFE1FFFC0A2221E7E9D27>II<3807C0FE39FFC7FF 809038CF03E0390FDC01F03907F800FC49137E49133E49133FED1F80A3ED0FC0A8151F16 80A2ED3F00A26D137E6D137C5D9038FC01F09038CE07E09038C7FF80D9C1FCC7FC01C0C8 FCA9487EEAFFFEA2222B7E9D27>I<380781F838FF87FEEB8E3FEA0F9CEA07B813B0EBF0 1EEBE000A45BB0487EB5FCA2181E7E9D1C>114 D<3801FE183807FFB8381E01F8EA3C00 481378481338A21418A27E7EB41300EA7FF06CB4FC6C13C06C13F0000113F838001FFC13 0138C0007E143EA26C131EA27EA26C133CA26C137838FF01F038E3FFC000C0130017207E 9E1C>I<1360A413E0A312011203A21207121FB512F0A23803E000AF1418A714383801F0 3014703800F860EB3FE0EB0F80152A7FA81B>II<3AFFFC01FFC0A23A0FE0007E000007147C15380003143015706C6C1360A26C6C5BA3 90387C0180A26D48C7FCA2EB3F07EB1F06A2EB0F8CA214DCEB07D8A2EB03F0A36D5AA26D 5A221E7F9C25>I<3BFFFC3FFE07FFA23B0FE003F001F801C09038E000F00007010114E0 812603E00314C0A2913807F8012701F006781380A29039F80E7C030000D90C3C1300A290 397C181E06A2151F6D486C5AA2168C90391F600798A216D890390FC003F0A36D486C5AA3 6DC75A301E7F9C33>I<3AFFFC07FF80A23A0FF003FC000003EB01F0000114C06D485A00 0091C7FCEB7C06EB3E0E6D5A14B8EB0FB0EB07E013036D7E497E1307EB067C497EEB1C1F 01387FEB700F496C7E6E7ED803C07F00076D7E391FE003FC3AFFF007FFC0A2221D7F9C25 >I<3AFFFC01FFC0A23A0FE0007E000007147C1538000314306D137000011460A26C6C5B A2EBFC01017C5BEB7E03013E90C7FCA2EB1F06A2148EEB0F8CA2EB07D8A2EB03F0A36D5A A26D5AA2495AA2130391C8FC1278EAFC06A25B131CEA7838EA7070EA3FE0EA0F80222B7F 9C25>I<003FB51280A2EB003F003C14000038137E00305BEA700100605B495A495A130F 00005B495A49C7FC5B137E9038FC0180EA01F8120313F03807E003EA0FC0001F14001380 48485A007E5B00FE133FB6FCA2191D7E9C1F>II E /Fd 7 116 df100 DI<12FFA81200AC127FB3B308397BB814>105 D109 D111 D<14F0EAFC07130F133F137F13FF00FD130013FC EAFFF05B5BA25B90C7FCA35AB3A414267AA51C>114 DI E /Fe 1 16 df15 D E /Ff 39 121 df<141C143C14F8EB01F0EB03E01307EB0FC0EB1F801400 5B137E13FE5B12015B1203A2485AA2120F5B121FA25B123FA4485AA512FFB1127FA56C7E A4121F7FA2120F7F1207A26C7EA212017F12007F137E7F7F1480EB0FC0EB07E01303EB01 F0EB00F8143C141C165377BD25>40 D<12E07E127C7E7E7F6C7E6C7E12037F6C7E7F1200 7F137E137FA2EB3F80A214C0131F14E0A2130F14F0A4EB07F8A514FCB114F8A5EB0FF0A4 14E0131FA214C0133F1480A2EB7F00A2137E13FE5B12015B485A5B1207485A485A90C7FC 123E5A12F05A16537BBD25>I45 D<49B4FC010F13E0017F13FC 9038FF83FE4848C67E4848EB7F804848EB3FC04848EB1FE0A2001F15F0A24848EB0FF8A3 007F15FCA500FF15FEB3007F15FCA4003F15F8A26D131F001F15F0A2000F15E06D133F00 0715C06C6CEB7F806C6CEBFF003900FF83FE6DB45A011F13F0010190C7FC27387CB630> 48 D<141E143E14FE1307133FB5FCA313CFEA000FB3B3A6007FB61280A4213779B630>I< EB0FFC90387FFFC048B512F0000714FC390FF03FFF261F800F1380263F000313C05AD9C0 0113E0486C6C13F07FA2ED7FF8A46C5A6C5A000FC7FCC8FCEDFFF0A216E05C16C04A1380 16004A5A5D4A5A4A5A4A5AEC7F8092C7FC14FEEB01F849481378495A495A495A013EC712 F84914F05B4848130148B6FCA25A5A5A5A4815E0B7FCA425377BB630>III54 D58 D65 DI69 D71 D76 DI79 DI82 DI97 D<903801FFC0010F13FC017F13FFD9FF8013802603FE0013C0 48485AEA0FF8121F13F0123F6E13804848EB7F00151C92C7FC12FFA9127FA27F123FED01 E06C7E15036C6CEB07C06C6C14806C6C131FC69038C07E006DB45A010F13F00101138023 257DA42A>99 DI<903803FF80011F13F0017F13FC3901FF83FE3A03FE007F804848133F484814C0001F EC1FE05B003FEC0FF0A2485A16F8150712FFA290B6FCA301E0C8FCA4127FA36C7E167812 1F6C6C14F86D14F000071403D801FFEB0FE06C9038C07FC06DB51200010F13FC010113E0 25257DA42C>II<161FD907FEEBFFC090387FFFE348B6EAEFE02607FE07138F260FF801131F48486C 138F003F15CF4990387FC7C0EEC000007F81A6003F5DA26D13FF001F5D6C6C4890C7FC39 07FE07FE48B512F86D13E0261E07FEC8FC90CAFCA2123E123F7F6C7E90B512F8EDFF8016 E06C15F86C816C815A001F81393FC0000F48C8138048157F5A163FA36C157F6C16006D5C 6C6C495AD81FF0EB07FCD807FEEB3FF00001B612C06C6C91C7FC010713F02B377DA530> I105 D<13FFB5FCA412077EAF92380FFFE0A4923803FC0016F0ED0FE0 ED1F804BC7FC157E5DEC03F8EC07E04A5A141FEC7FE04A7E8181A2ECCFFEEC0FFF496C7F 806E7F6E7F82157F6F7E6F7E82150F82B5D8F83F13F8A42D3A7EB932>107 D<13FFB5FCA412077EB3B3ACB512FCA4163A7DB91B>I<01FED97FE0EB0FFC00FF902601 FFFC90383FFF80020701FF90B512E0DA1F81903983F03FF0DA3C00903887801F000749DA CF007F00034914DE6D48D97FFC6D7E4A5CA24A5CA291C75BB3A3B5D8FC1FB50083B512F0 A44C257DA451>I<01FEEB7FC000FF903803FFF8020F13FE91381F03FFDA3C0113800007 13780003497E6D4814C05CA25CA291C7FCB3A3B5D8FC3F13FFA430257DA435>I<903801 FFC0010F13F8017F13FFD9FF807F3A03FE003FE048486D7E48486D7E48486D7EA2003F81 491303007F81A300FF1680A9007F1600A3003F5D6D1307001F5DA26C6C495A6C6C495A6C 6C495A6C6C6CB45A6C6CB5C7FC011F13FC010113C029257DA430>I<9039FF01FF80B500 0F13F0023F13FC9138FE07FFDAF00113800003496C13C00280EB7FE091C713F0EE3FF8A2 EE1FFCA3EE0FFEAA17FC161FA217F8163F17F06E137F6E14E06EEBFFC0DAF00313809139 FC07FE0091383FFFF8020F13E0020390C7FC91C9FCACB512FCA42F357EA435>I<9038FE 03F000FFEB0FFEEC3FFF91387C7F809138F8FFC000075B6C6C5A5CA29138807F80ED3F00 150C92C7FC91C8FCB3A2B512FEA422257EA427>114 D<90383FF0383903FFFEF8000F13 FF381FC00F383F0003007E1301007C130012FC15787E7E6D130013FCEBFFE06C13FCECFF 806C14C06C14F06C14F81203C614FC131F9038007FFE140700F0130114007E157E7E157C 6C14FC6C14F8EB80019038F007F090B512C000F8140038E01FF81F257DA426>I<130FA5 5BA45BA25B5BA25A1207001FEBFFE0B6FCA3000390C7FCB21578A815F86CEB80F014816C EBC3E090383FFFC06D1380903803FE001D357EB425>I<01FFEC3FC0B5EB3FFFA4000714 016C80B3A35DA25DA26C5C6E4813E06CD9C03E13FF90387FFFFC011F13F0010313803025 7DA435>I119 DI E /Fg 35 122 df<150C151C153815F0EC01E0EC03C0EC07 80EC0F00141E5C147C5C5C495A1303495A5C130F49C7FCA2133EA25BA25BA2485AA21203 5B12075BA2120F5BA2121FA290C8FCA25AA2123EA2127EA2127CA412FC5AAD1278A57EA3 121C121EA2120E7EA26C7E6C7EA212001E5274BD22>40 D<140C140E80EC0380A2EC01C0 15E0A2140015F0A21578A4157C153CAB157CA715FCA215F8A21401A215F0A21403A215E0 A21407A215C0140F1580A2141F1500A2143EA25CA25CA2495AA2495A5C1307495A91C7FC 5B133E133C5B5B485A12035B48C8FC120E5A12785A12C01E527FBD22>I44 D<387FFFF8A2B5FCA214F0150579941E>I<120EEA3F80127F12 FFA31300127E123C0909778819>I<15181538157815F0140114031407EC0FE0141F147F EB03FF90383FEFC0148FEB1C1F13001580A2143FA21500A25CA2147EA214FEA25CA21301 A25CA21303A25CA21307A25CA2130FA25CA2131FA25CA2133FA291C7FC497EB61280A31D 3877B72A>49 DI<16 E0ED01F01503A3150716E0A3150F16C0A2151F1680A2ED3F00A3157EA2157C15FC5D1401 5D14035D14075D140F5D141F92C7FC143EA25CECF81C153E903801F07EEB03E014C09038 0780FE130F49485A133EEB7C01137801F05BEA01E03803C003EA0FFE391FFFC3F04813FB 267C01FF13403AF0003FFFE000601307C71400EC0FE05DA3141F5DA3143F92C7FCA4143E 141C24487DB72A>52 D65 D67 D<0103B612FEEFFFC018F0903B0007F8000FF84BEB03FCEF00FE020F157FF03F804B141F 19C0021F150F19E05D1807143F19F05DA2147FA292C8FCA25C180F5CA2130119E04A151F A2130319C04A153FA201071780187F4A1600A2010F16FEA24A4A5A60011F15034D5A4A5D 4D5A013F4B5A173F4A4AC7FC17FC017FEC03F84C5A91C7EA1FC04949B45A007F90B548C8 FCB712F016803C397CB83F>I<902607FFF8923807FFF0614F13E0D9000FEFF0004F5AA2 021F167FF1EFC0141DDA1CFCEC01CF023C16DF9538039F800238ED071FA20278ED0E3F97 C7FC0270151CA202F04B5AF0707E14E0037E14E0010117FE4D485A02C0EC0380A20103ED 0701610280140EA20107ED1C0305385B14006F137049160705E05B010EEC01C0A2011E91 3803800F61011CEC0700A2013C020E131F4C5C1338ED1FB80178163F04F091C8FC01705C A201F04A5B187E00015DD807F816FEB500C09039007FFFFC151E150E4C397AB84A>77 D<92383FC00E913901FFF01C020713FC91391FC07E3C91393F001F7C027CEB0FF84A1307 49481303495A4948EB01F0A2495AA2011F15E091C7FCA34915C0A36E90C7FCA2806D7E14 FCECFF806D13F015FE6D6D7E6D14E0010080023F7F14079138007FFC150F15031501A215 00A2167C120EA3001E15FC5EA3003E4A5AA24B5AA2007F4A5A4B5A6D49C7FC6D133ED8F9 F013FC39F8FC03F839F07FFFE0D8E01F138026C003FCC8FC2F3D7ABA2F>83 D<0007B812E0A25AD9F800EB001F01C049EB07C0485AD900011403121E001C5C003C1780 1403123800785C00701607140700F01700485CA2140FC792C7FC5DA2141FA25DA2143FA2 5DA2147FA292C9FCA25CA25CA21301A25CA21303A25CA21307A25CA2130FA25CEB3FF000 7FB512F8B6FCA2333971B83B>I<14F8EB07FE90381F871C90383E03FE137CEBF8011201 48486C5A485A120FEBC001001F5CA2EA3F801403007F5C1300A21407485C5AA2140F5D48 ECC1C0A2141F15831680143F1587007C017F1300ECFF076C485B9038038F8E391F0F079E 3907FE03FC3901F000F0222677A42A>97 D<133FEA1FFFA3C67E137EA313FE5BA312015B A312035BA31207EBE0F8EBE7FE9038EF0F80390FFC07C013F89038F003E013E0D81FC013 F0A21380A2123F1300A214075A127EA2140F12FE4814E0A2141F15C05AEC3F80A215005C 147E5C387801F8007C5B383C03E0383E07C0381E1F80D80FFEC7FCEA01F01C3B77B926> I<147F903803FFC090380FC1E090381F0070017E13784913383901F801F83803F0031207 13E0120FD81FC013F091C7FC485AA2127F90C8FCA35A5AA45AA3153015381578007C14F0 007EEB01E0003EEB03C0EC0F806CEB3E00380F81F83803FFE0C690C7FC1D2677A426>I< ED01F815FFA3150316F0A21507A216E0A2150FA216C0A2151FA21680A2153FA202F81300 EB07FE90381F877F90383E03FF017C5BEBF80112013803F00048485B120FEBC001121F5D EA3F801403127F01005BA214075A485CA2140FA248ECC1C0A2141F15C3ED8380143F1587 007C017F1300ECFF076C485B9038038F8E391F0F079E3907FE03FC3901F000F0253B77B9 2A>I<147F903803FFC090380FC1E090383F00F0017E13785B485A485A485A120F4913F8 001F14F0383F8001EC07E0EC1F80397F81FF00EBFFF891C7FC90C8FC5A5AA55AA2153000 7C14381578007E14F0003EEB01E0EC03C06CEB0F806CEB3E00380781F83803FFE0C690C7 FC1D2677A426>IIIII108 DII<147F903803FFC090380FC1F090381F00F8017E137C5B4848137E4848133E0007143F5B 120F485AA2485A157F127F90C7FCA215FF5A4814FEA2140115FC5AEC03F8A2EC07F015E0 140F007C14C0007EEB1F80003EEB3F00147E6C13F8380F83F03803FFC0C648C7FC202677 A42A>I<9039078007C090391FE03FF090393CF0787C903938F8E03E9038787FC0017049 7EECFF00D9F0FE148013E05CEA01E113C15CA2D80003143FA25CA20107147FA24A1400A2 010F5C5E5C4B5A131F5EEC80035E013F495A6E485A5E6E48C7FC017F133EEC70FC90387E 3FF0EC0F8001FEC9FCA25BA21201A25BA21203A25B1207B512C0A3293580A42A>I<3903 C003F0390FF01FFC391E783C0F381C7C703A3C3EE03F8038383FC0EB7F80007815000070 1300151CD8F07E90C7FCEAE0FE5BA2120012015BA312035BA312075BA3120F5BA3121F5B A3123F90C9FC120E212679A423>114 D<14FE903807FF8090380F83C090383E00E04913 F00178137001F813F00001130313F0A215E00003EB01C06DC7FC7FEBFFC06C13F814FE6C 7F6D13807F010F13C01300143F141F140F123E127E00FE1480A348EB1F0012E06C133E00 705B6C5B381E03E06CB45AD801FEC7FC1C267AA422>II<13F8D803FEEB01C0D8078FEB03E0390E0F8007121E121C 0038140F131F007815C01270013F131F00F0130000E015805BD8007E133FA201FE14005B 5D120149137EA215FE120349EBFC0EA20201131E161C15F813E0163CD9F0031338140700 01ECF07091381EF8F03A00F83C78E090393FF03FC090390FC00F00272679A42D>I<01F0 130ED803FC133FD8071EEB7F80EA0E1F121C123C0038143F49131F0070140FA25BD8F07E 140000E08013FEC6485B150E12015B151E0003141C5BA2153C000714385B5DA35DA24A5A 140300035C6D48C7FC0001130E3800F83CEB7FF8EB0FC0212679A426>I<903907E007C0 90391FF81FF89039787C383C9038F03E703A01E01EE0FE3803C01F018013C0D8070014FC 481480000E1570023F1300001E91C7FC121CA2C75AA2147EA214FEA25CA21301A24A1370 A2010314F016E0001C5B007E1401010714C000FEEC0380010F1307010EEB0F0039781CF8 1E9038387C3C393FF03FF03907C00FC027267CA427>120 D<13F0D803FCEB01C0D8071E EB03E0D80E1F1307121C123C0038140F4914C01270A249131FD8F07E148012E013FEC648 133F160012015B5D0003147E5BA215FE00075C5BA214015DA314035D14070003130FEBF0 1F3901F87FE038007FF7EB1FC7EB000F5DA2141F003F5C48133F92C7FC147E147C007E13 FC387001F8EB03E06C485A383C1F80D80FFEC8FCEA03F0233679A428>I E /Fh 70 123 df11 DIII<001C131C007F137F39FF80FF80A26D13C0A3007F137F001C 131C00001300A40001130101801380A20003130301001300485B00061306000E130E485B 485B485B006013601A197DB92A>34 D<121C127FEAFF80A213C0A3127F121C1200A41201 1380A2120313005A1206120E5A5A5A12600A1979B917>39 D<146014E0EB01C0EB0380EB 0700130E131E5B5BA25B485AA2485AA212075B120F90C7FCA25A121EA2123EA35AA65AB2 127CA67EA3121EA2121F7EA27F12077F1203A26C7EA26C7E1378A27F7F130E7FEB0380EB 01C0EB00E01460135278BD20>I<12C07E12707E7E7E120F6C7E6C7EA26C7E6C7EA21378 A2137C133C133E131EA2131F7FA21480A3EB07C0A6EB03E0B2EB07C0A6EB0F80A31400A2 5B131EA2133E133C137C1378A25BA2485A485AA2485A48C7FC120E5A5A5A5A5A13527CBD 20>I<15301578B3A6007FB812F8B912FCA26C17F8C80078C8FCB3A6153036367BAF41> 43 D<121C127FEAFF80A213C0A3127F121C1200A412011380A2120313005A1206120E5A 5A5A12600A19798817>II<121C127FEAFF80A5EA7F00121C0909 798817>I48 DIII<15 38A2157815F8A2140114031407A2140F141F141B14331473146314C313011483EB030313 071306130C131C131813301370136013C01201EA038013005A120E120C5A123812305A12 E0B712F8A3C73803F800AB4A7E0103B512F8A325397EB82A>I<0006140CD80780133C90 38F003F890B5FC5D5D158092C7FC14FC38067FE090C9FCABEB07F8EB3FFE9038780F8039 07E007E090388003F0496C7E12066E7EC87EA28181A21680A4123E127F487EA490C71300 485C12E000605C12700030495A00385C6C1303001E495A6C6C485A3907E03F800001B5C7 FC38007FFCEB1FE0213A7CB72A>II<12301238123E 003FB612E0A316C05A168016000070C712060060140E5D151800E01438485C5D5DC71201 4A5A92C7FC5C140E140C141C5CA25CA214F0495AA21303A25C1307A2130FA3495AA3133F A5137FA96DC8FC131E233B7BB82A>III<121C127FEAFF80A5EA7F00121CC7FCB2121C127FEAFF80A5EA7F00121C092479A3 17>I<121C127FEAFF80A5EA7F00121CC7FCB2121C127F5A1380A4127F121D1201A41203 1300A25A1206A2120E5A121812385A1260093479A317>I<1538A3157CA315FEA34A7EA3 4A6C7EA202077FEC063FA2020E7FEC0C1FA2021C7FEC180FA202387FEC3007A202707FEC 6003A202C07F1501A2D901807F81A249C77F167FA20106810107B6FCA24981010CC7121F A2496E7EA3496E7EA3496E7EA213E0707E1201486C81D80FFC02071380B56C90B512FEA3 373C7DBB3E>65 DI<913A01FF800180020FEBE003027F13F8903A01 FF807E07903A03FC000F0FD90FF0EB039F4948EB01DFD93F80EB00FF49C8127F01FE153F 12014848151F4848150FA248481507A2485A1703123F5B007F1601A35B00FF93C7FCAD12 7F6DED0180A3123F7F001F160318006C7E5F6C7E17066C6C150E6C6C5D00001618017F15 386D6C5CD91FE05C6D6CEB03C0D903FCEB0F80902701FF803FC7FC9039007FFFFC020F13 F002011380313D7BBA3C>IIIIIII76 DIIII82 DI<003FB812E0A3D9C003EB 001F273E0001FE130348EE01F00078160000701770A300601730A400E01738481718A4C7 1600B3B0913807FF80011FB612E0A335397DB83C>I87 D91 D<3901800180000313033907000700000E130E485B001813180038133800301330007013 7000601360A200E013E0485BA400CE13CE39FF80FF806D13C0A3007F137FA2393F803F80 390E000E001A1974B92A>II97 DIIII<147E903803FF8090380FC1E0EB1F8790383F0F F0137EA213FCA23901F803C091C7FCADB512FCA3D801F8C7FCB3AB487E387FFFF8A31C3B 7FBA19>IIIIIII<2703F00FF0EB1FE000FFD93FFCEB7FF8913AF03F01E07E903B F1C01F83803F3D0FF3800FC7001F802603F70013CE01FE14DC49D907F8EB0FC0A2495CA3 495CB3A3486C496CEB1FE0B500C1B50083B5FCA340257EA445>I<3903F00FF000FFEB3F FCECF03F9039F1C01F803A0FF3800FC03803F70013FE496D7EA25BA35BB3A3486C497EB5 00C1B51280A329257EA42E>II<3903F01FE000FFEB7FF89038F1E07E 9039F3801F803A07F7000FC0D803FEEB07E049EB03F04914F849130116FC150016FEA316 7FAA16FEA3ED01FCA26DEB03F816F06D13076DEB0FE001F614C09039F7803F009038F1E0 7E9038F0FFF8EC1FC091C8FCAB487EB512C0A328357EA42E>I<3807E01F00FFEB7FC090 38E1E3E09038E387F0380FE707EA03E613EE9038EC03E09038FC0080491300A45BB3A248 7EB512F0A31C257EA421>114 DI<1318A51338A31378A313F8120112031207001FB5FCB6FCA2D801 F8C7FCB215C0A93800FC011580EB7C03017E13006D5AEB0FFEEB01F81A347FB220>IIIIII<003FB512FCA2EB8003D83E0013F8003CEB07F00038EB0FE012300070EB1FC0EC3F80 0060137F150014FE495AA2C6485A495AA2495A495A495AA290387F000613FEA2485A485A 0007140E5B4848130C4848131CA24848133C48C7127C48EB03FC90B5FCA21F247EA325> I E /Fi 30 122 df<157815FC14031407141F14FF130F0007B5FCB6FCA2147F13F0EAF8 00C7FCB3B3B3A6007FB712FEA52F4E76CD43>49 DI< 91380FFFC091B512FC0107ECFF80011F15E090263FF8077F9026FF800113FC4848C76C7E D803F86E7E491680D807FC8048B416C080486D15E0A4805CA36C17C06C5B6C90C75AD801 FC1680C9FC4C13005FA24C5A4B5B4B5B4B13C04B5BDBFFFEC7FC91B512F816E016FCEEFF 80DA000713E0030113F89238007FFE707E7013807013C018E07013F0A218F8A27013FCA2 18FEA2EA03E0EA0FF8487E487E487EB57EA318FCA25E18F891C7FC6C17F0495C6C4816E0 01F04A13C06C484A1380D80FF84A13006CB44A5A6CD9F0075BC690B612F06D5D011F1580 010302FCC7FCD9001F1380374F7ACD43>I<177C17FEA2160116031607160FA2161F163F 167FA216FF5D5DA25D5DED1FBFED3F3F153E157C15FCEC01F815F0EC03E01407EC0FC015 80EC1F005C147E147C5C1301495A495A5C495A131F49C7FC133E5B13FC485A5B485A1207 485A485A90C8FC123E127E5ABA12C0A5C96C48C7FCAF020FB712C0A53A4F7CCE43>II66 D<932601FFFCEC01C0047FD9FFC013030307B600F81307033F03FE131F92 B8EA803F0203DAE003EBC07F020F01FCC7383FF0FF023F01E0EC0FF94A01800203B5FC49 4848C9FC4901F8824949824949824949824949824990CA7E494883A2484983485B1B7F48 5B481A3FA24849181FA3485B1B0FA25AA298C7FC5CA2B5FCAE7EA280A2F307C07EA36C7F A21B0F6C6D1980A26C1A1F6C7F1C006C6D606C6D187EA26D6C606D6D4C5A6D6D16036D6D 4C5A6D6D4C5A6D01FC4C5A6D6DEE7F806D6C6C6C4BC7FC6E01E0EC07FE020F01FEEC1FF8 0203903AFFE001FFF0020091B612C0033F93C8FC030715FCDB007F14E0040101FCC9FC52 5479D261>I73 D77 D82 D<91260FFF80130791B500F85B010702FF5B011F EDC03F49EDF07F9026FFFC006D5A4801E0EB0FFD4801800101B5FC4848C87E4848814915 0F001F824981123F4981007F82A28412FF84A27FA26D82A27F7F6D93C7FC14C06C13F014 FF15F86CECFF8016FC6CEDFFC017F06C16FC6C16FF6C17C06C836C836D826D82010F8213 03010082021F16801400030F15C0ED007F040714E01600173F050F13F08383A200788200 F882A3187FA27EA219E07EA26CEFFFC0A27F6D4B13806D17006D5D01FC4B5A01FF4B5A02 C04A5A02F8EC7FF0903B1FFFC003FFE0486C90B65AD8FC0393C7FC48C66C14FC48010F14 F048D9007F90C8FC3C5479D24B>I97 DI<913801FFF8021FEBFF8091B612F0010315FC010F9038 C00FFE903A1FFE0001FFD97FFC491380D9FFF05B4817C048495B5C5A485BA2486F138091 C7FC486F1300705A4892C8FC5BA312FFAD127F7FA27EA2EF03E06C7F17076C6D15C07E6E 140F6CEE1F806C6DEC3F006C6D147ED97FFE5C6D6CEB03F8010F9038E01FF0010390B55A 01001580023F49C7FC020113E033387CB63C>I<4DB47E0407B5FCA5EE001F1707B3A491 3801FFE0021F13FC91B6FC010315C7010F9038E03FE74990380007F7D97FFC0101B5FC49 487F4849143F484980485B83485B5A91C8FC5AA3485AA412FFAC127FA36C7EA37EA26C7F 5F6C6D5C7E6C6D5C6C6D49B5FC6D6C4914E0D93FFED90FEFEBFF80903A0FFFC07FCF6D90 B5128F0101ECFE0FD9003F13F8020301C049C7FC41547CD24B>I<913803FFC0023F13FC 49B6FC010715C04901817F903A3FFC007FF849486D7E49486D7E4849130F48496D7E4817 8048497F18C0488191C7FC4817E0A248815B18F0A212FFA490B8FCA318E049CAFCA6127F A27F7EA218E06CEE01F06E14037E6C6DEC07E0A26C6DEC0FC06C6D141F6C6DEC3F806D6C ECFF00D91FFEEB03FE903A0FFFC03FF8010390B55A010015C0021F49C7FC020113F03438 7CB63D>III<137F497E00 0313E0487FA2487FA76C5BA26C5BC613806DC7FC90C8FCADEB3FF0B5FCA512017EB3B3A6 B612E0A51B547BD325>105 D107 DIII<913801FFE0021F13FE91B612C0010315F0010F9038 807FFC903A1FFC000FFED97FF86D6C7E49486D7F48496D7F48496D7F4A147F48834890C8 6C7EA24883A248486F7EA3007F1880A400FF18C0AC007F1880A3003F18006D5DA26C5FA2 6C5F6E147F6C5F6C6D4A5A6C6D495B6C6D495B6D6C495BD93FFE011F90C7FC903A0FFF80 7FFC6D90B55A010015C0023F91C8FC020113E03A387CB643>I<903A3FF001FFE0B5010F 13FE033FEBFFC092B612F002F301017F913AF7F8007FFE0003D9FFE0EB1FFFC602806D7F 92C76C7F4A824A6E7F4A6E7FA2717FA285187F85A4721380AC1A0060A36118FFA2615F61 6E4A5BA26E4A5B6E4A5B6F495B6F4990C7FC03F0EBFFFC9126FBFE075B02F8B612E06F14 80031F01FCC8FC030313C092CBFCB1B612F8A5414D7BB54B>I<90397FE003FEB590380F FF80033F13E04B13F09238FE1FF89139E1F83FFC0003D9E3E013FEC6ECC07FECE78014EF 150014EE02FEEB3FFC5CEE1FF8EE0FF04A90C7FCA55CB3AAB612FCA52F367CB537>114 D<903903FFF00F013FEBFE1F90B7FC120348EB003FD80FF81307D81FE0130148487F4980 127F90C87EA24881A27FA27F01F091C7FC13FCEBFFC06C13FF15F86C14FF16C06C15F06C 816C816C81C681013F1580010F15C01300020714E0EC003F030713F015010078EC007F00 F8153F161F7E160FA27E17E07E6D141F17C07F6DEC3F8001F8EC7F0001FEEB01FE9039FF C00FFC6DB55AD8FC1F14E0D8F807148048C601F8C7FC2C387CB635>I<143EA6147EA414 FEA21301A313031307A2130F131F133F13FF5A000F90B6FCB8FCA426003FFEC8FCB3A9EE 07C0AB011FEC0F8080A26DEC1F0015806DEBC03E6DEBF0FC6DEBFFF86D6C5B021F5B0203 13802A4D7ECB34>II121 D E /Fj 31 122 df12 D<123C127EB4FCA21380A2127F123D1201A412031300A25A 1206120E120C121C5A5A126009177A8715>44 D<123C127E12FFA4127E123C08087A8715 >46 D66 D73 D79 D<007FB712FEA3903980 07F001D87C00EC003E0078161E0070160EA20060160600E01607A3481603A6C71500B3AB 4A7E011FB512FCA330337DB237>84 D97 DII<153FEC0FFFA3EC007F81AEEB07F0EB3FFC EBFC0F3901F003BF3907E001FF48487E48487F8148C7FCA25A127E12FEAA127E127FA27E 6C6C5BA26C6C5B6C6C4813803A03F007BFFC3900F81E3FEB3FFCD90FE0130026357DB32B >III<151F90391FC07F809039FFF8E3C03901F07FC73907 E03F033A0FC01F83809039800F8000001F80EB00074880A66C5CEB800F000F5CEBC01F6C 6C48C7FCEBF07C380EFFF8380C1FC0001CC9FCA3121EA2121F380FFFFEECFFC06C14F06C 14FC4880381F0001003EEB007F4880ED1F8048140FA56C141F007C15006C143E6C5C390F C001F83903F007E0C6B51280D91FFCC7FC22337EA126>III107 DI<2703F01FE013FF 00FF90267FF80313C0903BF1E07C0F03E0903BF3803E1C01F02807F7003F387FD803FE14 70496D486C7EA2495CA2495CB3486C496C487EB53BC7FFFE3FFFF0A33C217EA041>I<39 03F01FC000FFEB7FF09038F1E0FC9038F3807C3907F7007EEA03FE497FA25BA25BB3486C EB7F80B538C7FFFCA326217EA02B>II<3903F03F8000FFEBFFE09038F3C0F89038F7007ED807FE7F6C48EB1F804914 C049130F16E0ED07F0A3ED03F8A9150716F0A216E0150F16C06D131F6DEB3F80160001FF 13FC9038F381F89038F1FFE0D9F07FC7FC91C8FCAA487EB512C0A325307EA02B>I<9038 07F00390383FFC07EBFC0F3901F8038F3807E001000F14DF48486CB4FC497F123F90C77E 5AA25A5AA9127FA36C6C5B121F6D5B000F5B3907E003BF3903F0073F3800F81EEB3FF8EB 0FE090C7FCAAED7F8091380FFFFCA326307DA029>I<3803E07C38FFE1FF9038E38F8090 38E71FC0EA07EEEA03ECA29038FC0F8049C7FCA35BB2487EB512E0A31A217FA01E>II<1330A51370A313F0A21201A212 031207381FFFFEB5FCA23803F000AF1403A814073801F806A23800FC0EEB7E1CEB1FF8EB 07E0182F7FAD1E>IIIII<3A7FFF807FF8A33A07F8001FC00003EC0F 800001EC070015066C6C5BA26D131C017E1318A26D5BA2EC8070011F1360ECC0E0010F5B A2903807E180A214F3010390C7FC14FBEB01FEA26D5AA31478A21430A25CA214E05CA249 5A1278D8FC03C8FCA21306130EEA701CEA7838EA1FF0EA0FC025307F9F29>I E /Fk 7 117 df65 D97 DI<903807FF80013F13F090B512FC3903FE01FE48 48487EEA0FF8EA1FF0EA3FE0A2007F6D5A496C5A153000FF91C7FCA9127F7FA2003FEC07 807F6C6C130F000FEC1F00D807FE133E3903FF80FCC6EBFFF8013F13E0010790C7FC2121 7DA027>I<3901F81F8000FFEB7FF0ECFFF89038F9E3FC9038FBC7FE380FFF876C1307A2 13FEEC03FCEC01F8EC0060491300B1B512F0A41F217EA024>114 D<9038FFE1C0000713FF5A383F803F387E000F14075A14037EA26C6CC7FC13FCEBFFE06C 13FC806CEBFF80000F14C06C14E0C6FC010F13F0EB007F140F00F0130714037EA26C14E0 6C13076CEB0FC09038C01F8090B5120000F913FC38E03FE01C217DA023>I<133CA5137C A313FCA21201A212031207001FB51280B6FCA3D807FCC7FCB0EC03C0A79038FE07801203 3901FF0F006C13FEEB3FFCEB0FF01A2F7EAE22>I E /Fl 54 122 df<121EEA7F8012FF13C0A213E0A3127FEA1E601200A413E013C0A31201138012031300 5A1206120E5A5A5A12600B1D78C41B>39 D<140C141C1438147014E0EB01C01303EB0780 EB0F00A2131E5BA25B13F85B12015B1203A2485AA3485AA348C7FCA35AA2123EA2127EA4 127CA312FCB3A2127CA3127EA4123EA2123FA27EA36C7EA36C7EA36C7EA212017F12007F 13787FA27F7FA2EB0780EB03C01301EB00E014701438141C140C166476CA26>I<12C07E 12707E7E7E120F6C7E6C7EA26C7E6C7EA21378137C133C133E131E131FA2EB0F80A3EB07 C0A3EB03E0A314F0A21301A214F8A41300A314FCB3A214F8A31301A414F0A21303A214E0 A3EB07C0A3EB0F80A3EB1F00A2131E133E133C137C13785BA2485A485AA2485A48C7FC12 0E5A5A5A5A5A16647BCA26>I<121EEA7F8012FF13C0A213E0A3127FEA1E601200A413E0 13C0A312011380120313005A1206120E5A5A5A12600B1D78891B>44 DI<121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A0A78891B>I<14 FF010713E090381F81F890383E007C01FC133F4848EB1F8049130F4848EB07C04848EB03 E0A2000F15F0491301001F15F8A2003F15FCA390C8FC4815FEA54815FFB3A46C15FEA56D 1301003F15FCA3001F15F8A26C6CEB03F0A36C6CEB07E0000315C06D130F6C6CEB1F806C 6CEB3F00013E137C90381F81F8903807FFE0010090C7FC28447CC131>48 D<143014F013011303131F13FFB5FC13E713071200B3B3B0497E497E007FB6FCA3204278 C131>II<49B4FC010F13E0013F13FC 9038FE01FE3A01F0007F80D803C0EB3FC048C7EA1FE0120EED0FF0EA0FE0486C14F8A215 077F5BA26C48130FEA03C0C813F0A3ED1FE0A2ED3FC01680ED7F0015FE4A5AEC03F0EC1F C0D90FFFC7FC15F090380001FCEC007FED3F80ED1FC0ED0FE016F0ED07F816FC150316FE A2150116FFA3121EEA7F80487EA416FE491303A2007EC713FC00701407003015F8003814 0F6C15F06CEC1FE06C6CEB3FC0D803E0EB7F803A01FE01FE0039007FFFF8010F13E00101 90C7FC28447CC131>II<000615C0D807C0130701FCEB7F8090B612005D5D5D 15E0158026063FFCC7FC90C9FCAE14FF010713C090381F01F090383800FC01F0137ED807 C07F49EB1F8016C090C7120F000615E0C8EA07F0A316F81503A216FCA5123E127F487EA4 16F890C712075A006015F0A20070140F003015E00038EC1FC07E001EEC3F806CEC7F006C 6C13FE6C6C485A3901F807F039007FFFE0011F90C7FCEB07F826447BC131>II<121CA2EA1F8090B712C0A3481680A217005E0038C8120C0030 151C00705D0060153016705E5E4814014B5A4BC7FCC81206150E5D151815385D156015E0 4A5AA24A5A140792C8FC5CA25C141E143EA2147E147CA214FCA21301A3495AA41307A613 0FAA6D5AEB01C02A457BC231>I<14FF010713E0011F13F890387F00FE01FC133FD801F0 EB1F804848EB0FC049EB07E00007EC03F048481301A290C713F8481400A47FA26D130116 F07F6C6CEB03E013FC6C6CEB07C09039FF800F806C9038C01F006CEBF03EECF87839007F FEF090383FFFC07F01077F6D13F8497F90381E7FFFD97C1F1380496C13C02601E00313E0 48486C13F000079038007FF84848EB3FFC48C7120F003EEC07FE150148140016FF167F48 153FA2161FA56C151E007C153EA2007E153C003E157C6C15F86DEB01F06C6CEB03E06C6C EB07C0D803F8EB1F80C6B4EBFF0090383FFFFC010F13F00101138028447CC131>I<14FF 010713E0011F13F890387F80FC9038FC007E48487F4848EB1F804848EB0FC0000FEC07E0 485AED03F0485A16F8007F140190C713FCA25AA216FE1500A516FFA46C5CA36C7E5D121F 7F000F5C6C6C1306150E6C6C5B6C6C5BD8007C5B90383F01E090390FFF80FE903801FE00 90C8FC150116FCA4ED03F8A216F0D80F801307486C14E0486C130F16C0ED1F80A249EB3F 0049137E001EC75A001C495A000F495A3907E01FE06CB51280C649C7FCEB1FF028447CC1 31>I<121EEA7F80A2EAFFC0A4EA7F80A2EA1E00C7FCB3A5121EEA7F80A2EAFFC0A4EA7F 80A2EA1E000A2B78AA1B>I64 D<16C04B7EA34B7EA34B7EA34B7EA3ED19FEA3ED30FFA203707FED607FA203E07FEDC03F A2020180ED801FA2DA03007F160FA20206801607A24A6D7EA34A6D7EA34A6D7EA2027081 0260147FA202E08191B7FCA249820280C7121FA249C87F170FA20106821707A2496F7EA3 496F7EA3496F7EA201788313F8486C83D80FFF03037FB500E0027FEBFFC0A342477DC649 >I67 DI70 DII75 D77 DIII82 D<49B41303010FEBE007013F13F89039FE00FE0FD801F813 1FD807E0EB079F49EB03DF48486DB4FC48C8FC4881003E81127E82127C00FC81A282A37E 82A27EA26C6C91C7FC7F7FEA3FF813FE381FFFE06C13FE6CEBFFE06C14FC6C14FF6C15C0 013F14F0010F80010180D9001F7F14019138001FFF03031380816F13C0167F163F161F17 E000C0150FA31607A37EA36C16C0160F7E17806C151F6C16006C5D6D147ED8FBC05CD8F9 F0495AD8F07C495A90393FC00FE0D8E00FB51280010149C7FC39C0003FF02B487BC536> I<003FB912F8A3903BF0001FF8001F01806D481303003EC7150048187C0078183CA20070 181CA30060180CA5481806A5C81600B3B3A54B7EED7FFE49B77EA33F447DC346>II<003F B500E0011FB5FCA3C691C7000713E0D93FFC020190C7FC6D4815FC010F6F5A6D6C15E0A2 6D6C4A5A6D6C5D4DC8FC6D6D5B6E6C13065F6E6C131C6E6C13185F6E6C13706E6C13605F 913803FE01DA01FF5B4CC9FC6E1387ED7FC616CCED3FFC6F5A5E6F7E6F7EA26F7E82A203 067F150E92380C7FC04B6C7E15389238301FF04B6C7E15E04B6C7E4A486C7E14034B6C7E 02066D7F140E020C6E7E4A6E7E143802306E7E4A6E7E14E04A6E7E49486E7E130349C86C 7E496F7F5B496C8201FF83000701E0020313F8B500F8021FEBFFF0A344447EC349>88 D97 D99 D<167FED3FFFA315018182B3EC7F80903803 FFF090380FC07C90383F000E017E1307496D5AD803F87F48487F5B000F81485AA2485AA2 127FA290C8FC5AAB7E7FA2123FA26C7EA2000F5D7F6C6C5B00035C6C6C9038077F806C6C 010E13C0013F011C13FE90380FC0F8903803FFE09026007F0013002F467DC436>IIIIII108 DI<3901FC01FE00FF903807FFC091381E07F091383801F800 0701707F0003EBE0002601FDC07F5C01FF147F91C7FCA25BA35BB3A8486CECFF80B5D8F8 3F13FEA32F2C7DAB36>II<3901FC03FC00 FF90380FFF8091383C07E091387001F83A07FDE000FE00010180137F01FFEC3F8091C7EA 1FC04915E049140F17F0160717F8160317FCA3EE01FEABEE03FCA3EE07F8A217F0160F6D 15E0EE1FC06D143F17806EEB7E00D9FDC05B9039FCF003F891383C0FE091381FFF80DA03 FCC7FC91C9FCAE487EB512F8A32F3F7DAB36>I<3903F803F000FFEB1FFCEC3C3EEC707F 0007EBE0FF3803F9C000015B13FBEC007E153C01FF13005BA45BB3A748B4FCB512FEA320 2C7DAB26>114 D<90383FE0183901FFFC383907E01F78390F0003F8001E130148130000 7C1478127800F81438A21518A27EA27E6C6C13006C7E13FC383FFFE06C13FC6C13FF6C14 C06C14E0C614F0011F13F81300EC0FFC140300C0EB01FE1400157E7E153EA27EA36C143C 6C147C15786C14F86CEB01F039F38003E039F1F00F8039E07FFE0038C00FF01F2E7DAC26 >I<1306A5130EA4131EA3133E137EA213FE12011207001FB512F0B6FCA2C648C7FCB3A4 150CAA017E131C017F1318A26D133890381F8030ECC070903807E0E0903801FFC0903800 7F001E3E7EBC26>III120 DI E /Fm 27 122 df<120FEA3FC0EA7FE0 EAFFF0A6EA7FE0EA3FC0EA0F00C7FCB3B3A2120FEA3FC0EA7FE0EAFFF0A6EA7FE0EA3FC0 EA0F000C3E74BD24>58 D<170FA34D7EA24D7EA34D7EA34D7EA34C7F17DFA29338039FFC 178FA29338070FFE1707040F7FEE0E03A2041E80EE1C01A2043C80EE3800A24C80187FA2 4C80183FA24B4880181F0303814C130FA203078193C71207A24B81030E80A24B8284A24B 8284A24B82197F03F0824B153FA20201834B151FA202038392B8FCA24A83A292C9120702 0E8385A24A8485023C84023882A20278840270177FA202F0844A173FA24948841A1FA249 48841A0FA249CB7F1A074985865B496C85497E48486C4D7F000F01F8051F13F0B60407B6 12F0A45C657DE463>65 D67 D69 D73 D<933801FFE0043F13FF4BB612 E003079038003FF8DB1FF0EB03FEDB7FC0903800FF804A48C8EA3FE0DA03FCED0FF0DA0F F0ED03FC4A486F7E4A486F7E4A48707E4ACA6C7E4948717E4948717E4948717E4948717E 4948717E013F854A83017F864948727EA24890CC6C7EA24848737EA24848737EA2000F87 491907001F87A34848737EA4007F1C80A24985A400FF1CC0AF6C6C4F1380A5003F1C006D 61A3001F63A26D190F000F63A26C6C4F5AA36C6C4F5AA26C6D4E5A6C636E18FF017F626D 6C4D90C7FC6E5F011F616D6C4D5A6D6C4D5A0103616E171F6D6C4D5A6D6D4C5ADA3FC04C C8FCDA1FF0ED03FE6E6C4B5A6E6C4B5ADA01FFED3FE09126007FC0ECFF80DB1FF0D903FE C9FCDB07FFEB3FF8030190B512E0DB003F91CAFC040113E05A667AE367>79 DI83 D97 D<4AB47E020F13F8023F13FE9139FF007F80 D903FCEB07E0D907F0EB01F0D91FE0EB007849488049488049C87E48485D4915FF00034B 138048485CA2485AA2485AA2003F6F130049EC007C94C7FC127FA35B12FFAD127F7FA412 3F7FA2001FEE01C07F000F16036D168012076C6C15076D160000015E6C6C151E6D6C5C6D 6C5C6D6C5CD90FF8495AD903FCEB07C0903A00FF803F8091263FFFFEC7FC020F13F80201 138032417CBF3A>99 D101 DIII<133C13FF487F487FA66C5B6C90C7FC133C90C8FCB3A2EB03C0EA07FF127FA41201EA 007FA2133FB3B3AC497E497EB612E0A41B5F7DDE23>I108 DIIII<9039078003F8D807FFEB0FFFB5013F13C0 92387C0FE0913881F01F9238E03FF00001EB838039007F8700148FEB3F8E029CEB1FE0EE 0FC00298EB030002B890C7FCA214B014F0A25CA55CB3B0497EEBFFF8B612FCA42C3F7CBE 33>114 D<9139FFE00180010FEBFC03017FEBFF073A01FF001FCFD803F8EB03EFD807E0 EB01FF48487F4848147F48C8123F003E151F007E150F127CA200FC1507A316037EA27E7F 6C7E6D91C7FC13F8EA3FFE381FFFF06CEBFF806C14F86C14FF6C15C06C6C14F0011F8001 0714FED9007F7F02031480DA003F13C01503030013E0167F00E0ED1FF0160F17F86C1507 1603A36C1501A37EA26C16F016037E17E06D14076DEC0FC06D1580D8FDF0141FD8F8F8EC 7F00013E14FC3AF01FC00FF80107B512E0D8E001148027C0003FF8C7FC2D417DBF34>I< 1438A71478A414F8A31301A31303A21307130F131FA2137F13FF1203000F90B6FCB8FCA3 260007F8C8FCB3AE17E0AE6D6CEB01C0A316036D6C148016076D6C14006E6C5A91383FC0 1E91381FF07C6EB45A020313E09138007F802B597FD733>IIII121 D E end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin %%EndSetup %%Page: 1 1 1 0 bop 265 739 a Fm(On)44 b(Con)l(trolling)i(the)d(In)l(teractions)h (of)f(Soft)l(w)l(are)g(Comp)t(onen)l(ts:)1086 922 y(An)h(Ev)l (olutionary)g(P)l(ersp)t(ectiv)l(e)744 1162 y Fl(Spiros)32 b(Mancoridis)299 1279 y(Dept.)44 b(of)32 b(Math.)44 b(and)32 b(Computer)h(Science)752 1395 y(Drexel)f(Univ)m(ersit)m(y)674 1511 y(3141)f(Chestn)m(ut)k(Street)495 1627 y(Philadelphia,)30 b(P)-8 b(A,)33 b(USA)g(19104)419 1743 y(e-mail:)40 b (smancori@mcs.drexel.edu)642 1860 y(Phone:)k(\(215\))32 b(895-6824)681 1976 y(F)-11 b(AX:)33 b(\(215\))f(895-1582)2503 1162 y(Ric)m(hard)g(C.)h(Holt)2265 1279 y(Dept.)43 b(of)32 b(Computer)h(Science)2387 1395 y(Univ)m(ersit)m(y)g(of)f(T)-8 b(oron)m(to)2346 1511 y(10)32 b(King's)g(College)f(Road)2165 1627 y(T)-8 b(oron)m(to,)32 b(ON,)h(Canada)g(M5S)g(3G4)2169 1743 y(e-mail:)41 b(holt@turing.toron)m(to.edu)2362 1860 y(Phone:)k(\(416\))31 b(978-8726)2402 1976 y(F)-11 b(AX:)32 b(\(416\))g(971-2326)1743 2279 y Fk(Abstract)473 2409 y Fj(Being)38 b(able)f(to)g(con)n(trol)h(the)f(in)n(teractions)g(among) g(soft)n(w)n(are)i(comp)r(onen)n(ts)d(is)i(essen)n(tial)g(for)g(the)358 2500 y(successful)f(initial)g(dev)n(elopmen)n(t)d(and)i(subsequen)n(t)f (main)n(tenance)g(of)i(large)g(and)f(complex)f(soft)n(w)n(are)358 2591 y(systems.)e(The)25 b(con)n(trol)h(of)g(these)f(in)n(teractions)h (o)r(ccurs)g(at)f(v)l(arious)g(lev)n(els)h(of)g(a)f(soft)n(w)n(are)i (sp)r(eci\014cation.)358 2683 y(In)c(this)i(pap)r(er)f(w)n(e)h(describ) r(e)g(ho)n(w)f(notations)h(are)g(used)f(to)h(sp)r(ecify)g(constrain)n (ts)g(on)f(the)g(in)n(teractions)i(of)358 2774 y(soft)n(w)n(are)21 b(comp)r(onen)n(ts)d(at)i(the)f(arc)n(hitectural,)j(mo)r(dule,)f(and)e (blo)r(c)n(k)g(structure)g(lev)n(el.)33 b(Our)19 b(presen)n(tation)358 2865 y(giv)n(es)k(an)g(ev)n(olutionary)g(p)r(ersp)r(ectiv)n(e)g(b)n(y)f (sho)n(wing)i(that)f(scoping)g(rules)h(for)g(constraining)g(arc)n (hitectural)358 2957 y(in)n(teractions)h(ha)n(v)n(e)e(ev)n(olv)n(ed)h (from)g(rules)h(for)g(constraining)h(mo)r(dule)d(in)n(teractions,)j (whic)n(h)e(in)h(turn)e(ha)n(v)n(e)358 3048 y(ev)n(olv)n(ed)h(from)h (scoping)h(rules)f(for)h(con)n(trolling)g(the)f(in)n(teractions)h(that) f(o)r(ccur)g(b)r(et)n(w)n(een)g(comp)r(onen)n(ts)f(in)358 3139 y(blo)r(c)n(k)h(structured)g(language.)150 3414 y Fi(1)135 b(In)l(tro)t(duction)150 3596 y Fh(Large)32 b(soft)n(w)n(are)h(systems)g(consist)h(of)g(man)n(y)f(comp)r(onen)n(ts) h(\(resources\))e(that)i(in)n(teract)g(in)g(in)n(tricate)g(w)n(a)n(ys.) 150 3695 y(Being)40 b(able)g(to)h(con)n(trol)e(these)i(in)n(teractions) e(is)i(critical)f(for)g(b)r(oth)h(the)g(initial)g(dev)n(elopmen)n(t)f (and)g(long-)150 3795 y(term)30 b(main)n(tenance)f(of)h(a)f(soft)n(w)n (are)g(system.)43 b(Early)28 b(programming)g(languages,)h(suc)n(h)g(as) g(ALGOL-60)g([12)o(],)150 3895 y(recognized)e(the)i(imp)r(ortance)f(of) g(limiting)h(the)g(in)n(teractions)e(of)i(\014ne-grained)e(resources)f (suc)n(h)i(as)g(v)-5 b(ariables,)150 3994 y(constan)n(ts,)21 b(and)g(t)n(yp)r(es)f(b)n(y)h(encapsulating)e(them)i(in)n(to)g(blo)r(c) n(k)f(structures)g(and)g(using)h(scoping)e(rules)h(to)h(dictate)150 4094 y(ho)n(w)27 b(these)h(resources)d(w)n(ere)i(able)g(to)h(in)n (teract.)275 4193 y(As)k(soft)n(w)n(are)g(systems)g(grew)g(in)h(size,)h (blo)r(c)n(k)e(structures)g(w)n(ere)g(supplemen)n(ted)i(b)n(y)e (constructs)g(suc)n(h)h(as)150 4293 y(mo)r(dules)f(and)g(classes.)50 b(Man)n(y)32 b(mo)r(dern)g(programming)e(languages,)h(suc)n(h)h(as)g (Mo)r(dula-3)f([1],)j(supp)r(ort)e(the)150 4393 y(encapsulation)c(of)h (a)g(v)-5 b(ariet)n(y)28 b(of)h(resources,)f(suc)n(h)h(as)f(pro)r (cedures)g(and)h(functions,)h(in)n(to)f(mo)r(dules.)42 b(In)29 b(these)150 4492 y(languages,)23 b(blo)r(c)n(k)g(structure)g (scoping)g(is)h(still)g(used)g(to)g(con)n(trol)e(the)j(in)n(teractions) d(within)j(pro)r(cedure)e(blo)r(c)n(ks.)150 4592 y(Ho)n(w)n(ev)n(er,)38 b(it)g(is)f(supplemen)n(ted)h(b)n(y)f(mo)r(dule)h(scoping)e(rules,)j (whic)n(h)f(are)e(used)h(to)h(restrict)e(the)i(visibilit)n(y)150 4692 y(and,)30 b(hence,)f(in)n(teractions)f(of)h(the)h(resources)d (that)j(are)e(encapsulated)g(inside)i(a)e(mo)r(dule.)42 b(Mo)r(dules)30 b(p)r(ermit)150 4791 y(programmers)f(to)i(list)h(the)g (resources)d(of)j(a)f(mo)r(dule)h(that)g(are)e(accessible)h(to)g(other) g(mo)r(dules.)49 b(This)31 b(list)h(is)150 4891 y(called)c(the)i Fg(interfac)l(e)f Fh(of)g(the)g(mo)r(dule.)41 b(Mo)r(dule)29 b(scoping)f(rules)g(determine)h(the)g(visibilit)n(y)g(of)g (encapsulated)150 4990 y(resources)d(b)n(y)h(means)g(of)h Fg(imp)l(ort)g Fh(and)f Fg(exp)l(ort)h Fh(directiv)n(es.)p eop %%Page: 2 2 2 1 bop 1086 2506 a @beginspecial 131 @llx 169 @lly 485 @urx 622 @ury 1984 @rwi @setspecial %%BeginDocument: pics/blockProgram.ps 50 dict begin /arrowHeight 8 def /arrowWidth 4 def /none null def /numGraphicParameters 17 def /stringLimit 65535 def /Begin { save numGraphicParameters dict begin } def /End { end restore } def /SetB { dup type /nulltype eq { pop false /brushRightArrow idef false /brushLeftArrow idef true /brushNone idef } { /brushDashOffset idef /brushDashArray idef 0 ne /brushRightArrow idef 0 ne /brushLeftArrow idef /brushWidth idef false /brushNone idef } ifelse } def /SetCFg { /fgblue idef /fggreen idef /fgred idef } def /SetCBg { /bgblue idef /bggreen idef /bgred idef } def /SetF { /printSize idef /printFont idef } def /SetP { dup type /nulltype eq { pop true /patternNone idef } { dup -1 eq { /patternGrayLevel idef /patternString idef } { /patternGrayLevel idef } ifelse false /patternNone idef } ifelse } def /BSpl { 0 begin storexyn newpath n 1 gt { 0 0 0 0 0 0 1 1 true subspline n 2 gt { 0 0 0 0 1 1 2 2 false subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline } if n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Circ { newpath 0 360 arc patternNone not { ifill } if brushNone not { istroke } if } def /CBSpl { 0 begin dup 2 gt { storexyn newpath n 1 sub dup 0 0 1 1 2 2 true subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline n 2 sub dup n 1 sub dup 0 0 1 1 false subspline patternNone not { ifill } if brushNone not { istroke } if } { Poly } ifelse end } dup 0 4 dict put def /Elli { 0 begin newpath 4 2 roll translate scale 0 0 1 0 360 arc patternNone not { ifill } if brushNone not { istroke } if end } dup 0 1 dict put def /Line { 0 begin 2 storexyn newpath x 0 get y 0 get moveto x 1 get y 1 get lineto brushNone not { istroke } if 0 0 1 1 leftarrow 0 0 1 1 rightarrow end } dup 0 4 dict put def /MLine { 0 begin storexyn newpath n 1 gt { x 0 get y 0 get moveto 1 1 n 1 sub { /i exch def x i get y i get lineto } for patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Poly { 3 1 roll newpath moveto -1 add { lineto } repeat closepath patternNone not { ifill } if brushNone not { istroke } if } def /Rect { 0 begin /t exch def /r exch def /b exch def /l exch def newpath l b moveto l t lineto r t lineto r b lineto closepath patternNone not { ifill } if brushNone not { istroke } if end } dup 0 4 dict put def /Text { ishow } def /idef { dup where { pop pop pop } { exch def } ifelse } def /ifill { 0 begin gsave patternGrayLevel -1 ne { fgred bgred fgred sub patternGrayLevel mul add fggreen bggreen fggreen sub patternGrayLevel mul add fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor eofill } { eoclip originalCTM setmatrix pathbbox /t exch def /r exch def /b exch def /l exch def /w r l sub ceiling cvi def /h t b sub ceiling cvi def /imageByteWidth w 8 div ceiling cvi def /imageHeight h def bgred bggreen bgblue setrgbcolor eofill fgred fggreen fgblue setrgbcolor w 0 gt h 0 gt and { l b translate w h scale w h true [w 0 0 h neg 0 h] { patternproc } imagemask } if } ifelse grestore end } dup 0 8 dict put def /istroke { gsave brushDashOffset -1 eq { [] 0 setdash 1 setgray } { brushDashArray brushDashOffset setdash fgred fggreen fgblue setrgbcolor } ifelse brushWidth setlinewidth originalCTM setmatrix stroke grestore } def /ishow { 0 begin gsave fgred fggreen fgblue setrgbcolor /fontDict printFont findfont printSize scalefont dup setfont def /descender fontDict begin 0 [FontBBox] 1 get FontMatrix end transform exch pop def /vertoffset 0 descender sub printSize sub printFont /Courier ne printFont /Courier-Bold ne and { 1 add } if def { 0 vertoffset moveto show /vertoffset vertoffset printSize sub def } forall grestore end } dup 0 3 dict put def /patternproc { 0 begin /patternByteLength patternString length def /patternHeight patternByteLength 8 mul sqrt cvi def /patternWidth patternHeight def /patternByteWidth patternWidth 8 idiv def /imageByteMaxLength imageByteWidth imageHeight mul stringLimit patternByteWidth sub min def /imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv patternHeight mul patternHeight max def /imageHeight imageHeight imageMaxHeight sub store /imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def 0 1 imageMaxHeight 1 sub { /y exch def /patternRow y patternByteWidth mul patternByteLength mod def /patternRowString patternString patternRow patternByteWidth getinterval def /imageRow y imageByteWidth mul def 0 patternByteWidth imageByteWidth 1 sub { /x exch def imageString imageRow x add patternRowString putinterval } for } for imageString end } dup 0 12 dict put def /min { dup 3 2 roll dup 4 3 roll lt { exch } if pop } def /max { dup 3 2 roll dup 4 3 roll gt { exch } if pop } def /arrowhead { 0 begin transform originalCTM itransform /taily exch def /tailx exch def transform originalCTM itransform /tipy exch def /tipx exch def /dy tipy taily sub def /dx tipx tailx sub def /angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def gsave originalCTM setmatrix tipx tipy translate angle rotate newpath 0 0 moveto arrowHeight neg arrowWidth 2 div lineto arrowHeight neg arrowWidth 2 div neg lineto closepath patternNone not { originalCTM setmatrix /padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul arrowWidth div def /padtail brushWidth 2 div def tipx tipy translate angle rotate padtip 0 translate arrowHeight padtip add padtail add arrowHeight div dup scale arrowheadpath ifill } if brushNone not { originalCTM setmatrix tipx tipy translate angle rotate arrowheadpath istroke } if grestore end } dup 0 9 dict put def /arrowheadpath { newpath 0 0 moveto arrowHeight neg arrowWidth 2 div lineto arrowHeight neg arrowWidth 2 div neg lineto closepath } def /leftarrow { 0 begin y exch get /taily exch def x exch get /tailx exch def y exch get /tipy exch def x exch get /tipx exch def brushLeftArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /rightarrow { 0 begin y exch get /tipy exch def x exch get /tipx exch def y exch get /taily exch def x exch get /tailx exch def brushRightArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /midpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 x1 add 2 div y0 y1 add 2 div end } dup 0 4 dict put def /thirdpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 2 mul x1 add 3 div y0 2 mul y1 add 3 div end } dup 0 4 dict put def /subspline { 0 begin /movetoNeeded exch def y exch get /y3 exch def x exch get /x3 exch def y exch get /y2 exch def x exch get /x2 exch def y exch get /y1 exch def x exch get /x1 exch def y exch get /y0 exch def x exch get /x0 exch def x1 y1 x2 y2 thirdpoint /p1y exch def /p1x exch def x2 y2 x1 y1 thirdpoint /p2y exch def /p2x exch def x1 y1 x0 y0 thirdpoint p1x p1y midpoint /p0y exch def /p0x exch def x2 y2 x3 y3 thirdpoint p2x p2y midpoint /p3y exch def /p3x exch def movetoNeeded { p0x p0y moveto } if p1x p1y p2x p2y p3x p3y curveto end } dup 0 17 dict put def /storexyn { /n exch def /y n array def /x n array def n 1 sub -1 0 { /i exch def y i 3 2 roll put x i 3 2 roll put } for } def %I Idraw 7 Grid 8 Begin %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 0.8 0 0 0.8 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* /Times-Bold 14 SetF %I t [ 1 0 0 1 168 774 ] concat %I [ (program MAIN;) (-- local declarations for MAIN) () () ( procedure P1;) ( -- local declarations for P1) () ( procedure P3;) ( -- local decalartions for P3) () ( begin) ( -- statements for P3) ( end P3;) () () ( procedure P4;) ( -- local declarations for P4) () ( begin) ( -- statements for P4) ( end P4;) () ( begin) ( -- statements for P1) ( end P1;) () () ( procedure P2;) ( -- local declarations for P2) () ( begin) ( -- statements for P2) ( end P2;) () (begin) ( -- statements for MAIN) (end MAIN.) () () ( ) ] Text End Begin %I MLine %I b 65535 3 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 148 197 ] concat %I 4 264 476 291 476 291 405 265 405 4 MLine End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-medium-i-*-140-* /Times-Italic 14 SetF %I t [ 1 0 0 1 443 652 ] concat %I [ (Block) ( P3) ] Text End Begin %I MLine %I b 65535 3 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 152 80 ] concat %I 4 264 476 291 476 291 405 265 405 4 MLine End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-medium-i-*-140-* /Times-Italic 14 SetF %I t [ 1 0 0 1 447 535 ] concat %I [ (Block) ( P4) ] Text End Begin %I MLine %I b 65535 3 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1.41935 0 0 1.0807 86.3387 -127.56 ] concat %I 4 264 476 291 476 291 405 265 405 4 MLine End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-medium-i-*-140-* /Times-Italic 14 SetF %I t [ 1 0 0 1 507 363 ] concat %I [ (Block) ( P2) ] Text End Begin %I MLine %I b 65535 3 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1.06073 153 173.457 ] concat %I 4 302 501 346 501 346 241 304 241 4 MLine End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-medium-i-*-140-* /Times-Italic 14 SetF %I t [ 1 0 0 1 507 592 ] concat %I [ (Block) ( P1) ] Text End Begin %I MLine %I b 65535 3 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 148 197 ] concat %I 4 360 570 410 570 410 62 360 62 4 MLine End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-medium-i-*-140-* /Times-Italic 14 SetF %I t [ 1 0 0 1 567 552 ] concat %I [ (Outer) (Block) (MAIN) ] Text End End %I eop showpage end %%EndDocument @endspecial 969 2772 a Fh(Figure)27 b(1:)36 b Ff(Static)d(Blo)s(c)m(k) f(Structure)h(of)e(a)i(Program)275 3037 y Fh(Arc)n(hitectural)c (notations,)i(suc)n(h)f(as)g(the)h(Soft)n(w)n(are)e(Landscap)r(e)h([13) o(],)i(w)n(ere)e(dev)n(elop)r(ed)g(in)h(order)e(to)h(en-)150 3137 y(capsulate)k(coarse-grained)d(resources,)j(suc)n(h)g(as)f(en)n (tire)h(mo)r(dules,)j(in)n(to)d(subsystems.)56 b(These)35 b(subsystems)150 3236 y(ha)n(v)n(e)23 b(in)n(terfaces)g(to,)i(and)f (dep)r(endencies)h(with,)g(other)f(subsystems)f(within)i(the)g(same)e (system.)36 b(The)24 b(scoping)150 3336 y(rules)32 b(at)g(this)g(lev)n (el)g(are)f(used)h(to)h(con)n(trol)d(the)j(dep)r(endencies)g(among)e (the)h(v)-5 b(arious)31 b(subsystems)h(in)h(a)e(sub-)150 3436 y(system)e(hierarc)n(h)n(y)-7 b(.)39 b(T)-7 b(o)29 b(a)f(large)g(exten)n(t,)h(these)g(scoping)f(concepts)h(ha)n(v)n(e)f (ev)n(olv)n(ed)f(from)i(concepts)f(found)i(in)150 3535 y(programming)25 b(languages)h(that)i(supp)r(ort)f(mo)r(dules)h(and)f (classes.)275 3635 y(Our)33 b(presen)n(tation)g(of)h(scoping)f(rules)h (giv)n(es)f(an)g(ev)n(olutionary)f(p)r(ersp)r(ectiv)n(e.)57 b(In)34 b(Section)g(2,)h(w)n(e)f(b)r(egin)150 3734 y(b)n(y)39 b(describing)e(blo)r(c)n(k)i(structure)f(scoping)g(using)g(ALGOL-60)g ([12)o(])h(as)f(an)g(example.)70 b(In)39 b(Section)g(3,)i(w)n(e)150 3834 y(describ)r(e)29 b(mo)r(dule)h(scoping)e(using)h(Mo)r(dula-3)f ([1])h(as)g(an)g(example.)42 b(These)29 b(t)n(w)n(o)f(kinds)h(of)h (scoping)e(pre-date)150 3934 y(subsystem)36 b(scoping,)i(whic)n(h)f(is) f(describ)r(ed)g(in)h(Section)f(4.)64 b(W)-7 b(e)37 b(describ)r(e)f (subsystem)g(scoping)g(using)g(the)150 4033 y(Soft)n(w)n(are)26 b(Landscap)r(e)h([13)o(])h(arc)n(hitectural)e(notation)h(as)g(an)g (example.)150 4308 y Fi(2)135 b(Blo)t(c)l(k)45 b(Structure)f(Scoping) 150 4490 y Fh(One)34 b(of)h(the)g(earliest)f(programming)f(language)g (mec)n(hanisms)h(for)g(con)n(trolling)f(the)i(scop)r(e)g(of)f (resources)f(is)150 4589 y(the)c(blo)r(c)n(k)g(structure)f(scoping)g (of)h(ALGOL-60)f([12)o(].)41 b(Because)28 b(of)h(its)g(elegance)e(and)i (e\016cien)n(t)g(implemen)n(ta-)150 4689 y(tion,)35 b(blo)r(c)n(k)f (structure)f(scoping)g(has)g(b)r(een)h(adopted)f(b)n(y)h(a)f(wide)h (range)e(of)i(programming)e(languages.)53 b(In)150 4789 y(a)35 b(t)n(ypical)g(blo)r(c)n(k)g(structured)h(program)d(\(Figure)i (1\),)j(eac)n(h)d(pro)r(cedure)f(con)n(tains)h(a)g(set)h(of)f(nested)h (blo)r(c)n(ks.)150 4888 y(The)27 b(declarations)f(of)h(eac)n(h)f(blo)r (c)n(k)h(de\014ne)g(the)h(lo)r(cal)f(en)n(vironmen)n(t)f(of)h(a)g(blo)r (c)n(k.)36 b(If)28 b(a)e(resource)g(is)h(referenced)150 4988 y(within)i(the)f(b)r(o)r(dy)h(of)f(a)g(blo)r(c)n(k)f(and)h(no)g (lo)r(cal)g(declaration)e(for)i(that)g(resource)f(exists,)h(then)g(the) h(reference)e(is)150 5088 y(considered)e(a)i(reference)e(to)h(a)h (declaration)e(within)i(the)g(blo)r(c)n(k)f(that)g(immediately)h (encloses)e(the)i(\014rst)g(blo)r(c)n(k.)p eop %%Page: 3 3 3 2 bop 1204 1428 a @beginspecial 184 @llx 350 @lly 423 @urx 525 @ury 1700 @rwi @setspecial %%BeginDocument: pics/algol.ps 50 dict begin /arrowHeight 8 def /arrowWidth 4 def /none null def /numGraphicParameters 17 def /stringLimit 65535 def /Begin { save numGraphicParameters dict begin } def /End { end restore } def /SetB { dup type /nulltype eq { pop false /brushRightArrow idef false /brushLeftArrow idef true /brushNone idef } { /brushDashOffset idef /brushDashArray idef 0 ne /brushRightArrow idef 0 ne /brushLeftArrow idef /brushWidth idef false /brushNone idef } ifelse } def /SetCFg { /fgblue idef /fggreen idef /fgred idef } def /SetCBg { /bgblue idef /bggreen idef /bgred idef } def /SetF { /printSize idef /printFont idef } def /SetP { dup type /nulltype eq { pop true /patternNone idef } { dup -1 eq { /patternGrayLevel idef /patternString idef } { /patternGrayLevel idef } ifelse false /patternNone idef } ifelse } def /BSpl { 0 begin storexyn newpath n 1 gt { 0 0 0 0 0 0 1 1 true subspline n 2 gt { 0 0 0 0 1 1 2 2 false subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline } if n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Circ { newpath 0 360 arc patternNone not { ifill } if brushNone not { istroke } if } def /CBSpl { 0 begin dup 2 gt { storexyn newpath n 1 sub dup 0 0 1 1 2 2 true subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline n 2 sub dup n 1 sub dup 0 0 1 1 false subspline patternNone not { ifill } if brushNone not { istroke } if } { Poly } ifelse end } dup 0 4 dict put def /Elli { 0 begin newpath 4 2 roll translate scale 0 0 1 0 360 arc patternNone not { ifill } if brushNone not { istroke } if end } dup 0 1 dict put def /Line { 0 begin 2 storexyn newpath x 0 get y 0 get moveto x 1 get y 1 get lineto brushNone not { istroke } if 0 0 1 1 leftarrow 0 0 1 1 rightarrow end } dup 0 4 dict put def /MLine { 0 begin storexyn newpath n 1 gt { x 0 get y 0 get moveto 1 1 n 1 sub { /i exch def x i get y i get lineto } for patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Poly { 3 1 roll newpath moveto -1 add { lineto } repeat closepath patternNone not { ifill } if brushNone not { istroke } if } def /Rect { 0 begin /t exch def /r exch def /b exch def /l exch def newpath l b moveto l t lineto r t lineto r b lineto closepath patternNone not { ifill } if brushNone not { istroke } if end } dup 0 4 dict put def /Text { ishow } def /idef { dup where { pop pop pop } { exch def } ifelse } def /ifill { 0 begin gsave patternGrayLevel -1 ne { fgred bgred fgred sub patternGrayLevel mul add fggreen bggreen fggreen sub patternGrayLevel mul add fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor eofill } { eoclip originalCTM setmatrix pathbbox /t exch def /r exch def /b exch def /l exch def /w r l sub ceiling cvi def /h t b sub ceiling cvi def /imageByteWidth w 8 div ceiling cvi def /imageHeight h def bgred bggreen bgblue setrgbcolor eofill fgred fggreen fgblue setrgbcolor w 0 gt h 0 gt and { l b translate w h scale w h true [w 0 0 h neg 0 h] { patternproc } imagemask } if } ifelse grestore end } dup 0 8 dict put def /istroke { gsave brushDashOffset -1 eq { [] 0 setdash 1 setgray } { brushDashArray brushDashOffset setdash fgred fggreen fgblue setrgbcolor } ifelse brushWidth setlinewidth originalCTM setmatrix stroke grestore } def /ishow { 0 begin gsave fgred fggreen fgblue setrgbcolor /fontDict printFont findfont printSize scalefont dup setfont def /descender fontDict begin 0 [FontBBox] 1 get FontMatrix end transform exch pop def /vertoffset 0 descender sub printSize sub printFont /Courier ne printFont /Courier-Bold ne and { 1 add } if def { 0 vertoffset moveto show /vertoffset vertoffset printSize sub def } forall grestore end } dup 0 3 dict put def /patternproc { 0 begin /patternByteLength patternString length def /patternHeight patternByteLength 8 mul sqrt cvi def /patternWidth patternHeight def /patternByteWidth patternWidth 8 idiv def /imageByteMaxLength imageByteWidth imageHeight mul stringLimit patternByteWidth sub min def /imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv patternHeight mul patternHeight max def /imageHeight imageHeight imageMaxHeight sub store /imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def 0 1 imageMaxHeight 1 sub { /y exch def /patternRow y patternByteWidth mul patternByteLength mod def /patternRowString patternString patternRow patternByteWidth getinterval def /imageRow y imageByteWidth mul def 0 patternByteWidth imageByteWidth 1 sub { /x exch def imageString imageRow x add patternRowString putinterval } for } for imageString end } dup 0 12 dict put def /min { dup 3 2 roll dup 4 3 roll lt { exch } if pop } def /max { dup 3 2 roll dup 4 3 roll gt { exch } if pop } def /arrowhead { 0 begin transform originalCTM itransform /taily exch def /tailx exch def transform originalCTM itransform /tipy exch def /tipx exch def /dy tipy taily sub def /dx tipx tailx sub def /angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def gsave originalCTM setmatrix tipx tipy translate angle rotate newpath 0 0 moveto arrowHeight neg arrowWidth 2 div lineto arrowHeight neg arrowWidth 2 div neg lineto closepath patternNone not { originalCTM setmatrix /padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul arrowWidth div def /padtail brushWidth 2 div def tipx tipy translate angle rotate padtip 0 translate arrowHeight padtip add padtail add arrowHeight div dup scale arrowheadpath ifill } if brushNone not { originalCTM setmatrix tipx tipy translate angle rotate arrowheadpath istroke } if grestore end } dup 0 9 dict put def /arrowheadpath { newpath 0 0 moveto arrowHeight neg arrowWidth 2 div lineto arrowHeight neg arrowWidth 2 div neg lineto closepath } def /leftarrow { 0 begin y exch get /taily exch def x exch get /tailx exch def y exch get /tipy exch def x exch get /tipx exch def brushLeftArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /rightarrow { 0 begin y exch get /tipy exch def x exch get /tipx exch def y exch get /taily exch def x exch get /tailx exch def brushRightArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /midpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 x1 add 2 div y0 y1 add 2 div end } dup 0 4 dict put def /thirdpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 2 mul x1 add 3 div y0 2 mul y1 add 3 div end } dup 0 4 dict put def /subspline { 0 begin /movetoNeeded exch def y exch get /y3 exch def x exch get /x3 exch def y exch get /y2 exch def x exch get /x2 exch def y exch get /y1 exch def x exch get /x1 exch def y exch get /y0 exch def x exch get /x0 exch def x1 y1 x2 y2 thirdpoint /p1y exch def /p1x exch def x2 y2 x1 y1 thirdpoint /p2y exch def /p2x exch def x1 y1 x0 y0 thirdpoint p1x p1y midpoint /p0y exch def /p0x exch def x2 y2 x3 y3 thirdpoint p2x p2y midpoint /p3y exch def /p3x exch def movetoNeeded { p0x p0y moveto } if p1x p1y p2x p2y p3x p3y curveto end } dup 0 17 dict put def /storexyn { /n exch def /y n array def /x n array def n 1 sub -1 0 { /i exch def y i 3 2 roll put x i 3 2 roll put } for } def %I Idraw 7 Grid 8 Begin %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 0.8 0 0 0.8 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Rect %I b 65535 4 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 3.16224 0 0 2.70795 174.822 -911.55 ] concat %I 19 500 111 571 Rect End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* /Times-Bold 14 SetF %I t [ 1 0 0 1 234 651 ] concat %I [ (Rule) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 273 507 ] concat %I [ (block) ] Text End Begin %I Line %I b 13107 3 0 1 [2 2 2 2 2 2 2 2] 15 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1.3749 0 0 1 203.7 175 ] concat %I 94 375 147 375 Line End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 255 484 ] concat %I [ (block) ] Text End Begin %I Rect %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1.48929 0 0 2.33268 175.74 -86.836 ] concat %I 63 249 115 293 Rect End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 361 547 ] concat %I [ (see) ] Text End Begin %I Poly %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 13.1136 0 0 9.0157 -655.025 -4199.65 ] concat %I 4 69 518 69 534 89 534 89 518 4 Poly End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 416 506 ] concat %I [ (block) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 288 546 ] concat %I [ (block) ] Text End Begin %I Rect %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 2.15246 0 0 2.00878 137.927 -509.451 ] concat %I 69 518 89 534 Rect End Begin %I Rect %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 2.55047 0 0 2.56852 105.882 -804.53 ] concat %I 69 518 89 534 Rect End Begin %I Rect %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1.48929 0 0 2.33268 318.74 -87.836 ] concat %I 63 249 115 293 Rect End End %I eop showpage end %%EndDocument @endspecial 1189 1694 a Fh(Figure)27 b(2:)37 b Ff(ALGOL-60)32 b(Blo)s(c)m(k)f(Scoping)150 1959 y Fh(If)24 b(no)f(declaration)g (exists)g(there,)h(then)g(it)h(refers)d(to)i(a)f(declaration)f(in)i (the)g(blo)r(c)n(k)f(that)h(immediately)g(encloses)150 2059 y(the)32 b(\014rst)g(blo)r(c)n(k,)g(and)g(so)f(on.)50 b(If)32 b(a)g(blo)r(c)n(k)f(con)n(tains)g(another)g(blo)r(c)n(k,)h (then)h(an)n(y)e(lo)r(cal)g(declarations)f(within)150 2158 y(the)e(inner)f(blo)r(c)n(k)g(are)g(completely)g(hidden)i(from)e (the)h(outer)f(blo)r(c)n(k.)275 2258 y(W)-7 b(e)28 b(use)g(the)g(ASF)h (\(Arc)n(hitectural)f(St)n(yle)f(F)-7 b(ormalism\))28 b([8],)g(\(see)g(Figure)f(2\))h(to)g(de\014ne)g(the)h Fg(se)l(e)f Fh(relation,)150 2357 y(whic)n(h)41 b(sp)r(eci\014es)h(the) f(visibilit)n(y)h(among)e(ALGOL-60)g(blo)r(c)n(ks.)78 b(In)41 b(ASF,)h(a)f(b)r(o)n(x)g(with)h(a)f(double)h(frame)150 2457 y(represen)n(ts)20 b(a)i(blo)r(c)n(k)f(that)h(is)g(transitiv)n (ely)f(con)n(tained)g(within)i(another)e(blo)r(c)n(k.)34 b(This)22 b(transitivit)n(y)f(is)h(re\015exiv)n(e,)150 2557 y(hence)31 b(the)g(b)r(o)n(x)f(with)h(a)f(double)g(frame)h(can)f (b)r(e)h(the)g(same)f(as)g(the)h(b)r(o)n(x)f(that)h(con)n(tains)e(it,)j (or)e(it)h(can)f(b)r(e)h(its)150 2656 y(c)n(hild,)i(or)d(its)i(grandc)n (hild,)f(and)h(so)e(on.)49 b(Hence)31 b(the)h(rule)g(states)f(that)g (sibling)h(blo)r(c)n(ks)e(see)i(\(dashed)f(arro)n(w\))150 2756 y(eac)n(h)26 b(other.)35 b(Note)27 b(that)g(the)f(siblings)g(w)n (e)g(are)g(referring)f(to)h(need)g(not)h(b)r(e)g(prop)r(er)e(siblings)h (b)r(ecause)g(there)g(is)150 2856 y(no)i(relation)f(that)i(indicates)f (they)g(are)g(distinct.)39 b(Hence,)29 b(in)g(the)f(rule)g(of)g(Figure) g(2,)g(the)h(t)n(w)n(o)e(nested)i(blo)r(c)n(ks)150 2955 y(within)h(the)g(outermost)e(blo)r(c)n(k)h(ma)n(y)f(b)r(e)i(the)f(same) g(blo)r(c)n(k.)41 b(This)30 b(implies)f(that)h(eac)n(h)e(blo)r(c)n(k)h (also)f(sees)h(itself.)150 3055 y(The)e(rule)f(also)f(states)i(that)g (nested)f(blo)r(c)n(ks)g(see)g(out)n(w)n(ards)f(\()p Fg(i.e.,)k Fh(see)e(their)f(uncles\),)h(but)g(blo)r(c)n(ks)f(cannot)g (see)150 3154 y(within)i(other)f(blo)r(c)n(ks.)36 b(A)27 b(simplifying)h(assumption)e(made)h(here,)g(and)g(throughout)g(this)g (pap)r(er,)g(is)g(that)h(the)150 3254 y Fg(de)l(clar)l(ation)j(b)l (efor)l(e)g(use)c Fh(scoping)g(rule)g(has)g(b)r(een)h(ignored.)275 3354 y(The)j(hiding)h(of)g(lo)r(cal)g(blo)r(c)n(k)f(declarations)f(w)n (as)h(an)h(imp)r(ortan)n(t)f(early)g(step)h(to)n(w)n(ards)e(dev)n (eloping)h(more)150 3453 y(p)r(o)n(w)n(erful)25 b(language)f(mec)n (hanisms)g(for)h(con)n(trolling)f(the)i(scop)r(e)f(of)g(resources.)34 b(Another)25 b(ma)5 b(jor)25 b(step)g(w)n(as)g(the)150 3553 y(ev)n(olution)i(of)g(data)g(t)n(yp)r(es,)h(whic)n(h)g(led)f(to)h (mo)r(dule)g(and)f(class)g(scoping.)150 3827 y Fi(3)135 b(Mo)t(dule)44 b(and)h(Class)h(Scoping)150 4009 y Fh(The)25 b(\014rst)h(data)f(t)n(yp)r(es)g(w)n(ere)f(primitiv)n(es)h(for)g (represen)n(ting)f(v)-5 b(ariables)24 b(of)i(t)n(yp)r(e)f(c)n (haracter,)f(in)n(teger,)h(real,)g(and)150 4109 y(so)f(on.)36 b(Primitiv)n(e)23 b(data)i(t)n(yp)r(es)f(b)r(ecame)h(the)g(basis)f(of)g Fg(c)l(omp)l(osite)29 b(homo)l(gene)l(ous)e(data)h(typ)l(es)d Fh(suc)n(h)g(as)f(arra)n(ys,)150 4209 y(and)g Fg(c)l(omp)l(osite)j (heter)l(o)l(gene)l(ous)f(data)h(typ)l(es)d Fh(suc)n(h)f(as)g(records.) 34 b(In)24 b(terms)f(of)h(scoping,)g(these)f(comp)r(osite)h(data)150 4308 y(t)n(yp)r(es)k(ha)n(v)n(e)f(traditionally)g(had)g(an)h(op)r(en)g (scop)r(e.)37 b(This)28 b(means)g(that)g(access)f(to)h(a)f(record)f(or) i(arra)n(y)d(v)-5 b(ariable)150 4408 y(usually)27 b(implies)h(access)e (to)i(its)g(constituen)n(t)f(\014elds)h(or)f(elemen)n(ts.)275 4507 y(The)g(generalization)d(of)j(records)f(to)g(mo)r(dules)h(and)g (classes)f(is)h(based)f(on)h(the)g(concept)g(of)g Fg(A)n(bstr)l(act)h (Data)150 4607 y(T)-6 b(yp)l(es)39 b(\(ADTs\))p Fh(.)63 b(An)37 b(ADT)g(is)f(de\014ned)h(as)f(a)g(set)g(of)h(op)r(erations)e (that)i(ma)n(y)f(b)r(e)g(p)r(erformed)g(on)h(a)f(set)g(of)150 4707 y(en)n(tities.)g(Mo)r(dules)23 b(and)g(classes)f(are)g(implemen)n (tations)h(of)g(ADTs,)i(where)d(data)h(en)n(tities)g(and)g(op)r (erations)f(on)150 4806 y(those)f(data)h(en)n(tities)g(are)f (encapsulated)g(so)g(that)h(clien)n(ts)g(of)g(the)g(mo)r(dules)g(or)f (classes)f(cannot)i(access)e(the)j(data)150 4906 y(except)32 b(through)f(an)h(in)n(terface.)49 b(An)32 b(in)n(terface)f(consists)g (of)h(the)h(signatures)d(of)i(the)g(set)g(of)g(visible)g(mo)r(dule)150 5006 y(or)e(class)f(op)r(erations.)45 b(The)30 b(implemen)n(tations)h (of)f(these)h(op)r(erations,)f(and)g(an)n(y)g(priv)-5 b(ate)31 b(op)r(erations)e(whose)150 5105 y(signature)19 b(is)g(not)h(part)f(of)h(the)g(in)n(terface,)g(are)f(not)h(visible)f (to)h(clien)n(ts.)34 b(Since)20 b(clien)n(ts)f(can)g(only)h(access)e (mo)r(dules)p eop %%Page: 4 4 4 3 bop 1086 2276 a @beginspecial 150 @llx 239 @lly 484 @urx 620 @ury 1984 @rwi @setspecial %%BeginDocument: pics/mod3Example.ps 50 dict begin /arrowHeight 8 def /arrowWidth 4 def /none null def /numGraphicParameters 17 def /stringLimit 65535 def /Begin { save numGraphicParameters dict begin } def /End { end restore } def /SetB { dup type /nulltype eq { pop false /brushRightArrow idef false /brushLeftArrow idef true /brushNone idef } { /brushDashOffset idef /brushDashArray idef 0 ne /brushRightArrow idef 0 ne /brushLeftArrow idef /brushWidth idef false /brushNone idef } ifelse } def /SetCFg { /fgblue idef /fggreen idef /fgred idef } def /SetCBg { /bgblue idef /bggreen idef /bgred idef } def /SetF { /printSize idef /printFont idef } def /SetP { dup type /nulltype eq { pop true /patternNone idef } { dup -1 eq { /patternGrayLevel idef /patternString idef } { /patternGrayLevel idef } ifelse false /patternNone idef } ifelse } def /BSpl { 0 begin storexyn newpath n 1 gt { 0 0 0 0 0 0 1 1 true subspline n 2 gt { 0 0 0 0 1 1 2 2 false subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline } if n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Circ { newpath 0 360 arc patternNone not { ifill } if brushNone not { istroke } if } def /CBSpl { 0 begin dup 2 gt { storexyn newpath n 1 sub dup 0 0 1 1 2 2 true subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline n 2 sub dup n 1 sub dup 0 0 1 1 false subspline patternNone not { ifill } if brushNone not { istroke } if } { Poly } ifelse end } dup 0 4 dict put def /Elli { 0 begin newpath 4 2 roll translate scale 0 0 1 0 360 arc patternNone not { ifill } if brushNone not { istroke } if end } dup 0 1 dict put def /Line { 0 begin 2 storexyn newpath x 0 get y 0 get moveto x 1 get y 1 get lineto brushNone not { istroke } if 0 0 1 1 leftarrow 0 0 1 1 rightarrow end } dup 0 4 dict put def /MLine { 0 begin storexyn newpath n 1 gt { x 0 get y 0 get moveto 1 1 n 1 sub { /i exch def x i get y i get lineto } for patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Poly { 3 1 roll newpath moveto -1 add { lineto } repeat closepath patternNone not { ifill } if brushNone not { istroke } if } def /Rect { 0 begin /t exch def /r exch def /b exch def /l exch def newpath l b moveto l t lineto r t lineto r b lineto closepath patternNone not { ifill } if brushNone not { istroke } if end } dup 0 4 dict put def /Text { ishow } def /idef { dup where { pop pop pop } { exch def } ifelse } def /ifill { 0 begin gsave patternGrayLevel -1 ne { fgred bgred fgred sub patternGrayLevel mul add fggreen bggreen fggreen sub patternGrayLevel mul add fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor eofill } { eoclip originalCTM setmatrix pathbbox /t exch def /r exch def /b exch def /l exch def /w r l sub ceiling cvi def /h t b sub ceiling cvi def /imageByteWidth w 8 div ceiling cvi def /imageHeight h def bgred bggreen bgblue setrgbcolor eofill fgred fggreen fgblue setrgbcolor w 0 gt h 0 gt and { l b translate w h scale w h true [w 0 0 h neg 0 h] { patternproc } imagemask } if } ifelse grestore end } dup 0 8 dict put def /istroke { gsave brushDashOffset -1 eq { [] 0 setdash 1 setgray } { brushDashArray brushDashOffset setdash fgred fggreen fgblue setrgbcolor } ifelse brushWidth setlinewidth originalCTM setmatrix stroke grestore } def /ishow { 0 begin gsave fgred fggreen fgblue setrgbcolor /fontDict printFont findfont printSize scalefont dup setfont def /descender fontDict begin 0 [FontBBox] 1 get FontMatrix end transform exch pop def /vertoffset 0 descender sub printSize sub printFont /Courier ne printFont /Courier-Bold ne and { 1 add } if def { 0 vertoffset moveto show /vertoffset vertoffset printSize sub def } forall grestore end } dup 0 3 dict put def /patternproc { 0 begin /patternByteLength patternString length def /patternHeight patternByteLength 8 mul sqrt cvi def /patternWidth patternHeight def /patternByteWidth patternWidth 8 idiv def /imageByteMaxLength imageByteWidth imageHeight mul stringLimit patternByteWidth sub min def /imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv patternHeight mul patternHeight max def /imageHeight imageHeight imageMaxHeight sub store /imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def 0 1 imageMaxHeight 1 sub { /y exch def /patternRow y patternByteWidth mul patternByteLength mod def /patternRowString patternString patternRow patternByteWidth getinterval def /imageRow y imageByteWidth mul def 0 patternByteWidth imageByteWidth 1 sub { /x exch def imageString imageRow x add patternRowString putinterval } for } for imageString end } dup 0 12 dict put def /min { dup 3 2 roll dup 4 3 roll lt { exch } if pop } def /max { dup 3 2 roll dup 4 3 roll gt { exch } if pop } def /arrowhead { 0 begin transform originalCTM itransform /taily exch def /tailx exch def transform originalCTM itransform /tipy exch def /tipx exch def /dy tipy taily sub def /dx tipx tailx sub def /angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def gsave originalCTM setmatrix tipx tipy translate angle rotate newpath 0 0 moveto arrowHeight neg arrowWidth 2 div lineto arrowHeight neg arrowWidth 2 div neg lineto closepath patternNone not { originalCTM setmatrix /padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul arrowWidth div def /padtail brushWidth 2 div def tipx tipy translate angle rotate padtip 0 translate arrowHeight padtip add padtail add arrowHeight div dup scale arrowheadpath ifill } if brushNone not { originalCTM setmatrix tipx tipy translate angle rotate arrowheadpath istroke } if grestore end } dup 0 9 dict put def /arrowheadpath { newpath 0 0 moveto arrowHeight neg arrowWidth 2 div lineto arrowHeight neg arrowWidth 2 div neg lineto closepath } def /leftarrow { 0 begin y exch get /taily exch def x exch get /tailx exch def y exch get /tipy exch def x exch get /tipx exch def brushLeftArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /rightarrow { 0 begin y exch get /tipy exch def x exch get /tipx exch def y exch get /taily exch def x exch get /tailx exch def brushRightArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /midpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 x1 add 2 div y0 y1 add 2 div end } dup 0 4 dict put def /thirdpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 2 mul x1 add 3 div y0 2 mul y1 add 3 div end } dup 0 4 dict put def /subspline { 0 begin /movetoNeeded exch def y exch get /y3 exch def x exch get /x3 exch def y exch get /y2 exch def x exch get /x2 exch def y exch get /y1 exch def x exch get /x1 exch def y exch get /y0 exch def x exch get /x0 exch def x1 y1 x2 y2 thirdpoint /p1y exch def /p1x exch def x2 y2 x1 y1 thirdpoint /p2y exch def /p2x exch def x1 y1 x0 y0 thirdpoint p1x p1y midpoint /p0y exch def /p0x exch def x2 y2 x3 y3 thirdpoint p2x p2y midpoint /p3y exch def /p3x exch def movetoNeeded { p0x p0y moveto } if p1x p1y p2x p2y p3x p3y curveto end } dup 0 17 dict put def /storexyn { /n exch def /y n array def /x n array def n 1 sub -1 0 { /i exch def y i 3 2 roll put x i 3 2 roll put } for } def %I Idraw 7 Grid 8 Begin %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 0.8 0 0 0.8 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Rect %I b 65535 3 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1.9075 0 0 1.74615 78.804 -131.309 ] concat %I 61 469 132 517 Rect End Begin %I Line %I b 65535 3 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 0.923077 233 -24.9608 ] concat %I 30 445 30 557 Line End Begin %I Line %I b 65535 3 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.910432 0 0 1 138.744 225 ] concat %I 341 317 233 317 Line End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-medium-i-*-140-* /Times-Italic 14 SetF %I t [ 1 0 0 1 266 648.5 ] concat %I [ (import) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-medium-i-*-140-* /Times-Italic 14 SetF %I t [ 1 0 0 1 268 445.5 ] concat %I [ (import) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-medium-i-*-140-* /Times-Italic 14 SetF %I t [ 1 0 0 1 379 561.5 ] concat %I [ (exports) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* /Times-Bold 14 SetF %I t [ 1 0 0 1 199 765 ] concat %I [ (MODULE Client1;) ( IMPORT Server;) (BEGIN) ( \(* use server *\)) (END Client1;) () ] Text End Begin %I Rect %I b 65535 3 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 2.15452 0 0 1.74615 317.93 -319.309 ] concat %I 61 469 132 517 Rect End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* /Times-Bold 14 SetF %I t [ 1 0 0 1 453 577 ] concat %I [ (MODULE Server;) ( EXPORTS Server;) (BEGIN) ( \(* implementation *\)) (END Server;) () ] Text End Begin %I Rect %I b 65535 3 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 2.0859 0 0 1.74615 65.062 -515.309 ] concat %I 61 469 132 517 Rect End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* /Times-Bold 14 SetF %I t [ 1 0 0 1 197 377 ] concat %I [ (INTERFACE Client2;) ( IMPORT Server;) (\(* use server *\)) (END Client2;) () ] Text End Begin %I Rect %I b 65535 3 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 2.0859 0 0 1.74615 65.062 -319.312 ] concat %I 61 469 132 517 Rect End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* /Times-Bold 14 SetF %I t [ 1 0 0 1 197 568 ] concat %I [ (INTERFACE Server;) (\(* public signatures *\)) (END Server;) () ] Text End Begin %I Line %I b 65535 3 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 0.923077 242 -9.96082 ] concat %I 20 755 20 653 Line End End %I eop showpage end %%EndDocument @endspecial 1334 2542 a Fh(Figure)27 b(3:)36 b Ff(Mo)s(dula-3)31 b(Example)150 2791 y Fh(and)e(classes)f(through)h(their)g(in)n (terfaces,)g(the)g(implemen)n(tations)h(of)f(their)g(op)r(erations)f (ma)n(y)h(b)r(e)g(mo)r(di\014ed)h(or)150 2890 y(replaced)25 b(without)h(c)n(hanging)f(the)h(clien)n(ts,)g(as)f(long)h(as)f(the)h (signatures)f(\(and)h(the)g(corresp)r(onding)e(seman)n(tics)150 2990 y(of)k(their)h(implemen)n(tations\))f(of)g(the)h(in)n(terface)f (remain)f(unc)n(hanged.)38 b(Early)27 b(programming)f(languages)h(that) 150 3090 y(supp)r(ort)k(mo)r(dules)h(or)e(classes)g(include)i(Sim)n (ula)g([3)o(],)h(Ada)e([16)o(],)i(Euclid)e([7,)g(6],)i(and)e(Mo)r (dula-2)f([19)o(].)49 b(More)150 3189 y(recen)n(t)27 b(languages)f(include)i(Ei\013el)f([10)o(],)h(Mo)r(dula-3)f([1)o(],)h (T)-7 b(uring)27 b([4],)h(and)f(C++)g([18)o(].)275 3289 y(Figure)20 b(3)h(sho)n(ws)g(an)g(example)g(of)g(the)h(arc)n(hitecture) e(of)h(a)g(Mo)r(dula-3)g(program.)32 b(W)-7 b(e)22 b(ha)n(v)n(e)e(used) i(b)r(o)n(xes)e(and)150 3389 y(edges)28 b(to)g(mak)n(e)f(the)i(arc)n (hitectural)e(dep)r(endencies)h(in)h(the)g(co)r(de)f(ob)n(vious.)37 b(In)29 b(Mo)r(dula-3,)f(a)f(resource)g(\()p Fg(e.g.,)150 3488 y Fh(v)-5 b(ariable,)27 b(constan)n(t,)h(t)n(yp)r(e,)h(pro)r (cedure\))e(is)h(visible)h(to)f(a)f(mo)r(dule)i(if)g(it)f(is)h (declared)e(in)h(the)h(mo)r(dule)g(or)e(in)h(an)150 3588 y(in)n(terface)e(that)h(is)f(imp)r(orted)h(or)e(exp)r(orted)h(b)n(y)h (the)g(mo)r(dule.)36 b(An)27 b(in)n(terface)f(\()p Fg(e.g.,)j(Server)e Fh(and)f Fg(Client2)p Fh(\))i(is)e(a)150 3687 y(group)21 b(of)h(declarations)f(that)h(sp)r(ecify)h(only)f(the)g(signature,)h (not)f(the)h(implemen)n(tation.)35 b(In)22 b(Figure)g(3,)h(mo)r(dule) 150 3787 y Fg(Server)34 b Fh(exp)r(orts)f(an)g(in)n(terface)g Fg(Server)h Fh(and)g(supplies)f(implemen)n(tations)h(for)f(the)h(pro)r (cedures)e(declared)h(in)150 3887 y(the)e(in)n(terface.)45 b(Clien)n(t)30 b(mo)r(dule)h Fg(Client1)g Fh(and)g(clien)n(t)f(in)n (terface)g Fg(Client2)h Fh(eac)n(h)f(imp)r(ort)h(in)n(terface)e Fg(Server)i Fh(to)150 3986 y(mak)n(e)c(the)h(resources)d(declared)i(in) h Fg(Server)g Fh(visible)f(to)h(them.)275 4086 y(In)f(Figure)g(4,)h(w)n (e)f(de\014ne)h(Mo)r(dula-3)e(scoping)h(b)n(y)g(de\014ning)h(the)g Fg(se)l(e)g Fh(relation)e(using)h(four)h(rules.)275 4235 y Fe(\017)41 b Ff(Rule)30 b(\(1\):)36 b Fh(Within)28 b(a)f(mo)r(dule)g(or)g(an)g(in)n(terface)f(\()p Fd(m)p 2069 4235 25 4 v 30 w(i)p Fh(\),)i(sibling)f(resources)e(\()p Fd(res)p Fh(\))j(see)e(eac)n(h)h(other)f(and)358 4335 y(themselv)n(es.)275 4493 y Fe(\017)41 b Ff(Rule)f(\(2\):)52 b Fh(If)36 b(a)f(mo)r(dule)h(\()p Fd(m)p Fh(\))g(exp)r(orts)f(an)g(in)n (terface)g(\()p Fd(i)p Fh(\),)k(the)d(resources)d(of)j(the)g(mo)r(dule) f(see)h(the)358 4592 y(resources)25 b(of)j(the)g(in)n(terface.)275 4750 y Fe(\017)41 b Ff(Rule)c(\(3\):)47 b Fh(If)33 b(a)g(mo)r(dule)g (or)f(an)h(in)n(terface)f(\()p Fd(m)p 1921 4750 V 30 w(i)p Fh(\))i(imp)r(orts)e(an)h(in)n(terface)f(\()p Fd(i)p Fh(\),)j(the)f(resources)d(of)i(the)358 4850 y(imp)r(orting)27 b(mo)r(dule)h(or)f(in)n(terface)f(see)i(the)g(resources)d(of)j(the)g (imp)r(orted)f(in)n(terface.)275 5008 y Fe(\017)41 b Ff(Rule)30 b(\(4\):)36 b Fh(If)28 b(a)f(mo)r(dule)h(or)f(in)n(terface)f (\()p Fd(m)p 1755 5008 V 31 w(i)p Fh(\))h(imp)r(orts)g(an)h(in)n (terface)e(resource,)g(the)i(resources)d(of)j(the)358 5107 y(imp)r(orting)f(mo)r(dule)h(or)f(in)n(terface)f(see)i(the)g(imp)r (orted)f(resource.)p eop %%Page: 5 5 5 4 bop 478 2280 a @beginspecial 118 @llx 275 @lly 493 @urx 522 @ury 2267 @rhi @setspecial %%BeginDocument: pics/modula3.ps 50 dict begin /arrowHeight 8 def /arrowWidth 4 def /none null def /numGraphicParameters 17 def /stringLimit 65535 def /Begin { save numGraphicParameters dict begin } def /End { end restore } def /SetB { dup type /nulltype eq { pop false /brushRightArrow idef false /brushLeftArrow idef true /brushNone idef } { /brushDashOffset idef /brushDashArray idef 0 ne /brushRightArrow idef 0 ne /brushLeftArrow idef /brushWidth idef false /brushNone idef } ifelse } def /SetCFg { /fgblue idef /fggreen idef /fgred idef } def /SetCBg { /bgblue idef /bggreen idef /bgred idef } def /SetF { /printSize idef /printFont idef } def /SetP { dup type /nulltype eq { pop true /patternNone idef } { dup -1 eq { /patternGrayLevel idef /patternString idef } { /patternGrayLevel idef } ifelse false /patternNone idef } ifelse } def /BSpl { 0 begin storexyn newpath n 1 gt { 0 0 0 0 0 0 1 1 true subspline n 2 gt { 0 0 0 0 1 1 2 2 false subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline } if n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Circ { newpath 0 360 arc patternNone not { ifill } if brushNone not { istroke } if } def /CBSpl { 0 begin dup 2 gt { storexyn newpath n 1 sub dup 0 0 1 1 2 2 true subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline n 2 sub dup n 1 sub dup 0 0 1 1 false subspline patternNone not { ifill } if brushNone not { istroke } if } { Poly } ifelse end } dup 0 4 dict put def /Elli { 0 begin newpath 4 2 roll translate scale 0 0 1 0 360 arc patternNone not { ifill } if brushNone not { istroke } if end } dup 0 1 dict put def /Line { 0 begin 2 storexyn newpath x 0 get y 0 get moveto x 1 get y 1 get lineto brushNone not { istroke } if 0 0 1 1 leftarrow 0 0 1 1 rightarrow end } dup 0 4 dict put def /MLine { 0 begin storexyn newpath n 1 gt { x 0 get y 0 get moveto 1 1 n 1 sub { /i exch def x i get y i get lineto } for patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Poly { 3 1 roll newpath moveto -1 add { lineto } repeat closepath patternNone not { ifill } if brushNone not { istroke } if } def /Rect { 0 begin /t exch def /r exch def /b exch def /l exch def newpath l b moveto l t lineto r t lineto r b lineto closepath patternNone not { ifill } if brushNone not { istroke } if end } dup 0 4 dict put def /Text { ishow } def /idef { dup where { pop pop pop } { exch def } ifelse } def /ifill { 0 begin gsave patternGrayLevel -1 ne { fgred bgred fgred sub patternGrayLevel mul add fggreen bggreen fggreen sub patternGrayLevel mul add fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor eofill } { eoclip originalCTM setmatrix pathbbox /t exch def /r exch def /b exch def /l exch def /w r l sub ceiling cvi def /h t b sub ceiling cvi def /imageByteWidth w 8 div ceiling cvi def /imageHeight h def bgred bggreen bgblue setrgbcolor eofill fgred fggreen fgblue setrgbcolor w 0 gt h 0 gt and { l b translate w h scale w h true [w 0 0 h neg 0 h] { patternproc } imagemask } if } ifelse grestore end } dup 0 8 dict put def /istroke { gsave brushDashOffset -1 eq { [] 0 setdash 1 setgray } { brushDashArray brushDashOffset setdash fgred fggreen fgblue setrgbcolor } ifelse brushWidth setlinewidth originalCTM setmatrix stroke grestore } def /ishow { 0 begin gsave fgred fggreen fgblue setrgbcolor /fontDict printFont findfont printSize scalefont dup setfont def /descender fontDict begin 0 [FontBBox] 1 get FontMatrix end transform exch pop def /vertoffset 0 descender sub printSize sub printFont /Courier ne printFont /Courier-Bold ne and { 1 add } if def { 0 vertoffset moveto show /vertoffset vertoffset printSize sub def } forall grestore end } dup 0 3 dict put def /patternproc { 0 begin /patternByteLength patternString length def /patternHeight patternByteLength 8 mul sqrt cvi def /patternWidth patternHeight def /patternByteWidth patternWidth 8 idiv def /imageByteMaxLength imageByteWidth imageHeight mul stringLimit patternByteWidth sub min def /imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv patternHeight mul patternHeight max def /imageHeight imageHeight imageMaxHeight sub store /imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def 0 1 imageMaxHeight 1 sub { /y exch def /patternRow y patternByteWidth mul patternByteLength mod def /patternRowString patternString patternRow patternByteWidth getinterval def /imageRow y imageByteWidth mul def 0 patternByteWidth imageByteWidth 1 sub { /x exch def imageString imageRow x add patternRowString putinterval } for } for imageString end } dup 0 12 dict put def /min { dup 3 2 roll dup 4 3 roll lt { exch } if pop } def /max { dup 3 2 roll dup 4 3 roll gt { exch } if pop } def /arrowhead { 0 begin transform originalCTM itransform /taily exch def /tailx exch def transform originalCTM itransform /tipy exch def /tipx exch def /dy tipy taily sub def /dx tipx tailx sub def /angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def gsave originalCTM setmatrix tipx tipy translate angle rotate newpath 0 0 moveto arrowHeight neg arrowWidth 2 div lineto arrowHeight neg arrowWidth 2 div neg lineto closepath patternNone not { originalCTM setmatrix /padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul arrowWidth div def /padtail brushWidth 2 div def tipx tipy translate angle rotate padtip 0 translate arrowHeight padtip add padtail add arrowHeight div dup scale arrowheadpath ifill } if brushNone not { originalCTM setmatrix tipx tipy translate angle rotate arrowheadpath istroke } if grestore end } dup 0 9 dict put def /arrowheadpath { newpath 0 0 moveto arrowHeight neg arrowWidth 2 div lineto arrowHeight neg arrowWidth 2 div neg lineto closepath } def /leftarrow { 0 begin y exch get /taily exch def x exch get /tailx exch def y exch get /tipy exch def x exch get /tipx exch def brushLeftArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /rightarrow { 0 begin y exch get /tipy exch def x exch get /tipx exch def y exch get /taily exch def x exch get /tailx exch def brushRightArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /midpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 x1 add 2 div y0 y1 add 2 div end } dup 0 4 dict put def /thirdpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 2 mul x1 add 3 div y0 2 mul y1 add 3 div end } dup 0 4 dict put def /subspline { 0 begin /movetoNeeded exch def y exch get /y3 exch def x exch get /x3 exch def y exch get /y2 exch def x exch get /x2 exch def y exch get /y1 exch def x exch get /x1 exch def y exch get /y0 exch def x exch get /x0 exch def x1 y1 x2 y2 thirdpoint /p1y exch def /p1x exch def x2 y2 x1 y1 thirdpoint /p2y exch def /p2x exch def x1 y1 x0 y0 thirdpoint p1x p1y midpoint /p0y exch def /p0x exch def x2 y2 x3 y3 thirdpoint p2x p2y midpoint /p3y exch def /p3x exch def movetoNeeded { p0x p0y moveto } if p1x p1y p2x p2y p3x p3y curveto end } dup 0 17 dict put def /storexyn { /n exch def /y n array def /x n array def n 1 sub -1 0 { /i exch def y i 3 2 roll put x i 3 2 roll put } for } def %I Idraw 7 Grid 8 Begin %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 0.8 0 0 0.8 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* /Times-Bold 14 SetF %I t [ 1 0 0 1 152 647 ] concat %I [ (Rule \(1\)) ] Text End Begin %I Rect %I b 65535 4 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 2.3591 0 0 1.7165 109.037 -347.702 ] concat %I 19 500 111 571 Rect End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 240 586 ] concat %I [ (see) ] Text End Begin %I Line %I b 13107 3 0 1 [2 2 2 2 2 2 2 2] 15 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 53 439.079 ] concat %I 162 133 240 133 Line End Begin %I Poly %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1.86038 0 0 1.6608 49.665 -303.211 ] concat %I 4 69 518 69 534 89 534 89 518 4 Poly End Begin %I Poly %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1.86038 0 0 1.6608 174.665 -302.211 ] concat %I 4 69 518 69 534 89 534 89 518 4 Poly End Begin %I Poly %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 8.71985 0 0 4.85726 -430.371 -1984.37 ] concat %I 4 69 518 69 534 89 534 89 518 4 Poly End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 173 546 ] concat %I [ (m_i) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 185 576 ] concat %I [ (res) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 310 576 ] concat %I [ (res) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* /Times-Bold 14 SetF %I t [ 1 0 0 1 155 484 ] concat %I [ (Rule \(3\)) ] Text End Begin %I Rect %I b 65535 4 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 2.3591 0 0 1.7165 112.037 -510.702 ] concat %I 19 500 111 571 Rect End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 254 425 ] concat %I [ (see) ] Text End Begin %I Line %I b 13107 3 0 1 [2 2 2 2 2 2 2 2] 15 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 60 279.079 ] concat %I 162 133 240 133 Line End Begin %I Poly %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1.86038 0 0 1.6608 56.665 -463.211 ] concat %I 4 69 518 69 534 89 534 89 518 4 Poly End Begin %I Poly %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1.86038 0 0 1.6608 179.665 -461.211 ] concat %I 4 69 518 69 534 89 534 89 518 4 Poly End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 192 416 ] concat %I [ (res) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 315 417 ] concat %I [ (res) ] Text End Begin %I Poly %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 3.8329 0 0 3.96874 -98.446 -1677.37 ] concat %I 4 69 518 69 534 89 534 89 518 4 Poly End Begin %I Poly %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 3.8329 0 0 3.96874 24.554 -1674.37 ] concat %I 4 69 518 69 534 89 534 89 518 4 Poly End Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1.17949 0 0 0.866667 131.216 -164.999 ] concat %I 96 699 130 699 Line End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 242 456 ] concat %I [ (import) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 169 393 ] concat %I [ (m_i) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 291 396 ] concat %I [ (i) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* /Times-Bold 14 SetF %I t [ 1 0 0 1 391 646 ] concat %I [ (Rule \(2\)) ] Text End Begin %I Rect %I b 65535 4 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 2.3591 0 0 1.7165 348.037 -348.702 ] concat %I 19 500 111 571 Rect End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 491 584 ] concat %I [ (see) ] Text End Begin %I Line %I b 13107 3 0 1 [2 2 2 2 2 2 2 2] 15 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 296 437.079 ] concat %I 162 133 240 133 Line End Begin %I Poly %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1.86038 0 0 1.6608 292.665 -305.211 ] concat %I 4 69 518 69 534 89 534 89 518 4 Poly End Begin %I Poly %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1.86038 0 0 1.6608 415.665 -303.211 ] concat %I 4 69 518 69 534 89 534 89 518 4 Poly End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 428 574 ] concat %I [ (res) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 551 575 ] concat %I [ (res) ] Text End Begin %I Poly %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 3.8329 0 0 3.96874 137.554 -1519.37 ] concat %I 4 69 518 69 534 89 534 89 518 4 Poly End Begin %I Poly %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 3.8329 0 0 3.96874 260.554 -1516.37 ] concat %I 4 69 518 69 534 89 534 89 518 4 Poly End Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1.17949 0 0 0.866667 366.216 -6.999 ] concat %I 96 699 130 699 Line End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 481 615 ] concat %I [ (export) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 405 551 ] concat %I [ (m) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 527 554 ] concat %I [ (i) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* /Times-Bold 14 SetF %I t [ 1 0 0 1 394 485 ] concat %I [ (Rule \(4\)) ] Text End Begin %I Rect %I b 65535 4 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 2.3591 0 0 1.7165 351.037 -509.702 ] concat %I 19 500 111 571 Rect End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 499 414 ] concat %I [ (see) ] Text End Begin %I Line %I b 13107 3 0 1 [2 2 2 2 2 2 2 2] 15 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 305 275.079 ] concat %I 162 133 243 148 Line End Begin %I Poly %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1.86038 0 0 1.6608 301.665 -467.211 ] concat %I 4 69 518 69 534 89 534 89 518 4 Poly End Begin %I Poly %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1.86038 0 0 1.6608 425.665 -446.211 ] concat %I 4 69 518 69 534 89 534 89 518 4 Poly End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 437 412 ] concat %I [ (res) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 561 432 ] concat %I [ (res) ] Text End Begin %I Poly %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 3.8329 0 0 3.96874 146.554 -1681.37 ] concat %I 4 69 518 69 534 89 534 89 518 4 Poly End Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1.17949 0 0 0.866667 376.216 -168.999 ] concat %I 96 699 146 699 Line End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 497 452 ] concat %I [ (import) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 414 389 ] concat %I [ (m_i) ] Text End End %I eop showpage end %%EndDocument @endspecial 1221 2546 a Fh(Figure)27 b(4:)37 b Ff(Mo)s(dula-3)30 b(Scoping)h(Rules)275 2811 y Fh(This)40 b(concludes)g(our)g(discussion) g(of)h(mo)r(dule)g(and)f(class)g(scoping.)75 b(Next,)45 b(w)n(e)40 b(describ)r(e)g(subsystem)150 2910 y(scoping)27 b(as)g(a)g(generalization)e(of)j(mo)r(dule)g(and)f(class)g(scoping.)150 3185 y Fi(4)135 b(Subsystem)45 b(Scoping)150 3367 y Fh(The)26 b(demand)h(for)e(high-lev)n(el)h(arc)n(hitectural)e(abstractions)h(led) h(to)h(the)f(dev)n(elopmen)n(t)g(of)g(textual,)h(and)f(more)150 3466 y(recen)n(tly)-7 b(,)42 b(visual)d(notations)g(for)g(sp)r (ecifying)g(soft)n(w)n(are)f(arc)n(hitectures,)j(called)e(MILs)g(\(Mo)r (dule)h(In)n(tercon-)150 3566 y(nection)35 b(Languages\))e([15)o(].)58 b(MILs)34 b(are)g(used)h(for)f(sp)r(ecifying)g(static)h(arc)n (hitectural)e(dep)r(endencies)i(among)150 3666 y(soft)n(w)n(are)27 b(comp)r(onen)n(ts)g(\(resources)g(or)g(subsystems\).)39 b(Subsystems)28 b(ma)n(y)g(con)n(tain)f(mo)r(dules)i(and)f(classes)f (as)150 3765 y(w)n(ell)c(as)g(other)g(subsystems)g(to)g(form)g(a)g(con) n(tainmen)n(t)g(hierarc)n(h)n(y)e(whic)n(h)i(mo)r(dels)h(the)f(system)h (decomp)r(osition)150 3865 y(structure.)43 b(The)29 b(gran)n(ularit)n (y)e(of)j(resources)e(v)-5 b(aries)28 b(with)i(the)g(notation.)43 b(The)30 b(Co)r(oprider)e(MIL)i([2)o(],)g(for)g(ex-)150 3965 y(ample,)d(assumes)e(that)i(resources)e(are)g(pro)r(cedures,)h(v) -5 b(ariables,)25 b(t)n(yp)r(es,)i(and)f(so)g(on.)37 b(Ho)n(w)n(ev)n(er,)24 b(the)j(Soft)n(w)n(are)150 4064 y(Landscap)r(e)22 b(MIL)h([13)o(,)g(5,)g(9)o(])g(uses)g(more)f (coarsely-grained)d(resources,)j(suc)n(h)h(as)f(mo)r(dules)h(and)g (classes,)f(as)h(the)150 4164 y(\\currency)i(of)i(exc)n(hange")e(b)r (et)n(w)n(een)i(subsystems.)36 b(The)27 b(emergence)f(of)h(formal)f (metho)r(ds)h(for)f(programming)150 4264 y(has)f(resulted)g(in)h(MILs,) g(lik)n(e)f(Inscap)r(e)g([14)o(])h(and)f(NuMIL)h([11)o(],)g(that)g (also)f(feature)g(pre-)g(and)g(p)r(ost-conditions)150 4363 y(as)i(resources.)275 4463 y(The)h(dep)r(endencies)g(among)g(the)g (comp)r(onen)n(ts)g(in)g(a)g(MIL)h(sp)r(eci\014cation)e(are)h(not)g (arbitrary;)f(they)h(m)n(ust)150 4562 y(conform)g(to)h(a)g(set)g(of)g (scoping)f(rules)h(that)g(is)g(sp)r(eci\014c)g(to)g(the)h(MIL.)f(The)g (Soft)n(w)n(are)f(Landscap)r(e)g(is)h(a)g(visual)150 4662 y(MIL)g(that)g(has)g(adopted)f(sev)n(eral)f(ideas)i(from)f(an)h (earlier)e(visual)i(MIL)g(called)f(AR)n(CH)i([17)o(].)41 b(Figure)28 b(5)h(is)f(an)150 4762 y(example)k(of)f(a)h(Soft)n(w)n(are) f(Landscap)r(e)g(tak)n(en)g(from)h(P)n(enn)n(y's)e(Ph.D.)j (dissertation)d([13].)50 b(The)32 b(con)n(tainmen)n(t)150 4861 y(relation)22 b(is)g(sho)n(wn)g(b)n(y)h(dra)n(wing)e(a)h(b)r(o)n (x)g(represen)n(ting)f(the)i(con)n(tained)f(en)n(tit)n(y)h(inside)g(of) f(the)h(b)r(o)n(x)g(represen)n(ting)150 4961 y(the)h(con)n(taining)e (en)n(tit)n(y)-7 b(.)36 b(The)24 b(\\S")e(in)i(the)g(top-righ)n(t)f (corner)f(of)h(some)g(b)r(o)n(xes)g(\()p Fg(e.g.,)29 b(S1)p Fh(\))24 b(indicates)f(that)h(these)150 5061 y(are)i(structure)h (ob)5 b(jects)27 b(\(subsystems\).)37 b(The)27 b(\\I")g(in)g(the)h (top-righ)n(t)e(corner)g(of)i(the)f Fg(S2)h Fh(b)r(o)n(x,)f(within)h(b) r(o)n(x)f Fg(S1)p Fh(,)p eop %%Page: 6 6 6 5 bop 1086 1912 a @beginspecial 105 @llx 274 @lly 472 @urx 568 @ury 1984 @rwi @setspecial %%BeginDocument: pics/swlEx.ps 50 dict begin /arrowHeight 8 def /arrowWidth 4 def /none null def /numGraphicParameters 17 def /stringLimit 65535 def /Begin { save numGraphicParameters dict begin } def /End { end restore } def /SetB { dup type /nulltype eq { pop false /brushRightArrow idef false /brushLeftArrow idef true /brushNone idef } { /brushDashOffset idef /brushDashArray idef 0 ne /brushRightArrow idef 0 ne /brushLeftArrow idef /brushWidth idef false /brushNone idef } ifelse } def /SetCFg { /fgblue idef /fggreen idef /fgred idef } def /SetCBg { /bgblue idef /bggreen idef /bgred idef } def /SetF { /printSize idef /printFont idef } def /SetP { dup type /nulltype eq { pop true /patternNone idef } { dup -1 eq { /patternGrayLevel idef /patternString idef } { /patternGrayLevel idef } ifelse false /patternNone idef } ifelse } def /BSpl { 0 begin storexyn newpath n 1 gt { 0 0 0 0 0 0 1 1 true subspline n 2 gt { 0 0 0 0 1 1 2 2 false subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline } if n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Circ { newpath 0 360 arc patternNone not { ifill } if brushNone not { istroke } if } def /CBSpl { 0 begin dup 2 gt { storexyn newpath n 1 sub dup 0 0 1 1 2 2 true subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline n 2 sub dup n 1 sub dup 0 0 1 1 false subspline patternNone not { ifill } if brushNone not { istroke } if } { Poly } ifelse end } dup 0 4 dict put def /Elli { 0 begin newpath 4 2 roll translate scale 0 0 1 0 360 arc patternNone not { ifill } if brushNone not { istroke } if end } dup 0 1 dict put def /Line { 0 begin 2 storexyn newpath x 0 get y 0 get moveto x 1 get y 1 get lineto brushNone not { istroke } if 0 0 1 1 leftarrow 0 0 1 1 rightarrow end } dup 0 4 dict put def /MLine { 0 begin storexyn newpath n 1 gt { x 0 get y 0 get moveto 1 1 n 1 sub { /i exch def x i get y i get lineto } for patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Poly { 3 1 roll newpath moveto -1 add { lineto } repeat closepath patternNone not { ifill } if brushNone not { istroke } if } def /Rect { 0 begin /t exch def /r exch def /b exch def /l exch def newpath l b moveto l t lineto r t lineto r b lineto closepath patternNone not { ifill } if brushNone not { istroke } if end } dup 0 4 dict put def /Text { ishow } def /idef { dup where { pop pop pop } { exch def } ifelse } def /ifill { 0 begin gsave patternGrayLevel -1 ne { fgred bgred fgred sub patternGrayLevel mul add fggreen bggreen fggreen sub patternGrayLevel mul add fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor eofill } { eoclip originalCTM setmatrix pathbbox /t exch def /r exch def /b exch def /l exch def /w r l sub ceiling cvi def /h t b sub ceiling cvi def /imageByteWidth w 8 div ceiling cvi def /imageHeight h def bgred bggreen bgblue setrgbcolor eofill fgred fggreen fgblue setrgbcolor w 0 gt h 0 gt and { l b translate w h scale w h true [w 0 0 h neg 0 h] { patternproc } imagemask } if } ifelse grestore end } dup 0 8 dict put def /istroke { gsave brushDashOffset -1 eq { [] 0 setdash 1 setgray } { brushDashArray brushDashOffset setdash fgred fggreen fgblue setrgbcolor } ifelse brushWidth setlinewidth originalCTM setmatrix stroke grestore } def /ishow { 0 begin gsave fgred fggreen fgblue setrgbcolor /fontDict printFont findfont printSize scalefont dup setfont def /descender fontDict begin 0 [FontBBox] 1 get FontMatrix end transform exch pop def /vertoffset 0 descender sub printSize sub printFont /Courier ne printFont /Courier-Bold ne and { 1 add } if def { 0 vertoffset moveto show /vertoffset vertoffset printSize sub def } forall grestore end } dup 0 3 dict put def /patternproc { 0 begin /patternByteLength patternString length def /patternHeight patternByteLength 8 mul sqrt cvi def /patternWidth patternHeight def /patternByteWidth patternWidth 8 idiv def /imageByteMaxLength imageByteWidth imageHeight mul stringLimit patternByteWidth sub min def /imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv patternHeight mul patternHeight max def /imageHeight imageHeight imageMaxHeight sub store /imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def 0 1 imageMaxHeight 1 sub { /y exch def /patternRow y patternByteWidth mul patternByteLength mod def /patternRowString patternString patternRow patternByteWidth getinterval def /imageRow y imageByteWidth mul def 0 patternByteWidth imageByteWidth 1 sub { /x exch def imageString imageRow x add patternRowString putinterval } for } for imageString end } dup 0 12 dict put def /min { dup 3 2 roll dup 4 3 roll lt { exch } if pop } def /max { dup 3 2 roll dup 4 3 roll gt { exch } if pop } def /arrowhead { 0 begin transform originalCTM itransform /taily exch def /tailx exch def transform originalCTM itransform /tipy exch def /tipx exch def /dy tipy taily sub def /dx tipx tailx sub def /angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def gsave originalCTM setmatrix tipx tipy translate angle rotate newpath 0 0 moveto arrowHeight neg arrowWidth 2 div lineto arrowHeight neg arrowWidth 2 div neg lineto closepath patternNone not { originalCTM setmatrix /padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul arrowWidth div def /padtail brushWidth 2 div def tipx tipy translate angle rotate padtip 0 translate arrowHeight padtip add padtail add arrowHeight div dup scale arrowheadpath ifill } if brushNone not { originalCTM setmatrix tipx tipy translate angle rotate arrowheadpath istroke } if grestore end } dup 0 9 dict put def /arrowheadpath { newpath 0 0 moveto arrowHeight neg arrowWidth 2 div lineto arrowHeight neg arrowWidth 2 div neg lineto closepath } def /leftarrow { 0 begin y exch get /taily exch def x exch get /tailx exch def y exch get /tipy exch def x exch get /tipx exch def brushLeftArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /rightarrow { 0 begin y exch get /tipy exch def x exch get /tipx exch def y exch get /taily exch def x exch get /tailx exch def brushRightArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /midpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 x1 add 2 div y0 y1 add 2 div end } dup 0 4 dict put def /thirdpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 2 mul x1 add 3 div y0 2 mul y1 add 3 div end } dup 0 4 dict put def /subspline { 0 begin /movetoNeeded exch def y exch get /y3 exch def x exch get /x3 exch def y exch get /y2 exch def x exch get /x2 exch def y exch get /y1 exch def x exch get /x1 exch def y exch get /y0 exch def x exch get /x0 exch def x1 y1 x2 y2 thirdpoint /p1y exch def /p1x exch def x2 y2 x1 y1 thirdpoint /p2y exch def /p2x exch def x1 y1 x0 y0 thirdpoint p1x p1y midpoint /p0y exch def /p0x exch def x2 y2 x3 y3 thirdpoint p2x p2y midpoint /p3y exch def /p3x exch def movetoNeeded { p0x p0y moveto } if p1x p1y p2x p2y p3x p3y curveto end } dup 0 17 dict put def /storexyn { /n exch def /y n array def /x n array def n 1 sub -1 0 { /i exch def y i 3 2 roll put x i 3 2 roll put } for } def %I Idraw 7 Grid 8 Begin %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 0.8 0 0 0.8 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Rect %I b 65535 3 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 127 185 ] concat %I 9 162 460 522 Rect End Begin %I Rect %I b 65535 3 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 126 183 ] concat %I 28 274 212 462 Rect End Begin %I Rect %I b 65535 3 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 116 187 ] concat %I 279 271 458 460 Rect End Begin %I Rect %I b 65535 3 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 105 177 ] concat %I 109 333 199 397 Rect End Begin %I Rect %I b 65535 3 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 108 171 ] concat %I 125 350 183 371 Rect End Begin %I Rect %I b 65535 3 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 134 48 ] concat %I 47 421 149 449 Rect End Begin %I Rect %I b 65535 3 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 418 104 ] concat %I 47 421 149 449 Rect End Begin %I Rect %I b 65535 3 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 371 54 ] concat %I 47 421 149 449 Rect End Begin %I Rect %I b 65535 3 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 264 -50 ] concat %I 47 421 149 449 Rect End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* /Times-Bold 14 SetF %I t [ 1 0 0 1 146 699 ] concat %I [ (S0) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* /Times-Bold 14 SetF %I t [ 1 0 0 1 160 640 ] concat %I [ (S1) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* /Times-Bold 14 SetF %I t [ 1 0 0 1 322 639 ] concat %I [ (S) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* /Times-Bold 14 SetF %I t [ 1 0 0 1 571 700 ] concat %I [ (S) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* /Times-Bold 14 SetF %I t [ 1 0 0 1 220 568 ] concat %I [ (S2) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* /Times-Bold 14 SetF %I t [ 1 0 0 1 292 568 ] concat %I [ (I) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* /Times-Bold 14 SetF %I t [ 1 0 0 1 239 538 ] concat %I [ (M2) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* /Times-Bold 14 SetF %I t [ 1 0 0 1 188 491 ] concat %I [ (M4) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* /Times-Bold 14 SetF %I t [ 1 0 0 1 190 619 ] concat %I [ (M1) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* /Times-Bold 14 SetF %I t [ 1 0 0 1 400 642 ] concat %I [ (S2) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* /Times-Bold 14 SetF %I t [ 1 0 0 1 423 619 ] concat %I [ (M2) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* /Times-Bold 14 SetF %I t [ 1 0 0 1 473 546 ] concat %I [ (M3) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* /Times-Bold 14 SetF %I t [ 1 0 0 1 426 496 ] concat %I [ (M4) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* /Times-Bold 14 SetF %I t [ 1 0 0 1 319 391 ] concat %I [ (M4) ] Text End Begin %I Line %I b 65535 3 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.870968 0 0 1 153.775 185 ] concat %I 210 427 267 427 Line End Begin %I Line %I b 65535 3 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 127 185 ] concat %I 64 414 64 313 Line End Begin %I Line %I b 65535 3 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 127 185 ] concat %I 149 415 149 363 Line End Begin %I MLine %I b 65535 3 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 128 186 ] concat %I 3 202 362 202 382 185 382 3 MLine End Begin %I MLine %I b 65535 3 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 104 111 ] concat %I 3 202 362 202 382 185 382 3 MLine End Begin %I MLine %I b 65535 3 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 341 112 ] concat %I 3 202 362 202 382 185 382 3 MLine End Begin %I MLine %I b 65535 3 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 341 229 ] concat %I 3 202 406 202 382 185 382 3 MLine End Begin %I MLine %I b 65535 3 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.966102 0 0 1 130.949 185 ] concat %I 3 118 273 118 200 179 200 3 MLine End Begin %I MLine %I b 65535 3 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 0.890877 0 0 1 167.088 185 ] concat %I 3 365 272 365 201 287 201 3 MLine End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-medium-i-*-140-* /Times-Italic 14 SetF %I t [ 1 0 0 1 347 628 ] concat %I [ (import) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-medium-i-*-140-* /Times-Italic 14 SetF %I t [ 1 0 0 1 445 382 ] concat %I [ (import) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-medium-i-*-140-* /Times-Italic 14 SetF %I t [ 1 0 0 1 253 382 ] concat %I [ (import) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-medium-i-*-140-* /Times-Italic 14 SetF %I t [ 1 0 0 1 166 556 ] concat %I [ (use) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-medium-i-*-140-* /Times-Italic 14 SetF %I t [ 1 0 0 1 279 591 ] concat %I [ (use) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-medium-i-*-140-* /Times-Italic 14 SetF %I t [ 1 0 0 1 308 562 ] concat %I [ ( in) (stub) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-medium-i-*-140-* /Times-Italic 14 SetF %I t [ 1 0 0 1 286 489 ] concat %I [ ( in) (stub) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-medium-i-*-140-* /Times-Italic 14 SetF %I t [ 1 0 0 1 523 490 ] concat %I [ ( in) (stub) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-medium-i-*-140-* /Times-Italic 14 SetF %I t [ 1 0 0 1 520 644 ] concat %I [ ( out) (stub) ] Text End Begin %I Line %I b 65535 3 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 0.857862 370 243.146 ] concat %I 64 414 64 313 Line End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-medium-i-*-140-* /Times-Italic 14 SetF %I t [ 1 0 0 1 412 563 ] concat %I [ (use) ] Text End Begin %I Line %I b 65535 3 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 0.789474 346 271.897 ] concat %I 149 415 149 363 Line End Begin %I Rect %I b 65535 3 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 369 178 ] concat %I 47 421 149 449 Rect End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-medium-i-*-140-* /Times-Italic 14 SetF %I t [ 1 0 0 1 497 587 ] concat %I [ (use) ] Text End Begin %I Rect %I b 65535 3 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1 0 0 1 134 178 ] concat %I 47 421 149 449 Rect End End %I eop showpage end %%EndDocument @endspecial 1120 2178 a Fh(Figure)27 b(5:)36 b Ff(Soft)m(w)m(are)d (Landscap)s(e)g(Example)589 4628 y @beginspecial 101 @llx 270 @lly 503 @urx 557 @ury 2267 @rhi @setspecial %%BeginDocument: pics/swl.ps 50 dict begin /arrowHeight 8 def /arrowWidth 4 def /none null def /numGraphicParameters 17 def /stringLimit 65535 def /Begin { save numGraphicParameters dict begin } def /End { end restore } def /SetB { dup type /nulltype eq { pop false /brushRightArrow idef false /brushLeftArrow idef true /brushNone idef } { /brushDashOffset idef /brushDashArray idef 0 ne /brushRightArrow idef 0 ne /brushLeftArrow idef /brushWidth idef false /brushNone idef } ifelse } def /SetCFg { /fgblue idef /fggreen idef /fgred idef } def /SetCBg { /bgblue idef /bggreen idef /bgred idef } def /SetF { /printSize idef /printFont idef } def /SetP { dup type /nulltype eq { pop true /patternNone idef } { dup -1 eq { /patternGrayLevel idef /patternString idef } { /patternGrayLevel idef } ifelse false /patternNone idef } ifelse } def /BSpl { 0 begin storexyn newpath n 1 gt { 0 0 0 0 0 0 1 1 true subspline n 2 gt { 0 0 0 0 1 1 2 2 false subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline } if n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Circ { newpath 0 360 arc patternNone not { ifill } if brushNone not { istroke } if } def /CBSpl { 0 begin dup 2 gt { storexyn newpath n 1 sub dup 0 0 1 1 2 2 true subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline n 2 sub dup n 1 sub dup 0 0 1 1 false subspline patternNone not { ifill } if brushNone not { istroke } if } { Poly } ifelse end } dup 0 4 dict put def /Elli { 0 begin newpath 4 2 roll translate scale 0 0 1 0 360 arc patternNone not { ifill } if brushNone not { istroke } if end } dup 0 1 dict put def /Line { 0 begin 2 storexyn newpath x 0 get y 0 get moveto x 1 get y 1 get lineto brushNone not { istroke } if 0 0 1 1 leftarrow 0 0 1 1 rightarrow end } dup 0 4 dict put def /MLine { 0 begin storexyn newpath n 1 gt { x 0 get y 0 get moveto 1 1 n 1 sub { /i exch def x i get y i get lineto } for patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Poly { 3 1 roll newpath moveto -1 add { lineto } repeat closepath patternNone not { ifill } if brushNone not { istroke } if } def /Rect { 0 begin /t exch def /r exch def /b exch def /l exch def newpath l b moveto l t lineto r t lineto r b lineto closepath patternNone not { ifill } if brushNone not { istroke } if end } dup 0 4 dict put def /Text { ishow } def /idef { dup where { pop pop pop } { exch def } ifelse } def /ifill { 0 begin gsave patternGrayLevel -1 ne { fgred bgred fgred sub patternGrayLevel mul add fggreen bggreen fggreen sub patternGrayLevel mul add fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor eofill } { eoclip originalCTM setmatrix pathbbox /t exch def /r exch def /b exch def /l exch def /w r l sub ceiling cvi def /h t b sub ceiling cvi def /imageByteWidth w 8 div ceiling cvi def /imageHeight h def bgred bggreen bgblue setrgbcolor eofill fgred fggreen fgblue setrgbcolor w 0 gt h 0 gt and { l b translate w h scale w h true [w 0 0 h neg 0 h] { patternproc } imagemask } if } ifelse grestore end } dup 0 8 dict put def /istroke { gsave brushDashOffset -1 eq { [] 0 setdash 1 setgray } { brushDashArray brushDashOffset setdash fgred fggreen fgblue setrgbcolor } ifelse brushWidth setlinewidth originalCTM setmatrix stroke grestore } def /ishow { 0 begin gsave fgred fggreen fgblue setrgbcolor /fontDict printFont findfont printSize scalefont dup setfont def /descender fontDict begin 0 [FontBBox] 1 get FontMatrix end transform exch pop def /vertoffset 0 descender sub printSize sub printFont /Courier ne printFont /Courier-Bold ne and { 1 add } if def { 0 vertoffset moveto show /vertoffset vertoffset printSize sub def } forall grestore end } dup 0 3 dict put def /patternproc { 0 begin /patternByteLength patternString length def /patternHeight patternByteLength 8 mul sqrt cvi def /patternWidth patternHeight def /patternByteWidth patternWidth 8 idiv def /imageByteMaxLength imageByteWidth imageHeight mul stringLimit patternByteWidth sub min def /imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv patternHeight mul patternHeight max def /imageHeight imageHeight imageMaxHeight sub store /imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def 0 1 imageMaxHeight 1 sub { /y exch def /patternRow y patternByteWidth mul patternByteLength mod def /patternRowString patternString patternRow patternByteWidth getinterval def /imageRow y imageByteWidth mul def 0 patternByteWidth imageByteWidth 1 sub { /x exch def imageString imageRow x add patternRowString putinterval } for } for imageString end } dup 0 12 dict put def /min { dup 3 2 roll dup 4 3 roll lt { exch } if pop } def /max { dup 3 2 roll dup 4 3 roll gt { exch } if pop } def /arrowhead { 0 begin transform originalCTM itransform /taily exch def /tailx exch def transform originalCTM itransform /tipy exch def /tipx exch def /dy tipy taily sub def /dx tipx tailx sub def /angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def gsave originalCTM setmatrix tipx tipy translate angle rotate newpath 0 0 moveto arrowHeight neg arrowWidth 2 div lineto arrowHeight neg arrowWidth 2 div neg lineto closepath patternNone not { originalCTM setmatrix /padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul arrowWidth div def /padtail brushWidth 2 div def tipx tipy translate angle rotate padtip 0 translate arrowHeight padtip add padtail add arrowHeight div dup scale arrowheadpath ifill } if brushNone not { originalCTM setmatrix tipx tipy translate angle rotate arrowheadpath istroke } if grestore end } dup 0 9 dict put def /arrowheadpath { newpath 0 0 moveto arrowHeight neg arrowWidth 2 div lineto arrowHeight neg arrowWidth 2 div neg lineto closepath } def /leftarrow { 0 begin y exch get /taily exch def x exch get /tailx exch def y exch get /tipy exch def x exch get /tipx exch def brushLeftArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /rightarrow { 0 begin y exch get /tipy exch def x exch get /tipx exch def y exch get /taily exch def x exch get /tailx exch def brushRightArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /midpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 x1 add 2 div y0 y1 add 2 div end } dup 0 4 dict put def /thirdpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 2 mul x1 add 3 div y0 2 mul y1 add 3 div end } dup 0 4 dict put def /subspline { 0 begin /movetoNeeded exch def y exch get /y3 exch def x exch get /x3 exch def y exch get /y2 exch def x exch get /x2 exch def y exch get /y1 exch def x exch get /x1 exch def y exch get /y0 exch def x exch get /x0 exch def x1 y1 x2 y2 thirdpoint /p1y exch def /p1x exch def x2 y2 x1 y1 thirdpoint /p2y exch def /p2x exch def x1 y1 x0 y0 thirdpoint p1x p1y midpoint /p0y exch def /p0x exch def x2 y2 x3 y3 thirdpoint p2x p2y midpoint /p3y exch def /p3x exch def movetoNeeded { p0x p0y moveto } if p1x p1y p2x p2y p3x p3y curveto end } dup 0 17 dict put def /storexyn { /n exch def /y n array def /x n array def n 1 sub -1 0 { /i exch def y i 3 2 roll put x i 3 2 roll put } for } def %I Idraw 7 Grid 8 Begin %I b u %I cfg u %I cbg u %I f u %I p u %I t [ 0.8 0 0 0.8 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Rect %I b 65535 4 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 2.43888 0 0 2.05148 355.001 -683.924 ] concat %I 19 500 111 571 Rect End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 415 379 ] concat %I [ (ss) ] Text End Begin %I Line %I b 13107 3 0 1 [2 2 2 2 2 2 2 2] 15 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1.15476 0 0 1 355.757 27 ] concat %I 101 372 172 372 Line End Begin %I Rect %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1.4 0 0 2.0951 455.2 -157.785 ] concat %I 63 249 115 293 Rect End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 567 395 ] concat %I [ (mod) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 545 376 ] concat %I [ (ss) ] Text End Begin %I Rect %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1.4 0 0 2.0519 324.2 -145.059 ] concat %I 63 249 115 293 Rect End Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1.05085 0 0 1 365.383 211 ] concat %I 113 244 167 244 Line End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 501 412 ] concat %I [ (see) ] Text End Begin %I Rect %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1.8075 0 0 1.91452 440.511 -609.779 ] concat %I 69 518 89 534 Rect End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 430 401 ] concat %I [ (mod) ] Text End Begin %I Rect %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 2.17827 0 0 2.2857 277.133 -796.755 ] concat %I 69 518 89 534 Rect End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 490 470 ] concat %I [ (import) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* /Times-Bold 14 SetF %I t [ 1 0 0 1 400 504 ] concat %I [ (Rule \(3\)) ] Text End Begin %I Rect %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 2.22747 0 0 2.5335 406.766 -934.95 ] concat %I 69 518 89 534 Rect End Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1.05085 0 0 1 386.383 223 ] concat %I 196 233 196 198 Line End Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1.05085 0 0 1 386.383 234 ] concat %I 196 218 196 198 Line End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 546 442 ] concat %I [ (export) ] Text End Begin %I Rect %I b 65535 4 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 2.43888 0 0 2.05148 86.001 -683.924 ] concat %I 19 500 111 571 Rect End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* /Times-Bold 14 SetF %I t [ 1 0 0 1 131 504 ] concat %I [ (Rule \(2\)) ] Text End Begin %I Line %I b 13107 3 0 1 [2 2 2 2 2 2 2 2] 15 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1.15476 0 0 1 87.757 30 ] concat %I 111 375 175 375 Line End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 145 371 ] concat %I [ (ss) ] Text End Begin %I Rect %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1.15862 0 0 1.18074 81.265 85.148 ] concat %I 63 249 115 293 Rect End Begin %I Poly %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 10.293 0 0 6.88252 -568.664 -3207.97 ] concat %I 4 69 518 69 534 89 534 89 518 4 Poly End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 265 383 ] concat %I [ (ss) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 301 397 ] concat %I [ (mod) ] Text End Begin %I Rect %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1.4412 0 0 1.66963 199.425 -480.879 ] concat %I 69 518 89 534 Rect End Begin %I Rect %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1.82829 0 0 2.16668 169.229 -742.457 ] concat %I 69 518 89 534 Rect End Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1.05085 0 0 1 105.948 221 ] concat %I 196 233 196 198 Line End Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1.05085 0 0 1 106.383 232 ] concat %I 196 218 196 198 Line End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 266 439 ] concat %I [ (export) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 232 416 ] concat %I [ (see) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 157 393 ] concat %I [ (mod) ] Text End Begin %I Rect %I b 65535 4 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 2.43888 0 0 2.05148 214.001 -495.927 ] concat %I 19 500 111 571 Rect End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-times-bold-r-*-140-* /Times-Bold 14 SetF %I t [ 1 0 0 1 259 691 ] concat %I [ (Rule \(1\)) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 284 594 ] concat %I [ (mod) ] Text End Begin %I Line %I b 13107 3 0 1 [2 2 2 2 2 2 2 2] 15 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1.15476 0 0 1 214.757 228 ] concat %I 111 375 159 375 Line End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 273 565 ] concat %I [ (ss) ] Text End Begin %I Rect %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1.15862 0 0 1.20472 208.265 279.775 ] concat %I 63 249 115 293 Rect End Begin %I Line %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1.07492 0 0 1 224.307 383.386 ] concat %I 109 244 167 244 Line End Begin %I Line %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 34 278 ] concat %I 330 359 350 338 Line End Begin %I Line %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg %I p 0 SetP %I t [ 1 0 0 1 33 280 ] concat %I 353 358 328 338 Line End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 359 600 ] concat %I [ (see) ] Text End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 371 643 ] concat %I [ (=) ] Text End Begin %I Poly %I b 65535 2 0 0 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 10.293 0 0 6.39526 -439.664 -2761.7 ] concat %I 4 69 518 69 534 89 534 89 518 4 Poly End Begin %I Text %I cfg Black 0 0 0 SetCFg %I f *-courier-bold-r-*-120-* /Courier-Bold 12 SetF %I t [ 1 0 0 1 410 595 ] concat %I [ (mod) ] Text End Begin %I Rect %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1.17761 0 0 1.19445 332.938 282.694 ] concat %I 63 249 115 293 Rect End Begin %I Rect %I b 65535 2 0 1 [] 0 SetB %I cfg Black 0 0 0 SetCFg %I cbg White 1 1 1 SetCBg none SetP %I p n %I t [ 1.49041 0 0 1.92439 169.7 -109.576 ] concat %I 63 249 115 293 Rect End End %I eop showpage end %%EndDocument @endspecial 1007 4894 a Fh(Figure)27 b(6:)36 b Ff(Soft)m(w)m(are)d (Landscap)s(e)g(Scoping)e(Rules)p eop %%Page: 7 7 7 6 bop 150 390 a Fh(indicates)25 b(that)g(only)g(the)h(exp)r(orted)f (con)n(ten)n(ts)f(of)h(a)g(structure)g(ob)5 b(ject)25 b(b)r(o)n(x)f(are)h(sho)n(wn.)35 b(The)25 b(b)r(o)n(xes)g(without)150 490 y(letters)j(in)g(their)g(top-righ)n(t)f(corner)f(are)h Fg(me)l(aning)i Fh(ob)5 b(jects)27 b(\(mo)r(dules)h(or)g(classes\).)37 b(T)-7 b(o)27 b(imp)r(ort)h(en)n(tities)g(in)n(to)150 589 y(the)33 b(scop)r(e)f(of)g(a)g(subsystem,)i(a)e(replica)g(of)g(the) h(imp)r(orted)f(en)n(tit)n(y)h(m)n(ust)g(b)r(e)f(dra)n(wn)g(inside)g (the)h(subsystem)150 689 y(that)h(is)g(imp)r(orting.)57 b(The)34 b(replicas)f(are)g(indicated)i(using)e(the)i Fg(in-stub)e Fh(visual)h(sym)n(b)r(ol.)56 b(F)-7 b(or)33 b(example,)j(in)150 789 y(Figure)27 b(5,)g(mo)r(dule)h Fg(M4)g Fh(is)f(imp)r(orted)h(in)n(to)f(b)r(oth)h(subsystems)f Fg(S1)g Fh(and)h Fg(S2)f Fh(b)n(y)g(replicating)g(the)h(mo)r(dule)f(in) n(to)150 888 y(eac)n(h)f(subsystem)g(and)g(annotating)f(it)i(with)g (the)g Fg(in-stub)e Fh(sym)n(b)r(ol.)36 b(If)27 b(the)f(imp)r(orted)h (en)n(tit)n(y)f(is)g(a)g(subsystem,)150 988 y(suc)n(h)g(as)f Fg(S2)h Fh(in)h(the)f(example,)g(then)h(only)e(its)i(exp)r(orted)e(con) n(ten)n(ts)h(\(those)g(with)g(an)g Fg(out-stub)p Fh(\))f(are)g(imp)r (orted.)275 1088 y(Figure)32 b(6)h(sp)r(eci\014es)g(the)h(visibilit)n (y)f(among)f(mo)r(dules)h(in)h(a)f(Soft)n(w)n(are)f(Landscap)r(e)g(b)n (y)h(de\014ning)g(the)h Fg(se)l(e)150 1187 y Fh(relation)27 b(using)g(three)g(rules.)275 1353 y Fe(\017)41 b Ff(Rule)27 b(\(1\):)35 b Fh(Prop)r(er)23 b(sibling)i(mo)r(dules)g(\()p Fd(mo)r(d)p Fh(\),)h(that)f(is)f(t)n(w)n(o)g(distinct)i(mo)r(dules)f (that)g(are)f(con)n(tained)g(in)358 1453 y(the)k(same)f(subsystem)g(\() p Fd(ss)p Fh(\),)h(see)f(eac)n(h)g(other.)275 1619 y Fe(\017)41 b Ff(Rule)32 b(\(2\):)39 b Fh(Mo)r(dules)28 b(see)h(the)g(mo)r(dules)g(that)g(are)f(transitiv)n(ely)f(exp)r(orted)i (\(double)g(arro)n(w\))e(b)n(y)h(their)358 1719 y(sibling)f (subsystems.)275 1885 y Fe(\017)41 b Ff(Rule)34 b(\(3\):)44 b Fh(If)31 b(a)g(subsystem)g(imp)r(orts)g(another)f(subsystem,)i(an)n (y)e(mo)r(dules)i(in)f(the)g(\014rst)g(subsystem)358 1984 y(see)c(the)h(mo)r(dules)f(that)h(are)f(transitiv)n(ely)f(exp)r (orted)i(b)n(y)f(the)h(second)f(subsystem.)275 2150 y(There)g(are)g (additional)h(rules,)g(whic)n(h)g(w)n(e)g(will)g(not)h(giv)n(e,)e(that) i(sp)r(ecify)f(when)g(a)g(subsystem)g(can)g(imp)r(ort)150 2250 y(or)f(exp)r(ort)g(a)g(subsystem)g(or)g(mo)r(dule.)275 2350 y(Scoping)20 b(rules)h(at)g(the)h(lev)n(el)f(of)g(Soft)n(w)n(are)f (Landscap)r(es)g(are)g(used)i(to)f(con)n(trol)f(the)i(structure)e(of)i (the)f(o)n(v)n(erall)150 2449 y(arc)n(hitecture)31 b(of)g(large)g(soft) n(w)n(are)f(systems.)49 b(The)32 b(details)f(of)h(these)g(rules)f(v)-5 b(ary)31 b(from)h(MIL)g(to)f(MIL.)h(These)150 2549 y(details)21 b(are)f(not)h(imp)r(ortan)n(t;)i(what)d(is)h(imp)r(ortan)n(t)g(is)g (that)g(suc)n(h)g(rules)f(can)h(b)r(e)g(a)g(p)r(o)n(w)n(erful)f(aid)h (in)g(main)n(taining)150 2648 y(go)r(o)r(d)27 b(structure)g(of)h (large-scale)d(soft)n(w)n(are.)150 2923 y Fi(5)135 b(Conclusions)150 3105 y Fh(MILs)35 b(can)g(b)r(e)h(used)f(to)g(con)n(trol)f(the)h(in)n (teractions)f(among)h(the)g(subsystems)g(of)g(large)f(soft)n(w)n(are)g (systems.)150 3204 y(This)g(con)n(trol)f(is)h(a\013ected)h(b)n(y)f (rules)f(that)i(determine)f(whic)n(h)h(in)n(teractions)e(are)g(legal.) 56 b(In)34 b(this)h(pap)r(er,)g(w)n(e)150 3304 y(p)r(oin)n(t)i(out)f (that)h(these)f(rules)g(are)f(an)i(ev)n(olution)e(of)i(rules)e(that)i (determine)g(the)f(scop)r(e)g(of)h(imp)r(orted)f(and)150 3404 y(exp)r(orted)26 b(comp)r(onen)n(ts)g(at)g(the)h(lev)n(el)f(of)g (mo)r(dules)g(and)h(classes.)35 b(In)26 b(turn,)h(mo)r(dule)g(and)f (class)f(scoping)h(rules)150 3503 y(are)j(an)g(ev)n(olution)g(of)g (earlier)g(rules)g(suc)n(h)g(as)g(ALGOL-60's)f(blo)r(c)n(k)h(structure) g(scoping)g(rules.)42 b(W)-7 b(e)30 b(used)g(the)150 3603 y(ASF)c(notation)e(to)h(pro)n(vide)f(a)h(simple)g(w)n(a)n(y)f(of)h (sp)r(ecifying)g(and)f(visualizing)h(scoping)f(rules)g(at)h(v)-5 b(arious)24 b(lev)n(els,)150 3703 y(from)j(blo)r(c)n(ks)g(to)h(mo)r (dules)f(and)h(classes)e(to)h(subsystems.)p eop %%Page: 8 8 8 7 bop 150 390 a Fi(References)185 535 y Fc([1])41 b Fb(Cardelli,)25 b(L.,)g(Donahue,)f(J.,)g(Glassman,)g(L.,)h(Jord)o(an,)f (M.,)g(Kalso)o(w,)h(B.,)g(and)f(Nelson,)g(G.)30 b Fc(Mo)r(dula-3)22 b(Language)301 614 y(De\014nition.)32 b Fa(A)n(CM)25 b(SIGPLAN)h(Notic)l(es)g(27)p Fc(,)e(8)g(\(August)g(1992\),)h(15{42.) 185 726 y([2])41 b Fb(Cooprider,)g(L.)c(W.)67 b Fc(The)35 b(Represen)n(tation)i(of)e(F)-6 b(amilies)34 b(of)h(Soft)n(w)n(are)g (Systems.)66 b(T)-6 b(ec)n(h.)35 b(Rep.)h(CMU{CS{79{116,)301 805 y(Computer)24 b(Science)h(Departmen)n(t)f(Carnegie-Mellon)f(Univ)n (ersit)n(y)-6 b(,)23 b(April)f(1979.)185 917 y([3])41 b Fb(D)n(ahl,)30 b(O.)e(J.,)i(and)e(Nygaard,)h(K.)42 b Fc(SIMULA)27 b({)h(An)f(Algol-based)g(Sim)n(ulation)f(Language.)43 b Fa(Communic)l(ations)31 b(of)e(the)301 996 y(A)n(CM)d(9)33 b Fc(\(1966\),)25 b(671{678.)185 1108 y([4])41 b Fb(Hol)l(t,)29 b(R.)f(C.,)h(and)e(Cord)o(y,)i(J.)e(R.)40 b Fc(The)26 b(T)-6 b(uring)26 b(Programming)e(Language.)40 b Fa(Communic)l(ations) 30 b(of)f(the)e(A)n(CM)h(31)p Fc(,)f(12)301 1187 y(\(Decem)n(b)r(er)d (1988\),)h(1410{1423.)185 1299 y([5])41 b Fb(Hol)l(t,)34 b(R.)e(C.,)i(Penny,)g(D.)e(A.,)i(and)d(Mancoridis,)k(S.)51 b Fc(Multicolour)30 b(Programming)e(and)j(Metamorphic)f(Program-)301 1378 y(ming:)38 b(Ob)t(ject)29 b(Orien)n(ted)f (Programming{in{the{Large.)43 b(In)28 b Fa(Pr)l(o)l(c)l(e)l(e)l(dings)k (of)e(the)f(1992)i(IBM)f(CASCON)f(Confer)l(enc)l(e)301 1456 y Fc(\(No)n(v)n(em)n(b)r(er)24 b(1992\),)h(pp.)e(43{58.)185 1568 y([6])41 b Fb(Lampson,)36 b(B.)e(W.,)i(Horning,)f(J.)e(J.,)i (London,)h(R.)e(L.,)i(Mitchell,)g(J.)d(G.,)i(and)e(Popek,)k(G.)c(J.)55 b Fc(Rep)r(ort)33 b(on)f(the)301 1647 y(Programming)21 b(Language)26 b(Euclid.)31 b Fa(A)n(CM)25 b(SIGPLAN)h(Notic)l(es)g(12)p Fc(,)e(2)f(\(F)-6 b(ebruary)25 b(1977\),)g(1{79.)185 1759 y([7])41 b Fb(Lampson,)36 b(B.)e(W.,)i(Horning,)f(J.)e(J.,)i (London,)h(R.)e(L.,)i(Mitchell,)g(J.)d(G.,)i(and)e(Popek,)k(G.)c(J.)55 b Fc(Rep)r(ort)33 b(on)f(the)301 1838 y(Programming)21 b(Language)26 b(Euclid.)31 b(T)-6 b(ec)n(h.)24 b(Rep.)g(CSl-81-2,)e (Xero)n(x)i(P)n(alo)g(Alto)g(Researc)n(h)g(Cen)n(ters,)g(Octob)r(er)g (1981.)185 1950 y([8])41 b Fb(Mancoridis,)26 b(S.)j Fa(Contr)l(ol)t (ling)d(the)f(Inter)l(actions)h(of)f(A)n(r)l(chite)l(ctur)l(al)h (Design)e(Comp)l(onents)i(Using)f(Sc)l(oping)h(R)n(ules)p Fc(.)k(PhD)301 2029 y(thesis,)24 b(Departmen)n(t)g(of)f(Computer)g (Science,)i(Univ)n(ersit)n(y)f(of)f(T)-6 b(oron)n(to,)24 b(1996.)185 2141 y([9])41 b Fb(Mancoridis,)31 b(S.,)e(Hol)l(t,)h(R.)f (C.,)h(and)e(Penny,)h(D.)g(A.)42 b Fc(A)27 b(Conceptual)i(F)-6 b(ramew)n(ork)26 b(for)h(Soft)n(w)n(are)g(Dev)n(elopmen)n(t.)42 b(In)301 2220 y Fa(Pr)l(o)l(c)l(e)l(e)l(dings)28 b(of)e(the)f (Twenty{First)h(A)n(CM)g(Computer)g(Scienc)l(e)f(Confer)l(enc)l(e)k Fc(\(F)-6 b(ebruary)24 b(1993\),)h(pp.)f(74{80.)150 2332 y([10])41 b Fb(Meyer,)21 b(B.)j Fa(Obje)l(ct-Oriente)l(d)c(Softwar)l(e) i(Construction)p Fc(.)i(Pren)n(tice)c(Hall)e(In)n(ternational,)j (Englew)n(o)r(o)r(d)f(Cli\013s,)f(New)g(Jersey)-6 b(,)301 2411 y(1988.)150 2523 y([11])41 b Fb(Nara)l(y)l(anasw)-6 b(ami,)31 b(K.,)j(and)d(Sca)o(cchi,)i(W.)51 b Fc(Main)n(taining)30 b(Con\014gurations)h(of)f(Ev)n(olving)g(Soft)n(w)n(are)h(Systems.)50 b Fa(IEEE)301 2602 y(T)-5 b(r)l(ansactions)27 b(on)f(Softwar)l(e)g (Engine)l(ering)g(13)p Fc(,)e(3)g(\(Marc)n(h)g(1987\),)g(324{334.)150 2714 y([12])41 b Fb(Na)o(ur,)27 b(P.)38 b Fc(Revised)26 b(Rep)r(ort)g(of)f(the)h(Algorithmic)e(Language)k(Algol)d(60.)37 b Fa(Communic)l(ations)30 b(of)d(the)g(A)n(CM)h(6)p Fc(,)e(1)f (\(1963\),)301 2793 y(1{17.)150 2905 y([13])41 b Fb(Penny,)31 b(D.)f(A.)46 b Fa(The)30 b(Softwar)l(e)h(L)l(andsc)l(ap)l(e:)44 b(A)30 b(Visual)g(F)-5 b(ormalism)32 b(for)f(Pr)l(o)l(gr)l (amming{in{the{L)l(ar)l(ge)p Fc(.)49 b(PhD)28 b(thesis,)301 2984 y(Departmen)n(t)c(of)g(Computer)f(Science,)i(Univ)n(ersit)n(y)e (of)g(T)-6 b(oron)n(to,)25 b(1992.)150 3096 y([14])41 b Fb(Perr)l(y,)c(D.)d(E.)60 b Fc(The)34 b(Inscap)r(e)g(En)n(vironmen)n (t.)59 b(In)33 b Fa(Pr)l(o)l(c)l(e)l(e)l(dings)k(of)d(the)h(11th)g (IEEE)g(International)h(Confer)l(enc)l(e)e(on)301 3175 y(Softwar)l(e)27 b(Engine)l(ering)i Fc(\(Pittsburgh,)24 b(P)n(ennsylv)l(ania,)h(1989\),)f(pp.)g(2{12.)150 3287 y([15])41 b Fb(Prieto-Diaz,)31 b(R.,)e(and)f(Neighbors,)h(J.)f(M.)40 b Fc(Mo)r(dule)27 b(In)n(terconnection)j(Languages.)42 b Fa(The)29 b(Journal)h(of)f(Systems)f(and)301 3366 y(Softwar)l(e)f(6) 33 b Fc(\(1986\),)25 b(307{334.)150 3478 y([16])41 b Fb(R)n(ogers,)26 b(R.)f(W.)32 b Fa(A)l(da:)i(L)l(anguage,)26 b(Compilers,)h(and)f(Biblio)l(gr)l(aphy)p Fc(.)33 b(Cam)n(bridge,)22 b(1984.)150 3590 y([17])41 b Fb(Schw)-6 b(anke,)30 b(R.)e(W.,)i(Al)l (tucher,)f(R.)g(Z.,)h(and)e(Pla)l(toff,)h(M.)f(A.)42 b Fc(Disco)n(v)n(ering,)27 b(Visualizing,)g(and)g(Con)n(trolling)g (Soft-)301 3669 y(w)n(are)k(Structure.)53 b(In)31 b Fa(Pr)l(o)l(c)l(e)l (e)l(dings)k(of)d(the)g(Fifth)g(International)i(Workshop)f(on)g (Softwar)l(e)g(Sp)l(e)l(ci\014c)l(ation)h(and)f(Design)301 3748 y Fc(\(Pittsburgh,)25 b(P)n(ennsylv)l(ania,)f(Ma)n(y)g(1989\),)g (pp.)g(147{150.)150 3860 y([18])41 b Fb(Str)o(oustr)o(up,)31 b(B.)46 b Fa(The)30 b(C++)f(Pr)l(o)l(gr)l(amming)k(L)l(anguage)p Fc(.)46 b(Addison{W)-6 b(esley)29 b(Publishing)f(Compan)n(y)-6 b(,)30 b(Reading,)g(Mas-)301 3939 y(sac)n(h)n(usetts,)25 b(1986.)150 4051 y([19])41 b Fb(Wir)l(th,)26 b(N.)31 b Fa(Pr)l(o)l(gr)l(amming)d(in)e(Mo)l(dula-2)p Fc(.)33 b(Springer)23 b(V)-6 b(erlag)23 b(\(2nd)i(ed.\),)f(1983.)p eop %%Trailer end userdict /end-hook known{end-hook}if %%EOF