Icps-1997-4.ps

  • November 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Icps-1997-4.ps as PDF for free.

More details

  • Words: 112,066
  • Pages: 447
%!ps-adobe-2.0 %%creator: dvipsk 5.55a copyright 1986, 1994 radical eye software %%title: fthese.dvi %%pages: 133 %%pageorder: ascend %%boundingbox: 0 0 596 842 %%endcomments %dvipscommandline: dvips -f fthese.dvi %dvipsparameters: dpi=300, compressed, comments removed %dvipssource: tex output 1997.02.25:1621 %%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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 false 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 39158280 55380996 1000 300 300 (fthese.dvi) @start /fa 7 110 df<90380fe02090387018603801c00439030003e000061301000e13 004814605a15201278127000f01400a80070142012781238a26c14407e000614806ceb01 003801c00638007018eb0fe01b1e7d9c21>67 d80 d<13201370a313b8a3ea011ca2ea 031eea020ea2487eea07ffea040738080380a2001813c01301123838fc07f815157f9419 >97 d101 d<eaff80ea1c00b3eaff8009157f940d>105 d<eaffc0001cc7fcac1480a3130114005b5bb5fc11157f9415>108 d<00feeb0fe0001e140000171317a338138027a23811c047a33810e087a2eb7107a3133a a2131ca2123839fe083fe01b157f941f>i e /fb 4 121 df<913807f00491383ffc0c91 38fc0e1c903803e00390390f8001b8d91e0013f84913005b491470485a12035b00071560 485aa248c8fc1600123ea35aa4127800f8903803fff05c9138001f00151ea21278a25d12 7c123ca26c5c001f14f86c13013907c003b83903f01e103800fff8d93fc0c7fc262b78a9 2d>71 d<133eebe118380180bc380300fc481378120e5aa2003c13f05aa338f001e0a438 e003c014c3a3eb0786ea600fea701b3830338c38186188380f80f0181a7a991e>97 d<ebf00f39019c30c039031cc0e090381f80600006eb0070a2011e1378a2485a1200a349 13f0a315e0ebf001a215c0ec03801201ec0700140e6d5a3803cc30ebc3c001c0c7fca248 5aa448c8fca35aeafff0a21d2680991e>112 d<ebf03e39031c618038040cc1390c0f83 c00018eb87800010eb0300003090c7fca2ea601e1200a35ba45b1403a21406ea60f838f0 f00cebb80800e15b38631860383c07c01a1a7d991b>120 d e /fc 6 113 df<13fe3803ffc0000f13f0381f01f8383e007c48133c0078131e5a140f7ea212 70c7fca2141ea3143c147814f8eb01f0eb03e0eb07c0eb0f80eb1f00133e5b5b485aea03 c0485a380f000f121e5a007fb5fcb6fc7e18257da41f>50 d<137f3801ffc0000713e038 0f81f0381f0078123e003c133c5a141e127012f0b512fea300f0c7fca21278a36c131e7e 001f133e380fc0fc3803fff86c13f038003f80171a7d991f>101 d<eb01fceb07ff011f1380eb3f0f133c903878070091c7fca5387ffffeb5fca2d80078c7 fcb3a2383ffff0487f6c5b19257fa41f>i<ea7f8012ff127f1207a8eb83f0eb8ffcebbf feebfc1febf00f9038e0078013c0a21380af397ff87ff839fffcfffc397ff87ff81e2580 a41f>104 d<137013f8a3137090c7fca7ea7ff812ff127fea0078b3a2b512f8a315267b a51f>i<387f83e038ff9ffc387fbffe3807fc1f9038f007809038e003c013c090388001 e0a2ec00f0a8ec01e013c0ec03c0ebe0079038f00f809038f81f00ebbffeeb9ff8eb87e0 0180c7fcaaea7ff8487e6c5a1c2780991f>112 d e /fd 6 121 df<ea0ec012311260ea418012c1a213a0ea47c012390b097e8810>97 d<1208a21200a41270129812b01230a21260126412681270060f7d8e0b>105 d<12381218a35a13c0ea3360ea3440ea7800127e12631320eac340eac1800b0e7e8d10> 107 d<ea73c7389c6880389830c0383861801230a2eb63103860c320ebc1c014097d8819 >109 d<ea7380ea9c40ea9860ea30c0a3ea3188ea6190ea60e00d097d8812>i<ea1cf0ea 23181310ea0600a3ea4610eace20ea73c00d097f8810>120 d e /fe 6 108 df<126012f0a212701210a21220a21240a2040a7d830a>59 d<14c0a21301a21303130514e01308131813101320a213401380a23801fff0eb00701202 5aa25a121838fe03fe17177f961a>65 d<3807fff83800e00e14071403a2ea01c01407a2 140e3803803cebfff0a2eb803c3807001c140ea3000e131ca214381470381c01e0b51200 18177f961b>i<120313801300c7fca6121c12241246a25a120c5aa31231a21232a2121c 09177f960c>105 d<1318133813101300a6ea01c0ea0220ea0430a2ea08601200a313c0 a4ea0180a4ea630012e312c612780d1d80960e>i<121f1206a45aa4ea181c1366138eea 190cea3200123c123fea3180ea60c013c4a3eac0c813700f177e9612>i e /ff 5 108 df<eb78603801c4e0ea0302380601c0120e121c123c383803801278a338 f00700a31408eb0e101270131e38302620ea18c6380f03c015157e941a>97 d<ea03c0ea3f801203a348c7fca4120ea45a137cea1d86ea1e03003c1380123814c0a212 70a438e00780a3eb0f00130eea601ca2ea3030ea18e0ea0f8012237ea215>i<13e0a212 01ea00c01300a9121e1223ea4380a21283ea8700a21207120ea35aa3ea38201340127013 801230ea3100121e0b227ea111>105 d<147014f0a214601400a9130feb3180eb41c013

81a2ea0101a238000380a4eb0700a4130ea45ba45ba3ea7070eaf0605bea6380003ec7fc 142c81a114>i<13f0ea0fe01200a3485aa4485aa448c7fc1478eb0184eb021c380e0c3c 1310eb2018eb4000485a001fc7fc13e0ea1c38487ea27f140838701c10a3eb0c20eae006 386003c016237ea219>i e /fg 3 107 df0 d<ea03c0ea0ff0ea1c38ea300cea6006a2eac003a4ea6006a2ea300cea1c38ea0ff0ea03 c010107e9115>14 d<12c0b3b3a502297b9e0c>106 d e /fh 10 107 df<ea0780ea01c07f1200a27f1370a213781338a2133c131ca2131e130e131e133f 136713c738018780ea03031206000e13c0ea1c011238007013e0eae0004813f0141d7e9c 18>21 d<126012f0a2126004047c830c>58 d<126012f0a212701210a41220a212401280 040c7c830c>i<ec0380ec0f00143c14f0eb03c0010fc7fc133c13f0ea03c0000fc8fc12 3c12f0a2123c120fea03c0ea00f0133c130feb03c0eb00f0143c140fec038019187d9520 >i78 d<ea01e3ea0717ea0c0f1218ea380e12301270a2485aa4eb3880a3ea6078 38319900ea1e0e11127e9116>97 d<123f1207a2120ea45aa4ea39e0ea3a30ea3c181238 1270131ca3eae038a313301370136013c01261ea2300121e0e1d7e9c12>i<ea0fc01201 a2485aa448c7fca4ea0e3e13c3380f0380120e121e121ca338380700a3130e00701320a2 131c144038e00c8038600700131d7e9c18>104 d<ea01c01203a2ea0180c7fca6121c12 271247a21287a2120ea25aa35a1380a21270ea71001232121c0a1c7e9b0e>i<1307130f a213061300a61378139cea010c1202131c12041200a21338a41370a413e0a4ea01c01261 eaf180eaf30012e6127c1024809b11>i e /fi 6 121 df80 d<38ffe1ff380e00381410b20006132012076c1340ea01803800c180eb3e00181a7d991e >85 d101 d<eaff80ea1c00b1eaff8009137f920b>105 d<38fc07f0381e01c0381f00801217ea1380ea11c0a2ea10e0137013781338131c130ea2 1307130313011238eafe0014137f9217>110 d<38ff0fe0381e0780380e0600ea0f04ea 070cea038813d0ea01e01200137013f8ea01b8131cea021eea040eea0c0700081380003c 13c038fe0ff014137f9217>120 d e /fj 2 42 df<1202a212041208a2121012601280 a2126012101208a212041202a207107d920f>40 d<1280a212401220a21210120c1203a2 120c12101220a212401280a208107c920f>i e /fk 1 49 df<1208121ca21238a31230 1270a21260a212c0a2060d7e8d09>48 d e /fl 9 118 df<eafffcebff8014c038f007 e0eb01f013001478a514f0eb01e0eb0fc0b51280a214e038f003f0eb00f8143c141c141e a5143c14fceb03f8b512f014c0ebfe0017207c9f1e>66 d<ea07e0ea3ff8ea7ffcea701e ea401fea000fa3133fea07ff121fea7e0f12f812f0a3eaf83fea7fffea3fefea1f8f1014 7e9316>97 d<ea01fcea07ff001f1380ea3e07ea3c0148c7fca25aa61278a26c1380ea3e 07ea1fff00071300ea01f811147f9314>99 d<ea03f0ea0ffc487eea3e1fea7c07127838 700380b5fca300f0c7fca3127012786c1380ea3e07ea1fff00071300ea01f811147f9314 >101 d<12f0b3ae04207d9f0b>108 d<ea01f8ea07fe381fff80383f0fc0ea3c03387801 e0a238f000f0a6387801e0a2383c03c0ea3f0f381fff803807fe00ea01f814147f9317> 111 d<ea0ff0ea3ffc127fea780ceaf000a312fcea7fe0ea3ff0ea1ff8ea03fcea003e13 1ea212c0eaf03ceafffcea7ff8ea0fe00f147f9311>115 d<121ea6eafff0a3ea1e00ad 1310ea0ff8a2ea07e00d1a7f9910>i<eaf00faf131f133fb5fcea7fefea3f0f10147d93 17>i e /fm 2 49 df<eafffea20f027d8516>0 d<1218a31230a31260a312c0a2050b7e 8b09>48 d e /fn 1 68 df<14c013031307131c1378ea01e0ea0780ea0e0012385a12f0 1238120eea0780ea01e0ea0078131c13071303130012147d901a>67 d e /fo 3 111 df<12101230127012b01230a812fe070d7e8c0b>49 d<eaf3c0ea6180ea3300a51212a3121ea2120c0a0d808c0b>86 d<12f6123b1233a6eaff c00a0980880b>110 d e /fp 2 51 df<121812f81218aa12ff080d7d8c0e>49 d<123eea4180ea80c012c01200a2ea0180ea03001204ea08401230ea7f8012ff0a0d7e8c 0e>i e /fq 5 105 df<eafff8a30d037e8b12>45 d<1206a2120e121e12fe12ee120eac eaffe0a20b147d9312>49 d<ea7c7ca2ea3c70ea1cf0ea1ee0120f13c012071380120312 0713c0120fea0ee0121eea1c70a2ea3838eafc7ea20f147f9312>88 d<eafc7ea2ea3838a2ea1c70a2ea0ee0a3ea07c0a2ea0380a7ea0fe0a20f147f9312>i< 12f8a21238a4ea39e0ea3ff0ea3e38123c1238a8eafe3ea20f147f9312>104 d e /fr 29 121 df<1206120e12181230a21260a312c0a71260a31230a21218120e1206 07177b930f>40 d<128012c012601230a21218a3120ca71218a31230a2126012c0128006 177d930f>i<120fea1f80ea30c0ea6060a2eac030a7eae070ea6060ea70e0ea39c0ea1f 80ea0f000c127f910f>48 d<1204120c121c123c12fc124c120caaea7f80a209127e910f >i<121fea3fc0ea60e0eac03012e012401200a2136013c01201ea0380ea06005a5aea30

30ea7ff0a20c127f910f>i<126012f0a212601200a5126012f0a21260040d7b8c0f>58 d<1206120fa21209a3ea1980a4ea30c0a2123fa21230ea6060eaf0f0a20c127f910f>65 d<eaff8013c012601360a313e0ea61c0ea7f8013e0ea60601330a413e012ff13800c127f 910f>i<ea07b0ea1ff0ea3870ea30301260a2eac000a6ea6030a21230ea3860ea1fc0ea 07800c127f910f>i<eafff0a2ea6030a31300ea6180a2127fa21261a2ea60001330a3ea fff0a20c127f910f>69 d<eaf0f0a2ea79e0ea6960a6126f1266a21260a4eaf0f0a20c12 7f910f>77 d<eaff8013c0ea60e013701330a3137013e0ea7fc01380ea6000a512f0a20c 127f910f>80 d<eaf0f0a2ea6060a2ea30c0a4ea1980a5ea0900a2120fa212060c127f91 0f>86 d<eaf0f0a2eac030a2ea4020ea6060a2126fa31269a4ea2940ea39c0a212300c12 7f910f>i<ea71e0a2ea31c0ea1980121bea1f007e120e1206120e120f121bea1980a2ea 30c0a2eaf0f0a20c127f910f>i<eaf0f0a2ea70e0ea30c0a2ea1980a2ea0f00a31206a6 120fa20c127f910f>i<ea3ff0127fea6060a213c0ea0180a2ea03001206a25a5aa2ea30 301260a2eafff0a20c127f910f>i<123e127fea7180ea20c01200121f123f126012c0a2 1261ea7ff8ea1e780d0d7f8c0f>97 d<ea0f80ea3fc01271ea6080eac000a5ea60c01270 ea3f80ea0f000a0d7e8c0f>99 d<ea01e0a2ea0060a3120fea3fe012701260eac060a5ea 60e01271ea3f78120e0d127f910f>i<ea0e70ea1ff8ea3190ea60c0a4ea3180ea3f0012 6e1260ea3f80ea7fc0ea6060eac030a3ea6060ea3fc0ea1f800d147f8c0f>103 d<12f0a21230a3ea33c0ea3fe0ea3c3012381230a7eafcfca20e1280910f>i<1208121c 1208c7fca3127ca2120ca9eaff80a209137d920f>i<12fca2120caeeaffc0a20a127e91 0f>108 d<eaf3c0eaffe0ea3c3012381230a7eafcfca20e0d808c0f>110 d<121e123fea73801261eac0c0a5ea61801273ea3f00121e0a0d7e8c0f>i<eaf9f0eafb f8ea1e38ea1c1013001218a6b4fca20d0d7f8c0f>114 d<eaf9f0a2ea6060a3126fa3ea 2f40a2ea39c0a30c0d7f8c0f>119 d<eaf9e0a2ea39801219ea0f00120e1206120fa2ea 1980ea30c0eaf9f0a20c0d7f8c0f>i e /fs 20 118 df<ebfc7e380703c1390e078380 001c1303ec010091c7fca4b61280381c0703ac397f1fcfe01b1780961d>14 d<ea07c0ea1830ea3018ea701cea600ca2eae00ea9ea600ca2ea701cea3018ea1c70ea07 c00f157f9412>48 d<1206120e12fe120eb1eaffe00b157d9412>i<ea0f80ea30e0ea40 70ea8030eac03812e0124012001370a2136013c0ea0180ea03001206ea0c081208ea1018 ea3ff0127f12ff0d157e9412>i<ea0fe0ea3030ea6018ea701ca21200131813381360ea 07e0ea00301318130c130ea212e0a2eac00cea4018ea3030ea0fe00f157f9412>i<1330 a2137013f012011370120212041208121812101220124012c0eafffeea0070a5ea03fe0f 157f9412>i<ea6030ea7fe013c0ea44001240a4ea4f80ea70e0ea4070ea00301338a212 4012e0a2ea8030ea4060ea20c0ea1f000d157e9412>i<ea01f0ea0608ea080cea181c12 30ea7000126012e0eae3e0eaec30eaf018130ceae00ea31260a2ea300c1318ea1830ea07 c00f157f9412>i<126012f0a212601200a6126012f0a212701210a21220a21240a20414 7d8d0a>59 d<ea3fc0ea70601330ea20381200ea03f8ea1e3812301270eae039a21379ea 70ffea1f1e100e7f8d12>97 d<12f81238a8ea39f0ea3e0cea380613077f1480a414005b 1306ea361cea21f011177f9614>i<ea0fc0ea1860ea3030ea7038eae018eafff8eae000 a31260ea7008ea3010ea1830ea07c00d0e7f8d10>101 d<12301278a212301200a512f8 1238ac12fe07177f960a>105 d<38f8f83e383b1cc7393c0f0380ea380eaa39fe3f8fe0 1b0e7f8d1e>109 d<eaf8f8ea3b1cea3c0e1238aa38fe3f80110e7f8d14>i<ea07c0ea18 30ea3018ea600ca2eae00ea5ea701cea3018ea1830ea07c00f0e7f8d12>i<eaf9e0ea3a 70123cea38201300a9b4fc0c0e7f8d0e>114 d<ea1f40ea60c0eac040a2eae000b4fcea 7f80ea1fc0ea01e0ea8060a212c0eae0c0ea9f000b0e7f8d0e>i<1208a31218a21238ea ffc0ea3800a71340a4ea1c80ea0f000a147f930e>i<eaf83eea380eaa131eea1c2e3807 cf80110e7f8d14>i e /ft 2 68 df<124012f012fc12cfeac3c0eac0f0133c130feb03 c0eb00f0143c140fec0380ec0f00143c14f0eb03c0010fc7fc133c13f0eac3c000cfc8fc 12fc12f012c019197d9520>66 d<ec01801407141f1479eb01e1eb0781eb1e011378ea01 e0ea0780ea1e00127812e01278121eea0780ea01e0ea0078131eeb0781eb01e1eb007914 1f1407140119197d9520>i e /fu 51 126 df<ea0380ea07e0120fea1e70121ca3ebf7 e013e7ea1dc7000f1300138e130e121f485aea7b9c1273eae1f8a238e0f0e0a2ea71f838 7fffc0ea3f9f381e070013197f9816>38 d<13e01201ea0380ea0700120e5aa25aa25aa3 5aa91270a37ea27ea27e7eea0380ea01e012000b217a9c16>40 d<12c07e12707e7e7ea2 7ea2ea0380a3ea01c0a9ea0380a3ea0700a2120ea25a5a5a5a5a0a217b9c16>i<ea0380 a4eae38eeaf39eeafffeea3ff8ea0fe0a2ea3ff8eafffeeaf39eeae38eea0380a40f127d 9516>i<13e0a8b512e0a33800e000a813137f9516>i<1238127c127ea2123e120e121e12 1c127812f01260070b798416>ii<eb01801303a2eb0700a2130e a25ba25ba25ba25ba2485aa2485aa248c7fca2120ea25aa25aa25aa25aa25a11207e9c16 >47 d<ea03e0ea0ff8487eea1e3cea380eea780fea7007a238e00380a8eaf00700701300 a2ea780fea3c1e6c5aea1ffc6c5aea03e011197e9816>i<12035aa25a5ab4fca212e712

07aeeafff8a30d197b9816>i<ea07e0ea1ff8487eea783eeae00700f013801303126012 00a2eb0700a2130e5b5b5b5b485a485a000fc7fc381e03801238ea7fffb5fc7e11197e98 16>i<ea07e0ea1ff8487eea781e130712301200a2130e133eea07fc13f013fcea001e13 077f1480a2126012f038e00700ea781eea3ffc6c5aea07e011197e9816>i<127012f8a3 12701200a8127012f8a312700512789116>58 d<1238127ca312381200a812381278127c a2123c121ca21238127012f012400618799116>i<eb01801307131feb3e0013f8485aea 07c0485a003ec7fc12fc12f012fc123eea0f806c7eea01f06c7e133eeb1f801307130111 157e9616>i<387fffc0b512e0a2c8fca5b512e0a26c13c0130b7f9116>i<12c012f012fc 123eea0f806c7eea01f06c7e133eeb1f801307131feb3e0013f8485aea07c0485a003ec7 fc12fc12f012c011157e9616>i<13e0487ea213b0a2ea03b8a31318ea071ca5ea0e0ea2 ea0ffea2487eea1c07a3387e0fc038ff1fe0387e0fc013197f9816>65 d<3801f180ea07fbea0fffea1f0fea3c07ea38031270a200f0c7fc5aa77e38700380a212 38383c0700ea1f0fea0ffe6c5aea01f011197e9816>67 d76 d<387e07f038ff0ff8387f07f0381d81c0a313c1121c13e1 a213611371a313311339a21319131d130da3ea7f07eaff87ea7f031519809816>78 d<ea7ff8eafffe6c7e381c0f80130314c01301a313031480130f381fff005b13f8001cc7 fca7127f487e6cc7fc12197f9816>80 d<ea7ff0eafffc6c7eea1c0feb07801303a41307 eb0f00ea1ffe5b7fea1c0e7fa414101438a2387f03f0eaff83387f01e01519809816>82 d<ea07e3ea1fff5aea781feaf00712e0a290c7fc7e1278ea3f80ea1ff0ea07fcc67e130f 7feb0380a2126012e0eb0700eaf80feafffe5beac7f011197e9816>i<eafff0a3eae000 b3a8eafff0a30c20789c16>91 d<eafff0a3ea0070b3a8eafff0a30c207f9c16>93 d<ea1fe0487e487eea783cea300e1200a2ea03fe121fea3e0e127012e0a3ea783e387fff e0ea3fe7ea0f8313127e9116>97 d<ea03f8ea0ffcea1ffeea3c1eea780cea70005aa57e ea70071278ea3e0eea1ffcea0ff8ea03f010127d9116>99 d<133fa31307a4ea03c7ea0f f748b4fcea3c1f487eea700712e0a6ea700f12786c5a381fffe0ea0ff7ea07c713197f98 16>i<ea03f0ea0ffc487eea3c0f487e3870038012e0b5fca300e0c7fca2387003801278 ea3e07381fff00ea07feea01f811127e9116>i<131e137f3801ff8013c7380383001380 a2ea7fffb5fca2ea0380acea7ffc487e6c5a11197f9816>i<3803e3c03807f7e0ea0fff 381c1cc038380e00a56c5aea0ff8485aea1be00038c7fc1218ea1ffc13ff481380387003 c038e000e0a4387001c0ea7c07383fff80380ffe00ea03f8131c7f9116>i<12fca3121c a41378ea1dfcea1ffe130fea1e07121caa38ff8fe0139f138f13197f9816>i<1203ea07 80a2ea0300c7fca4eaff80a31203aceafffc13fe13fc0f1a7c9916>i<13301378a21330 1300a4ea0ff8121f120fea0038b3ea6070eaf0f0eaffe0ea7fc0ea3f800d237e9916>i< 127e12fe127e120ea4eb7fe0a3eb0f00131e5b5b5b120f7f13bc131eea0e0e7f1480387f 87f0eaffcfea7f871419809816>i<ea7fc012ff127f1201b3ea7fffb512806c13001119 7e9816>i<38f9c38038ffefc0ebffe0ea3c78a2ea3870aa38fe7cf8a31512809116>i<ea fc78eafdfcb47eea1f0fea1e07121caa38ff8fe0139f138f13127f9116>i<ea03e0ea0f f8487eea3c1e487eea700738e00380a5eaf00700701300ea780fea3c1eea1ffc6c5aea03 e011127e9116>i<eafc7ceafdfeb5fc381f0780381e03c0ea1c01eb00e0a6eb01c0ea1e 03381f0780ebff00ea1dfeea1c7890c7fca6b47ea3131b7f9116>i<3803e380ea0ff3ea 1ffbea3e0fea78071270eae003a6ea70071278ea3c1fea1ffbea0ff3ea03e3ea0003a6eb 1ff0eb3ff8eb1ff0151b7f9116>i<387f0fc038ff3fe0ea7f7f3807f040ebc0005ba290 c7fca8ea7ffc12ff127f13127f9116>i<ea0fecea3ffc127feaf03ceae01ca2ea7000ea 7f80ea1ff0ea07f8ea003cea600e12e012f0eaf81eeafffc13f8eac7e00f127d9116>i< 12035aa4ea7fffb5fca20007c7fca75beb0380a3eb8700ea03fe6c5a6c5a11177f9616> i<eafc3fa3ea1c07ab131f381fffe0ea0ff7ea07c713127f9116>i<387f1fc038ff9fe0 387f1fc0381c0700a2ea0e0ea36c5aa4ea03b8a3ea01f0a26c5a13127f9116>i<387f1f c038ff9fe0387f1fc0381c0700120e130ea212075ba2ea039ca21398ea01b8a2ea00f0a3 5ba3485a1279127bea7f8090c7fc123c131b7f9116>121 d<eb1f80137f13ff3801e000 5ba91203ea7f8048c7fca26c7eea03c01201a97f3800ff80137f131f11207e9c16>123 d<12e0b3ae0320779c16>i<127cb4fc7fea03c01201a97f6cb4fceb7f80a2ebff00ea01 e05ba91203b45a90c7fc127c11207e9c16>i e /fv 2 106 df<137ea2130ea5ea07ceea 0ffeea1c3eea301eea700e12e0a61270ea301eea383e381fefc0ea07cf12177f9614> 100 d<1206120fa21206c7fca4b4fca21207aceafff8a20d187c9714>105 d e /fw 32 123 df<ea03ff120fea1c30ea30181260a3eac030a2ea4060ea6040ea2180 ea1e00100d7f8c13>27 d<124012e0124003037d820a>58 d<124012e012601220a31240 a2128003097d820a>i<7fa638f08780381ffc00ea07f0ea01c0ea0360ea0220ea063048 7eea0808487e1110818e11>63 d<5b5b5b1480130b131b13131323a21343138314c0ea01 01ea03ffea02011204120c1208001813e038fe07f815147f9319>65 d<3807ffe03800e0383801c018141ca338038038147014e0ebffc0380700e01470143014

38000e1370a214e0a2381c038038fffe0016147f9319>i<3807ffe03800e0703801c018 140ca2140eea0380a43807001ca31438000e1330147014e0eb01c0381c0700eafffc1714 7f931b>68 d<3807fffc3800e01c3801c00ca31408ea03811400138313ffea0702a21408 eb0010120ea214201460381c01e0b512c016147f9318>i<ea07fcea00e0ea01c0a4ea03 80a4ea0700a4120ea45aeaff800e147f930f>73 d77 d<3907e01fc00000eb060038017004a21338a238 021c08a2130ea2486c5aa2eb0390a2380801e0a21300a20018134012fe1a147f931a>i< 38ff01f83838006014401480383c0100121c13025ba25bea1e10120e5b5ba25b000fc7fc 7e1206120415147e9314>86 d<38ff80fc381c0030001e1340000e13c0380f01801400ea 07021384ea0388139013e06c5aa3485aa448c7fcea3fe016147f9314>89 d<ea07b0ea0c701210ea30601260a3eac0c013c8a21241ea62d0ea3c700d0d7e8c12>97 d<123c120c5aa45aea3380ea3c60ea3020ea6030a4eac060a2ea40c0ea6080ea2300121e 0c147f930f>i<ea03c0ea0c20ea1870ea30e0ea6000a35aa2ea4010ea6020ea30c0ea1f 000c0d7f8c0f>i<133c130c1318a41330ea07b0ea0c701210ea30601260a3eac0c013c8 a21241ea62d0ea3c700e147e9311>i<ea0780ea1840ea3020ea604012c0eaff80eac000 5aa2eac0201340ea6180ea3e000b0d7e8c10>i<1318136c137c136c13c0a3ea07f8ea00 c0ea0180a5ea0300a512021206a2126612e45a12700e1a7f9310>i<ea01ccea062cea0c 1cea18181230a3ea6030a21220ea3070ea10e0ea0f601200a2ea60c012e0eac380ea7e00 0e137f8c10>i<121e12065aa45aea19e0ea1e30121812381230a3ea6060136413c413c8 12c013700e147e9313>i<1206120712061200a41238124ca2128c12981218a212301232 a21264a2123808147f930c>i<1330133813301300a4ea01c0ea0260ea04301360120812 00a213c0a4ea0180a4ea630012e312c612780d1a81930e>i<121e12065aa45a1338135c 139cea3118ea36001238ea3f80ea61c0ea60c8a3eac0d013600e147f9312>i<3830f87c 38590c86384e0d06ea9c0eea980c1218a248485a15801418a23960301900140e190d7f8c 1d>109 d<ea30f8ea590c124e129c12981218a2ea301813191331a2ea6032131c100d7f 8c15>i<ea0380ea0c60ea1820ea30301260a3eac060a2ea40c0ea6080ea2300121e0c0d 7e8c10>i<ea0c78ea168cea1304ea2606a21206a2ea0c0ca213081310ea1a20ea19c0ea 1800a25aa312fc0f13818c11>i<ea31e0ea5a70124cea9c60ea98001218a25aa45aa20c 0d7f8c0f>114 d<ea3810ea4c181310128c12981218a2ea3020a21340a2ea1880ea0f00 0d0d7f8c11>118 d<ea0e3cea13ceea238eea430c13001203a21206130812c6eae610ea ca20ea71c00f0d7f8c13>120 d<ea0610ea1fa0ea10e0ea00401380ea01001202120cea 10201220ea3840ea4fc0ea83000c0d7f8c10>122 d e /fx 22 111 df<14181430146014e014c0eb01801303eb07001306130e130c131c5ba25ba25ba21201 5ba2485aa3120790c7fca25a120ea2121ea3121ca2123ca412381278a8127012f0b3a812 701278a81238123ca4121ca2121ea3120ea2120f7ea27f1203a36c7ea27f1200a21370a2 7fa27f130c130e13061307eb03801301eb00c014e0146014301418157c768121>32 d<12c012607e123812187e120e7e7e7f12017f6c7ea21370a27fa2133c131ca27fa3130f 7fa214801303a214c0a31301a214e0a4130014f0a814701478b3a8147014f0a814e01301 a414c0a21303a31480a213071400a25b130ea35ba2133c1338a25ba25ba2485a5b120390 c7fc5a120e120c5a123812305a5a157c7f8121>i<141c143c14f8eb01e0eb03c0eb0780 eb0f00130e131e5ba35bb3b3a25ba3485aa2485a5b48c7fc120e5a127812e0a21278121c 7e7e6c7e7f6c7ea26c7ea31378b3b3a27fa37f130e130feb0780eb03c0eb01e0eb00f814 3c141c167c7b8121>40 d<140c141814381430146014e014c01301eb0380a2eb0700a213 0ea25ba25ba21378137013f0a25b1201a2485aa4485aa3120f90c7fca35aa2121ea3123e a4123ca3127ca81278a212f8b1164b748024>48 d<12c01260127012307e121c120c120e 7ea26c7ea26c7ea26c7ea21370a213781338133ca2131c131ea27fa4eb0780a314c01303 a314e0a21301a314f0a41300a314f8a81478a2147cb1164b7f8024>i<eafffca3eae000 b3b3b3b10e4a73801c>i<eafffca3ea001cb3b3b3b10e4a80801c>i<12e0b3b3b3b1eaff fca30e4a73811c>i<131cb3b3b3b1eafffca30e4a80811c>i<12e0b3a9031b73801c>i< 12e0b3a9031b75801c>i<1318137813f0ea01e0ea03c0ea0780ea0f005a121e123e123c 127ca2127812f8b3a50d25707e25>i<12f8b3a51278127ca2123c123e121e121f7eea07 80ea03c0ea01e0ea00f0137813180d25708025>58 d<137cb3a613f8a313f0120113e012 0313c0ea07801300120e5a5a12f012c012f012387e7e7e1380ea03c013e0120113f01200 13f8a3137cb3a60e4d798025>60 d<12f8ae050e708025>62 d<12f8b11278a2127ca812 3ca3123ea4121ea3121fa27ea37f1207a36c7ea46c7ea212007fa2137013781338a27fa2 7fa27fa2eb0380a2eb01c0130014e01460143014381418140c164b748224>64 d<147cb11478a214f8a814f0a31301a414e0a31303a214c0a313071480a3eb0f00a4131e a2131c133ca2133813781370a25ba2485aa2485aa248c7fca2120e120c121c12185a1270 12605a164b7f8224>i<12f8b3a9051b748024>i<12f8b3a9051b6e8024>i<ecff800107

13f0011f13fc90387f007f01f8eb0f80d801e0eb03c048486d7e48486d7e486c497e486c 497ed81cf0eb079cd83878eb0f0e6d131e486c497e6d137890380780f0903803c1e03be0 01e3c00380903800f780ec7f00143ea2147fecf780903801e3c03b7003c1e00700903807 80f090380f0078011e133c6c48eb1e0e49130f6c48eb079cd81fe0eb03fc6c486d5a6c48 6d5a6c6c495a6c6c495ad800f8eb0f80017f017fc7fc90381ffffc010713f00100138029 2a7e7f2e>78 d80 d<14e01303eb0f80eb1e005b1370a25bb3a5485aa248 5a48c7fc120e123c12f0a2123c120e7e6c7e6c7ea26c7eb3a51370a2133c7feb0f80eb03 e01300134a7c811c>110 d e /fy 4 40 df<13c0a4ea0180a2ea0300120e12fc12f00a 0a888911>1 d<12c0a31260a27e7e120eea07c012010a0a808911>i36 d39 d e /fz 2 64 df<7e12f012fcb4fc13e013fea213e0130012fc12f012800f0c67852a>45 d<eafff0ea7fe0a3ea3fc0a2ea1f80a2ea0f00a31206a40c0f86902a>63 d e /fa 5 68 df3 d<1308131ca213361363a2ebc180380180c0a238030060a200067f487fa2487f487fa248 7fa248eb01800060eb0300a26c1306a26c5b6c5ba26c5b6c5ba26c6c5aa23800c1800163 c7fca21336131ca2130819277ea01e>6 d<150281a2ed00800018011813c0003c013c13 600066016613303ac381c3fff83881c381d80066c71230013c1460011814c090c81280ed 0100a2150225107c922d>32 d<124012f012fc12cfeac3c0eac0f01338130e6d7eeb01e0 eb0078141eec0780ec01c0ec0780ec1e001478eb01e0eb0780010ec7fc133813f0eac3c0 00cfc8fc12fc12f012c01a1b7c9823>66 d<15c01403140f143c14f0eb03c0eb0700131c 1378ea01e0ea0780001ec7fc127812e01278121eea0780ea01e0ea0078131c1307eb03c0 eb00f0143c140f140314001a1b7c9823>i e /fb 10 121 df<1230127812f012600504 7c830c>46 d<ea03ccea0e2eea181c123812301270eae038a4eac072a3ea60f2ea6134ea 1e180f107c8f14>97 d<127e120ea35aa45aa2ea3bc0ea3c301278ea7018a3eae038a4ea c070136013e0ea60c0ea6380ea1e000d1a7c9912>i<ea01e0ea0618120cea1838ea3010 ea7000126012e0a413081310ea6020ea30c0ea1f000d107c8f12>i<ea01e0ea0e18ea1c 08123812701310eaffe0eae000a41308ea60101320ea30c0ea1f000d107c8f12>101 d<1307eb0980131beb3b00133813301370a4ea07ffea00e0a5485aa5485aa490c7fc5aa2 1206126612e412cc1270112181990c>i<121f1207a3120ea4121ca41238a41270a412e4 a412e81230081a7d990a>108 d<1206120ea45aa2eaffc0ea1c005aa45aa412e1a312e2 12e412380a177c960d>116 d<ea3806ea4c07ea4e0e128e129ca2ea1c1c1238a3ea7039 a3ea3079ea389aea0f0c10107c8f15>i<ea078f3808d180ea10f3ea20e1ebe000a2ea01 c0a4ea0382a212c3eae784eac588ea78f011107e8f12>120 d e /fc 1 59 df<126012f0a2126004047d830b>58 d e /fd 44 122 df<13feea038138060180ea0e03381c010090c7fca5b51280ea1c03ae38ff8ff0141a80 9915>12 d<90387e1f803901c17040390703c0600006eb80e0000e14401500a5b612e038 0e0380ae397f8fe3fc1e1a809920>14 d<12e0a212f012381218120c120406077c9913> 18 d<121ca2123c1270126012c012800607789913>i<121c121e1207a312fe08067b7f11 >24 d<eb0c06a3495aa4495aa4495ab612e0a23900c06000a348485aa3b612e0a2390301 8000a2d80603c7fca5ea0c06a41b217e9920>35 d<126012f012f812681208a31210a212 201240050b7d990b>39 d<1380ea010012025a120c120812185aa35aa412e0aa1260a47e a37e1208120c12047e7eea008009267d9b0f>i<7e12407e7e12181208120c7ea37ea413 80aa1300a41206a35a1208121812105a5a5a09267e9b0f>i<126012f0a212701210a312 20a21240a2040b7d830b>44 d<126012f0a2126004047d830b>46 d<12035ab4fc1207b3a2ea7ff80d187d9713>49 d<ea0f80ea1060ea2030ea4038ea803c eac01c12e01240ea003c1338a21370136013c0ea018013001202ea040412081210ea3008 ea3ff8127f12ff0e187e9713>i<ea07e0ea1838ea201cea601eea700eea201e1200131c a213381370ea07e0ea0038131c130e130fa212e0a212c0ea400eea601cea1838ea07e010 187f9713>i<1318a21338137813f813b8ea01381202a212041208121812101220124012 c0b5fcea0038a6ea03ff10187f9713>i<ea3018ea3ff013e01380ea2000a5ea2fc0ea30 60ea2030ea00381318131ca2124012e0a2ea8018ea40381330ea30e0ea0f800e187e9713

>i<1240ea7fff13fea2ea4004ea80081310a2ea00201340a21380120113005aa25a1206 a2120ea5120410197e9813>55 d<126012f0a212601200a8126012f0a212701210a31220 a21240a204177d8f0b>59 d<130ca3131ea2132f1327a2eb4380a3eb81c0a200017f1300 a248b47e38020070a2487fa3487fa2003c131eb4ebffc01a1a7f991d>65 d<eaffe0000ec7fcb01408a3141814101430147014f0b5fc151a7f9918>76 d<39ffe07fc0390e000e001404b200065b12076c5b6c6c5a3800e0c0013fc7fc1a1a7f99 1d>85 d<120c121e1233ea6180eac0c0ea80400a067c9913>94 d<ea1fc0ea38707fea10 1c1200a2ea03fcea1e1c1238127012e01480a2133cea705f381f8f0011107f8f13>97 d<12fc121ca913fcea1d07381e0380381c01c0130014e0a6eb01c01480381e0300ea1906 ea10f8131a809915>i<ea07f8ea1c1c1238ea700813005aa612701304ea3808ea1c18ea 07e00e107f8f11>i<133f1307a9ea03e7ea0c17ea180f487e127012e0a6126012706c5a ea1c373807c7e0131a7f9915>i<ea07c0ea1c30ea30181270ea600c12e0eafffceae000 a41260ea7004ea3808ea1c18ea07e00e107f8f11>i<ea01f0ea0718ea0e38ea1c101300 a6eaffc0ea1c00aeeaff800d1a80990c>i<ea0fcf3818718038303000ea7038a4ea3030 6c5aea2fc00060c7fca21270ea3ff013fc6c7eea600feac003a4ea6006ea381cea07e011 187f8f13>i<12fc121ca9137cea1d87381e0380a2121cab38ff9ff0141a809915>i<1218 123ca212181200a612fc121cae12ff081a80990a>i<12fc121cb3a6eaff80091a80990a> 108 d<38fc7c1f391d8e6380391e0781c0a2001c1301ab39ff9fe7f81d107f8f20>i<ea fc7cea1d87381e0380a2121cab38ff9ff01410808f15>i<ea07e0ea1c38ea300cea700e ea6006eae007a6ea6006ea700eea381cea1c38ea07e010107f8f13>i<eafcfcea1d0738 1e0380381c01c0a2eb00e0a6eb01c01480381e0300ea1d06ea1cf890c7fca6b47e131780 8f15>i<ea03e1ea0c13ea180bea300fea700712e0a61270a26c5aea1c37ea07c7ea0007 a6eb3fe013177f8f14>i<eafc78ea1d9cea1e1c1308ea1c00abeaff800e10808f0f>i<ea 1f20ea60e0ea402012c0a2eaf000127fea3fc0ea1fe0ea00f0ea8070133012c01320eaf0 40ea8f800c107f8f0f>i<1208a41218a21238eaffc0ea3800a81320a41218ea1c40ea07 800b177f960f>i<38fc1f80ea1c03ab1307120cea0e0b3803f3f01410808f15>i<38ff0f 80383c0700ea1c061304a26c5aa26c5aa3ea03a0a2ea01c0a36c5a11107f8f14>i<38fe 3f80383c1e00ea1c086c5aea0f306c5a6c5a12017f1203ea0270487e1208ea181cea381e 38fc3fc012107f8f14>120 d<38ff0f80383c0700ea1c061304a26c5aa26c5aa3ea03a0 a2ea01c0a36c5aa248c7fca212e112e212e4127811177f8f14>i e /fe 3 91 df<397fc007fc13e0391f3001e039199800c0ea18d813cc1366a27feb1980 a2eb0cc0eb0660143013031418eb018ceb00cc14c61463146114311418a2140c1406a214 03123c38ff80011400c812401e207d9e22>78 d82 d<003fb512805a3961e0c300386380c6386e0186387c030c1270eb061800605b130cc648 5aa2495aeb3180136149c7fca2ea0186484813201560ea061815e0390c3001c0ea186014 033830c0063831800c0061eb198038c30071b6fca21b1f7e9e2e>90 d e /ff 32 119 df0 d<0040130400c0130c006013186c1330 6c13606c13c03806018038030300ea0186ea00cc13781330a2137813ccea0186ea030338 060180380c00c048136048133048131848130c0040130416187a9623>2 d<eb0fc0eb713838018106380201010004eb00800008144000101420a200201410004014 08a300801404a3b612fc3980010004a400401408a30020141000101420a2000814400004 14800002eb01003801810638007138eb0fc01e207e9a23>8 d<eb0fc0eb703838018006 3802000148eb0080000c14c00012eb012000111302002114103940800408eb4008eb2010 3980102004eb0840eb0480eb0300a2eb0480eb0840eb10203940201008eb4008eb800439 210002100011142000121301000ceb00c0000414806ceb01003801800638007038eb0fc0 1e207e9a23>10 d<eb0fc0eb7038380180063802000148eb0080481440481420a2481410 481408a3481404eb0780eb0fc0a4eb078090c7fc00401408a36c14106c1420a26c14406c 14806ceb01003801800638007038eb0fc01e207e9a23>12 d<ea03f0ea0ffcea1c0eea30 0338600180a238c000c0a638600180a238300300ea1c0eea0ffcea03f012127e9317>14 d17 d<90383fffc090b5fcd803c0c7fc48c8fc120c5a5aa25aa25aa71260a27ea27e7e1207ea 03c0c6b512c0133f90c8fca7007fb512c0a21a247c9c23>i<15c01403ec0f00143c14f0 eb03c049c7fc131c1378ea01e0ea0780001ec8fc127812e01278121eea0780ea01e0ea00 78131c1307eb03c0eb00f0143c140fec03c014001500a7007fb51280b612c01a247c9c23 >20 d<90383fffc090b5fcd803c0c7fc48c8fc120c5a5aa25aa25aa81260a27ea27e7e12 07ea03c0c6b512c0133f1a1c7c9823>26 d<1506a381a216801501ed00c0166016701618 b8fca2c912181670166016c0ed018015031600a21506a328187e962d>33 d<1303a21306a25b5b5b017fb512fe90b7fcd80380c8fc48c9fc123c12f0123c120eea03

806c7ed8007fb6fc6d14fe0118c8fca27f7fa27fa2281a7e972d>40 d<15c0a21560a2818181007fb512feb7fcc8ea01c0ed00e0163c160f163c1670ed01c0ed 0380b6eafe006c5cc81218a25d5da25da2281a7e972d>i<0108130401181306a2497fa2 496d7e496d7e48b67e488148c81238000e810038150700f0ed03c00078ed0780001ced0e 00000615186c5d6cb612e06c5d903960000180a26d49c7fc6d1306a3010813042a1a7f97 2d>44 d<eb3ff813ff3803c00048c7fc120c5a5aa25aa25aa3b512f8a200c0c7fca31260 a27ea27e7e1207ea03c03800fff8133f151c7c981e>50 d<140ca21418a21430a21460a2 14c0a2eb0180a3eb0300a21306a25ba25ba25ba25ba25ba2485aa248c7fca21206a35aa2 5aa25aa25aa25a1240162c7aa000>54 d<12c0a712e0a212c0a703107e9200>i<004013 0100c0130300601306a36c130ca36c1318a3380ffff0a2380c00306c1360a36c13c0a238 018180a33800c300a31366a3133ca31318a21821809f19>ii<1510153015f0a31401a21402a21404140c1408 141814101420a24a7e14c0ec80781301eb03001302130690380dfff8130f90381800785b 49137cea40e0d8c0c0133ceae380b4c7123e48ec3f80ed1f00007891c7fc21237fa024> 65 d<eb3fff48b512e039071e0ff80008eb01fc0018eb007c0070143ea200c0141fea00 1c150f133ca31338150e1378151e0170131ca201f013384913301570000114e0491380ec 010000031306eb80081430380703c048b4c7fcea1ff0201f7f9e23>68 d<ec1f80147fec87c0eb0307eb0603130e011c1380150049c7fca213781370a213f05ba2 1201a25ba212035ba2120790c8fca2000e146015e0391ff001c001fe13803930ffc30038 601ffc38c003f81b217f9f1f>76 d<0040148000c01301b3a20060eb0300a26c1306001c 131c000f13783803ffe0c61380191c7e9a1e>91 d<ebff80000313e0380f0078001c131c 00301306487fa248eb0180b3a200401300191c7e9a1e>i<1308131ca21336a31363a2eb c180a2380180c0a238030060a300067fa2487fa2487fa2487fa3487fa248eb0180140019 1c7e9a1e>94 d<ea7fc012ffeac000b3b3a712400a2e79a114>100 d<eaffc0a21200b3b3a713400a2e7ea114>i<130f1338136013e0ea01c0afea0380ea07 00121e12f8121e1207ea0380ea01c0afea00e013601338130f102d7da117>i<12f8121e 1207ea0380ea01c0afea00e013601338130f1338136013e0ea01c0afea0380ea0700121e 12f8102d7da117>i<12c0b3b3a9022d7ba10d>106 d<12c0a21260a37ea37ea27ea37ea3 7ea26c7ea36c7ea31360a37fa27fa37fa37fa27fa3eb0180a3eb00c01440122d7ea117> 110 d<007fb512e0b6fc00c0c8fcb3a5b612e0a2c9fca7007fb512c0b612e01b247c9c23 >118 d e /fg 16 94 df<12c012e012701218120805057c9311>18 d<120212041208121812101230122012601240a212c0aa1240a212601220123012101218 120812041202071e7d950d>40 d<1280124012201230121012181208120c1204a21206aa 1204a2120c1208121812101230122012401280071e7e950d>i<120fea30c0ea6060a2ea 4020eac030a9ea4020ea6060a2ea30c0ea0f000c137e9211>48 d<120c121c12ec120caf eaffc00a137d9211>i<121fea60c01360eaf07013301260ea0070a2136013c012011380 ea02005aea08101210ea2020ea7fe012ff0c137e9211>i<ea0fc0ea3070ea7038a31200 133013e0ea0fc0ea007013381318131c126012f01318eae038ea6070ea1fc00e137f9211 >i<136013e0a2ea016012021206120c120812101220126012c0eafffcea0060a5ea03fc 0e137f9211>i<ea6060ea7fc01380ea44001240a3124fea70c0ea40e0ea00601370a212 e0a21360ea40e0ea21c0ea1f000c137e9211>i<ea07c0ea0c20ea10701220ea6000a25a 12cfead0c0eae060eac0201330a31240ea6020ea2060ea10c0ea0f000c137e9211>i<12 40ea7ffc13f8ea4010ea80301320ea00401380ea0100a25a12021206a2120ea512040e14 7e9311>i<ea0fc0ea1070ea20181260a21270ea3c30ea3f60ea0f8013e0ea31f0ea6078 eac01c130ca3ea6018ea3030ea0fc00e137f9211>i<120fea3080ea6040ea4060eac020 1330a31240ea6070ea30b0ea0f30120013201360eae0401380ea4100123e0c137e9211> i<387fffe0b512f0c8fca6b512f06c13e0140a7e8b19>61 d<12fca212c0b3a712fca206 1d7e9509>91 d<12fca2120cb3a712fca2061d809509>93 d e /fh 3 106 df80 d101 d105 d e /fi 18 121 df<143c147ceb01fc1307133fb5fca313cfea000fb3b3a7007fb61280 a4213879b730>49 d<eb07fc90387fffc048b512f04814fc3907e01ffe390f8007ff261e 00031380486d13c0007e6d13e0d87f80137f6d14f012ff6deb3ff8a46c5a6c5a6cc7fcc8 fc16f0157f16e0a2edffc016805c16004a5a4a5a5dec0fe04a5a4a5a4ac7fc14fc495a5c 49481378eb078049c7fc131e4914f05b5b4848130148b6fc5a5a5a5a4815e0b7fca42538

7bb730>i<eb03ff011f13f0017f13fc9038fc07fe3901f001ff2603c00013804848eb7f c0d80fe014e07f486c14f07fa46c5a6c4814e06c5ad8008013ff90c713c016804a13005d 4a5a4a5aec1ff090380fffc05d15f090380007feec00ffed7fc016e0ed3ff016f8a2ed1f fca216fea2ea1f80487e487e487ea216fca349eb3ff86c5a49eb7ff0003ec713e0d81fc0 ebffc0260ff80313806cb61200000114fc6c6c13f0010790c7fc27397cb730>i<ed0f80 a2151f153f157f15ffa25c5c5ca25c141e143e5c14785c495a13035c495a495a5b133e13 3c5b5b12015b485a485a120f48c7fc121e5a5a12f8b81280a4c70001eb8000aa0103b612 80a429377db630>i<000c15c0d80f80130701f8137f90b6128016005d5d5d5d15c092c7 fc14fceb1f8090c9fca8eb03fe90381fffe0017f13f89038fc07fc9038e001fe496c7e49 eb7f8090c713c0000e15e0c8123f16f0a316f8a3121f487e487e12ff7fa216f05b5b6cc7 ea7fe0127c003c15c0003eecff806c491300390fc003fe3907f00ffc6cb55a6c14e06c6c 1380d90ff8c7fc25397bb730>i<ec0ff8ecfffe0103ebff8090390ff80fc090391fe003 e090397f8001f09038ff0003484813074848eb0ff8151f485a120f5b001fec0ff0ed07e0 003fec03c092c7fc5b127fa3ec7ff039ffe1fffc01e37f9039e7007f8001eeeb3fc001ec eb1fe001f814f0a249eb0ff8a216fca24914fea4127fa5123fa216fc6c7e16f8120fed1f f06c7e6c6ceb3fe06c6ceb7fc03a00ff81ff8090397ffffe006d5b010f13f00101138027 397cb730>i<ed01e04b7ea24b7ea34b7ea24b7ea34b7ea24b7f157ba203f37f15f10201 8015e00203805d167f020780ed803f020f80ed001fa24a80021e130f023e80023c7fa24a 818202f8814a7fa249b77ea24982a2d907c0c76c7e5c173f010f8291c8121f4982011e15 0fa2013e82013c81017c8301788113fcb500f00103b612c0a4423b7dba49>65 dii<eb3ffe48b512e0000714f8390fe007fc9038f001fe486c6c7e6f 7e82153f6c48806c5a6c5ac8fca491b5fc131f90387ff83f3803ff803807fc00ea0ff048 5a123f485aa2485aa4157f6c7e15df3a3fe0039ff03b1ff80f0fffe03807fffe0001497e 39003fe0002b267da52f>97 d<49b47e010f13f0017f13fc9038ff81fe3a03fe007f80d8 07f8133f4848eb1fc0ed0fe0485a003f15f01507485a16f8a212ffa290b6fca301c0c8fc a4127fa36c7e1678121f7f000f15f06c6c13016c6ceb03e06c6ceb0fc03a00ffc07f8090 393ffffe00010f13f8010013c025267da52c>101 d<13fe12ffa412071203b0edff8002 0313f0020f7f91381e03fc91383801fe02607f4a7e01ff15805c91c7fca35bb3a4b5d8f8 3f13fea42f3c7cbb36>104 d<ea01e0ea07f8487ea2487ea46c5aa26c5aea01e0c8fcab 13fe127fa412071203b3aab512f0a4143d7dbc1a>i110 d<9038fe01ff00ff011f13f0027f13fc9138fc07fe9039ff f001ff00079039c0007f806c90c7ea3fc04915e0ee1ff017f8160f17fca2160717fea917 fc160fa317f8ee1ff0a26dec3fe06eeb7fc06eebff806e4813009039fefc07fe91387fff f8021f13e0da03fec7fc91c9fcadb512f8a42f377da536>112 d<3901fc03f000ffeb0f fc4ab4fc91383c3f80ec707f00079038e0ffc000035bebfd80a201ffeb7f809138003f00 151e92c7fc5bb3a3b512fca422267da528>114 d<130fa55ba45ba25ba25b5a5a5a001f ebfff0b6fca3000190c7fcb3153ca86c14781480017f13f090383fc1e090381fffc06d13 80903801fe001e377eb626>116 d120 d e /fj 74 124 df<91383f03e09138c38470903901878cf0010313989138033860d907001300a3 5d130ea390b6fc90380e00e05ba44a5a1338a549485aa54948c7fca4ebc00e1201140cea 318638798f1838f31e1038620c60383c07c02429829f1c>11 d<ec3fe0ece01090380180 3801031378a290380700301500a3130ea390b512e0eb0e0090381c01c0a4ec03801338a3 ec0700a2137801701310ec0e20a313609038e00640ec038091c7fc5ba21201ea31801279 48c8fc1262123c1d29829f1a>i<91393fc0ff809139e0e38040903a0181e600e00103eb ec01ec80dc903a07001c00c0031813001538a2130ea25d90b7128090390e007003ee0700 5ba215e0160ea25ba24a485aa301701540ee3880ec0380a301e0ec1900ed000e4a90c7fc 13c0140612013831860e38798f0c38f31e1838620c30383c07c02b29829f28>14 d<12c012e0a212701230121812081204a20609739f17>18 d<ea0180ea03c0ea0780ea0f

00121c5a12605a5a0a09719f17>i<121c123e127ea2123a12021204a21208a212101220 12401280070e769f0e>39 d<130113021304130813101320136013c0ea0180a2ea03005a 1206120e120c121c12181238a212301270a21260a212e0a25aad12401260a212207ea27e 102e79a113>i<13107f7f130613021303a37f1480a71303a31400a35ba21306a2130e13 0ca2131c1318133813301370136013e05b485a90c7fc5a12065a5a5a5a1280112e80a113 >i<1330a31320a2381861c0381c678038064e00ea0378ea01e0a2ea07b0ea1c98ea798e eae1860001c7fca25aa3121478a117>i<121c123ca41204a21208a212101220a2124012 80060e7d840e>44 d<ea7ff0eaffe0127f0c037d8a10>i<127012f8a212f012e005057b 840e>i<eb0f80eb30e0ebe070ea01c0380380301438ea0700481378a2120e121e147048 13f0a4387801e0a314c0ea700312f01480130714001270130e5bea30386c5aea0fc0151f 7c9d17>48 d<1302a21306130e133c13dcea031c12001338a41370a413e0a4ea01c0a4ea 0380a41207eafff80f1e7b9d17>i<131feb61c0eb80e0ea010000021370134012041320 380840f0a3eb80e0ea0901000613c038000380eb0700130c5b13605b0003c7fc12044813 405a1480ea2001ea7e033847ff00ea41feea80fc1378141f7c9d17>i<eb1f80eb60e0eb 80703801003000021338ea0440a21320eb407013c038038060c712e0eb01c0eb030013fe 131c130613071480a312301278a238f00f001280ea401e131c5bea30e0ea0f80151f7c9d 17>i<146014e0a3eb01c0a3eb0380a214005ba21306130e130c5ba25ba213635b1387ea 01071203ea060e12041208ea3f8eea607c38801fc038001c00a25ba45ba2136013277e9d 17>i<eb80603801ffc01480ebfe0090c7fc1202a45aa213f8ea050cea0a06ea0c071208 00001380a4eb0f00127012f0130eeae01eea801c5b1330ea4060ea61c0001fc7fc131f7b 9d17>i<eb07c0eb18201330ebe0e0ea01c11381380380c048c7fc5a120e121e1378ea1d 84ea3e061307123c007c13801278a338700f00a212f0130e131eea701c1260ea7038ea30 70ea10c0ea0f80131f7b9d17>i<3804e010ea0bf0000f1320001f1340381e19c038380e 80ea3001386003001240ea8006ea000e130c131c131813385ba213f05b1201a2485aa348 5aa3120f90c7fca21206141f799d17>i<131feb7180ebc0c0ea0180000313e0ea07005a 1301121ea314c0ea1c03a31307eb0f80120cea06373803c700ea000f130ea25b1260eaf0 385beae060ea80c0ea4380003ec7fc131f7b9d17>57 d<1207120f121fa2120e1200aa12 7012f8a212f012e008147b930e>i<001fb512f84814fcc9fca8b612f06c14e01e0c7b90 23>61 d<14021406a2140e141ea2143f142f144f14cf148feb010fa21302a213041308a2 0110138014071320eb3fffeb40071380a2ea0100a2120212061204001e14c039ff807ff8 1d207e9f22>65 d<ecfe02903807818690381c004c49133c136049131c00011418485a48 c7fc5a001e1410a2481400a25aa45aa415801270a2ec01007e140200185b6c13186c1320 380381c0d800fec7fc1f217a9f21>67 d<90b5128090381e00e015701538151c5b150ea3 5ba449131ea44848133ca3157848481370a215e0ec01c0380780031580ec0e005c380f00 70b512c01f1f7d9e22>i<48b512fe39001e001c150c1504a25ba490387804081500a214 0c495aebfff8ebf018a23801e010a3ec001048481320a21540a248481380140115001407 380f001fb512fe1f1f7d9e1f>i<48b512fc39001e003815181508a25ba4491310ec0800 a3495a1430ebfff0ebf0303801e020a44848c7fca4485aa4120feafff81e1f7d9e1e>i< ecfc04903807030c90381c00980130137813e04848133848481330a248c7fc120e001e14 20a2481400a25aa45aecfff0ec0780a2ec0f001270a3141e7e0018133e001c132e6c13cc 38038304d800fcc7fc1e217a9f23>i<9039fff1ffe090391f003e00011e133ca3495ba4 495ba449485a90b5fcebf001a24848485aa44848485aa4484848c7fca4000f5b39fff1ff e0231f7d9e22>i<3801fff038001f00131ea35ba45ba45ba4485aa4485aa4485aa4120f eafff0141f7d9e12>i<90380fff809038007c001478a35ca4495aa4495aa4495aa449c7 fca212301278eaf81ea2485aea8038ea40706c5aea1f8019207d9e18>i<9039fff01fe0 90391f000f80011eeb0e0015085d495b5d4ac7fc1402495a5c5c1430ebf0f0ebf1f8ebf2 7813f448487e13f013e080ea03c0a280a2ea07806e7ea3000f8039fff03ff8231f7d9e23 >i<3801fff8d8001fc7fc131ea35ba45ba45ba4485aa315803903c00100a25c14023807 8006a25c141c380f0078b512f8191f7d9e1d>ii<01ffeb3fe0011feb0f001504eb1780a201275beb23c0a39038 41e010a214f0134001805b1478a348486c5aa3141e00025ca2140fa24891c7fc80a2120c 001c1302eaff80231f7d9e22>i<eb01fceb070790381c01c090383000e001e013604848 1370485a0007143890c7fc120e121e121c123ca2481478a44814f0a215e0140115c01403 00701480ec070000785b0038131e5c6c13706c5b38078380d801fcc7fc1d217a9f23>i< 48b5128039001e00e015701538153c5ba4491378a215f015e09038f003c0ec0f00ebfffc 01f0c7fc485aa4485aa4485aa4120feafff01e1f7d9e1f>i<90b5fc90381e03c0ec00e0 157015785ba44913f0a2ec01e015c09038f00700141eebfff0ebf01c48487e140f801580 3903c00f00a43807801e1508a21510000f130ed8fff01320c7ea03c01d207d9e21>82

d<903807e04090381c18c09038300580eb600313c000011301018013001203a391c7fc7f a213f86cb47e14e06c6c7e131feb01f8eb0078a21438a21220a2143000601370146014e0 00705b38e80380d8c606c7fcea81f81a217d9f1a>i<000fb512fc391e03c03800181418 001014081220eb078012601240a239800f001000001400a3131ea45ba45ba45ba4120138 7fff801e1f799e21>i<393ffc0ff83907c003c09038800100a3380f0002a4001e5ba448 5ba4485ba4485ba35ca200705b49c7fcea3002ea3804ea0c18ea07e01d20779e22>i<39 fff003fc001fc712e06c14c01580ec0100a21402a25c5c138000075b143014205ca25c13 8191c7fc13c2120313c413cc13c813d0a213e05ba25b120190c8fc1e20779e22>i<3bff e1ffc07f803b1f003e001c00001e013c13181610143e021e5b121f6c013e5ba2025e5b14 9e4bc7fc9038011e02a201025ba201045ba201085ba201105b13205d01405ba2d9801fc8 fc80eb000e7e0006130ca2000413082920779e2d>i<eb1fc0a2eb1800a25ba45ba45ba4 485aa448c7fca41206a45aa45aa45aa45aa3127f12fe122d7ea10e>91 d<eb1fc0a21300a2eb0180a4eb0300a41306a45ba45ba45ba45ba45ba4485aa448c7fca3 127f12fe122d82a10e>93 d<120212075aea19801230ea604012c00a07749f17>i<ebf1 80380389c038070780ea0e03121c123c383807001278a3eaf00ea31420eb1c40a2ea703c 135c38308c80380f070013147c9317>97 d<ea0780123fea0700a4120ea45aa213f0ea1d 0cea3a0e123cea380fa21270a4eae01ea3131c133c1338ea607013e0ea31c0ea1f001020 7b9f15>i<137eea01c138030080ea0e07121e001c1300ea3c0248c7fca35aa5ea700113 02ea3004ea1838ea07c011147c9315>i<1478eb03f8eb0070a414e0a4eb01c0a213f1ea 038938070780ea0e03121c123c383807001278a3eaf00ea31420eb1c40a2ea703c135c38 308c80380f070015207c9f17>i<137cea01c2ea0701120e121c123cea3802ea780cea7b f0ea7c0012f0a4127013011302ea3804ea1838ea07c010147c9315>i<1478eb019ceb03 3ca2eb07181400a2130ea5ebffe0eb1c00a45ba55ba55ba5485aa35b1231007bc7fc12f3 1266123c1629829f0e>i<eb1e30eb7138ebe0f03801c070ea03801207eb00e05aa3381e 01c0a4eb0380a2ea0e07130b38061700ea01e7ea0007a2130ea21230ea781c485aea6070 ea3fc0151d7f9315>i<ea01e0120fea01c0a4485aa448c7fca2131e1363380e8180380f 01c0120ea2381c0380a438380700a3eb0e1000701320a2131ceb0c4000e0138038600700 14207d9f17>i<13c0ea01e0a213c0c7fca7120e12131223ea4380ea4700a21287120ea3 5aa3ea38401380a21270ea31001232121c0b1f7c9e0e>i<eb0180eb03c0a2148090c7fc a7133c13461387a2ea0107a2ea020e1200a35ba45ba45ba45ba21230ea79c0eaf1800063 c7fc123c1228829e0e>i<ea01e0120fea01c0a4485aa448c7fca2eb03c0eb0420380e08 e013111321eb40c0381c8000001dc7fc121eea1fc0ea38e01370a2eb384038707080a3eb 310012e0ea601e13207d9f15>i<ea03c0121fea0380a4ea0700a4120ea45aa45aa45aa3 127112e2a4126412380a207c9f0c>i<391c0f80f0392630c318394740640c903880680e eb0070a2008e495a120ea34848485aa3ed70803a3803807100a215e115623970070064d8 3003133821147c9325>i<381c0f80382630c0384740601380eb0070a2008e13e0120ea3 381c01c0a3eb038400381388a2eb0708eb031000701330383001c016147c931a>i<137c ea01c338030180000e13c0121e001c13e0123c1278a338f003c0a3eb07801400ea700f13 0eea3018ea1870ea07c013147c9317>i<3801c1e0380262183804741c1378eb701ea2ea 08e01200a33801c03ca3143838038078147014e0ebc1c038072380eb1e0090c7fca2120e a45aa2b47e171d809317>i<ebf040380388c038070580ea0e03121c123c383807001278 a3eaf00ea45ba2ea703c135cea30b8ea0f381200a25ba45ba2ea0ffe121d7c9315>i<ea 1c1eea266138278380ea47871307eb0300008ec7fc120ea35aa45aa45a123011147c9313 >i<13fcea0302ea0601ea0c03130713061300ea0f8013f0ea07f8ea03fcea003e130e12 70eaf00ca2eae008ea4010ea2060ea1f8010147d9313>i<ea018013c0ea0380a4ea0700 a2eafff0ea0700120ea45aa45aa31320ea7040a21380a2ea3100121e0c1c7c9b0f>i<00 0e13c0001313e0382301c0ea4381ea4701a238870380120ea3381c0700a31410eb0e2012 18a2381c1e40ea0c263807c38014147c9318>i<380e0380ea1307002313c0ea4383ea47 01130000871380120ea3381c0100a31302a25ba25bea0e30ea03c012147c9315>i<000e ebc1c0001313e3392301c3e0384381c1384701c015603987038040120ea3391c070080a3 ec0100a21306eb0f02000c5b380e13083803e1f01b147c931e>i<38038380380cc44038 1068e013711220eb70c03840e0001200a3485aa314403863808012f3eb810012e5ea84c6 ea787813147d9315>i<000e13c0001313e0382301c0ea4381ea4701a238870380120ea3 381c0700a4130e1218a2ea1c1eea0c3cea07dcea001ca25b12f05beae060485aea438000 3ec7fc131d7c9316>i<3801c0403803e080ea07f1380c1f00ea0802c65a5b5b5b5b5b48 c7fc1202485aea08021210ea3e0cea63fcea41f8ea80e012147d9313>ii e /fk 79 125 df<127012f8b012701200a5127012f8a31270051c779b18>33 d<ea4010eae038eaf078eae038aaea60300d0e7b9c18>i<13c01201a3ea03f0ea0ffcea 3ffeea7dcfea71c738e1c38013c7a338f1c0001279123f6c7eea0ff8ea01fc13de13cf13 c73861c38012f1a212e1ebc7001271ea79deea3ffeea1ff8ea07e0ea01c0a3120011247d

9f18>36 d<ea01c0ea07e0487eea0e70487ea4eb73f813f313e3380fc1c0ebc380138313 03381f0700ea3f87ea7b8eea71ceeae1fc12e0137ceb7870a2ea70fe387fffe0ea3fc738 0f03c0151c7f9b18>38 d<1238127ca2127e123e120ea3121ca2123812f812f012c0070e 789b18>i<137013f0ea01e0ea03c0ea0780ea0f00121e121c5aa25aa45aa81270a47ea2 7e121e7eea0780ea03c0ea01f0120013700c24799f18>i<126012f012787e7e7eea0780 1203ea01c0a2ea00e0a41370a813e0a4ea01c0a2ea03801207ea0f00121e5a5a5a12600c 247c9f18>i<ea01c0a4ea41c138f1c780eafddf387fff00ea1ffcea07f0a2ea1ffcea7f ff38fddf80eaf1c73841c100ea01c0a411147d9718>i<136013f0a7387fffc0b512e0a2 6c13c03800f000a7136013147e9718>i<121c123e127e127f123f121f1207120e121e12 7c12f81260080c788518>i<387fffc0b512e0a26c13c013047e8f18>i<1230127812fca2 127812300606778518>i<1303eb0780a2130f14005b131ea2133e133c137c1378a213f8 5b12015b12035ba212075b120f90c7fca25a121e123e123ca2127c127812f85aa2126011 247d9f18>i<ea01f0ea07fc487eea1f1fea1c0738380380007813c0ea7001a238e000e0 a9eaf001007013c0a2ea780300381380381c0700ea1f1fea0ffe6c5aea01f0131c7e9b18 >i<ea01801203a21207120f123f12ff12fb12431203b0ea7ffceafffeea7ffc0f1c7b9b 18>i<ea03f0ea0ffeea3fff387c0f80387003c0eae00138f000e0a21260c7fca2eb01c0 a21303eb0780eb0f00131e5b5b5b485aea07c0485a381e00e05aea7fffb5fc7e131c7e9b 18>i<ea07f8ea1ffe487e38780780eb03c0130112301200eb0380a2eb0f00ea03ff5b7f 38000780eb03c01301eb00e0a312f0a2eb01c01303387c0780383fff006c5aea03f8131c 7e9b18>i<131f5b1377a213e7120113c7ea038712071307120e121e123c1238127812f0 b512f8a338000700a6eb7ff0a3151c7f9b18>i<383fff80a30038c7fca8ea3bf8ea3ffe 7f383c0780383003c0ea0001eb00e0a2126012f0a238e001c0ea7003387c0f80383fff00 ea1ffcea03f0131c7e9b18>i<137e48b4fc00071380380f83c0ea1e03121c3838018090 c7fc5aa2eae1f8eae7feb5fc38fe078038f803c0eaf001eb00e05a7e1270a3383801c0ea 3c03381e0780380fff006c5aea01f8131c7e9b18>i<1230127812fca2127812301200a8 1230127812fca2127812300614779318>58 d<1218123c127ea2123c12181200a8121812 3c127ea2123e121e120e121c123c127812f01260071a789318>i<14c0eb03e01307eb1f c0eb3f80ebfe00485aea07f0485aea3f8048c7fc12fca2127f6c7eea0fe06c7eea01fc6c 7eeb3f80eb1fc0eb07e01303eb00c013187e9918>i<387fffc0b512e0a3c8fca4b512e0 a36c13c0130c7e9318>i<126012f87e127f6c7eea0fe06c7eea01fc6c7eeb3f80eb1fc0 eb07e0a2eb1fc0eb3f80ebfe00485aea07f0485aea3f8048c7fc12fc5a126013187e9918 >i<137013f8a213d8a2ea01dca3138cea038ea4ea0707a5380fff80a3ea0e03381c01c0 a3387f07f000ff13f8007f13f0151c7f9b18>65 d<ea7ffcb5fc6c1380381c03c01301eb 00e0a4130114c01307381fff80140014c0ea1c03eb00e014f01470a414f014e01303387f ffc0b51280387ffe00141c7f9b18>i<ebf8e0ea03feea07ffea0f07ea1e03ea3c01ea38 005aa214005aa8127014e0a27e123c381e01c0ea0f073807ff803803fe00ea00f8131c7e 9b18>i<ea7ff8eafffe6c7e381c0f80eb03c0a2eb01e01300a214f01470a814f014e0a2 130114c01303eb0f80387fff00485aea7ff8141c7f9b18>iii<3801f1c0 ea03fdea0fffea1f0fea1c03123813011270a290c7fc5aa5eb0ff0131f130f387001c0a2 13031238a2ea1c07ea1f0fea0fffea03fdea01f1141c7e9b18>i<387f07f038ff8ff838 7f07f0381c01c0a9ea1fffa3ea1c01aa387f07f038ff8ff8387f07f0151c7f9b18>i<ea 7fffb512806c1300ea01c0b3a4ea7fffb512806c1300111c7d9b18>i<eaffc0a3001cc7 fcb114e0a5b5fca3131c7e9b18>76 d<38fc01f8eafe03a2383b06e0a4138ea2ea398ca2 13dca3ea38d8a213f81370a21300a638fe03f8a3151c7f9b18>i<387e07f038ff0ff838 7f07f0381d81c0a313c1121ca213e1a313611371a213311339a31319a2131d130da3ea7f 07eaff87ea7f03151c7f9b18>i<ea0ffe383fff804813c0ea7803ea700100f013e0eae0 00b0eaf001007013c0ea7c07ea7fff6c1380380ffe00131c7e9b18>i<eafffeebff8014 c0ea1c03eb01e013001470a514e01301eb03c0ea1fff1480ebfe00001cc7fca8b47ea314 1c7f9b18>i<ea0ffe383fff804813c0ea7803ea700100f013e0eae000ae1370a2eaf079 387039c0ea783fea7fff6c1380380ffe00ea000feb0780a2eb03c01301a213227e9b18> i<ea7ff8eafffe6c7e381c0f80130314c01301a313031480130f381fff005ba2ea1c0f7f eb0380a5149ca3387f01f8eaff81387f00f0161c7f9b18>i<3803f1c0ea1fff5aea7c0f ea7003eae001a390c7fc12701278123fea1ff0ea07fec67eeb0f80eb03c01301eb00e0a2 126012e0130100f013c038f80780b5fcebfe00eae7f8131c7e9b18>i<387ffff8b5fca2 38e07038a400001300b2ea07ffa3151c7f9b18>i<38ff83fea3381c0070b36c13e0ea0f 01380783c03803ff806c1300ea007c171c809b18>i<38fe03f8eaff07eafe03383c01e0 001c13c0a3ea1e03000e1380a438070700a4ea038ea4ea018c13dca3ea00d813f8a21370 151c7f9b18>i<38fe03f8a338700070a36c13e0a513f8ea39fc13dca2001913c0a3138c

a2ea1d8da31305000d1380ea0f07a2ea0e03151c7f9b18>i<387f0fe0139f130f380e07 00120fea070e138eea039c13dcea01f8a212005b137013f07f487e13dcea039e138eea07 0f7f000e13801303001e13c0387f07f000ff13f8007f13f0151c7f9b18>i<38fe03f8ea ff07eafe03381c01c0ea1e03000e1380ea0f0700071300a2ea038ea2ea01dca3ea00f8a2 1370a9ea01fc487e6c5a151c7f9b18>i<383fffe05aa2387001c01303eb07801400c65a 131e131c133c5b137013f0485a5b1203485a90c7fc5a001e13e0121c123c5a1270b5fca3 131c7e9b18>i<eafff8a3eae000b3aceafff8a30d24779f18>i<eafff8a3ea0038b3acea fff8a30d247f9f18>93 d<387fffc0b512e0a26c13c013047e7f18>95 d<ea0ff0ea1ffc487eea3c0fea180738000380a213ff1207121fea7f03127812e0a3eaf0 07ea780f383ffff8ea1ffdea07f015147e9318>97 d<127e12fe127e120ea5133eebff80 000f13c0ebc1e01380eb0070120e1438a6000f1370a2eb80e013c1ebffc0000e13803806 3e00151c809b18>i<ea01feea07ff001f1380ea3e073838030048c7fca25aa61270eb01 c01238ea3e03381fff8000071300ea01fc12147d9318>i<eb1f80133f131f1303a5ea03 e3ea0ffbea1fffea3c1fea380fea7007130312e0a6ea7007a2ea380fea3c1f381ffff038 0ffbf83803e3f0151c7e9b18>i<ea01f0ea07fcea1ffeea3e0f38380780ea7003a238e0 01c0a2b5fca300e0c7fc1270eb01c01238ea3e07381fff8000071300ea01f812147d9318 >i<eb1f80eb7fc0ebffe013e13801c0c01400a3387fffc0b5fca23801c000aeea7fffa3 131c7f9b18>i<3801e1f03807fff85a381e1e30381c0e00487ea5ea1c0eea1e1eea1ffc 5bea39e00038c7fc7eea1ffeebffc04813e0387801f038700070481338a4007813f0ea7e 03381fffc06c13803801fc00151f7f9318>i<127e12fe127e120ea5133eebff80000f13 c013c1eb80e01300120eab387fc7fc38ffe7fe387fc7fc171c809b18>i<ea0380ea07c0 a3ea0380c7fca4ea7fc012ff127f1201aeb5fca3101d7c9c18>i<1338137ca313381300 a4ea0ffca3ea001cb3a4ea6038eaf078eafff0ea7fe0ea3f800e277e9c18>i<127e12fe 127e120ea5eb3ff0a3eb0780eb0f00131e5b5b5bea0ff87f139c130eea0e0f7feb038014 c0387fc7f812ff127f151c7f9b18>i<eaffc0a31201b3a4b51280a3111c7d9b18>i<38f9 c1c038fff7f013ff383e3e38ea3c3ca2ea3838ab38fe3e3eeb7e7eeb3e3e1714809318> i<ea7e3e38feff80007f13c0ea0fc1eb80e01300120eab387fc7fc38ffe7fe387fc7fc17 14809318>i<ea01f0ea0ffe487e383e0f80ea3803387001c0a238e000e0a5eaf0010070 13c0ea7803383c0780ea3e0f381fff006c5aea01f013147e9318>i<ea7e3e38feff8000 7f13c0380fc1e01380eb0070120e1438a6000f1370a2eb80e013c1ebffc0000e1380eb3e 0090c7fca7ea7fc0487e6c5a151e809318>i<3801f380ea07fbea1fffea3e1fea380fea 7007a2eae003a6ea7007a2ea380fea3c1fea1fffea0ffbea03e3ea0003a7eb1ff0eb3ff8 eb1ff0151e7e9318>i<38ff0fc0eb3fe0eb7ff0ea07f0ebe060ebc0005ba290c7fca9ea fffc7f5b14147e9318>i<ea07f7ea3fff5aea780feae007a3007cc7fcea7fe0ea1ffcea 03feea001f38600780eae003a212f038f80f00b5fc13fceae7f011147d9318>i<487e12 03a4387fffc0b5fca238038000a9144014e0a33801c1c013ff6c1380eb3e0013197f9818 >i<387e07e0eafe0fea7e07ea0e00ac1301ea0f033807fffc6c13fe3801fcfc17148093 18>i<387f8ff000ff13f8007f13f0381c01c0380e0380a338070700a3138fea038ea3ea 01dca3ea00f8a2137015147f9318>i<38ff07f8138f1307383800e0a4381c01c0137113 f9a213d9ea1ddd000d1380a3138dea0f8fa23807070015147f9318>i<387f8ff0139f13 8f380f0700ea078eea039eea01dc13f81200137013f07fea01dcea039e138eea0707000e 1380387f8ff000ff13f8007f13f015147f9318>i<387f8ff000ff13f8007f13f0380e01 c0eb0380a21207eb0700a2ea0387a2138eea01cea213cc120013dc1378a31370a313f05b 1279ea7bc0ea7f806cc7fc121e151e7f9318>i<383ffff05aa2387001e0eb03c0eb0780 38000f00131e5b13f8485aea03c0485a380f0070121e5a5ab512f0a314147f9318>i<12 6012f0b3b012600424769f18>124 d e /fl 38 89 df<12e0a212f012781238121c120c 12060708769f17>18 d<ea018012031207ea0e005a5a12605a0908739f17>i<1238127c a2127e123a1204a31208a21210122012401280070e789f0d>39 d<eafff0a20c027e8a0f >45 d<1230127812f81278127005057c840d>i<137eea01c338030180000713c0ea0e00 14e05aa2ea3c0112381278a538f003c0a51480130712e01400a2130e1260ea701cea3038 ea3870ea0fc0131f7c9d17>48 d<13181338ea01f8ea0e701200a513e0a6ea01c0a6ea03 80a6ea07001380eafffc0e1e7b9d17>i<eb3f80ebc1e038010070000213785aa2000f13 7c1380a2eb00781206c712f814f0eb01e014c0eb0380eb0700130e5b5b13605b485a3803 00201206000813405a383fffc0481380b5fc161e7e9d17>i<137f380183c0380201e0ea 0400000713f05a1301a2000013e0a2eb03c0eb07801400131cea01f8ea000e7f148014c0 130313071230127812f8a200f0138038800f00ea400e6c5aea1078ea0fe0141f7d9d17> i<1460a214e0eb01c013031305130d13091311eb2380134313c31383ea01031202380407 0012081218121012201240b512f038000e00a55b131e3801ffc0141e7e9d17>i<380180 303803ffe014c0140013fc0002c7fca25aa4137cea0587380a0380ea0c01000813c01200 14e0a4387003c012f812f000e01380ea800700401300130e6c5aea1070ea0fc0141f7d9d

17>i<eb1f80eb7040ebc020380180e0ea03011207380e00c0001e1300121c123c1238ea 78f8ea790eea7a07ea7c0300f81380a200f013c0a4eb078012e0a214005bea600eea701c ea3018ea1870ea07c0131f7c9d17>i<1220383ffff04813e014c03840008038c0010012 801302485a5b5b5ba25b13c0485aa2120390c7fc5aa25a120ea2121ea35aa31218141f7a 9d17>i<133febc1c03801006000021320481330120ca3000e1360a2380f80c0ebc18038 07f600ea03fc120113ff38063f80ea0c1f381007c0ea3003ea600113005aa31480eb0100 ea6003ea3004ea1818ea07e0141f7d9d17>i<137eea01c338030180000613c0120eea1c 00003c13e0a213011278a41303a2003813c01307ea1c0bea0c133803e380ea0007a21400 5bea600eeaf01c1318485aea8060ea41c0003fc7fc131f7c9d17>i<120e121fa2121e12 0c1200aa1230127812f81278127008147c930d>i<1408140c141c143ca2147c147e149e a2eb011ea21302801304a21308a20110138014071320a2eb7fff90384007c0eb8003a2ea 0100a21202ec01e01206001f130339ff801ffe1f207f9f22>65 d<0007b5fc3900f803c0 90387801e0ec00f04913f8a515f03801e001ec03e015c0ec0f809038fffe009038e00f80 3903c003c0ec01e015f0a21400a2485a1401a215e01403ec07c0390f000f80ec3e00b512 f01d1f7e9e20>i<ecfe02903807018690381c004e0170133e49131e4848131c4848130c 120748c7fc5a121e003e1408003c1400127ca45aa4127815101520a27e1540001c14806c eb01006c13023803800c3800e030eb3fc01f217c9f21>i<0007b57e3900f801e0903878 007081497f151e150e150fa348481480a6484814005da3151e153e4848133c5da25d4a5a 4a5a260f000fc7fc143cb512f0211f7e9e23>i<0007b512fc3900f8007c0178131c150c 5b1504a414043901e00800a31438ebfff8ebe0383803c010a4ec00081510485aa21520a2 156015c0380f00011407b612801e1f7e9e1f>i<0007b512f83900f80078017813381518 5b1508a53901e00800a314181438ebfff83803c0301410a491c7fc485aa648c8fc7feaff fc1d1f7e9e1e>i<ecfe02903807018690381c004e0170133e49131e4848131c4848130c 120748c7fc5a121e003e1408003c1400127ca45aa2ec3ffeec01f000781300a2ec01e0a2 7ea2121c6c13036ceb05c0380380083900e0304090383fc0001f217c9f24>i<3a07ff83 ffc03a00f8007c000178133ca2495ba648485ba490b5fcebe0004848485aa64848485aa6 4848485a01807f39fff07ff8221f7e9e22>i<3807ff803800f8001378a25ba6485aa648 5aa6485aa648c7fc7feafff0111f7e9e10>i<eb7ffceb03e01301a2eb03c0a6eb0780a6 eb0f00a6131e1230127812f8131ceaf03cea8038ea40706c5aea1f8016207e9e17>i<38 07ffe0d800fcc7fc1378a25ba6485aa6485aa41580ec0100ea0780a25c14021406140e38 0f001e147cb512fc191f7e9e1c>76 dii<eb01fceb0e0790383801c090387000e0484813f0 48481378485a153c48c7fc5a001e143e123e123c127ca448147ca3157815f81278ec01f0 007c14e01403003c14c0001ceb0780001eeb0f006c131e380780383801c0e038007f801f 217c9f23>i<0007b5fc3900f803c090387800f015785b157ca41578484813f815f0ec01 e0ec03c0ec0f00ebfffcd803c0c7fca6485aa648c8fc7feafff81e1f7e9e1f>i<eb01fc eb0e0790383803c090387001e03901e000f048481378485a153c48c7fc5a001e143e123e 123c127ca448147ca3157815f8127815f0ec01e0ea7c0f393c1083c0391c204780001eeb 4f00380f405e3807a0783901e0e010ea007f9038006030ec702015e0147f15c0ec3f80a2 ec1e001f297c9f23>i<3807fffe3900f8078090387801e0ec00f05b15f8a415f03801e0 0115e0ec03c0ec0780ec1e00ebfff03803c03880141e140ea2140f48485aa51502d80f00 1304eb800f39fff00788c7ea01f01f207e9e21>i<eb1f82eb7066ebc01e3801800eea03 0048130c00061304120ea3000f1300a27fea07f013ff6c13c06c13e038003ff0eb03f813 001478143ca200401338a3143000601370146000f013c038e8018038c60300ea81fc1721 7e9f19>i<003fb512f0383c078000301430126039400f0010a212c01280a3d8001e1300 a65ba65ba65b7f383fffe01c1f7a9e21>i<39fff00ff8391f0003e06ceb01801400001e eb0100a6481302a6485ba600705ba25ca200785b1238001813c06c48c7fcea0706ea01f8 1d20799e22>i<39fff001fe391f8000f86cc712601540a215807f0007eb0100a2140214 06ebc00400035ba25ca26c6c5aa25ca26d5a120001f1c7fc13f2a213fc137c1378a21370 a213201f207a9e22>i<3a03ffc0ffc03a007f003e00013c1318013e1310011e5b011f5b 6d5b0281c7fceb078314c2eb03c414e8eb01f0a2130080a2eb017ceb023ceb043eeb0c1e eb081f497e132001407feb8007000180eb0003000780391f8007f039ffc01ffe221f7f9e 22>88 d e /fm 48 127 df<137eea01c33903018080380e00c0001e13e0001cebe10012 3c5a14e214e45a14e814f0a25c1270eb016038300671381818323807e01c19147e931d> 11 d<14f8eb03061304eb080313101320eb4007a2138014063801000e140ceb07f8eb04 70380207d8eb001ca2141e5aa448133ca3147800181370001413f014e0381201c0382187

00ea207c90c7fca25aa45aa318297f9f1a>i<1207ea01c07f12007f1370a213781338a2 133c131ca2131e130ea2130f7f131feb3780136313c3380183c0ea0381ea0701000e13e0 ea1c005a48137012f048137848133815207d9f1b>21 d<eb7ffeea01ff1207380f0780ea 1e03381c01c012381270a338e00380a3eb0700a2130eea600c6c5aea1860ea0f8017147e 931a>27 d<127012f8a3127005057c840d>58 d<127012f012f8a212781208a31210a312 20a21240050e7c840d>i<ec01c0ec0780ec1e001478eb01e0eb0780010ec7fc133813f0 ea03c0000fc8fc123c12f0a2123c120fea03c0ea00f01338130e6d7eeb01e0eb0078141e ec0780ec01c01a1a7c9723>i<12e01278121eea0780ea01e0ea0078131c1307eb03c0eb 00f0143c140fec03c0a2ec0f00143c14f0eb03c049c7fc131c1378ea01e0ea0780001ec8 fc127812e01a1a7c9723>62 d<14021406140ea2141e141f142f146f144f148fa2eb010f 1303130201041380a2eb0807131813101320a2eb7fffeb8007a2d8010013c0140312025a a2120c003c1307b4eb3ffc1e207e9f22>65 d<48b512e039001e0078153c151c151e5ba4 49133ca2157815f09038f003c090b512009038f007c0ec00e0484813f01578a3485aa315 70484813f0ec01e0ec03c0ec0780390f001e00b512f01f1f7e9e22>i<027f1380903803 c0c190390e0023000138131749130f5b48481306485a48c7fc5a000e1404121e4891c7fc a25aa45aa400701420a35d6c5ca26c49c7fc6c13066c13183801c06038007f8021217f9f 21>i<48b512e039001e0038150e81a249eb0380a2ed01c0a25ba4491303a44848eb0780 a216005d4848130e151e151c5d48485b5d4a5a0207c7fc380f001cb512f0221f7e9e26> i<48b612803a001e000f001503a2815ba4903878020292c7fca21406495aebfffcebf00c a23801e008a3ec000448485ba25da248485b15601540ec01c0380f0007b65a211f7e9e22 >i<48b6fc39001e001e1506a215025ba4491304ec0200a3495a140cebfffcebf00c3801 e008a44848c7fca4485aa4120feafffc201f7e9e1d>i<027f1380903803c0c190390e00 23000138131749130f5b48481306485a48c7fc5a000e1404121e4891c7fca25aa45aec3f feec00f0a20070495aa46c495aa26c13076c13056ceb19803801c06026007f80c7fc2121 7f9f24>i<3a01fff0fff83a001f000f80011e1400a349131ea4495ba4495b90b512f890 38f00078a248485ba44848485aa44848485aa4000f130739fff87ffc251f7e9e26>i<48 b4eb1ff8d8001feb03c091388001001317a2903823c002a2eb21e0a2903841f0041340a2 147801805b147c143ca248486c5aa2140fa2000214a01407a2ec03e0485ca21401120c00 1e6d5aeaffc0251f7e9e25>78 d<48b512e039001e0078151c150e150f5ba449131ea215 3c15784913e0ec03c09038fffe0001f0c7fc485aa4485aa4485aa4120feafff8201f7e9e 1d>80 d<903803f04090380c08c09038300580eb600313c000011301018013001203a391 c7fc7f7f13fc3801ffc06c13f06d7e131feb01fceb007c143c141ca21220a21418006013 381430147000705b38e80180d8c603c7fcea81fc1a217e9f1c>83 d<39fff001ff390f80007890c712301520154015807f0007eb01005c14025ca25c6d5aa2 00035b146014405ca201c1c7fc13e2120113e413e8a213f0a25b5b12005b20207e9e1b> 86 d<3bfff03ffc0ff83b1f8007c003c0d80f00903880018017001602140f5e14176f5a 14235e0243133002c3132002835beb81035eea078203c1c7fc138415c2018813c4139015 c813a015f0ebc0015d13805d01005b120692c8fc2d207e9e2b>i<9039fff01ff890390f c007809138800600010713046e5a5d01035b6e5a010113c0ecf18002f3c7fceb00f214fc 1478147ca314beeb011eeb021f1304eb0c0f01187feb100701207f1340eb8003d801007f 00071301001f497e39ffc01ffe251f7f9e26>i<ebf180380389c038070780ea0e03121c 123c383807001278a3eaf00ea31410eb1c20a2ea703ceb5c40ea308c380f078014147e93 18>97 d<ea0780123fea0700a4120ea45aa213f0ea1d0cea3a0e123cea380fa21270a4ea e01ea3131c133c1338ea607013e0ea31c0ea1f0010207e9f14>i<137cea01c338070080 ea0e07121e001c1300ea3c0248c7fca35aa5ea70011302ea3004ea1838ea0fc011147e93 14>i<1478eb03f8eb0070a414e0a4eb01c0a213f1ea038938070780ea0e03121c123c38 3807001278a3eaf00ea31410eb1c20a2ea703ceb5c40ea308c380f078015207e9f18>i< 137cea0182ea0701120e121c123cea3802ea780cea7bf0ea7c0012f0a4127013011302ea 3004ea1838ea0fc010147e9315>i<147c14ceeb019e1303140ceb0700a4130ea3ebfff0 eb0e00a25ba55ba55ba55ba45b1201ea3180127948c7fc1262123c17297e9f16>i<eb1e 30eb7138ebe0f03801c070ea03801207eb00e05aa3381e01c0a4eb0380a2ea0e07130b38 061700ea01e7ea0007a2130ea21230ea781c485aea6070ea3fc0151d809316>i<ea01e0 120fea01c0a4485aa448c7fca2131feb6180380e80c0ea0f00000e13e0a2381c01c0a438 380380a3eb070400701308130e1410130600e01320386003c016207e9f1a>i<13e01201 a2ea00c01300a7120e1213ea23801243a3ea87001207a2120ea25aa21320ea3840a31380 ea1900120e0b1f7e9e10>i<14c0eb01e0a214c090c7fca7131e1323eb43801383ea0103 a2380207001200a3130ea45ba45ba45ba21230ea78e0eaf1c0ea6380003ec7fc1328819e 13>i<ea01e0120fea01c0a4485aa448c7fca2eb01e0eb0610380e0870eb10f013201460 381c4000ea1d80001ec7fcea1fc0ea38707fa2eb1c2038703840a3eb188012e038600f00 14207e9f18>i<ea01c0121fea0380a4ea0700a4120ea45aa45aa45aa3127112e2a41264

12380a207e9f0e>i<391e07c07c39231861869038a032033843c034d980381380a23a87 007007001207a3000eebe00ea3ed1c10261c01c01320153816401518263803801380d818 01eb0f0024147e9328>i<381e0780382318c0eba0603843c0701380a2388700e01207a3 380e01c0a3eb0382001c1384eb07041408130300381310381801e017147e931b>i<137c ea01c338030180000e13c0121e001c13e0123c1278a338f003c0a3eb07801400ea700f13 0eea3018ea1870ea07c013147e9316>i<3803c1e038046218eb741cea0878eb701ea2ea 10e01200a33801c03ca3143838038078147014e0ebc1c038072380eb1e0090c7fca2120e a45aa2eaffc0171d819317>i<ebf040380388c038070580ea0e03121c123c3838070012 78a3eaf00ea45ba2ea703c135cea30b8ea0f381200a25ba45ba2ea0ffc121d7e9314>i< ea1c1eea26213847438013871307eb0300008ec7fc120ea35aa45aa45a123011147e9315 >i<13fcea030338060080ea0c0113031400000ec7fcea0f8013f86c7eea01feea001f13 071270eaf006a2eae004ea4008ea2030ea1fc011147e9315>i<ea018013c0ea0380a4ea 0700a2eafff8ea0700120ea45aa45aa31310ea7020a213401380ea3100121e0d1c7f9b10 >i<381e01c0ea230314e0ea438113000047136000871340120ea3481380a3eb0100a213 025b120cea0e18ea03e013147e9316>118 d<000feb607039118070f00021ebe0f801c0 137800411438d843801318398381c010ea0701a3390e038020a31540a2158013070006eb 8100380709c23801f07c1d147e9321>i<3803c1c0380c622038103470eb38f012201460 384070001200a35ba314203861c04012f1148012e238446300ea383c14147e931a>i<00 1e13600023137014e0ea438013001247388701c0120ea3381c0380a4eb07001218121c5b ea0c3eea03ceea000ea25beaf0181338485aeac060ea41c0003fc7fc141d7e9316>i<38 01c0203803f0403807f8c0380c1f8038080100ea00025b5b5b13605b48c7fc1202481380 38080100485aea3f06ea63feea40fcea807013147e9315>i<eb0180a2eb00c0b512e0a2 38000180eb030013061308779f17>126 d e /fn 30 122 df<eafff8a20d027f8a11> 45 d<127012f8a3127005057b840f>i<80497ea3497ea3eb04f0a2497e1478a2497ea2eb 303eeb201ea2497ea390b57eeb8007000180eb0003a200026d7ea3486d7e120e001f497e 3affc00fff8021207e9f25>65 d<90380fe0109038381c309038e002703803c001390780 00f048c71270121e15305a1510127c127800f81400a91278007c1410123ca26c1420a27e 6c6c13406c6c13803900e00300eb380ceb0ff01c217c9f24>67 d69 di<39fff07ff8390f0007 80ad90b5fceb0007af39fff07ff81d1f7c9e25>72 d<eafff0ea0f00b3abeafff00c1f7d 9e12>i77 di<eb1fe0eb70383801c00e48487e39070003804814c0001eeb01e048eb 00f0a2007c14f8a20078147800f8147ca900781478007c14f8a2003c14f0003e1301001e 14e06ceb03c06c148039038007003801e01e38007038eb1fe01e217c9f26>ii<3803f020380c0c60381803e0ea30005a146012e01420a36c 13007e127cea7f80ea3ffc6cb4fc00071380000113c038000fe013031301eb00f014707e a46c136014e06c13c038f8018038c60300ea81fc14217c9f1c>83 d<007fb512f839780780780060141800401408a200c0140c00801404a400001400b3497e 0003b5fc1e1f7d9e24>i<39fff00ff8390f0003e0ec0080b3a46ceb0100138012031402 6c6c5a6c6c5aeb3830eb0fc01d207c9e25>ii<1318a2133ca3 134ea213cf1387a238010380a2000313c0ea0201a23807ffe0ea0400a2481370a2001813 380038137838fe01ff18177f961c>97 d<eafffe381c0780eb03c0130114e0a4eb03c014 80381fff001480381c01c014e0eb00f0a5eb01e0a2eb0380b5120014177e961a>i101 d<eb7e083803819838070078000c1338001c13 185a00781308127000f01300a5eb03feeb00381270127812387e120c1207380380d83800 7f0817177e961d>103 d<38ff87fc381c00e0aaea1fffea1c00aa38ff87fc16177e961c> i<eaff80ea1c00b3a3eaff8009177e960e>i<eaffc0001cc7fcad1440a314c0a2148013 011307b5fc12177e9617>108 d<00fceb07f0001c1480a20016130ba200131313a33811 8023a23810c043a3eb6083a2eb3103a3131aa2130c123800feeb1ff01c177e9622>i<38 fc01fc381e007014201217ea1380a2ea11c0ea10e0a213701338a2131c130e1307a2eb03 a0eb01e0a213001460123800fe132016177e961c>i<eafffcea1c07eb03c0130114e0a4

14c01303eb0700ea1ffc001cc7fcaab47e13177e9619>112 d<eafffcea1c07eb0380eb 01c014e0a414c0eb0380eb0700ea1ffcea1c0c13077f1480a214c0a214c214e2eb01e438 ff807817177e961b>114 d<ea0fc4ea302cea601cea400ceac004a3eae0001270127fea 3fe0ea0ff8ea01fcea001c130e13061280a3eac004eae008ead810ea87e00f177e9615> i<387ffffc3870381c00401304a200c0130600801302a300001300ae3803ff8017177f96 1b>i121 d e /fo 52 121 df<90380ff07f90397ff9ff809039f83fc7c03901e07f8f0003140fea07c091383f 07806ec7fca5b612f8a22607c01fc7fcb0393ff8fff0a22220809f1f>11 d<eb0fe0eb7ff8ebf81c3801e07c1203ea07c0a2143891c7fca3ebc1feb5fca23807c03e b0393ff9ffc0a21a20809f1d>i<90390ff01fc090397ff8fff09039f81fe0783a01e03f 80f80003137fd807c01300a26e13706e90c7fca3ed03fcb7fca23a07c01f007cb03b3ff8 ffe3ff80a22920809f2c>14 d<12f012f8a212fc127e121e120f120708087a9f1a>18 d<120f121fa2123f127e127812f012e00808759f1a>i<1238127c12fe12ffa2127f123b 1203a21206a2120e120c12181230122008107c9f0f>39 d<1330136013c0ea01801203ea 07005a120e121e121c123ca212381278a412f85aa97e1278a41238123ca2121c121e120e 120f7eea03801201ea00c0136013300c2d7ca114>i<12c012607e7e121c7e120f7e1380 120313c0a2120113e0a413f01200a9120113e0a413c01203a21380120713005a120e5a12 185a5a5a0c2d7da114>i<eafff0a40c047f8b11>45 d<ea01fcea07ff381f07c0ea1e03 003e13e0387c01f0a300fc13f8ad007c13f0a3383e03e0001e13c0ea1f8f3807ff00ea01 fc151d7e9c1a>48 d<137013f0120712ff12f91201b3a4387fffc0a2121d7d9c1a>i<ea 03fc381fff8038381fc0387c07e038fe03f0a214f81301127c1238ea000314f0a2eb07e0 eb0fc01400131e5b13705b3801c018ea0380ea0600481338381ffff05a5ab5fca2151d7e 9c1a>i<ea03fc380fff80381c0fc0383c07e0387e03f0a31307003c13e01200eb0fc0eb 3f803803fe005b38000f80eb07c0eb03e014f014f81238127c12fea214f012fc387807e0 383c0fc0381fff803803fc00151d7e9c1a>i<eb01c013031307a2130f131f133b137313 6313c3ea01831203ea0703120e120c12181238127012e0b512fea2380007c0a6ebfffea2 171d7f9c1a>i<001c13e0ea1fff14c01480140013fc13c00018c7fca4ea19fe381fff80 381e07c0381803e0381001f0120014f8a2127812fca314f0ea7803007013e0383c0fc038 0fff00ea03fc151d7e9c1a>i<133f3801ffc03807c0e0ea0f81381f03f0121e123e127c eb01e090c7fceafc1013ff00fd13c0eb03e038fe01f0a200fc13f8a4127ca3003c13f012 3e381e03e0380f07c03807ff803801fe00151d7e9c1a>i<1260387ffff8a214f014e014 c038e0018038c00300a21306c65a5b13381330137013f0a2485aa21203a41207a56c5a6c 5a151e7d9d1a>i<ea01fe380fff80381e07c0383801e0eb00f01278a2127c127febc1e0 383fe3c0381fff80380ffe003807ff8014c0001f13e0383c3ff0ea780feb03f8eaf00113 001478a214701278007c13e0383e03c0380fff803803fc00151d7e9c1a>i<ea01fcea0f ff381f0780383e03c0007c13e0130100fc13f0a314f8a4ea7c03a2ea3e05ea1ffdea07f9 ea0041eb01f0123c127eeb03e0a214c0383c078038381f00ea1ffcea07f0151d7e9c1a> i<14e0a2497ea3497ea2eb06fca2eb0efeeb0c7ea2497ea201307f141f01707feb600fa2 496c7e90b5fc4880eb8003000380eb0001a200066d7ea2000e803affe00fffe0a2231f7e 9e28>65 di<903807fc0290383fff0e9038fe03de3903f000fe4848133e4848131e485a48 c7120ea2481406127ea200fe1400a7127e1506127f7e150c6c7e6c6c13186c6c13386c6c 13703900fe01c090383fff80903807fc001f1f7d9e26>iii73 d76 d<eb1ff890b5fc3901f81f803907e007e0390fc003 f0391f8001f890c7fc4814fc4814fe007e147ea200fe147fa9007e147e007f14fea26c14 fceb8001001f14f8390fc003f03907e007e03901f81f806cb51200eb1ff8201f7d9e27> 79 di82 d<3803fc08380fff38381e03f8ea38004813 78143812f01418a26c13007eea7fc013fe383fff806c13c06c13e06c13f0c613f81307eb 00fc147c143c12c0a36c1338147800f8137038fe01e038efffc000811300161f7d9e1d> i<007fb512fca2397c07e07c0070141c0060140ca200e0140e00c01406a400001400b100 03b512c0a21f1e7e9d24>i<ea07fc381fff80383f07c0eb03e0eb01f0a2120c1200133f

ea07fdea1f81ea3e01127c12f8a3eafc02ea7e0c383ff87e380fe03e17147f9319>97 di<ea01fe3807ff80381f0fc0123ea2127ceb03 0000fcc7fca6127c127e003e1360003f13c0ea1f813807ff00ea01fc13147e9317>i<eb 07f8a21300aaea01f8ea07feea1f83ea3e01ea7e00127ca212fca6127ca2127eea3e01ea 1f07380ffeffea03f818207e9f1d>i<ea01fe3807ff80380f83c0381e01e0383e00f05a 14f812fcb5fca200fcc7fca3127ca26c1318121e380f80703807ffe0c6138015147f9318 >i<eb3f80ebffc03803e3e0ea07c71387120feb83c0eb8000a5eafffca2ea0f80b0ea7f f8a213207f9f10>i<3803fc3c380ffffe381e079e383c03de007c13e0a5003c13c0381e 0780381fff00ea13fc0030c7fca21238383fff806c13f06c13f84813fc3878007c007013 3e00f0131ea30078133ca2383f01f8380fffe000011300171e7f931a>ii<121c123e127fa3 123e121cc7fca6b4fca2121fb0eaffe0a20b217ea00e>i108 d<3afe0fe03f8090391ff07fc03a1e70f9c3e09039407d01f0eb807e12 1feb007cac3affe3ff8ffea227147d932c>i<38fe0fc0eb3fe0381e61f0ebc0f81380ea 1f00ad38ffe7ffa218147d931d>i<48b4fc000713c0381f83f0383e00f8a248137ca200 fc137ea6007c137ca26c13f8a2381f83f03807ffc00001130017147f931a>i<38ff1fc0 eb7ff0381fe1f8eb80fceb007ea2143e143fa6143e147e147ceb80fcebc1f8eb7fe0eb1f 8090c7fca7eaffe0a2181d7e931d>i<3801f8183807fe38381f8778383f01f8123eea7e 00127c12fca6127c127ea2ea3f01ea1f87ea0ffeea03f8c7fca7eb07ffa2181d7e931c> i<eafe3eeb7f80381ecfc0138fa2121feb030090c7fcabeafff0a212147e9316>i<ea0f e6ea3ffeea701eea600eeae006a2eaf800eaffc0ea7ff8ea3ffcea1ffe1203ea001feac0 07a212e0eaf006eaf81eeafffceac7f010147e9315>i<1203a45aa25aa2123feafffca2 ea1f00aa1306a5ea0f8cea07f8ea03f00f1d7f9c14>i<38ff07f8a2ea1f00ad1301a2ea 0f063807fcff6c5a18147d931d>i<39ffe07f80a2391f001c00380f8018a26c6c5aa26c 6c5aa2ebf0e000015b13f900005b13ff6dc7fca2133ea2131ca219147f931c>i<38ffc0 ffa2380f80703807c0606d5a3803e180ea01f36cb4c7fc137e133e133f497e136febc7c0 380183e0380381f048c67e000e7f39ff81ff80a219147f931c>120 d e /fp 34 119 df<92380fff804ab512e0020f14f891393ffc01fc9139ffe0003e0103 0180133f4948c7b47e4948497f011f5c5c133f5c137fa3705b7090c7fc177e94c8fca793 387fffe0b9fca43a007ff0000182b3b3003fb5d8e07febffc0a43a487ec741>12 d<92260fff8090380fff804ab5d8f001b512e0020fdaf80f14f8913d3ffc00fe3ffc01fc daffe0903a3fffe0003e010301806d0180133f4948c7d87ffec7b47e49484a48497f011f 4a5d4a495b133f4a5d137fa282745b706f90c7fc057f157e98c8fca797387fffe0bdfca4 26007ff0c7397ff0000186b3b3003fb5d8e03fb5d8e07febffc0a45a487ec761>14 d<120fea3f80487e7f487e7fa27f6c7e7f121f6c1380000313c0c613e0137feb1ff0eb07 f81301eb00f01420151474c83a>18 d<eb0780eb0fe0eb1ff0133feb7ff813ffa25a4813 f05a14c0481380381ffe00ea3ff85bea7fc048c7fc12fc12781220151468c83a>i<ea07 c0ea1ff0487e487e7f12ff7fa21480a27ea2ea3ffbea1ff3ea07c3ea0003a2eb0700a413 0ea2131e131c5ba25b5b1201485a485a48c7fc121e1208112378c720>39 d45 d66 dii73 d80 d
13e08583717f85187fa285a785a5f30180f303c01a8084a272ec07801ac072ec0f00b700 f06d6d5a0601ebf83e9539007ffffc071f5bcd13c052487cc657>82 di<003fba12fca49026fe00079038e0007f01f0170fd87fc0ef03fe49170190c71600 007e197ea2007c193ea30078191ea400f8191f48190fa5c81700b3b3a60103b812c0a448 467cc551>i<90380ffff090b6fc000315c03a07f8007ff0486ceb1ffced07fe486c6d7e 838183816c48816c5a6c5ac9fca5157f023fb5fc0103b6fc011f13f090387ffe003801ff e0481380d80ffec7fc485a5b123f485aa2485aa45da26c6c5bed077f6c6c130f6c6c013e 13f83c0fff80f83fffe000039038fff01fc6ecc00f90390ffe0003332e7cad38>97 d<eb7fc0b5fca412037eb3a2ed1ffc92b57e02c314f09139cfe01ffc9139df0003fe02fc 6d7e4a6d13804aec7fc04aec3fe04a15f0ef1ff8a218fca2ef0ffea418ffaa18fea318fc 171fa218f8ef3ff0a26eec7fe06e15c06eecff80023c491300d9fe1feb07fe903afc0fc0 3ff8d9f803b512e049c6148049d91ff8c7fc38487cc741>i<91381fffc049b512fc0107 14ff903a1ff8007f80d97fe0ebffc0ebff8048494813e0485a1207485aa248486d13c000 3fed7f80ee3f00007f92c7fc5ba312ffaa127fa27fa2123fa26c6c15f0120f6dec01e012 076c6cec03c06c6deb07806c6deb0f00d97ff0133e90391ffc01fc0107b512f0010114c0 9026001ffcc7fc2c2e7cad34>i<efff804bb5fca4ed000782b3a2ec1ffc49b512830107 14e390391ffc03f390397fe0007fd9ff807f4890c7120f484880000781485aa2485a123f a25b127fa312ffaa127fa46c7ea2121fa26c7e00075d6c6c5c6c6c5c6c6d137f6d6c01fb 13c090273ff807e313ff010fb512c3010114039038003ff038487cc741>i<ec1ffc49b5 12c0010714f090391ff80ffc90397fc001fe49486c7e4890c7ea7f804848ec3fc04848ec 1fe0120f484815f0160f003f16f8a25b007f150717fca212ffa290b7fca301f0c9fca512 7fa36c7ea2001f163ca26c7e17786c6c15f86c6cec01f06c6deb03e06c6deb07c0d93fe0 eb1f80903a1ffc01ff000107b512fc010014e0020f90c7fc2e2e7dad35>i<edffc0021f 13f0027f13fc903901ffc0fe49eb01ff903807fc034948481380131feb3ff0137f14e001 ff6d13006f5a6f5a163093c7fcabb612fea4c601e0c8fcb3b3a2007febfff0a429487dc7 24>i<171fda7ff0ebffc00107b5000313e0011fecc7e7903b7fe03fff0ff09039ff800f fc48eb00074848eb03fe00079238ff07e0496deb03c0000fee8000a2001f82a8000f5ea2 000793c7fc6d5b00035d6c6c495a6c6d485a9138e03ff0d801dfb512c0d803c791c8fc90 38c07ff04848cafca37fa27fa213f890b612f06c15ff17e06c8217fc6c826d8148b81280 1207d80ff0c7001f13c0d81fc014014848ec007f007fee3fe048c9fc171fa56c6ced3fc0 a26c6ced7f806c6cedff00d80ff8ec03fed803feec0ff82601ffe0ebfff06c6cb612c001 0f4ac7fcd9007f13c034447dae3a>i<eb7fc0b5fca412037eb3a2ed07fe92383fffc04b 13f09139c1f81ff89139c3c00ffc9139c70007fe14ce02dc8002f87f18805ca25ca35cb3 a9b60081b6fca438487bc741>i<137c48b4fc4813804813c0a24813e0a56c13c0a26c13 806c1300ea007c90c7fcaceb7fc0b5fca412037eb3b2b6fca418497cc820>i<eb7fc0b5 fca412037eb3b3b3a8b61280a419487cc720>108 d<9027ff8003ffec03ffb5011f01e0 011f13e0037f01f8017f13f8913d81f80ffc01f80ffc913d83c007fe03c007fe0003903d 878003ff078003ff6cd98e00ec0e00029c039c8102b86d01b87f06f88102f05da24a5da3 4a5db3a9b66cb66cb61280a4592e7bad62>i<9039ff8007feb590383fffc04b13f09139 81f81ff8913983c00ffc00039039870007fe6c138e029c8002b87f188014f0a25ca35cb3 a9b60081b6fca4382e7bad41>i<ec0ffe49b512f0010714fc90391ff803ff90267fe000 13c0d9ff80eb3fe04890c76c7e48486e7e48486e7e000f82491403001f82003f17804980 a2007f17c0a300ff17e0aa007f17c0a46c6c4a1380a2001f17006d5c000f5e6c6c4a5a00 035e6c6c4a5a6c6d495ad97fe0ebffc090261ffc0790c7fc0107b512fc010114f0d9001f 90c8fc332e7dad3a>i<90397fc01ffcb590b57e02c314f09139cfe03ffc9139df0007fe 000301fc6d7e6c496d13804a6d13c04aec7fe04a15f0ef3ff8a2ef1ffca218fea2170fa2 18ffaa18fe171fa218fca2173f18f818f0177f6eecffe06e15c06e4913806e49130002df eb0ffe9139cfc03ff802c3b512e002c01480db1ff8c7fc92c9fcb0b67ea438427cad41> ii<90397f803f80b5ebffe0 028113f8913883c3fc91388707fe0003138e6c90389c0fff14b8a214f0a2ed07fe9138e0 03fced01f892c7fca25cb3a8b612e0a4282e7dad2f>i<90390ffe01c090b512c7000314

ff3807f801390fc0007f48c7121f48140f007e1407a2150312fea27e7f01e090c7fc13f8 387fffc014ff6c14e015f86c806c14ff6c1580000115c06c6c14e0131f010014f0140391 38007ff80070141f00f0140f15077e1503a26c15f0a27e6cec07e07f6deb0fc001f0eb1f 80d8fefcebff0039f87ffffcd8f01f13f0d8e0031380252e7cad2e>i<eb01e0a61303a3 1307a3130fa2131f133fa2137fea01ff5a000f90b512c0b7fca3c601e0c7fcb3a616f0a9 017f14e0ecf001133fed03c0d91ff8138090390ffe0f00903807fffe01015b9038001ff0 24427ec12d>iii e /fq 89 128 df<90381f83e09038f06e303901c078783803 80f8903800f03048eb7000a7b612803907007000b2383fe3ff1d20809f1b>11 d<133febe0c0ea01c0380381e0ea0701a290c7fca6b512e0ea0700b2383fc3fc1620809f 19>i<eb3fe013e0ea01c1ea0381ea0700a8b5fcea0700b2383fe7fc1620809f19>i<9038 1f81f89038f04f043901c07c06390380f80feb00f05a0270c7fca6b7fc3907007007b23a 3fe3fe3fe02320809f26>i<121c12fc121cb1eaff8009147f930c>16 d<12e0a212f01238121c120c1206120308087b9f17>18 d<1207a2120f121c1238123012 6012c00808779f17>i<121c121eea07801203ea01c0a2ea0380eaff000a087a7e14>24 d<ea7038eaf87ceafc7ea2ea743aea0402a3ea0804a2ea1008a2ea2010ea40200f0e7f9f 17>34 d<9038018030a449485aa501065ba549485a007fb6fcb7128026001803c7fca2eb 3006a4495aa2b712806c15002600c018c7fc48485aa548485aa500065ba321297e9f26> i<127012f812fca212741204a31208a21210a212201240060e7c9f0d>39 d<13401380ea01005a12061204120c5aa212381230a212701260a412e0ac1260a4127012 30a212381218a27e120412067e7eea008013400a2e7ba112>i<7e12407e12307e120812 0c7ea212077ea213801201a413c0ac1380a412031300a25a1206a25a120812185a12205a 5a0a2e7ea112>i<1303afb612fca2d80003c7fcaf1e207e9a23>43 d<127012f012f8a212781208a31210a31220a21240050e7c840d>i<eafff0a20c02808a 0f>i<127012f8a3127005057c840d>i<144014c0eb0180a3eb0300a31306a25ba35ba35b a25ba35ba3485aa348c7fca21206a35aa35aa25aa35aa35aa2122d7ea117>i<ea03f0ea 0e1c487eea1806ea380738700380a400f013c0ad00701380a3ea780700381300ea1806ea 1c0e6c5aea03f0121f7e9d17>i<13801203120f12f31203b3a6ea07c0eafffe0f1e7c9d 17>i<ea03f0ea0c1cea100e487e00401380128000f013c0eaf803a3ea200712001480a2 eb0f00130e5b5b5b13605b485a48c7fc000613405a5a00101380ea3fff5ab5fc121e7e9d 17>i<ea03f0ea0c1cea100eea200f007813801307a2ea380f12001400a2131e131c1370 ea07f0ea003c130e130feb0780a214c0122012f8a300f013801240eb0f00ea200eea183c ea07f0121f7e9d17>i<1306a2130ea2131e132ea2134e138ea2ea010e1202a212041208 a212101220a2124012c0b512f038000e00a7ebffe0141e7f9d17>i<ea1803ea1ffe5b5b 13e00010c7fca6ea11f0ea161cea180eea10071480ea0003a214c0a3127012f0a200e013 801240eb0700ea20066c5aea0838ea07e0121f7e9d17>i<137cea0182ea0701380e0380 ea0c0712183838030090c7fc12781270a2eaf1f0eaf21ceaf406eaf807eb0380a200f013 c0a51270a214801238eb07001218ea0c0e6c5aea01f0121f7e9d17>i<1240387fffe014 c0a23840008038800100a21302485aa25b5ba25ba21360a213e05b1201a41203a76c5a13 1f7e9d17>i<ea03f0ea0c0cea1006ea3003382001801260a3127038780300123eea3f06 ea1fc8ea0ff0ea03f8487eea0c7eea103f38300f80ea6007eb01c012c01300a31480ea60 0100201300ea1002ea0c0cea03f0121f7e9d17>i<ea03f0ea0e18487e487e13071270eb 038012f0a214c0a5ea7007a21238ea180bea0e13ea03e338000380a3eb07001230ea7806 130eea700cea2018ea1070ea0fc0121f7e9d17>i<127012f8a312701200aa127012f8a3 127005147c930d>i<127012f8a312701200aa127012f012f8a212781208a31210a31220 a21240051d7c930d>i<007fb512f8b612fcc9fca8b612fc6c14f81e0c7e9023>61 d<5b497ea3497ea3eb09e0a3eb10f0a3eb2078a3497ea2ebc03eeb801ea248b5fceb000f a20002eb0780a348eb03c0a2120c001e14e039ff801ffe1f207f9f22>65 di<90380fe0109038381c30 9038e002703803c00139078000f048c71270121e15305a1510127c127800f81400a91278 007c1410123ca26c1420a27e6c6c13406c6c13803900e00300eb380ceb0ff01c217e9f21 >iii
00a3146014e013ff138014601420a391c7fca87feafffe1a1f7f9e1e>i<90380fe01090 38381c309038e002703803c00139078000f048c71270121e15305a1510127c127800f814 00a7ec3ffeec01f000781300127c123ca27ea27e6c7e3903c001703900e002309038380c 1090380ff0001f217e9f24>i<39fff07ff8390f000780ad90b5fceb0007af39fff07ff8 1d1f7e9e22>i<eafff0ea0f00b3abeafff00c1f7e9e10>i<3807ffc038003e00131eb3a3 122012f8a3eaf01cea403cea6038ea1070ea0fc012207f9e17>i<39fff007fc390f0003 e0ec0180150014025c5c5c5c5c5c49c7fc5b497e130feb13c0eb21e01341eb80f0eb0078 a28080a280ec0780a2ec03c015e015f039fff01ffe1f1f7e9e23>i<eafff8ea0f8090c7 fcb21402a414061404a2140c141c147cb512fc171f7e9e1c>iii<eb1fe0eb703838 01c00e48487e39070003804814c0001eeb01e048eb00f0a2007c14f8a20078147800f814 7ca900781478007c14f8a2003c14f0003e1301001e14e06ceb03c06c1480390380070038 01e01e38007038eb1fe01e217e9f23>ii<eb1fe0eb70383801c00e48 487e39070003804814c0001eeb01e0003e14f0003c1300007c14f8a20078147800f8147c a900781478007c14f8a2003c14f0383e0781391e0841e0390f1023c00007148039039017 003801d01e3900783804eb1ff8eb001cec0c0cec0e1cec0ff8a2140715f0ec01e01e297e 9f23>ii<3803f040 380c0cc0ea1803ea3001ea6000a212e01440a36c13007e127cea7f80ea3ff86cb4fc0007 1380c613c0eb1fe013031301eb00f014707ea46c136014e06c13c038f8018038c60300ea 81fc14217e9f19>i<007fb512e038780f010060eb006000401420a200c0143000801410 a400001400b3497e3803fffc1c1f7e9e21>i<39fff00ff8390f0003e0ec0080b3a46ceb 01001380120314026c6c5a6c6c5aeb3830eb0fc01d207e9e22>i<39fff003fe391f8000 f86cc7126015206c6c1340a36c6c1380a2ebe00100011400a23800f002a213f8eb7804a2 6d5aa36d5aa2131f6d5aa2eb07c0a36d5aa36dc7fc1f207f9e22>i<3bfff07ff81ff03b 1f000fc007c06c903907800180170015c001805c00071502ec09e013c000035dec19f014 10d801e05ca2ec2078d800f05ca2ec403c01785ca2ec801e017c1460013c144090383d00 0f133f6d5ca2011e1307010e91c7fca2010c7f010413022c207f9e2f>i<397ff81ff839 0fe007c03907c0030000031302ebe0063801f00400005bebf818eb78106d5aeb3e60eb1e 406d5aa213076d7e497e1305eb08f0eb18f8eb1078eb207ceb603eeb401eeb801f390100 0f801407000214c000061303001feb07e039ffc01ffe1f1f7f9e22>i<39fff001ff391f 800078000f146012076d1340000314807f3901f001001200ebf802eb7c06eb3c04eb3e08 131eeb1f10eb0fb0eb07a014e06d5aaceb3ffc201f7f9e22>i<387ffffe387e003c1278 00701378006013f814f0384001e0130314c0eb07801200eb0f00131ea25b137c13785b12 01ebe002ea03c0a2ea0780000f13061300001e1304003e130c123c48133c14fcb5fc171f 7e9e1c>i<12ffa212c0b3b3a512ffa2082d7ca10d>i<ea0804ea1008ea2010a2ea4020a2 ea8040a3eab85ceafc7ea2ea7c3eea381c0f0e7a9f17>i<12ffa21203b3b3a512ffa208 2d80a10d>i<120c121e1233ea6180eac0c0ea80400a067a9e17>i<ea1fe0ea3030ea7818 131cea300e1200a313feea078eea1e0e1238127800f01310a3131e127838386720380f83 c014147e9317>97 d<121c12fc121caa137cea1d87381e0180eb00c0001c13e01470a214 78a6147014f014e0001e13c0381a018038198700ea107c15207e9f19>i<ea01fcea0706 ea1c0f123813060078c7fc127012f0a61270127800381380a2381c0100ea0706ea01f811 147f9314>i<eb01c0130f1301aaea01f1ea070dea0c03ea180112381278127012f0a612 70a21238ea1803120cea070d3801f1f815207f9f19>i<ea03f0ea0e1c487e487ea21270 eb038012f0a2b5fc00f0c7fca31270a26c1380a2381c0100ea0706ea01f811147f9314> i<137cea01c6ea030f1207ea0e061300a7eafff0ea0e00b2ea7fe01020809f0e>i<14e0 3803e330ea0e3cea1c1c38380e00ea780fa5ea380e6c5aea1e38ea33e00020c7fca21230 a2ea3ffe381fff8014c0383001e038600070481330a4006013606c13c0381c03803803fc 00141f7f9417>i<121c12fc121caa137c1386ea1d03001e1380a2121cae38ff8ff01420 7e9f19>i<1238127ca31238c7fca6121c12fc121cb1eaff80091f7f9e0c>i<13e0ea01f0 a3ea00e01300a61370ea07f012001370b3a31260eaf06013c0ea6180ea3f000c28829e0e >i<121c12fc121caaeb1fe0eb0780eb060013045b5b5b136013e0ea1df0ea1e70ea1c38 133c131c7f130f7f148014c038ff9ff014207e9f18>i<121c12fc121cb3abeaff800920 7f9f0c>i<391c3e03e039fcc30c30391d039038391e01e01ca2001c13c0ae3aff8ff8ff 8021147e9326>i<ea1c7ceafc86ea1d03001e1380a2121cae38ff8ff014147e9319>i<ea 01f8ea070e381c0380383801c0a2387000e0a200f013f0a6007013e0a2383801c0a2381c

038038070e00ea01f814147f9317>i<ea1c7ceafd87381e018014c0381c00e014f01470 1478a6147014f014e0381e01c0eb0380381d8700ea1c7c90c7fca8b47e151d7e9319>i< 3801f04038070cc0ea0e02ea1c03ea38011278127012f0a6127012781238ea1c03ea0c05 ea0709ea01f1ea0001a8eb0ff8151d7f9318>i<ea1cf0eafd18ea1e3ca21318ea1c00ae eaffc00e147e9312>i<ea0fc8ea3038ea6018eac008a3eae000127cea3fe0ea1ff0ea07 f8ea003cea800e130612c0a21304eae00cead818ea87e00f147f9312>i<1202a31206a2 120ea2123eeafff8ea0e00ab1304a5ea07081203ea01f00e1c7f9b12>i<381c0380eafc 1fea1c03ae1307120cea061b3803e3f014147e9319>i<38ff83f8383e00e0001c13c06c 1380a338070100a21383ea0382a2ea01c4a213e4ea00e8a21370a3132015147f9318>i< 39ff9fe1fc393c078070391c030060ec8020000e1440a214c0d80704138014e0a2390388 61001471a23801d032143a143e3800e01ca2eb6018eb40081e147f9321>i<38ff87f838 1e03c0380e0180eb0300ea0702ea0384ea01c813d8ea00f01370137813f8139cea010e12 02ea060738040380000c13c0003c13e038fe07fc16147f9318>i<38ff83f8383e00e000 1c13c06c1380a338070100a21383ea0382a2ea01c4a213e4ea00e8a21370a31320a25ba3 eaf080a200f1c7fc1262123c151d7f9318>i<ea7fffea700e1260ea401c133813781370 ea00e0120113c0ea038012071301120e121eea1c03ea3802ea7006130eeafffe10147f93 14>ii<ea7038eaf87ca3ea70380e057c9e17>127 d e /fr 1 59 df<127812fca412781200ae127812fca41278061a7b9910>58 d e /fs 4 106 df80 d86 d101 d<eafff0a2ea0f00b3a9eafff0a20c1f7e9e12>105 d e /ft 56 121 df<903901ff81fe010febefff903a7f81ff8f80d9fe01eb1fc03901f803fe000314 fcea07f0ee0f80020190c7fca7b712f0a32707f001fcc7fcb3a33a7fff1fffe0a32a2a7f a927>11 d<49b4fc011f13c090387f81e0ebfc013901f807f01203ea07f0a4ec01c091c8 fca3ec3ff8b6fca33807f003b3a33a7fff3fff80a3212a7fa925>i<903a01ff807fe001 0f9038c3fff8903a7f81ffe07cd9fe01eb803c3b01f803fe00fe12034848485aa21403a2 0201143894c7fca3ee07ffb9fca33b07f001fc007fb3a33c7fff1fffc7fff0a3342a7fa9 38>14 d<1218127c127eb4fc1380ea7fc013e0121fea07f0ea01f8120013300d0c7aaa22 >18 d<13c0ea01f01203ea07f8120fea1ff0123f13c0ea7f0012fc5a12600d0c72aa22> i<123c127feaff80a213c0a3127f123e1200a2ea0180a3ea0300a21206120e5a5a12100a 157ba913>39 d45 d<121c127fa2eaff80a3ea7f00a2121c0909 7b8813>i<eb3f803801fff03807e0fc380fc07e48487e497e481480003e130f007e14c0 a400fe14e0af007e14c0a46ceb1f80a26c14006d5a380fc07e6c6c5a3801fff038003f80 1b277da622>48 d<130e131e137eea07fe12ffa212f81200b3abb512fea317277ba622> i<ebff80000713f04813fc381e03fe393800ff80007c133f00fe14c06c131f15e0140fa2 127e003c131fc7fc15c0a2ec3f801500147e5c5c495a495aeb078049c7fc131e4913e013 705b3901c001c0ea0380ea0600000fb5fc5a5a5ab61280a31b277da622>i<eb7f803803 fff04813fc380f81fe381f007fea3f80ec3f80a3121f1300c7ea7f00a2147e5c495aeb07 f0ebffc0a2eb01f8eb007e801580ec1fc0a215e0a2123c127eb4fca215c0143f48148000 7ceb7f00383f01fe6cb45a000713f0c613801b277da622>i<140fa25c5c5c5c5ba2eb03 bfeb073f130e131c133c1338137013e0ea01c0ea038012071300120e5a5a5a12f0b612f8 a3c7ea7f00a890381ffff8a31d277ea622>i<00181303381f801febfffe5c5c5c14c091 c7fc001cc8fca7eb7fc0381dfff8381f80fc381e003f1208c7ea1f8015c0a215e0a21218 127c12fea315c05a0078eb3f80a26ceb7f00381f01fe6cb45a000313f0c613801b277da6 22>i<eb07f8eb3ffe90b5fc3901fc07803903f00fc03807c01fea0f80121f130048eb0f 8091c7fc127ea3eafe02eb1ff0eb3ffceb603eeb801f00ff14809038000fc0a24814e0a4 127ea4123e003f14c07eec1f80d80f8013003807e07e6cb45a6c5b38003fc01b277da622 >i<1238123e003fb512f0a34814e015c0158015003870000ea25c485b5c5cc6485aa249 5a130791c7fc5b5b131e133ea2137e137ca213fca41201a76c5a13701c297ca822>i<eb 3fc03801fff04813fc3807c07e48c67e001e7fec0f80123ea2123f138001c01300ebf01f 381ffc1e6d5a380ffff86c13e06c7f6c13fc8000077fd80f0f1380d81e0713c0ea3e0139 7c007fe0141f48130f14071403a315c0127c007eeb07806ceb0f00381fc03f380ffffc00 035b38007fc01b277da622>i<eb7f803801fff000077f380fc0fc381f803e48487e007e 1480a2140f00fe14c0a315e0a5007e131fa26c133f6c132f380f80cf3807ff8f0001130f ea0008010013c0a3ec1f80123e127fec3f00143e147e007e5b383e03f8381fffe06c1380

d801fec7fc1b277da622>i<121c127fa2eaff80a3ea7f00a2121cc7fca9121c127fa2ea ff80a3ea7f00a2121c091b7b9a13>i<ec0780a24a7ea34a7ea24a7ea3ec77f8a2ecf7fc 14e3a2903801c1fea201037f1480a249486c7ea24980010e133fa2496d7ea2013fb57ea3 9039700007f8a201f080491303000181491301a2000381d8fffe013f13fca32e297ea833 >65 d<91387fe003903907fffc07011febff0f90397ff00f9f9039ff0001ffd801fc7f48 48147f4848143f4848141f485a160f485a1607127fa290c9fc5aa97e7f1607123fa26c7e 160e6c7e6c6c141c6c6c143c6c6c14786cb4eb01f090397ff007c0011fb512800107ebfe 009038007ff028297ca831>67 diii<91387fe003903907fffc07011febff 0f90397ff00f9f9039ff0001ffd801fc7f484880484880484880485a82485a82127fa290 cafc5aa892b512f87e7f03001300123fa26c7ea26c7e6c7e6c7e6c7e6cb45b90387ff007 011fb5129f0107ebfe0f9039007ff0032d297ca835>iii76 d<ecffc0010f13fc90383f807f9039fe 001fc0d801f8eb07e048486d7e48486d7e000f8148486d7ea24848147fa2007f168090c8 123fa34816c0aa6c16806d147fa2003f1600a26c6c14fea26c6c495a6c6c495a6c6c495a 6c6c495a6c6c495a90263fc0ffc7fc90380ffffc010013c02a297ca833>79 di82 d<9038ff80600003ebf0e0000f13f8381f80fd383f001f003e1307481303a200 fc1301a214007ea26c140013c0ea7ffcebffe06c13f86c13fe80000714806c14c0c6fc01 0f13e0eb007fec1ff0140f140700e01303a46c14e0a26c13076c14c0b4eb0f80ebe03f39 e3fffe0000e15b38c01ff01c297ca825>i<007fb71280a39039807f807fd87c00140f00 781507a20070150300f016c0a2481501a5c791c7fcb3a490b612c0a32a287ea72f>ii<3803ff80000f13f0381f01fc38 3f80fe147f801580ea1f00c7fca4eb3fff3801fc3fea0fe0ea1f80ea3f00127e5aa4145f 007e13df393f839ffc381ffe0f3803fc031e1b7e9a21>97 d<eaffe0a3120facebe1fe90 38efff809038fe07e09038f803f09038f001f89038e000fca2157ea2157fa8157ea315fc a29038f001f89038f803f090389c0fe090380fff80390e01fc00202a7ea925>i<eb3ff0 3801fffc3803f03e380fc07fea1f80ea3f00a248133e007e90c7fca212fea7127ea2127f 6ceb03801380001feb0700380fe00e3803f83c3801fff838003fc0191b7e9a1e>i<ec7f f0a31407aceb3f873801fff73807f03f380fc00f381f8007ea3f00a2127ea312fea8127e a27ea2381f800f380fc01f3907e07fff3801ffe738007f87202a7ea925>i<eb3fc03801 fff03803e07c380f803e001f7f130048eb0f80127e15c0a200fe1307a2b6fca248c8fca3 127ea2127f6ceb01c07e390f8003803907c007003803f01e3800fffceb3fe01a1b7e9a1f >i<eb07f8eb3ffceb7e3e3801fc7fea03f813f01207143e1400a7b512c0a33807f000b3 a3387fff80a3182a7ea915>i<9038ff80f00003ebe3f8390fc1fe1c391f007c7c48137e 003eeb3e10007eeb3f00a6003e133e003f137e6c137c380fc1f8380bffe00018138090c8 fc1238a2123c383ffff814ff6c14c06c14e06c14f0121f383c0007007ceb01f8481300a4 007ceb01f0a2003feb07e0390fc01f806cb5120038007ff01e287e9a22>i<eaffe0a312 0fac147e9038e1ff809038e30fc001e413e0ebe80701f813f013f0a213e0b039fffe3fff a3202a7da925>i<1207ea0f80ea1fc0ea3fe0a3ea1fc0ea0f80ea0700c7fca7eaffe0a3 120fb3a3eafffea30f2b7eaa12>i<1307eb0f80eb1fc0eb3fe0a3eb1fc0eb0f80eb0700 90c7fca7ebffe0a3130fb3aa127c12fe14c0eb1f801400ea7c3eea3ffcea0ff0133784aa 15>i<eaffe0a3120fb3b2eafffea30f2a7ea912>108 d<26ffc07feb1fc0903ac1ffc07f f0903ac307e0c1f8d80fc49038f101fc9039c803f20001d801fe7f01d05ba201e05bb03c fffe3fff8fffe0a3331b7d9a38>i<38ffc07e9038c1ff809038c30fc0d80fc413e0ebc8 0701d813f013d0a213e0b039fffe3fffa3201b7d9a25>i<eb3fe03801fffc3803f07e39 0fc01f80391f800fc0393f0007e0a2007eeb03f0a300fe14f8a8007e14f0a26ceb07e0a2 391f800fc0390fc01f803907f07f003801fffc38003fe01d1b7e9a22>i<38ffe1fe9038 efff809038fe0fe0390ff803f09038f001f801e013fc140015fea2157fa8157e15fea215

fc140101f013f89038f807f09038fc0fe09038efff809038e1fc0001e0c7fca9eafffea3 20277e9a25>i<90383f80703901ffe0f03803f079380fe01d381f800f123feb00075aa2 127e12fea8127fa27e1380001f130f380fc01f3807f0773801ffe738007f87eb0007a9ec 7fffa320277e9a23>i<38ffc1f0ebc7fcebc63e380fcc7f13d813d0a2ebf03eebe000b0 b5fca3181b7f9a1b>i<3803fe30380ffff0ea3e03ea7800127000f01370a27e00fe1300 eaffe06cb4fc14c06c13e06c13f0000713f8c6fceb07fc130000e0137c143c7e14387e6c 137038ff01e038e7ffc000c11300161b7e9a1b>i<13e0a41201a31203a21207120f381f ffe0b5fca2380fe000ad1470a73807f0e0000313c03801ff8038007f0014267fa51a>i< 39ffe07ff0a3000f1307b2140fa2000713173903f067ff3801ffc738007f87201b7d9a25 >i<39fffc03ffa3390ff000f0000714e07f0003eb01c0a2ebfc0300011480ebfe070000 140013ffeb7f0ea2149eeb3f9c14fc6d5aa26d5aa36d5aa26d5aa2201b7f9a23>i<39ff fc1ffea33907f003803803f8079038fc0f003801fe1e00005beb7f3814f86d5a6d5a130f 806d7e130f497eeb3cfeeb38ffeb787f9038f03f803901e01fc0d803c013e0eb800f39ff f03fffa3201b7f9a23>120 d e /fu 22 119 df<1207a2120f121e121c123812601240 1280080976a218>19 d<127012f812fca212741204a41208a21210a212201240060f7ca2 0e>39 d68 d<eafffcea1f806cc7fcb3a21401a41403a214021406a2141e48137eb512fe18227da11e >76 di80 d<3803f020380c0c60ea1802383001e0ea70000060136012e0a21420a36c1300a2127812 7fea3ff0ea1ffe6c7e0003138038003fc0eb07e01301eb00f0a214707ea46c1360a26c13 c07e38c8018038c60700ea81fc14247da21b>83 d<39fffc07ff390fc000f86c48137015 20b3a5000314407fa2000114806c7e9038600100eb3006eb1c08eb03f020237ea125>85 d<ea1fe0ea3038ea780c130eea30071200a313ffea07c7ea1e07123c1278127000f01308 a3130fea7817383c2390380fc1e015157e9418>97 d<ea01feea0703380c0780121c3838 03000078c7fc127012f0a712700078134012386c1380380c0100ea0706ea01f812157e94 16>99 d<14e0130f13011300abea01f8ea0704ea0c02ea1c01ea38001278127012f0a712 7012781238ea1801ea0c0238070cf03801f0fe17237ea21b>i<ea01fcea0707380c0380 381c01c01238007813e0ea700012f0b5fc00f0c7fca512700078132012386c13406c1380 38070300ea00fc13157f9416>i<121c123ea3121cc7fca8120e127e121e120eb1eaffc0 0a227fa10e>105 d<120e12fe121e120eb3adeaffe00b237fa20e>108 d<380e1f8038fe60c0381e80e0380f0070a2120eaf38ffe7ff18157f941b>110 d<ea01fcea0707380c0180381800c0003813e0481370a200f01378a700701370007813f0 003813e0381c01c0380e038038070700ea01fc15157f9418>i<ea0e1f38fe61c0380e80 60380f0070000e1338143ca2141ea7143ca21438000f1370380e80e0eb41c0eb3f0090c7 fca9eaffe0171f7f941b>i<ea0e3ceafe46ea1e8fea0f0f13061300120ead120feafff0 10157f9413>114 d<ea0f88ea3078ea601812c01308a212e0eaf000127fea3fe0ea0ff0 ea01f8ea003cea801c130ca212c01308eae018ead030ea8fc00e157e9413>i<1202a412 06a3120e121e123eeafffcea0e00ab1304a6ea07081203ea01f00e1f7f9e13>i<000e13 7038fe07f0ea1e00000e1370ad14f0a238060170380382783800fc7f18157f941b>i<38 ff80fe381e00781430000e1320a26c1340a2eb80c000031380a23801c100a2ea00e2a313 74a21338a3131017157f941a>i e /fv 23 118 df<ea0380a21207ea0e005a12185a5a 5a5a090a74a21c>19 d<144014e0a3497ea2497eeb0278a2497ea3497ea2497ea3496c7e a201407f1403a290b57ea239018001f090c7fca200021478a34880a2001e143e3affc003 ffe0a223237da229>65 d<903803f80290381fff0690387e03863901f000ce4848133ed8 0780131e48c7fc48140e001e1406123e123c007c1402a2127800f891c7fca7913807ffe0 1278007c9038001e00a2123c123e121e121f6c7e6c7e6c6c132ed801f8136e39007e01c6 90381fff02d903fcc7fc23247ca22a>71 d<eafffca2ea0780b3aceafffca20e227da114 >73 d80 d<3801f8083807ff18381e0398 383800f800301378007013380060131812e01408a36c13001278127cea3f8013f86cb4fc 000713c0000113e038001ff01301eb00781438143c141c7ea46c13186c1338143000f813 6038cf01e038c7ff803880fe0016247ca21e>83 d<1304130ea3131fa2eb2f801327a2eb 43c0a2ebc3e01381a248c67ea2487f13ff38020078487fa3487f1218003c131f00feeb7f e01b1a7f991f>97 d<eb3f023801c0c63803002e000e131e48130e14065a007813021270 a200f01300a600701302a21278003813047e14087e000313303801c0c038003f00171a7e 991d>99 d
80191a7e991f>ii i<39ffc1ff80391e003c00ab381ffffc381e003cac39ffc1ff80191a7e991f>104 d<eaffc0ea1e00b3a6eaffc00a1a7e990f>i<eaffe0001fc7fc121eaf1410a314301420 146014e01301b5fc141a7e991a>108 d<00feeb01fe001e14f0a200171302a238138004 a33811c008a23810e010a3eb7020a3eb3840a2eb1c80a3eb0f00a21306123800feeb07fe 1f1a7e9925>i<00feeb3f80001feb0e00eb80041217ea13c0ea11e013f012101378137c 133c131e130f14841307eb03c4eb01e4a2eb00f4147ca2143c141c140c123800fe130419 1a7e991f>i<eb7f803801c0e038070038000e7f487f003c130f00387f00781480007013 03a200f014c0a70078eb0780a200381400003c5b001c130e6c5b6c5b3801c0e038007f80 1a1a7e9920>ii<eb7f803801c0e038070038000e7f487f003c130f00 387f00781480a20070130300f014c0a7007014800078130700381400383c1e0f381c310e 380e209c000713b83801e0e039007fc040eb00401460ec70c0ec7f80143f1500141e1a21 7e9920>i<eafffe381e03c0eb00e0801478a55c5ceb03c0d81ffec7fc381e0380eb01e0 130080a615401470ec388039ffc01f001a1a7e991e>i<ea07e1ea181bea3007487ea2ea e001a36cc7fc12fcea7f80ea3ff86c7e6c7ec67e131feb0780a2ea8003a300c013005bea e006eadc0cea83f0111a7e9917>i<007fb5fc38701e0700601301124000c01480008013 00a300001400b0133f3803fff0191a7f991d>i<39ffc03f80391e000e001404b2000e5b 120f6c5b6c6c5a3800e0c0013fc7fc191a7e991f>i e /fw 53 122 df<90380ff83f90397ffdffc03a01f81fe3e03903e03f87ea07c0d80f801307ed03c06e c7fca6b612fca2260f801fc7fcb2397ff0fff0a223237fa221>11 d<eb0ff0eb7ffc3801f80e3803e01f48485aea0f80a2141e140c91c7fca4b6fca2380f80 1fb2397ff0ffe0a21b237fa21f>i<12f07e7ea2127e121fea0f80ea03c0ea01800a097a a21c>18 d<ea03c01207120fa2ea1f80ea3e005a12f012600a0975a21c>i<1238127c12 fe12ffa2127f123b1203a31206a2120c121c12181270122008117ca210>39 d<eafffca40e047f8c13>45 d<1238127c12fea3127c123807077c8610>i<13fe3807ff c0380f83e0381f01f0383e00f8a248137ca312fc147ead007c137ca36c13f8a2381f01f0 380f83e03807ffc03800fe0017207e9f1c>48 d<13181378ea01f812ffa21201b3a7387f ffe0a213207c9f1c>i<ea03fcea0fff383c1fc0387007e0007c13f0eafe0314f8a21301 127cea3803120014f0a2eb07e014c0eb0f80eb1f00133e13385bebe018ea01c0ea0380ea 0700000e1338380ffff05a5a5ab5fca215207d9f1c>i<13fe3807ffc0380f07e0381e03 f0123feb81f8a3ea1f0314f0120014e0eb07c0eb1f803801fe007f380007c0eb01f014f8 eb00fca2003c13fe127eb4fca314fcea7e01007813f8381e07f0380fffc03801fe001720 7e9f1c>i<14e013011303a21307130f131fa21337137713e7ea01c71387ea0307120712 0e120c12181238127012e0b6fca2380007e0a790b5fca218207e9f1c>i<00301320383e 01e0383fffc0148014005b13f8ea33c00030c7fca4ea31fcea37ff383e0fc0383807e0ea 3003000013f0a214f8a21238127c12fea200fc13f0a2387007e0003013c0383c1f80380f ff00ea03f815207d9f1c>i<eb1f80ebffe03803e0703807c0f0380f01f8121f123ea238 7e00f0007c1300a2eafc08eb7fc0ebffe038fd80f038ff00f848137ca248137ea4127ca3 003c137c123e001e13f86c13f0380783e03803ffc0c6130017207e9f1c>i<13fe3803ff c0380703e0380e00f05a1478123c123e123f1380ebe0f0381ff9e0ebffc06c13806c13c0 6c13e04813f0381e7ff8383c1ffcea7807eb01feeaf000143e141ea36c131c007813387e 001f13f0380fffc00001130017207e9f1c>56 d<1470a214f8a3497ea2497ea3eb067fa2 010c7f143fa2496c7ea201307f140f01707feb6007a201c07f90b5fc4880eb8001a2d803 007f14004880000680a23affe007fff8a225227ea12a>65 d67 diii72 di76 d

78 d<eb07fc90383fff809038fc07e03903f001f848486c7e4848137e48487fa248c7ea 1f80a24815c0007e140fa200fe15e0a9007e15c0007f141fa26c15806d133f001f15006c 6c137e6c6c5b6c6c485a3900fc07e090383fff80d907fcc7fc23227da12a>ii82 d<3801fe023807ff86381f01fe383c007e007c131e0078130ea200f8 1306a27e1400b4fc13e06cb4fc14c06c13f06c13f86c13fc000313feea003f1303eb007f 143fa200c0131fa36c131ea26c133c12fcb413f838c7ffe00080138018227da11f>i<00 7fb61280a2397e03f80f00781407007014030060140100e015c0a200c01400a400001500 b3a248b512f0a222227ea127>ii<12021207ea 0f80ea1fc0ea3de0ea7070eae038eac0180d0879a21c>94 d<ea0ffc383fff80387e07c0 eb03e0130114f0123c1200a2133fea03fdea1fc1ea3f01127e12fca4ea7e02eb0cf8381f f87f3807e03f18167e951b>97 di<eb ff80000713e0380f83f0ea1f03123e127e387c01e090c7fc12fca6127c127ea2003e1318 6c1330380fc0603807ffc0c6130015167e9519>i<eb01fea2eb003eabea01fc3807ffbe 380f81fe381f007e003e133e127e127c12fca8127ca26c137e6c13fe380f83be3907ff3f c0ea01fc1a237ea21f>i<13fe3807ff80380f87c0381e01e0003e13f0ea7c0014f812fc a2b5fca200fcc7fca3127ca2127e003e13186c1330380fc0703803ffc0c6130015167e95 1a>i<eb1fc0eb7fe0ebf1f0ea01e31203ea07c3ebc1e0ebc000a6eafffea2ea07c0b2ea 3ffca2142380a211>i<3801fe0f3907ffbf80380f87c7381f03e7391e01e000003e7fa5 001e5bea1f03380f87c0ebff80d809fec7fc0018c8fca2121c381fffe06c13f86c13fe00 1f7f383c003f48eb0f80481307a40078eb0f006c131e001f137c6cb45a000113c019217f 951c>ii<121c123e127fa3123e121cc7fca7b4fca2121fb2eaffe0a20b247ea310>i< b4fca2121fb3adeaffe0a20b237ea210>108 d<3aff07f007f090391ffc1ffc3a1f303e 303e01401340496c487ea201001300ae3bffe0ffe0ffe0a22b167e9530>i<38ff07e0eb 1ff8381f307ceb403ceb803ea21300ae39ffe1ffc0a21a167e951f>i<13fe3807ffc038 0f83e0381e00f0003e13f848137ca300fc137ea7007c137ca26c13f8381f01f0380f83e0 3807ffc03800fe0017167e951c>i<38ff0fe0eb3ff8381fe07ceb803e497e1580a2ec0f c0a8ec1f80a29038803f00ebc03eebe0fceb3ff8eb0fc090c8fca8eaffe0a21a207e951f >i<ebfe033807ff87380fc1c7381f006f48133f127e80127c12fca7127ea2003e5b6c5b 380fc1df3807ff9f3801fc1fc7fca8ecffe0a21b207e951e>i<eafe1feb3fc0381e67e0 13c71387a2381f83c090c7fcadeafff0a213167e9517>i<ea0ff3ea3fffea781fea6007 eae003a212f000fcc7fcea7fe013f8ea3ffeea0fff120138000f80eac007130312e0a238 f00700eafc0eeaeffceac7f011167e9516>i<487ea41203a21207a2120f123fb5fca2ea 0f80abeb8180a5eb8300ea07c3ea03feea00f811207f9f16>i<38ff01fea2381f003eaf 147e14fe380f81be3907ff3fc0ea01fc1a167e951f>i<39ffe01fe0a2391f800700000f 1306ebc00e0007130c13e000035ba26c6c5aa26c6c5aa2eb7cc0a2137f6d5aa26dc7fca2 130ea21b167f951e>i<39ffe07fc0a2390f801c006c6c5a6c6c5aebf0606c6c5a3800f9 80137f6dc7fc7f80497e1337eb63e0ebc1f03801c0f848487e3807007e000e133e39ff80 ffe0a21b167f951e>120 d<39ffe01fe0a2391f800700000f1306ebc00e0007130c13e0 00035ba26c6c5aa26c6c5aa2eb7cc0a2137f6d5aa26dc7fca2130ea2130ca25b1278eafc 3813305bea69c0ea7f80001fc8fc1b207f951e>i e /fx 11 107 df0 d<ea8002eac006ea600cea3018ea1830ea0c60ea06c0ea03 80a2ea06c0ea0c60ea1830ea3018ea600ceac006ea80020f107b8e1a>2 d<1204a3eac460eaf5e0ea3f80ea0e00ea3f80eaf5e0eac460ea0400a30b0d7e8d11>i< ea01f8ea0606ea08013810008038280140ea240200441320ea420438810810ea80901360 a21390ea810838420420ea440200241340ea28013810008038080100ea0606ea01f81416 7e911a>10 d<120e121fea3180ea60c0a2eac060a4ea60c0a2ea3180ea1f00120e0b0e7e 8d11>14 d17 d<1204120ea2121ca31238a212301270a21260a212c0a2070f7f8f0a>48 d<ea03fc120fea1c0012305aa35aa2eafffca2eac000a21260a37e121cea0ffc12030e14 7d9016>50 d<0040134000c013c038600180a238300300a2ea3fff6c5aea18066c5aa26c 5aa26c5aa3ea01e0a26c5aa21214809314>56 d<146014e0a213011303a213061304130c 1318a21330136014f013ff5a38038070ea830000ce137800fc137e14380030130017167f 941b>65 d<12c0b3ab021d7d950a>106 d e /fy 68 123 df<137e3801c180ea030138 0703c0120eeb018090c7fca5b512c0ea0e01b0387f87f8151d809c17>12

d<12fc121cb0eaff8009127f910c>16 d<12e0a212f01238121c120e120207077c9c15> 18 d<120ea2121e1238127012e012800707779c15>i<126012f012f812681208a31210a2 122012401280050c7c9c0c>39 d<1380ea0100120212065aa25aa25aa35aa412e0ac1260 a47ea37ea27ea27e12027eea0080092a7c9e10>i<7e12407e12307ea27ea27ea37ea413 80ac1300a41206a35aa25aa25a12205a5a092a7e9e10>i<1306adb612e0a2d80006c7fc ad1b1c7e9720>43 d<126012f0a212701210a41220a212401280040c7c830c>i<eaffe0 a20b0280890e>i<126012f0a2126004047c830c>i<ea03c0ea0c30ea1818ea300ca2ea70 0eea6006a2eae007adea6006a2ea700eea300ca2ea1818ea0c30ea07e0101d7e9b15>48 d<5a1207123f12c71207b3a5eafff80d1c7c9b15>i<ea07c0ea1830ea201cea400c130e eaf00f12f81307a21270ea000f130ea2131ca213381370136013c0ea0180ea0300ea0601 120c1218ea1002ea3ffe127f12ff101c7e9b15>i<ea07e0ea1830ea201ca2ea781e130e 131e1238ea001ca2131813301360ea07c0ea0030131ca2130e130fa2127012f8a3eaf00e ea401c1220ea1830ea07c0101d7e9b15>i<130ca2131c133ca2135c13dc139cea011c12 0312021204120c1208121012301220124012c0b512c038001c00a73801ffc0121c7f9b15 >i<ea300cea3ff813f013c0ea2000a6ea23e0ea2c30ea3018131cea200e1200130fa312 6012f0a3ea800eea401e131cea2038ea1870ea07c0101d7e9b15>i<13f0ea030cea0404 ea0c0eea181e1230130cea7000a21260eae3e0eae430eae818eaf00c130eeae0061307a5 1260a2ea7006ea300e130cea1818ea0c30ea03e0101d7e9b15>i<1240387fff801400a2 ea4002485aa25b485aa25b1360134013c0a212015ba21203a41207a66cc7fc111d7e9b15 >i<ea03e0ea0c30ea1008ea200c13061260a21270a2ea7c0cea3e18ea3fb0ea1fe0ea07 f013f8ea18fcea307eea601e130feac0071303a4ea60021304ea300cea1c10ea07e0101d 7e9b15>i<ea03c0ea0c30ea1818ea300c1270ea600eeae006a21307a51260ea700f1230 ea1817ea0c27ea07c7ea0006a2130eea300c127813181270ea2030ea10c0ea0f80101d7e 9b15>i<126012f0a212601200aa126012f0a2126004127c910c>i<007fb512c0b612e0c9 fca8b612e06c14c01b0c7e8f20>61 d66 d<90381f8080ebe0613801801938070007000e13035a14015a00781300a2127000f01400 a8007014801278a212386ceb0100a26c13026c5b380180083800e030eb1fc0191e7e9c1e >iiii<90381f8080ebe0613801801938070007000e13035a14015a00781300a2127000 f01400a6ecfff0ec0f80007013071278a212387ea27e6c130b380180113800e06090381f 80001c1e7e9c21>i<39fff0fff0390f000f00ac90b5fceb000fad39fff0fff01c1c7f9b 1f>i<eafff0ea0f00b3a8eafff00c1c7f9b0f>i<3807ff8038007c00133cb3127012f8a2 1338ea7078ea4070ea30e0ea0f80111d7f9b15>i<eafff8ea0f8090c7fcb01408a31418 a2141014301470eb01f0b5fc151c7e9b1a>76 dii80 d<eb3f80ebe0e03803803848487e000e7f487f 003c148000381303007814c0a20070130100f014e0a8007014c000781303a20038148038 3c0e07d81c111300380e208e0007135c3803a0783900f0e020133feb0060ec3060ec38e0 ec3fc0a2ec1f80ec0f001b257e9c20>ii<3807e080ea1c19ea30051303ea600112e01300a36c13007e127cea7fc0ea3ff8 ea1ffeea07ffc61380130feb07c0130313011280a300c01380a238e00300ead002eacc0c ea83f8121e7e9c17>i<007fb512c038700f010060130000401440a200c014201280a300 001400b1497e3803fffc1b1c7f9b1e>i<39fff01ff0390f000380ec0100b3a26c130213 8000035bea01c03800e018eb7060eb0f801c1d7f9b1f>i<39ffe00ff0391f0003c0ec01 806c1400a238078002a213c000035ba2ebe00c00011308a26c6c5aa213f8eb7820a26d5a a36d5aa2131f6dc7fca21306a31c1d7f9b1f>i<39fff07fc0390fc01e003807800cebc0 0800035b6c6c5a13f000005beb7880137c013dc7fc133e7f7f80a2eb13c0eb23e01321eb 40f0497e14783801007c00027f141e0006131f001f148039ff807ff01c1c7f9b1f>88 d<120c12121221ea4080ea80400a057b9b15>94 d<ea1fc0ea3070ea78387f12301200a2 ea01fcea0f1c12381270126000e01340a3ea603c38304e80381f870012127e9115>97 d<12fc121caa137cea1d87381e0180381c00c014e014601470a6146014e014c0381e0180 38190700ea10fc141d7f9c17>i<ea03f8ea0c0cea181e1230ea700cea600012e0a61260

ea70021230ea1804ea0c18ea03e00f127f9112>i<eb1f801303aaea03f3ea0e0bea1807 ea30031270126012e0a6126012701230ea1807ea0e1b3803e3f0141d7f9c17>i<ea07e0 ea0c30ea1818ea300cea700eea600612e0eafffeeae000a41260ea70021230ea1804ea0c 18ea03e00f127f9112>i<13f8ea018cea071e1206ea0e0c1300a6eaffe0ea0e00b0ea7f e00f1d809c0d>i<eb03803807c4c0ea1c783838388038301800ea701ca4ea3018ea3838 6c5aea27c00020c7fca21230ea3ff86cb4fc1480ea2003386001c0eac000a33860018038 300300ea1c0eea07f8121c7f9215>i<12fc121caa137c1387ea1d03001e1380121cad38 ff9ff0141d7f9c17>i<1218123ca21218c7fca712fc121cb0eaff80091d7f9c0c>i<13c0 ea01e0a2ea00c01300a7ea07e01200b3a21260eaf0c012f1ea6180ea3e000b25839c0d> i<12fc121cb3a9eaff80091d7f9c0c>108 d<39fc7e07e0391c838838391d019018001e ebe01c001c13c0ad3aff8ff8ff8021127f9124>i<eafc7cea1c87ea1d03001e1380121c ad38ff9ff014127f9117>i<ea03f0ea0e1cea1806487e00701380ea600100e013c0a600 601380ea700300301300ea1806ea0e1cea03f012127f9115>i<eafc7cea1d87381e0180 001c13c0eb00e0a21470a614e0a2eb01c0001e1380381d0700ea1cfc90c7fca7b47e141a 7f9117>i<3803e080ea0e19ea1805ea3807ea7003a212e0a61270a2ea38071218ea0e1b ea03e3ea0003a7eb1ff0141a7f9116>i<eafce0ea1d38ea1e78a2ea1c301300aceaffc0 0d127f9110>i<ea1f90ea2070ea4030eac010a212e0eaf800ea7f80ea3fe0ea0ff0ea00 f8ea8038131812c0a2eae010ead060ea8fc00d127f9110>i<1204a4120ca2121c123cea ffe0ea1c00a91310a5120cea0e20ea03c00c1a7f9910>i<38fc1f80ea1c03ad1307120c ea0e1b3803e3f014127f9117>i<38ff07e0383c0380381c0100a2ea0e02a2ea0f06ea07 04a2ea0388a213c8ea01d0a2ea00e0a3134013127f9116>i<38ff0fe0381e0700ea1c06 ea0e046c5aea039013b0ea01e012007f12011338ea021c1204ea0c0e487e003c138038fe 1ff014127f9116>120 d<38ff07e0383c0380381c0100a2ea0e02a2ea0f06ea0704a2ea 0388a213c8ea01d0a2ea00e0a31340a25ba212f000f1c7fc12f312661238131a7f9116> i<ea7ffcea70381260ea407013f013e0ea41c012031380ea0700ea0f04120e121cea3c0c ea380812701338eafff80e127f9112>i e end %%endprolog %%beginsetup %%feature: *resolution 300dpi texdict begin %%papersize: a4 %%endsetup %%page: 1 1 1 0 bop 227 195 a fy(n)258 180 y fx(\016)291 195 y fy(d'ordre)8 b(:)13 b(2567)821 418 y fw(th)908 406 y(\022)904 418 y(ese)814 551 y fy(pr)o(\023)-20 b(esen)o(t)o(\023)g(ee)16 b(\022)-21 b(a)415 683 y fw(l'univ)n(ersit)o(\023)-27 b(e)16 b(louis)i(p)n(asteur)i(de)e(strasb)r(ourg)885 816 y fy(par)692 948 y fv(st)751 944 y(\023)751 948 y(ephane)g(gena)o (ud)695 1093 y fy(p)q(our)c(obtenir)g(le)g(grade)g(de)513 1225 y fu(do)q(cteur)i(de)g(l'univ)o(ersit)o(\023)-23 b(e)13 b(louis)k(p)o(asteur)712 1275 y(men)o(tion)f fv(sciences)637 1325 y fu(sp)o(\023)-23 b(ecialit)o(\023)g(e)14 b fv(inf)o(orma)m (tique)368 1511 y ft(t)-6 b(ransformations)23 b(de)f(programmes)d fs(pei)10 b fr(:)348 1568 y ft(application)25 b(au)d(parall)o(\023)-32 b(elisme)24 b(de)e(donn)o(\023)-32 b(ees)231 1866 y fy(souten)o(ue)15 b(le)f(9)f(jan)o(vier)h(1997)f(dev)n(an)o(t)h(la)f(commission)e (d'examen)h(comp)q(os)o(\023)-20 b(ee)14 b(de)8 b(:)362 1965 y(m.)14 b(luc)g(boug)o(\023)-20 b(e,)14 b(rapp)q(orteur,)362 2015 y(professeur)i(\022)-21 b(a)14 b(l'ecole)f(normale)f(sup)o(\023) -20 b(erieure)16 b(de)e(ly)o(on)362 2115 y(m.)g(p)o(atrice)g(quin)o (ton,)f(rapp)q(orteur,)362 2165 y(professeur)j(\022)-21 b(a)14 b(l'univ)o(ersit)o(\023)-20 b(e)13 b(de)h(rennes)h(i)362 2264 y(m.)f(christian)f(lengauer,)h(examinateur,)362 2314 y(professeur)i(\022)-21 b(a)14 b(l'univ)o(ersit)o(\023)-20 b(e)13 b(de)h(p)o(assau)362 2414 y(mme)f(catherine)i(mongenet,)f(rapp)q (orteur)g(in)o(terne,)362 2464 y(ma)-5 b(^)-16 b(\020tre)14 b(de)h(conf)o(\023)-20 b(erences)15 b(\022)-21 b(a)14 b(l'univ)o(ersit)o(\023)-20 b(e)14 b(louis)f(p)o(asteur)i(de)f(strasb)q

(ourg)362 2563 y(m.)g(guy-ren)o(\023)-20 b(e)13 b(p)o(errin,)h (directeur)i(de)e(th)o(\022)-20 b(ese,)362 2613 y(professeur)16 b(\022)-21 b(a)14 b(l'univ)o(ersit)o(\023)-20 b(e)13 b(louis)h(p)o(asteur)h(de)f(strasb)q(ourg)p eop %%page: 1 2 1 1 bop 165 195 a ft(remerciemen)n(ts)165 295 y fy(je)16 b(tiens)g(\022)-21 b(a)15 b(remercier)h(mm.)f(luc)g(boug)o(\023)-20 b(e)16 b(et)g(p)o(atrice)g(quin)o(ton)f(d'a)o(v)o(oir)f(accept)o(\023) -20 b(e)17 b(d')o(^)-20 b(etre)16 b(les)165 345 y(rapp)q(orteurs)i(de)g (cette)g(th)o(\022)-20 b(ese,)18 b(et)f(d'a)o(v)o(oir)e(p)q(ort)o(\023) -20 b(e)18 b(autan)o(t)f(d'in)o(t)o(\023)-20 b(er)o(^)g(et)17 b(\022)-21 b(a)16 b(ces)i(tra)o(v)n(aux.)e(je)h(re-)165 394 y(mercie)e(\023)-20 b(egalemen)o(t)16 b(m.)g(christian)g(lengauer,) h(qui)f(a)g(su,)h(malgr)o(\023)-20 b(e)14 b(l'obstacle)j(linguistique,) 165 444 y(examiner)c(cette)i(th)o(\022)-20 b(ese)16 b(a)o(v)o(ec)e(la)f (plus)h(grande)g(clairv)o(o)o(y)o(ance.)f(je)i(remercie)e(\023)-20 b(egalemen)o(t)13 b(mme)165 494 y(catherine)i(mongenet)f(d'a)o(v)o(oir) e(pr)o(\023)-20 b(esid)o(\023)g(e)15 b(ce)g(jury)m(.)227 594 y(je)e(ne)g(remercierai)f(jamais)d(assez)14 b(les)e(initiateurs)g (de)h(ce)g(tra)o(v)n(ail,)d(m.)h(eric)i(violard)e(et)h(m.)165 643 y(guy-ren)o(\023)-20 b(e)13 b(p)o(errin.)h(m.)f(violard,)f(a)o(v)o (ec)i(qui)f(j'ai)e(partag)o(\023)-20 b(e)14 b(ces)h(trois)e(ann)o(\023) -20 b(ees)15 b(de)f(rec)o(herc)o(he,)h(a)165 693 y(su)g(me)e(faire)h (pro\014ter)h(de)g(sa)f(rigueur)h(scien)o(ti\014que)g(remarquable,)e (et)h(de)h(son)g(en)o(thousiasme)165 743 y(p)q(our)g(ce)g(pro)r(jet.)g (je)g(remercie)g(de)g(tout)f(co)q(eur)i(m.)e(guy-ren)o(\023)-20 b(e)14 b(p)o(errin,)g(qui)g(a)f(\023)-20 b(et)o(\023)g(e)16 b(un)e(direc-)165 793 y(teur)k(de)g(th)o(\022)-20 b(ese)19 b(merv)o(eilleux.)d(il)h(a)g(su)h(user,)g(de)g(ses)g(grandes)h(qualit)o (\023)-20 b(es,)16 b(tan)o(t)i(scien)o(ti\014ques)165 843 y(qu'h)o(umaines,)d(p)q(our)i(m'encourager)g(lorsque)g(mon)f (scepticisme)h(prenait)h(le)f(dessus.)h(je)g(le)165 892 y(remercie)d(de)f(m'a)o(v)o(oir)e(fait)h(d)o(\023)-20 b(ecouvrir)15 b(la)e(rec)o(herc)o(he,)k(et)e(de)f(m'a)o(v)o(oir)e(d)o (\023)-20 b(emon)o(tr)o(\023)g(e)13 b(que)i(c')o(\023)-20 b(etait)165 942 y(passionnan)o(t.)227 1042 y(je)17 b(suis)g (reconnaissan)o(t)g(en)o(v)o(ers)h(tous)f(ceux,)f(qui,)g(de)h(pr)o (\022)-20 b(es)17 b(ou)f(de)h(loin,)e(m'on)o(t)f(souten)o(u)165 1092 y(duran)o(t)e(cette)h(p)o(\023)-20 b(erio)q(de.)11 b(je)h(remercie)g(particuli)o(\022)-20 b(eremen)o(t)11 b(les)h(mem)o(bres)e(de)i(l'icps,)e(p)q(our)i(leur)165 1142 y(grande)k(disp)q(oniblit)o(\023)-20 b(e,)15 b(et)i(leur)f (sympathie.)f(en\014n,)h(je)g(remercie)g(de)h(tout)f(co)q(eur)h(mes)f (amis)165 1191 y(pro)q(c)o(hes)i(et)f(ma)e(famill)o(e,)f(p)q(our)j (leur)f(soutien)h(constan)o(t)g(et)g(leur)g(in)o(\023)-20 b(ebranlable)16 b(foi)g(en)h(mon)165 1241 y(tra)o(v)n(ail.)p eop %%page: 1 3 1 2 bop 1824 269 a fq(1)75 731 y fp(t)-10 b(able)39 b(des)f(mati)m (\022)-56 b(eres)75 1002 y fo(1)42 b(in)o(tro)q(duction)1391 b(5)75 1107 y(2)60 b(d)o(\023)-25 b(e\014nition)19 b(du)e(formalisme)g fn(pei)1001 b fo(9)143 1165 y fq(2.1)46 b(in)o(tro)q(duction)16 b(\022)-23 b(a)15 b(la)g(programmation)f fn(pei)e fm(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)40 b fq(10)248 1224 y(2.1.1)50 b(les)16 b(c)o(hamps)f(de)h(donn)o(\023)-21 b(ees)43 b fm(:)23 b(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(10)248 1282 y(2.1.2)50 b(les)16 b(op)o(\023)-21 b(erations)14 b(et)h(l'op)o(\023)-21 b(erateur)14 b(de)i(sup)q(erp)q(osition)56 b fm(:)22

b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(11)248 1340 y(2.1.3)50 b(les)16 b(programmes)e fn(pei)23 b fm(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)40 b fq(13)143 1399 y(2.2)46 b(ob)s(jets)15 b(du)g(langage)42 b fm(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)40 b fq(17)143 1457 y(2.3)46 b(s)o(\023)-21 b(eman)o(tique)33 b fm(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(18)248 1515 y(2.3.1)50 b(s)o(\023)-21 b(eman)o(tique)15 b(des)h(op)o(\023)-21 b(erations)12 b fm(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(19)248 1574 y(2.3.2)50 b(s)o(\023)-21 b(eman)o(tique)15 b(de)h(la)f(sup)q(erp) q(osition)28 b fm(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(20)248 1632 y(2.3.3)50 b(s)o(\023)-21 b(eman)o(tique)15 b(des)g(\023)-21 b(equations)29 b fm(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(20)248 1690 y(2.3.4)50 b(equiv)m(alence)18 b(des)d(c)o(hamps)g(de)h(donn)o(\023)-21 b(ees)44 b fm(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)40 b fq(21)248 1749 y(2.3.5)50 b(in)o(terpr)o(\023)-21 b(etation)14 b(fonctionnelle)35 b fm(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(24)75 1854 y fo(3)i(ra\016nemen)o(t)17 b(et)h(abstraction)1041 b(27)143 1912 y fq(3.1)46 b(d)o(\023)-21 b(e\014nition)15 b(g)o(\023)-21 b(en)o(\023)g(erale)14 b(du)i(ra\016nemen)o(t)44 b fm(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(27)143 1970 y(3.2)46 b(ra\016nemen)o(t)15 b(des)g(\023)-21 b(enonc)o(\023)g(es)14 b fn(pei)43 b fm(:)22 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(28)248 2029 y(3.2.1)50 b(d)o(\023)-21 b(e\014nitions)45 b fm(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(28)248 2087 y(3.2.2)50 b(cas)15 b(particuliers)20 b fm(:)i(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:) h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(32)143 2145 y(3.3)46 b(calcul)16 b(de)g(ra\016nemen)o(t)d fm(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(34)143 2204 y(3.4)46 b(un)15 b(outil)h(visuel)h(p)q(our)f(la)f (conception)h(de)g(programmes)6 b(:)15 b fn(vpei)40 b fm(:)22 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(40)248 2262 y(3.4.1)50 b(pr)o(\023)-21 b(esen)o(tation)14 b(de)i(l'outil)30 b fm(:)22 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(40)248 2320 y(3.4.2)50 b(in)o(t)o(\023)-21 b(er)o(^)g(ets-limitations)40 b fm(:)22 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(41)143 2379 y(3.5)46 b(un)15 b(outil)h(p)q(our)g(le)g(ra\016nemen)o(t)e(de)i (programmes)k fm(:)i(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)40 b fq(42)75 2484 y fo(4)60 b(strat)o(\023)-25 b(egies)18 b(de)f(transformations)960 b(45)143 2542 y fq(4.1)46 b(t)l(ransformation)14 b(par)h(c)o(hangemen)o(t)g(de)g(base) 30 b fm(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)40 b fq(46)p eop %%page: 2 4 2 3 bop 75 269 a fq(2)1231 b fl(t)l(able)16 b(des)f(ma)l(ti)1732 257 y(\022)1726 269 y(eres)143 397 y fq(4.2)46 b(strat)o(\023)-21

b(egie)14 b(1)7 b(:)15 b(simpli\014cation)i(des)f(comm)o(unications)42 b fm(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) 40 b fq(48)248 454 y(4.2.1)50 b(princip)q(e)24 b fm(:)f(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:) g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(48)248 510 y(4.2.2)50 b(conditions)45 b fm(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(48)248 567 y(4.2.3)50 b(application)17 b(au)f(pro)q(duit)g(matrice-v)o(ecteur)44 b fm(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) 40 b fq(50)248 624 y(4.2.4)50 b(application)17 b(au)f(pro)q(duit)g(de)f (matrices)g(de)h(cannon)36 b fm(:)22 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)40 b fq(54)143 681 y(4.3)46 b(strat)o(\023)-21 b(egie)14 b(2)7 b(:)15 b(in)o(tro)q(duction)h(d'une)g(di\013usion)27 b fm(:)c(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)40 b fq(56)143 737 y(4.4)46 b(repr)o(\023)-21 b(esen)o(tation)15 b(du)g(probl)o(\022)-21 b(eme)15 b(en)h(deux)g (dimensions)43 b fm(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)40 b fq(58)248 794 y(4.4.1)50 b(regroup)q(emen)o(t)16 b(des)g(v)m(aleurs)g(sur)f(le)h(premier)g(plan)j fm(:)j(:)g(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(59)248 851 y(4.4.2)50 b(suppression)17 b(d'une)f(dimension)40 b fm(:)22 b(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(62)143 908 y(4.5)46 b(strat)o(\023)-21 b(egie)14 b(3)7 b(:)15 b(in)o(tro)q(duction)h(d'une)g(r)o(\023)-21 b(eduction)43 b fm(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(63)143 964 y(4.6)46 b(strat)o(\023)-21 b(egie)14 b(4)7 b(:)15 b(mo)q(di\014cation)h(des)g (alignemen)o(ts)41 b fm(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(68)248 1021 y(4.6.1)50 b(algorithme)16 b(initial)47 b fm(:)23 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)40 b fq(68)248 1078 y(4.6.2)50 b(algorithme)16 b(a)o(v)o(ec)f(placemen)o(t)h(am)o(\023)-21 b(elior)o(\023)g(e)31 b fm(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)40 b fq(70)75 1180 y fo(5)i fn(pei)17 b fo(et)h(les)g(langages)g (data-parall)o(\022)-25 b(el)q(es)885 b(77)143 1237 y fq(5.1)46 b(pr)o(\023)-21 b(esen)o(tation)14 b(d'hpf)41 b fm(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(78)248 1294 y(5.1.1)50 b(op)o(\023)-21 b(erations)15 b(parall)o(\022)-21 b(eles)19 b fm(:)j(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) 40 b fq(78)248 1351 y(5.1.2)50 b(in)o(trinsics)43 b fm(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(80)248 1407 y(5.1.3)50 b(alignemen)o(t)17 b(des)e(donn)o(\023)-21 b(ees)28 b fm(:)23 b(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:) g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(82)143 1464 y(5.2)46 b(di\013)o(\023)-21 b(erence)15 b(s)o(\023)-21 b(eman)o(tique)14 b(des)i(indices)26 b fm(:)c(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(83)143 1521 y(5.3)46 b(sc)o(h)o(\023)-21 b(ema)14 b(d'ensem)o(ble)i(du)g(m)o(\023)-21 b(ecanisme)15 b(de)h(traduction)45 b fm(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(84)143 1578 y(5.4)46 b(le)15 b(traducteur)g fk(pei2hpf)k fm(:)j(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(86)248 1634 y(5.4.1)50 b(f)l(orme)15 b(traduisible)i fm(:)22 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h

(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(86)248 1691 y(5.4.2)50 b(normalisation)16 b(a)o(v)m(an)o(t)e (traduction)24 b fm(:)e(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(88)248 1748 y(5.4.3)50 b(ordonnancemen)o(t)16 b(a)o(v)m(an)o(t)f(traduction)34 b fm(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)40 b fq(89)248 1805 y(5.4.4)50 b(synopsis)16 b(du)g(fonctionnemen)o(t)g(du)f(traducteur)d fm(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(90)248 1861 y(5.4.5)50 b(t)l(raduction)16 b(hpf)f(des)f(\023)-21 b(equations)15 b fn(pei)20 b fm(:)i(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(90)143 1918 y(5.5)46 b(exemple)16 b(1)7 b(:)14 b(\023)-21 b(elimination)16 b(de)g(gauss)25 b fm(:)d(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:) g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(99)143 1975 y(5.6)46 b(exemple)16 b(2)7 b(:)15 b fj(gaxpx)37 b fm(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)17 b fq(100)143 2032 y(5.7)46 b(adaptation)15 b(\022)-23 b(a)15 b(d'autres)f(langages)h(data-parall)o(\022)-21 b(eles)47 b fm(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)17 b fq(101)143 2088 y(5.8)46 b(p)o(ersp)q(ectiv)o(es)20 b fm(:)i(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)17 b fq(102)248 2145 y(5.8.1)50 b(t)l(raduction)16 b(des)f(di\013usions)i(par)e(des)g(alignemen)o(ts)25 b fm(:)d(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)17 b fq(102)248 2202 y(5.8.2)50 b(substitution)17 b(des)e(c)o(hamps)g (plac)o(\023)-21 b(es)15 b(par)g(les)h(c)o(hamps)f(en)o(tr)o(\023)-21 b(ee)40 b fm(:)23 b(:)f(:)h(:)f(:)g(:)h(:)f(:)17 b fq(103)248 2259 y(5.8.3)50 b(optimisation)17 b(des)e(traductions)h(des)f(r)o(\023) -21 b(ecurrences)35 b fm(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)17 b fq(103)248 2315 y(5.8.4)50 b(exemple)18 b fm(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) 17 b fq(104)143 2372 y(5.9)46 b(en)o(vironnemen)o(t)15 b(logiciel)j(autour)d(de)g fn(pei)44 b fm(:)22 b(:)h(:)f(:)g(:)h(:)f(:) g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)17 b fq(107)143 2429 y(5.10)23 b(t)l(ra)o(v)m(aux)15 b(relatifs)21 b fm(:)i(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)17 b fq(108)248 2486 y(5.10.1)27 b(con)o(texte)44 b fm(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)17 b fq(108)248 2542 y(5.10.2)27 b(comparaison)15 b(a)o(v)o(ec)g fn(alpha)25 b fm(:)d(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)17 b fq(109)p eop %%page: 3 5 3 4 bop 75 269 a fl(t)l(able)16 b(des)f(ma)l(ti)478 257 y(\022)472 269 y(eres)1232 b fq(3)75 397 y fo(6)42 b(conclusion)1376 b(113)75 499 y(a)28 b(preuv)o(es)16 b(des)h(propri)o(\023)-25 b(et)o(\023)g(es)1104 b(123)75 601 y(b)31 b(t)l(est)18 b(d')o(\023)-25 b(equiv)m(alence)17 b(forte)1082 b(127)p eop %%page: 4 6 4 5 bop 75 269 a fq(4)1231 b fl(t)l(able)16 b(des)f(ma)l(ti)1732 257 y(\022)1726 269 y(eres)p eop %%page: 5 7 5 6 bop 1824 269 a fq(5)75 718 y fi(chapitre)32 b(1)75

935 y fp(in)m(tro)s(duction)146 1168 y fq(duran)o(t)12 b(ces)i(dix)h(derni)o(\022)-21 b(eres)14 b(ann)o(\023)-21 b(ees,)13 b(l'id)o(\023)-21 b(ee)14 b(d'utiliser)h(des)f(mac)o(hines)g (parall)o(\022)-21 b(eles)15 b(p)q(our)f(e\013ectuer)75 1224 y(les)22 b(traitemen)o(ts)f(informatiques)h(les)h(plus)f (complexes)h(s'est)e(progressiv)o(emen)o(t)g(imp)q(os)o(\023)-21 b(ee)21 b(et,)h(au-)75 1281 y(jourd'h)o(ui,)c(les)h(grands)e (constructeurs)h(d'ordinateurs)g(prop)q(osen)o(t)g(tous)f(des)h(mac)o (hines)h(parall)o(\022)-21 b(eles)75 1337 y(p)q(our)14 b(le)g(calcul)h(in)o(tensif.)g(ces)e(mac)o(hines,)h(p)q(ouv)m(an)o(t)g (inclure)h(des)f(cen)o(taines)h(de)f(pro)q(cesseurs)g(et)f(don)o(t)75 1394 y(la)18 b(puissance)h(th)o(\023)-21 b(eorique)18 b(atteindra)f(bien)o(t^)-23 b(ot)18 b(le)h(t)o(\023)-21 b(era\015ops,)16 b(sem)o(blen)o(t)i(bien)g(^)-21 b(etre)17 b(la)h(solution)h(aux)75 1450 y(limites)e(tec)o(hnologiques)f(de)g (l'in)o(t)o(\023)-21 b(egration)14 b(des)i(pro)q(cesseurs)f(en)o (trevues)h(il)g(y)f(a)g(quelques)i(ann)o(\023)-21 b(ees.)146 1516 y(cep)q(endan)o(t,)12 b(si)g(l'id)o(\023)-21 b(ee)13 b(de)f(faire)h(co)q(op)o(\023)-21 b(erer)11 b(plusieurs)j(pro)q (cesseurs)e(sur)g(la)g(r)o(\023)-21 b(esolution)12 b(d'un)g(m)o(^)-21 b(eme)75 1573 y(probl)o(\022)g(eme)13 b(sem)o(ble)i(naturelle,)f(l')o (\023)-21 b(ecriture)14 b(des)g(applications)h(p)q(our)f(ces)g(mac)o (hines)g(est)f(une)h(t^)-23 b(ac)o(he)14 b(dif-)75 1629 y(\014cile.)g(en)e(plus)i(de)e(la)h(co)q(ordination)g(des)g (instructions)g(dans)f(le)h(temps,)f(comme)g(en)h(programmation)75 1686 y(s)o(\023)-21 b(equen)o(tielle,)16 b(le)f(concepteur)h(de)f (l'algorithme)g(parall)o(\022)-21 b(ele)16 b(doit)f(organiser)g(l'ex)o (\023)-21 b(ecution)15 b(des)g(instruc-)75 1742 y(tions)21 b(dans)f(l'espace,)h(c'est-\022)-23 b(a-dire)22 b(r)o(\023)-21 b(epartir)19 b(ces)i(instructions,)g(et)e(\023)-21 b(ev)o(en)o (tuellemen)o(t)22 b(les)f(donn)o(\023)-21 b(ees)75 1799 y(qu'elles)16 b(traiten)o(t,)d(sur)h(les)g(di\013)o(\023)-21 b(eren)o(ts)14 b(pro)q(cesseurs.)g(on)h(imagine)g(donc)f(sans)g(p)q (eine)i(la)e(di\016cult)o(\023)-21 b(e)15 b(de)75 1855 y(concev)o(oir)k(de)f(telles)i(applications.)f(prendre)g(en)g(compte)f (le)h(crit)o(\022)-21 b(ere)17 b(de)i(la)g(p)q(erformance)f(de)h(leur) 75 1911 y(ex)o(\023)-21 b(ecution)14 b(complique)h(encore)f(cette)g(t^) -23 b(ac)o(he.)13 b(en)h(e\013et,)f(les)i(pro)q(cesseurs)f(comm)o (uniquan)o(t)g(en)o(tre)f(eux)75 1968 y(par)f(un)i(m)o(\023)-21 b(ecanisme)12 b(len)o(t)h(par)g(rapp)q(ort)f(aux)h(acc)o(\022)-21 b(es)12 b(dans)h(leurs)g(m)o(\023)-21 b(emoires)12 b(priv)o(\023)-21 b(ees,)12 b(on)h(constate)f(des)75 2024 y(d)o(\023)-21 b(egradations)17 b(tr)o(\022)-21 b(es)16 b(imp)q(ortan)o(tes)i(des)h(p) q(erformances)f(d)o(\022)-21 b(es)17 b(que)h(l'application)i(engendre)f (de)g(nom-)75 2081 y(breuses)k(comm)o(unications)f(in)o(ter-pro)q (cesseurs.)h(l'ob)s(jectif)f(des)g(rec)o(herc)o(hes)g(actuelles)i(est)e (donc,)75 2137 y(d'une)d(part)e(d'in)o(v)o(en)o(ter)i(un)f(mo)o(y)o(en) g(d'exploiter)h(e\016cacemen)o(t)f(ces)h(mac)o(hines,)f(c'est-\022)-23 b(a-dire)19 b(de)g(se)75 2194 y(rappro)q(c)o(her,)g(p)q(our)h(c)o (haque)f(application,)i(de)f(la)f(puissance)i(th)o(\023)-21 b(eorique)19 b(maximale)h(o\013erte)e(par)h(la)75 2250 y(mac)o(hine,)i(et)g(d'autre)f(part)g(de)h(p)q(ouv)o(oir)g(concev)o (oir,)g(v)o(\023)-21 b(eri\014er)20 b(et)h(main)o(tenir)g(les)g (programmes)f(le)75 2307 y(plus)e(facilemen)o(t)f(p)q(ossible.)h(ces)f (probl)o(\022)-21 b(emes)16 b(on)o(t)f(\023)-21 b(et)o(\023)g(e)13 b(\023)-21 b(etudi)o(\023)g(es)16 b(dans)h(le)g(cadre)g(s)o(\023)-21 b(equen)o(tiel)17 b(et,)f(il)i(est)75 2363 y(n)o(\023)-21 b(ecessaire)15 b(d'y)g(app)q(orter)f(\023)-21 b(egalemen)o(t)14 b(une)i(r)o(\023)-21 b(ep)q(onse)15 b(p)q(our)h(la)f(programmation)f (parall)o(\022)-21 b(ele.)146 2486 y(les)18 b(v)o(oies)g(explor)o(\023)

-21 b(ees)18 b(p)q(our)g(l'exploitation)h(de)f(ces)g(mac)o(hines)h(son) o(t)e(de)h(deux)h(natures)7 b(:)17 b(la)i(pa-)75 2542 y(rall)o(\023)-21 b(elisation)23 b(automatique)e(de)h(progammes)f(s)o (\023)-21 b(equen)o(tiels)22 b(et)g(l'utilisation)i(de)e(mo)q(d)o(\022) -21 b(eles)22 b(de)g(pro-)p eop %%page: 6 8 6 7 bop 75 269 a fq(6)1051 b fl(chapitre)16 b(1.)29 b(intr)o(oduction) 75 397 y fq(grammation)16 b(adapt)o(\023)-21 b(es)15 b(aux)i(mac)o(hines)h(parall)o(\022)-21 b(eles.)17 b(la)g(premi)o(\022) -21 b(ere)17 b(v)o(oie)g(est)e(\023)-21 b(economiquemen)o(t)17 b(tr)o(\022)-21 b(es)75 453 y(prometteuse,)13 b(\023)-21 b(etan)o(t)14 b(donn)o(\023)-21 b(e)14 b(l'immense)i(quan)o(tit)o(\023) -21 b(e)15 b(d'applications)h(d)o(\023)-21 b(ej\022)e(a)13 b(\023)-21 b(ecrites)15 b(dans)g(les)h(mo)q(d)o(\022)-21 b(eles)75 510 y(de)13 b(programmation)e(s)o(\023)-21 b(equen)o(tiels.)12 b(malheureusemen)o(t,)h(si)f(on)g(sait)g(aujourd'h) o(ui)h(extraire)f(automati-)75 566 y(quemen)o(t)i(du)f(parall)o(\023) -21 b(elisme)15 b(des)f(nids)g(de)g(b)q(oucles,)g(les)g(structures)f (it)o(\023)-21 b(erativ)o(es)13 b(dynamiques)h(\(comme)75 623 y(la)i(structure)e fk(while)p fq([24)o(]\))g(p)q(osen)o(t)i (toujours)e(de)i(s)o(\023)-21 b(erieux)15 b(probl)o(\022)-21 b(emes.)14 b(les)i(limitations)h(actuelles)f(de)75 679 y(ces)d(compilateurs)h(parall)o(\023)-21 b(eliseurs)15 b(fon)o(t)d(qu'ils)i(ne)g(p)q(euv)o(en)o(t)f(pr)o(\023)-21 b(etendre)13 b(p)q(our)g(l'instan)o(t,)f(^)-21 b(etre)12 b(une)i(so-)75 736 y(lution)e(unique)g(satisfaisan)o(te)e(p)q(our)h (les)g(utilisateurs.)g(concernan)o(t)f(les)i(mo)q(d)o(\022)-21 b(eles)10 b(de)h(programmation,)75 792 y(de)k(nom)o(breuses)h(prop)q (ositions)f(on)o(t)f(\023)-21 b(et)o(\023)g(e)13 b(faites,)h(souv)o(en) o(t)h(inspir)o(\023)-21 b(ees)16 b(de)f(l'arc)o(hitecture)h(sous-jacen) o(te)75 849 y(de)g(la)f(mac)o(hine.)h(resp)q(ectan)o(t)f(la)h (classi\014cation)g(de)g(flynn[19],)e(les)i(langages)f(les)h(plus)g(r)o (\023)-21 b(epandus)15 b(se)75 905 y(scinden)o(t)e(en)g(deux)f(cat)o (\023)-21 b(egories)7 b(:)k(les)i(langages)f(\022)-23 b(a)12 b fj(p)n(ar)n(al)r(l)o(\023)-22 b(elisme)12 b(de)i(c)n(ontr^)-23 b(ole)p fq(,)11 b(calquan)o(t)h(l'arc)o(hitecture)75 962 y(mimd-dm,)e(et)i(les)h(langages)e(\022)-23 b(a)12 b fj(p)n(ar)n(al)r(l)o(\023)-22 b(elisme)12 b(de)h(donn)o(\023)-22 b(e)n(es)10 b fq(utilis)o(\023)-21 b(es)13 b(initialemen)o(t)h(sur)e (des)g(mac)o(hines)75 1018 y(simd.)146 1074 y(les)17 b(programmes)g(\022)-23 b(a)17 b(parall)o(\023)-21 b(elisme)18 b(de)g(con)o(tr^)-23 b(ole)17 b(son)o(t)g(constitu)o(\023)-21 b(es)17 b(de)g(plusieurs)j(pro)q(cessus)d(s)o(\023)-21 b(e-)75 1131 y(quen)o(tiels)19 b(s'ex)o(\023)-21 b(ecutan)o(t)16 b(libremen)o(t)j(sur)f(les)g(di\013)o(\023)-21 b(eren)o(ts)17 b(pro)q(cesseurs,)h(les)g(sync)o(hronisations)h(n)o(\023)-21 b(eces-)75 1187 y(saires)17 b(en)o(tre)g(pro)q(cessus)h(se)f(faisan)o (t)g(par)e(\023)-21 b(ec)o(hanges)17 b(explicites)i(de)f(message.)e (c'est)g(aujourd'h)o(ui)i(le)75 1244 y(mo)q(d)o(\022)-21 b(ele)17 b(le)i(plus)f(emplo)o(y)o(\023)-21 b(e,)17 b(notammen)o(t)f (\022)-23 b(a)17 b(tra)o(v)o(ers)f(les)i(biblioth)o(\022)-21 b(eques)19 b(pvm[20)o(])e(et)g(mpi[42)o(].)g(la)75 1300 y(raison)e(de)h(ce)g(succ)o(\022)-21 b(es)15 b(tien)o(t)g(certainemen)o (t)h(\022)-23 b(a)15 b(leur)h(disp)q(onibil)q(i)q(t)o(\023)-21 b(e)17 b(sur)e(tous)g(les)h(t)o(yp)q(es)f(de)h(mac)o(hines,)75 1357 y(y)f(compris)h(sur)f(les)g(r)o(\023)-21 b(eseaux)15 b(de)g(stations)g(de)g(tra)o(v)m(ail,)g(ce)h(qui)g(a)f(fait)g(d'elles)h (un)g(standard)e fj(de)j(facto)p fq(.)146 1413 y(les)c(programmes)e (\022)-23 b(a)12 b(parall)o(\023)-21 b(elisme)14 b(de)f(donn)o(\023)-21 b(ees,)12 b(ou)g(data-parall)o(\022)-21 b(eles,)13 b(extraien)o(t)f(le)

h(parall)o(\023)-21 b(elisme)75 1470 y(de)16 b(la)g(structure)g(des)g (donn)o(\023)-21 b(ees,)15 b(qui)i(son)o(t)e(m)o(\023)-21 b(emoris)o(\023)g(ees)14 b(dans)i(des)g fj(variables)g(p)n(ar)n(al)r(l) o(\022)-22 b(eles)p fq(.)14 b(l'applica-)75 1526 y(tion)19 b(d'une)g(instruction)h(p)q(ortan)o(t)e(sur)g(une)i(v)m(ariable)g (parall)o(\022)-21 b(ele,)19 b(a)f(p)q(our)h(e\013et)f(d'ex)o(\023)-21 b(ecuter)18 b(en)i(pa-)75 1583 y(rall)o(\022)-21 b(ele)16 b(l'instruction)h(sur)e(c)o(haque)g(\023)-21 b(el)o(\023)g(emen)o(t)14 b(de)i(la)f(v)m(ariable.)i(le)f(programme)e(appara)-5 b(^)-18 b(\020t)15 b(comme)g(un)75 1639 y(seul)21 b(et)e(m)o(^)-21 b(eme)19 b(co)q(de)h(s)o(\023)-21 b(equen)o(tiel)21 b(agissan)o(t)e (sur)g(des)h(v)m(ariables)i(d'un)e(t)o(yp)q(e)f(nouv)o(eau.)h(ce)g(mo)q (d)o(\022)-21 b(ele)75 1695 y(de)17 b(programmation,)e(bien)j(que)f(tr) o(\022)-21 b(es)16 b(adapt)o(\023)-21 b(e)15 b(aux)i(structures)f(de)h (donn)o(\023)-21 b(ees)17 b(r)o(\023)-21 b(eguli)o(\022)g(eres,)15 b(couvre)i(de)75 1752 y(larges)j(domaines)g(d'applications)h([26)o(].)e (les)i(comm)o(unications)f(in)o(ter-pro)q(cesseurs)h(requises)f(son)o (t)75 1808 y(cac)o(h)o(\023)-21 b(ees)13 b(\022)-23 b(a)13 b(l'utilisateur,)h(et)f(la)h(t^)-23 b(ac)o(he)12 b(de)i(r)o(\023)-21 b(epartir)12 b(les)h(\023)-21 b(el)o(\023)g(emen)o(ts)12 b(des)h(v)m(ariables)i(parall)o(\022)-21 b(eles)14 b(ainsi)g(que)75 1865 y(la)j(g)o(\023)-21 b(en)o(\023)g(eration)15 b(des)h(comm)o (unications)i(n)o(\023)-21 b(ecessaires)16 b(incom)o(b)q(e)i(au)e (compilateur.)h(il)h(faut)e(ici)i(citer)f(le)75 1921 y(high)d(p)o(erformance)f(f)l(ortran)f(\(hpf\))h([27)o(])g(qui)h(a)f(p) q(our)h(ob)s(jectif)f(de)h(s'imp)q(oser)g(comme)f(le)h(standard)75 1978 y(en)j(mati)o(\022)-21 b(ere)16 b(de)h(langage)g(data-parall)o (\022)-21 b(ele,)17 b(car)g(d)o(\023)-21 b(e\014ni)17 b(lors)g(d'un)g(forum)f(rassem)o(blan)o(t)h(utilisateurs,)75 2034 y(c)o(herc)o(heurs)k(et)g(constructeurs.)f(cep)q(endan)o(t,)h(la)g (norme)g(d)o(\023)-21 b(e\014nie)21 b(n'a)f(pas)h(p)q(ermis)g(de)h (mettre)e(au)75 2091 y(p)q(oin)o(t)15 b(\022)-23 b(a)15 b(ce)g(jour,)f(des)h(compilateurs)g(don)o(t)g(les)g(p)q(erformances)g (con)o(v)m(aincraien)o(t)h(les)f(utilisateurs.)h(le)75 2147 y(fait)g(que)h(les)g(comm)o(unications)g(soien)o(t)f(masqu)o(\023) -21 b(ees)16 b(au)g(programmeur)f(par)h(exemple,)h(rend)g(di\016cile)75 2204 y(la)h(g)o(\023)-21 b(en)o(\023)g(eration)17 b(d'un)h(co)q(de)h (e\016cace)f(en)h(terme)f(de)g(comm)o(unications.)h(cette)e(lacune)j (est)e(aussi)g(un)75 2260 y(argumen)o(t)c(qui)i(fait)g(p)q(enc)o(her)g (le)g(c)o(hoix)f(des)h(utilisateurs)h(v)o(ers)d(pvm.)146 2373 y(p)o(ourtan)o(t,)e(ce)k(mo)q(d)o(\022)-21 b(ele)14 b(p)q(oss)o(\022)-21 b(ede)15 b(\022)-23 b(a)14 b(nos)h(y)o(eux)g(des)g (qualit)o(\023)-21 b(es)15 b(in)o(t)o(\023)-21 b(eressan)o(tes)13 b(par)i(rapp)q(ort)f(au)h(mo-)75 2429 y(d)o(\022)-21 b(ele)16 b(\022)-23 b(a)15 b(parall)o(\023)-21 b(elisme)17 b(de)g(con)o(tr^)-23 b(ole,)15 b(notammen)o(t)g(en)h(terme)f(de)i (clart)o(\023)-21 b(e)15 b(du)h(co)q(de,)g(de)g(p)q(ortabilit)o(\023) -21 b(e,)16 b(et)75 2486 y(d'abstraction)f(par)f(rapp)q(ort)h(au)g(mo)q (d)o(\022)-21 b(ele)15 b(d'ex)o(\023)-21 b(ecution.)15 b(le)h(fait)f(que)g(ce)h(mo)q(d)o(\022)-21 b(ele)15 b(soit)g(sync)o (hrone)h(et)75 2542 y(d)o(\023)-21 b(eterministe)16 b(facilite)h(aussi) e(b)q(eaucoup)i(la)f(compr)o(\023)-21 b(ehension)15 b(du)h(comp)q (ortemen)o(t)f(des)h(programmes)p eop %%page: 7 9 7 8 bop 1824 269 a fq(7)74 397 y(\023)-21 b(ecrits.)19 b(il)h(subsiste)h(toutefois)e(des)h(questions)g(d)o(\023)-21 b(elicates)20 b(concernan)o(t)f(la)h(ma)-5 b(^)-18 b(\020trise)20 b(du)g(mo)q(d)o(\022)-21 b(ele)20 b(de)75 453 y(programmation,)15 b(la)i(transformation)e(et)h(la)h(preuv)o(e)g(des)g(programmes.)e(le)i (formalisme)f fn(pei)h fq(pro-)75 510 y(p)q(os)o(\023)-21

b(e)11 b(par)g([56)o(])g(ten)o(te)g(d'app)q(orter)f(des)i(solutions)g (\022)-23 b(a)11 b(ces)g(probl)o(\022)-21 b(emes.)11 b(nous)g(mon)o(trerons)g(qu'il)h(p)q(oss)o(\022)-21 b(ede)75 566 y(l'essen)o(tiel)14 b(des)f(caract)o(\023)-21 b(eristiques)11 b(du)i(mo)q(d)o(\022)-21 b(ele)13 b(data-parall)o(\022)-21 b(ele,)12 b(et)g(p)q(eut)g(^)-21 b(etre)11 b(utilis)o(\023)-21 b(e)14 b(p)q(our)e(mo)q(d)o(\023)-21 b(eliser)75 623 y(les)14 b(programmes)e(\023)-21 b(ecrits)12 b(dans)i(des)g(langages)f (data-parall)o(\022)-21 b(eles.)14 b(a)f(c^)-23 b(ot)o(\023)i(e)12 b(d'autres)h(tra)o(v)m(aux)g(sur)h(la)f(s)o(\023)-21 b(e-)75 679 y(man)o(tique)13 b(et)f(la)g(preuv)o(e)h(des)f(programmes)g (data-parall)o(\022)-21 b(eles)12 b(\()p fj(cf.)g fq([5)o(])g(par)g (exemple\),)h fn(pei)f fq(fournit)g(un)75 736 y(cadre)i(formel)f(p)q (our)h(l'expression)h(de)f(ces)g(programmes,)e(dans)i(la)g(lign)o(\023) -21 b(ee)14 b(des)g(langages)f(d')o(\023)-21 b(equations)75 792 y(r)o(\023)g(ecurren)o(tes)10 b(comme)h fn(alpha)p fq([39])g(ou)g fn(cr)m(yst)m(al)p fq([12)o(].)f(gr^)-23 b(ace)11 b(\022)-23 b(a)11 b(ce)h(supp)q(ort)f(formel,)g(d)o(\023)-21 b(e\014nissan)o(t)11 b(clai-)75 849 y(remen)o(t)j(la)h(s)o(\023)-21 b(eman)o(tique)14 b(des)h(op)o(\023)-21 b(erations,)13 b(il)j(devien)o(t)g(p)q(ossible)g(de)f(raisonner)g(sur)g(les)g (programmes.)75 905 y(une)h(application)i(in)o(t)o(\023)-21 b(eressan)o(te)15 b(est)g(par)h(exemple)h(un)f(con)o(tr^)-23 b(oleur)16 b(de)g(t)o(yp)q(e)g(v)o(\023)-21 b(eri\014an)o(t)15 b(que)i(les)f(op)o(\023)-21 b(e-)75 962 y(rations)18 b(son)o(t)g(appliqu)o(\023)-21 b(ees)20 b(sur)f(des)f(domaines)i(coh)o (\023)-21 b(eren)o(ts.)17 b(mais)h(l'app)q(ort)h(le)g(plus)h (signi\014catif)g(de)75 1018 y fn(pei)15 b fq(est)g(certainemen)o(t)h (la)f(p)q(ossiblit)o(\023)-21 b(e)16 b(de)g(transformer)e(les)i (programmes,)e(sur)h(la)g(base)g(d'un)h(calcul)75 1074 y(de)g(ra\016nemen)o(t)g(d)o(\023)-21 b(e\014ni)16 b(\022)-23 b(a)16 b(partir)g(de)g(la)g(s)o(\023)-21 b(eman)o(tique)16 b(des)g(op)o(\023)-21 b(erations)15 b(du)h(langage.)g(ce)f(pro)q(c)o (\023)-21 b(ed)o(\023)g(e)15 b(de)75 1131 y(ra\016nemen)o(t)e(p)q(eut)i (servir)f(en)o(tre)g(autres,)f(\022)-23 b(a)13 b(mon)o(trer)g(l')o (\023)-21 b(equiv)m(alence)16 b(de)e(di\013)o(\023)-21 b(eren)o(ts)13 b(programmes,)g(ou)75 1187 y(d)o(\023)-21 b(eriv)o(er)11 b(des)h(solutions)g(di\013)o(\023)-21 b(eren)o(tes)10 b(\022)-23 b(a)12 b(partir)f(d'un)g(programme)g (initial.)i(ces)e(asp)q(ects)h(nous)f(sem)o(blen)o(t)74 1244 y(^)-21 b(etre)17 b(des)h(caract)o(\023)-21 b(eristiques)17 b(in)o(t)o(\023)-21 b(eressan)o(tes,)17 b(v)o(oire)h(indisp)q(ensables) j(p)q(our)d(le)h(g)o(\023)-21 b(enie)18 b(logiciel)i(dans)e(le)75 1300 y(domaine)e(de)f(l'algorithmique)i(parall)o(\022)-21 b(ele.)16 b(quan)o(t)f(au)g(placemen)o(t)h(des)g(donn)o(\023)-21 b(ees,)14 b(il)j(est)e(explicite)i(en)75 1357 y fn(pei)g fq(et)h(fait)f(partie)h(in)o(t)o(\023)-21 b(egran)o(te)16 b(du)i(programme.)e(les)i(transformations)f(que)h(l'on)f(p)q(eut)i (e\013ectuer)75 1413 y(sur)13 b(un)g(programme)f(mo)q(di\014en)o(t)i (par)e(cons)o(\023)-21 b(equen)o(t)13 b(ce)g(placemen)o(t)h(des)f(donn) o(\023)-21 b(ees)7 b(;)13 b(cette)f(mo)q(di\014cation)75 1470 y(du)20 b(placemen)o(t)g(constitue)g(d'ailleurs)h(souv)o(en)o(t)e (une)h(motiv)m(ation)g(\022)-23 b(a)19 b(part)g(en)o(ti)o(\022)-21 b(ere)19 b(p)q(our)g(ten)o(ter)g(de)75 1526 y(trouv)o(er)14 b(un)i(programme)e(plus)i(e\016cace)g(apr)o(\022)-21 b(es)14 b(transformation.)146 1583 y(les)h(p)q(ossibilit)o(\023)-21 b(es)17 b(qu'app)q(orte)d fn(pei)h fq(concernen)o(t)g(donc)h(pleinemen) o(t)g(le)g(probl)o(\022)-21 b(eme)15 b(de)g(l'exploita-)75 1639 y(tion)g(e\016cace)g(des)g(mac)o(hines)h(parall)o(\022)-21 b(eles)14 b(\023)-21 b(ev)o(o)q(qu)o(\023)g(e)13 b(pr)o(\023)-21

b(ec)o(\023)g(edemmen)o(t.)13 b(l'ob)s(jectif)i(est)g(de)g(faire)g (pro\014ter)75 1695 y(l'utilisateur)22 b(de)f(ce)g(formalisme,)g(et)g (de)g(l'assister)f(\022)-23 b(a)21 b(tra)o(v)o(ers)e(des)i(outils,)g (qui)h(\022)-23 b(a)20 b(terme)g(doiv)o(en)o(t)75 1752 y(automatiser)d(le)h(plus)g(de)g(c)o(hoses)g(p)q(ossibles.)h(dans)e (cette)g(th)o(\022)-21 b(ese,)16 b(nous)i(essaierons)g(de)g(mon)o(trer) e(ce)75 1808 y(que)j(p)q(ourrait)e(^)-21 b(etre)17 b(un)i(en)o (vironnemen)o(t)g(logiciel)i(de)d(conception)i(de)e(programmes)g (parall)o(\022)-21 b(eles)18 b(re-)75 1865 y(p)q(osan)o(t)c(sur)h(le)h (formalisme)f fn(pei)p fq(.)f(cet)h(en)o(vironnmen)o(t)g(doit)g (inclure)i(les)e(\023)-21 b(etap)q(es)14 b(de)h(conception)h(des)75 1921 y(programmes,)e(de)h(transformation,)f(et)h(en\014n)h(celle)h(de)f (la)f(g)o(\023)-21 b(en)o(\023)g(eration)13 b(de)j(co)q(de)g (data-parall)o(\022)-21 b(ele.)146 2034 y(le)19 b(premier)h(c)o (hapitre)f(exp)q(ose)g(les)h(princip)q(es)h(fondamen)o(taux)e(du)g (formalisme,)g(ainsi)h(que)f(les)75 2091 y(asp)q(ects)g(syn)o(taxiques) g(\022)-23 b(a)19 b(tra)o(v)o(ers)e(quelques)k(exemples)f(simples.)g (suit)g(dans)f(un)g(second)h(c)o(hapitre,)75 2147 y(une)e(d)o(\023)-21 b(e\014nition)18 b(des)f(r)o(\022)-21 b(egles)16 b(et)h(du)h(calcul)g (de)g(ra\016nemen)o(t)e(tels)i(qu'ils)g(son)o(t)e(d)o(\023)-21 b(e\014nis)18 b(en)f fn(pei)p fq(.)g(nous)75 2204 y(mon)o(trerons)h (aussi)h(dans)g(ce)g(c)o(hapitre)h(les)f(protot)o(yp)q(es)f(d'outils)i (qui)f(p)q(euv)o(en)o(t)g(^)-21 b(etre)17 b(asso)q(ci)o(\023)-21 b(es)19 b(\022)-23 b(a)18 b(la)75 2260 y(construction)d(des)h (programmes)e(et)h(\022)-23 b(a)15 b(leur)h(ra\016nemen)o(t.)146 2316 y(le)i(troisi)o(\022)-21 b(eme)17 b(c)o(hapitre)h(illustre)h (l'utilisation)h(du)e(calcul)h(de)f(ra\016nemen)o(t)g(p)q(our)g (e\013ectuer)f(des)75 2373 y(transformations)e(plus)i(globales)g(sur)f (un)h(programme.)e(il)i(s'agit)e(en)i(fait)f(de)h(l'application)h(de)e (plu-)75 2429 y(sieurs)h(r)o(\022)-21 b(egles)16 b(de)h(ra\016nemen)o (t)f(selon)i(un)f(sc)o(h)o(\023)-21 b(ema)15 b(se)i(pr)o(\023)-21 b(esen)o(tan)o(t)15 b(fr)o(\023)-21 b(equemmen)o(t.)15 b(nous)h(quali\014ons)75 2486 y(ces)f(transformations)f(de)i fj(str)n(at)o(\023)-22 b(e)n(gies)14 b fq(et)h(nous)g(les)h(emplo)o(y)o (ons)f(sur)g(un)h(exemple.)146 2542 y(le)k(quatri)o(\022)-21 b(eme)18 b(c)o(hapitre)i(sera)f(consacr)o(\023)-21 b(e)19 b(\022)-23 b(a)19 b(l'outil)h(de)g(traduction)g(de)g fn(pei)f fq(v)o(ers)g(hpf.)g(nous)p eop %%page: 8 10 8 9 bop 75 269 a fq(8)1051 b fl(chapitre)16 b(1.)29 b(intr)o(oduction) 75 397 y fq(exp)q(osons)16 b(ici)g(les)g(m)o(\023)-21 b(ecanismes)15 b(p)q(ermettan)o(t)g(de)g(passer)h(d'un)e(\023)-21 b(enonc)o(\023)g(e)13 b(\023)-21 b(equationnel)16 b fn(pei)f fq(\022)-23 b(a)15 b(un)h(pro-)75 453 y(gramme)d(imp)o(\023)-21 b(eratif)13 b(data-parall)o(\022)-21 b(ele,)14 b(et)f(les)i (restrictions)f(imp)q(os)o(\023)-21 b(ees)13 b(sur)h(ces)f(\023)-21 b(enonc)o(\023)g(es)12 b(p)q(our)i(p)q(ouv)o(oir)75 510 y(les)i(traduire.)g(nous)g(mon)o(trons)e(ensuite)j(ce)f(qui)g(a)f(\023) -21 b(et)o(\023)g(e)13 b(implan)o(t)o(\023)-21 b(e)16 b(dans)g(l'outil)h(actuel.)f(en\014n,)f(nous)75 566 y(prop)q(osons)i (quelques)i(pistes)g(p)q(our)f(am)o(\023)-21 b(eliorer)17 b(ce)h(traducteur)f(dans)h(le)g(but)g(de)g(pro\014ter)f(de)h(la)g(s)o (\023)-21 b(e-)75 623 y(man)o(tique)19 b(particuli)o(\022)-21 b(ere)20 b(d'hpf.)e(le)h(langage)f(hpf)h(p)q(oss)o(\022)-21 b(ede)18 b(la)h(particularit)o(\023)-21 b(e)19 b(par)g(rapp)q(ort)f (aux)75 679 y(autres)c(langages)g(data-parall)o(\022)-21 b(eles,)15 b(d')o(^)-21 b(etre)13 b(insensible,)k(du)e(p)q(oin)o(t)g (de)g(vue)f(de)h(la)g(correction)g(du)g(pro-)75 736 y(gramme,)d(au)i (placemen)o(t)g(des)f(donn)o(\023)-21 b(ees.)13 b(ceci)h(p)q(ermet)g (d')o(\023)-21 b(ecrire)13 b(des)h(algorithmes)g(don)o(t)f(le)h(texte)f

(est)75 792 y(pro)q(c)o(he)g(du)f(programme)f(s)o(\023)-21 b(equen)o(tiel.)13 b(cette)f(caract)o(\023)-21 b(eristique)12 b(para)-5 b(^)-18 b(\020t)12 b(in)o(t)o(\023)-21 b(eressan)o(te)11 b(p)q(our)h(la)h(v)o(\023)-21 b(eri\014ca-)75 849 y(tion)13 b(in)o(tuitiv)o(e)i(de)e(la)h(correction)f(du)g(programme,)f(par)h (simple)h(comparaison)f(a)o(v)o(ec)g(les)g(algorithmes)75 905 y(s)o(\023)-21 b(equen)o(tiels)16 b(existan)o(ts.)146 962 y(en)f(conclusion,)i(nous)f(repla\030)-20 b(cons)17 b fn(pei)e fq(dans)h(le)g(con)o(texte)f(des)h(tra)o(v)m(aux)f (comparables,)h(et)f(nous)75 1018 y(exp)q(osons)22 b(les)h (particularit)o(\023)-21 b(es)22 b(de)g(ce)g(langage.)g(nous)g (soulignons)h(l'in)o(t)o(\023)-21 b(er)o(^)g(et)20 b(de)i(ce)h(t)o(yp)q (e)f(de)g(for-)75 1074 y(malisme,)f(en)h(rapp)q(elan)o(t)f(les)h(tec)o (hniques)g(de)g(transformations)d(d)o(\023)-21 b(ev)o(elopp)o(\023)g (ees)21 b(dans)g(le)h(troisi)o(\022)-21 b(eme)75 1131 y(c)o(hapitre.)14 b(nous)g(insistons)h(sur)g(la)f(n)o(\023)-21 b(ecessit)o(\023)g(e)13 b(de)i(disp)q(oser)g(d'outils)g(p)q(our)f (manipuler)i(un)f(tel)f(forma-)75 1187 y(lisme,)k(et)f(nous)h(a)o(v)m (an\030)-20 b(cons)17 b(des)h(id)o(\023)-21 b(ees)17 b(de)h(fonctionnalit)o(\023)-21 b(es)18 b(suppl)o(\023)-21 b(emen)o(taires)18 b(que)g(nous)f(p)q(ourrions)75 1244 y(in)o(t)o(\023)-21 b(egrer)14 b(\022)-23 b(a)15 b(ces)h(outils.)f (nous)g(parlons)g(\023)-21 b(egalemen)o(t)14 b(des)i(ob)s(jectifs)f (vis)o(\023)-21 b(es)14 b(a)o(v)o(ec)h(la)h(traduction)f(v)o(ers)g(le) 75 1300 y(langage)g(hpf,)g(et)g(nous)g(concluons)h(sur)f(les)h(am)o (\023)-21 b(eliorations)15 b(p)q(ossibles)i(de)f(cette)f(traduction.)p eop %%page: 9 11 9 10 bop 1824 269 a fq(9)75 708 y fi(chapitre)32 b(2)75 916 y fp(d)m(\023)-56 b(e\014nition)39 b(du)f(formalisme)f fh(pei)146 1138 y fq(depuis)16 b(quelques)h(ann)o(\023)-21 b(ees,)15 b(un)h(certain)g(nom)o(bre)f(de)h(tra)o(v)m(aux)f(sur)h (l'analyse)g(statique)g(des)g(pro-)75 1195 y(grammes)c(on)o(t)g(ab)q (outi)i(\022)-23 b(a)12 b(des)h(tec)o(hniques)h(de)g(parall)o(\023)-21 b(elisation)14 b(automatique)7 b(:)12 b(rec)o(herc)o(he)i(de)f(b)q (oucles)75 1251 y(parall)o(\022)-21 b(eles,)21 b(distribution)i(des)e (calculs)i(et)e(des)g(donn)o(\023)-21 b(ees,)21 b fj(etc)p fq(.)f(les)i(tec)o(hniques)g(de)f(r)o(\023)-21 b(e)o(\023)g(ecriture)20 b(de)75 1308 y(nids)d(de)g(b)q(oucles,)h(en)f(vue)g(de)g(leur)g(parall) o(\023)-21 b(elisation,)17 b(rep)q(osen)o(t)g(sur)f(des)h (manipulations)h(de)f(nature)75 1364 y(g)o(\023)-21 b(eom)o(\023)g (etrique)9 b(du)j(domaine)f(d'it)o(\023)-21 b(eration)11 b(ou)g(des)g(domaines)h(d'indices)h(des)e(tableaux,)g(sous)g(des)g(h)o (yp)q(o-)75 1421 y(th)o(\022)-21 b(eses)11 b(fortes,)g(comme)h(la)h (lin)o(\023)-21 b(earit)o(\023)g(e)12 b(des)g(fonctions)h(de)f(d)o (\023)-21 b(ep)q(endance)14 b(et)e(des)g(b)q(ornes)h(d'it)o(\023)-21 b(eration,)11 b(par)75 1477 y(exemple.)h(des)f(consid)o(\023)-21 b(erations)12 b(du)f(m)o(^)-21 b(eme)11 b(t)o(yp)q(e)g(se)h(retrouv)o (en)o(t)e(en)i(programmation)e(data-parall)o(\022)-21 b(ele,)75 1534 y(dans)14 b(les)f(\023)-21 b(etudes)14 b(sur)f(l'alignemen)o(t)i(et)f(la)g(distribution)h(des)f(donn)o(\023) -21 b(ees,)13 b(ou)h(des)g(comm)o(unications)h(in-)75 1590 y(duites.)j(ces)g(remarques)f(mon)o(tren)o(t)f(l'imp)q(ortance)j (d'une)f(certaine)g(forme)f(de)h(g)o(\023)-21 b(eom)o(\023)g(etrie)16 b(dans)h(la)75 1646 y(s)o(\023)-21 b(eman)o(tique)18 b(des)i(programmes)e(parall)o(\022)-21 b(eles,)19 b(et)g(l'in)o(t)o (\023)-21 b(er)o(^)g(et)17 b(de)j(p)q(ouv)o(oir)f(manipuler)i(les)e (indices)i(des)75 1703 y(tableaux)14 b(de)h(mani)o(\022)-21 b(ere)13 b(abstraite,)h(au)g(m)o(^)-21 b(eme)13 b(titre)h(que)g(les)h (d)o(\023)-21 b(e\014nitions)15 b(des)f(calculs,)h(en)g(expriman)o(t)75

1759 y(le)20 b(placemen)o(t)g(des)g(v)m(aleurs)h(dans)e(un)h fj(r)o(\023)-22 b(ef)o(\023)g(er)n(entiel)18 b fq(qui)j(p)q(ermette)e (de)h(distinguer)h(c)o(hacune)f(d'elles)75 1816 y(par)h(des)h(co)q (ordonn)o(\023)-21 b(ees)21 b(discr)o(\022)-21 b(etes.)21 b(la)h(transformation)e(du)i(placemen)o(t)g(des)g(v)m(aleurs)h(p)q(eut) f(alors)75 1872 y(p)q(ermettre)15 b(de)h(d)o(\023)-21 b(e\014nir)15 b(des)h(calculs)h(e\016caces)e(sur)g(une)h(arc)o (hitecture)g(parall)o(\022)-21 b(ele)15 b(donn)o(\023)-21 b(ee.)146 1929 y(c'est)11 b(ainsi)i(que)f(l'activit)o(\023)-21 b(e)12 b(de)h(programmation)e(p)q(eut)h(fondamen)o(talemen)o(t)g(rep)q (oser)h(sur)f(un)g(tr)o(\022)-21 b(es)75 1985 y(p)q(etit)14 b(nom)o(bre)f(de)h(primitiv)o(es)h(n)o(\023)-21 b(ecessaires)13 b(\022)-23 b(a)14 b(l')o(\023)-21 b(ecriture)13 b(des)h(programmes.)e (nous)h(en)h(mettons)f(trois)75 2042 y(en)i(\023)-21 b(evidence)8 b(:)143 2120 y({)23 b(l'application)17 b(de)e(fonctions)h (sur)f(des)g(v)m(aleurs,)h(p)q(our)g(d)o(\023)-21 b(e\014nir)15 b(les)h(calculs,)143 2207 y({)23 b(le)15 b(d)o(\023)-21 b(eplacemen)o(t)15 b(de)h(v)m(aleurs)f(dans)g(le)h(r)o(\023)-21 b(ef)o(\023)g(eren)o(tiel,)14 b(p)q(our)h(exprimer)g(les)h(d)o(\023)-21 b(ep)q(endances,)15 b(et)g(par)189 2264 y(cons)o(\023)-21 b(equen)o(t)14 b(les)h(\023)-21 b(ev)o(en)o(tuelles)16 b(comm)o(unications,)143 2351 y({)23 b(le)11 b(c)o(hangemen)o(t)g(de)g (r)o(\023)-21 b(ef)o(\023)g(eren)o(tiel,)10 b(p)q(our)h(transformer)f (la)h(structure)g(des)g(donn)o(\023)-21 b(ees)10 b(et)h(des)g(calculs.) 75 2429 y(ces)17 b(id)o(\023)-21 b(ees)18 b(tr)o(\022)-21 b(es)16 b(simples)j(son)o(t)d(le)i(fondemen)o(t)g(du)g(formalisme)f fn(pei)g fq(que)h(nous)g(allons)g(main)o(tenan)o(t)75 2486 y(rapp)q(eler.)g(la)e(d)o(\023)-21 b(e\014nition)18 b(originale)g(de)f fn(pei)g fq(se)g(trouv)o(e)f(dans)h(la)g(th)o(\022) -21 b(ese)16 b(d'eric)h(violard)h([56)o(])e(et)h(les)75 2542 y(articles)f([58)o(],[59)n(])f(a\016nen)o(t)g(les)h(id)o(\023)-21 b(ees)15 b(pr)o(\023)-21 b(esen)o(t)o(\023)g(ees)14 b(dans)h(sa)g(th)o (\022)-21 b(ese.)p eop %%page: 10 12 10 11 bop 75 269 a fq(10)587 b fl(chapitre)16 b(2.)45 b(d)1091 257 y(\023)1085 269 y(efinition)16 b(du)f(f)o(ormalisme)h fn(pei)75 397 y ft(2.1)66 b(in)n(tro)r(duction)25 b(\022)-33 b(a)21 b(la)i(programmation)g fs(pei)75 500 y fw(2.1.1)55 b(les)18 b(c)n(hamps)h(de)f(donn)o(\023)-27 b(ees)146 586 y fq(de)18 b(mani)o(\022)-21 b(ere)19 b(g)o(\023)-21 b(en)o(\023)g(erale,)17 b(consid)o(\023)-21 b(erons)19 b(qu'un)g(probl)o(\022)-21 b(eme)19 b(est)g(sp)o(\023)-21 b(eci\014)o(\023)g(e)18 b(par)h(une)g(relation)h(en)o(tre)75 643 y(des)14 b fj(multi-ensembles)e fq(de)i(v)m(aleurs,)g(app)q(el)o (\023)-21 b(es)14 b(ses)g fj(entr)o(\023)-22 b(e)n(es)12 b fq(et)i(ses)f fj(sorties)p fq(.)27 b(en)13 b fn(pei)p fq(,)g(les)i(v)m(aleurs)f(d'un)75 699 y(m)o(ulti-ensem)o(ble)j(son)o(t) e(plac)o(\023)-21 b(ees)15 b(dans)g(un)h(r)o(\023)-21 b(ef)o(\023)g(eren)o(tiel)14 b(p)q(our)i(former)e(un)i fj(champ)h(de)f(donn)o(\023)-22 b(e)n(es)1710 683 y fg(1)1727 699 y fq(.)146 756 y(evidemmen)o(t,)15 b(p)q(our)h(un)g(m)o(ulti-ensem) o(ble)i(donn)o(\023)-21 b(e,)15 b(il)i(y)e(a)h(une)g(in\014nit)o(\023) -21 b(e)16 b(de)g(r)o(\023)-21 b(ef)o(\023)g(eren)o(tiels)15 b(en)o(visa-)75 812 y(geables,)c(et)g(p)q(our)g(un)h(r)o(\023)-21 b(ef)o(\023)g(eren)o(tiel)10 b(c)o(hoisi,)i(plusieurs)h(placemen)o(ts)e (p)q(ossibles.)i(un)e(placemen)o(t)h(p)q(ossible)75 869 y(p)q(our)18 b(le)g(m)o(ulti-ensem)o(ble)i(de)e(v)m(aleurs)h fm(v)26 b fq(=)18 b ff(f)p fq(1)p fm(;)8 b fq(2)p fm(;)g ff(\000)p fq(3)p fm(;)f fq(1)p ff(g)p fq(,)14 b(est)k(celui)h(qui)g (consiste)f(\022)-23 b(a)17 b(asso)q(cier)h(des)75 925

y(indices)h(de)e fe(z)-13 b fq(,)13 b ff(f)p fq(0)p fm(;)8 b fq(1)p fm(;)g fq(2)p fm(;)g fq(3)o ff(g)14 b fq(par)i(exemple,)i (\022)-23 b(a)16 b(c)o(haque)g(\023)-21 b(el)o(\023)g(emen)o(t)15 b(de)i fm(v)10 b fq(,)16 b(comme)g(le)i(mon)o(tre)e(la)g(\014gure)75 982 y(2.1\(a\).)9 b(d)o(\023)-21 b(e\014nissons)11 b(ce)g(placemen)o(t) h(comme)f(forman)o(t)f(le)i(c)o(hamp)f(de)h(donn)o(\023)-21 b(ees)11 b fk(v)p fq(.)f(ce)h(m)o(ulti-ensem)o(ble)75 1038 y(p)q(eut)g(\023)-21 b(egalemen)o(t)10 b(^)-21 b(etre)11 b(plac)o(\023)-21 b(e)12 b(dans)g(un)g(domaine)g(d'indices)i(\()p fm(i;)8 b(j)s fq(\))h(de)j fe(z)1309 1022 y fg(2)1324 1038 y fq(,)g(tels)g(que)g(\(0)g ff(\024)h fm(i;)8 b(j)14 b ff(\024)f fq(1\))e(par)75 1095 y(exemple)18 b(\(\014gure)e (2.1\(b\)\).)f(on)i(forme)f(ainsi)i(un)f(autre)g(c)o(hamp)f(de)h(donn)o (\023)-21 b(ees)17 b fk(m)p fq(.)f(ces)g(deux)i(c)o(hamps)75 1151 y(exprimen)o(t)k(di\013)o(\023)-21 b(eremmen)o(t)20 b(le)i(m)o(^)-21 b(eme)20 b(m)o(ulti-ensem)o(ble)j(de)e(v)m(aleurs,)h (et)f(nous)g(disons)g(qu'ils)h(son)o(t)74 1208 y fj(\023)-22 b(e)n(quivalents)17 b fq(\(p)q(our)i(plus)h(de)f(pr)o(\023)-21 b(ecisions)19 b(sur)g(cette)f(notion)h(d')o(\023)-21 b(equiv)m(alence,)20 b(on)f(se)g(rep)q(ortera)f(\022)-23 b(a)18 b(la)75 1264 y(section)e(2.3.4\).)d(f)l(ormellemen)o(t,)i(il)i (existe)e(une)h(bijection)h(p)q(ermettan)o(t)e(de)g(passer)g(du)h (premier)g(pla-)488 1375 y 14917438 8055411 526254 39995310 18418892 49796792 starttexfig 488 1375 a %%begindocument: figures/chbase.eps /tgifdict 3 dict def tgifdict begin /tgifarrowtipdict 8 dict def tgifarrowtipdict /mtrx matrix put /tgifarrowtip { tgifarrowtipdict begin /dy exch def /dx exch def /h exch def /w exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y translate dy dx atan rotate 0 0 moveto w neg h lineto w neg h neg lineto savematrix setmatrix end } def end tgifdict begin /tgifsavedpage save def 1 setmiterlimit 1 setlinewidth 0 setgray

72 0 mul 72 11.00 mul translate 72 128 div 100 mul 100 div dup neg scale gsave % eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate -38.438 -73.125 translate 1.312 1.125 scale 0 rotate save countdictstack mark newpath /showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa14143.dvi) @start /fa 1 50 df<13801203120f12f31203b3a9ea07c0eafffe0f217ca018>49 d e end texdict begin 1 0 bop 73 203 a fa(1)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin % eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate -59.906 -100.125 translate 1.266 1.125 scale 0 rotate save countdictstack mark newpath

/showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa14143.dvi)

@start /fa 1 51 df<ea03f0ea0c1cea100700201380384003c0a2008013e012f0eaf8 01a3ea2003120014c0a2eb07801400130e5b13185b5b5b485a90c7fc000213205a5a0018 1360481340383fffc05ab5fc13217ea018>50 d e end texdict begin 1 0 bop 73 203 a fa(2)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin % eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate -65.438 -82.125 translate 1.312 1.125 scale 0 rotate save countdictstack mark newpath /showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa14143.dvi) @start /fa 1 50 df<13801203120f12f31203b3a9ea07c0eafffe0f217ca018>49 d e end texdict begin 1 0 bop 73 203 a fa(1)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin % polygon/closed-spline 0 setgray newpath 80 80 moveto 64 128 lineto 80 144 lineto 128 160 lineto 144 144 lineto 176 128 lineto 176 96 lineto 176 64 lineto

144 64 lineto 128 80 lineto 96 64 lineto closepath gsave grestore gsave stroke grestore % box 0 setgray gsave 1.415 setmiterlimit newpath 64 224 moveto 192 224 lineto 192 272 lineto 64 272 lineto closepath stroke 1 setmiterlimit grestore % box 0 setgray gsave 1.415 setmiterlimit newpath 368 192 moveto 464 192 lineto 464 288 lineto 368 288 lineto closepath stroke 1 setmiterlimit grestore % eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate -74.438 -163.125 translate 1.312 1.125 scale 0 rotate save countdictstack mark newpath /showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa14143.dvi) @start /fa 1 50 df<13801203120f12f31203b3a9ea07c0eafffe0f217ca018>49 d e end texdict begin 1 0 bop 73 203 a fa(1)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat

countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin % eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate -26.109 -91.125 translate 1.078 1.125 scale 0 rotate save countdictstack mark newpath /showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa14143.dvi) @start /fa 1 52 df<ea03f8ea0c1eea100f38200780004013c0127813031307123800 001380a214005b130c1338ea03f0ea001c130feb0780a2eb03c0a214e01220127012f8a2 00f013c01240eb0780122038100f00ea0c1cea03f013227ea018>51 d e /fb 1 1 df0 d e end texdict begin 1 0 bop 73 203 a fb(\000)p fa(3)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin % eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate -50.906 -163.125 translate 1.266 1.125 scale 0 rotate save countdictstack mark newpath

/showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa14143.dvi)

@start /fa 1 51 df<ea03f0ea0c1cea100700201380384003c0a2008013e012f0eaf8 01a3ea2003120014c0a2eb07801400130e5b13185b5b5b485a90c7fc000213205a5a0018 1360481340383fffc05ab5fc13217ea018>50 d e end texdict begin 1 0 bop 73 203 a fa(2)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin % eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate -26.109 -163.125 translate 1.078 1.125 scale 0 rotate save countdictstack mark newpath /showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa14143.dvi) @start /fa 1 52 df<ea03f8ea0c1eea100f38200780004013c0127813031307123800 001380a214005b130c1338ea03f0ea001c130feb0780a2eb03c0a214e01220127012f8a2 00f013c01240eb0780122038100f00ea0c1cea03f013227ea018>51 d e /fb 1 1 df0 d e end texdict begin 1 0 bop 73 203 a fb(\000)p fa(3)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin % eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def

0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate -20.438 -163.125 translate 1.312 1.125 scale 0 rotate save countdictstack mark newpath /showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa14143.dvi) @start /fa 1 50 df<13801203120f12f31203b3a9ea07c0eafffe0f217ca018>49 d e end texdict begin 1 0 bop 73 203 a fa(1)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin % poly/open-spline 0 setgray gsave newpath 96 224 moveto 96 272 lineto stroke grestore % poly/open-spline 0 setgray gsave newpath 128 224 moveto 128 272 lineto stroke grestore % poly/open-spline 0 setgray gsave newpath 160 224 moveto 160 272 lineto stroke grestore % poly/open-spline 0 setgray gsave newpath 96 112 moveto 64 -48 atan dup cos 8 mul exch sin 8 mul rmoveto 64.00 154.67 58.67 192.00 80 224 curveto

stroke grestore gsave newpath 96 112 8 3 48 -64 tgifarrowtip closepath fill grestore % poly/open-spline 0 setgray gsave newpath 96 144 moveto 48 0 atan dup cos 8 mul exch sin 8 mul rmoveto 96.00 176.00 101.33 202.67 112 224 curveto stroke grestore gsave newpath 96 144 8 3 0 -48 tgifarrowtip closepath fill grestore % poly/open-spline 0 setgray gsave newpath 144 128 moveto 96 0 atan dup cos 8 mul exch sin 8 mul rmoveto 144 224 lineto stroke grestore gsave newpath 144 128 8 3 0 -96 tgifarrowtip closepath fill grestore % poly/open-spline 0 setgray gsave newpath 160 96 moveto 64 32 atan dup cos 8 mul exch sin 8 mul rmoveto 181.33 138.67 186.67 181.33 176 224 curveto stroke grestore gsave newpath 160 96 8 3 -32 -64 tgifarrowtip closepath fill grestore % eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def

userdict begin /showpage {} def /letter {} def /legal {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate 123.562 -73.125 translate 1.312 1.125 scale 0 rotate save countdictstack mark newpath /showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa14143.dvi) @start /fa 1 50 df<13801203120f12f31203b3a9ea07c0eafffe0f217ca018>49 d e end texdict begin 1 0 bop 73 203 a fa(1)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin % eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate 129.094 -145.125 translate 1.266 1.125 scale 0 rotate save countdictstack mark newpath /showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa14143.dvi) @start /fa 1 51 df<ea03f0ea0c1cea100700201380384003c0a2008013e012f0eaf8 01a3ea2003120014c0a2eb07801400130e5b13185b5b5b485a90c7fc000213205a5a0018 1360481340383fffc05ab5fc13217ea018>50 d e end texdict begin 1 0 bop 73 203 a fa(2)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat

countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin % eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate 96.562 -82.125 translate 1.312 1.125 scale 0 rotate save countdictstack mark newpath /showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa14143.dvi) @start /fa 1 50 df<13801203120f12f31203b3a9ea07c0eafffe0f217ca018>49 d e end texdict begin 1 0 bop 73 203 a fa(1)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin % polygon/closed-spline 0 setgray newpath 368 80 moveto 352 128 lineto 368 144 lineto 416 160 lineto 432 144 lineto 464 128 lineto 464 96 lineto 464 64 lineto 432 64 lineto 416 80 lineto 384 64 lineto closepath gsave grestore gsave stroke grestore % eps

end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate 135.891 -91.125 translate 1.078 1.125 scale 0 rotate save countdictstack mark newpath /showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa14143.dvi) @start /fa 1 52 df<ea03f8ea0c1eea100f38200780004013c0127813031307123800 001380a214005b130c1338ea03f0ea001c130feb0780a2eb03c0a214e01220127012f8a2 00f013c01240eb0780122038100f00ea0c1cea03f013227ea018>51 d e /fb 1 1 df0 d e end texdict begin 1 0 bop 73 203 a fb(\000)p fa(3)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin % poly/open-spline 0 setgray gsave newpath 384 112 moveto 48 -32 atan dup cos 8 mul exch sin 8 mul rmoveto 362.67 144.00 362.67 170.67 384 192 curveto stroke grestore gsave newpath 384 112 8 3 32 -48 tgifarrowtip closepath fill grestore % poly/open-spline 0 setgray gsave newpath 400 144 moveto 48 48 atan dup cos 8 mul exch sin 8 mul rmoveto 448 192 lineto stroke grestore

gsave newpath 400 144 8 3 -48 -48 tgifarrowtip closepath fill grestore % eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate 105.562 -145.125 translate 1.312 1.125 scale 0 rotate save countdictstack mark newpath /showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa14143.dvi) @start /fa 1 50 df<13801203120f12f31203b3a9ea07c0eafffe0f217ca018>49 d e end texdict begin 1 0 bop 73 203 a fa(1)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin % eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate 102.094 -100.125 translate 1.266 1.125 scale 0 rotate save countdictstack mark newpath

/showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa14143.dvi)

@start /fa 1 51 df<ea03f0ea0c1cea100700201380384003c0a2008013e012f0eaf8 01a3ea2003120014c0a2eb07801400130e5b13185b5b5b485a90c7fc000213205a5a0018 1360481340383fffc05ab5fc13217ea018>50 d e end texdict begin 1 0 bop 73 203 a fa(2)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin % eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate 117.891 -172.125 translate 1.078 1.125 scale 0 rotate save countdictstack mark newpath /showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa14143.dvi) @start /fa 1 52 df<ea03f8ea0c1eea100f38200780004013c0127813031307123800 001380a214005b130c1338ea03f0ea001c130feb0780a2eb03c0a214e01220127012f8a2 00f013c01240eb0780122038100f00ea0c1cea03f013227ea018>51 d e /fb 1 1 df0 d e end texdict begin 1 0 bop 73 203 a fb(\000)p fa(3)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin % eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def

0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate 123.562 -172.125 translate 1.312 1.125 scale 0 rotate save countdictstack mark newpath /showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa14143.dvi) @start /fa 1 50 df<13801203120f12f31203b3a9ea07c0eafffe0f217ca018>49 d e end texdict begin 1 0 bop 73 203 a fa(1)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin % poly/open-spline 0 setgray gsave newpath 368 240 moveto 464 240 lineto stroke grestore % poly/open-spline 0 setgray gsave newpath 416 192 moveto 416 288 lineto stroke grestore % poly/open-spline 0 setgray gsave newpath 448 96 moveto 80 48 atan dup cos 8 mul exch sin 8 mul rmoveto 480.00 149.33 496.00 184.00 496.00 200.00 curveto 496.00 216.00 485.33 234.67 464 256 curveto stroke grestore gsave newpath 448 96 8 3 -48 -80 tgifarrowtip closepath fill grestore

% poly/open-spline 0 setgray gsave newpath 416 128 moveto 64 -80 atan dup cos 8 mul exch sin 8 mul rmoveto 362.67 170.67 346.67 213.33 368 256 curveto stroke grestore gsave newpath 416 128 8 3 80 -64 tgifarrowtip closepath fill grestore % eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate -95.906 -130.142 translate 1.266 1.074 scale 0 rotate save countdictstack mark newpath /showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa14143.dvi) @start /fa 2 127 df<13e0a21201ea00c01300a9121e1223ea4380a21283ea8700a212 07120ea35aa3ea38201340127013801230ea3100121e0b227ea111>105 d<14c0a31460b512f0a2c712e0eb0180eb03001302140a77a318>126 d e end texdict begin 1 0 bop 65 192 a fa(~)73 203 y(i)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin % eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def

/legal {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate 50.625 -129.174 translate 1.237 1.085 scale 0 rotate save countdictstack mark newpath /showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa14143.dvi) @start /fa 2 127 df<147014f0a214601400a9130feb3180eb41c01381a2ea0101a238 000380a4eb0700a4130ea45ba45ba3ea7070eaf0605bea6380003ec7fc142c81a114> 106 d<14c0a31460b512f0a2c712e0eb0180eb03001302140a77a318>126 d e end texdict begin 1 0 bop 69 192 a fa(~)73 203 y(j)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin % poly/open-spline 0 setgray gsave newpath 16 224 moveto 0 32 atan dup cos 8 mul 48 exch sub exch sin 8 mul 224 exch sub lineto stroke grestore gsave newpath 48 224 8 3 32 0 tgifarrowtip closepath fill grestore % poly/open-spline 0 setgray gsave newpath 304 224 moveto 32 0 atan dup cos 8 mul 304 exch sub exch sin 8 mul 256 exch sub lineto stroke grestore gsave newpath 304 256 8 3 0 32 tgifarrowtip closepath fill grestore % poly/open-spline 0 setgray

gsave newpath 304 224 moveto 0 32 atan dup cos 8 mul 336 exch sub exch sin 8 mul 224 exch sub lineto stroke grestore gsave newpath 336 224 8 3 32 0 tgifarrowtip closepath fill grestore % eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate 66.094 -103.142 translate 1.266 1.074 scale 0 rotate save countdictstack mark newpath /showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa14143.dvi) @start /fa 2 127 df<13e0a21201ea00c01300a9121e1223ea4380a21283ea8700a212 07120ea35aa3ea38201340127013801230ea3100121e0b227ea111>105 d<14c0a31460b512f0a2c712e0eb0180eb03001302140a77a318>126 d e end texdict begin 1 0 bop 65 192 a fa(~)73 203 y(i)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin % eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath

1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate -33.648 -200.250 translate 1.074 1.125 scale 0 rotate save countdictstack mark newpath /showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa14890.dvi) @start /fa 1 98 df<ebf180380389c038070780ea0e03121c123c383807001278a3ea f00ea31410eb1c20a2ea703ceb5c40ea308c380f078014147e9318>97 d e /fb 2 42 df<13401380ea01005a12061204120c5aa212381230a212701260a412e0 ac1260a412701230a212381218a27e120412067e7eea008013400a2e7ba112>40 d<7e12407e12307e1208120c7ea212077ea213801201a413c0ac1380a412031300a25a12 06a25a120812185a12205a5a0a2e7ea112>i e end texdict begin 1 0 bop 71 199 a fb(\()p fa(a)p fb(\))p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin % eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate 123.750 -200.250 translate 1.125 1.125 scale 0 rotate save countdictstack mark newpath /showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa14890.dvi) @start /fa 1 99 df<ea0780123fea0700a4120ea45aa213f0ea1d0cea3a0e123cea38 0fa21270a4eae01ea3131c133c1338ea607013e0ea31c0ea1f0010207e9f14>98 d e /fb 2 42 df<13401380ea01005a12061204120c5aa212381230a212701260a412e0 ac1260a412701230a212381218a27e120412067e7eea008013400a2e7ba112>40 d<7e12407e12307e1208120c7ea212077ea213801201a413c0ac1380a412031300a25a12 06a25a120812185a12205a5a0a2e7ea112>i e end texdict begin 1 0 bop 71 199 a fb(\()p fa(b)p fb(\))p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore

count tgifopcount0 sub {pop} repeat countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin grestore tgifsavedpage restore end %matchingcreationdate: fri dec 13 16:41:36 1996 %%enddocument endtexfig 268 2029 a fn(fig.)f fq(2.1)g(-)30 b fj(deux)17 b(plac)n(ements)e (di\013)o(\023)-22 b(er)n(ents)15 b(d'un)i(multi-ensemble)e(de)h (valeurs)75 2133 y fq(cemen)o(t)h(au)h(second.)f(en)h(l'o)q(ccurrence,) g(cette)g(bijection)g(est)g fm(\033)r fq(\()p fm(i)p fq(\))c(=)j(\()p fm(i)g(mod)g fq(2)p fm(;)8 b(i)16 b(div)i fq(2\).)e(en)i fn(pei)75 2190 y fq(nous)d(exprimons)h(cette)f(relation) h(en)o(tre)f(les)h(deux)g(c)o(hamps)f(de)h(donn)o(\023)-21 b(ees)15 b(par)f(l')o(\023)-21 b(equation)15 b(suiv)m(an)o(te)9 b(:)620 2345 y fk(m)15 b fq(=)g fk(align)7 b(::)g(v)485 2401 y fq(a)o(v)o(ec)50 b fk(align)23 b(=)15 b fm(\025)p fk(\(i\))p ff(j)p fk(\(0)p ff(\024)p fk(i)p ff(\024)p fk(3\).\(i)22 b(mod)h(2,i/2\))p 75 2500 709 2 v 124 2542 a fd(1)p fc(:)9 b fd(a)k(la)h(fa\030)-17 b(con)13 b(des)g fb(table)n(aux)d fd(dans)k(les)g(langages)h(imp)o(\023)-18 b(eratifs)p eop %%page: 11 13 11 12 bop 75 269 a fl(2.1.)29 b(intr)o(oduction)570 257 y(\022)562 269 y(a)16 b(la)f(pr)o(ogramma)l(tion)h fn(pei)577 b fq(11)146 397 y(l'application)25 b(d'une)g(fonction)g(comme)f fk(align)f fq(sur)h(un)h(c)o(hamp)f(de)h(donn)o(\023)-21 b(ees)24 b(est)g(app)q(el)o(\023)-21 b(ee)75 453 y(une)22 b fj(op)o(\023)-22 b(er)n(ation)p fq(,)21 b(et)h(rend)f(comme)h(r)o (\023)-21 b(esultat)20 b(un)i(autre)f(c)o(hamp)g(de)h(donn)o(\023)-21 b(ees.)21 b(l')o(\023)-21 b(equation)21 b(pr)o(\023)-21 b(ec)o(\023)g(e-)75 510 y(den)o(te)16 b(exprime)g(l')o fj(\023)-22 b(e)n(galit)o(\023)g(e)15 b fq(en)o(tre)h(les)g(c)o(hamps)f (de)h(part)f(et)h(d'autre)f(de)h(l')o(\023)-21 b(equation,)14 b(c'est-\022)-23 b(a-dire)16 b fk(m)g fq(et)75 566 y fk(\(align)7 b(::)g(v\))p fq(.)14 b(ceci)i(signi\014e)g(qu'ils)g(on)o (t)e(les)i(m)o(^)-21 b(emes)14 b(v)m(aleurs,)h(et)g(que)g(ces)g(v)m (aleurs)h(son)o(t)e(plac)o(\023)-21 b(ees)15 b(de)75 623 y(la)h(m)o(^)-21 b(eme)14 b(mani)o(\022)-21 b(ere)15 b(sur)g(le)h(m)o(^)-21 b(eme)14 b(r)o(\023)-21 b(ef)o(\023)g(eren)o (tiel.)75 807 y fw(2.1.2)55 b(les)18 b(op)o(\023)-27 b(erations)18 b(et)g(l'op)o(\023)-27 b(erateur)18 b(de)g(sup)r(erp)r (osition)75 895 y fo(les)f(op)o(\023)-25 b(erations)146 983 y fq(nous)15 b(distinguons)h(trois)f(sortes)f(d'op)o(\023)-21 b(erations)14 b(en)i fn(pei)p fq(.)143 1081 y({)23 b(celle)16 b(que)f(nous)g(v)o(enons)f(de)h(v)o(oir)g(mo)q(di\014e)h(le)f(r)o(\023) -21 b(ef)o(\023)g(eren)o(tiel)14 b(dans)h(lequel)h(son)o(t)e(repr)o (\023)-21 b(esen)o(t)o(\023)g(ees)13 b(les)189 1138 y(v)m(aleurs)20 b(et)e(nous)i(l'app)q(elons)g fj(changement)f(de)h(b)n(ase)p fq(.)e(l'application)j(d'un)e(c)o(hangemen)o(t)g(de)189 1194 y(base)c(est)g(d)o(\023)-21 b(enot)o(\023)g(ee)14 b(par)g(le)i(sym)o(b)q(ole)9 b fk(::)143 1293 y fq({)23 b(une)18 b(autre)f(op)o(\023)-21 b(eration)16 b(mo)q(di\014e)j(le)f (placemen)o(t)h(des)f(v)m(aleurs)g(dans)g(ce)g(r)o(\023)-21 b(ef)o(\023)g(eren)o(tiel.)16 b(elle)j(p)q(er-)189 1349

y(met,)13 b(par)h(exemple,)i(d'exprimer)e(les)h(comm)o(unications)g (dans)g(une)g(mac)o(hine)g(parall)o(\022)-21 b(ele.)15 b(nous)189 1406 y(l'app)q(elons)j(op)o(\023)-21 b(eration)17 b(de)g fj(r)n(outage)p fq(,)h(et)f(son)g(application)i(est)e(d)o(\023) -21 b(enot)o(\023)g(ee)16 b(par)h(le)h(sym)o(b)q(ole)g fa(c)1815 1389 y fg(2)1834 1406 y fq(.)189 1462 y(la)c(\014gure)g(2.2)f (mon)o(tre)g(le)i(placemen)o(t)f(des)g(v)m(aleurs)h(du)g(c)o(hamp)f(de) g(donn)o(\023)-21 b(ees)14 b fk(w)f fq(d)o(\023)-21 b(e\014ni)15 b(par)f fk(w)f fq(=)189 1518 y fk(v)i fa(c)g fk(shift)o fq(,)g(a)o(v)o(ec)g fk(shift)p fq(=)p fm(\025)p fk(\(i\).\(\(i-1\))22 b(mod)h(4\))p fq(.)p 726 1704 2 75 v 801 1704 v 876 1704 v 650 1628 304 2 v 650 1703 2 75 v 951 1703 v 650 1705 304 2 v 764 1685 a(2)-98 b(1)108 b(-3)764 1798 y fk(v)914 1685 y fq(1)p 1251 1704 2 75 v 1326 1704 v 1401 1704 v 1175 1628 304 2 v 1175 1703 2 75 v 1476 1703 v 1175 1705 304 2 v 483 1630 94 2 v 535 1629 a fz(-)1214 1685 y fq(1)52 b(1)g(2)33 b(-3)1289 1798 y fk(w)513 1675 y fm(~)520 1685 y(i)350 1946 y fn(fig.)15 b fq(2.2)f(-)31 b fj(l)n(e)15 b(champ)i fk(w)f fj(d)o(\023)-22 b(e\014ni)16 b(p)n(ar)g(un)g(r)n(outage)h(des)f(valeurs)g(de)h fk(v)189 2075 y fq(noter)i(que)h(la)f(fonction)h(in)o(terv)o(enan)o(t)f(dans)h (une)g(op)o(\023)-21 b(eration)19 b(de)h(routage)e(n'est)h(pas)h(n)o (\023)-21 b(eces-)189 2131 y(sairemen)o(t)19 b(injectiv)o(e.)i(ceci)f (p)q(ermet)f(d'exprimer)i(des)e(op)o(\023)-21 b(erations)19 b(de)h(t)o(yp)q(e)f(di\013usion)9 b(:)19 b(par)189 2188 y(exemple,)i(l')o(\023)-21 b(equation)20 b fk(w)g fq(=)g fk(v)15 b fa(c)h fk(spread)o fq(,)k(a)o(v)o(ec)g fk(spread)p fq(=)p fm(\025)p fk(\(i\))p ff(j)p fk(\(0<=i<4\).\()o(0\))d fq(di\013use)k(la)189 2244 y(v)m(aleur)c(plac)o(\023)-21 b(ee)16 b(au)f(p)q(oin)o(t)i(d'indice)h(0)d(de)h fk(v)g fq(p)q(our)g(former)f(le)i(c)o(hamp)f fk(w)p fq(.)f(ceci)i(est)e (illustr)o(\023)-21 b(e)17 b(par)189 2301 y(la)e(\014gure)h(2.3.)143 2399 y({)23 b(la)17 b(troisi)o(\022)-21 b(eme)17 b(op)o(\023)-21 b(eration)16 b(est)h(celle)h(qui)g(c)o(hange)g(les)f(v)m(aleurs,)h(app) q(el)o(\023)-21 b(ee)18 b(op)o(\023)-21 b(eration)16 b fj(fonction-)189 2456 y(nel)r(le)p fq(.)21 b(elle)j(p)q(ermet)e (d'appliquer)i(un)f(m)o(^)-21 b(eme)22 b(calcul)i(aux)e(v)m(aleurs)i (d'un)f(c)o(hamp)f(de)h(don-)p 75 2500 709 2 v 124 2542 a fd(2)p fc(:)9 b fd(l'op)o(\023)-18 b(eration)15 b(est)e(su\016x)o (\023)-18 b(ee)13 b(car)g(la)h(comp)q(osition)i(s'applique)f(\022)-19 b(a)13 b(droite)h(\()p fb(cf.)e fd(section)i(2.3.1\))p eop %%page: 12 14 12 13 bop 75 269 a fq(12)587 b fl(chapitre)16 b(2.)45 b(d)1091 257 y(\023)1085 269 y(efinition)16 b(du)f(f)o(ormalisme)h fn(pei)1195 592 y fz(?)1194 458 y fy($)p 1194 592 2 52 v 933 458 180 2 v -691 w(')p 669 592 2 52 v 753 458 180 2 v 1270 592 a fz(?)1269 432 y fy($)p 1269 592 2 79 v 970 432 217 2 v -766 w(')p 669 592 2 79 v 753 432 217 2 v 1345 592 a fz(?)1344 421 y fy($)p 1344 592 2 90 v 1008 421 255 2 v -841 w(')p 669 592 2 90 v 753 421 255 2 v 1420 592 a fz(?)1419 406 y fy($)p 1419 592 2 105 v 1045 406 292 2 v -916 w(')p 669 592 2 105 v 753 406 292 2 v 1232 667 2 75 v 1307 667 v 1382 667 v 1156 591 304 2 v 1156 666 2 75 v 1458 666 v 1156 668 304 2 v 464 593 94 2 v 516 592 a fz(-)p 707 667 2 75 v 782 667 v 857 667 v 631 591 304 2 v 631 666 2 75 v 933 666 v 631 668 304 2 v 1270 649 a fq(1)-98 b(1)-323 b(1)-117 b(-3)-94 b(2)c(1)745 761 y fk(v)501 b(w)1345 649 y fq(1)52 b(1)495 638 y fm(~)502 649 y(i)238 909 y fn(fig.)15 b fq(2.3)f(-)31

b fj(l)n(e)15 b(champ)i fk(w)f fj(d)o(\023)-22 b(e\014ni)16 b(p)n(ar)g(un)g(r)n(outage)h(\(di\013usion\))e(des)h(valeurs)g(de)h fk(v)189 1065 y fq(n)o(\023)-21 b(ees.)15 b(l'application)k(de)e(l'op)o (\023)-21 b(eration)16 b(fonctionnelle)j(est)d(d)o(\023)-21 b(enot)o(\023)g(ee)15 b(par)i(le)g(sym)o(b)q(ole)h fa(b)1729 1048 y fg(3)1747 1065 y fq(.)e(p)o(ar)189 1121 y(exemple,)f fk(w)f fq(=)g fk(inc)h fa(b)g fk(v)p fq(,)f(a)o(v)o(ec)f fk(inc)p fq(=)p fm(\025)p fk(\(a\).\(a+3\))o fq(,)g(est)h(un)h(c)o (hamp)f(don)o(t)f(c)o(haque)i(v)m(aleur)g(est)189 1177 y(calcul)o(\023)-21 b(ee)16 b(\022)-23 b(a)15 b(partir)g(de)g(la)h(v)m (aleur)g(de)g fk(v)f fq(plac)o(\023)-21 b(ee)15 b(au)g(m)o(^)-21 b(eme)15 b(p)q(oin)o(t)g(\(\014gure)g(2.4\).)p 1147 1379 2 75 v 1222 1379 v 1297 1379 v 1072 1303 304 2 v 1072 1378 2 75 v 1373 1378 v 1072 1380 304 2 v 623 1379 2 75 v 698 1379 v 773 1379 v 547 1303 304 2 v 547 1378 2 75 v 848 1378 v 547 1380 304 2 v 1186 1473 a fk(w)661 1360 y fq(2)-98 b(1)108 b(-3)56 b(1)661 1473 y fk(v)1186 1360 y fq(5)c(0)g(4)-248 b(4)292 1621 y fn(fig.)15 b fq(2.4)f(-)31 b fj(l)n(e)15 b(champ)i fk(w)f fj(d)o(\023)-22 b(e\014ni)16 b(p)n(ar)g(une)g(op)o(\023)-22 b(er)n(ation)17 b(fonctionnel)r(le)d(sur)j fk(v)146 1809 y fq(on)c(d)o(\023)-21 b(e\014nit)13 b(\023)-21 b(egalemen)o(t)12 b(l'in)o(v)o(erse)i(de)f (l'op)o(\023)-21 b(eration)12 b(de)i(routage)e(et)h(de)g(l'op)o(\023) -21 b(eration)13 b(fonctionnelle,)75 1865 y(quelle)h(que)e(soit)g(la)g (fonction,)g(qui)g(son)o(t)g(resp)q(ectiv)o(emen)o(t)g(la)g fj(r)o(\023)-22 b(e)n(duction)14 b(g)o(\023)-22 b(e)n(om)o(\023)g (etrique)12 b fq(et)f fj(la)j(r)o(\023)-22 b(e)n(duction)75 1922 y(fonctionnel)r(le)10 b fq([59)o(].)h(nous)h(n'utiliserons)h(que)f (la)g(r)o(\023)-21 b(eduction)12 b(g)o(\023)-21 b(eom)o(\023)g(etrique) 10 b(dans)h(cette)h(pr)o(\023)-21 b(esen)o(tation.)75 1978 y(la)23 b(r)o(\023)-21 b(eduction)22 b(g)o(\023)-21 b(eom)o(\023)g(etrique)21 b(d'un)i(c)o(hamp)f(de)h(donn)o(\023)-21 b(ees)22 b fk(x)h fq(par)f(une)h(fonction)g fk(g)f fq(\(d)o(\023)-21 b(enot)o(\023)g(ee)21 b(par)75 2034 y fk(g)15 b fq(;)8 b fa(b)15 b fk(x)p fq(\),)h(place)j(en)e(tout)g(p)q(oin)o(t)h(de)g(co)q (ordonn)o(\023)-21 b(ees)16 b fm(z)r fq(,)i(une)g(s)o(\023)-21 b(equence)17 b(des)h(v)m(aleurs)g(de)g fk(x)f fq(situ)o(\023)-21 b(ees)17 b(en)75 2091 y(tous)f(les)g(p)q(oin)o(ts)h fm(y)r fq(,)e fm(y)h ff(2)f fm(dom)p fq(\()p fk(g)p fq(\),)f(tels)i(que)h fk(g)p fq(\()p fm(y)r fq(\))c(=)h fm(z)r fq(.)i(p)o(ar)f(exemple,)i(le) g(c)o(hamp)f fk(y)g fq(d)o(\023)-21 b(e\014ni)17 b(par)e fk(y)h fq(=)75 2147 y fk(merge)e fq(;)8 b fa(b)15 b fk(x)d fq(a)o(v)o(ec)g fk(merge)p fq(=)p fm(\025)p fk(\(i\))p ff(j)p fk(\(0<=i<3\).\(0\))d fq(a)j(toutes)g(ses)h(v)m(aleurs)g(plac)o (\023)-21 b(ees)12 b(au)h(p)q(oin)o(t)g(d'indice)75 2204 y(0,)i(dans)h(une)g(s)o(\023)-21 b(equence)16 b(d'ordre)f(quelconque.)i (la)f(\014gure)f(2.5)g(mon)o(tre)g(une)h(d)o(\023)-21 b(e\014nition)17 b(p)q(ossible)g(du)75 2260 y(c)o(hamp)e fk(y)p fq(.)146 2325 y(nous)k(disons)h(que)h(cette)e(op)o(\023)-21 b(eration,)18 b(est)i(l'in)o(v)o(erse)g(de)g(l'op)o(\023)-21 b(eration)19 b(g)o(\023)-21 b(eom)o(\023)g(etrique)18 b(car)h(quand)75 2381 y(la)h(fonction)h(est)e(bijectiv)o(e,)i(la)g(r)o (\023)-21 b(eduction)20 b(est)e(\023)-21 b(egale)20 b(\022)-23 b(a)19 b(l'op)o(\023)-21 b(eration)20 b(g)o(\023)-21 b(eom)o(\023)g(etrique)18 b(d)o(\023)-21 b(e\014nie)21 b(par)e(la)75 2437 y(fonction)d(in)o(v)o(erse.)p 75 2500 709 2 v 124 2542 a fd(3)p fc(:)9 b fd(l'op)o(\023)-18 b(eration)15 b(est)e(pr)o(\023)-18 b(e\014x)o(\023)g(ee)14 b(car)f(la)g(comp)q(osition)j(s'applique)g(\022)-19 b(a)13 b(gauc)o(he)g(\()p fb(cf.)f fd(section)j(2.3.1\))p eop

%%page: 13 15 13 14 bop 75 269 a fl(2.1.)29 b(intr)o(oduction)570 257 y(\022)562 269 y(a)16 b(la)f(pr)o(ogramma)l(tion)h fn(pei)577 b fq(13)1214 619 y fz(?)1213 409 y fy($)p 1213 619 2 127 v 944 409 187 2 v -710 w(')p 669 619 2 127 v 753 409 191 2 v 1214 619 a fz(?)1213 409 y fy($)p 1213 619 2 127 v 981 409 150 2 v -635 w(')p 744 619 2 127 v 828 409 154 2 v 1213 610 2 7 v 1213 619 a(\001)1213 406 y($)p 1213 604 2 116 v 1019 406 112 2 v -560 w(')p 819 604 2 116 v 903 406 116 2 v 819 610 2 7 v 819 619 a(\002)p 1156 618 304 2 v 1156 693 2 75 v 1458 693 v 1156 695 304 2 v 464 619 94 2 v 516 618 a fz(-)p 707 694 2 75 v 782 694 v 631 618 229 2 v 631 693 2 75 v 858 693 v 631 695 229 2 v 1251 694 2 75 v 1344 694 v 495 664 a fm(~)502 675 y(i)152 b fq(4)52 b(7)g(5)745 787 y fk(x)501 b(y)1158 675 y fd(7;5;)o(4)194 935 y fn(fig.)15 b fq(2.5)f(-)31 b fj(l)n(e)15 b(champ)i fk(y)f fj(d)o(\023)-22 b(e\014ni)16 b(p)n(ar)g(une)g(r)o(\023)-22 b(e)n(duction)17 b(g)o(\023)-22 b(e)n(om)o(\023)g(etrique)16 b(des)g(valeurs)g(de)h fk(x)75 1076 y fo(op)o(\023)-25 b(erateur)17 b(de)h(sup)q(erp)q(osition)146 1165 y fq(en)g(plus)i(de)f(ces)g(trois)f(op)o(\023)-21 b(erations)17 b(et)i(de)g(leurs)g(in)o(v)o(erses,)g(on)f(d)o(\023)-21 b(e\014nit)19 b(en)g fn(pei)p fq(,)f(un)h(op)o(\023)-21 b(erateur)75 1221 y(in)o(terne)23 b(de)g(sup)q(erp)q(osition,)g(not)o (\023)-21 b(e)21 b fk(/&/)8 b fq(.)22 b(la)g(sup)q(erp)q(osition)i(de)f (plusieurs)h(c)o(hamps)e(de)h(donn)o(\023)-21 b(ees)75 1278 y(p)q(ermet)13 b(de)h(d)o(\023)-21 b(e\014nir)13 b(un)h(autre)e(c)o(hamp)h(de)h(donn)o(\023)-21 b(ees,)12 b(don)o(t)h(les)h(v)m(aleurs)g(son)o(t)e(des)i(s)o(\023)-21 b(equences.)12 b(chaque)75 1334 y(s)o(\023)-21 b(equence)15 b(est)g(la)h(concat)o(\023)-21 b(enation)14 b(des)h(v)m(aleurs)h(des)g (c)o(hamps)f(qui)h(son)o(t)e(plac)o(\023)-21 b(ees)15 b(aux)g(m)o(^)-21 b(emes)15 b(indices)75 1391 y(dans)g(le)h(r)o(\023) -21 b(ef)o(\023)g(eren)o(tiel.)13 b(ainsi,)j(la)g(\014gure)f(2.6)f(mon) o(tre)g(le)i(c)o(hamp)f(r)o(\023)-21 b(esultan)o(t)13 b(de)j(la)f(sup)q(erp)q(osition)h(de)g fk(x)75 1447 y fq(et)f fk(w)p fq(.)p 866 1625 v 941 1625 v 715 1549 304 2 v 715 1624 2 75 v 1017 1624 v 715 1626 304 2 v 791 1625 2 75 v 360 1625 v 435 1625 v 284 1549 229 2 v 284 1624 2 75 v 511 1624 v 284 1626 229 2 v 1316 1625 2 75 v 1429 1625 v 1541 1625 v 1184 1549 454 2 v 1184 1624 2 75 v 1636 1624 v 1184 1626 454 2 v 867 1700 a fk(w)538 b(z)323 1606 y fq(4)52 b(7)34 b(5)398 1719 y fk(x)755 1606 y fq(4)52 b(5)g(0)33 b(4)221 b(4;)8 b(4)64 b(7;)8 b(5)42 b(5;)8 b(0)67 b(4)513 1867 y fn(fig.)15 b fq(2.6)g(-)30 b fj(l)n(e)15 b(champ)j fk(z)e fj(d)o(\023)-22 b(e\014ni)15 b(p)n(ar)i fk(z)f fj(=)g fk(x/&/)7 b(w)75 2058 y fw(2.1.3)55 b(les)18 b(programmes)e fv(pei)146 2147 y fq(un)21 b fj(\023)-22 b(enonc)o(\023)g(e)22 b fn(pei)g fq(est)h(un)g(ensem)o(ble)g(d')o(\023)-21 b(equations)22 b(p)q(ermettan)o(t)g(de)h(d)o(\023)-21 b(e\014nir)23 b(des)g(c)o(hamps)f(de)75 2204 y(donn)o(\023)-21 b(ees)18 b(en)g(sortie)g(en)g(fonction)g(des)g(c)o(hamps)g(de)g(donn)o(\023)-21 b(ees)18 b(en)g(en)o(tr)o(\023)-21 b(ee.)17 b(lorsqu'ils)i(satisfon)o (t)e(aux)74 2260 y(\023)-21 b(equations,)12 b(l'ensem)o(ble)j(de)f(ces) g(c)o(hamps)f(de)h(donn)o(\023)-21 b(ees,)13 b(et)g(les)h(c)o(hamps)g (in)o(term)o(\023)-21 b(ediaires)14 b(p)q(ouv)m(an)o(t)g(ap-)75 2316 y(para)-5 b(^)-18 b(\020tre)15 b(dans)g(les)g(\023)-21 b(equations,)14 b(constituen)o(t)h(une)g fj(solution)g fq(du)h(syst)o(\022)-21 b(eme)13 b(d')o(\023)-21 b(equations.)14

b(les)i(c)o(hamps)75 2373 y(de)k(donn)o(\023)-21 b(ees)20 b(en)g(en)o(tr)o(\023)-21 b(ee)19 b(et)h(en)h(sortie)e(son)o(t)h(pr)o (\023)-21 b(ecis)o(\023)g(es)19 b(dans)h(l'en)o(t)o(^)-21 b(ete)19 b(de)h(l')o(\023)-21 b(enonc)o(\023)g(e.)19 b(les)h(fonctions)75 2429 y(apparaissan)o(t)c(dans)i(les)f(op)o(\023) -21 b(erations,)16 b(d)o(\023)-21 b(e\014nissen)o(t)17 b(le)h(con)o(texte)f(de)g(l')o(\023)-21 b(enonc)o(\023)g(e,)16 b(sous)h(la)g(forme)g(de)g fm(\025)p fq(-)75 2486 y(expressions.)f (dans)e(la)i(th)o(\023)-21 b(eorie)15 b fn(pei)p fq(,)f(certains)h (\023)-21 b(enonc)o(\023)g(es)14 b(seulemen)o(t)i(son)o(t)e(des)i (programmes.)p eop %%page: 14 16 14 15 bop 75 269 a fq(14)587 b fl(chapitre)16 b(2.)45 b(d)1091 257 y(\023)1085 269 y(efinition)16 b(du)f(f)o(ormalisme)h fn(pei)75 397 y fo(d)o(\023)-25 b(e\014nition)19 b(1)31 b fq(\(programme)13 b fn(pei)p fq(\))75 453 y(un)18 b(\023)-21 b(enonc)o(\023)g(e)18 b fn(pei)h fq(est)g(un)h fj(pr)n(o)n(gr)n(amme)f fq(si,)g(p)q(our)g(tout)g(jeu)g(de)h(c)o(hamps)f(de)g(donn)o(\023)-21 b(ees)19 b(en)h(en)o(tr)o(\023)-21 b(ee,)17 b(il)75 510 y(existe)i(au)g(plus)h(un)g(ensem)o(ble)g(de)f(c)o(hamps)g(de)g(donn)o (\023)-21 b(ees)19 b(en)g(sortie)g(d)o(\023)-21 b(e\014nissan)o(t)19 b(une)g(solution)h(du)75 566 y(syst)o(\022)-21 b(eme)14 b(d')o(\023)-21 b(equations.)146 679 y(cette)14 b(d)o(\023)-21 b(e\014nition)17 b(a)e(p)q(our)g(cons)o(\023)-21 b(equence)16 b(de)g(ne)g(pas)f(consid)o(\023)-21 b(erer)15 b(comme)g(des)h (programmes,)e(les)74 736 y(\023)-21 b(enonc)o(\023)g(es)14 b(a)o(y)o(an)o(t)g(des)h(r)o(\023)-21 b(esultats)14 b(non-d)o(\023)-21 b(eterministes.)146 849 y(nous)15 b(p)q(ouv)o(ons)g(d'ores)f(et)h(d)o (\023)-21 b(ej\022)e(a)14 b(illustrer)j(\022)-23 b(a)15 b(l'aide)h(de)g(quelques)g(exemples)g(simples,)g(les)g(primi-)75 905 y(tiv)o(es)f(du)h(langage)8 b(:)75 1018 y fo(exemple)17 b(1)f fj(a)n(ddition)g(d'une)g(matric)n(e)g(et)h(de)f(sa)g(tr)n(ansp)n (os)o(\023)-22 b(e)n(e)75 1131 y fk(matsum)23 b(:)h(a)15 b ff(7!)g fk(c)75 1143 y fx(8)75 1181 y(>)75 1193 y(<)75 1268 y(>)75 1280 y(:)137 1185 y fk(a)g fq(=)g fk(matrix)7 b(::)g(a)137 1242 y(t)15 b fq(=)g fk(a)g fa(c)h fk(transp)137 1298 y(c)f fq(=)g fk(add)g fa(b)h fk(\(a)23 b(/&/)8 b(t\))96 1361 y(matrix)40 b fq(=)i fm(\025)p fk(\(i,j\))p ff(j)p fk(\(0)p ff(\024)p fk(i)p fm(<)p fk(n)7 b(&)h(0)p ff(\024)p fk(j)p fm(<)p fk(n\).\(i,j\))96 1418 y(transp)40 b fq(=)i fm(\025)p fk(\(i,j\))p ff(j)p fk(\(0)p ff(\024)p fk(i)p fm(<)p fk(n)7 b(&)h(0)p ff(\024)p fk(j)p fm(<)p fk(n\).\(j,i\))96 1474 y(add)112 b fq(=)42 b fm(\025)p fk(\(a)p fq(;)o fk(b\).\(a+b\))143 1590 y fq({)23 b(la)14 b(premi)o(\022)-21 b(ere)14 b(\023)-21 b(equation)14 b(est)g(une)h(pr)o(\023)-21 b(econdition)15 b(sur)f(le)i(c)o(hamp)e(de)h(donn)o(\023)-21 b(ees)14 b(en)h(en)o(tr)o(\023)-21 b(ee)13 b fk(a)p fq(.)h(elle)189 1646 y(exprime)19 b(que)f fk(a)h fq(n'est)e(pas)i(mo)q(di\014)o(\023) -21 b(e)18 b(par)g(l'application)i(du)f(c)o(hangemen)o(t)f(de)h(base)f fk(matrix)p fq(.)189 1703 y(ce)d(c)o(hangemen)o(t)g(de)h(base)g(est)f (l'iden)o(tit)o(\023)-21 b(e)16 b(sur)f(le)h(domaine)g(carr)o(\023)-21 b(e)14 b(\(0)p ff(\024)p fm(i;)8 b(j)s(<)o(n)p fq(\))f(:)15 b(comme)g(nous)189 1759 y(le)20 b(v)o(errons)e(par)h(la)h(suite,)f (ceci)h(signi\014e)h(que)f(le)g(domaine)g(discret)f(sur)h(lequel)h(on)e (place)h(les)189 1815 y(v)m(aleurs)c(de)f fk(a)g fq(est)g(inclus)i (dans)f(ce)f(carr)o(\023)-21 b(e.)143 1906 y({)23 b(la)e(deuxi)o(\022) -21 b(eme)20 b(\023)-21 b(equation)20 b(d)o(\023)-21 b(e\014nit)21 b(le)g(c)o(hamp)g fk(t)f fq(par)h(une)g(op)o(\023)-21 b(eration)20 b(de)h(routage)f(appliqu)o(\023)-21 b(ee)189 1962 y(sur)16 b fk(a)p fq(.)f(de)h(mani)o(\022)-21 b(ere)16

b(g)o(\023)-21 b(en)o(\023)g(erale,)15 b(un)h(routage)g(exprime)h(des)f (d)o(\023)-21 b(ep)q(endances)17 b(sur)f(le)h(r)o(\023)-21 b(ef)o(\023)g(eren)o(tiel)7 b(:)189 2019 y(le)18 b(c)o(hamp)h fk(x)c fa(c)g fk(g)j fq(est)g(tel)g(que)h(ses)f(v)m(aleurs)h(de)f(co)q (ordonn)o(\023)-21 b(ees)18 b fm(z)h ff(2)f fm(dom)p fq(\()p fk(g)p fq(\))f(son)o(t)g(issues)i(des)189 2075 y(p)q(oin)o(ts)e(de)h(co)q(ordonn)o(\023)-21 b(ees)16 b fk(g)p fq(\()p fm(z)r fq(\))h(de)h fk(x)p fq(.)e(en)i(l'o)q (ccurrence)g(sur)f(l'exemple,)h(les)g(v)m(aleurs)h(plac)o(\023)-21 b(ees)189 2132 y(aux)14 b(p)q(oin)o(ts)h(de)g(co)q(ordonn)o(\023)-21 b(ees)14 b(\()p fm(i;)8 b(j)s fq(\))13 b(dans)h fk(t)h fq(son)o(t)f(celles)i(plac)o(\023)-21 b(ees)15 b(en)g(\()p fm(j;)8 b(i)p fq(\))k(dans)j(le)h(c)o(hamp)e fk(a)p fq(.)143 2222 y({)23 b(la)13 b(troisi)o(\022)-21 b(eme)11 b(\023)-21 b(equation)13 b(d)o(\023)-21 b(e\014nit)13 b(le)h(c)o(hamp)f(de)g(donn) o(\023)-21 b(ees)13 b(en)g(sortie)g fk(c)p fq(.)f(la)h(partie)g(droite) g(d)o(\023)-21 b(e\014nit)189 2279 y(la)18 b(sup)q(erp)q(osition)i(de)f fk(a)f fq(et)g fk(t)p fq(,)g fj(i.e.)g fq(l'ensem)o(ble)h(des)g (couples)g fk(\(a)p fq(;)p fk(b\))p fq(,)e(a)o(v)o(ec)h fk(a)g ff(2)g fk(a)h fq(et)f fk(b)g ff(2)g fk(t)p fq(.)189 2335 y(l'op)o(\023)-21 b(eration)10 b(fonctionnelle)k(d)o(\023)-21 b(e\014nie)13 b(ici)g(consiste)f(en)g(l'application)i(de)e(la)g (fonction)g fk(add)g fq(\022)-23 b(a)11 b(tous)189 2391 y(les)k(\023)-21 b(el)o(\023)g(emen)o(ts)13 b(de)j(ce)g(c)o(hamp.)75 2486 y fa(\006)p eop %%page: 15 17 15 16 bop 75 269 a fl(2.1.)29 b(intr)o(oduction)570 257 y(\022)562 269 y(a)16 b(la)f(pr)o(ogramma)l(tion)h fn(pei)577 b fq(15)75 397 y fo(exemple)17 b(2)f fj(somme)g(de)g fm(n)h fj(nombr)n(es)75 515 y fq(p)o(our)g(calculer)i(la)f(somme)f(de)h fm(n)g fq(nom)o(bres)f(plac)o(\023)-21 b(es)17 b(initialemen)o(t)j(sur) d(le)h(c)o(hamp)g fk(a)p fq(,)f(nous)h(p)q(ouv)o(ons)75 571 y(amener)e(l'ensem)o(ble)h(des)f(v)m(aleurs)h(en)f(un)g(p)q(oin)o (t)g(unique)i(et)d(y)h(former)f(la)h(s)o(\023)-21 b(equence)16 b(de)g(ces)g(v)m(aleurs.)75 628 y(on)f(applique)h(ensuite)g(une)f(op)o (\023)-21 b(eration)13 b(fonctionnelle)k(p)q(our)e(sommer)f(cette)g(s)o (\023)-21 b(equence.)14 b(la)h(mani)o(\022)-21 b(ere)75 684 y(la)18 b(plus)g(g)o(\023)-21 b(en)o(\023)g(erale)16 b(et)h(la)h(plus)g(simple)h(d'exprimer)f(ce)f(d)o(\023)-21 b(eplacemen)o(t)18 b(est)f(d'utiliser)i(l'op)o(\023)-21 b(eration)16 b(de)75 740 y(r)o(\023)-21 b(eduction)12 b(g)o(\023)-21 b(eom)o(\023)g(etrique)6 b(:)12 b(on)g(pr)o(\023)-21 b(ecise)13 b(seulemen)o(t)g(la)g(destination)g(des)g(v)m(aleurs,)g (sans)f(dire)h(commen)o(t)75 797 y(elles)18 b(son)o(t)d(ac)o(hemin)o (\023)-21 b(ees)16 b(v)o(ers)g(cette)f(destination.)i(cette)e (expression)i(traduit)f(en)h(fait)e(la)i(d)o(\023)-21 b(e\014nition)75 853 y(globale)16 b(du)g(scalaire)g fm(t)d fq(=)534 821 y fx(p)578 831 y fw(n)p fx(\000)p fg(1)578 865 y fw(i)p fg(=0)650 853 y fm(a)674 860 y fw(i)688 853 y fq(.)i(le)h(programme)e(s')o(\023)-21 b(ecrit)14 b(simplemen)o(t)1385 837 y fg(4)1412 853 y fq(:)75 971 y fk(redsum)23 b(:)h(a)15 b ff(7!)g fk(t)75 985 y fx(\()133 1029 y fk(a)g fq(=)h fk(vector)7 b(::)g(a)133 1085 y(t)15 b fq(=)h fk(sum)f fa(b)g fk(\(red)23 b fq(;)8 b fa(b)24 b fk(a\))96 1152 y(vector)40 b fq(=)i fm(\025)p fk(\(i\))p ff(j)p fk(\(0<=i
(c)o(hemin)h(suivi)g(par)e(les)h(v)m(aleurs)g(p)q(our)g(atteindre)f(la) h(destina-)75 1491 y(tion.)g(dans)g(ce)g(but,)g(nous)h(utilisons)g(une) g(d)o(\023)-21 b(e\014nition)16 b(r)o(\023)-21 b(ecursiv)o(e)15 b(p)q(our)h(d)o(\023)-21 b(e\014nir)15 b(le)h(c)o(hamp)f fk(r)8 b fq(:)75 1609 y fk(prefixsum)23 b(:)g(a)15 b ff(7!)h fk(r)75 1623 y fx(\()133 1667 y fk(a)f fq(=)h fk(vector)7 b(::)g(a)133 1723 y(r)15 b fq(=)h fk(add)f fa(b)g fk(\(a)24 b(/&/)7 b(\(r)24 b fa(c)g fk(prev\)\))96 1789 y(vector)40 b fq(=)i fm(\025)p fk(\(i\))p ff(j)p fk(\(0<=i
b fy(\()p fu(r)14 b ft(c)g fu(prev)o fy(\))1258 1086 y fu(add)f ft(b)h fu(\(a/&/)6 b(\(r)21 b ft(c)i fu(prev)o(\)\))-717 b fy(15)33 b(21)-192 b(10)-99 b(6)j(3)g(1)751 692 y(1)54 b(3)g(6)36 b(10)d(15)g(21)826 824 y(1)54 b(3)g(6)36 b(10)d(15)751 955 y fs(1)39 b(2;)o(1)30 b(3;)o(3)g(4;)o(6)86 b(6;)o(15)-138 b(5;)o(10)p 1896 1208 2 756 v 75 1210 1822 2 v 305 1287 a fn(fig.)15 b fq(2.7)f(-)31 b fj(l)n(e)15 b(champ)i fk(r)f fj(c)n(ontient)g(les)f(sommes)h(p)n(artiel)r(les)g(du)g(champ)h fk(a)146 1407 y fq(v)o(\023)-21 b(eri\014er)17 b(qu'un)h(c)o(hamp)f (appartien)o(t)g(\022)-23 b(a)18 b(la)f(solution)h(du)g(syst)o(\022)-21 b(eme)17 b(d')o(\023)-21 b(equations)16 b(est)h(la)h(fa\030)-20 b(con)17 b(la)75 1463 y(plus)h(abstraite)f(de)g(consid)o(\023)-21 b(erer)17 b(un)h(programme)e fn(pei)p fq(.)g(on)i(p)q(eut)e(\023)-21 b(evidemmen)o(t)17 b(souhaiter)g(p)q(ouv)o(oir)75 1519 y(calculer)g(une)e(telle)i(solution,)e(c'est-\022)-23 b(a-dire)16 b(asso)q(cier)g(une)f(s)o(\023)-21 b(eman)o(tique)15 b fj(op)o(\023)-22 b(er)n(ationnel)r(le)14 b fq(\022)-23 b(a)15 b(ces)f(\023)-21 b(equa-)75 1576 y(tions.)18 b(nous)g(y)h (reviendrons)g(en)g(d)o(\023)-21 b(etail)18 b(dans)g(le)i(dernier)f(c)o (hapitre.)f(sur)h(cet)f(exemple)i(simple)g(on)75 1632 y(p)q(ourrait)e(naturellemen)o(t)h(d)o(\023)-21 b(eterminer)17 b(le)i(c)o(hamp)f(solution)g(en)g(calculan)o(t)h(p)q(our)f(c)o(haque)f (\023)-21 b(etap)q(e)17 b(de)75 1689 y(la)g(r)o(\023)-21 b(ecurrence,)17 b(la)g(somme)f(de)i(la)f(s)o(\023)-21 b(equence)17 b(de)h(v)m(aleurs)f(obten)o(ue)h(\022)-23 b(a)16 b(cette)g(\023)-21 b(etap)q(e,)16 b(ceci)i(par)f(sup)q(er-)75 1745 y(p)q(osition)i(de)g fk(a)f fq(a)o(v)o(ec)g(ce)h(m)o(^)-21 b(eme)17 b(c)o(hamp)h(don)o(t)g(les)h(v)m(aleurs)g(on)o(t)e(\023)-21 b(et)o(\023)g(e)16 b(d)o(\023)-21 b(ecal)o(\023)g(ees)18 b(sur)g(la)h(droite)f(d'une)75 1802 y(p)q(osition.)e(le)h(c)o(hamp)f (solution)g(est)g(\014nalemen)o(t)g(obten)o(u)g(lorsque)g(le)h(d)o (\023)-21 b(ecalage)15 b(v)o(ers)h(la)g(droite)g(n'est)75 1858 y(plus)g(p)q(ossible,)h(les)f(v)m(aleurs)g(n')o(\023)-21 b(etan)o(t)13 b(plus)j(dans)g(le)g(domaine)f(de)h(la)g(fonction)f fk(prev)p fq(.)146 1917 y(en)f(somme,)f(le)h(programme)f fk(prefixsum)g fq(est)h(une)g(v)o(ersion)g(plus)h(pr)o(\023)-21 b(ecise,)14 b(concernan)o(t)g(les)h(com-)75 1973 y(m)o(unications)h (induites,)g(que)f(le)g(programme)f fk(redsum)p fq(.)f(comme)h(nous)h (le)h(v)o(errons)e(dans)h(le)g(c)o(hapitre)75 2030 y(3,)g(nous)g (dirons)h(que)f(ce)h(programme)e fj(r)n(a\016ne)h fk(redsum)p fq(.)75 2145 y fo(exemple)i(3)f fj(d)o(\023)-22 b(ete)n(ction)16 b(de)g(p)n(alindr)n(omes)75 2260 y fq(un)d(v)o(ecteur)f fm(v)22 b fq(est)12 b(un)h(palindrome)h(si)f fm(v)788 2267 y fw(i)813 2260 y fq(=)g fm(v)888 2267 y fw(n)p fx(\000)p fg(1)p fx(\000)p fw(i)991 2260 y fq(,)f ff(8)p fm(i)g ff(2)h fq([0)8 b fm(:)g(:)g(:)d(n)t ff(\000)t fq(1].)13 b(p)o(our)d(\023)-21 b(ecrire)12 b(le)i(programme)75 2316 y fn(pei)p fq(,)h(qui)h(d)o(\023)-21 b(etecte)14 b(si)i(un)g(v)o(ecteur)f(est)g(un)h(palindrome,)g(nous)f(n'a)o(v)o(ons) g(pas)g(b)q(esoin)h(de)g(plus)g(de)g(pri-)75 2373 y(mitiv)o(es)g(que)h (p)q(our)f(le)g(programme)f fk(redsum)p fq(.)g(dans)g(le)i(programme)e (suiv)m(an)o(t,)h(la)g(v)m(aleur)h(b)q(o)q(ol)o(\023)-21 b(eenne)75 2429 y(du)18 b(c)o(hamp)f fk(r)g fq(plac)o(\023)-21 b(ee)18 b(en)g fm(i)e fq(=)g(0)h(indique)j(si)e(le)g(placemen)o(t)g (des)f(v)m(aleurs)i(du)f(c)o(hamp)f(de)h(donn)o(\023)-21 b(ees)17 b fk(a)75 2486 y fq(forme)e(un)g(palindrome.)p eop %%page: 17 19 17 18 bop 75 269 a fl(2.2.)29 b(objets)16 b(du)f(langa)o(ge)1114 b fq(17)146 397 y fk(palind)23 b(:)g(a)15 b ff(7!)h fk(r)146

411 y fx(\()204 455 y fk(t)f fq(=)g fk(equ)g fa(b)h fk(\(a)23 b(/&/)8 b(\(a)23 b fa(c)i fk(opp)o(\)\))204 511 y(r)15 b fq(=)g fk(and)g fa(b)h fk(\(red)23 b fq(;)8 b fa(b)23 b fk(t\))170 589 y(equ)50 b fq(=)g fm(\025)p fk(\(a)p fq(;)o fk(b\).\(a)23 b(=)h(b\))170 646 y(opp)50 b fq(=)g fm(\025)p fk(\(i\))p ff(j)p fk(\(0)p ff(\024)p fk(i)p ff(\024)p fk(n/2\).\(n-1-i\))170 702 y(red)g fq(=)g fm(\025)p fk(\(i\))p ff(j)p fk(\(0)p ff(\024)p fk(i)p ff(\024)p fk(n/2\).\(0\))170 759 y(and)g fq(=)g fk(id)25 b fq(#)10 b fm(\025)p fk(\(a)p fq(;)o fk(b\).\(a)d(&)h(\(and)23 b(b\)\))75 827 y fa(\006)75 1032 y ft(2.2)66 b(ob)t(jets)21 b(du)i(langage)146 1135 y fq(nous)14 b(v)o(enons)g(de)h(v)o(oir)f(in)o (tuitiv)o(emen)o(t)i(quelques)f(programmes)e fn(pei)p fq(.)h(nous)g(d)o(\023)-21 b(etaillons)15 b(main)o(te-)75 1192 y(nan)o(t)g(les)h(notations)e(utilis)o(\023)-21 b(ees,)16 b(et)f(les)h(ob)s(jets)f(du)g(langage)g fn(pei)p fq(.)143 1302 y({)23 b(les)16 b(programmes)7 b(:)15 b(la)i(structure)f (d'un)g(programme)f fn(pei)h fq(est)g(la)h(suiv)m(an)o(te.)f(un)h (programme)189 1359 y fk(p)h fq(p)q(oss)o(\022)-21 b(ede)19 b(en)g(en)o(tr)o(\023)-21 b(ee)18 b(un)i fm(n)p fq(-uplet)g(\()p fk(i)878 1366 y fg(1)896 1359 y fm(;)8 b(:)g(:)g(:)d(;)j fk(i)1022 1366 y fw(n)1044 1359 y fq(\))18 b(de)i(c)o(hamps)f(de)g (donn)o(\023)-21 b(ees,)18 b(et)h(un)h fm(m)p fq(-uplet)189 1415 y(\()p fk(o)231 1422 y fr(1)248 1415 y fm(;)8 b(:)g(:)g(:)t(;)g fk(o)373 1422 y fw(m)404 1415 y fq(\))15 b(de)h(c)o(hamps)f(de)g(donn)o (\023)-21 b(ees)15 b(en)h(sortie.)189 1492 y(les)d(c)o(hamps)g(en)h(en) o(tr)o(\023)-21 b(ee)12 b(et)h(les)g(c)o(hamps)g(en)h(sortie)f(son)o(t) f(li)o(\023)-21 b(es)14 b(par)f(des)f(\023)-21 b(equations)12 b(appartenan)o(t)189 1549 y(au)18 b(syst)o(\022)-21 b(eme)18 b(d')o(\023)-21 b(equations)18 b fm(s)s fq(,)f(\023)-21 b(ev)o(en)o(tuellemen)o(t)19 b(\022)-23 b(a)18 b(tra)o(v)o(ers)g(des)g (\023)-21 b(equations)18 b(p)q(ortan)o(t)g(sur)g(des)189 1605 y(c)o(hamps)d(de)g(donn)o(\023)-21 b(ees)15 b(in)o(term)o(\023)-21 b(ediaires.)189 1738 y fm(p)30 b fk(:)24 b fq(\()p fk(i)338 1745 y fg(1)356 1738 y fm(;)8 b(:)g(:)g(:)d(;)j fk(i)482 1745 y fw(n)503 1738 y fq(\))15 b ff(7!)h fq(\()p fk(o)639 1745 y fg(1)657 1738 y fm(;)8 b(:)g(:)g(:)d(;)j fk(o)783 1745 y fw(m)813 1738 y fq(\))189 1756 y fx(n)241 1803 y fq(s)214 1884 y fj([d)o(\023)-22 b(e\014nitions)14 b(de)j(fonctions])143 2050 y fq({)23 b(les)13 b(\023)-21 b(equations)14 b(en)o(tre)g(c)o(hamps)g(de)g(donn)o(\023)-21 b(ees)7 b(:)14 b(c)o(haque)g(\023)-21 b(equation)13 b(\(non-orien)o(t)o (\023)-21 b(ee\))13 b(du)i(syst)o(\022)-21 b(eme)189 2106 y fm(s)15 b fq(exprime)f(l')o(\023)-21 b(egalit)o(\023)g(e)12 b(des)h(expressions)h(de)f(c)o(hamps)g(de)h(donn)o(\023)-21 b(ees)12 b(de)i(part)e(et)h(d'autre)f(du)i(sym-)189 2163 y(b)q(ole)k(\023)-21 b(egale.)17 b(une)h(expression)h(de)g(c)o(hamp)f (de)g(donn)o(\023)-21 b(ees)18 b(est)f(soit)h(celle)i(d'un)f(c)o(hamp)f (simple,)189 2219 y(soit)h(celle)j(d'une)f(sup)q(erp)q(osition)g(de)g (c)o(hamps)e(de)i(donn)o(\023)-21 b(ees,)19 b(soit)h(celle)h(d'une)g (suite)f(d'op)o(\023)-21 b(e-)189 2276 y(rations.)15 b(p)o(ar)g(exemple,)i fk(plus)d fa(b)i fk(\(a)23 b(/&/)8 b(b\))15 b fq(ou)h(encore)g fk(\(carre)23 b fa(b)i fk(a)o(\))16 b fa(c)f fk(shift)g fq(son)o(t)g(des)189 2332 y(expressions)h(de)f(c)o (hamp)g(de)h(donn)o(\023)-21 b(ees.)143 2486 y({)23 b(les)15 b(op)o(\023)-21 b(erations)6 b(:)14 b(nous)h(a)o(v)o(ons)f(vu)h(que)g (les)g(op)o(\023)-21 b(erations)13 b(consistaien)o(t)j(en)f (l'application)h(d'une)189 2542 y(fonction)21 b(sur)f(un)h(c)o(hamp)g (de)g(donn)o(\023)-21 b(ees.)20 b(la)h(notation)f(des)h(fonctions)g(en) g fn(pei)f fq(est)g(d)o(\023)-21 b(eriv)o(\023)g(ee)p

eop %%page: 18 20 18 19 bop 75 269 a fq(18)587 b fl(chapitre)16 b(2.)45 b(d)1091 257 y(\023)1085 269 y(efinition)16 b(du)f(f)o(ormalisme)h fn(pei)189 397 y fq(du)k(lam)o(b)q(da-calcul.)i(une)e(fonction)g fk(f)g fq(de)g(domaine)g fm(dom)p fq(\()p fk(f)p fq(\))g(=)g ff(f)p fk(x)p ff(j)f fk(p\(x\))p ff(g)g fq(est)h(not)o(\023)-21 b(ee)19 b(par)189 453 y(l'expression)h fm(\025)p fk (\(x\)|p\(x\).f\(x\))m fq(.)f(p)o(ar)f(commo)q(dit)o(\023)-21 b(e,)17 b(nous)i(p)q(ouv)o(ons)f(\023)-21 b(ecrire)19 b fm(\025)p fk(\(x\).f\(x\))e fq(au)189 510 y(lieu)f(de)g fm(\025)p fk(\(x\)|true.f\(x\))n fq(,)f(et)g fm(\025)p fk(\(x\)|p\(x\))e fq(au)i(lieu)i(de)f fm(\025)p fk(\(x\)|p\(x\).\(x\))n fq(.)189 590 y(une)i(fonction)g fk(f)g fq(d)o(\023)-21 b(e\014nie)18 b(sur)g(des)g(sous-domaines)h(disjoin)o(ts)f(est)g(not)o (\023)-21 b(ee)16 b fk(f1)10 b fq(#)g fk(f2)p fq(,)17 b(et)h(le)h(do-)189 646 y(maine)c(d'une)h(fonction)g(comp)q(os)o(\023) -21 b(ee)14 b fk(f)h ff(\016)g fk(g)g fq(est)g ff(f)p fk(x)d ff(2)h fm(dom)p fq(\()p fk(g)p fq(\))f ff(j)i fk(g\(x\))h ff(2)e fm(dom)p fq(\()p fk(f)p fq(\))p ff(g)p fq(.)189 726 y(nous)19 b(utilisons)i(\023)-21 b(egalemen)o(t)19 b(la)h(fonction)g(iden)o(ti\014)o(\023)-21 b(ee)21 b(par)e(le)i(mot-cl) o(\023)-21 b(e)19 b fk(id)p fq(,)g(qui)i(\014ltre)f(les)g(s)o(\023)-21 b(e-)189 783 y(quences)16 b(\022)-23 b(a)14 b(un)h(\023)-21 b(el)o(\023)g(emen)o(t.)13 b(cette)i(fonction)g(appliqu)o(\023)-21 b(ee)16 b(\022)-23 b(a)15 b(un)g(\023)-21 b(el)o(\023)g(emen)o(t)13 b(rend)j(cet)e(\023)-21 b(el)o(\023)g(emen)o(t.)13 b(elle)189 839 y(est)20 b(fr)o(\023)-21 b(equemmen)o(t)19 b(utilis)o(\023)-21 b(ee)22 b(p)q(our)f(d)o(\023)-21 b(e\014nir)20 b(des)h(fonctions)g(r)o (\023)-21 b(ecursiv)o(es)20 b(dans)h(les)g(op)o(\023)-21 b(erations)189 896 y(fonctionnelles.)20 b(ainsi,)f(la)g(somme)f(r)o (\023)-21 b(ecursiv)o(e)19 b(d'une)g(s)o(\023)-21 b(equence)18 b(de)h(v)m(aleurs)h(s')o(\023)-21 b(ecrit)6 b(:)18 b fk(sum)g fq(=)189 952 y fk(id)30 b fq(#)10 b fm(\025)p fk(\(a)p fq(;)o fk(b\).\(a+sum\(b\)\))n fq(.)20 b(dans)h(cette)f(d)o (\023)-21 b(e\014nition,)21 b(la)g(fonction)g fk(sum)p fq(,)f(sur)h(le)g(domaine)189 1009 y(des)16 b(s)o(\023)-21 b(equences)17 b(\022)-23 b(a)15 b(un)h(\023)-21 b(el)o(\023)g(emen)o (t,)15 b(rend)h(cet)g(\023)-21 b(el)o(\023)g(emen)o(t.)14 b(sur)j(le)g(domaine)g(des)f(s)o(\023)-21 b(equences)17 b(\022)-23 b(a)16 b(plus)189 1065 y(d'un)f(\023)-21 b(el)o(\023)g(emen) o(t,)15 b(elle)j(rend)f(la)g(somme)f(du)g(premier)g(\023)-21 b(el)o(\023)g(emen)o(t)16 b(plus)h(la)g(somme)f(du)g(reste)h(de)f(la) 189 1122 y(s)o(\023)-21 b(equence.)189 1258 y(une)18 b(fonction)g(p)q(eut)h(appara)-5 b(^)-18 b(\020tre)18 b(directemen)o(t)g(dans)g(l'expression)h(de)g(c)o(hamp)f(de)g(donn)o (\023)-21 b(ees,)189 1314 y(comme)13 b(dans)g(l'expression)i fk(a)p fq(=)p fk(b)g fa(c)g fm(\025)p fk(\(i\).\(i+1\))o fq(,)d(ou)i(bien)f(^)-21 b(etre)12 b(r)o(\023)-21 b(ef)o(\023)g(erenc)o (\023)g(ee)11 b(par)i(un)h(nom)f(de)189 1371 y(fonction,)e(la)h(d)o (\023)-21 b(e\014nition)12 b(de)g(la)f(fonction)g(\023)-21 b(etan)o(t)10 b(rep)q(ort)o(\023)-21 b(ee)10 b(en)i(dehors)g(du)g(syst) o(\022)-21 b(eme)10 b(d')o(\023)-21 b(equations.)189 1427 y(c'est)10 b(la)i(notation)f(que)h(nous)g(utilisons)h(le)f(plus)h (fr)o(\023)-21 b(equemmen)o(t)10 b(p)q(our)i(des)g(raisons)f(de)h (lisibil)q(it)o(\023)-21 b(e.)75 1584 y ft(2.3)66 b(s)o(\023)-32 b(eman)n(tique)146 1691 y fq(nous)17 b(allons)i(main)o(tenan)o(t)e(exp) q(oser)h(la)h(s)o(\023)-21 b(eman)o(tique)17 b(des)h(d)o(\023)-21 b(e\014nitions)18 b fn(pei)p fq(,)g(toutes)f(bas)o(\023)-21 b(ees)17 b(sur)75 1747 y(celle)23 b(du)e(c)o(hamp)f(de)h(donn)o(\023)

-21 b(ees.)21 b(rapp)q(elons)h(qu'un)f(c)o(hamp)g(de)g(donn)o(\023)-21 b(ees)20 b(est)h(un)g(placemen)o(t)g(des)75 1803 y(v)m(aleurs)e(d'un)g (m)o(ulti-ensem)o(ble)h(de)f(v)m(aleurs)g fm(v)28 b fq(dans)18 b(un)h(r)o(\023)-21 b(ef)o(\023)g(eren)o(tiel,)17 b(tel)i(que)f(l'on)h (puisse)g(distin-)75 1860 y(guer)d(c)o(hacune)h(des)f(v)m(aleurs)h(par) f(des)h(co)q(ordonn)o(\023)-21 b(ees)15 b(en)o(ti)o(\022)-21 b(eres.)15 b(ce)i(placemen)o(t)f(est)g(une)h(application)75 1916 y fm(v)d fq(:)f fe(z)170 1900 y fw(n)202 1916 y ff(7!)g fm(v)d fq(.)k(nous)g(a)o(v)o(ons)g(vu)g(en)h(in)o(tro)q (duction)h(que)f(les)g(c)o(hamps)f(de)h(donn)o(\023)-21 b(ees)14 b fk(v)p fq(,)g(don)o(t)g(les)i(v)m(aleurs)75 1973 y ff(f)p fq(1)p fm(;)8 b fq(2)p fm(;)g ff(\000)p fq(3)p fm(;)g fq(1)p ff(g)15 b fq(son)o(t)i(plac)o(\023)-21 b(ees)19 b(dans)f(cet)g(ordre)g(sur)h(l'in)o(terv)m(alle)h([0)8 b fm(:)g(:)g(:)d fq(3])17 b(de)i fe(z)-13 b fq(,)15 b(et)j fk(m)p fq(,)g(qui)h(place)g(ces)75 2029 y(m)o(^)-21 b(emes)17 b(v)m(aleurs)j(sur)e(les)h(p)q(oin)o(ts)g(de)g(co)q(ordonn)o(\023)-21 b(ees)18 b(0)g ff(\024)g fm(i;)8 b(j)19 b(<)g fq(2)f(de)h fe(z)1357 2013 y fg(2)1373 2029 y fq(,)f(ne)h(di\013)o(\022)-21 b(eren)o(t)17 b(que)i(d'une)75 2086 y(bijection)e fm(\033)r fq(\()p fm(i)p fq(\))11 b(=)i(\()p fm(i)h(mod)h fq(2)p fm(;)8 b(i)14 b(div)i fq(2\).)146 2201 y(plus)f(g)o(\023)-21 b(en)o(\023)g(eralemen)o(t,)13 b(p)q(our)h(un)h(m)o(^)-21 b(eme)14 b(m)o(ulti-ensem)o(ble)j(de)e(v)m(aleurs)h(donn)o(\023)-21 b(e,)13 b(si)j fm(v)e fq(:)e fe(z)1649 2185 y fw(n)1682 2201 y ff(7!)h fm(v)24 b fq(est)75 2258 y(le)14 b(placemen)o(t)g(d)o (\023)-21 b(e\014nissan)o(t)14 b(un)g(c)o(hamp)f(de)h(donn)o(\023)-21 b(ees)13 b fk(v)g fq(et)h fm(v)1107 2241 y fx(0)1131 2258 y fq(:)e fe(z)1189 2241 y fw(p)1218 2258 y ff(7!)h fm(v)23 b fq(celui)15 b(d)o(\023)-21 b(e\014nissan)o(t)14 b(un)g(c)o(hamp)75 2314 y(de)j(donn)o(\023)-21 b(ees)17 b fk(v')p fq(,)g(on)g(a)f fm(v)i fq(=)e fm(v)608 2298 y fx(0)630 2314 y ff(\016)c fm(\033)r fq(,)k(o)q(\022)-24 b(u)17 b fm(\033)h fq(est)f(une)h(bijection)g(de)g fm(dom)p fq(\()p fm(v)r fq(\))d(sur)i fm(dom)p fq(\()p fm(v)1609 2298 y fx(0)1620 2314 y fq(\).)f(la)h(\014gure)75 2370 y(2.8)d(mon)o(tre)h(cette)g(relation)h(sur)f(l'exemple)h(de)g(la)g (section)f(2.1.1)146 2486 y(ceci)g(v)o(eut)g(dire)h(que)g(tout)e(c)o (hoix)h(de)h(placemen)o(t)g(d)o(\023)-21 b(e\014nissan)o(t)14 b(un)i(c)o(hamp)f(de)g(donn)o(\023)-21 b(ees)15 b(est)g(arbi-)75 2542 y(traire)g(et)f(di\013)o(\022)-21 b(ere)15 b(d'une)g(bijection)h (par)f(rapp)q(ort)f(\022)-23 b(a)15 b(ce)g(qu'on)g(p)q(ourrait)g (consid)o(\023)-21 b(erer)14 b(comme)h(un)g fj(pla-)p eop %%page: 19 21 19 20 bop 75 269 a fl(2.3.)29 b(s)207 257 y(\023)201 269 y(emantique)1310 b fq(19)547 401 y 13052758 9267452 3420651 40587345 16379658 49796792 starttexfig 547 401 a %%begindocument: figures/sigma.eps /tgifdict 3 dict def tgifdict begin /tgifarrowtipdict 8 dict def tgifarrowtipdict /mtrx matrix put /tgifarrowtip { tgifarrowtipdict begin /dy exch def

/dx exch def /h exch def /w exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y translate dy dx atan rotate 0 0 moveto w neg h lineto w neg h neg lineto savematrix setmatrix end } def end tgifdict begin /tgifsavedpage save def 1 setmiterlimit 1 setlinewidth 0 setgray 72 0 mul 72 11.00 mul translate 72 128 div 100 mul 100 div dup neg scale gsave % eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate 47.250 -74.250 translate 1.406 1.125 scale 0 rotate save countdictstack mark newpath /showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa002km.dvi) @start /fa 1 50 df<5a1207123f12c71207b3a5eafff80d1c7c9b15>49 d e end texdict begin 1 0 bop 62 195 a fa(1)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat

countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin % eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate 33.891 -101.250 translate 1.266 1.125 scale 0 rotate save countdictstack mark newpath /showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa002km.dvi) @start /fa 1 51 df<ea07c0ea1830ea201cea400c130eeaf00f12f81307a21270ea00 0f130ea2131ca213381370136013c0ea0180ea0300ea0601120c1218ea1002ea3ffe127f 12ff101c7e9b15>50 d e end texdict begin 1 0 bop 62 195 a fa(2)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin % eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate 20.250 -83.250 translate 1.406 1.125 scale 0 rotate save countdictstack mark newpath /showpage {} def

/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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa002km.dvi) @start /fa 1 50 df<5a1207123f12c71207b3a5eafff80d1c7c9b15>49

d e end texdict begin 1 0 bop 62 195 a fa(1)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin % polygon/closed-spline 0 setgray newpath 240 80 moveto 224 128 lineto 240 144 lineto 288 160 lineto 304 144 lineto 336 128 lineto 336 96 lineto 336 64 lineto 304 64 lineto 288 80 lineto 256 64 lineto closepath gsave grestore gsave stroke grestore % box 0 setgray gsave 1.415 setmiterlimit newpath 96 224 moveto 224 224 lineto 224 256 lineto 96 256 lineto closepath stroke 1 setmiterlimit grestore % box 0 setgray gsave 1.415 setmiterlimit newpath 352 208 moveto 416 208 lineto 416 272 lineto 352 272 lineto closepath stroke 1 setmiterlimit grestore % eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin

/showpage {} def /letter {} def /legal {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate -60.750 -164.250 translate 1.406 1.125 scale 0 rotate save countdictstack mark newpath /showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa002km.dvi) @start /fa 1 50 df<5a1207123f12c71207b3a5eafff80d1c7c9b15>49 d e end texdict begin 1 0 bop 62 195 a fa(1)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin % eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate 68.203 -92.250 translate 1.078 1.125 scale 0 rotate save countdictstack mark newpath /showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa002km.dvi) @start /fa 1 52 df<ea07e0ea1830ea201ca2ea781e130e131e1238ea001ca2131813 301360ea07c0ea0030131ca2130e130fa2127012f8a3eaf00eea401c1220ea1830ea07c0 101d7e9b15>51 d e /fb 1 1 df0 d e end texdict begin 1 0 bop 62 195 a fb(\000)p fa(3)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat

countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin % eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate -29.109 -164.250 translate 1.266 1.125 scale 0 rotate save countdictstack mark newpath /showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa002km.dvi) @start /fa 1 51 df<ea07c0ea1830ea201cea400c130eeaf00f12f81307a21270ea00 0f130ea2131ca213381370136013c0ea0180ea0300ea0601120c1218ea1002ea3ffe127f 12ff101c7e9b15>50 d e end texdict begin 1 0 bop 62 195 a fa(2)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin % eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate -3.797 -164.250 translate 1.078 1.125 scale 0 rotate save countdictstack mark newpath /showpage {} def

/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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa002km.dvi) @start /fa 1 52 df<ea07e0ea1830ea201ca2ea781e130e131e1238ea001ca2131813

301360ea07c0ea0030131ca2130e130fa2127012f8a3eaf00eea401c1220ea1830ea07c0 101d7e9b15>51 d e /fb 1 1 df0 d e end texdict begin 1 0 bop 62 195 a fb(\000)p fa(3)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin % eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate -6.750 -164.250 translate 1.406 1.125 scale 0 rotate save countdictstack mark newpath /showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa002km.dvi) @start /fa 1 50 df<5a1207123f12c71207b3a5eafff80d1c7c9b15>49 d e end texdict begin 1 0 bop 62 195 a fa(1)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin % poly/open-spline 0 setgray gsave newpath 128 224 moveto 128 256 lineto stroke grestore % poly/open-spline 0 setgray

gsave newpath 160 224 moveto 160 256 lineto stroke grestore % poly/open-spline 0 setgray gsave newpath 192 224 moveto 192 256 lineto stroke grestore % eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate 114.891 -155.250 translate 1.266 1.125 scale 0 rotate save countdictstack mark newpath /showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa002km.dvi) @start /fa 1 51 df<ea07c0ea1830ea201cea400c130eeaf00f12f81307a21270ea00 0f130ea2131ca213381370136013c0ea0180ea0300ea0601120c1218ea1002ea3ffe127f 12ff101c7e9b15>50 d e end texdict begin 1 0 bop 62 195 a fa(2)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin % eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def

0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate 83.250 -155.250 translate 1.406 1.125 scale 0 rotate save countdictstack mark newpath /showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa002km.dvi) @start /fa 1 50 df<5a1207123f12c71207b3a5eafff80d1c7c9b15>49 d e end texdict begin 1 0 bop 62 195 a fa(1)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin % eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate 104.203 -173.250 translate 1.078 1.125 scale 0 rotate save countdictstack mark newpath /showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa002km.dvi) @start /fa 1 52 df<ea07e0ea1830ea201ca2ea781e130e131e1238ea001ca2131813 301360ea07c0ea0030131ca2130e130fa2127012f8a3eaf00eea401c1220ea1830ea07c0 101d7e9b15>51 d e /fb 1 1 df0 d e end texdict begin 1 0 bop 62 195 a fb(\000)p fa(3)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin

% eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate 101.250 -173.250 translate 1.406 1.125 scale 0 rotate save countdictstack mark newpath /showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa002km.dvi) @start /fa 1 50 df<5a1207123f12c71207b3a5eafff80d1c7c9b15>49 d e end texdict begin 1 0 bop 62 195 a fa(1)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin % poly/open-spline 0 setgray gsave newpath 352 240 moveto 416 240 lineto stroke grestore % poly/open-spline 0 setgray gsave newpath 384 208 moveto 384 272 lineto stroke grestore % poly/open-spline 0 setgray gsave newpath 240 240 moveto 0 96 atan dup cos 8 mul 336 exch sub exch sin 8 mul 240 exch sub lineto

stroke grestore gsave newpath 336 240 8 3 96 0 tgifarrowtip closepath fill grestore % poly/open-spline 0 setgray gsave newpath 160 208 moveto -64 64 atan dup cos 8 mul 224 exch sub exch sin 8 mul 144 exch sub lineto stroke grestore gsave newpath 224 144 8 3 64 -64 tgifarrowtip closepath fill grestore % poly/open-spline 0 setgray gsave newpath 368 192 moveto -48 -48 atan dup cos 8 mul 320 exch sub exch sin 8 mul 144 exch sub lineto stroke grestore gsave newpath 320 144 8 3 -48 -48 tgifarrowtip closepath fill grestore % eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate -25.279 -183.375 translate 1.015 1.125 scale 0 rotate save countdictstack mark newpath /showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa002km.dvi) @start /fa 1 91 df<003fb512803921c08100ea260038580102386002041240495a12 00495a495aa2495a495aa20181c7fca2ea0102ea0204a248481340485a15c03910200140

ec028038204004384080181460b6fc1a1c7f9b2c>90 d e /fb 1 19 df<90387fff8048b5fcd80780c7fc000ec8fc12185aa25aa25aa71260a27ea27e120e 6c7e0001b512806c7e90c8fca7007fb51280a219227d9920>18 d e /fc 2 42 df<1380ea0100120212065aa25aa25aa35aa412e0ac1260a47ea37ea27ea2 7e12027eea0080092a7c9e10>40 d<7e12407e12307ea27ea27ea37ea41380ac1300a412 06a35aa25aa25a12205a5a092a7e9e10>i e /fd 4 119 df<eb07e01300a2eb01c0a4eb 0380a43801e700ea0717ea0c0f1218ea380e12301270a2485aa4eb3880a3ea6078383199 00ea1e0e131d7e9c16>100 d<39381f81f0394e20c618394640e81ceb80f0ea8f00008e 13e0120ea2391c01c038a315703938038071a215e115e23970070064d83003133820127e 9124>109 d<13f8ea030cea0e06487e1218123000701380a238e00700a3130ea25bea60 185bea30e0ea0f8011127e9114>111 d<ea1c03ea270712471303ea8701a2120ea2ea1c 02a3130412181308a2ea1c10ea0c20ea07c010127e9114>118 d e end texdict begin 1 0 bop 62 195 a fd(dom)p fc(\()p fd(v)q fc(\))13 b fb(\022)f fa(z)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin % eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate -11.109 -219.375 translate 1.266 1.266 scale 0 rotate save countdictstack mark newpath /showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa002km.dvi) @start /fa 1 119 df<ea1c03ea270712471303ea8701a2120ea2ea1c02a31304121813 08a2ea1c10ea0c20ea07c010127e9114>118 d e end texdict begin 1 0 bop 62 195 a fa(v)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin

% eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate 100.406 -156.068 translate 1.018 1.074 scale 0 rotate save countdictstack mark newpath /showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa002km.dvi) @start /fa 1 51 df<121fea60c01360eaf07013301260ea0070a2136013c012011380 ea02005aea08101210ea2020ea7fe012ff0c137e9211>50 d e /fb 1 91 df<003fb512803921c08100ea260038580102386002041240495a1200495a495aa2 495a495aa20181c7fca2ea0102ea0204a248481340485a15c03910200140ec0280382040 04384080181460b6fc1a1c7f9b2c>90 d e /fc 1 19 df<90387fff8048b5fcd80780c7 fc000ec8fc12185aa25aa25aa71260a27ea27e120e6c7e0001b512806c7e90c8fca7007f b51280a219227d9920>18 d e /fd 1 49 df<1204120ea2121ca31238a212301270a212 60a212c0a2070f7f8f0a>48 d e /fe 2 42 df<1380ea0100120212065aa25aa25aa35a a412e0ac1260a47ea37ea27ea27e12027eea0080092a7c9e10>40 d<7e12407e12307ea27ea27ea37ea41380ac1300a41206a35aa25aa25a12205a5a092a7e 9e10>i e /ff 4 119 df<eb07e01300a2eb01c0a4eb0380a43801e700ea0717ea0c0f12 18ea380e12301270a2485aa4eb3880a3ea607838319900ea1e0e131d7e9c16>100 d<39381f81f0394e20c618394640e81ceb80f0ea8f00008e13e0120ea2391c01c038a315 703938038071a215e115e23970070064d83003133820127e9124>109 d<13f8ea030cea0e06487e1218123000701380a238e00700a3130ea25bea60185bea30e0 ea0f8011127e9114>111 d<ea1c03ea270712471303ea8701a2120ea2ea1c02a3130412 181308a2ea1c10ea0c20ea07c010127e9114>118 d e end texdict begin 1 0 bop 62 195 a ff(dom)p fe(\()p ff(v)177 180 y fd(0)190 195 y fe(\))12 b fc(\022)f fb(z)292 180 y fa(2)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin % eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def

0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate 100.125 -111.375 translate 1.125 1.125 scale 0 rotate save countdictstack mark newpath /showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa002km.dvi) @start /fa 1 49 df<1204120ea2121ca31238a212301270a21260a212c0a2070f7f8f 0a>48 d e /fb 1 119 df<ea1c03ea270712471303ea8701a2120ea2ea1c02a3130412 181308a2ea1c10ea0c20ea07c010127e9114>118 d e end texdict begin 1 0 bop 62 195 a fb(v)83 180 y fa(0)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin % eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate 51.863 -254.109 translate 1.237 1.266 scale 0 rotate save countdictstack mark newpath /showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa002km.dvi) @start /fa 1 28 df<eb7ffeea01ff1207380f0780ea1e03381c01c012381270a338e0 0380a3eb0700a2130eea600c6c5aea1860ea0f8017147e931a>27 d e end texdict begin 1 0 bop 71 199 a fa(\033)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin

% eps end /tgiflevel0 save def /tgifdictcount0 countdictstack def /tgifopcount0 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate -47.109 -218.137 translate 1.266 1.237 scale 0 rotate save countdictstack mark newpath /showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa002km.dvi) @start /fa 1 87 df<38fe0fe0a338380380ea3c07001c1300a3ea1e0fea0e0ea46c5a a4ea031813b8a3ea01b013f0a26c5a13197f9816>86 d e end texdict begin 1 0 bop 62 195 a fa(v)p eop end userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount0 sub {pop} repeat countdictstack tgifdictcount0 sub {end} repeat tgiflevel0 restore tgifdict begin % eps end /tgiflevel1 save def /tgifdictcount1 countdictstack def /tgifopcount1 count 1 sub def userdict begin /showpage {} def /letter {} def /legal {} def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath 1 72 128 div 100 mul 100 div div dup neg scale 72 0 mul neg 72 11.00 mul neg translate 132.891 -236.137 translate 1.266 1.237 scale 0 rotate save countdictstack mark newpath /showpage {} def /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 4 get round 4 exch put dup dup 5 get round 5 exch put 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 add]/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 showpage userdict /eop-hook known{eop-hook}if}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 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 texdict begin 39158280 55380996 1000 300 300 (/tmp/tgifa0040t.dvi) @start /fa 1 78 df<38fc07e0eafe0fa2383a0b80ea3b1ba513bbea39b3a413f3ea38 e3a21303a538fe0fe0a313197f9816>77 d e end texdict begin 1 0 bop 62 195 a fa(m)p eop end

userdict /end-hook known{end-hook}if cleartomark countdictstack exch sub { end } repeat restore count tgifopcount1 sub {pop} repeat countdictstack tgifdictcount1 sub {end} repeat tgiflevel1 restore tgifdict begin grestore tgifsavedpage restore end %matchingcreationdate: mon oct 14 14:12:46 1996 %%enddocument endtexfig 425 1132 a fn(fig.)15 b fq(2.8)g(-)30 b fj(r)n(elation)16 b(entr)n(e)f(deux)i(plac)n(ements)d(\023)-22 b(e)n(quivalents)75 1283 y(c)n(ement)15 b(de)h(r)o(\023)-22 b(ef)o(\023)g(er)n(enc)n(e)p fq(.)12 b(en)j(in)o(t)o(\023)-21 b(egran)o(t)13 b(cette)h(bijection)i (\022)-23 b(a)14 b(la)h(s)o(\023)-21 b(eman)o(tique)14 b(des)h(c)o(hamps)f(de)h(donn)o(\023)-21 b(ees,)75 1339 y(on)13 b(p)q(eut)h(ainsi)h(facilemen)o(t)f(mon)o(trer)e(la)i(relation) g(en)o(tre)f(deux)h(c)o(hamps)f(de)h(donn)o(\023)-21 b(ees)13 b(repr)o(\023)-21 b(esen)o(tan)o(t)12 b(le)75 1396 y(m)o(^)-21 b(eme)16 b(m)o(ulti-ensem)o(ble)10 b(:)16 b(ceci)i(deviendra)g(explicite)i(dans)d(l'in)o(terpr)o(\023)-21 b(etation)16 b(fonctionnelle)j(d)o(\023)-21 b(e\014nie)75 1452 y(en)17 b(section)g(2.3.5.)e(nous)i(caract)o(\023)-21 b(erisons)15 b(donc)i(un)g(c)o(hamp)g(de)g(donn)o(\023)-21 b(ees)17 b fk(x)f fq(par)h(une)g(paire)g(de)g(fonc-)75 1509 y(tions)d(\()p fm(v)g fq(:)e fm(\033)r fq(\).)g(de)h(plus,)h(nous) g(imp)q(osons)g(la)g(con)o(train)o(te)f(suiv)m(an)o(te)8 b(:)13 b fm(dom)p fq(\()p fm(v)r fq(\),)f(que)i(nous)f(app)q(elons)i (le)75 1565 y fj(domaine)h(des)f(valeurs)f fq(doit)g(^)-21 b(etre)13 b(inclus)k(dans)d(le)i(domaine)f(de)g(la)f(bijection)i fm(\033)r fq(,)e(que)h(nous)f(app)q(elons)75 1622 y fj(domaine)i(de)h (r)o(\023)-22 b(ef)o(\023)g(er)n(enc)n(e)13 b fq(des)j(v)m(aleurs,)f (a\014n)h(qu'un)f(c)o(hangemen)o(t)f(\023)-21 b(ev)o(en)o(tuel)15 b(de)g(placemen)o(t)h(concerne)75 1678 y(toutes)f(les)h(v)m(aleurs)g (du)f(c)o(hamp)h(de)f(donn)o(\023)-21 b(ees.)75 1798 y fo(d)o(\023)c(e\014nition)19 b(2)31 b fq(\(c)o(hamp)14 b(de)i(donn)o(\023)-21 b(ees\))75 1854 y(soit)18 b fm(v)26 b fq(un)18 b(m)o(ulti-ensem)o(ble)i(de)e(v)m(aleurs.)g(soit)f fm(v)i fq(une)f(fonction)g(de)f fe(z)1337 1838 y fw(n)1373 1854 y ff(7!)f fm(v)27 b fq(et)17 b fm(\033)i fq(une)f(bijection)75 1911 y fe(z)108 1894 y fw(n)141 1911 y ff(7!)13 b fe(z)232 1894 y fw(p)248 1911 y fq(,)i(alors)g(la)g(paire)h(\()p fm(v)e fq(:)e fm(\033)r fq(\))j(d)o(\023)-21 b(e\014nit)15 b(un)h(c)o(hamp)f(de)h(donn)o(\023)-21 b(ees)15 b(si)g fm(dom)p fq(\()p fm(v)r fq(\))d ff(\022)h fm(dom)p fq(\()p fm(\033)r fq(\).)75 2072 y fw(2.3.1)55 b(s)o(\023)-27 b(eman)n(tique)17 b(des)h(op)o(\023)-27 b(erations)146 2171 y fq(ceci)15 b(nous)f(p)q(ermet)g(de)h(d)o(\023)-21 b(e\014nir)15 b(la)f(s)o(\023)-21 b(eman)o(tique)14 b(de)g (l'application)j(de)d(c)o(hacune)h(des)g(trois)f(op)o(\023)-21 b(era-)75 2227 y(tions)15 b(sur)h(un)f(c)o(hamp)g fk(x)p fq(=)e(\()p fm(v)h fq(:)e fm(\033)r fq(\))7 b(:)75 2387 y fo(op)o(\023)-25 b(eration)19 b(fonctionnelle)75 2486 y fq(soit)g fk(f)h fq(une)f(fonction)h(de)g fm(v)29 b

fq(dans)19 b(un)h(ensem)o(ble)g(de)g(v)m(aleurs)g fm(w)6 b fq(,)19 b(telle)i(que)e fm(img)r fq(\()p fm(v)r fq(\))e ff(\022)j fm(dom)p fq(\()p fk(f)p fq(\),)75 2542 y(l'op)o(\023)-21 b(eration)14 b(fonctionnelle)k fk(y)d fq(=)g fk(f)g fa(b)h fk(x)f fq(d)o(\023)-21 b(e\014nit)15 b fk(y)g fq(comme)g(\()p fk(f)10 b ff(\016)g fm(v)k fq(:)e fm(\033)r fq(\).)p eop %%page: 20 22 20 21 bop 75 269 a fq(20)587 b fl(chapitre)16 b(2.)45 b(d)1091 257 y(\023)1085 269 y(efinition)16 b(du)f(f)o(ormalisme)h fn(pei)75 397 y fo(op)o(\023)-25 b(eration)19 b(de)e(routage)h(\(ou)g (op)o(\023)-25 b(eration)18 b(g)o(\023)-25 b(eom)o(\023)g(etrique\))75 483 y fq(soit)17 b fk(g)f fq(une)h(fonction)f(de)h fe(z)568 466 y fw(n)602 483 y ff(7!)e fm(dom)p fq(\()p fm(v)r fq(\),)g(telle)i(que)g fm(dom)p fq(\()p fk(g)p fq(\))c ff(\022)i fm(dom)p fq(\()p fm(\033)r fq(\),)f(l'op)o(\023)-21 b(eration)16 b(de)h(routage)75 539 y fk(y)24 b(=)f(x)15 b fa(c)h fk(g)f fq(d)o(\023)-21 b(e\014nit)15 b fk(y)g fq(comme)f(\023)-21 b(etan)o(t)14 b(\()p fm(v)d ff(\016)f fk(g)j fq(:)f fm(\033)r fq(\).)75 652 y(la)19 b(condition)h(sur)f(les)h (domaines)f(de)h fk(g)e fq(et)h fm(\033)i fq(assure)d(que)i(le)f(r)o (\023)-21 b(esultat)18 b fk(y)h fq(est)g(bien)h(un)f(c)o(hamp)g(de)75 709 y(donn)o(\023)-21 b(ees,)15 b(c'est-\022)-23 b(a-dire)15 b(que)h(sa)f(paire)g(\()p fm(v)786 716 y fw(y)828 709 y fq(:)d fm(\033)879 716 y fw(y)908 709 y fq(\))i(resp)q(ecte)i fm(dom)p fq(\()p fm(v)1242 716 y fw(y)1270 709 y fq(\))d ff(\022)g fm(dom)p fq(\()p fm(\033)1479 716 y fw(y)1507 709 y fq(\).)75 822 y(r)o(\023)-21 b(ecipro)q(quemen)o(t,)13 b(soit)g fk(g)g fq(une)h(fonction)f(partielle)h fm(dom)p fq(\()p fm(v)r fq(\))e ff(7!)h fm(dom)p fq(\()p fm(\033)r fq(\),)e(la)i fj(r)o(\023)-22 b(e)n(duction)14 b(g)o(\023)-22 b(e)n(om)o(\023)g(etrique)75 878 y fq(d)o(\023)h(e\014nit)18 b fk(g)d fq(;)8 b fa(b)15 b fk(x)j fq(comme)e(\023)-21 b(etan)o(t)16 b(un)j(c)o(hamp)f(de)g(donn)o(\023)-21 b(ees)18 b(\()p fm(w)f fq(:)g fm(\033)r fq(\))g(tel)h(que)h fm(dom)p fq(\()p fm(w)q fq(\))c(=)j fk(g)p fq(\()p fm(dom)p fq(\()p fm(v)r fq(\)\))75 934 y(et)d fm(w)q fq(\()p fm(z)r fq(\))f(est)h(une)h(s)o(\023)-21 b(equence)15 b(des)g(v)m(aleurs)h fm(v)r fq(\()p fm(y)r fq(\),)e(telle)i(que)g fk(g)p fq(\()p fm(y)r fq(\))11 b(=)i fm(z)r fq(.)i(p)o(ar)f(cons)o(\023)-21 b(equen)o(t)15 b(la)g(propri)o(\023)-21 b(et)o(\023)g(e)75 991 y(suiv)m(an)o(te)16 b(lie)h(la)e(r)o(\023)-21 b(eduction)15 b(g)o(\023)-21 b(eom)o(\023)g(etrique)14 b(et)h(l'op)o(\023)-21 b(eration)14 b(g)o(\023)-21 b(eom)o(\023)g(etrique.)75 1104 y fo(prop)q(osition)19 b(1)47 b fq(le)16 b(c)o(hamp)g(de)g(donn)o (\023)-21 b(ees)16 b fk(g)f fq(;)8 b fa(b)14 b fk(x)i fq(est)e(\023)-21 b(egal)15 b(\022)-23 b(a)16 b fk(x)f fa(c)g fk(g)1341 1087 y fq(-1)1394 1104 y fq(si)h(et)g(seulemen)o(t)g (si)g fk(g)g fq(est)75 1160 y(bijectiv)o(e.)75 1278 y fo(op)o(\023)-25 b(eration)19 b(de)e(c)o(hangemen)o(t)g(de)h(base)75 1364 y fq(soit)d fk(h)g fq(une)g(bijection)h(d'une)f(partie)g(de)g fe(z)825 1347 y fw(n)859 1364 y fq(dans)g fe(z)998 1347 y fw(p)1014 1364 y fq(,)g(le)g(c)o(hangemen)o(t)g(de)g(base)g fk(y)23 b(=)h(h)8 b(::)f(x)14 b fq(d)o(\023)-21 b(e\014nit)75 1420 y fk(y)15 b fq(comme)f(\023)-21 b(etan)o(t)13 b(\()p fm(v)k ff(\016)e fk(h)504 1404 y fq(-1)541 1420 y fq(:)d fm(\033)17 b ff(\016)e fk(h)671 1404 y fq(-1)708 1420 y fq(\),)g(si)g fm(dom)p fq(\()p fm(v)r fq(\))d ff(\022)h fm(dom)p fq(\()p fk(h)p fq(\).)75 1596 y fw(2.3.2)55 b(s)o(\023)-27 b(eman)n(tique)17 b(de)h(la)h(sup)r(erp)r(osition)146

1682 y fq(soien)o(t)f(deux)g(fonctions)g fm(f)k fq(et)c fm(g)r fq(,)e(nous)i(notons)f fm(f)5 b ff(j)1045 1689 y fw(dom)p fg(\()p fw(g)q fg(\))1170 1682 y fq(la)18 b(partie)g(de)g fm(f)23 b fq(d)o(\023)-21 b(e\014nie)18 b(sur)g(dom\()p fm(g)r fq(\).)75 1738 y(ainsi)13 b fm(f)5 b ff(j)229 1745 y fw(dom)p fg(\()p fw(g)q fg(\))349 1738 y fq(=)13 b fm(g)g fq(signi\014e)g(que)f fm(dom)p fq(\()p fk(g)p fq(\))g ff(\022)h fm(dom)p fq(\()p fk(f)p fq(\))e(et)g(que)i fm(f)k fq(et)11 b fm(g)i fq(son)o(t)e(\023)-21 b(egales)11 b(sur)h fm(dom)p fq(\()p fm(g)r fq(\).)d(deux)75 1795 y(c)o(hamps)i(de)g(donn)o(\023)-21 b(ees)11 b fk(x1)p fq(=)i(\()p fm(v)594 1802 y fg(1)625 1795 y fq(:)f fm(\033)676 1802 y fg(1)695 1795 y fq(\))e(et)h fk(x2)p fq(=)i(\()p fm(v)908 1802 y fg(2)939 1795 y fq(:)f fm(\033)990 1802 y fg(2)1009 1795 y fq(\))f(p)q(euv)o(en)o(t)f(^)-21 b(etre)10 b(sup)q(erp)q(os)o(\023)-21 b(es)11 b(si)h fm(\033)1584 1802 y fg(1)1602 1795 y ff(j)1615 1802 y fw(dom)p fg(\()p fw(\033)1709 1806 y fp(2)1726 1802 y fg(\))1754 1795 y fq(=)h fm(\033)1828 1802 y fg(2)75 1851 y fq(ou)k fm(\033)166 1858 y fg(2)185 1851 y ff(j)198 1858 y fw(dom)p fg(\()p fw(\033)292 1862 y fp(1)309 1858 y fg(\))340 1851 y fq(=)f fm(\033)417 1858 y fg(1)435 1851 y fq(.)h(la)g(s)o(\023)-21 b(eman)o(tique)17 b(de)g(l'op)o(\023)-21 b(erateur)16 b(de)h(sup)q(erp)q(osition)i(est)e(alors)g(d)o(\023)-21 b(e\014nie,)17 b(p)q(our)75 1907 y fk(\(x1/&/)7 b(x2\))p fq(,)15 b(par)7 b(:)146 1968 y fx(8)146 2005 y(>)146 2018 y(<)146 2093 y(>)146 2105 y(:)207 2010 y fq(\()p fm(v)247 2017 y fg(1)278 2010 y fq(:)13 b fm(\033)r fq(\))49 b(sur)g fm(dom)p fq(\()p fm(v)635 2017 y fg(1)653 2010 y fq(\))p ff(n)p fm(dom)p fq(\()p fm(v)820 2017 y fg(2)838 2010 y fq(\))207 2066 y(\()p fm(w)13 b fq(:)g fm(\033)r fq(\))56 b(sur)49 b fm(dom)p fq(\()p fm(v)635 2073 y fg(1)653 2066 y fq(\))10 b ff(\\)h fm(dom)p fq(\()p fm(v)848 2073 y fg(2)866 2066 y fq(\))207 2123 y(\()p fm(v)247 2130 y fg(2)278 2123 y fq(:)i fm(\033)r fq(\))49 b(sur)g fm(dom)p fq(\()p fm(v)635 2130 y fg(2)653 2123 y fq(\))p ff(n)p fm(dom)p fq(\()p fm(v)820 2130 y fg(1)838 2123 y fq(\))146 2224 y(o)q(\022)-24 b(u)15 b fm(w)q fq(\()p fm(z)r fq(\))d(=)h fm(v)384 2231 y fg(1)402 2224 y fq(\()p fm(z)r fq(\);)o fm(v)495 2231 y fg(2)514 2224 y fq(\()p fm(z)r fq(\))i(et)g fm(\033)f fq(=)729 2152 y fx(\()787 2196 y fm(\033)813 2203 y fg(1)847 2196 y fq(si)i fm(dom)p fq(\()p fm(\033)1023 2203 y fg(2)1041 2196 y fq(\))c ff(\022)h fm(dom)p fq(\()p fm(\033)1249 2203 y fg(1)1267 2196 y fq(\))787 2252 y fm(\033)813 2259 y fg(2)847 2252 y fq(si)j fm(dom)p fq(\()p fm(\033)1023 2259 y fg(1)1041 2252 y fq(\))c ff(\022)h fm(dom)p fq(\()p fm(\033)1249 2259 y fg(2)1267 2252 y fq(\).)75 2400 y fw(2.3.3)55 b(s)o(\023)-27 b(eman)n(tique)17 b(des)g(\023)-27 b(equations)146 2486 y fq(nous)14 b(a)o(v)o(ons)g(vu)h(qu'une)g(\023)-21 b(equation)14 b(d)o(\023)-21 b(e\014nit)15 b(l')o(\023)-21 b(egalit)o(\023)g(e)14 b(des)h(expressions)h(de)f(c)o(hamps)g(de)g (donn)o(\023)-21 b(ees)75 2542 y(de)16 b(part)f(et)g(d'autre)g(du)h (sym)o(b)q(ole)f(\023)-21 b(egale.)14 b(nous)i(pr)o(\023)-21 b(ecisons)15 b(main)o(tenan)o(t)g(la)h(s)o(\023)-21 b(eman)o(tique)15 b(asso)q(ci)o(\023)-21 b(ee)15 b(\022)-23 b(a)p eop %%page: 21 23 21 22 bop 75 269 a fl(2.3.)29 b(s)207 257 y(\023)201 269 y(emantique)1310 b fq(21)75 397 y(une)13 b(\023)-21 b(equation,)13 b(qui)h(s'exprime)h(elle)g(aussi)f(\022)-23

b(a)13 b(l'aide)i(des)f(fonctions)g(de)g(placemen)o(t)g(des)g(v)m (aleurs)h(et)e(de)75 453 y(la)g(bijection)h fm(\033)r fq(.)f(p)o(ar)f(la)h(suite)g(nous)g(notons)g fm(e)p fq(\()p fk(c)p fq(\))f(une)h(expression)h(de)g(c)o(hamps)e(de)i(donn)o(\023)-21 b(ees)12 b(fonction)75 510 y(du)k(c)o(hamp)f fk(c)p fq(.)146 623 y(soien)o(t)c(les)g(c)o(hamps)g fk(x)523 630 y fg(1)541 623 y fm(;)d(:)g(:)g(:)d(;)j fk(x)667 630 y fw(n)700 623 y fq(et)i fk(y)772 630 y fg(1)791 623 y fm(;)e(:)g(:)g(:)d(;)j fk(y)917 630 y fw(m)947 623 y fq(,)j(et)f(les)i(deux)f(expressions)h (de)f(c)o(hamps)g(de)g(donn)o(\023)-21 b(ees)75 679 y fm(e)p fq(\()p fk(x)138 686 y fg(1)156 679 y fm(;)8 b(:)g(:)g(:)d(;)j fk(x)282 686 y fw(n)304 679 y fq(\))21 b(et)g fm(e)423 663 y fx(0)435 679 y fq(\()p fk(y)477 686 y fg(1)495 679 y fm(;)8 b(:)g(:)g(:)d(;)j fk(y)621 686 y fw(m)652 679 y fq(\),)20 b(resp)q(ectiv)o(emen)o(t)i(\023)-21 b(egales)20 b(aux)i(paires)g(de)g(fonctions)f(\()p fm(v)1696 686 y fr(x)1714 679 y fq(:)p fm(\033)1753 686 y fr(x)1770 679 y fq(\))g(et)75 736 y(\()p fm(v)115 743 y fr(y)132 736 y fq(:)p fm(\033)171 743 y fr(y)188 736 y fq(\).)15 b(alors)g(la)h(s)o(\023)-21 b(eman)o(tique)14 b(de)i(l')o(\023)-21 b(equation)15 b fm(e)9 b fq(:)674 830 y fm(e)p fq(\()p fk(x)737 837 y fg(1)755 830 y fm(;)f(:)g(:)g(:)d(;)j fk(x)881 837 y fw(n)903 830 y fq(\))k(=)h fm(e)1002 811 y fx(0)1014 830 y fq(\()p fk(y)1056 837 y fg(1)1074 830 y fm(;)8 b(:)g(:)g(:)d(;)j fk(y)1200 837 y fw(m)1230 830 y fq(\))75 925 y(est)17 b(\()p fm(v)188 932 y fr(x)221 925 y fq(=)g fm(v)295 932 y fr(y)312 925 y fq(\))12 b ff(^)f fq(\()p fm(\033)427 932 y fr(x)461 925 y fq(=)16 b fm(\033)538 932 y fr(y)556 925 y fq(\))11 b ff(^)h fm(c)s fq(,)k(o)q(\022)-24 b(u)17 b fm(c)j fq(est)d(la)h(conjonction)g (de)f(toutes)g(les)h(conditions)h(imp)q(os)o(\023)-21 b(ees)75 981 y(par)13 b(les)g(op)o(\023)-21 b(erations)12 b(apparaissan)o(t)h(dans)g fm(e)s fq(.)f(si)h(ce)h(pr)o(\023)-21 b(edicat)12 b(est)h(vrai,)g(nous)g(dirons)h(que)f(les)h(c)o(hamps)75 1037 y fk(x)99 1044 y fg(1)117 1037 y fm(;)8 b(:)g(:)g(:)d(;)j fk(x)243 1044 y fw(n)265 1037 y fm(;)g fk(y)310 1044 y fg(1)328 1037 y fm(;)g(:)g(:)g(:)t(;)g fk(y)453 1044 y fw(m)499 1037 y fj(v)o(\023)-22 b(eri\014ent)14 b fq(l')o(\023)-21 b(equation.)75 1150 y(p)o(ar)19 b(exemple,)i(\023)-21 b(etan)o(t)18 b(donn)o(\023)-21 b(e)20 b(les)h(c)o(hamps)f fk(a)p fq(=\()p fm(v)958 1157 y fr(a)975 1150 y fq(:)p fm(\033)1014 1157 y fr(a)1031 1150 y fq(\))g(et)g fk(b)p fq(=\()p fm(v)1226 1157 y fr(b)1244 1150 y fq(:)p fm(\033)1283 1157 y fr(b)1300 1150 y fq(\),)f(la)i(s)o(\023)-21 b(eman)o(tique)19 b(de)i(l')o(\023)-21 b(equa-)75 1207 y(tion)17 b fk(a)g fq(=)g fk(add)e fa(b)g fk(\(size)7 b(::)h(b\))17 b fq(est)f(\()p fm(v)760 1214 y fr(a)794 1207 y fq(=)h fk(add)10 b ff(\016)g fm(v)983 1214 y fr(b)1010 1207 y ff(\016)g fk(size)1139 1189 y fq(-1)1193 1207 y ff(^)17 b fm(\033)1266 1214 y fr(a)1300 1207 y fq(=)g fm(\033)1378 1214 y fr(b)1406 1207 y ff(\016)10 b fk(size)1534 1189 y fq(-1)1588 1207 y ff(^)17 b fm(dom)p fq(\()p fm(v)1761 1214 y fr(b)1778 1207 y fq(\))e ff(\022)75 1263 y fm(dom)p fq(\()p fk(size)p fq(\))9 b ff(^)h fm(img)r fq(\()p fm(v)462 1270 y fr(b)478 1263 y fq(\))i ff(\022)h fm(dom)p fq(\()p fk(add)p fq(\))o(\).)146 1376 y(nous)h(p)q(ouv)o(ons)f(\023)-21 b(etendre)14 b(la)h(d)o(\023)-21 b(e\014nition)15 b(pr)o(\023)-21 b(ec)o(\023)g(eden)o(te)13 b(\022)-23 b(a)14 b(un)h(syst)o(\022)-21 b(eme)13 b(d')o(\023)-21 b(equations,)13 b(car)h(les)g(\023)-21 b(equa-)75 1433 y(tions)17 b(du)g(syst)o(\022)-21 b(eme)15 b(son)o(t)h(reli)o(\023)-21

b(ees)17 b(en)o(tre)g(elles)h(par)e(un)h(op)o(\023)-21 b(erateur)16 b(de)h(conjonction.)f(la)h(s)o(\023)-21 b(eman)o(tique)75 1489 y(d'un)23 b(syst)o(\022)-21 b(eme)21 b(d')o(\023)-21 b(equations)21 b(est)h(naturellemen)o(t)h(la)g (conjonction)g(des)f(s)o(\023)-21 b(eman)o(tiques)22 b(de)g(c)o(haque)74 1546 y(\023)-21 b(equation.)13 b(de)i(mani)o(\022) -21 b(ere)14 b(analogue,)g(nous)h(dirons)g(que)g(les)g(c)o(hamp)f(de)h (donn)o(\023)-21 b(ees)14 b fk(x)1504 1553 y fg(1)1523 1546 y fm(;)8 b(:)g(:)g(:)d(;)j fk(x)1649 1553 y fw(n)1685 1546 y fj(v)o(\023)-22 b(eri\014ent)75 1602 y fq(un)16 b(syst)o(\022)-21 b(eme)14 b(d')o(\023)-21 b(equations)14 b(si)i(et)f(seulemen)o(t)h(si)g(\()p fm(v)949 1609 y fr(x1)981 1602 y fq(:)p fm(\033)1020 1609 y fr(x1)1053 1602 y fq(\),)p fm(:)8 b(:)g(:)m fq(,)15 b(\()p fm(v)1204 1609 y fr(xn)1237 1602 y fq(:)p fm(\033)1276 1609 y fr(xn)1308 1602 y fq(\))g(son)o(t)f(solution)i(du)g(syst)o(\022)-21 b(eme.)75 1723 y fw(2.3.4)55 b(equiv)m(alence)16 b(des)j(c)n(hamps)f (de)h(donn)o(\023)-27 b(ees)146 1808 y fq(etan)o(t)11 b(donn)o(\023)-21 b(e)12 b(deux)h(c)o(hamps)g(de)f(donn)o(\023)-21 b(ees,)12 b(nous)h(consid)o(\023)-21 b(erons)12 b(qu'ils)i(p)q(euv)o (en)o(t)e(^)-21 b(etre)10 b(\023)-21 b(equiv)m(alen)o(ts)75 1865 y(\022)e(a)18 b(deux)h(niv)o(eaux.)f(au)h(premier)g(niv)o(eau,)g (app)q(el)o(\023)-21 b(e)17 b fj(\023)-22 b(e)n(quivalenc)n(e)18 b(faible)p fq(,)f(ils)j(repr)o(\023)-21 b(esen)o(ten)o(t)17 b(un)h(m)o(^)-21 b(eme)75 1921 y(m)o(ulti-ensem)o(ble)18 b(de)e(v)m(aleurs.)g(au)h(second)f(niv)o(eau,)g(app)q(el)o(\023)-21 b(e)15 b fj(\023)-22 b(e)n(quivalenc)n(e)16 b(forte)p fq(,)f(ils)i(repr)o(\023)-21 b(esen)o(ten)o(t)15 b(le)75 1978 y(m)o(^)-21 b(eme)14 b(m)o(ulti-ensem)o(ble)k(de)d(v)m(aleurs)h (et)f(le)h(m)o(^)-21 b(eme)15 b(placemen)o(t)h(de)f(r)o(\023)-21 b(ef)o(\023)g(erence.)75 2091 y fo(d)o(\023)c(e\014nition)19 b(3)31 b fq(\()o(\023)-21 b(equiv)m(alence)16 b(forte\))75 2147 y(soien)o(t)g(deux)f(c)o(hamps)g(de)h(donn)o(\023)-21 b(ees)15 b fk(x)g fq(et)g fk(y)p fq(.)f(nous)h(disons)h(que)f fk(x)g fq(et)g fk(y)g fq(son)o(t)g fj(fortement)g(\023)-22 b(e)n(quivalents)75 2204 y fq(si)16 b(et)f(seulemen)o(t)h(si)g(il)g (existe)g(une)g(bijection)g fk(h)f fq(telle)i(que)e fk(y)g fq(=)h fk(h)7 b(::)h(x)15 b fq(et)g fm(dom)p fq(\()p fm(\033)1491 2211 y fr(x)1507 2204 y fq(\))g ff(\022)h fm(dom)p fq(\()p fk(h)p fq(\).)75 2316 y(la)i(d)o(\023)-21 b(e\014nition)18 b(de)g(l'op)o(\023)-21 b(eration)17 b(de)h(c)o(hangemen)o(t)f(de)h(base)g(p)q(ermet)f(de)h(donner)g(une)g (id)o(\023)-21 b(ee)18 b(in)o(tuitiv)o(e)75 2373 y(de)d(l')o(\023)-21 b(equiv)m(alence)17 b(forte)7 b(:)15 b(elle)i(mo)q(di\014e)f(le)g (placemen)o(t)f(du)h(m)o(^)-21 b(eme)14 b(m)o(ulti-ensem)o(ble)j(de)f (v)m(aleurs)f(mais)75 2429 y(garde)g(le)h(m)o(^)-21 b(eme)14 b(placemen)o(t)i(de)g(r)o(\023)-21 b(ef)o(\023)g(erence.)146 2486 y(p)o(ar)9 b(exemple,)i(consid)o(\023)-21 b(erons)10 b(la)g(p)q(erm)o(utation)h fk(h)f fq(d)o(\023)-21 b(e\014nie)10 b(par)g fm(\025)p fk(\(i\))p ff(j)p fk(\(0<=i<4\).\(\(i-1\))29 b(mod)7 b(4\)\))75 2542 y fq(et)14 b(le)h(c)o(hamp)f(de)h(donn)o(\023) -21 b(ees)13 b fk(w)h fq(=)h fk(h)7 b(::)h(v)o fq(,)14 b fk(v)f fq(\023)-21 b(etan)o(t)12 b(le)j(c)o(hamp)f(de)h(donn)o(\023) -21 b(ees)14 b(pr)o(\023)-21 b(esen)o(t)o(\023)g(e)12 b(sur)i(la)h(\014gure)f(2.8,)p eop %%page: 22 24 22 23 bop 75 269 a fq(22)587 b fl(chapitre)16 b(2.)45 b(d)1091 257 y(\023)1085 269 y(efinition)16 b(du)f(f)o(ormalisme)h fn(pei)75 397 y fq(don)o(t)e(on)h(supp)q(ose)g(que)g fk(m)g fq(est)f(le)i(placemen)o(t)f(de)g(r)o(\023)-21

b(ef)o(\023)g(erence.)13 b(nous)i(observ)o(ons)f(sur)h(la)g(\014gure)g (2.9)e(que)75 453 y(dans)h fk(m)p fq(,)g(la)g(v)m(aleur)h(2)e(de)i fk(w)f fq(est)f(plac)o(\023)-21 b(ee)15 b(au)e(m)o(^)-21 b(eme)14 b(p)q(oin)o(t)g(que)g(la)h(v)m(aleur)g(2)e(de)i fk(v)f fq(par)f(l'application)j(de)75 510 y fm(\033)101 517 y fr(w)126 510 y fq(:)f fm(v)176 517 y fr(w)193 510 y fq(\(0\))f(=)i fm(v)339 517 y fr(v)366 510 y ff(\016)10 b fk(h)423 493 y fq(-1)460 510 y fq(\(0\))k(=)i fm(v)606 517 y fr(v)623 510 y fq(\(1\))e(=)h(2)g(and)g fm(\033)898 517 y fr(w)916 510 y fq(\(0\))f(=)h fm(\033)1065 517 y fr(v)1093 510 y ff(\016)10 b fk(h)1150 493 y fq(-1)1187 510 y fq(\(0\))k(=)h fm(\033)1336 517 y fr(v)1354 510 y fq(\(1\))f(=)h(\(1,0\).)e(ceci)j(est)f(vrai)75 566 y(p)q(our)g(toutes)g(les)h(v)m(aleurs,)g(donc)f fk(w)g fq(et)g fk(v)g fq(son)o(t)g(fortemen)o(t)e(\023)-21 b(equiv)m(alen)o (ts.)454 1422 y @beginspecial @setspecial %%begindocument: weakequiv.pstex /$f2psdict 200 dict def $f2psdict begin $f2psdict /mtrx matrix put /l {lineto} bind def /m {moveto} bind def /s {stroke} bind def /n {newpath} bind def /gs {gsave} bind def /gr {grestore} bind def /clp {closepath} bind def /graycol {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul setrgbcolor} bind def /col-1 {} def /col0 {0 0 0 setrgbcolor} bind def /col1 {0 0 1 setrgbcolor} bind def /col2 {0 1 0 setrgbcolor} bind def /col3 {0 1 1 setrgbcolor} bind def /col4 {1 0 0 setrgbcolor} bind def /col5 {1 0 1 setrgbcolor} bind def /col6 {1 1 0 setrgbcolor} bind def /col7 {1 1 1 setrgbcolor} bind def /col8 {.68 .85 .9 setrgbcolor} bind def /col9 {0 .39 0 setrgbcolor} bind def /col10 {.65 .17 .17 setrgbcolor} bind def /col11 {1 .51 0 setrgbcolor} bind def /col12 {.63 .13 .94 setrgbcolor} bind def /col13 {1 .75 .8 setrgbcolor} bind def /col14 {.7 .13 .13 setrgbcolor} bind def /col15 {1 .84 0 setrgbcolor} bind def /drawsplinesection { /y3 exch def /x3 exch def /y2 exch def /x2 exch def /y1 exch def /x1 exch def /xa x1 x2 x1 sub 0.666667 mul add def /ya y1 y2 y1 sub 0.666667 mul add def /xb x3 x2 x3 sub 0.666667 mul add def /yb y3 y2 y3 sub 0.666667 mul add def x1 y1 lineto xa ya xb yb x3 y3 curveto } def

end /$f2psbegin {$f2psdict begin /$f2psenteredstate save def} def /$f2psend {$f2psenteredstate restore end} def $f2psbegin 0 setlinecap 0 setlinejoin -35.0 356.0 translate 0.540 -0.540 scale % polyline n 484 494 m 484 474 l 464 474 l 464 494 0.500 setlinewidth % polyline n 479 499 m 479 479 l 459 479 l 459 499 gs col-1 s gr 0.000 setlinewidth % polyline n 514 494 m 514 474 l 494 474 l 494 494 0.500 setlinewidth % polyline n 509 499 m 509 479 l 489 479 l 489 499 gs col-1 s gr 0.000 setlinewidth % polyline n 484 529 m 484 509 l 464 509 l 464 529 0.500 setlinewidth % polyline n 479 534 m 479 514 l 459 514 l 459 534 gs col-1 s gr 0.000 setlinewidth % polyline n 514 529 m 514 509 l 494 509 l 494 529 0.500 setlinewidth % polyline n 509 534 m 509 514 l 489 514 l 489 534 gs col-1 s gr 0.000 setlinewidth % polyline n 284 514 m 284 494 l 264 494 l 264 514 0.500 setlinewidth % polyline n 279 519 m 279 499 l 259 499 l 259 519 gs col-1 s gr 0.000 setlinewidth % polyline n 314 514 m 314 494 l 294 494 l 294 514 0.500 setlinewidth % polyline n 309 519 m 309 499 l 289 499 l 289 519 gs col-1 s gr 0.000 setlinewidth % polyline n 224 514 m 224 494 l 204 494 l 204 514 0.500 setlinewidth % polyline n 219 519 m 219 499 l 199 499 l 199 519 gs col-1 s gr 0.000 setlinewidth % polyline n 254 514 m 254 494 l 234 494 l 234 514 0.500 setlinewidth

l clp gs 0.75 setgray fill gr l clp gs 1.00 setgray fill gr

l clp gs 0.75 setgray fill gr l clp gs 1.00 setgray fill gr

l clp gs 0.75 setgray fill gr l clp gs 1.00 setgray fill gr

l clp gs 0.75 setgray fill gr l clp gs 1.00 setgray fill gr

l clp gs 0.75 setgray fill gr l clp gs 1.00 setgray fill gr

l clp gs 0.75 setgray fill gr l clp gs 1.00 setgray fill gr

l clp gs 0.75 setgray fill gr l clp gs 1.00 setgray fill gr

l clp gs 0.75 setgray fill gr

% polyline n 249 519 m 249 499 gs col-1 s gr 0.000 setlinewidth % polyline n 284 639 m 284 619 0.500 setlinewidth % polyline n 279 644 m 279 624 gs col-1 s gr 0.000 setlinewidth % polyline n 314 639 m 314 619 0.500 setlinewidth % polyline n 309 644 m 309 624 gs col-1 s gr 0.000 setlinewidth % polyline n 224 639 m 224 619 0.500 setlinewidth % polyline n 219 644 m 219 624 gs col-1 s gr 0.000 setlinewidth % polyline n 254 639 m 254 619 0.500 setlinewidth % polyline n 249 644 m 249 624 gs col-1 s gr 0.000 setlinewidth % polyline n 284 579 m 284 559 0.500 setlinewidth % polyline n 279 584 m 279 564 gs col-1 s gr 0.000 setlinewidth % polyline n 314 579 m 314 559 0.500 setlinewidth % polyline n 309 584 m 309 564 gs col-1 s gr 0.000 setlinewidth % polyline n 224 579 m 224 559 0.500 setlinewidth % polyline n 219 584 m 219 564 gs col-1 s gr 0.000 setlinewidth % polyline n 254 579 m 254 559 0.500 setlinewidth % polyline n 249 584 m 249 564 gs col-1 s gr % open spline

l 229 499 l 229 519 l clp gs 1.00 setgray fill gr

l 264 619 l 264 639 l clp gs 0.75 setgray fill gr l 259 624 l 259 644 l clp gs 1.00 setgray fill gr

l 294 619 l 294 639 l clp gs 0.75 setgray fill gr l 289 624 l 289 644 l clp gs 1.00 setgray fill gr

l 204 619 l 204 639 l clp gs 0.75 setgray fill gr l 199 624 l 199 644 l clp gs 1.00 setgray fill gr

l 234 619 l 234 639 l clp gs 0.75 setgray fill gr l 229 624 l 229 644 l clp gs 1.00 setgray fill gr

l 264 559 l 264 579 l clp gs 0.75 setgray fill gr l 259 564 l 259 584 l clp gs 1.00 setgray fill gr

l 294 559 l 294 579 l clp gs 0.75 setgray fill gr l 289 564 l 289 584 l clp gs 1.00 setgray fill gr

l 204 559 l 204 579 l clp gs 0.75 setgray fill gr l 199 564 l 199 584 l clp gs 1.00 setgray fill gr

l 234 559 l 234 579 l clp gs 0.75 setgray fill gr l 229 564 l 229 584 l clp gs 1.00 setgray fill gr

n 239.000 499.000 m 266.500 481.500 l 266.500 481.500 294.000 464.000 321.500 426.500 349.000 389.000 l gs col-1 s gr n 342.656 394.269 m 349.000 389.000 l 345.882 396.634 l gr % closed spline n 309.000 376.500 m 309.000 376.500 314.000 359.000 336.500 366.500 336.500 366.500 359.000 374.000 369.000 361.500 369.000 361.500 379.000 349.000 399.000 351.500 399.000 351.500 419.000 354.000 421.500 384.000 421.500 384.000 424.000 414.000 404.000 424.000 404.000 424.000 384.000 434.000 369.000 451.500 369.000 451.500 354.000 469.000 329.000 451.500 329.000 451.500 304.000 434.000 299.000 419.000 299.000 419.000 294.000 404.000 299.000 399.000 299.000 399.000 304.000 394.000 309.000 376.500 ath gs col-1 s gr % open spline n 239.000 564.000 m 239.000 556.500 l 239.000 556.500 239.000 549.000 281.500 544.000 281.500 544.000 324.000 539.000 336.500 469.000 349.000 399.000 l gs col-1 s gr n 345.625 406.524 m 349.000 399.000 l 349.563 407.227 l gr % open spline n 269.000 624.000 m 269.000 616.500 l 269.000 616.500 269.000 609.000 306.500 609.000 306.500 609.000 344.000 609.000 349.000 499.000 354.000 389.000 l gs col-1 s gr n 351.639 396.901 m 354.000 389.000 l 355.635 397.083 l gr [4.000000] 0 setdash % open spline n 239.000 564.000 m 299.000 551.500 l 299.000 551.500 359.000 539.000 409.000 499.000 409.000 499.000 459.000 459.000 479.000 469.000 499.000 479.000 l gs col-1 s gr [] 0 setdash n 492.739 473.633 m 499.000 479.000 l 490.950 477.211 l gr [4.000000] 0 setdash % open spline n 269.000 624.000 m 324.000 611.500 l 324.000 611.500 379.000 599.000 419.000 561.500 459.000 524.000 l gs col-1 s gr [] 0 setdash n 451.796 528.012 m 459.000 524.000 l 454.532 530.931 l gr [4.000000] 0 setdash % open spline n 239.000 499.000 m 331.500 474.000 l 331.500 474.000 424.000 449.000 461.500 454.000 461.500 454.000 499.000 459.000 499.000 469.000 499.000 479.000 l gs col-1 s gr [] 0 setdash n 501.000 471.000 m 499.000 479.000 l 497.000 471.000 l gr /times-roman findfont 12.00 scalefont setfont 499 494 m

drawsplinesection gs 2 setlinejoin col-1 s

drawsplinesection drawsplinesection drawsplinesection drawsplinesection drawsplinesection drawsplinesection drawsplinesection drawsplinesection drawsplinesection drawsplinesection closep

drawsplinesection drawsplinesection gs 2 setlinejoin col-1 s

drawsplinesection drawsplinesection gs 2 setlinejoin col-1 s

drawsplinesection drawsplinesection gs 2 setlinejoin col-1 s

drawsplinesection gs 2 setlinejoin col-1 s

drawsplinesection drawsplinesection gs 2 setlinejoin col-1 s

gs 1 -1 scale (2) col-1 show gr /times-roman findfont 8.00 scalefont setfont 499 544 m gs 1 -1 scale (1,1) col-1 show gr /times-roman findfont 8.00 scalefont setfont 469 509 m gs 1 -1 scale (0,0) col-1 show gr /times-roman findfont 8.00 scalefont setfont 499 509 m gs 1 -1 scale (1,0) col-1 show gr /times-roman findfont 12.00 scalefont setfont 354 384 m gs 1 -1 scale (2) col-1 show gr /times-roman findfont 12.00 scalefont setfont 359 414 m gs 1 -1 scale (-3) col-1 show gr /times-roman findfont 12.00 scalefont setfont 399 374 m gs 1 -1 scale (1) col-1 show gr /times-roman findfont 12.00 scalefont setfont 319 399 m gs 1 -1 scale (1) col-1 show gr /times-roman findfont 12.00 scalefont setfont 239 514 m gs 1 -1 scale (2) col-1 show gr /times-roman findfont 8.00 scalefont setfont 209 534 m gs 1 -1 scale (0) col-1 show gr /times-roman findfont 8.00 scalefont setfont 239 534 m gs 1 -1 scale (1) col-1 show gr /times-roman findfont 8.00 scalefont setfont 269 534 m gs 1 -1 scale (2) col-1 show gr /times-roman findfont 8.00 scalefont setfont 299 534 m gs 1 -1 scale (3) col-1 show gr /times-roman findfont 8.00 scalefont setfont 209 659 m gs 1 -1 scale (3) col-1 show gr /times-roman findfont 8.00 scalefont setfont 239 659 m gs 1 -1 scale (0) col-1 show gr /times-roman findfont 8.00 scalefont setfont 269 659 m gs 1 -1 scale (1) col-1 show gr /times-roman findfont 8.00 scalefont setfont 299 659 m gs 1 -1 scale (2) col-1 show gr /times-roman findfont 12.00 scalefont setfont 269 639 m gs 1 -1 scale (2) col-1 show gr /times-roman findfont 12.00 scalefont setfont 239 579 m gs 1 -1 scale (2) col-1 show gr /times-roman findfont 8.00 scalefont setfont 209 599 m gs 1 -1 scale (3) col-1 show gr /times-roman findfont 8.00 scalefont setfont 239 599 m

gs 1 -1 scale (0) col-1 show gr /times-roman findfont 8.00 scalefont setfont 269 599 m gs 1 -1 scale (1) col-1 show gr /times-roman findfont 8.00 scalefont setfont 299 599 m gs 1 -1 scale (2) col-1 show gr /times-roman findfont 8.00 scalefont setfont 469 544 m gs 1 -1 scale (0,1) col-1 show gr $f2psend %%enddocument @endspecial 1344 1219 a fr(m)454 1230 y(w)10 b fg(=)g fr(h)c(::)g(v)454 1095 y(v)927 949 y fw(v)944 953 y fo(v)454 1377 y fr(z)k fg(=)g fr(\(h)c(::)g(v\))12 b fn(c)f fr(h)328 1565 y fn(fig.)k fq(2.9)f(-)30 b fj(equivalenc)n(es)15 b(forte)i(et)f(faible)g(entr)n(e)f(champs)i(de)f(donn)o(\023)-22 b(e)n(es)146 1684 y fq(consid)o(\023)h(erons)11 b(\022)-23 b(a)12 b(pr)o(\023)-21 b(esen)o(t)12 b(la)g(d)o(\023)-21 b(e\014nition)13 b fk(z)f fq(=)h fk(\(h)8 b(::)f(v\))15 b fa(c)h fk(h)p fq(.)11 b fk(z)i fq(et)f fk(v)g fq(ne)g(son)o(t)g(pas)g (fortemen)o(t)e(\023)-21 b(equi-)75 1741 y(v)m(alen)o(ts)17 b(car)g fm(\033)332 1748 y fr(z)366 1741 y ff(6)p fq(=)g fm(\033)444 1748 y fr(v)479 1741 y fq(\()p fm(\033)523 1748 y fr(z)556 1741 y fq(=)h fm(\033)635 1748 y fr(v)662 1741 y ff(\016)10 b fk(h)719 1724 y fq(-1)756 1741 y fq(\))17 b(alors)f(que)h fm(v)1009 1748 y fr(z)1044 1741 y fq(=)g fm(v)1118 1748 y fr(v)1143 1741 y fq(:)f(nous)h(dirons)h (qu'ils)f(son)o(t)g(faiblemen)o(t)74 1797 y(\023)-21 b(equiv)m(alen)o(ts.)15 b(con)o(trairemen)o(t)g(au)g(cas)g(pr)o(\023) -21 b(ec)o(\023)g(eden)o(t,)13 b(la)j(v)m(aleur)g(2)f(de)h fk(z)f fq(est)f(plac)o(\023)-21 b(ee)16 b(au)f(p)q(oin)o(t)h fm(\033)1721 1804 y fr(z)1738 1797 y fq(\(1\))e(=)75 1854 y fm(\033)101 1861 y fr(v)129 1854 y ff(\016)9 b fk(h)185 1837 y fq(-1)223 1854 y fq(\(1\))14 b(=)h fm(\033)372 1861 y fr(v)390 1854 y fq(\(2\))f(=)i(\(0,1\))d(de)j fk(m)p fq(.)75 1968 y fo(d)o(\023)-25 b(e\014nition)19 b(4)31 b fq(\()o(\023)-21 b(equiv)m(alence)16 b(faible\))75 2025 y(soit)f fk(x)f fq(et)g fk(y)g fq(deux)h(c)o(hamps)f(de)h(donn)o (\023)-21 b(ees.)14 b(nous)g(disons)h(que)f fk(x)h fq(et)f fk(y)g fq(son)o(t)f fj(faiblement)h(\023)-22 b(e)n(quivalents)13 b fq(si)75 2081 y(et)i(seulemen)o(t)h(si)g(ils)g(repr)o(\023)-21 b(esen)o(ten)o(t)14 b(un)i(m)o(^)-21 b(eme)14 b(m)o(ulti-ensem)o(ble)k (de)d(v)m(aleurs.)75 2196 y(nous)k(utiliserons)h(l')o(\023)-21 b(equiv)m(alence)21 b(faible)f(des)f(c)o(hamps)f(de)h(donn)o(\023)-21 b(ees)19 b(dans)g(le)g(ra\016nemen)o(t)g(de)g(pro-)75 2252 y(grammes)14 b(sous)h(la)h(forme)e(sp)o(\023)-21 b(eci\014que)17 b(suiv)m(an)o(te,)e(qui)h(utilise)h(des)f(op)o(\023)-21 b(erations)14 b fn(pei)7 b fq(:)75 2367 y fo(caract)o(\023)-25 b(erisation)36 b fj(soient)12 b fk(x)g fj(un)g(champ)g(de)h(donn)o (\023)-22 b(e)n(es)10 b(et)i fk(y)g fj(une)g(expr)n(ession)f(de)h (champ)h(de)f(donn)o(\023)-22 b(e)n(es)75 2423 y(fonction)14 b(de)h fk(x)p fj(.)f fk(x)g fj(et)h fk(y)f fj(sont)g fq(faiblemen)o(t)g(\023)-21 b(equiv)m(alen)o(ts)15 b fj(si)f(et)h(seulement)e(si)i(il)f(existe)g(tr)n(ois)g(bije)n(ctions)75 2480 y fk(h)p fj(,)i fk(h)153 2463 y fx(0)181 2480 y fj(et)g fk(g)p fj(,)g(tel)r(les)f(que)8 b(:)143 2556 y({)23 b(ou)17 b(bien)e fk(\(h)8 b(::)f(x\))16 b fa(c)h fk(g)f fj(=)g fk(h)692 2539 y fx(0)712 2556 y fk(::)7 b(y)49 b fj(et)f fk(h)p fq(\()p fm(dom)p fq(\()p fm(v)1092

2563 y fr(x)1109 2556 y fq(\)\))12 b(=)h fm(img)r fq(\()p fk(g)p fq(\))p eop %%page: 23 25 23 24 bop 75 269 a fl(2.3.)29 b(s)207 257 y(\023)201 269 y(emantique)1310 b fq(23)143 397 y fj({)23 b(ou)17 b(bien)e fk(h)8 b(::)f(\(x)24 b fa(c)g fk(g\))16 b fj(=)g fk(h)707 380 y fx(0)726 397 y fk(::)8 b(y)48 b fj(et)h fm(dom)p fq(\()p fm(v)1065 404 y fr(x)1082 397 y fq(\))12 b(=)h fm(img)r fq(\()p fk(g)p fq(\))p fj(.)75 481 y fq(p)o(our)h(d)o (\023)-21 b(emon)o(trer)13 b(cette)h(caract)o(\023)-21 b(erisation)14 b(nous)g(mon)o(trons)g(d'ab)q(ord)g(la)h(propri)o(\023) -21 b(et)o(\023)g(e)13 b(suiv)m(an)o(te,)i(qui)g(lie)75 537 y(un)h(c)o(hamp)f(de)g(donn)o(\023)-21 b(ees)15 b fk(x)g fq(et)g(un)h(c)o(hamp)f fk(y)g fq(d)o(\023)-21 b(e\014ni)16 b(par)f(une)h(expression)g(fonction)f(de)h fk(x)p fq(.)75 650 y fo(propri)o(\023)-25 b(et)o(\023)g(e)19 b(1)50 b fq(soien)o(t)17 b fk(x)g fq(un)g(c)o(hamp)f(de)i(donn)o(\023) -21 b(ees)16 b(et)h fk(y)f fq(une)h(expression)h(de)f(c)o(hamp)g(de)g (donn)o(\023)-21 b(ees)75 707 y(fonction)16 b(de)f fk(x)p fq(.)g(il)h(existe)g(alors)f(une)h(paire)f(de)h(bijections)g(\()p fk(h)p fq(,)p fk(h)1186 690 y fx(0)1197 707 y fq(\))f(telles)h(que)680 756 y fx(8)680 794 y(>)680 806 y(<)680 881 y(>)680 893 y(:)738 800 y fm(\033)764 807 y fr(x)791 800 y ff(\016)10 b fk(h)848 783 y fq(-1)898 800 y fq(=)j fm(\033)972 807 y fr(y)999 800 y ff(\016)d fk(h)1056 783 y fx(0)1068 777 y fq(-1)1157 800 y fq(\()p fm(a)p fq(\))738 856 y fm(dom)p fq(\()p fm(v)864 863 y fr(x)880 856 y fq(\))j ff(\022)g fm(dom)p fq(\()p fk(h)p fq(\))56 b(\()p fm(b)p fq(\))738 913 y fm(dom)p fq(\()p fm(v)864 920 y fr(y)880 913 y fq(\))13 b ff(\022)g fm(dom)p fq(\()p fk(h)1087 896 y fx(0)1097 913 y fq(\))46 b(\()p fm(c)p fq(\))75 1025 y fj(pr)n(euve)p fq(.)15 b fj(cf.)g fq(annexe)h(a)75 1138 y fj(pr)n(euve.)f fq(\(caract)o(\023)-21 b(erisation\))75 1278 y fo(\()p ff(\))p fo(\))24 b fq(supp)q(osons)e fk(x)e fq(et)h fk(y)g fq(faiblemen)o(t)g(\023)-21 b(equiv)m(alen)o(ts.)21 b(il)h(existe)f(alors)g(une)h(bijection)g fm(\013)f fq(telle)h(que)189 1335 y fm(v)211 1342 y fr(y)241 1335 y fq(=)13 b fm(v)311 1342 y fr(x)338 1335 y ff(\016)d fm(\013)p fq(,)15 b fm(img)r fq(\()p fm(\013)p fq(\))c(=)i fm(dom)p fq(\()p fm(v)758 1342 y fr(x)775 1335 y fq(\))i(et)g fm(dom)p fq(\()p fm(\013)p fq(\))d(=)h fm(dom)p fq(\()p fm(v)1198 1342 y fr(y)1215 1335 y fq(\).)189 1408 y(d'apr)o(\022)-21 b(es)17 b(la)j(propri)o(\023)-21 b(et)o(\023)g(e)18 b(1,)h(il)h(existe) g(donc)g(deux)g(bijections)h fk(h)f fq(et)f fk(h)1404 1392 y fx(0)1435 1408 y fq(telles)h(que)g fm(\033)1670 1415 y fr(x)1698 1408 y ff(\016)10 b fk(h)1755 1392 y fq(-1)1811 1408 y fq(=)189 1465 y fm(\033)215 1472 y fr(y)242 1465 y ff(\016)g fk(h)299 1448 y fx(0)311 1442 y fq(-1)363 1465 y fq(a)o(v)o(ec)15 b fm(dom)p fq(\()p fm(v)589 1472 y fr(x)606 1465 y fq(\))d ff(\022)h fm(dom)p fq(\()p fk(h)p fq(\))h(et)h fm(dom)p fq(\()p fm(v)1023 1472 y fr(y)1040 1465 y fq(\))d ff(\022)h fm(dom)p fq(\()p fk(h)1246 1448 y fx(0)1257 1465 y fq(\).)189 1538 y(soit)j fk(g)g fq(la)g(bijection)i fk(h)10 b ff(\016)g fm(\013)g ff(\016)g fk(h)724 1521 y fx(0)735 1515 y fq(-1)773 1538 y fq(,)15 b(et)h(consid)o(\023)-21 b(erons)16 b(le)h(c)o(hamp)f fk(\(h)8 b(::)f(x\))15 b fa(c)h fk(g)p fq(.)f(mon)o(trons)g(que)189 1594 y(ce)g(c)o(hamp)g(est)g(correctemen)o(t)g(d)o(\023)-21 b(e\014ni)8 b(:)243 1684 y({)23 b fm(dom)p fq(\()p fm(v)415 1691 y fr(x)431 1684 y fq(\))13 b ff(\022)g fm(dom)p

fq(\()p fk(h)p fq(\).)243 1753 y({)23 b fm(dom)p fq(\()p fk(g)p fq(\))14 b ff(\022)h fm(dom)p fq(\()p fm(\033)629 1760 y fr(x)656 1753 y ff(\016)10 b fk(h)713 1737 y fq(-1)750 1753 y fq(\).)16 b(en)h(e\013et,)f(par)h(d)o(\023)-21 b(e\014nition)18 b fm(dom)p fq(\()p fk(g)p fq(\))c(=)h fk(h)1505 1737 y fx(0)1517 1753 y fq(\()p fm(dom)p fq(\()p fk(h)9 b ff(\016)h fm(\013)p fq(\)\))d(;)16 b(or)289 1810 y fm(dom)p fq(\()p fk(h)9 b ff(\016)h fm(\013)p fq(\))i ff(\022)h fm(dom)p fq(\()p fm(\013)p fq(\))f(=)h fm(dom)p fq(\()p fm(v)903 1817 y fr(y)920 1810 y fq(\))f ff(\022)h fm(dom)p fq(\()p fm(\033)1128 1817 y fr(y)1145 1810 y fq(\).)c(on)i(a)f(donc)g fm(dom)p fq(\()p fk(g)p fq(\))i ff(\022)h fk(h)1622 1793 y fx(0)1633 1810 y fq(\()p fm(dom)p fq(\()p fm(\033)1781 1817 y fr(y)1798 1810 y fq(\)\))f(=)289 1866 y fm(dom)p fq(\()p fm(\033)419 1873 y fr(y)446 1866 y ff(\016)d fk(h)502 1850 y fx(0)514 1844 y fq(-1)551 1866 y fq(\))k(=)f fm(dom)p fq(\()p fm(\033)759 1873 y fr(x)786 1866 y ff(\016)e fk(h)843 1850 y fq(-1)880 1866 y fq(\).)243 1935 y({)23 b fm(img)r fq(\()p fk(g)p fq(\))10 b ff(\022)j fm(dom)p fq(\()p fm(v)613 1942 y fr(x)640 1935 y ff(\016)d fk(h)697 1919 y fq(-1)734 1935 y fq(\).)k(on)g(a)g(m)o(^)-21 b(eme)14 b(l')o(\023)-21 b(egalit)o(\023)g(e)6 b(:)14 b(en)g(e\013et,)g(par)g(d) o(\023)-21 b(e\014nition)15 b fm(img)r fq(\()p fk(g)p fq(\))10 b(=)289 1992 y fk(h)p fq(\()p fm(img)r fq(\()p fm(\013)e ff(\016)i fk(h)523 1975 y fx(0)534 1969 y fq(-1)572 1992 y fq(\)\).)f(on)i(a)e(donc)i fm(dom)p fq(\()p fm(\013)p fq(\))h(=)h fm(dom)p fq(\()p fm(v)1174 1999 y fr(y)1191 1992 y fq(\))f ff(\022)h fm(dom)p fq(\()p fk(h)1397 1975 y fx(0)1408 1992 y fq(\),)c(donc)i fm(img)r fq(\()p fm(\013)d ff(\016)i fk(h)1744 1975 y fx(0)1756 1969 y fq(-1)1793 1992 y fq(\))i(=)289 2048 y fm(img)r fq(\()p fm(\013)p fq(\),)h(c'est-\022)-23 b(a-dire)16 b fm(img)r fq(\()p fk(g)p fq(\))10 b(=)j fk(h)p fq(\()p fm(img)r fq(\()p fm(\013)p fq(\)\))e(=)i fk(h)p fq(\()p fm(dom)p fq(\()p fm(v)1323 2055 y fr(x)1339 2048 y fq(\)\))f(=)h fm(dom)p fq(\()p fm(v)1561 2055 y fr(x)1588 2048 y ff(\016)d fk(h)1645 2032 y fq(-1)1682 2048 y fq(\).)189 2138 y(le)15 b(c)o(hamp)h(est)e (\023)-21 b(egal)14 b(\022)-23 b(a)7 b(:)227 2191 y fk(\(h)h(::)g(x)o (\))15 b fa(c)h fk(g)209 2247 y fq(=)42 b(\()p fm(v)326 2254 y fr(x)354 2247 y ff(\016)9 b fk(h)410 2231 y fq(-1)458 2247 y ff(\016)h fk(g)i fq(:)g fm(\033)578 2254 y fr(x)606 2247 y ff(\016)e fk(h)663 2231 y fq(-1)700 2247 y fq(\))209 2307 y(=)42 b(\()p fm(v)326 2314 y fr(x)354 2307 y ff(\016)9 b fk(h)410 2290 y fq(-1)458 2307 y ff(\016)h fk(h)g ff(\016)f fm(\013)i ff(\016)f fk(h)654 2290 y fx(0)665 2284 y fq(-1)715 2307 y fq(:)i fm(\033)766 2314 y fr(x)794 2307 y ff(\016)e fk(h)851 2290 y fq(-1)888 2307 y fq(\))256 b(\(d)o(\023)-21 b(e\014nition)16 b(de)f fk(g)p fq(\))209 2366 y(=)42 b(\()p fm(v)326 2373 y fr(x)354 2366 y ff(\016)9 b fm(\013)i ff(\016)f fk(h)483 2350 y fx(0)494 2344 y fq(-1)544 2366 y fq(:)i fm(\033)595 2373 y fr(x)623 2366 y ff(\016)e fk(h)680 2350 y fq(-1)717 2366 y fq(\))272 b(\(car)14 b fm(dom)p fq(\()p fm(v)1226 2373 y fr(x)1243 2366 y fq(\))e ff(\022)h fm(dom)p fq(\()p fk(h)p fq(\)\))209 2426 y(=)42 b(\()p fm(v)326 2433 y fr(y)354 2426 y ff(\016)9 b fk(h)410 2409 y fx(0)422 2403 y fq(-1)472 2426 y fq(:)j fm(\033)523 2433 y fr(x)551 2426 y ff(\016)e fk(h)608 2409 y fq(-1)645 2426 y fq(\))501 b(\(d)o(\023)-21 b(e\014nition)16 b(d')f fm(\013)p fq(\))209 2485 y(=)42 b(\()p fm(v)326

2492 y fr(y)354 2485 y ff(\016)9 b fk(h)410 2469 y fx(0)422 2463 y fq(-1)472 2485 y fq(:)j fm(\033)523 2492 y fr(y)551 2485 y ff(\016)e fk(h)608 2469 y fx(0)619 2463 y fq(-1)656 2485 y fq(\))273 b(\(de)15 b(la)h(d)o(\023)-21 b(e\014nition)16 b(de)g fk(h)f fq(et)g fk(h)1455 2469 y fx(0)1466 2485 y fq(\))209 2542 y(=)42 b fk(h)310 2525 y fx(0)329 2542 y fk(::)8 b(y)586 b fq(\(car)15 b fm(dom)p fq(\()p fm(v)1215 2549 y fr(y)1231 2542 y fq(\))e ff(\022)g fm(dom)p fq(\()p fk(h)1438 2525 y fx(0)1448 2542 y fq(\)\))p eop %%page: 24 26 24 25 bop 75 269 a fq(24)587 b fl(chapitre)16 b(2.)45 b(d)1091 257 y(\023)1085 269 y(efinition)16 b(du)f(f)o(ormalisme)h fn(pei)189 397 y fq(de)f(mani)o(\022)-21 b(ere)15 b(analogue,)g(on)g(p) q(eut)h(d)o(\023)-21 b(e\014nir)15 b fk(g)g fq(comme)g fm(\013)10 b ff(\016)g fk(h)1231 380 y fx(0)1243 375 y fq(-1)1290 397 y ff(\016)g fk(h)15 b fq(et)g(en)h(d)o(\023)-21 b(eduire)8 b(:)189 453 y fk(h)f(::)g(\(x)24 b fa(c)g fk(g\))15 b fq(=)h fk(h)544 437 y fx(0)563 453 y fk(::)7 b(y)75 545 y fo(\()p ff(\()p fo(\))24 b fq(supp)q(osons)16 b(que)h fk(\(h)7 b(::)h(x\))15 b fa(c)g fk(g)h fq(=)g fk(h)833 529 y fx(0)852 545 y fk(::)7 b(y)16 b fq(a)o(v)o(ec)f fk(h)p fq(\()p fm(dom)p fq(\()p fm(v)1215 552 y fr(x)1232 545 y fq(\)\))e(=)h fm(img)r fq(\()p fk(g)p fq(\).)f(alors,)j(nous)g(a) o(v)o(ons)189 602 y fm(v)211 609 y fr(x)238 602 y ff(\016)10 b fk(h)295 585 y fq(-1)342 602 y ff(\016)g fk(g)16 b fq(=)h fm(v)489 609 y fr(y)517 602 y ff(\016)9 b fk(h)573 585 y fx(0)585 580 y fq(-1)639 602 y fq(c'est-\022)-23 b(a-dire)16 b fm(v)894 609 y fr(y)926 602 y fq(=)f fm(v)998 609 y fr(x)1026 602 y ff(\016)10 b fk(h)1083 585 y fq(-1)1130 602 y ff(\016)g fk(g)g ff(\016)g fk(h)1254 585 y fx(0)1281 602 y fq(car)16 b fm(dom)p fq(\()p fm(v)1484 609 y fr(y)1501 602 y fq(\))e ff(\022)h fm(dom)p fq(\()p fk(h)1711 585 y fx(0)1722 602 y fq(\).)g(soit)189 658 y fm(\013)g fq(la)h(bijection)g fk(h)493 642 y fq(-1)540 658 y ff(\016)10 b fk(g)g ff(\016)g fk(h)664 642 y fx(0)676 658 y fq(.)k(il)j(vien)o(t)e fm(v)883 665 y fr(y)913 658 y fq(=)e fm(v)983 665 y fr(x)1011 658 y ff(\016)d fm(\013)p fq(.)189 733 y(p)o(ar)f(d)o(\023)-21 b(e\014nition)11 b(de)f(l'op)o(\023)-21 b(eration)10 b(g)o(\023)-21 b(eom)o(\023)g(etrique,)8 b fm(dom)p fq(\()p fk(g)p fq(\))j ff(\022)i fm(dom)p fq(\()p fm(\033)1343 740 y fr(x)1370 733 y ff(\016)d fk(h)1427 716 y fq(-1)1464 733 y fq(\))i(=)h fm(dom)p fq(\()p fm(\033)1672 740 y fr(y)1699 733 y ff(\016)d fk(h)1756 716 y fx(0)1768 710 y fq(-1)1805 733 y fq(\))i ff(\022)189 789 y fm(dom)p fq(\()p fk(h)317 773 y fx(0)327 767 y fq(-1)365 789 y fq(\))g(=)h fm(img)r fq(\()p fk(h)565 773 y fx(0)575 789 y fq(\).)f(on)g(p)q(eut)h(donc)g(conclure)g(que)g fm(img)r fq(\()p fm(\013)p fq(\))e(=)i fk(h)1384 773 y fq(-1)1421 789 y fq(\()p fm(img)r fq(\()p fk(g)8 b ff(\016)i fk(h)1626 773 y fx(0)1638 789 y fq(\)\))h(est)h(donc)188 846 y(\023)-21 b(egale)12 b(\022)-23 b(a)13 b fk(h)360 829 y fq(-1)397 846 y fq(\()p fm(img)r fq(\()p fk(g)p fq(\)\))d(=)j fk(h)655 829 y fq(-1)703 846 y ff(\016)d fk(h)p fq(\()p fm(dom)p fq(\()p fm(v)904 853 y fr(x)920 846 y fq(\)\))i(=)h fm(dom)p fq(\()p fm(v)1142 853 y fr(x)1159 846 y fq(\).)f fk(x)h fq(et)g fk(y)g fq(son)o(t)g(donc)g (faiblemen)o(t)g(\023)-21 b(equi-)189 902 y(v)m(alen)o(ts.)146 991 y fa(\003)75 1104 y fo(exemple)17 b(4)f fj(il)r(lustr)n(ation)f(de) h(la)h(c)n(ar)n(act)o(\023)-22 b(eristation)15 b(de)i(l')o(\023)-22 b(e)n(quivalenc)n(e)14 b(faible)146 1217 y fq(la)19 b(\014gure)h(2.10)e

(mon)o(tre)h(deux)i(c)o(hamps)e(faiblemen)o(t)h(\023)-21 b(equiv)m(alen)o(ts)20 b fk(x)f fq(et)h fk(y)p fq(.)f(les)h(domaines)g (de)75 1274 y(v)m(aleurs)g(de)f(ces)g(deux)g(c)o(hamps)f(son)o(t)g (supp)q(os)o(\023)-21 b(es)18 b(\023)-21 b(egaux)17 b(\(repr)o(\023)-21 b(esen)o(t)o(\023)g(es)17 b(par)h(la)h(partie)g(gris)o(\023)-21 b(ee\))17 b(mais)75 1330 y(leurs)j(domaines)g(de)g(r)o(\023)-21 b(ef)o(\023)g(erence)17 b(di\013)o(\022)-21 b(eren)o(t,)19 b(celui)i(de)e fk(x)f fq(\023)-21 b(etan)o(t)18 b(le)i(v)o(ecteur,)f (et)g(celui)i(de)f fk(y)e fq(\023)-21 b(etan)o(t)17 b(la)75 1387 y(premi)o(\022)-21 b(ere)13 b(face)g(du)g(cub)q(e.)h(p)o(our)e (mon)o(trer)g(que)i(ces)f(c)o(hamps)g(son)o(t)f(faiblemen)o(t)h(\023) -21 b(equiv)m(alen)o(ts)14 b(plusieurs)75 1443 y(p)q(ossiblit)o(\023) -21 b(es)14 b(s'o\013ren)o(t)d(p)q(our)i(le)h(c)o(hoix)g(des)f (fonctions)g fk(h)p fq(,)f fk(h)1072 1427 y fx(0)1097 1443 y fq(et)g fk(g)h fq(p)q(our)f(\023)-21 b(etablir)13 b(l')o(\023)-21 b(egalit)o(\023)g(e)12 b fk(\(h)c(::)f(x\))15 b fa(c)h fk(g)75 1500 y fq(=)g fk(h)150 1483 y fx(0)169 1500 y fk(::)7 b(y)15 b fq(de)h(la)f(caract)o(\023)-21 b(erisation.)143 1600 y({)23 b(on)13 b(p)q(eut)h(c)o(hoisir)g fk(h)f fq(=)h fk(g)f fq(=)g fm(\025)p fk(\(i\).\(i\))f fq(et)h fk(h)947 1583 y fx(0)972 1600 y fq(=)h fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(i)p fq(=)p fk(j)6 b(&)i(k)p fq(=)p fk(0\).\(i\))o fq(,)13 b(p)q(our)h(r)o(\023)-21 b(eduire)189 1656 y(le)14 b(domaine)g(de)g(r)o(\023)-21 b(ef)o(\023)g(erence)12 b(de)i(l'expression)g(\022)-23 b(a)13 b(droite)h(de)g(l')o(\023)-21 b(egalit)o(\023)g(e)12 b(\022)-23 b(a)14 b(celui)h(du)f(v)o(ecteur)f fk(x)g fq(dans)189 1713 y fe(z)-13 b fq(.)143 1805 y({)23 b(la)17 b(deuxi)o(\022)-21 b(eme)18 b(p)q(ossibilit)o(\023)-21 b(e)20 b(est)d(de)h(c)o(hoisir)g fk(h)f fq(=)h fm(\025)p fk(\(i\).\(i,i\))n fq(,)g fk(g)f fq(=)h fm(\025)p fk(\(i,j\))p ff(j)p fk(\(i)p fq(=)p fk(j\).\(i,j\))m fq(,)189 1861 y(et)c fk(h)265 1845 y fx(0)291 1861 y fq(=)g fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(i)p fq(=)p fk(j)6 b(&)i(k)p fq(=)p fk(0\).\(i,i\))o fq(,)14 b(p)q(our)h(que)g(les)g(domaines)f(de)h (r)o(\023)-21 b(ef)o(\023)g(erence)13 b(des)i(deux)189 1918 y(expressions)h(soien)o(t)f(repr)o(\023)-21 b(esen)o(t)o(\023)g (es)13 b(dans)j fe(z)930 1901 y fg(2)946 1918 y fq(.)143 2010 y({)23 b(en\014n,)10 b(on)g(p)q(eut)h(c)o(hoisir)g fk(h)f fq(=)h fm(\025)p fk(\(i\).\(i,i,0\))d fq(et)i fk(g)g fq(=)g fk(h')p fq(=)g fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(i)p fq(=)p fk(j)c(&)i(k)p fq(=)p fk(0\).\(i,j,k\))189 2066 y fq(p)q(our)15 b(que)h(le)g(domaine)g(de)f(r)o(\023)-21 b(ef)o(\023)g(erence)14 b(de)i(l'expression)g(de)g(gauc)o(he)f(soit)f (\023)-21 b(egal)14 b(\022)-23 b(a)15 b(celui)i(de)f(l'ex-)189 2123 y(pression)g(de)f(droite)h(dans)f fe(z)695 2106 y fg(3)711 2123 y fq(.)75 2223 y fa(\006)75 2400 y fw(2.3.5)55 b(in)n(terpr)o(\023)-27 b(etation)18 b(fonctionnelle)146 2486 y fq(a)13 b(partir)f(des)i(d)o(\023)-21 b(e\014nitions)13 b(s)o(\023)-21 b(eman)o(tiques)13 b(des)g(op)o(\023)-21 b(erations)12 b(on)g(p)q(eut)i(pr)o(\023)-21 b(eciser)13 b(une)h fj(interpr)o(\023)-22 b(etation)75 2542 y(fonctionnel)r(le)15 b fq([)-8 b([)p fk(x)p fq(])g(])17 b(d'un)g(c)o(hamp)g(de)h(donn)o (\023)-21 b(ees)17 b fk(x)p fq(=\()p fm(v)g fq(:)e fm(\033)r fq(\),)h(c'est-\022)-23 b(a-dire)18 b(donner)g(une)f(fonction)h(qui)p eop %%page: 25 27 25 26 bop 75 269 a fl(2.3.)29 b(s)207 257 y(\023)201 269 y(emantique)1310 b fq(25)492 889 y @beginspecial @setspecial

%%begindocument: eq_faible.pstex /$f2psdict 200 dict def $f2psdict begin $f2psdict /mtrx matrix put /l {lineto} bind def /m {moveto} bind def /s {stroke} bind def /n {newpath} bind def /gs {gsave} bind def /gr {grestore} bind def /clp {closepath} bind def /graycol {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul setrgbcolor} bind def /col-1 {} def /col0 {0 0 0 setrgbcolor} bind def /col1 {0 0 1 setrgbcolor} bind def /col2 {0 1 0 setrgbcolor} bind def /col3 {0 1 1 setrgbcolor} bind def /col4 {1 0 0 setrgbcolor} bind def /col5 {1 0 1 setrgbcolor} bind def /col6 {1 1 0 setrgbcolor} bind def /col7 {1 1 1 setrgbcolor} bind def /col8 {.68 .85 .9 setrgbcolor} bind def /col9 {0 .39 0 setrgbcolor} bind def /col10 {.65 .17 .17 setrgbcolor} bind def /col11 {1 .51 0 setrgbcolor} bind def /col12 {.63 .13 .94 setrgbcolor} bind def /col13 {1 .75 .8 setrgbcolor} bind def /col14 {.7 .13 .13 setrgbcolor} bind def /col15 {1 .84 0 setrgbcolor} bind def end /$f2psbegin {$f2psdict begin /$f2psenteredstate save def} def /$f2psend {$f2psenteredstate restore end} def $f2psbegin 0 setlinecap 0 setlinejoin -40.0 148.0 translate 0.900 -0.900 scale 0.500 setlinewidth % polyline n 177 57 m 230 164 l 240 161 l 187 54 l gs 0.50 setgray fill gr gs col-1 s gr % polyline n 187 54 m 240 81 l 240 161 l 187 134 l 187 54 l gs col-1 s gr % polyline n 177 57 m 230 84 l 230 164 l 177 137 l 177 57 l gs col-1 s gr % polyline n 230 84 m 240 81 l gs col-1 s gr % polyline n 177 57 m 187 54 l gs col-1 s gr 1 setlinecap [1 3.000000] 3.000000 setdash % polyline n 240 81 m 294 64 l gs col-1 s gr [] 0 setdash 0 setlinecap % polyline n 230 164 m 240 161 l gs col-1 s gr 1 setlinecap [1 3.000000] 3.000000 setdash % polyline n 240 161 m 294 141 l gs col-1 s gr [] 0 setdash 0 setlinecap 1 setlinecap [1 3.000000] 3.000000 setdash

% polyline n 187 54 m 250 34 l gs col-1 s gr [] 0 setdash 0 setlinecap % polyline n 154 89 m 154 79 l 44 79 l 44 89 l clp gs 0.50 setgray fill gr gs col-1 s gr $f2psend %%enddocument @endspecial 484 w fq(y)623 675 y(x)365 1032 y fn(fig.)15 b fq(2.10)f(-)30 b fj(deux)17 b(champs)g(de)f(donn)o(\023)-22 b(e)n(es)15 b(faiblement)g(\023)-22 b(e)n(quivalents)75 1234 y fq(d)o(\023)h(e\014nit)14 b(les)g(v)m(aleurs)g(d'un)g(c)o(hamp)f (de)h(donn)o(\023)-21 b(ees,)12 b(quel)j(que)f(soit)f(le)h(placemen)o (t)g(de)g(r)o(\023)-21 b(ef)o(\023)g(erence.)12 b(sa)h(d)o(\023)-21 b(e\014-)75 1290 y(nition)17 b(fait)e(donc)h(abstraction)g(des)g (di\013)o(\023)-21 b(erences)15 b(\023)-21 b(ev)o(en)o(tuelles)16 b(de)g(placemen)o(t)g(d'un)g(m)o(ulti-ensem)o(ble)75 1346 y(de)g(v)m(aleurs.)75 1491 y fo(d)o(\023)-25 b(e\014nition)19 b(5)31 b fq(\(in)o(terpr)o(\023)-21 b(etation)14 b(fonctionnelle\))75 1548 y([)-8 b([)p fk(x)p fq(])g(])14 b(=)i fm(v)c ff(\016)d fm(\033)294 1531 y fm(\000)p fp(1)75 1693 y fo(prop)q(osition)19 b(2)30 b fq([)-8 b([)p fk(h)7 b(::)g(x)p fq(])-8 b(])13 b(=)g([)-8 b([)p fk(x)p fq(])g(])11 b(=)i fm(v)f ff(\016)e fm(\033)835 1676 y fm(\000)p fp(1)873 1693 y fq(.)75 1838 y fj(pr)n(euve.)15 b fq(de)h(la)f(s)o(\023)-21 b(eman)o(tique)15 b(de)h(l'op)o(\023)-21 b(eration)15 b(de)h(c)o(hangemen)o(t)f(de)h (base)g(et)f(de)h(la)g(d)o(\023)-21 b(e\014nition)16 b(pr)o(\023)-21 b(ec)o(\023)g(e-)75 1894 y(den)o(te,)15 b(nous)g(a)o(v)o(ons)g(en)g(e\013et)7 b(:)36 b([)-8 b([)p fk(h)7 b(::)g(x)p fq(])-8 b(])41 b(=)h(\()p fm(v)12 b ff(\016)e fk(h)1016 1877 y fx(\000)p fg(1)1060 1894 y fq(\))g ff(\016)g fq(\()p fm(\033)h ff(\016)f fk(h)1233 1877 y fx(\000)p fg(1)1277 1894 y fq(\))1295 1877 y fx(\000)p fg(1)830 1950 y fq(=)42 b(\()p fm(v)12 b ff(\016)e fk(h)1016 1934 y fx(\000)p fg(1)1060 1950 y fq(\))g ff(\016)g fq(\()p fk(h)f ff(\016)h fm(\033)1233 1934 y fx(\000)p fg(1)1277 1950 y fq(\))830 2007 y(=)42 b fm(v)12 b ff(\016)e fm(\033)1002 1990 y fx(\000)p fg(1)830 2063 y fq(=)42 b([)-8 b([)p fk(x)p fq(])g(])75 2115 y fa(\003)75 2260 y fq(ainsi,)18 b(le)g(c)o(hangemen)o(t)f(de)g(base)g(appliqu)o(\023)-21 b(e)18 b(\022)-23 b(a)17 b(un)g(c)o(hamp)g(de)g(donn)o(\023)-21 b(ees)17 b(ne)g(mo)q(di\014e)i(pas)d(son)h(in)o(ter-)75 2316 y(pr)o(\023)-21 b(etation)14 b(fonctionnelle.)i(en)f(cons)o(\023) -21 b(equence,)14 b(deux)i(c)o(hamps)e(fortemen)o(t)f(\023)-21 b(equiv)m(alen)o(ts,)15 b(qui)g(p)q(euv)o(en)o(t)75 2373 y(a)o(v)o(oir)g(des)g(placemen)o(ts)h(di\013)o(\023)-21 b(eren)o(ts,)14 b(on)o(t)h(la)g(m)o(^)-21 b(eme)15 b(in)o(terpr)o(\023) -21 b(etation)14 b(fonctionnelle.)j(de)e(m)o(^)-21 b(eme,)14 b(p)q(our)75 2429 y(les)j(c)o(hamps)f(de)h(donn)o(\023)-21 b(ees)16 b(obten)o(us)g(par)g(une)h(op)o(\023)-21 b(eration)15 b(fonctionnelle)k(ou)d(une)h(op)o(\023)-21 b(eration)15 b(de)i(rou-)75 2486 y(tage,)d(nous)h(a)o(v)o(ons)g(la)g(propri)o(\023) -21 b(et)o(\023)g(e)14 b(suiv)m(an)o(te)8 b(:)p eop %%page: 26 28 26 27 bop 75 269 a fq(26)587 b fl(chapitre)16 b(2.)45 b(d)1091 257 y(\023)1085 269 y(efinition)16 b(du)f(f)o(ormalisme)h fn(pei)75 397 y fo(prop)q(osition)j(3)100 449 y fq([)-8 b([)p fk(f)15 b fa(b)g fk(x)p fq(])-8 b(])12 b(=)h fk(f)d ff(\016)g fq([)-8 b([)p fk(x)p fq(])g(])100 506 y(et)100 562 y([)g([)p fk(x)15 b fa(c)g fk(g)p fq(])-8 b(])12

b(=)h([)-8 b([)p fk(x)p fq(])g(])10 b ff(\016)f fm(\033)j ff(\016)e fk(g)g ff(\016)g fm(\033)577 546 y fx(\000)p fg(1)75 703 y fo(exemple)17 b(5)f fj(interpr)o(\023)-22 b(etation)16 b(fonctionnel)r(le)e(d'un)j(champ)g(r)o(\023)-22 b(esultat)75 816 y fq(consid)o(\023)h(erons)15 b(le)h(programme)e(suiv) m(an)o(t)8 b(:)75 929 y fk(p)24 b(:)f(v)15 b ff(7!)h fk(b)75 941 y fx(8)75 979 y(>)75 991 y(<)75 1066 y(>)75 1078 y(:)137 983 y fk(v)f fq(=)g fk(align)7 b(::)h(m)137 1040 y(a)15 b fq(=)g fk(m)g fa(c)h fk(spread)137 1096 y(b)f fq(=)g fk(inc)g fa(b)h fk(a)100 1171 y(align)73 b fq(=)50 b fm(\025)p fk(\(i,j\))p ff(j)p fk(\(i)p fq(=)p fk(0\).\(j\))100 1228 y(spread)f fq(=)h fm(\025)p fk(\(i,j\).\(0,j\)) 100 1284 y(inc)121 b fq(=)50 b fm(\025)p fk(\(a\).\(a+1\))146 1374 y fq(nous)15 b(c)o(herc)o(hons)g(l'in)o(terpr)o(\023)-21 b(etation)14 b(fonctionnelle)j(du)f(c)o(hamp)f(r)o(\023)-21 b(esultat)14 b fk(b)h fq(en)g(fonction)g(de)h(l'en-)75 1430 y(tr)o(\023)-21 b(ee)18 b fk(v)p fq(.)g(de)h(l')o(\023)-21 b(equation)18 b fk(v)h fq(=)g fk(align)7 b(::)g(m)19 b fq(et)f(de)i(la)f(s)o(\023)-21 b(eman)o(tique)18 b(du)h(c)o(hangemen) o(t)g(de)g(base,)f(nous)75 1486 y(tirons)i(les)g(\023)-21 b(egalit)o(\023)g(es)6 b(:)20 b fm(v)489 1493 y fw(v)539 1486 y fq(=)h fm(v)617 1493 y fw(m)664 1486 y ff(\016)10 b fk(align)816 1469 y fx(\000)p fg(1)881 1486 y fq(et)20 b fm(\033)965 1493 y fw(v)1015 1486 y fq(=)h fm(\033)1097 1493 y fw(m)1144 1486 y ff(\016)10 b fk(align)1296 1469 y fx(\000)p fg(1)1341 1486 y fq(.)19 b(comme)h(il)h(n'y)f(a)g(pas)g(de) 75 1543 y(c)o(hangemen)o(t)15 b(de)h(base)f(en)o(tre)g(les)h(c)o(hamps) f fk(a)p fq(,)g fk(b)g fq(et)g fk(m)p fq(,)f(nous)i(a)o(v)o(ons)e (aussi)h fm(\033)1395 1550 y fw(a)1435 1543 y fq(=)e fm(\033)1509 1550 y fw(b)1550 1543 y fq(=)g fm(\033)1624 1550 y fw(m)1661 1543 y fq(.)i(de)g(l\022)-23 b(a,)766 1621 y fm(\033)792 1628 y fw(b)862 1621 y fq(=)42 b fm(\033)965 1628 y fw(v)1004 1621 y ff(\016)9 b fk(align)75 1700 y fq(nous)15 b(a)o(v)o(ons)f(d'autre)h(part)7 b(:)342 1775 y([)-8 b([)p fk(b)p fq(])g(])41 b(=)h([)-8 b([)p fk(inc)14 b fa(b)i fk(a)p fq(])-8 b(])12 b(=)h fk(inc)d ff(\016)g fq([)-8 b([)p fk(a)p fq(])g(])443 1831 y(=)42 b fk(inc)10 b ff(\016)g fq([)-8 b([)p fk(m)14 b fa(c)i fk(spread)o fq(])-8 b(])12 b(=)h fk(inc)d ff(\016)g fq([)-8 b([)p fk(m)p fq(])g(])9 b ff(\016)h fm(\033)1206 1838 y fw(m)1253 1831 y ff(\016)g fk(spread)f ff(\016)h fm(\033)1498 1838 y fw(m)1535 1815 y fx(\000)p fg(1)443 1888 y fq(=)42 b fk(inc)10 b ff(\016)g fm(v)657 1895 y fw(m)704 1888 y ff(\016)f fm(\033)762 1895 y fw(m)799 1871 y fx(\000)p fg(1)854 1888 y ff(\016)h fm(\033)913 1895 y fw(m)960 1888 y ff(\016)f fk(spread)h ff(\016)g fm(\033)1205 1895 y fw(m)1241 1871 y fx(\000)p fg(1)443 1944 y fq(=)42 b fk(inc)10 b ff(\016)g fm(v)657 1951 y fw(m)704 1944 y ff(\016)f fk(spread)h ff(\016)g fm(\033)949 1951 y fw(m)985 1928 y fx(\000)p fg(1)443 2001 y fq(=)42 b fk(inc)10 b ff(\016)g fm(v)657 2008 y fw(v)696 2001 y ff(\016)f fk(align)h ff(\016)g fk(spread)f ff(\016)h fm(\033)1103 2008 y fw(m)1140 1984 y fx(\000)p fg(1)75 2075 y fq(c'est-\022)-23 b(a-dire)8 b(:)502 2132 y fm(v)524 2139 y fw(b)563 2132 y ff(\016)i fm(\033)622 2139 y fw(b)650 2113 y fx(\000)p fg(1)707 2132 y fq(=)j fk(inc)d ff(\016)g fm(v)892 2139 y fw(v)931 2132 y ff(\016)g fk(align)f ff(\016)h fk(spread)f ff(\016)h fm(\033)1338 2139 y fw(m)1375 2113 y fx(\000)p fg(1)75 2204 y fq(d'o)q(\022)-24 b(u)7 b(:)333 b fm(v)536 2211 y fw(b)578 2204 y fq(=)13 b fk(inc)c ff(\016)h fm(v)762

2211 y fw(v)801 2204 y ff(\016)g fk(align)f ff(\016)h fk(spread)75 2316 y fq(nous)15 b(p)q(ouv)o(ons)g(ainsi)g(\023)-21 b(ev)m(aluer)15 b(la)g(v)m(aleur)h(asso)q(ci)o(\023)-21 b(ee)14 b(\022)-23 b(a)15 b(tout)f(p)q(oin)o(t)h fm(v)1260 2323 y fw(b)1289 2316 y fq(\()p fm(i;)8 b(j)s fq(\))k(en)j(calculan)o (t)h(\()p fk(inc)24 b ff(\016)10 b fm(v)1818 2323 y fw(v)85 2373 y ff(\016)g fm(\025)p fk(\(i,j\).\(j\))n fq(\))21 b(\()p fm(i;)8 b(j)s fq(\).)18 b(l'in)o(terpr)o(\023)-21 b(etation)20 b(fonctionnelle)j(est)e(la)g(base)g(du)h(traducteur)e fn(pei)h fq(v)o(ers)75 2429 y fn(caml)p fq([60)o(])15 b(inclus)j(dans)e(l'en)o(vironnemen)o(t)h fn(pei)p fq(,)e(don)o(t)h (nous)g(parlerons)g(en)g(d)o(\023)-21 b(etail)16 b(dans)g(la)g(section) 75 2486 y(3.5.)29 b fa(\006)p eop %%page: 27 29 27 28 bop 1801 269 a fq(27)75 709 y fi(chapitre)32 b(3)75 918 y fp(ra\016nemen)m(t)37 b(et)i(abstraction)75 1159 y ft(3.1)66 b(d)o(\023)-32 b(e\014nition)23 b(g)o(\023)-32 b(en)o(\023)g(erale)20 b(du)j(ra\016nemen)n(t)146 1262 y fq(le)16 b(ra\016nemen)o(t)g(est)f(un)i(pro)q(c)o(\023)-21 b(ed)o(\023)g(e)15 b(classique)i(de)f(construction)h(ou)e(de)i (transformation)d(de)j(pro-)75 1319 y(grammes)d([2,)h(44)o(],)g(qui)h (consiste)g(\022)-23 b(a)15 b(obtenir)h(un)f(programme)g(satisfaisan)o (t)f(toute)h(sp)o(\023)-21 b(eci\014cation)16 b(que)75 1375 y(satisfaisait)h(un)h(programme)e(initial.)j(la)e(d)o(\023)-21 b(e\014nition)18 b(du)g(ra\016nemen)o(t)e(est)h(comm)o(un)o(\023)-21 b(emen)o(t)15 b(\023)-21 b(etablie)75 1432 y(de)16 b(la)f(mani)o(\022) -21 b(ere)15 b(suiv)m(an)o(te,)h(\022)-23 b(a)14 b(partir)i(d'une)f (propri)o(\023)-21 b(et)o(\023)g(e)14 b(de)i(satisfaction)f(c)o (hoisie,)h(not)o(\023)-21 b(ee)14 b fl(sat)i fq(:)75 1546 y fo(d)o(\023)-25 b(e\014nition)22 b(6)37 b fq(soien)o(t)18 b(les)h(programmes)e fm(p)24 b fq(et)18 b fm(p)999 1529 y fx(0)1011 1546 y fq(,)g(on)g(dit)g(que)h fm(p)24 b fq(est)18 b(ra\016n)o(\023)-21 b(e)17 b(par)h fm(p)1657 1529 y fx(0)1669 1546 y fq(,)g(et)f(nous)75 1602 y(notons)e fm(p)k ff(v)13 b fm(p)353 1586 y fx(0)365 1602 y fq(,)i(si)g(et)g (seulemen)o(t)i(si,)e(p)q(our)g(toute)g(sp)o(\023)-21 b(eci\014cation)16 b fm(s)s fq(,)768 1700 y fm(p)21 b fl(sat)16 b fm(s)f ff(\))e fm(p)1025 1684 y fx(0)1053 1700 y fl(sat)i fm(s)146 1798 y fq(si)21 b(la)h(propri)o(\023)-21 b(et)o(\023)g(e)19 b(c)o(hoisie)j(est)f(la)g(correction)g(totale)g(par) f(exemple,)i(on)f(utilisera)h(les)g fj(we)n(akest)75 1854 y(pr)n(e)n(c)n(onditions)c fq(de)i(dijkstra,)f(not)o(\023)-21 b(ees)18 b fm(w)q(p)p fq(\()p fm(p)q(;)8 b(post)p fq(\),)19 b(o)q(\022)-24 b(u)19 b fm(p)26 b fq(est)20 b(un)f(\023)-21 b(enonc)o(\023)g(e)18 b(et)h fm(post)i fq(un)f(pr)o(\023)-21 b(edicat)7 b(:)75 1911 y fm(w)q(p)p fq(\()p fm(p)q(;)h(post)p fq(\))16 b(est)h(le)g(plus)h(faible)g(pr)o(\023)-21 b(edicat)17 b(p)q(our)g(lequel)h(l'ex)o(\023)-21 b(ecution)17 b(de)h fm(p)23 b fq(termine)17 b(dans)g(un)f(\023)-21 b(etat)75 1967 y(satisfaisan)o(t)15 b fm(post)p fq(.)g(la)g(d)o(\023)-21 b(e\014nition)16 b(g)o(\023)-21 b(en)o(\023)g(erale)14 b(du)i(ra\016nemen)o(t)f(devien)o(t)h(alors)7 b(:)587 2065 y fm(p)19 b ff(v)13 b fm(p)718 2049 y fx(0)745 2065 y fq(ssi)j ff(8)p fm(r)g fq(\()p fm(w)q(p)p fq(\()p fm(p)q(;)8 b(r)q fq(\))j ff(\))i fm(w)q(p)p fq(\()p fm(p)1234 2049 y fx(0)1245 2065 y fm(;)8 b(r)q fq(\)\).)146 2163 y(la)j(notion)g(de)g (ra\016nemen)o(t)g(est)g(fr)o(\023)-21 b(equemmen)o(t)10 b(utilis)o(\023)-21 b(ee)12 b(dans)f(un)h(pro)q(c)o(\023)-21 b(ed)o(\023)g(e)10 b(con)o(tin)o(u)h(de)g(construc-)75 2219 y(tion)k(d')o(\023)-21 b(enonc)o(\023)g(es)14 b(successifs,)i

(depuis)g(une)g(sp)o(\023)-21 b(eci\014cation)16 b(jusqu'\022)-23 b(a)15 b(un)g(programme)f(ex)o(\023)-21 b(ecutable,)15 b(pre-)75 2276 y(nan)o(t)20 b(en)i(compte)e(tel)h(ou)g(tel)g(mo)q(d)o (\022)-21 b(ele)21 b(d'ex)o(\023)-21 b(ecution.)21 b(elle)h(d)o(\023) -21 b(e\014nit)21 b(une)g(relation)g(d'ordre)g(partiel)75 2332 y(en)o(tre)f(les)g(\023)-21 b(enonc)o(\023)g(es,)19 b(dite)i fj(r)n(elation)g(de)g(r)n(a\016nement)p fq(.)e(le)i (ra\016nemen)o(t)f(est)g(g)o(\023)-21 b(en)o(\023)g(eralemen)o(t)18 b(\023)-21 b(etendu)75 2388 y(aux)18 b(sp)o(\023)-21 b(eci\014cations)20 b(elles-m)o(^)-21 b(emes,)18 b(a)o(v)o(ec,)g(p)q (our)h(des)g(sp)o(\023)-21 b(eci\014cations)19 b(de)g(t)o(yp)q(e)f([)p fm(pr)q(e)p fq(,)p fm(post)p fq(],)g(les)h(deux)75 2445 y(cas)c(particuliers)9 b(:)189 2542 y([)p fm(p;)f(q)r fq(])j ff(v)h fq([)p fm(p)375 2526 y fx(0)387 2542 y fm(;)c(q)r fq(])14 b(si)h fm(p)e ff(\))g fm(p)619 2526 y fx(0)645 2542 y fq(\(a\013aiblissemen)o(t)j(des)g(pr)o(\023)-21 b(econditions\))15 b(et)p eop %%page: 28 30 28 29 bop 75 269 a fq(28)615 b fl(chapitre)16 b(3.)30 b(raffinement)15 b(et)f(abstra)o(ction)189 397 y fq([)p fm(p;)8 b(q)r fq(])j ff(v)h fq([)p fm(p;)c(q)418 380 y fx(0)429 397 y fq(])15 b(si)g fm(q)524 380 y fx(0)548 397 y ff(\))f fm(q)j fq(\(renforcemen)o(t)d(des)i(p)q(ostconditions\).) 146 506 y(knapp)d([31)o(])f(pr)o(\023)-21 b(esen)o(te)11 b(la)i(d)o(\023)-21 b(e\014nition)13 b(du)g(ra\016nemen)o(t)f(de)h(sp)o (\023)-21 b(eci\014cations)12 b(sous)h(une)g(autre)f(forme,)75 562 y(p)q(our)19 b(l'appliquer)h(aux)f(programmes)e fn(unity)p fq([10)n(].)h(bien)i(qu')o(\023)-21 b(equiv)m(alen)o(te,)19 b(la)g(form)o(ulation)f(en)h(est)75 619 y(di\013)o(\023)-21 b(eren)o(te)11 b(du)i(fait)e(de)i(la)f(forme)f(des)h(sp)o(\023)-21 b(eci\014cations)13 b(utilis)o(\023)-21 b(ees)13 b(\(en)f(logique)h(mo) q(dale\))8 b(:)j(la)h(s)o(\023)-21 b(eman)o(tique)75 675 y(d')p fn(unity)13 b fq(est)h(d)o(\023)-21 b(e\014nie)15 b(sous)f(la)h(forme)e(d'un)i(syst)o(\022)-21 b(eme)13 b(de)h(transitions)h(d')o(\023)-21 b(etats)12 b(et)i(la)g(logique)i (utilis)o(\023)-21 b(ee)75 732 y(p)q(ermet)16 b(d'exprimer)h(des)g (propri)o(\023)-21 b(et)o(\023)g(es)15 b(sur)h(ces)f(\023)-21 b(etats.)14 b(soien)o(t)j fm(s)g fq(et)f fm(s)1283 715 y fx(0)1311 732 y fq(deux)g(\023)-21 b(etats,)14 b(on)i(note)g fm(s)p fq(\()p fm(p)p fq(\))g(et)75 788 y fm(s)96 772 y fx(0)108 788 y fq(\()p fm(q)r fq(\))d(le)h(fait)f(que)h(les)f(\023) -21 b(etats)11 b(satisfon)o(t)i(les)h(propri)o(\023)-21 b(et)o(\023)g(es)11 b fm(p)j fq(et)f fm(q)i fq(resp)q(ectiv)o(emen)o (t.)f(in)o(tuitiv)o(emen)o(t,)f(dans)75 844 y(ce)j(t)o(yp)q(e)f (d'appro)q(c)o(he,)g(une)h(sp)o(\023)-21 b(eci\014cation)16 b fm(s)h fq(a)e(la)h(forme)e(suiv)m(an)o(te)9 b(:)663 969 y fm(s)15 b fq(:)d ff(8)p fm(s)p fq(\()p fm(p)p fq(\))j ff(9)p fm(s)897 950 y fx(0)910 969 y fq(\()p fm(q)r fq(\))p fm(:)p fq(\()p fm(s)c fa( )i fm(s)1110 950 y fx(0)1122 969 y fq(\))60 b(\(1\))75 1065 y(o)q(\022)-24 b(u)20 b(la)h(notation)f fm(s)h fa( )g fm(s)515 1049 y fx(0)547 1065 y fq(signi\014e)h(que)f fm(s)815 1049 y fx(0)847 1065 y fq(est)f(un)g(\023)-21 b(etat)18 b(\\atteignable")j(\022)-23 b(a)19 b(partir)i(de)f(l')o(\023)-21 b(etat)19 b fm(s)p fq(.)h(le)75 1122 y(ra\016nemen)o(t)15 b(est)g(alors)g(d)o(\023)-21 b(e\014ni)15 b(de)h(la)g(mani)o(\022)-21 b(ere)14 b(suiv)m(an)o(te)9 b(:)75 1238 y fo(d)o(\023)-25 b(e\014nition)19 b(7)c fq(soien)o(t)h(deux)g(sp)o(\023)-21 b(eci\014cations)16 b fm(s)h fq(et)e fm(s)1013 1222 y fx(0)1040 1238 y fq(de)g(la)h(forme)e (\(1\),)g fm(s)h ff(v)e fm(s)1486 1222 y fx(0)1513 1238

y fq(ssi)i fm(s)1607 1222 y fx(0)1631 1238 y ff(\))e fm(s)75 1403 y ft(3.2)66 b(ra\016nemen)n(t)23 b(des)e(\023)-32 b(enonc)o(\023)g(es)19 b fs(pei)75 1513 y fw(3.2.1)55 b(d)o(\023)-27 b(e\014nitions)146 1606 y fq(la)14 b(d)o(\023)-21 b(e\014nition)15 b(du)g(ra\016nemen)o(t)g(des)e(\023)-21 b(enonc)o(\023)g(es)14 b fn(pei)g fq(s'inspire)i(de)f(la)f(d)o(\023)-21 b(e\014nition)16 b(de)f(knapp,)f(mais)75 1663 y(en)i(restan)o(t)e(dans) i(la)f(logique)i(du)e(premier)h(ordre.)f(consid)o(\023)-21 b(erons)15 b(un)g(\023)-21 b(enonc)o(\023)g(e)14 b fn(pei)p fq(,)h(don)o(t)g(les)h(en)o(tr)o(\023)-21 b(ees)75 1719 y(et)15 b(les)h(sorties)f(son)o(t)f fk(d)h fq(et)h fk(r)f fq(resp)q(ectiv)o(emen)o(t)8 b(:)75 1780 y fk(p)24 b(:)f(d)15 b ff(7!)h fk(r)75 1785 y fx(\()164 1829 y fm(s)192 1836 y fg(1)164 1885 y fm(s)192 1892 y fg(2)146 1974 y fq(nous)k(p)q(ouv)o (ons)h(consid)o(\023)-21 b(erer,)20 b(parmi)h(les)f(\023)-21 b(equations)20 b(du)h(syst)o(\022)-21 b(eme,)18 b(deux)k(t)o(yp)q(es)e (d')o(\023)-21 b(equations)7 b(:)75 2030 y(celles)14 b(qui)g(p)q(orten)o(t)e(uniquemen)o(t)i(sur)e(des)h(en)o(tr)o(\023)-21 b(ees,)12 b(et)g(celles)i(qui)g(comp)q(orten)o(t)e(des)h(c)o(hamps)f (de)h(don-)75 2087 y(n)o(\023)-21 b(ees)13 b(in)o(term)o(\023)-21 b(ediaires)14 b(ou)f(des)h(sorties.)f(nous)h(app)q(elons)g(les)g(premi) o(\022)-21 b(eres)14 b fj(pr)o(\023)-22 b(e-)o(\023)g(e)n(quations)p fq(,)13 b(les)h(secondes)75 2143 y fj(p)n(ost-)o(\023)-22 b(e)n(quations)p fq(.)18 b(dans)h(la)h(structure)f(sc)o(h)o(\023)-21 b(ematique)19 b(de)g(l')o(\023)-21 b(enonc)o(\023)g(e)19 b fk(p)g fq(ci-dessus,)h(les)g(pr)o(\023)-21 b(e-)o(\023)g(equations)75 2200 y(appartiennen)o(t)14 b(\022)-23 b(a)13 b(l'ensem)o(ble)i(d')o (\023)-21 b(equations)12 b fm(s)885 2207 y fg(1)904 2200 y fq(,)h(les)h(p)q(ost-)o(\023)-21 b(equations)12 b(\022)-23 b(a)13 b(l'ensem)o(ble)i(d')o(\023)-21 b(equations)13 b fm(s)1816 2207 y fg(2)1834 2200 y fq(.)75 2316 y fo(d)o(\023)-25 b(e\014nition)19 b(8)31 b fq(\(pr)o(\023)-21 b(e-)o(\023)g(equation)13 b(et)i(p)q(ost-)o(\023)-21 b(equation\))75 2373 y(une)14 b fj(pr)o(\023)-22 b(e-)o(\023)g(e)n(quation)13 b fq(d'un)f(\023)-21 b(enonc)o(\023)g(e)12 b fk(p)h fq(est)g(une)g(\023)-21 b(equation)12 b(lian)o(t)i(uniquemen)o(t)g(des)f(c)o(hamps)g(de)h(donn) o(\023)-21 b(ees)75 2429 y(en)20 b(en)o(tr)o(\023)-21 b(ee)19 b(de)h fk(p)p fq(.)f(une)h(\023)-21 b(equation)19 b(d'un)g(\023)-21 b(enonc)o(\023)g(e)19 b fk(p)g fq(est)h(une)g fj(p)n(ost-)o(\023)-22 b(e)n(quation)20 b fq(si)g(elle)i(n'est)d(pas)h (une)75 2486 y(pr)o(\023)-21 b(e-)o(\023)g(equation.)p eop %%page: 29 31 29 30 bop 75 269 a fl(3.2.)29 b(raffinement)15 b(des)651 257 y(\023)645 269 y(enonc)818 257 y(\023)812 269 y(es)h fn(pei)831 b fq(29)146 397 y(nous)19 b(p)q(ouv)o(ons)h(main)o(tenan)o (t)f(pr)o(\023)-21 b(eciser)20 b(ce)g(que)g(sp)o(\023)-21 b(eci\014e)21 b(un)e(\023)-21 b(enonc)o(\023)g(e)18 b fn(pei)p fq(.)h(nous)h(asso)q(cions)g(\022)-23 b(a)75 453 y(l')o(\023)i(enonc)o(\023)g(e)16 b fk(p)p fq(,)h(une)g(propri)o (\023)-21 b(et)o(\023)g(e)16 b fm(sat)p fq(\()p fk(p)p fq(\),)h(don)o(t)f(nous)i(dirons)f(qu'elle)i(est)e(satisfaite)g(par)g fk(p)p fq(.)f(cette)h(pro-)75 510 y(pri)o(\023)-21 b(et)o(\023)g(e)14 b(pr)o(\023)-21 b(ecise)16 b(que)f(p)q(our)h(tout)f(c)o(hamp)g(de)h (donn)o(\023)-21 b(ees)15 b fk(d)g fq(v)o(\023)-21 b(eri\014an)o(t)15 b fm(s)1270 517 y fg(1)1288 510 y fq(,)g(la)h(solution)g(est)f(form)o (\023)-21 b(ee)14 b(d'un)75 566 y(c)o(hamp)h(de)h(donn)o(\023)-21 b(ees)15 b fk(r)g fq(v)o(\023)-21 b(eri\014an)o(t)14 b fm(s)699 573 y fg(2)718 566 y fq(.)g(ce)i(que)f(nous)h(noterons)e (par)8 b(:)800 735 y fm(sat)p fq(\()p fk(p)p fq(\))k(:)g

fm(s)986 742 y fg(1)1018 735 y ff(\))h fm(s)1104 742 y fg(2)75 873 y fq(p)o(ar)h(exemple,)i(\022)-23 b(a)15 b(l')o(\023)-21 b(enonc)o(\023)g(e)15 b(suiv)m(an)o(t)8 b(:)75 1001 y fk(p1)24 b(:)f(a)15 b ff(7!)h fk(b)75 1015 y fx(\()133 1059 y fk(a)f fq(=)h fk(matrix)7 b(::)g(a)133 1116 y(b)15 b fq(=)h fk(a)f fa(c)g fk(transp)96 1182 y(matrix)40 b fq(=)i fm(\025)p fk(\(i,j\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n\).\(i,j\))96 1238 y(transp)e fq(=)i fm(\025)p fk(\(i,j\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n\).\(j,i\))75 1331 y fq(nous)15 b(asso)q(cions)h (la)f(propri)o(\023)-21 b(et)o(\023)g(e)6 b(:)313 1474 y(\()p fm(v)353 1481 y fr(a)385 1474 y fq(=)16 b fm(v)458 1481 y fr(a)485 1474 y ff(\016)10 b fk(matrix)661 1456 y fq(-1)714 1474 y ff(^)15 b fm(\033)785 1481 y fr(a)818 1474 y fq(=)h fm(\033)895 1481 y fr(a)922 1474 y ff(\016)10 b fk(matrix)1098 1456 y fq(-1)1151 1474 y ff(^)15 b fm(dom)p fq(\()p fm(v)1322 1481 y fr(a)1339 1474 y fq(\))g ff(\022)g fm(dom)p fq(\()p fk(matrix)p fq(\)\))218 1554 y ff(\))50 b fq(\()p fm(v)353 1561 y fr(b)385 1554 y fq(=)16 b fm(v)458 1561 y fr(a)485 1554 y ff(\016)10 b fk(transp)15 b ff(^)g fm(\033)748 1561 y fr(b)765 1554 y fq(=)p fm(\033)826 1561 y fr(a)844 1554 y fq(\))g ff(^)313 1610 y fm(dom)p fq(\()p fk(transp)p fq(\))e ff(\022)j fm(dom)p fq(\()p fm(\033)773 1617 y fr(a)789 1610 y fq(\))f ff(^)h fm(img)r fq(\()p fk(transp)p fq(\))c ff(\022)k fm(dom)p fq(\()p fm(v)1317 1617 y fr(a)1334 1610 y fq(\)\))75 1754 y(ce)g(que)f(nous)g (noterons)g(sous)g(la)h(forme)7 b(:)582 1922 y(\()p fk(a)15 b fq(=)g fk(matrix)7 b(::)g(a)p fq(\))15 b ff(\))g fq(\()p fk(b)p fq(=)p fk(a)g fa(c)h fk(transp)o fq(\))75 2076 y fo(d)o(\023)-25 b(e\014nition)19 b(9)31 b fq(\(ra\016nemen)o(t)14 b(d')o(\023)-21 b(enonc)o(\023)g(es\))75 2132 y(nous)19 b(disons)h(que)g fk(p)g fq(est)f fj(r)n(a\016n)o(\023)-22 b(e)19 b fq(par)g fk(p)798 2116 y fx(0)809 2132 y fq(,)g(ou)h(que)g fk(p)f fj(abstr)n(ait)g fk(p)1231 2116 y fx(0)1243 2132 y fq(,)g(et)g(nous)g(notons)g fk(p)h ff(v)f fk(p)1715 2116 y fx(0)1727 2132 y fq(,)g(si)h(et)75 2189 y(seulemen)o(t)c(si)g fm(sat)p fq(\()p fk(p)435 2172 y fx(0)447 2189 y fq(\))489 2164 y fx(\021)480 2189 y ff(\))p fm(sat)p fq(\()p fk(p)p fq(\).)75 2316 y(la)g(notation)335 2291 y fx(\021)325 2316 y ff(\))h fq(est)f(une)h(relation)g(d'implication)h(p)q(ermettan)o (t)e(de)g(prendre)h(en)g(compte)f(l')o(\023)-21 b(equiv)m(a-)75 2373 y(lence)14 b(des)g(c)o(hamps)f(de)g(donn)o(\023)-21 b(ees,)13 b(don)o(t)f(la)i(d)o(\023)-21 b(e\014nition)14 b(est)f(la)g(suiv)m(an)o(te.)g(dans)g(cette)g(d)o(\023)-21 b(e\014nition,)13 b(nous)75 2429 y(notons)h fm(s)s fq([)p fk(x)p ff(n)p fk(x)336 2413 y fx(0)346 2429 y fq(])g(le)h(syst)o(\022) -21 b(eme)13 b(d')o(\023)-21 b(equations)14 b(don)o(t)g(une)h(o)q (ccurrence)g(de)g fk(x)f fq(a)f(\023)-21 b(et)o(\023)g(e)12 b(substitu)o(\023)-21 b(ee)14 b(par)g fk(x)1770 2413 y fx(0)1782 2429 y fq(,)g(et)75 2486 y fm(s)s fq([)p fk(x)p ff(n)p fk(x)190 2469 y fx(0)200 2486 y fq(])213 2469 y fw(?)247 2486 y fq(quand)i(toutes)e(les)i(o)q(ccurrences)g(de)g fk(x)f fq(on)o(t)f(\023)-21 b(et)o(\023)g(e)13 b(remplac)o(\023)-21 b(ees)15 b(par)g fk(x)1419 2469 y fx(0)1446 2486 y fq(dans)g fm(s)s fq(.)p eop %%page: 30 32 30 31 bop 75 269 a fq(30)615 b fl(chapitre)16 b(3.)30 b(raffinement)15 b(et)f(abstra)o(ction)445 1095 y @beginspecial @setspecial %%begindocument: raffinement.pstex

/$f2psdict 200 dict def $f2psdict begin $f2psdict /mtrx matrix put /l {lineto} bind def /m {moveto} bind def /s {stroke} bind def /n {newpath} bind def /gs {gsave} bind def /gr {grestore} bind def /clp {closepath} bind def /graycol {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul setrgbcolor} bind def /col-1 {} def /col0 {0 0 0 setrgbcolor} bind def /col1 {0 0 1 setrgbcolor} bind def /col2 {0 1 0 setrgbcolor} bind def /col3 {0 1 1 setrgbcolor} bind def /col4 {1 0 0 setrgbcolor} bind def /col5 {1 0 1 setrgbcolor} bind def /col6 {1 1 0 setrgbcolor} bind def /col7 {1 1 1 setrgbcolor} bind def /col8 {.68 .85 .9 setrgbcolor} bind def /col9 {0 .39 0 setrgbcolor} bind def /col10 {.65 .17 .17 setrgbcolor} bind def /col11 {1 .51 0 setrgbcolor} bind def /col12 {.63 .13 .94 setrgbcolor} bind def /col13 {1 .75 .8 setrgbcolor} bind def /col14 {.7 .13 .13 setrgbcolor} bind def /col15 {1 .84 0 setrgbcolor} bind def /drawsplinesection { /y3 exch def /x3 exch def /y2 exch def /x2 exch def /y1 exch def /x1 exch def /xa x1 x2 x1 sub 0.666667 mul add def /ya y1 y2 y1 sub 0.666667 mul add def /xb x3 x2 x3 sub 0.666667 mul add def /yb y3 y2 y3 sub 0.666667 mul add def x1 y1 lineto xa ya xb yb x3 y3 curveto } def end /$f2psbegin {$f2psdict begin /$f2psenteredstate save def} def /$f2psend {$f2psenteredstate restore end} def $f2psbegin 0 setlinecap 0 setlinejoin -18.0 198.0 translate 0.900 -0.900 scale 0.500 setlinewidth % polyline n 177 57 m 230 84 l 230 164 l 177 137 l 177 57 l gs col-1 s gr % polyline n 187 54 m 240 81 l 240 161 l 187 134 l 187 54 l gs col-1 s gr % polyline n 230 84 m 240 81 l gs col-1 s gr % polyline n 177 57 m 187 54 l gs col-1 s gr

% polyline n 230 164 m 240 161 l gs col-1 s gr 1 setlinecap [1 3.000000] 3.000000 setdash % polyline n 240 81 m 294 64 l gs col-1 s gr [] 0 setdash 0 setlinecap 1 setlinecap [1 3.000000] 3.000000 setdash % polyline n 187 54 m 250 34 l gs col-1 s gr [] 0 setdash 0 setlinecap 1 setlinecap [1 3.000000] 3.000000 setdash % polyline n 240 161 m 294 141 l gs col-1 s gr [] 0 setdash 0 setlinecap % polyline n 19 61 m 72 88 l 72 168 l 19 141 l 19 61 l gs col-1 s gr % polyline n 63 59 m 116 86 l 116 166 l 63 139 l 63 59 l gs col-1 s gr n 77.000 201.000 m 69.000 199.000 l 77.000 197.000 l gs 2 setlinejoin col-1 s gr % polyline n 69 199 m 119 199 l gs col-1 s gr n 111.000 197.000 m 119.000 199.000 l 111.000 201.000 l gs 2 setlinejoin col-1 s gr n 127.000 201.000 m 119.000 199.000 l 127.000 197.000 l gs 2 setlinejoin col-1 s gr % polyline n 119 199 m 224 199 l gs col-1 s gr n 216.000 197.000 m 224.000 199.000 l 216.000 201.000 l gs 2 setlinejoin col-1 s gr % open spline n 194.000 94.000 m 169.000 74.000 l 169.000 74.000 144.000 54.000 124.000 66.500 drawsplinesection 104.000 79.000 l gs col-1 s gr n 111.844 76.456 m 104.000 79.000 l 109.724 73.064 l gs 2 setlinejoin col-1 s gr % open spline n 119.000 144.000 m 136.500 151.500 l 136.500 151.500 154.000 159.000 179.000 139.000 drawsplinesection 204.000 119.000 l gs col-1 s gr n 196.504 122.436 m 204.000 119.000 l 199.002 125.559 l gs 2 setlinejoin col-1 s gr $f2psend %%enddocument @endspecial 1326 945 a fq(x)558 963 y(x)839 476 y(h)857 464 y(-1)914 814 y(h)764 963 y(x)782 952 y fk(0)652 1095 y fs(ra\016nemen)o(t)123 b(substitution)340 1238 y fn(fig.)15 b fq(3.1)g(-)30 b fj(r)n(a\016nement)16 b(p)n(ar)g(substitution)g(de)h (champs)e(\023)-22 b(e)n(quivalents)146 1417 y fo(d)o(\023)d (e\014nition)19 b(10)30 b fq(\(implication)17 b(mo)q(dulo)f(l')o(\023) -21 b(equiv)m(alence\))146 1473 y(soit)18 b fk(p1)g fq(et)g fk(p2)f fq(deux)h(\023)-21 b(enonc)o(\023)g(es)17 b(et)h fm(s)i fq(le)f(syst)o(\022)-21 b(eme)17 b(d')o(\023)-21 b(equations)17 b(de)i fk(p1)p fq(.)e(nous)h(disons)h(que)f fm(sat)p fq(\()p fk(p2)p fq(\))146 1530 y fj(implique)j fm(sat)p fq(\()p fk(p1)p fq(\))g fj(mo)n(dulo)h(l')o(\023)-22 b(e)n(quivalenc)n(e)19 b fq(\(forte)i(ou)g(faible\))h(de)g(c)o(hamps)f (de)g(donn)o(\023)-21 b(ees,)21 b(et)g(nous)146 1586 y(notons)14 b fm(sat)p fq(\()p fk(p2)p fq(\))462 1561 y fx(\021)452 1586 y ff(\))q fm(sat)p fq(\()p fk(p1)p fq(\))h(si)g(et)g(seulemen)o(t)i(si)e fm(sat)p fq(\()p fk(p2)p fq(\))g ff(\))h fm(sat)p fq(\()p fk(p1')p fq(\))f(est)g(v)o

(\023)-21 b(eri\014)o(\023)g(ee,)14 b(a)o(v)o(ec)7 b(:)201 1680 y(1.)22 b(ou)12 b(bien)i fk(p1')d fq(=)i fk(p1)p ff(f)p fm(s)s fq([)p fk(x)p ff(n)p fm(e)p fq(\()p fk(x)p fq(\)])802 1663 y fw(?)818 1680 y ff(g)f fq(o)q(\022)-24 b(u)12 b fm(e)p fq(\()p fk(x)p fq(\))f(est)h(une)h(expression)g(d)o (\023)-21 b(ep)q(endan)o(t)12 b(de)g fk(x)p fq(,)g(satisfaisan)o(t)259 1736 y(la)20 b(propri)o(\023)-21 b(et)o(\023)g(e)18 b(suiv)m(an)o(te)9 b(:)19 b(p)q(our)g(tout)g(c)o(hamp)h(de)g(donn)o(\023)-21 b(ees)19 b(d)o(\023)-21 b(enot)o(\023)g(e)18 b(par)h(cet)h fk(x)p fq(,)f(il)i(existe)f(un)259 1793 y(c)o(hamp)f(de)f(donn)o(\023) -21 b(ees,)18 b(disons)h fk(x)823 1776 y fx(0)835 1793 y fq(,)f(qui)h(lui)h(est)e(fortemen)o(t)f(\023)-21 b(equiv)m(alen)o(t,) 18 b(tel)h(que)g(l'expression)259 1849 y fm(e)p fq(\()p fk(x)322 1833 y fx(0)334 1849 y fq(\))14 b(d)o(\023)-21 b(enote)15 b(le)h(m)o(^)-21 b(eme)14 b(c)o(hamp)h(de)h(donn)o(\023)-21 b(ees)15 b(que)h fk(x)p fq(,)201 1943 y(2.)22 b(ou)14 b(bien)h fk(p1')e fq(=)g fk(p1)p ff(f)p fm(s)s fq([)p fk(e)p ff(n)p fm(e)p fq(\()p fk(e)p fq(\)])p ff(g)e fq(o)q(\022)-24 b(u)13 b fm(e)p fq(\()p fk(e)p fq(\))g(est)h(une)g(expression)g(d)o (\023)-21 b(ep)q(endan)o(t)14 b(de)g fk(e)p fq(,)f(satisfaisan)o(t)259 1999 y(la)k(propri)o(\023)-21 b(et)o(\023)g(e)15 b(suiv)m(an)o(te)8 b(:)16 b(p)q(our)h(tout)e(c)o(hamp)i(de)g(donn)o(\023)-21 b(ee)16 b(d)o(\023)-21 b(enot)o(\023)g(e)14 b(par)j(cette)f(expression) h fk(e)p fq(,)f(il)259 2056 y(existe)i(un)f(c)o(hamp)f(de)i(donn)o (\023)-21 b(ees,)16 b(disons)h fk(e)1013 2039 y fx(0)1025 2056 y fq(,)f(qui)i(lui)g(est)e(faiblemen)o(t)h(\023)-21 b(equiv)m(alen)o(t,)17 b(et)g(tel)g(que)259 2112 y(l'expression)g fm(e)p fq(\()p fk(e)567 2096 y fx(0)578 2112 y fq(\))e(d)o(\023)-21 b(enote)14 b(le)i(m)o(^)-21 b(eme)14 b(c)o(hamp)i(de)f(donn)o(\023)-21 b(ees)15 b(que)h fk(e)p fq(.)146 2200 y(d'apr)o(\022)-21 b(es)18 b(la)j(d)o(\023)-21 b(e\014nition)22 b(10.1,)d(on)h(p)q(eut)h (\023)-21 b(evidemmen)o(t)20 b(remplacer)h(les)h(o)q(ccurrences)f(de)g fk(x)g fq(par)75 2257 y(l'expression)16 b fm(e)p fq(\()p fk(x)382 2240 y fx(0)394 2257 y fq(\))f(qui)h(lui)g(est)e(\023)-21 b(egale.)15 b(in)o(tuitiv)o(emen)o(t,)g(le)h(ra\016nemen)o(t)f(consite) h(alors)f(\022)-23 b(a)15 b(substituer)75 2313 y fm(e)p fq(\()p fk(x)p fq(\))10 b(\022)-23 b(a)10 b fm(e)p fq(\()p fk(x)262 2297 y fx(0)273 2313 y fq(\),)g(sac)o(han)o(t)f(que)i fk(x')f fq(est)g(fortemen)o(t)f(\023)-21 b(equiv)m(alen)o(t)11 b(\022)-23 b(a)10 b fk(x)p fq(.)f(l'explication)k(in)o(tuitiv)o(e)e (est)g(similaire)75 2370 y(p)q(our)k(le)h(cas)f(10.2)f(de)i(l')o(\023) -21 b(equiv)m(alence)17 b(faible.)75 2429 y(la)11 b(\014gure)g(3.1)g (illustre)h(l'explication)i(pr)o(\023)-21 b(ec)o(\023)g(eden)o(te)6 b(:)11 b(le)h(c)o(hamp)f fk(x)g fq(exprim)o(\023)-21 b(e)11 b(dans)g fe(z)1495 2413 y fg(3)1522 2429 y fq(est)f(\023)-21 b(egal)10 b(\022)-23 b(a)11 b fk(h)c(::)h(x)1823 2413 y fx(0)1834 2429 y fq(,)75 2486 y(o)q(\022)-24 b(u)15 b fk(x)162 2469 y fx(0)189 2486 y fq(est)g(exprim)o(\023)-21 b(e)15 b(dans)g fe(z)572 2469 y fg(2)588 2486 y fq(.)g(le)h (ra\016nemen)o(t)e(consiste)i(\022)-23 b(a)15 b(substituer)h fk(h)7 b(::)g(x)15 b fq(\022)-23 b(a)15 b fk(h)8 b(::)f(x)1613 2469 y fx(0)1625 2486 y fq(.)p eop %%page: 31 33 31 32 bop 75 269 a fl(3.2.)29 b(raffinement)15 b(des)651 257 y(\023)645 269 y(enonc)818 257 y(\023)812 269 y(es)h fn(pei)831 b fq(31)75 397 y(l')o(\023)-21 b(equiv)m(alence)17 b(de)f(deux)e(\023)-21 b(enonc)o(\023)g(es)14 b(est)h(d)o(\023)-21 b(e\014nie)16 b(\022)-23 b(a)15 b(partir)g(du)h(ra\016nemen)o(t)7 b(:)75 520 y fo(d)o(\023)-25 b(e\014nition)19 b(11)31 b fq(\()o(\023)-21 b(equiv)m(alence)16 b(d')o(\023)-21

b(enonc)o(\023)g(es\))75 576 y(nous)15 b(dirons)h(que)g(deux)e(\023)-21 b(enonc)o(\023)g(es)14 b fk(p)h fq(et)g fk(p')g fq(son)o(t)f fj(\023)-22 b(e)n(quivalents)p fq(,)13 b(et)i(on)g(note)g fk(p)h ff(\021)f fk(p')g fq(si)h(et)f(seulemen)o(t)75 633 y(si)h(ils)g(se)f(ra\016nen)o(t)g(m)o(utuellemen)o(t.)75 756 y fo(exemple)i(6)f fj(r)n(a\016nement)f(p)n(ar)i(substitution)f (d'un)g(champ)h(fortement)f(\023)-22 b(e)n(quivalent)75 879 y fq(consid)o(\023)h(erons)14 b(les)h(deux)g(programmes)e(suiv)m (an)o(ts,)h fk(p2)g fq(et)g fk(p3)p fq(.)g(nous)g(c)o(herc)o(hons)g (\022)-23 b(a)14 b(mon)o(trer)g(que)g fk(p2)g ff(v)75 935 y fk(p3)h fq(en)g(utilisan)o(t)i(l'implication)g(mo)q(dulo)f(l')o (\023)-21 b(equiv)m(alence)17 b(de)f(c)o(hamps)f(de)h(donn)o(\023)-21 b(ees.)125 1073 y fk(p2)23 b(:)h(x)15 b ff(7!)h fk(y)125 1092 y fx(\()183 1136 y fk(x)f fq(=)h fk(carre)7 b(::)g(x)183 1192 y(y)15 b fq(=)h fk(x)146 1254 y(carre)c fq(=)g fm(\025)p fk(\(i,j\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n\).\(i,j\))951 1045 y(p3)23 b(:)h(x)15 b ff(7!)h fk(y)951 1064 y fx(\()1009 1108 y fk(x)f fq(=)g fk(carre)7 b(::)h(x)1009 1164 y(transp)f(::)g(y)15 b fq(=)h fk(x)971 1226 y(carre)c fq(=)h fm(\025)p fk(\(i,j\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n\).\(i,j\))971 1283 y(transp)f fq(=)h fm(\025)p fk(\(i,j\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n\).\(j,i\))75 1394 y fq(consid)o(\023)-21 b(erons)15 b fk(p2')f fq(obten)o(u)h(\022)-23 b(a)15 b(partir)g(de)g fk(p2)g fq(en)h(rempla\030)-20 b(can)o(t)15 b fk(y)g fq(par)f(\()p fk(transp)7 b(::)g(y)p fq(\),)14 b(conform)o(\023)-21 b(emen)o(t)75 1450 y(\022)e(a)19 b(la)g(partie)h(1)f(de)g(la)h(d)o(\023)-21 b(e\014nition)20 b(10.)e(nous)h(v)o(\023)-21 b(eri\014ons)19 b(imm)o(\023)-21 b(ediatemen)o(t)19 b fm(sat)p fq(\()p fk(p3)p fq(\))g ff(\))h fm(sat)p fq(\()p fk(p2)1737 1434 y fx(0)1749 1450 y fq(\))f(car)75 1507 y fk(p3)h fq(et)h fk(p2')f fq(son)o(t)g(les)h(m)o(^)-21 b(emes)19 b(\023)-21 b(enonc)o(\023)g(es.) 19 b(d'autre)g(part,)h(soit)g fk(y)1211 1490 y fx(0)1243 1507 y fq(le)i(c)o(hamp)e(\()p fk(transp)1608 1490 y fq(-1)1653 1507 y fk(::)8 b(y)o fq(\))g(:)20 b(sa-)75 1563 y(c)o(han)o(t)d(de)h(l')o(\023)-21 b(enonc)o(\023)g(e)17 b fk(p2)g fq(que)h fm(dom)p fq(\()p fm(\033)723 1570 y fr(y)740 1563 y fq(\))e ff(\022)h fm(dom)p fq(\()p fk(transp)1073 1547 y fq(-1)1110 1563 y fq(\),)g fk(y)1182 1547 y fx(0)1211 1563 y fq(est)h(alors)f(fortemen)o(t)f(\023)-21 b(equiv)m(alen)o(t)18 b(\022)-23 b(a)75 1620 y fk(y)18 b fq(et)g fk(transp)7 b(::)g(y)403 1603 y fx(0)433 1620 y fq(=)19 b fk(transp)7 b(::)g(\(transp)860 1603 y fq(-1)905 1620 y fk(::)h(y\))18 b fq(=)h fk(y)p fq(.)e(nous)i(a)o(v)o(ons)e(par)h (cons)o(\023)-21 b(equen)o(t)18 b fm(sat)p fq(\()p fk(p3)p fq(\))85 1651 y fx(\021)75 1676 y ff(\))p fm(sat)p fq(\()p fk(p2)p fq(\))d(et)g(par)g(cons)o(\023)-21 b(equen)o(t)15 b fk(p2)g ff(v)g fk(p3)p fq(.)75 1733 y fa(\006)146 1856 y fq(cet)f(exemple)h(illustre)i(les)e(propri)o(\023)-21 b(et)o(\023)g(es)13 b(suiv)m(an)o(tes,)i(directemen)o(t)g(issues)g(des) g(d)o(\023)-21 b(e\014nitions)15 b(du)g(raf-)75 1912 y(\014nemen)o(t)e(\(9)f(et)g(10\))g(en)g(utilisan)o(t)i(l'implication)h (mo)q(dulo)e(l')o(\023)-21 b(equiv)m(alence.)14 b(elles)g(p)q(ermetten) o(t)e(en)h(e\013et)75 1968 y(d'obtenir)18 b(des)f(programmes)g(ra\016n) o(\023)-21 b(es)16 b(en)i(substituan)o(t)f(un)h(c)o(hamp)f(par)g(un)h (c)o(hamp)f(fortemen)o(t)g(ou)75 2025 y(faiblemen)o(t)e(\023)-21 b(equiv)m(alen)o(t.)75 2148 y fo(propri)o(\023)c(et)o(\023)g(e)20 b(2)54 b fq(soit)18 b fk(p)g fq(un)f(\023)-21 b(enonc)o(\023)g(e)17 b(et)h fk(x)f fq(un)i(iden)o(ti\014cateur)g(de)f(c)o(hamp.)g(si)h

fm(dom)p fq(\()p fm(\033)1605 2155 y fr(x)1621 2148 y fq(\))e ff(\022)h fm(img)r fq(\()p fk(h)p fq(\))75 2204 y(alors)d fk(p)d ff(v)h fk(p)p ff(f)p fm(s)s fq([)p fk(x)p ff(n)p fk(h)6 b(::)h(x)p fq(])528 2188 y fw(?)547 2204 y ff(g)75 2306 y fj(pr)n(euve)p fq(.)15 b fj(cf.)g fq(annexe)h(a.)75 2429 y fj(r)n(emar)n(que)p fq(.)g(la)g(preuv)o(e)g(met)f(en)h(\023)-21 b(evidence)16 b(un)h(c)o(hamp)f(de)g(donn)o(\023)-21 b(ees)15 b fk(x)1319 2413 y fx(0)1347 2429 y fq(=)h fk(h)1422 2413 y fq(-1)1467 2429 y fk(::)7 b(x)16 b fq(qui)g(est)g(tel)g(que)75 2486 y fk(x)f fq(=)h fk(h)7 b(::)g(x)275 2469 y fx(0)287 2486 y fq(.)15 b(le)g(ra\016nemen)o(t)g(a)g(donc)h(consist)o(\023)-21 b(e)14 b(\022)-23 b(a)15 b(substituer)h fk(h)7 b(::)h(x)15 b fq(\022)-23 b(a)15 b fk(h)7 b(::)g(x)1458 2469 y fx(0)1470 2486 y fq(.)p eop %%page: 32 34 32 33 bop 75 269 a fq(32)615 b fl(chapitre)16 b(3.)30 b(raffinement)15 b(et)f(abstra)o(ction)75 397 y fo(propri)o(\023)-25 b(et)o(\023)g(e)26 b(3)67 b fq(soit)23 b fk(p)f fq(un)g(\023)-21 b(enonc)o(\023)g(e)21 b(o)q(\022)-24 b(u)23 b fk(x)f fq(est)g(un)h(iden)o(ti\014cateur)h(de)f(c)o(hamp)f(n'apparaissan)o(t) 75 453 y(que)g(sous)e(la)i(forme)e fk(h)8 b(::)f(x)p fq(.)21 b(si)h fm(dom)p fq(\()p fm(\033)794 460 y fr(x)811 453 y fq(\))g ff(\022)h fm(dom)p fq(\()p fk(h)p fq(\))n ff(^)f fm(img)r fq(\()p fk(h)p fq(\))e ff(\022)j fm(dom)p fq(\()p fk(h)p fq(\))d(nous)h(a)o(v)o(ons)g(alors)7 b(:)75 510 y fk(p)12 b ff(v)h fk(p)p ff(f)p fm(s)s fq([)p fk(h)7 b(::)g(x)p ff(n)p fk(x)p fq(])420 493 y fw(?)438 510 y ff(g)75 604 y fj(pr)n(euve)p fq(.)15 b fj(cf.)g fq(annexe)h(a.)75 719 y fo(propri)o(\023)-25 b(et)o(\023)g(e)17 b(4)46 b fq(soit)15 b fk(p)g fq(un)g(\023)-21 b(enonc)o(\023)g(e.)13 b(nous)j(a)o(v)o(ons)6 b(:)370 809 y(\(1\))49 b(si)15 b fk(h)g fq(est)g(une)h(in)o(v)o(erse)g(gauc)o(he)f(de)h fk(g)p fq(,)478 866 y fm(dom)p fq(\()p fm(v)604 873 y fr(e)620 866 y fq(\))d(=)g fm(dom)p fq(\()p fk(g)p fq(\))h(et)h fk(h)p fq(\()p fm(dom)p fq(\()p fk(g)p fq(\)\))10 b ff(\022)j fm(dom)p fq(\()p fm(\033)1306 873 y fr(e)1323 866 y fq(\))f ff(\022)h fm(img)r fq(\()p fk(h)p fq(\).)478 922 y fk(p)f ff(v)h fk(p)p ff(f)p fm(s)s fq([)p fk(e)p ff(n)p fk(h)6 b(::)h(\(e)24 b fa(c)g fk(g)940 906 y fq(-1)977 922 y fk(\))p fq(])p ff(g)370 1035 y fq(\(2\))49 b(si)15 b fk(h)g fq(est)g(une)h(in)o(v)o(erse)g(droite)f(de)h fk(g)p fq(,)478 1092 y fm(dom)p fq(\()p fm(v)604 1099 y fr(e)620 1092 y fq(\))d(=)g fm(img)r fq(\()p fk(g)p fq(\))g(et)i fm(dom)p fq(\()p fk(g)p fq(\))c ff(\022)i fm(dom)p fq(\()p fm(\033)1240 1099 y fr(e)1257 1092 y fq(\))f ff(\022)h fm(img)r fq(\()p fk(h)p fq(\).)478 1148 y fk(p)f ff(v)h fk(p)p ff(f)p fm(s)s fq([)p fk(e)p ff(n)p fk(\(h)6 b(::)i(e\))15 b fa(c)g fk(g)947 1132 y fq(-1)984 1148 y fq(])p ff(g)75 1294 y fj(pr)n(euve)p fq(.)g fj(cf.)g fq(annexe)h(a.)75 1394 y(notons)h(\023)-21 b(egalemen)o(t)17 b(un)i(cas)g(particulier)h (de)f(cette)f(derni)o(\022)-21 b(ere)19 b(prop)q(osition,)g(p)q(our)f (lequel)j fk(h)d fq(=)h fk(g)1797 1378 y fq(-1)1834 1394 y fq(.)75 1451 y(dans)c(ce)g(cas)g(la)h(propri)o(\023)-21 b(et)o(\023)g(e)14 b(4)g(devien)o(t)9 b(:)75 1566 y fo(propri)o(\023) -25 b(et)o(\023)g(e)14 b(5)37 b fq(soit)13 b fk(p)f fq(un)g(\023)-21 b(enonc)o(\023)g(e,)11 b fk(e)h fq(une)i(expression)f(de)g(c)o(hamp)f (de)h(donn)o(\023)-21 b(ees,)12 b(et)g fk(h)g fq(une)i(bijection.)75 1622 y(si)i fm(dom)p fq(\()p fm(v)254 1629 y fr(e)271 1622 y fq(\))c(=)h fm(dom)p fq(\()p fm(\033)479 1629 y fr(e)496 1622 y fq(\))f(=)h fm(dom)p fq(\()p fk(h)p

fq(\))f(=)h fm(img)r fq(\()p fk(h)p fq(\))g(nous)i(a)o(v)o(ons)7 b(:)621 1730 y(\(1\))41 b fk(p)g ff(v)h fk(p)p ff(f)p fm(s)s fq([)p fk(e)p ff(n)p fk(h)6 b(::)h(\(e)24 b fa(c)g fk(h\))p fq(])p ff(g)621 1786 y fq(\(2\))41 b fk(p)g ff(v)h fk(p)p ff(f)p fm(s)s fq([)p fk(e)p ff(n)p fk(\(h)6 b(::)i(e\))15 b fa(c)g fk(h)p fq(])p ff(g)146 1975 y fq(cette)21 b(derni)o(\022)-21 b(ere)23 b(propri)o(\023)-21 b(et)o(\023)g(e)21 b(est)h(celle)i(que)e(nous)h(a)o(vions)f(utilis)o (\023)-21 b(ee)23 b(dans)g(le)g(c)o(hapitre)f(2)g(p)q(our)75 2031 y(in)o(tro)q(duire)16 b(l')o(\023)-21 b(equiv)m(alence)18 b(faible)e(et)f(est)g(illustr)o(\023)-21 b(ee)16 b(par)f(la)h(\014gure) f(2.9.)75 2165 y fw(3.2.2)55 b(cas)20 b(particuliers)146 2256 y fq(nous)d(donnons)h(ici)i(un)e(ensem)o(ble)h(d'exemples)g (classiques)g(qui)g(n'utilisen)o(t)g(que)f(l'implication)75 2312 y(simple.)75 2427 y fo(exemple)f(7)f fj(r)n(a\016nement)f(p)n(ar)i (intr)n(o)n(duction)f(d'un)g(champ)h(interm)o(\023)-22 b(e)n(diair)n(e)75 2542 y fq(consid)o(\023)h(erons)15 b(les)h(deux)f(programmes)g(suiv)m(an)o(ts,)g fk(p2)g fq(et)g fk(p4)p fq(.)p eop %%page: 33 35 33 34 bop 75 269 a fl(3.2.)29 b(raffinement)15 b(des)651 257 y(\023)645 269 y(enonc)818 257 y(\023)812 269 y(es)h fn(pei)831 b fq(33)125 416 y fk(p2)23 b(:)h(x)15 b ff(7!)h fk(y)125 434 y fx(\()183 478 y fk(x)f fq(=)h fk(carre)7 b(::)g(x)183 534 y(y)15 b fq(=)h fk(x)146 597 y(carre)c fq(=)g fm(\025)p fk(\(i,j\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n\).\(i,j\))951 391 y(p4)23 b(:)h(x)15 b ff(7!)h fk(y)951 408 y fx(8)951 445 y(>)951 458 y(<)951 532 y(>)951 545 y(:)1012 450 y fk(x)f fq(=)h fk(carre)7 b(::)g(x)1012 506 y(z)15 b fq(=)h fk(x)1012 563 y(y)f fq(=)h fk(z)971 622 y(carre)c fq(=)h fm(\025)p fk(\(i,j\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n\).\(i,j\))75 745 y fq(nous)g(sommes)f(ici)j(dans)e(le)h(cas)e(particulier)j(o)q (\022)-24 b(u)13 b fk(p2')g fq(est)f(le)i(m)o(^)-21 b(eme)11 b(\023)-21 b(enonc)o(\023)g(e)12 b(que)h fk(p2)p fq(.)g fk(p2)f fq(ne)i(di\013)o(\022)-21 b(ere)12 b(de)75 802 y fk(p4)f fq(que)h(par)g(la)g(pr)o(\023)-21 b(esence)11 b(du)h(c)o(hamp)g(de)g(donn)o(\023)-21 b(ees)11 b(in)o(term)o(\023)-21 b(ediaire)13 b fk(z)p fq(,)e(et)g(leurs)i(propri)o(\023)-21 b(et)o(\023)g(es)10 b(resp)q(ectiv)o(es)75 858 y(son)o(t)d(:)506 969 y fm(sat)p fq(\()p fk(p2)p fq(\))g(:)15 b(\()p fk(x)g fq(=)g fk(carre)7 b(::)h(x)o fq(\))15 b ff(\))h fq(\()p fk(y)f fq(=)g fk(x)p fq(\))506 1025 y fm(sat)p fq(\()p fk(p4)p fq(\))7 b(:)15 b(\()p fk(x)g fq(=)g fk(carre)7 b(::)h(x)o fq(\))15 b ff(\))h fq(\()p fk(z)f fq(=)g fk(x)g ff(^)h fk(y)f fq(=)g fk(z)p fq(\))146 1207 y(nous)24 b(v)o(\023)-21 b(eri\014ons)24 b(imm)o(\023)-21 b(ediatemen)o(t)24 b fm(sat)p fq(\()p fk(p4)p fq(\))g ff(\))h fm(sat)p fq(\()p fk(p2)p fq(\))f(car)g(la)h(relation)g(d')o(\023)-21 b(egalit)o(\023)g (e)23 b(sur)h(les)75 1264 y(c)o(hamps)15 b(de)h(donn)o(\023)-21 b(ees)15 b(est)g(naturellemen)o(t)h(transitiv)o(e,)f(et)g fk(p2)g ff(v)g fk(p4)p fq(.)146 1343 y(de)g(plus,)h(de)g(la)g(d)o(\023) -21 b(e\014nition)16 b(9,)f(puisqu'il)j(existe)e(un)g(c)o(hamp)f(de)h (donn)o(\023)-21 b(ees)15 b fk(z)h fq(tel)g(que)f(\()p fk(y)g fq(=)h fk(x)p fq(\))f ff(\))75 1399 y fq(\()p fk(z)e fq(=)h fk(x)g ff(^)g fk(y)g fq(=)g fk(z)p fq(\))f(est)g(vrai,)h (nous)g(a)o(v)o(ons)f(aussi)h(la)g(relation)g fk(p4)h ff(v)h fk(p2)o fq(,)e(ce)g(qui)g(signi\014e)i(que)e(ces)g(deux)74 1456 y(\023)-21 b(enonc)o(\023)g(es)14 b(son)o(t)f(\023)-21 b(equiv)m(alen)o(ts.)146 1534 y(p)o(ar)13 b(cons)o(\023)-21

b(equen)o(t,)14 b(l'a)s(jout)f(ou)i(la)g(suppression)g(d'un)g(c)o(hamp) g(in)o(term)o(\023)-21 b(ediare)14 b(donne)h(toujours)f(un)75 1591 y(nouv)o(el)h(\023)-21 b(enonc)o(\023)g(e)13 b(\023)-21 b(equiv)m(alen)o(t.)75 1647 y fa(\006)146 1782 y fq(des)20 b(pro)q(c)o(\023)-21 b(ed)o(\023)g(es)19 b(classiques)i(de)g (ra\016nemen)o(t)f(consisten)o(t)g(\022)-23 b(a)20 b fj(\()-9 b(\()q fq(a\013aiblir)p fj(\))g(\))21 b fq(une)g(pr)o(\023)-21 b(e-)o(\023)g(equation,)19 b(ou)75 1839 y fj(\()-9 b(\()q fq(renforcer)p fj(\))g(\))14 b fq(une)h(p)q(ost-)o(\023)-21 b(equation.)14 b(en)h fn(pei)p fq(,)f(ces)g(pro)q(c)o(\023)-21 b(ed)o(\023)g(es)14 b(son)o(t)f(\023)-21 b(egalemen)o(t)13 b(applicables,)k(\022)-23 b(a)14 b(tra)o(v)o(ers)75 1895 y(la)i(propri)o(\023)-21 b(et)o(\023)g(e)13 b(suiv)m(an)o(te)c(:)75 2031 y fo(propri)o(\023)-25 b(et)o(\023)g(e)14 b(6)37 b fq(soien)o(t)13 b fk(p)p ff(f)p fm(s)579 2038 y fg(1)597 2031 y fm(;)8 b(s)646 2038 y fg(2)664 2031 y ff(g)k fq(et)g fk(p')p ff(f)p fm(s)851 2014 y fx(0)848 2042 y fg(1)866 2031 y fm(;)c(s)918 2014 y fx(0)915 2042 y fg(2)933 2031 y ff(g)k fq(deux)g(\023)-21 b(enonc)o(\023)g(es,)11 b(o)q(\022)-24 b(u)12 b fm(s)1340 2038 y fg(1)1371 2031 y fq(et)g fm(s)1452 2014 y fx(0)1449 2042 y fg(1)1480 2031 y fq(son)o(t)g(des)g(ensem)o (bles)75 2087 y(de)k(pr)o(\023)-21 b(e-equations,)14 b(et)h fm(s)511 2094 y fg(2)530 2087 y fq(,)f fm(s)588 2070 y fx(0)585 2098 y fg(2)619 2087 y fq(des)i(ensem)o(bles)g(de)g(p)q (ost-equations.)f(nous)g(a)o(v)o(ons)7 b(:)170 2209 y fk(p)31 b ff(v)f fk(p')50 b fq(si)113 b fm(s)559 2216 y fg(2)590 2209 y fq(=)13 b fm(s)669 2193 y fx(0)666 2221 y fg(2)715 2209 y fq(et)30 b(\()p fm(s)829 2216 y fg(1)860 2209 y ff(\))13 b fm(s)949 2193 y fx(0)946 2221 y fg(1)965 2209 y fq(\))i(est)g(v)o(\023)-21 b(eri\014)o(\023)g (ee)388 2266 y(ou)15 b(si)50 b fm(s)559 2273 y fg(1)590 2266 y fq(=)13 b fm(s)669 2249 y fx(0)666 2277 y fg(1)715 2266 y fq(et)30 b(\()p fm(s)832 2249 y fx(0)829 2277 y fg(2)860 2266 y ff(\))13 b fm(s)946 2273 y fg(2)965 2266 y fq(\))i(est)g(v)o(\023)-21 b(eri\014)o(\023)g(ee)75 2373 y fj(pr)n(euve.)12 b fq(supp)q(osons)i fm(s)486 2380 y fg(1)517 2373 y ff(\))f fm(s)606 2356 y fx(0)603 2384 y fg(1)622 2373 y fq(,)f(alors)g(\()p fm(s)802 2356 y fx(0)799 2384 y fg(1)830 2373 y ff(\))h fm(s)916 2380 y fg(2)935 2373 y fq(\))f ff(\))h fq(\()p fm(s)1069 2380 y fg(1)1100 2373 y ff(\))g fm(s)1186 2380 y fg(2)1204 2373 y fq(\).)f(de)h(m)o(^)-21 b(eme,)11 b(supp)q(osons)i fm(s)1701 2356 y fx(0)1698 2384 y fg(2)1729 2373 y ff(\))h fm(s)1816 2380 y fg(2)1834 2373 y fq(,)75 2429 y(alors)h(\()p fm(s)230 2436 y fg(1)261 2429 y ff(\))e fm(s)350 2413 y fx(0)347 2441 y fg(2)365 2429 y fq(\))g ff(\))g fq(\()p fm(s)500 2436 y fg(1)531 2429 y ff(\))g fm(s)617 2436 y fg(2)635 2429 y fq(\).)75 2486 y fa(\003)p eop %%page: 34 36 34 35 bop 75 269 a fq(34)615 b fl(chapitre)16 b(3.)30 b(raffinement)15 b(et)f(abstra)o(ction)75 397 y fo(exemple)j(8)f fj(a\013aiblissement)e(des)i(pr)o(\023)-22 b(e-)o(\023)g(e)n(quations) 75 510 y fk(p4)24 b(:)f(x)15 b ff(7!)h fk(y)75 516 y fx(\()133 559 y fk(x)f fq(=)h fk(vecteur)6 b(::)i(x)133 616 y(y)15 b fq(=)h fk(x)75 677 y fq(sp)o(\023)-21 b(eci\014)o(\023)g (e)15 b(par)g fm(sat)p fq(\()p fk(p4)p fq(\))7 b(:)75 733 y(\()p fk(x)15 b fq(=)g fk(vecteur)7 b(::)g(x)p fq(\))15 b ff(\))g fq(\()p fk(y)p fq(=)p fk(x)p fq(\))962 510 y fk(p5)24 b(:)g(x)15 b ff(7!)g fk(y)962 519 y fx(n)1015 566 y fk(y)g fq(=)g fk(x)962 631 y fq(sp)o(\023)-21 b(eci\014)o(\023)g

(e)15 b(par)g fm(sat)p fq(\()p fk(p5)p fq(\))8 b(:)962 687 y(vrai)16 b ff(\))f fq(\()p fk(y)p fq(=)p fk(x)p fq(\))75 850 y(la)e(propri)o(\023)-21 b(et)o(\023)g(e)11 b(pr)o(\023)-21 b(ec)o(\023)g(eden)o(te)12 b(a\016rme)h(que)g fk(p4)f ff(v)i fk(p5)p fq(,)e(ce)h(qui)h(p)q(eut)e(\023)-21 b(egalemen)o(t)11 b(^)-21 b(etre)11 b(\023)-21 b(etabli)13 b(par)g fm(sat)p fq(\()p fk(p5)p fq(\))75 907 y ff(\))21 b fm(sat)p fq(\()p fk(p4)p fq(\))8 b(:)20 b(en)h(e\013et,)g fm(sat)p fq(\()p fk(p5)p fq(\))f(se)h(simpli\014e)i(en)f(\()p fk(y)e fq(=)h fk(x)p fq(\))g(et)f(la)i(propri)o(\023)-21 b(et)o(\023)g(e)19 b(\()p fk(y)h fq(=)i fk(x)p fq(\))e ff(\))h fq(\(\()p fk(x)f fq(=)75 963 y fk(vecteur)7 b(::)g(x)p fq(\))15 b ff(\))g fq(\()p fk(y)g fq(=)g fk(x)p fq(\)\))g(est)g(v)o (\023)-21 b(eri\014)o(\023)g(ee.)75 1020 y fa(\006)75 1112 y fo(exemple)17 b(9)f fj(r)n(enfor)n(c)n(ement)e(des)i(p)n(ost-)o (\023)-22 b(e)n(quations)146 1225 y fk(p6)23 b(:)h(x)15 b ff(7!)h fk(y)146 1231 y fx(\()204 1274 y fk(vecteur)7 b(::)g(z)15 b fq(=)g fk(x)204 1331 y(y)g fq(=)g fk(vecteur)7 b(::)g(z)146 1415 y fq(sp)o(\023)-21 b(eci\014)o(\023)g(e)14 b(par)h fm(sat)p fq(\()p fk(p6)p fq(\))8 b(:)15 b(vrai)g ff(\))g fq(\()p fk(vecteur)7 b(::)g(z)15 b fq(=)h fk(x)f ff(^)g fk(y)g fq(=)h fk(vecteur)6 b(::)h(z)p fq(\))75 1528 y(nous)14 b(a)o(v)o(ons)g fk(p5)f ff(v)i fk(p6)f fq(car)g fm(sat)p fq(\()p fk(p6)p fq(\))e ff(\))h fm(sat)p fq(\()p fk(p5)q fq(\))g(s')o(\023)-21 b(ecrit)14 b(\()p fk(vecteur)6 b(::)h(z)14 b fq(=)h fk(x)f ff(^)h fk(y)f fq(=)g fk(vecteur)7 b(::)g(z)p fq(\))75 1585 y ff(\))16 b fq(\()p fk(y)e fq(=)i fk(x)p fq(\),)e(qui)i(est)f(v)o(\023)-21 b(eri\014)o(\023)g(ee.)75 1641 y fa(\006)75 1841 y ft(3.3)66 b(calcul)23 b(de)g(ra\016nemen)n(t)146 1942 y fq(de)15 b(mani)o(\022)-21 b(ere)16 b(plus)h(op)o(\023)-21 b(erationnelle,)16 b(nous)h(d)o(\023)-21 b(e\014nissons)16 b(main)o(tenan)o(t)f(un)i fj(c)n(alcul)f(de)h(r)n(a\016nement)75 1998 y fq(qui)e(p)q(ermet)f(de)g (construire)g(un)g(programme)f(ra\016nan)o(t)g(un)h(programme)f(donn)o (\023)-21 b(e,)13 b(sans)g(utiliser)j(l'im-)75 2055 y(plication)k(mo)q (dulo)e(l')o(\023)-21 b(equiv)m(alence.)20 b(ce)e(calcul)i(stipule)f (que)f(le)h(ra\016nemen)o(t)f(d'un)f(\023)-21 b(enonc)o(\023)g(e)17 b(p)q(eut)i(se)75 2111 y(faire)d(par)g(la)h(substitution)g(d'une)f (\023)-21 b(equation)16 b(de)g(cet)g(\023)-21 b(enonc)o(\023)g(e)15 b(par)h(une)h(autre.)e(nous)h(notons)g(par)g(la)75 2168 y(suite)g fk(p)p ff(f)p fm(s)s fq([)p fm(e)s ff(n)p fm(e)372 2151 y fx(0)381 2168 y fq(])p ff(g)f fq(l')o(\023)-21 b(enonc)o(\023)g(e)15 b fk(p)g fq(dans)h(lequel)i(l')o(\023)-21 b(equation)15 b fm(e)j fq(a)d(\023)-21 b(et)o(\023)g(e)14 b(substitu)o(\023)-21 b(ee)15 b(par)h(l')o(\023)-21 b(equations)15 b fm(e)1823 2151 y fx(0)1834 2168 y fq(.)75 2224 y(nous)h(pr)o(\023)-21 b(ecisons)16 b(main)o(tenan)o(t)g(les)h(mo)o(y)o(ens)e(d'obtenir,)i (\022)-23 b(a)15 b(partir)h(d'une)g(\023)-21 b(equation)16 b fm(e)s fq(,)f(un)g(\023)-21 b(equation)75 2281 y fm(e)112 2264 y fx(0)139 2281 y fq(telle)17 b(que)f fk(p)p ff(f)p fm(s)s fq([)p fm(e)s fq(])p ff(g)d(v)j fk(p)p ff(f)p fm(s)s fq([)p fm(e)s ff(n)p fm(e)739 2264 y fx(0)747 2281 y fq(])p ff(g)p fq(.)f(nous)h(in)o(tro)q(duisons)h(la)f(notation)f fm(e)h ff(\000)-7 b(!)14 b fm(e)1593 2264 y fx(0)1604 2281 y fq(,)h(qui)i(signi\014e)75 2337 y(que)f(l'on)f(substitue)h fm(e)h fq(par)e fm(e)612 2321 y fx(0)638 2337 y fq(en)h(utilisan)o(t)g (un)g(des)f(deux)h(pro)q(c)o(\023)-21 b(ed)o(\023)g(es)14 b(suiv)m(an)o(t)8 b(:)131 2429 y(1.)22 b(l'application)17 b(d'un)g(c)o(hangemen)o(t)e(de)i(base)f(aux)g(deux)g(mem)o(bres)g (d'une)g(\023)-21 b(equation,)15 b(conduit)189 2486 y(aux)g(deux)h(r)o

(\022)-21 b(egles)14 b(de)i(substitution)g(suiv)m(an)o(tes)8 b(:)p eop %%page: 35 37 35 36 bop 75 269 a fl(3.3.)29 b(calcul)16 b(de)f(raffinement)990 b fq(35)p 189 353 1623 2 v 189 732 2 380 v 228 405 a(\(i\))125 b fk(y)15 b fq(=)h fk(x)60 b ff(\000)-7 b(!)80 b fk(h)8 b(::)f(y)15 b fq(=)h fk(h)7 b(::)g(x)732 461 y fq(et)31 b fm(dom)p fq(\()p fm(\033)931 468 y fr(x)947 461 y fq(\))13 b ff(\022)g fm(dom)p fq(\()p fk(h)p fq(\))8 b ff(^)j fm(dom)p fq(\()p fm(\033)1351 468 y fr(y)1368 461 y fq(\))h ff(\022)h fm(dom)p fq(\()p fk(h)p fq(\))203 546 y(et)i(r)o(\023)-21 b(ecipro)q(quemen)o(t,)228 646 y(\(i)q(i\))126 b fk(h)7 b(::)g(y)15 b fq(=)h fk(h)7 b(::)h(x)75 b ff(\000)-7 b(!)81 b fk(y)15 b fq(=)g fk(x)939 703 y fq(et)30 b fm(dom)p fq(\()p fm(v)1133 710 y fr(x)1150 703 y fq(\))12 b ff(\022)h fm(dom)p fq(\()p fk(h)p fq(\))p 1810 732 v 189 734 1623 2 v 131 799 a(2.)22 b(l'application)16 b(d'une)g(des)f(r)o(\022)-21 b(egles)13 b(\023)-21 b(el)o(\023)g(emen)o(taires)14 b(don)o(t)g(nous)h(donnons)g(la)h(liste)f(dans)g(les)h(trois)189 856 y(tables)k(qui)h(suiv)o(en)o(t.)f(quand)h(des)f(conditions)i (apparaissen)o(t)e(dans)g(la)g(partie)g(droite)h(de)f(la)189 912 y(r)o(\022)-21 b(egle,)16 b(on)i(doit)g(s'assurer,)e(p)q(our)i(p)q (ouv)o(oir)g(appliquer)h(la)f(r)o(\022)-21 b(egle,)17 b(que)h(le)g(programme)f(obten)o(u)189 969 y(apr)o(\022)-21 b(es)15 b(substitution,)h(requiert)g(\023)-21 b(egalemen)o(t)15 b(ces)i(conditions)g(\(elles)g(doiv)o(en)o(t)g(donc)f(p)q(ouv)o(oir)h (se)189 1025 y(d)o(\023)-21 b(eduire)11 b(des)h(autres)e(\023)-21 b(equations)10 b(du)i(programme)e(obten)o(u\).)g(notons)h(que)g(si)h (on)f(p)q(eut)h(appliquer)189 1082 y(la)j(r)o(\022)-21 b(egle,)14 b(le)i(programme)e(obten)o(u)h(est)e(\023)-21 b(equiv)m(alen)o(t)16 b(puisque)g(la)g(r)o(\022)-21 b(egle)14 b(r)o(\023)-21 b(ecipro)q(que)15 b(ne)h(supp)q(ose)189 1138 y(aucune)g(condition.)146 1214 y(a)d(titre)h(d'exemple,)h (examinons)f(les)h(r)o(\022)-21 b(egles)13 b(\(5a\))f(et)i(\(5b\).)f (dans)g(la)h(r)o(\022)-21 b(egle)14 b(\(5a\))e(la)i(partie)g(droite)75 1270 y(de)i(la)g(r)o(\022)-21 b(egle)14 b(n'est)i(une)g(expression)g (correcte)f(que)h(si)g(\()p fk(x)f fa(c)g fk(f1)p fq(\))g(est)g(un)h(c) o(hamp)f(de)h(donn)o(\023)-21 b(ees,)15 b(ce)h(qui)75 1326 y(n'est)i(pas)h(requis)g(par)f(la)h(partie)g(gauc)o(he)f(de)h(la)g (r)o(\022)-21 b(egle.)18 b(consid)o(\023)-21 b(erons)18 b(par)g(exemple)i(les)f(fonctions)75 1383 y fk(f1)p fq(=)p fm(\025)p fk(\(i\))p ff(j)p fk(\(2)p ff(\024)p fk(i)p ff(\024)p fk(n\).\(i-1\))10 b fq(et)i fk(f2)p fq(=)p fm(\025)p fk(\(i\))p ff(j)p fk(\(1)p ff(\024)p fk(i)p ff(\024)p fk(n-1\).\(i+1\))n fq(.)f(de)h(la)h(d)o(\023)-21 b(e\014nition)13 b(de)f(l'op)o(\023)-21 b(eration)75 1439 y(g)o(\023)g(eom)o(\023)g(etrique,)14 b(la)i(partie)g(gauc)o(he)g (de)g(la)g(r)o(\022)-21 b(egle)16 b(est)f(correcte)h(si)g fm(dom)p fq(\()p fk(f1)10 b ff(\016)f fk(f2)p fq(\))16 b ff(\022)g fm(dom)p fq(\()p fm(\033)r fq(\).)e(dans)h(la)75 1496 y(partie)g(droite,)f(l'expression)i(doit)f(v)o(\023)-21 b(eri\014er)14 b(\022)-23 b(a)15 b(la)g(fois)f fm(dom)p fq(\()p fk(f1)p fq(\))g ff(\022)h fm(dom)p fq(\()p fm(\033)r fq(\))e(et)h fm(dom)p fq(\()p fk(f2)o fq(\))e ff(\022)h fm(dom)p fq(\()p fm(\033)r fq(\),)75 1552 y(qui)g(se)f(simplife)h(en)g fm(dom)p fq(\()p fk(f1)o fq(\))s ff([)s fm(dom)p fq(\()p fk(f2)o fq(\))g ff(\022)g fm(dom)p fq(\()p fm(\033)r fq(\).)d(en)i(l'o)q(ccurrence,)g(ceci)h(signi\014e)h(que)e(le)h(c)o (hamp)75 1609 y(de)k(la)g(partie)g(droite)g(doit)g(v)o(\023)-21 b(eri\014er)17 b([1)8 b fm(:)g(:)g(:)t(n)p fq(])15 b

ff(\022)h fm(dom)p fq(\()p fm(\033)r fq(\))f(alors)h(que)i(la)f(partie) g(gauc)o(he)f(ne)h(n)o(\023)-21 b(ecessite)75 1665 y(que)18 b([1)8 b fm(:)g(:)g(:)t(n)p ff(\000)q fq(1])16 b ff(\022)h fm(dom)p fq(\()p fm(\033)r fq(\).)e(le)k(fait)e(que)h(le)g(c)o(hamp)g (soit)f(correctemen)o(t)g(d)o(\023)-21 b(e\014ni)18 b(par)f (l'expression)75 1722 y(en)f(partie)f(droite,)g(implique)j(qu'il)e(est) f(bien)h(d)o(\023)-21 b(e\014ni)16 b(par)f(l'expression)h(en)g(partie)f (gauc)o(he.)75 1778 y(si)f(en)h(plus,)f(on)f(a)s(joute)g(une)h(con)o (train)o(te)g(imp)q(osan)o(t)f fm(dom)p fq(\()p fm(\033)r fq(\))e(=)i([1)8 b fm(:)g(:)g(:)d(n)p fq(],)13 b(par)g(exemple)i(en)f (a)s(joutan)o(t)75 1835 y(l')o(\023)-21 b(equation)11 b fk(x)h fq(=)g fm(\025)p fk(\(i\))p ff(j)p fk(\(1)p ff(\024)p fk(i)p ff(\024)p fk(n\))6 b(::)i(x)p fq(,)j(alors)g(on)h(d)o (\023)-21 b(eduit)12 b(de)g(cette)g(information)g(con)o(textuelle)h (qu'on)75 1891 y(p)q(eut)i(\023)-21 b(egalemen)o(t)14 b(appliquer)j(la)f(r)o(\022)-21 b(egle)14 b(dans)i(le)g(sens)f(opp)q (os)o(\023)-21 b(e,)14 b(comme)h(l'indique)j(la)d(r)o(\022)-21 b(egle)15 b(\(5b\).)146 2004 y(le)20 b(lien)h(en)o(tre)e(la)h(r)o(\023) -21 b(e)o(\023)g(ecriture)18 b(d'une)h(\023)-21 b(equation)19 b(d'un)f(\023)-21 b(enonc)o(\023)g(e)19 b(et)g(le)h(ra\016nemen)o(t)f (est)f(\023)-21 b(etabli)20 b(\022)-23 b(a)75 2060 y(l'aide)16 b(de)g(la)f(propri)o(\023)-21 b(et)o(\023)g(e)14 b(suiv)m(an)o(te)8 b(:)75 2173 y fo(propri)o(\023)-25 b(et)o(\023)g(e)17 b(7)31 b fq(soien)o(t)15 b(deux)g(\023)-21 b(equations)15 b fm(e)i fq(et)e fm(e)958 2157 y fx(0)984 2173 y fq(et)g(un)g(\023)-21 b(enonc)o(\023)g(e)14 b fk(p)p ff(f)p fm(s)s ff(g)6 b fq(:)189 2249 y(si)16 b fm(e)h fq(est)e(une)h(pr)o(\023)-21 b(e-)o(\023)g(equation)14 b(et)h fm(e)30 b ff(\000)-7 b(!)28 b fm(e)969 2232 y fx(0)995 2249 y fq(alors)15 b fk(p)p ff(f)p fm(s)s fq([)p fm(e)s ff(n)p fm(e)1292 2232 y fx(0)1300 2249 y fq(])p ff(g)g(v)g fk(p)189 2335 y fq(si)h fm(e)h fq(est)e(une)h(p)q(ost-)o(\023)-21 b(equation)14 b(et)h fm(e)30 b ff(\000)-7 b(!)28 b fm(e)990 2319 y fx(0)1016 2335 y fq(alors)15 b fk(p)g ff(v)h fk(p)p ff(f)p fm(s)s fq([)p fm(e)s ff(n)p fm(e)1403 2319 y fx(0)1411 2335 y fq(])p ff(g)75 2410 y fj(pr)n(euve.)d fq(examinons)h(les)g(deux) h(pro)q(c)o(\023)-21 b(ed)o(\023)g(es)12 b(p)q(ermettan)o(t)h (d'e\013ectuer)g(une)i(substitution)f(d')o(\023)-21 b(equation)7 b(:)131 2486 y(1.)122 b fo(r)o(\022)-25 b(egle)16 b(\(i\))e fq(il)h(faut)e(d'ab)q(ord)f(\023)-21 b(etablir)14 b(la)g(preuv)o(e)g(p) q(our)g(le)g(premier)h(cas)e(de)h(substitution.)289 2542 y(soien)o(t)19 b fm(p)g fq(les)h(conditions)h(induites)g(par)e(la)h (partie)f(gauc)o(he)g(de)h(la)g(r)o(\022)-21 b(egle)18 b(\(i\),)h(et)g fm(p)1765 2526 y fx(0)1796 2542 y fq(les)p eop %%page: 36 38 36 37 bop 75 269 a fq(36)615 b fl(chapitre)16 b(3.)30 b(raffinement)15 b(et)f(abstra)o(ction)p 75 353 1800 2 v 75 1620 2 1267 v 247 405 a fj(\(fonctionnel)r(le-b)n(ase\))114 461 y fq(\(1a\))51 b fk(y)15 b fq(=)h fk(f1)f fa(b)g fk(\(f2)8 b(::)f(x\))207 b ff(\000)-7 b(!)50 b fk(y)15 b fq(=)h fk(f2)7 b(::)g(\(f1)24 b fa(b)g fk(x\))114 518 y fq(\(1b\))49 b fk(y)15 b fq(=)h fk(f2)7 b(::)g(\(f1)24 b fa(b)g fk(x\))190 b ff(\000)-7 b(!)50 b fk(y)15 b fq(=)h fk(f1)e fa(b)i fk(\(f2)8 b(::)f(x\))247 631 y fj(\(g)o(\023)-22 b(e)n(om)o(\023)g(etrique-fonctionnel)r(le\))114 687 y fq(\(2a\))51 b fk(y)15 b fq(=)h fk(\(f1)23 b fa(b)h fk(x\))15 b fa(c)h fk(f2)187 b ff(\000)-7 b(!)50 b fk(y)15 b fq(=)h fk(f1)e fa(b)i fk(\(x)24 b fa(c)g fk(f2\))114 744 y fq(\(2b\))49 b fk(y)15 b fq(=)h fk(f1)f fa(b)g

fk(\(x)24 b fa(c)g fk(f2\))187 b ff(\000)-7 b(!)50 b fk(y)15 b fq(=)h fk(\(f1)23 b fa(b)h fk(x\))15 b fa(c)h fk(f2)247 857 y fj(\(b)n(ase-g)o(\023)-22 b(e)n(om)o(\023)g(etrique\)) 114 913 y fq(\(3a\))51 b fk(y)15 b fq(=)h fk(\(f2)7 b(::)h(x\))15 b fa(c)g fk(f1)207 b ff(\000)-7 b(!)50 b fk(y)15 b fq(=)h fk(f2)7 b(::)g(\(x)24 b fa(c)g fk(f2)1342 897 y fx(\000)p fg(1)1396 913 y ff(\016)10 b fk(f1)g ff(\016)g fk(f2\))963 969 y fq(et)36 b fm(dom)p fq(\()p fk(f1)o fq(\))10 b ff([)g fm(img)r fq(\()p fk(f1)n fq(\))j ff(\022)g fm(img)r fq(\()p fk(f2)n fq(\))i ff(^)1037 1026 y fm(dom)p fq(\()p fm(v)1163 1033 y fr(x)1180 1026 y fq(\))d ff(\022)h fm(dom)p fq(\()p fk(f2)o fq(\))114 1139 y(\(3b\))49 b fk(y)15 b fq(=)h fk(f2)7 b(::)g(\(x)24 b fa(c)g fk(f1\))190 b ff(\000)-7 b(!)50 b fk(y)15 b fq(=)h fk(\(f2)7 b(::)h(x\))15 b fa(c)g fk(f2)10 b ff(\016)g fk(f1)g ff(\016)g fk(f2)1531 1122 y fx(\000)p fg(1)963 1195 y fq(et)15 b fm(dom)p fq(\()p fk(f1)o fq(\))10 b ff([)g fm(img)r fq(\()p fk(f1)o fq(\))i ff(\022)h fm(dom)p fq(\()p fk(f2)o fq(\))247 1252 y fj(\(r)o(\023)-22 b(e)n(duction-b)n(ase\))114 1308 y fq(\(3c\))54 b fk(y)15 b fq(=)h fk(f1)f fq(;)8 b fa(b)14 b fk(\(f2)8 b(::)f(x\))187 b ff(\000)-7 b(!)50 b fk(y)15 b fq(=)h fk(f2)7 b(::)g(\(f2)1235 1292 y fx(\000)p fg(1)1289 1308 y ff(\016)j fk(f1)g ff(\016)g fk(f2)24 b fq(;)8 b fa(b)23 b fk(x\))963 1365 y fq(et)36 b fm(dom)p fq(\()p fk(f1)o fq(\))10 b ff([)g fm(img)r fq(\()p fk(f1)n fq(\))j ff(\022)g fm(img)r fq(\()p fk(f2)n fq(\))i ff(^)1037 1421 y fm(dom)p fq(\()p fm(v)1163 1428 y fr(x)1180 1421 y fq(\))d ff(\022)h fm(dom)p fq(\()p fk(f2)o fq(\))114 1534 y(\(3d\))49 b fk(y)15 b fq(=)h fk(f2)7 b(::)g(\(f1)24 b fq(;)8 b fa(b)23 b fk(x\))170 b ff(\000)-7 b(!)50 b fk(y)15 b fq(=)h fk(f2)9 b ff(\016)h fk(f1)g ff(\016)g fk(f2)1282 1518 y fx(\000)p fg(1)1341 1534 y fq(;)e fa(b)15 b fk(\(f2)8 b(::)f(x\))963 1590 y fq(et)15 b fm(dom)p fq(\()p fk(f1)o fq(\))10 b ff([)g fm(img)r fq(\()p fk(f1)o fq(\))i ff(\022)h fm(dom)p fq(\()p fk(f2)o fq(\))p 1873 1620 v 75 1622 1800 2 v 351 1699 a fn(t)l(ab.)i fq(3.1)f(-)31 b fj(r)o(\022)-22 b(e)n(gles)15 b(impliquant)h(des)g(op)o(\023)-22 b(er)n(ations)16 b(de)h(typ)n(e)f(di\013)o(\023)-22 b(er)n(ent)289 1841 y fq(conditions)16 b(induites)h(par)e(la)g(partie)h(droite)f(de)h (cette)f(m)o(^)-21 b(eme)14 b(r)o(\022)-21 b(egle)8 b(:)554 1947 y fm(p)61 b fq(=)50 b(\()p fm(v)763 1954 y fr(y)796 1947 y fq(=)15 b fm(v)868 1954 y fr(x)901 1947 y ff(^)g fm(\033)972 1954 y fr(y)1005 1947 y fq(=)g fm(\033)1081 1954 y fr(x)1099 1947 y fq(\))554 2004 y fm(p)577 1987 y fx(0)638 2004 y fq(=)50 b(\()p fm(v)763 2011 y fr(y)791 2004 y ff(\016)9 b fk(h)847 1987 y fq(-1)900 2004 y fq(=)15 b fm(v)972 2011 y fr(x)1000 2004 y ff(\016)10 b fk(h)1057 1987 y fq(-1)1109 2004 y ff(^)16 b fm(\033)1181 2011 y fr(y)1208 2004 y ff(\016)10 b fk(h)1265 1987 y fq(-1)1317 2004 y fq(=)16 b fm(\033)1394 2011 y fr(x)1421 2004 y ff(\016)10 b fk(h)1478 1987 y fq(-1)723 2060 y ff(^)16 b fm(dom)p fq(\()p fm(v)895 2067 y fr(x)911 2060 y fq(\))f ff(\022)h fm(dom)p fq(\()p fk(h)p fq(\))e ff(^)h fm(dom)p fq(\()p fm(v)1326 2067 y fr(y)1343 2060 y fq(\))g ff(\022)g fm(dom)p fq(\()p fk(h)p fq(\))723 2117 y ff(^)h fm(dom)p fq(\()p fm(\033)899 2124 y fr(x)915 2117 y fq(\))f ff(\022)h fm(dom)p fq(\()p fk(h)p fq(\))e ff(^)h fm(dom)p fq(\()p fm(\033)1334 2124 y fr(y)1351 2117 y fq(\))p ff(\022)g fm(dom)p fq(\()p fk(h)p fq(\)\))289 2234 y(consid)o(\023)-21 b(erons)15 b(d'ab)q(ord)h(que)g fk(x)g fq(=)g fk(y)g

fq(est)g(une)g(pr)o(\023)-21 b(e-)o(\023)g(equation)15 b(dans)h(un)g(\023)-21 b(enonc)o(\023)g(e)14 b fk(p)p fq(.)i(alors,)289 2290 y(la)f(propri)o(\023)-21 b(et)o(\023)g(e)13 b(de)i fk(p)p fq(,)f(et)g(celle)j(de)e(l')o(\023)-21 b(enonc)o(\023)g(e)13 b fk(p')h fq(obten)o(ue)h(par)g(application)h(de) f(la)g(r)o(\022)-21 b(egle)14 b(\(i\))289 2347 y(on)o(t)g(la)i(forme)e (suiv)m(an)o(te)9 b(:)314 2458 y fm(sat)p fq(\()p fk(p)p fq(\))61 b(:)49 b(\()p fm(p)599 2465 y fg(1)628 2458 y ff(^)10 b fm(p)p fq(\))15 b ff(\))g fm(p)807 2465 y fg(2)314 2514 y fm(sat)p fq(\()p fk(p)417 2497 y fx(0)428 2514 y fq(\))50 b(:)f(\()p fm(p)599 2521 y fg(1)628 2514 y ff(^)10 b fm(p)691 2497 y fx(0)703 2514 y fq(\))k ff(\))i fm(p)819 2521 y fg(2)p eop %%page: 37 39 37 38 bop 75 269 a fl(3.3.)29 b(calcul)16 b(de)f(raffinement)990 b fq(37)p 75 353 1800 2 v 75 1225 2 872 v 247 405 a fj(\(c)n(omp)n (osition)15 b(fonctionnel)r(le\))114 461 y fq(\(4a\))51 b fk(y)15 b fq(=)h fk(\(f1)9 b ff(\016)h fk(f2\))15 b fa(b)g fk(x)226 b ff(\000)-7 b(!)50 b fk(y)15 b fq(=)h fk(f1)f fa(b)g fk(\(f2)24 b fa(b)g fk(x\))114 518 y fq(\(4b\))49 b fk(y)15 b fq(=)h fk(f1)f fa(b)g fk(\(f2)24 b fa(b)g fk(x\))185 b ff(\000)-7 b(!)50 b fk(y)15 b fq(=)h fk(\(f1)10 b ff(\016)f fk(f2\))15 b fa(b)h fk(x)247 631 y fj(\(c)n(omp)n(osition)f (g)o(\023)-22 b(e)n(om)o(\023)g(etrique\))114 687 y fq(\(5a\))51 b fk(y)15 b fq(=)h fk(x)f fa(c)g fk(\(f1)10 b ff(\016)g fk(f2\))225 b ff(\000)-7 b(!)50 b fk(y)15 b fq(=)h fk(\(x)23 b fa(c)i fk(f1)o(\))15 b fa(c)h fk(f2)114 744 y fq(\(5b\))49 b fk(y)15 b fq(=)h fk(\(x)23 b fa(c)h fk(f1\))15 b fa(c)h fk(f2)185 b ff(\000)-7 b(!)50 b fk(y)15 b fq(=)h fk(x)f fa(c)g fk(\(f1)10 b ff(\016)g fk(f2\))961 800 y fq(et)15 b fm(img)r fq(\()p fk(f2)o fq(\))d ff(\022)h fm(dom)p fq(\()p fk(f1)o fq(\))f ff(\022)h fm(dom)p fq(\()p fm(\033)1596 807 y fr(x)1613 800 y fq(\))247 857 y fj(\(c)n(omp)n(osition)i(r)o (\023)-22 b(e)n(duction\))114 913 y fq(\(6\))74 b fk(y)15 b fq(=)h fk(\(f1)9 b ff(\016)h fk(f2\))15 b fq(;)8 b fa(b)15 b fk(x)205 b ff(\000)-7 b(!)50 b fk(y)15 b fq(=)h fk(f1)f fq(;)8 b fa(b)14 b fk(\(f2)24 b fq(;)8 b fa(b)23 b fk(x\))247 1026 y fj(\(c)n(omp)n(osition)15 b(b)n(ase\))114 1082 y fq(\(7a\))51 b fk(y)15 b fq(=)h fk(\(f1)9 b ff(\016)h fk(f2\))d(::)h(x)228 b ff(\000)-7 b(!)50 b fk(y)15 b fq(=)h fk(f1)7 b(::)g(\(f2)h(::)g(x\))114 1139 y fq(\(7b\))49 b fk(y)15 b fq(=)h fk(f1)7 b(::)g(\(f2)h(::)g(x)o(\))208 b ff(\000)-7 b(!)50 b fk(y)15 b fq(=)h fk(\(f1)10 b ff(\016)f fk(f2\))f(::)f(x)961 1195 y fq(et)15 b fk(f1)g fq(et)g fk(f2)g fq(bijectiv)o(es)p 1873 1225 v 75 1227 1800 2 v 378 1304 a fn(t)l(ab.)f fq(3.2)h(-)30 b fj(r)o(\022)-22 b(e)n(gles)15 b(c)n(onc)n(ernant)g(la)h(c)n(omp)n(osition)g(des)g (fonctions)289 1449 y fq(o)q(\022)-24 b(u)17 b fm(p)377 1456 y fg(1)412 1449 y fq(et)g fm(p)490 1456 y fg(2)525 1449 y fq(traduisen)o(t)g(resp)q(ectiv)o(emen)o(t)h(les)g(pr)o(\023)-21 b(e-)16 b(et)h(p)q(ost-)o(\023)-21 b(equations)17 b(de)g fk(p)p fq(.)f(d'apr)o(\022)-21 b(es)289 1506 y(la)15 b(propri)o(\023)-21 b(et)o(\023)g(e)14 b(6,)g(nous)h(dev)o(ons)h(mon)o (trer)e(que)h(\()p fm(p)1138 1513 y fg(1)1167 1506 y ff(^)10 b fm(p)1230 1489 y fx(0)1241 1506 y fq(\))15 b ff(\))h fq(\()p fm(p)1376 1513 y fg(1)1404 1506 y ff(^)10 b fm(p)p fq(\))15 b(est)g(toujours)f(vraie)289 1562 y(p)q(our)h (conclure)i(que)e fk(p')g ff(v)g fk(p)p fq(.)g(il)h(su\016t)f(donc)h (de)f(mon)o(trer)g(que)g fm(p)1433 1546 y fx(0)1457 1562 y ff(\))e fm(p)p fq(.)289 1618 y(en)g(e\013et,)g(de)h

fm(v)550 1625 y fr(y)577 1618 y ff(\016)c fk(h)634 1602 y fq(-1)685 1618 y fq(=)j fm(v)755 1625 y fr(x)783 1618 y ff(\016)d fk(h)840 1602 y fq(-1)890 1618 y fq(et)k fm(\033)968 1625 y fr(y)995 1618 y ff(\016)c fk(h)1052 1602 y fq(-1)1103 1618 y fq(=)j fm(\033)1177 1625 y fr(x)1205 1618 y ff(\016)d fk(h)1262 1602 y fq(-1)1299 1618 y fq(,)j(nous)h(d)o (\023)-21 b(eduisons)13 b(resp)q(ectiv)o(e-)289 1675 y(men)o(t)g fm(v)424 1682 y fr(x)442 1675 y ff(j)455 1682 y fw(dom)p fg(\()p fw(h)p fg(\))579 1675 y fq(=)i fm(v)651 1682 y fr(y)668 1675 y ff(j)681 1682 y fw(dom)p fg(\()p fw(h)p fg(\))806 1675 y fq(et)f fm(\033)884 1682 y fr(x)901 1675 y ff(j)914 1682 y fw(dom)p fg(\()p fw(h)p fg(\))1038 1675 y fq(=)h fm(\033)1114 1682 y fr(y)1131 1675 y ff(j)1144 1682 y fw(dom)p fg(\()p fw(h)p fg(\))1255 1675 y fq(,)e(et)h(comme)g fm(dom)p fq(\()p fm(v)1612 1682 y fr(x)1629 1675 y fq(\),)g fm(dom)p fq(\()p fm(v)1800 1682 y fr(y)1816 1675 y fq(\),)289 1731 y fm(dom)p fq(\()p fm(\033)419 1738 y fr(x)435 1731 y fq(\))h(et)f fm(dom)p fq(\()p fm(\033)650 1738 y fr(y)667 1731 y fq(\))g(son)o(t)g(inclus)i (dans)f fm(dom)p fq(\()p fk(h)p fq(\),)e(il)j(vien)o(t)f fm(v)1377 1738 y fr(x)1409 1731 y fq(=)g fm(v)1481 1738 y fr(y)1513 1731 y fq(et)f fm(\033)1591 1738 y fr(x)1623 1731 y fq(=)h fm(\033)1699 1738 y fr(y)1717 1731 y fq(.)f(donc)289 1788 y fm(sat)p fq(\()p fk(p)392 1771 y fx(0)404 1788 y fq(\))g ff(\))i fm(sat)p fq(\()p fk(p)p fq(\))f(et)g fk(p')g ff(v)h fk(p)p fq(.)289 1913 y(dans)i(le)h(cas)f(o)q(\022)-24 b(u)19 b(les)f(\023)-21 b(equations)18 b(de)h(la)g(r)o(\022)-21 b(egle)18 b(\(i\))g(son)o(t)g(des)h(p)q(ost-)o(\023)-21 b(equations,)18 b(alors)g(les)289 1969 y(propri)o(\023)-21 b(et)o(\023)g(es)13 b(de)j fk(p)f fq(et)g fk(p')g fq(on)o(t)f(la)i (forme)e(suiv)m(an)o(te)9 b(:)314 2082 y fm(sat)p fq(\()p fk(p)p fq(\))61 b(:)49 b fm(p)581 2089 y fg(1)615 2082 y ff(\))16 b fq(\()p fm(p)717 2089 y fg(2)745 2082 y ff(^)10 b fm(p)p fq(\))314 2138 y fm(sat)p fq(\()p fk(p)417 2122 y fx(0)428 2138 y fq(\))50 b(:)f fm(p)581 2145 y fg(1)615 2138 y ff(\))16 b fq(\()p fm(p)717 2145 y fg(2)745 2138 y ff(^)10 b fm(p)808 2122 y fx(0)835 2138 y fq(\))289 2235 y(nous)i(a)o(v)o(ons)g(mon)o(tr)o(\023)-21 b(e)11 b(que)i fm(p)782 2219 y fx(0)806 2235 y ff(\))g fm(p)g fq(et)g(donc)g(ici,)g fm(sat)p fq(\()p fk(p)1230 2219 y fx(0)1242 2235 y fq(\))g ff(\))g fm(sat)p fq(\()p fk(p)p fq(\))g(d'apr)o(\022)-21 b(es)11 b(la)i(propri)o(\023)-21 b(et)o(\023)g(e)289 2292 y(6.)14 b(p)o(ar)g(cons)o(\023)-21 b(equen)o(t,)15 b fk(p)g ff(v)g fk(p')p fq(.)289 2429 y fo(r)o(\022)-25 b(egle)15 b(\(i)q(i\))e fq(dans)f(ce)h(qui)g(suit,)g (nous)g(ne)g(n')o(\023)-21 b(etablissons)12 b(la)h(preuv)o(e)g(que)g(p) q(our)f(le)i(cas,)e(o)q(\022)-24 b(u)289 2486 y(les)13 b(\023)-21 b(equations)13 b(son)o(t)g(des)h(p)q(ost-)o(\023)-21 b(equations.)13 b(la)h(d)o(\023)-21 b(emonstration)12 b(p)q(our)i(une)h(pr)o(\023)-21 b(e-)o(\023)g(equation)289 2542 y(est)15 b(la)g(m)o(^)-21 b(eme)14 b(que)i(pr)o(\023)-21 b(ec)o(\023)g(edemmen)o(t.)p eop %%page: 38 40 38 39 bop 75 269 a fq(38)615 b fl(chapitre)16 b(3.)30 b(raffinement)15 b(et)f(abstra)o(ction)p 75 353 1800 2 v 75 1225 2 872 v 270 405 a fj(\(distributivit)o(\023)-22 b(e)16 b(g)o(\023)-22 b(e)n(om)o(\023)g(etrique\))114 461 y fq(\(8a\))74 b fk(y)15 b fq(=)g fk(\(x1)24 b(/&/)7 b(x2\))15 b fa(c)h fk(f)221 b ff(\000)-7 b(!)50 b fk(y)15 b fq(=)h fk(\(x1)23 b fa(c)i fk(f\))e(/&/)8 b(\(x2)23

b fa(c)h fk(f\))114 518 y fq(\(8b\))72 b fk(y)15 b fq(=)g fk(\(x1)24 b fa(c)g fk(f\))g(/&/)7 b(\(x2)24 b fa(c)g fk(f\))49 b ff(\000)-7 b(!)50 b fk(y)15 b fq(=)h fk(\(x1)23 b(/&/)8 b(x2\))15 b fa(c)g fk(f)1040 574 y fq(et)36 b fm(dom)p fq(\()p fk(f)p fq(\))12 b ff(\022)h fm(dom)p fq(\()p fm(\033)1450 581 y fr(x1)1482 574 y fq(\))d ff(\\)g fm(dom)p fq(\()p fm(\033)1680 581 y fr(x2)1712 574 y fq(\))15 b ff(^)1114 631 y fm(img)r fq(\()p fk(f)p fq(\))c ff(\022)i fm(dom)p fq(\()p fm(v)1439 638 y fr(x1)1471 631 y fq(\))d ff(\\)g fm(dom)p fq(\()p fm(v)1665 638 y fr(x2)1698 631 y fq(\))270 687 y fj(\(p)n(artition)16 b(g)o(\023)-22 b(e)n(om)o(\023)g(etrique\))114 744 y fq(\(9a\))74 b fk(y)15 b fq(=)g fk(x)g fa(c)h fk(\(f1)10 b fq(#)g fk(f2\))266 b ff(\000)-7 b(!)50 b fk(y)15 b fq(=)h fk(\(x)24 b fa(c)g fk(f1\))f(/&/)8 b(\(x)23 b fa(c)i fk(f2)o(\))114 800 y fq(\(9b\))72 b fk(y)15 b fq(=)g fk(\(x)24 b fa(c)g fk(f1\))g(/&/)7 b(\(x)24 b fa(c)g fk(f2\))49 b ff(\000)-7 b(!)50 b fk(y)15 b fq(=)h fk(x)f fa(c)h fk(\(f1)9 b fq(#)h fk(f2\))1040 857 y fq(et)16 b fm(dom)p fq(\()p fk(f1)o fq(\))9 b ff(\\)i fm(dom)p fq(\()p fk(f2)o fq(\))h(=)h ff(fg)270 913 y fj(\(p)n(artition)j(r)o (\023)-22 b(e)n(duction\))114 969 y fq(\(10\))74 b fk(y)15 b fq(=)g fk(\(f1)10 b fq(#)g fk(f2\))15 b fq(;)8 b fa(b)15 b fk(x)246 b ff(\000)-7 b(!)50 b fk(y)15 b fq(=)h fk(\(f1)23 b fq(;)8 b fa(b)24 b fk(x\))f(/&/)8 b(\(f2)23 b fq(;)8 b fa(b)24 b fk(x\))270 1082 y fj(\(distributivit)o(\023)-22 b(e)16 b(b)n(ase\))114 1139 y fq(\(11a\))51 b fk(y)15 b fq(=)g fk(\(f)8 b(::)g(x1\))23 b(/&/)8 b(\(f)f(::)h(x2\))88 b ff(\000)-7 b(!)50 b fk(y)15 b fq(=)h fk(f)7 b(::)h(\(x1)23 b(/&/)8 b(x2\))114 1195 y fq(\(11b\))49 b fk(y)15 b fq(=)g fk(f)8 b(::)f(\(x1)24 b(/&/)7 b(x2\))224 b ff(\000)-7 b(!)50 b fk(y)15 b fq(=)h fk(\(f)8 b(::)f(x1\))24 b(/&/)7 b(\(f)h(::)g(x2)o(\))p 1873 1225 v 75 1227 1800 2 v 504 1304 a fn(t)l(ab.)14 b fq(3.3)g(-)31 b fj(r)o(\022)-22 b(e)n(gles)15 b(c)n(onc)n(ernant)g(l'op)o(\023)-22 b(er)n(ateur)17 b fk(/&/)289 1433 y fq(soien)o(t)f(les)g(\023)-21 b(enonc)o(\023)g(es,) 15 b fk(p)h fq(a)o(y)o(an)o(t)e fk(h)8 b(::)f(x)16 b fq(=)g fk(h)8 b(::)f(y)16 b fq(parmi)g(ses)h(p)q(ost-)o(\023)-21 b(equations,)15 b(et)h fk(p')g fq(ob-)289 1489 y(ten)o(u)f(par)g(la)g (r)o(\022)-21 b(egle)15 b(\(i)q(i\).)g(leurs)h(propri)o(\023)-21 b(et)o(\023)g(es)14 b(son)o(t)7 b(:)314 1596 y fm(sat)p fq(\()p fk(p)p fq(\))61 b(:)49 b fm(p)581 1603 y fg(1)615 1596 y ff(\))16 b fq(\()p fm(p)717 1603 y fg(2)750 1596 y ff(^)f fm(v)817 1603 y fr(y)845 1596 y ff(\016)10 b fk(h)902 1579 y fq(-1)939 1596 y fq(=)16 b fm(v)1012 1603 y fr(x)1039 1596 y ff(\016)10 b fk(h)1096 1579 y fq(-1)1148 1596 y ff(^)16 b fm(\033)1220 1603 y fr(y)1248 1596 y ff(\016)9 b fk(h)1304 1579 y fq(-1)1342 1596 y fq(=)15 b fm(\033)1418 1603 y fr(x)1446 1596 y ff(\016)9 b fk(h)1502 1579 y fq(-1)558 1652 y ff(^)16 b fm(dom)p fq(\()p fm(v)730 1659 y fr(y)747 1652 y fq(\))f ff(\022)g fm(dom)p fq(\()p fk(h)p fq(\))f ff(^)h fm(dom)p fq(\()p fm(v)1161 1659 y fr(x)1178 1652 y fq(\))g ff(\022)h fm(dom)p fq(\()p fk(h)p fq(\)\))314 1708 y fm(sat)p fq(\()p fk(p)417 1692 y fx(0)428 1708 y fq(\))50 b(:)f fm(p)581 1715 y fg(1)615 1708 y ff(\))16 b fq(\()p fm(p)717 1715 y fg(2)735 1708 y ff(^)f fm(v)802 1715 y fr(y)835 1708 y fq(=)g fm(v)907 1715 y fr(x)940 1708 y ff(^)h fm(\033)1012 1715 y fr(y)1044 1708 y fq(=)g fm(\033)1121 1715 y fr(x)558 1765 y ff(^)g fm(dom)p fq(\()p fm(v)730 1772 y fr(x)747

1765 y fq(\))f ff(\022)g fm(dom)p fq(\()p fk(h)p fq(\)\))289 1829 y(nous)h(a)o(v)o(ons)f(ici)i fm(sat)p fq(\()p fk(p)695 1813 y fx(0)707 1829 y fq(\))e ff(\))i fm(sat)p fq(\()p fk(p)p fq(\))f(car)f(\()p fm(v)1055 1836 y fr(y)1088 1829 y fq(=)i fm(v)1162 1836 y fr(x)1195 1829 y ff(^)f fm(\033)1267 1836 y fr(y)1301 1829 y fq(=)g fm(\033)1378 1836 y fr(x)1395 1829 y fq(\))g ff(\))g fq(\()p fm(v)1530 1836 y fr(y)1558 1829 y ff(\016)9 b fk(h)1614 1813 y fq(-1)1652 1829 y fq(=)16 b fm(v)1725 1836 y fr(x)1753 1829 y ff(\016)9 b fk(h)1809 1813 y fq(-1)289 1885 y ff(^)15 b fm(\033)360 1892 y fr(y)388 1885 y ff(\016)10 b fk(h)445 1869 y fq(-1)482 1885 y fq(=)15 b fm(\033)558 1892 y fr(x)586 1885 y ff(\016)10 b fk(h)643 1869 y fq(-1)680 1885 y fq(\).)131 1975 y(2.)22 b fo(r)o(\022)-25 b(egles)23 b(\023)-25 b(el)o(\023)g(emen)o(taires)8 b fq(:)21 b(il)h(faut)f (ensuite)g(\023)-21 b(etablir)22 b(la)f(preuv)o(e)h(p)q(our)f(c)o (hacune)i(des)e(r)o(\022)-21 b(egles)189 2032 y(list)o(\023)g(ees)15 b(dans)g(les)h(tables.)f(nous)h(n'en)f(mon)o(trons)f(ici)j(que)e (quelques-unes.)243 2121 y({)23 b(p)o(ar)11 b(exemple,)h(p)q(our)g(la)g (r)o(\022)-21 b(egle)12 b(\(5a\))e(nous)i(dev)o(ons)g(mon)o(trer)f(que) h(l')o(\023)-21 b(enonc)o(\023)g(e)11 b fk(p)g fq(a)o(y)o(an)o(t)f (parmi)289 2178 y(ses)15 b(p)q(ost-)o(\023)-21 b(equations)15 b fk(y)g fq(=)h fk(x)f fa(c)g fk(\(f1)10 b ff(\016)g fk(f2\))15 b fq(est)g(ra\016n)o(\023)-21 b(e)14 b(par)h(le)h(programme) e fk(p')h fq(a)o(y)o(an)o(t,)f(\022)-23 b(a)289 2234 y(la)15 b(place)h(de)g(cette)e(\023)-21 b(equation,)14 b(l')o(\023)-21 b(equation)15 b fk(y)g fq(=)h fk(\(x)23 b fa(c)h fk(f1\))15 b fa(c)h fk(f2)7 b fq(:)289 2353 y fm(sat)p fq(\()p fk(p)p fq(\))g(:)314 2408 y fm(p)337 2415 y fg(1)370 2408 y ff(\))50 b fq(\()p fm(p)506 2415 y fg(2)540 2408 y ff(^)15 b fq(\()p fm(v)625 2415 y fr(y)658 2408 y fq(=)g fm(v)730 2415 y fr(x)758 2408 y ff(\016)10 b fk(f1)f ff(\016)h fk(f2)p fq(\))15 b ff(^)g fq(\()p fm(\033)1051 2415 y fr(y)1084 2408 y fq(=)g fm(\033)1160 2415 y fr(x)1178 2408 y fq(\))f ff(^)465 2465 y fq(\()p fm(dom)p fq(\()p fm(v)609 2472 y fr(x)626 2465 y fq(\))h ff(\022)g fm(dom)p fq(\()p fm(\033)839 2472 y fr(x)856 2465 y fq(\))g ff(^)g fm(dom)p fq(\()p fm(v)1060 2472 y fr(y)1077 2465 y fq(\))g ff(\022)g fm(dom)p fq(\()p fm(\033)1290 2472 y fr(y)1307 2465 y fq(\))g ff(^)465 2521 y fm(dom)p fq(\()p fk(f1)10 b ff(\016)f fk(f2)p fq(\))15 b ff(\022)g fm(dom)p fq(\()p fm(\033)920 2528 y fr(x)937 2521 y fq(\))g ff(^)g fm(img)r fq(\()p fk(f1)9 b ff(\016)h fk(f2)p fq(\))k ff(\022)i fm(dom)p fq(\()p fm(v)1460 2528 y fr(x)1477 2521 y fq(\)\))p eop %%page: 39 41 39 40 bop 75 269 a fl(3.3.)29 b(calcul)16 b(de)f(raffinement)990 b fq(39)289 397 y fm(sat)p fq(\()p fk(p)392 380 y fx(0)404 397 y fq(\))7 b(:)314 452 y fm(p)337 459 y fg(1)370 452 y ff(\))50 b fq(\()p fm(p)506 459 y fg(2)540 452 y ff(^)15 b fq(\()p fm(v)625 459 y fr(y)658 452 y fq(=)g fm(v)730 459 y fr(x)758 452 y ff(\016)10 b fk(f1)f ff(\016)h fk(f2)p fq(\))15 b ff(^)g fq(\()p fm(\033)1051 459 y fr(y)1084 452 y fq(=)g fm(\033)1160 459 y fr(x)1178 452 y fq(\))f ff(^)465 508 y fq(\()p fm(dom)p fq(\()p fm(v)609 515 y fr(x)626 508 y fq(\))h ff(\022)g fm(dom)p fq(\()p fm(\033)839 515 y fr(x)856 508 y fq(\))g ff(^)g fm(dom)p fq(\()p fm(v)1060 515 y fr(y)1077 508 y fq(\))g ff(\022)g fm(dom)p fq(\()p fm(\033)1290 515 y fr(y)1307 508 y fq(\))g ff(^)465 565 y fm(dom)p fq(\()p fk(f1)p fq(\))f ff(\022)i fm(dom)p

fq(\()p fm(\033)830 572 y fr(x)847 565 y fq(\))e ff(^)i fm(dom)p fq(\()p fk(f2)p fq(\))e ff(\022)h fm(dom)p fq(\()p fm(\033)1289 572 y fr(x)1306 565 y fq(\))g ff(^)465 621 y fm(img)r fq(\()p fk(f1)p fq(\))f ff(\022)h fm(dom)p fq(\()p fm(v)819 628 y fr(x)836 621 y fq(\))g ff(^)g fm(img)r fq(\()p fk(f2)p fq(\))e ff(\022)j fm(dom)p fq(\()p fm(v)1268 628 y fr(x)1295 621 y ff(\016)10 b fk(f1)p fq(\)\))289 703 y(nous)15 b(dev)o(ons)g(donc)h(mon)o(trer)e(que)8 b(:)289 790 y(\(2\))362 718 y fx(\()416 762 y fm(img)r fq(\()p fk(f1)n fq(\))13 b ff(\022)g fm(dom)p fq(\()p fm(v)765 769 y fr(x)781 762 y fq(\))416 818 y fm(img)r fq(\()p fk(f2)n fq(\))g ff(\022)g fm(dom)p fq(\()p fm(v)765 825 y fr(x)792 818 y ff(\016)c fk(f1)p fq(\))961 790 y ff(\))43 b fq(\(1\))30 b ff(f)p fm(img)r fq(\()p fk(f1)8 b ff(\016)i fk(f2)o fq(\))j ff(\022)g fm(dom)p fq(\()p fm(v)1600 797 y fr(x)1617 790 y fq(\))289 907 y(de)i(la)g(d)o(\023)-21 b(e\014nition)16 b(de)g(la)f(comp)q(osition)9 b(:)15 b fm(img)r fq(\()p fk(f1)8 b ff(\016)i fk(f2)p fq(\))i ff(\022)h fm(img)r fq(\()p fk(f1)n fq(\))289 1001 y(donc)i(\(2\))f(se)i (r)o(\023)-21 b(e)o(\023)g(ecrit)6 b(:)686 929 y fx(\()740 972 y fm(img)r fq(\()p fk(f1)i ff(\016)i fk(f2)p fq(\))i ff(\022)h fm(img)r fq(\()p fk(f1)n fq(\))g ff(\022)g fm(dom)p fq(\()p fm(v)1402 979 y fr(x)1418 972 y fq(\))740 1029 y fm(img)r fq(\()p fk(f2)n fq(\))f ff(\022)h fm(dom)p fq(\()p fm(v)1088 1036 y fr(x)1115 1029 y ff(\016)d fk(f1)p fq(\))289 1094 y(et)15 b(on)g(a)g(\(2\))f ff(\))i fq(\(1\),)d(et)i (donc)h fm(sat)p fq(\()p fk(p')p fq(\))f ff(\))h fm(sat)p fq(\()p fk(p)p fq(\).)243 1160 y({)23 b(p)o(our)17 b(la)h(r)o(\022)-21 b(egle)17 b(\(7a\),)f(nous)i(mon)o(trons)e(la)i(relation)h(de)f (ra\016nemen)o(t)f(en)o(tre)g(l')o(\023)-21 b(enonc)o(\023)g(e)17 b fk(p)p fq(,)289 1216 y(a)o(y)o(an)o(t)c(parmi)j(ses)f(p)q(ost-)o (\023)-21 b(equations)15 b fk(y)g fq(=)g fk(\(f1)10 b ff(\016)g fk(f2\))d(::)g(x)p fq(,)15 b(et)g(sp)o(\023)-21 b(eci\014)o(\023)g(e)15 b(par)f fm(sat)p fq(\()p fk(p)p fq(\))8 b(:)314 1271 y fm(p)337 1278 y fg(1)370 1271 y ff(\))50 b fq(\()p fm(p)506 1278 y fg(2)540 1271 y ff(^)15 b fq(\()p fm(v)625 1278 y fr(y)658 1271 y fq(=)g fm(v)730 1278 y fr(x)758 1271 y ff(\016)10 b fk(f2)838 1254 y fq(-1)886 1271 y ff(\016)g fk(f1)966 1254 y fq(-1)1004 1271 y fq(\))15 b ff(^)g fq(\()p fm(\033)1126 1278 y fr(y)1158 1271 y fq(=)h fm(\033)1235 1278 y fr(x)1278 1271 y ff(\016)9 b fk(f2)1358 1254 y fq(-1)1406 1271 y ff(\016)g fk(f1)1486 1254 y fq(-1)1523 1271 y fq(\))15 b ff(^)465 1328 y fm(dom)p fq(\()p fm(v)591 1335 y fr(x)608 1328 y fq(\))g ff(\022)h fm(dom)p fq(\()p fm(\033)822 1335 y fr(x)838 1328 y fq(\))f ff(^)h fm(dom)p fq(\()p fm(v)1043 1335 y fr(y)1059 1328 y fq(\))f ff(\022)h fm(dom)p fq(\()p fm(\033)1273 1335 y fr(y)1290 1328 y fq(\))e ff(^)465 1384 y fm(dom)p fq(\()p fm(v)591 1391 y fr(x)608 1384 y fq(\))h ff(\022)h fm(dom)p fq(\()p fk(f1)9 b ff(\016)h fk(f2)p fq(\)\))289 1466 y(et)k(l')o(\023)-21 b(enonc)o(\023)g(e)13 b fk(p')p fq(,)h(a)o(y)o(an)o(t)f(parmi)i(ses)f(p)q(ost-)o(\023)-21 b(equations)14 b fk(y)g fq(=)h fk(f1)7 b(::)h(\(f2)f(::)h(x\))p fq(,)14 b(sp)o(\023)-21 b(eci\014)o(\023)g(e)14 b(par)289 1522 y fm(sat)p fq(\()p fk(p)392 1506 y fx(0)404 1522 y fq(\))7 b(:)314 1577 y fm(p)337 1584 y fg(1)370 1577 y ff(\))50 b fq(\()p fm(p)506 1584 y fg(2)540 1577 y ff(^)15 b fq(\()p fm(v)625 1584 y fr(y)658 1577 y fq(=)g fm(v)730 1584 y fr(x)758 1577 y ff(\016)10 b fk(f2)838 1560 y fq(-1)886 1577 y ff(\016)g fk(f1)966 1560 y fq(-1)1004

1577 y fq(\))15 b ff(^)g fq(\()p fm(\033)1126 1584 y fr(y)1158 1577 y fq(=)h fm(\033)1235 1584 y fr(x)1278 1577 y ff(\016)9 b fk(f2)1358 1560 y fq(-1)1406 1577 y ff(\016)g fk(f1)1486 1560 y fq(-1)1523 1577 y fq(\))15 b ff(^)465 1634 y fm(dom)p fq(\()p fm(v)591 1641 y fr(x)608 1634 y fq(\))g ff(\022)h fm(dom)p fq(\()p fm(\033)822 1641 y fr(x)838 1634 y fq(\))f ff(^)h fm(dom)p fq(\()p fm(v)1043 1641 y fr(y)1059 1634 y fq(\))f ff(\022)h fm(dom)p fq(\()p fm(\033)1273 1641 y fr(y)1290 1634 y fq(\))e ff(^)465 1690 y fm(dom)p fq(\()p fm(v)591 1697 y fr(x)618 1690 y ff(\016)c fk(f2)699 1673 y fq(-1)736 1690 y fq(\))15 b ff(\022)h fm(dom)p fq(\()p fk(f1)p fq(\))d ff(^)j fm(dom)p fq(\()p fm(v)1175 1697 y fr(x)1192 1690 y fq(\))f ff(\022)g fm(dom)p fq(\()p fk(f2)p fq(\)\))289 1772 y(il)h(reste)f(\022)-23 b(a)15 b(mon)o(trer)f(que)8 b(:)289 1859 y(\(2\))362 1787 y fx(\()416 1831 y fm(dom)p fq(\()p fm(v)542 1838 y fr(x)569 1831 y ff(\016)i fk(f2)650 1813 y fx(\000)p fg(1)694 1831 y fq(\))i ff(\022)h fm(dom)p fq(\()p fk(f1)o fq(\))416 1887 y fm(dom)p fq(\()p fm(v)542 1894 y fr(x)559 1887 y fq(\))f ff(\022)h fm(dom)p fq(\()p fk(f2)o fq(\))1012 1859 y ff(\))44 b fq(\(1\))29 b ff(f)p fm(dom)p fq(\()p fm(v)1338 1866 y fr(x)1355 1859 y fq(\))12 b ff(\022)h fm(dom)p fq(\()p fk(f1)c ff(\016)h fk(f2)p fq(\))289 1976 y(p)o(our)18 b(cela,)h(nous)f(utilisons)j(la)d(propri)o(\023)-21 b(et)o(\023)g(e)18 b(suiv)m(an)o(te)8 b(:)18 b(si)h fm(g)h fq(est)f(une)g(fonction)g(et)f fm(f)24 b fq(est)289 2033 y(une)15 b(bijection,)i(alors)e fm(dom)p fq(\()p fm(g)10 b ff(\016)g fm(f)878 2016 y fx(\000)p fg(1)923 2033 y fq(\))i(=)h fm(f)5 b fq(\()p fm(dom)p fq(\()p fm(g)r fq(\)\).)289 2093 y(comme)14 b fm(dom)p fq(\()p fm(v)581 2100 y fr(x)598 2093 y fq(\))h ff(\022)g fm(dom)p fq(\()p fk(f2)p fq(\))f(nous)i(a)o(v)o(ons)6 b(:)409 2149 y fm(dom)p fq(\()p fm(v)535 2156 y fr(x)562 2149 y ff(\016)k fk(f2)642 2131 y fq(-1)680 2149 y fq(\))k ff(\022)i fm(dom)p fq(\()p fk(f1)p fq(\))314 2205 y ff(\))50 b fk(f2)p fq(\()p fm(dom)p fq(\()p fm(v)601 2212 y fr(x)617 2205 y fq(\)\))15 b ff(\022)g fm(dom)p fq(\()p fk(f1)p fq(\))314 2261 y ff(\))50 b fk(f2)457 2244 y fq(-1)494 2261 y fq(\()p fk(f2)p fq(\()p fm(dom)p fq(\()p fm(v)704 2268 y fr(x)720 2261 y fq(\)\)\))14 b ff(\022)h fk(f2)886 2244 y fq(-1)924 2261 y fq(\()p fm(dom)p fq(\()p fk(f1)p fq(\)\))314 2318 y ff(,)50 b fm(dom)p fq(\()p fm(v)535 2325 y fr(x)552 2318 y fq(\))14 b ff(\022)i fm(dom)p fq(\()p fk(f1)9 b ff(\016)h fk(f2)p fq(\))289 2400 y(nous)15 b(a)o(v)o(ons)f(\(2\))g ff(\))i fq(\(1\),)e(et)h(donc)g fm(sat)p fq(\()p fk(p')p fq(\))g ff(\))h fm(sat)p fq(\()p fk(p)p fq(\).)146 2486 y fa(\003)p eop %%page: 40 42 40 41 bop 75 269 a fq(40)615 b fl(chapitre)16 b(3.)30 b(raffinement)15 b(et)f(abstra)o(ction)75 397 y ft(3.4)66 b(un)15 b(outil)i(visuel)f(p)r(our)g(la)f(conception)h(de)f(programmes) c(:)j fs(vpei)146 499 y fq(il)i(ressort)e(de)i(la)g(pr)o(\023)-21 b(esen)o(tation)14 b(pr)o(\023)-21 b(ec)o(\023)g(eden)o(te)14 b(que)i(le)g(placemen)o(t)g(g)o(\023)-21 b(eom)o(\023)g(etrique)14 b(des)i(donn)o(\023)-21 b(ees)15 b(est)75 555 y(l')o(\023)-21 b(el)o(\023)g(emen)o(t)12 b(d)o(\023)-21 b(eterminan)o(t)12 b(de)h(la)g(conception)h(d'un)f(programme.)f(la)h(d)o(\023)-21 b(e\014nition)13 b(de)g(l'op)o(\023)-21 b(eration)12 b(fonc-)75 612 y(tionnelle)19 b(imp)q(ose)f(en)f(e\013et)g(que)g(p)q (our)h(calculer)g(des)g(v)m(aleurs,)f(ces)h(v)m(aleurs)g(doiv)o(en)o(t)

f(se)g(trouv)o(er)f(en)75 668 y(un)21 b(m)o(^)-21 b(eme)20 b(p)q(oin)o(t)h(du)g(domaine)g(discret.)g(ce)f(c)o(hoix)h(doit)g(a)o(v) o(oir)f(une)h(in\015uence)i(fa)o(v)o(orable)d(sur)g(la)75 725 y(p)q(erformance)d(des)g(programmes,)e(car)i(il)h(oblige)f(le)h (programmeur)e(\022)-23 b(a)16 b(expliciter)j(les)f(d)o(\023)-21 b(eplacemen)o(ts)75 781 y(\(les)19 b(comm)o(unications)h(dans)f(une)h (mac)o(hine)g(parall)o(\022)-21 b(ele\))19 b(n)o(\023)-21 b(ecessaires)19 b(a)o(v)m(an)o(t)g(de)g(p)q(ouv)o(oir)h(e\013ectuer)75 838 y(un)d(calcul.)h(ce)e(c)o(hoix)h(est)g(similaire)h(\022)-23 b(a)16 b(celui)j(fait)d(dans)h(la)f(plupart)i(des)e(langages)h (data-parall)o(\022)-21 b(eles,)75 894 y(comme)20 b(c)267 878 y fx(\003)286 894 y fq([54)o(],)g(cm-f)l(ortan[55)m(],)g(mpl[38)o (],)f(hyp)q(er-c[45],)g fj(etc)p fq(,)h(qui)h(imp)q(osen)o(t)g(la)f(lo) q(calit)o(\023)-21 b(e)21 b(des)75 951 y(donn)o(\023)-21 b(ees)14 b(aux)g(pro)q(cesseurs)h(virtuels)g(qui)g(les)g(mo)q(di\014en) o(t.)g(en)g(rev)m(anc)o(he,)f(cette)g(d)o(\023)-21 b(emarc)o(he)14 b(demande)75 1007 y(un)19 b(e\013ort)e(suppl)o(\023)-21 b(emen)o(taire)20 b(au)e(programmeur)g(qui)h(doit)g(expliciter)h(le)g (placemen)o(t.)f(p)o(our)f(cela,)g(il)75 1064 y(nous)13 b(a)f(sem)o(bl)o(\023)-21 b(e)12 b(utile)i(de)e(prop)q(oser)h(un)g (outil)g(fournissan)o(t)f(une)h(aide)h(graphique)f(aux)f(manipulations) 75 1120 y(g)o(\023)-21 b(eom)o(\023)g(etriques)13 b(que)j(doit)f (e\013ectuer)h(l'utilisateur.)75 1300 y fw(3.4.1)55 b(pr)o(\023)-27 b(esen)n(tation)18 b(de)h(l'outil)146 1386 y fq(un)13 b(protot)o(yp)q(e)g(d'outil)h(nomm)o(\023)-21 b(e)12 b fn(vpei)840 1369 y fg(1)858 1386 y fq(,)h(a)f(\023)-21 b(et)o(\023)g(e)11 b(con\030)-20 b(cu)14 b(p)q(our)g(p)q(ermettre)f(la) h(conception)g(de)g(pro-)75 1442 y(grammes)e fn(pei)g fq(par)g(simple)i(manipulations)g(graphiques.)f(l'utilisateur)g(p)q (eut)g(cr)o(\023)-21 b(eer)12 b(des)h(c)o(hamps)f(de)75 1499 y(donn)o(\023)-21 b(ees)12 b(dans)g fe(z)-13 b fq(,)9 b fe(z)435 1482 y fg(2)463 1499 y fq(ou)j fe(z)556 1482 y fg(3)572 1499 y fq(,)f(et)h(leur)h(appliquer)h(ensuite)f(une)f(op)o (\023)-21 b(eration)11 b(fonctionnelle,)j(une)f(op)o(\023)-21 b(era-)75 1555 y(tion)13 b(de)h(routage)e(ou)h(de)g(c)o(hangemen)o(t)g (de)h(base.)e(p)o(our)h(appliquer)h(une)g(op)o(\023)-21 b(eration,)12 b(l'utilisateur)i(doit)75 1612 y(en)o(trer)k(au)g(cla)o (vier)i(la)e(fonction)h(et,)f(selon)h(l'op)o(\023)-21 b(eration)17 b(c)o(hoisie,)j(le)f(logiciel)i(p)q(ermet)d(de)h (visualiser)75 1668 y(sc)o(h)o(\023)-21 b(ematiquemen)o(t)15 b(les)h(e\013ets)f(de)h(cette)f(op)o(\023)-21 b(eration)14 b(en)i(mon)o(tran)o(t)e(l'asp)q(ect)i(du)g(c)o(hamp)f(de)h(donn)o(\023) -21 b(ees)75 1725 y(r)o(\023)g(esultan)o(t.)14 b(quand)j(le)f(c)o(hamp) g(obten)o(u)g(corresp)q(ond)g(aux)g(atten)o(tes,)e(il)j(p)q(eut)f(^)-21 b(etre)14 b(v)m(alid)o(\023)-21 b(e)17 b(et)f(devien)o(t)75 1781 y(un)g(c)o(hamp)f(du)h(programme)e(sur)i(lequel)h(on)e(p)q(eut)h (appliquer)h(de)f(nouv)o(elles)h(op)o(\023)-21 b(erations.)14 b(apr)o(\022)-21 b(es)14 b(v)m(a-)75 1838 y(lidation,)j(le)h(texte)e (de)h(l')o(\023)-21 b(equation)16 b(d)o(\023)-21 b(e\014nissan)o(t)16 b(ce)h(nouv)o(eau)f(c)o(hamp)g(est)h(a\016c)o(h)o(\023)-21 b(e)15 b(dans)h(une)h(fen)o(^)-21 b(etre)75 1894 y(texte.)18 b(l'outil)h(autorise)f(\023)-21 b(egalemen)o(t)17 b(certaines)i(d)o (\023)-21 b(e\014nitions)19 b(r)o(\023)-21 b(ecursiv)o(es)18 b(de)h(c)o(hamps)g(de)g(donn)o(\023)-21 b(ees)7 b(:)75 1951 y(apr)o(\022)-21 b(es)14 b(a)o(v)o(oir)g(d)o(\023)-21 b(e\014ni)15 b(un)h(pas)f(de)g(la)g(r)o(\023)-21 b(ecurrence,)15 b(p)q(ouv)m(an)o(t)f(^)-21 b(etre)14 b(constitu)o(\023)-21 b(e)14 b(de)h(plusieurs)i(op)o(\023)-21 b(erations,)75 2007 y(il)20 b(p)q(eut)g(r)o(\023)-21 b(eit)o(\023)g(erer)17 b(l'application)k(de)f(cette)f(suite)g(d'op)o(\023)-21

b(erations)18 b(et)h(visualiser)i(le)f(c)o(hamp)f(obten)o(u)g(\022)-23 b(a)75 2063 y(c)o(haque)15 b(\023)-21 b(etap)q(e.)146 2177 y(la)17 b(\014gure)g(3.2)e(mon)o(tre)i(le)g(d)o(\023)-21 b(eroulemen)o(t)17 b(de)g(la)g(conception)h(d'un)f(programme)f(de)i (pro)q(duit)f(de)75 2233 y(matrices.)e(apr)o(\022)-21 b(es)15 b(a)o(v)o(oir)g(cr)o(\023)-21 b(e)o(\023)g(e)14 b(les)j(matrices)f(initiales,)h(l'utilisateur)h(applique)f(les)g(op)o (\023)-21 b(erations)14 b(p)q(our)75 2290 y(placer)k(les)g(v)m(aleurs)h (de)f(ces)f(matrices)h(sur)f(la)h(face)f(du)h(dessus)g(d'un)g(cub)q(e)g (\()p fk(a)p fq(\),)f(et)g(la)h(face)f(lat)o(\023)-21 b(erale)75 2346 y(d'un)21 b(cub)q(e)h(\()p fk(b)p fq(\).)d(les)i(v)m (aleurs)h(son)o(t)e(ensuite)i(dupliqu)o(\023)-21 b(ees)22 b(\022)-23 b(a)20 b(tra)o(v)o(ers)g(c)o(hacun)h(des)g(cub)q(es)h(dans)e (la)75 2402 y(direction)15 b(\(0)p fm(;)8 b fq(1)p fm(;)g fq(0\))j(p)q(our)j fk(a)g fq(et)g(\(1)p fm(;)8 b fq(0)p fm(;)g fq(0\))j(p)q(our)j fk(b)p fq(.)f(les)i(deux)f(c)o(hamps)g(ainsi) h(obten)o(us)f(\()p fk(a')f fq(et)h fk(b')p fq(\))f(son)o(t)75 2459 y(sup)q(erp)q(os)o(\023)-21 b(es)14 b(p)q(our)h(donner)g(un)g(c)o (hamp)f fk(a)p 796 2459 15 2 v 17 w(b)p fq(.)g(ce)h(c)o(hamp)f(con)o (tien)o(t)g(des)h(s)o(\023)-21 b(equences)15 b(\022)-23 b(a)14 b(deux)g(\023)-21 b(el)o(\023)g(emen)o(ts)p 75 2500 709 2 v 124 2542 a fd(1)p fc(:)9 b fd(abr)o(\023)-18 b(eviation)16 b(de)d(visual)i fi(pei)p eop %%page: 41 43 41 42 bop 75 269 a fl(3.4.)29 b(un)15 b(outil)i(visuel)f(pour)g(la)g (conception)f(de)g(pr)o(ogrammes)8 b(:)15 b fn(vpei)57 b fq(41)370 401 y 18646798 14917432 1184071 1184071 20129218 16430507 starttexfig 370 401 a %%begindocument: figures/vpei.ps /bufstr 671 string def gsave 18.000 18.000 translate 288.000 231.773 scale 671 540 8 [671 0 0 -540 0 540] {currentfile bufstr readhexstring pop} bind image f4f4f4f4f4f4f4f4f4f4f40000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000f4f4f4f4f4f4f4f4f4f4f4f4cccccccccccccccc

cc660000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000f4cccccccccccccccccc66f4cccccccccccccccccc6600000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 0000f4cccccccccccccccccc66f4cccccccccccccccccc66cccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4cccccccccccc cccccc66f4cccccc66666666666666cccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccccf4666666666666cccccc66f4cccccc66 666666666666666666ccf4f4f4f4f4f4f4f4f4f4f4f4f4f4cc666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 6666666666666666666666666666666666666666f4f4cccccc66f4cccccc6666b7b7b7b7b7b7b7b7 f4cccccccccccccccccccccccccccc66b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7f4f4cccccc66f4cccccc6666b7b7b7b7b7b7b7b7f4cccccccccccccccc cccccccccccc66b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7f4f4cccccc66f4cccccc6666b7b7b7b7b7b7b7b7f4cccccccccccccccccccccccccccc66b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7

b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b70000b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b70000b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7f4f4cccccc66f4 cccccc6666b7b7b7b7b7b7b7b7f4cccccc66666666666666cccccccc66b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b70000b7b7b7 b70000b7b70000b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b70000b7b7b7 b7b7b7b70000000000b7b7b7000000000000b7b70000b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7f4f4cccccc66f46666666666b7b7b7b7 b7b7b7b7f4cccccc66b7b7b7b7b7f4cccccccc66b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b70000b7b7b7b70000b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b70000b7b7b7b7b7b7b70000b7b700 00b7b70000b7b7b7b7b7b70000b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7f4f466666666000000cccc66b7b7b7b7b7b7b7b7f4cccccccc 66b7b7b7f4cccccccccc66b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b70000b7b7b7b70000b7b70000b7b7b70000000000b7b7b7 0000b7b70000b7b7b700000000b7b7b7b70000b7b7b7b7b7b7b70000b7b70000b7b70000b7b7b7b7 b7b70000b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7

b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7f4cccc000000000000cccc66b7b7b7b7b7b7b7b7f4cccccccc66b7b7b7f4cccccccc cc66b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b70000b7b7b700b7b7b70000b7b70000b7b7b7b7b7b7b70000b7b70000b7b700 00b7b70000b7b7b70000b7b7b7b7b7b7b70000b7b70000b7b70000b7b7b7b7b7b70000b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7f4cccc 000000000000cccc66b7b7b7b7b7b7b7b7f4cccccccccc66b7f4cccccccccccc66b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 0000b7b70000b7b7b70000b7b7000000b7b7b7b7b7b70000b7b70000b7b7b7b7b7b70000b7b7b700 00b7b7b7b7b7b7b70000b7b700b7b7b70000000000b7b7b70000b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7f4cccc000000000000cccc66 b7b7b7b7b7b7b7b7f4cccccccccc66b7f4cccccccccccc66b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b70000b700b7b7b7b7 0000b7b7b700000000b7b7b7b70000b7b70000b7b7b70000000000b7b7b70000b7b7b7b7b7b7b700 000000b7b7b7b70000b7b7b7b7b7b70000b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7f4cccc000000000000cccc66b7b7b7b7b7b7b7b7f4 ccccccccccccf4cccccccccccccc66b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7

b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b700000000b7b7b7b70000b7b7b7b7b70000 00b7b7b70000b7b70000b7b70000b7b70000b7b7b70000b7b7b7b7b7b7b70000b7b7b7b7b7b70000 b7b7b7b7b7b70000b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7f4cccc000000000000cccc66b7b7b7b7b7b7b7b7f4cccccccccccccccccc cccccccccc66b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b70000b7b7b7b7b70000b7b7b7b7b7b70000b7b7b70000b70000 00b7b70000b7b70000b7b7b70000b7b7b7b7b7b7b70000b7b7b7b7b7b70000b7b7b7b7b7b70000b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7f4cccc000000000000cccc66b7b7b7b7b7b7b7b7f4cccccccccccccccccccccccccccc66b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b70000b7b7b7b7b70000b7b70000000000b7b7b7b7b70000b70000b7b7b7000000b700 00b7b70000b7b7b7b7b7b7b70000b7b7b7b7b7b7000000000000b7b70000b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7f4cccc0000000000 00cccc66b7b7b7b7b7b7b7b7f4cccccccccccccccccccccccccccc66b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7

b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7f4cccc000000000000cccc66b7b7b7b7b7 b7b7b7cc6666666666666666666666666666ccb7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7f4cccc000000000000cccc66f4f4f4f4f4f4f4f4f4f4f4f4f4f4 f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4 f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4 f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4 f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4 f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4 f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4 f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4 f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4 f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4 f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4 f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4 f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4 f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4 f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4 f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4 f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4 f4f4f4f4f4f4cccc000000000000cccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc00 0000000000cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc000000000000cccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccc000000000000cccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccc000000000000cccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccc000000000000cccc0000000000000000000000000000000000000000000000000000000000

00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000cccc000000000000 cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccc000000000000cccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccc000000000000cccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccc000000000000ccccccccccccccccccccccccccccccccccccccccf4f4f4f4f4f4f4 f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4cccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4f4f4 f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4 f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4cccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4f4f4f4f4f4f4 f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4 f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4cc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccf4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4 f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4cc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccc6666666666666666666666666666666666666666 666666666666666666666666666666f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4 f4f4f4f4f4f4f4f4f466cccccccccccccccccccccccccccccccccccccccccccccccccccccccc0000 00000000ccccccccccccccccccccccccccccccccccccf4f4cccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccccccf4f4cccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccccccccf4f4cccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccf4f4cccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccf4f4cccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4f4cccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4f4cccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4f4cccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccc66b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7f4f4cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 66cccccccccccccccccccccccccccccccccccccccccccccccccccccccc000000000000cccccccccc ccccccccccccccccccccccccf4cccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccf4cccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccf4cccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccf4cccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccf4cccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccf4cccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccf4cccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccf4cccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccc66b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7f4f4cc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc66cccccccccccccccc cccccccccccccccccccccccccccccccccccccccc000000000000cccccccccccccccccccccccccccc ccccf4cccccccccccccccccccccccccccccc00cccccc00cccccccccccccccccccccccccccccccccc cccccccccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccf4cccccccccccccccccccccccccccccccccccccccccccccccccccccccc00cccccccc

cccccccccccc00cccccccccccccc00cccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccf4cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccc00cccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccf4cccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccc00cccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc66b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7f4f4cccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccc66cccccccccccccccccccccccccccccccccc cccccccccccccccccccccc000000000000ccccccccccccccccccccccccccccccf4cccccccccccccc cccc00000000cccccc00cccccc00cccccccccccccccccccccccccccccccccccccccccccccccccccc cccc66ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4cccccc cccccccccc00cccccccc00cccccccccccccccccccccccccccccc00cccccccccccccccccccc00cccc cccccccccc00cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 66ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4cccccccccccccc cccccc00000000cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc00 cccccccc00cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc f4cccccccccccccccccc00000000cccccccccccccccccccccccccccccccccccccccccccccccccc00 cccccccc00cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccc66b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7f4f4cccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccc cccc000000000000ccccccccccccccccccccccccccccccf4cccccccccccccccccc00cccccccccccc cccccccc00cccccccccccccccccccccccccccccccccccccccccccccccccccccccc66cccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccccccccccf4cccccccccccccccc00cccccc cc00cccccccccccccccccccccccccccccccccccccccccccccccccccc00cccccccccccccc00cccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc66cccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccf4cccccccccccccccccc00cccccccc00cc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc00cccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc66cc ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4cccccccccccccccc cc00cccccccccccccccccccccccccccccccccccccccccccccccccccccccc00cccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc66cc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccc66b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7f4f4cccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccccc000000000000cc ccccccccccccccccccccccccccf4cccccccccccccccccccc00cccccccccccc00cccccc00cccccc00 0000cccccccccccccccccc66666666666666cccccccccccccc66cccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccf4cccccccccccccccccc00cccccccc00cccccc000000cc cccc00cc0000cccc00cccccc000000cccccccc00cc0000cccccccc00cccccc000000cccccccc0000 00cccccccccccccccc66666666666666cccccccccccccc66cccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccf4cccccccccccccccccc00cccccccccccc00cccccc00cc0000cccc cccc000000cccccc00cc0000cccc000000cccccc00000000cccc00cccccccc0000cccccccc00cc00 00cccccccc000000cccccccccccccccc66666666666666cccccccccccccc66cccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccf4cccccccccccccccccccc00cccccccccccc00 cccccc00cccccc00cc0000cccccccccc000000cc00000000cccc00cccccccc0000cccccccc00cc00 00cccccccc000000cccccccccccccccc66666666666666cccccccccccccc66cccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccc66b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b70000b7b7b70000b7b7b7b7b7b7b7 b7f4f4cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc66cccccccc cccccccccccccccccccccccccccccccccccccccccccccccc000000000000cccccccccccccccccccc ccccccccf4cccccccccccccccccccc00cccccccccccc00cccccc00cccc00cccccc00cccccccccccc cccc66b7b7b7b7b7f4cccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccf4cccccccccccccccccc00cccccccc00cccc00cccccc00cccc0000cccccccc00 cccc00cccccc00cccccc0000cccc00cccccc00cccc00cccccc00cccc00cccccccccccccccccccccc 66b7b7b7b7b7f4cccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccf4cccccccccccccccccc00cccccccccccc00cccccc0000cccc00cccc00cccccc00cccc00 00cccccc00cccccc00cccccc00cccccccc00cccccc00cccc00cccccc0000cccc00cccc00cccccccc cccccccccccccc66b7b7b7b7b7f4cccccccccccccc66cccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccf4cccccccccccccccccccc00cccccccccccc00cccccc00cccccc0000 cccc00cccccc00cccccccccc00cccccccc00cccccc00cccc00cccccc0000cccc00cccc00cccccccc cccccccccccccc66b7b7b7b7b7f4cccccccccccccc66cccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccc0000000000cccccccccccccccccccc66b7b7 b7b7b7b7b7b7b700000000b7b7b7b7b700b7b7b7b700b7b7b7b7b7b7b7b7b7b7f4f4cccccccccccc cccccc00000000cccccccccccccccccccccccccccccccccccccc66cccccccccccccccccccccccccc cccccccccccccccccccccccccccccc000000000000ccccccccccccccccccccccccccccf4cccccccc cccccccccccc00000000cccccc00cccccc00cccc00cccccc00cccccccccccccccccc66b7b7b7f4cc cccccccccccccc66ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4 cccccccccccccccccccc00cccc00cccccccccccccc00cccc00cccccccccc00cccccccccccc00cccc cc00cccccc00cccccc00cccc00cccccc00cccc00cccccccccccccccccccccccc66b7b7b7f4cccccc cccccccccc66ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4cccccccc cccccccccc00cccccccccccc00cccccc00cccccc00cccc00cccccc00cccc00cccccccccccccccc00 cccccc00cccccccc00cccc00cccccccc00cccc00cccccc00cccc00cccccccccccccccccccccccc66 b7b7b7f4cccccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccf4cccccccccccccccccccc00000000cccccc00cccccc00cccccc00cccccc00cccc00cccccc cccccc00cccccccc00cccc00cccccccc00cccc00cccccc00cccc00cccccccccccccccccccccccc66 b7b7b7f4cccccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccc0000cccc0000cccccccccccccccccc66b7b7b7b7b7b7b7b700b7b7 b7b700b7b7b7b700b7b7b7b700b7b7b7b7b7b7b7b7b7b7f4f4cccccccccccccccc00cccccccc00cc cccccccccccccccccccccccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccc cccccccccccc000000000000ccccccccccccccccccccccccccccf4cccccccccccccccccccc00cccc cccccccc00cccccc00cccc0000000000cccccccccccccccccc66b7b7b7f4cccccccccccccccc66cc ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4cccccccccccccccccc cc00cccc00cccccccc00000000cccc00cccccccccc00cccccc00000000cccccc00cccccc00cccccc 00cccc0000000000cccccc0000cccccccccccccccccccc66b7b7b7f4cccccccccccccccc66cccccc ccccccccccccccccccccccccccccccccccccccccccccccccccccf4cccccccccccccccccc00cccccc cccccc00cccccc00cccccc00cccc0000000000cccc00cccccccccc00000000cccccc00cccccccc00 cccc00cccccccc00cccc00cccccc00cccccc0000cccccccccccccccccccc66b7b7b7f4cccccccccc cccccc66ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4cccccccccc cccccccccc00cccccccccccc00cccccc00cccccc00cccccc00cccc00cccccccccccc00cccccccc00 cccc00cccccccc00cccc00cccccc00cccccc0000cccccccccccccccccccc66b7b7b7f4cccccccccc cccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccc0000cccc0000cccccccccccccccccc66b7b7b7b7b7b7b700b7b7b7b7b7b700b7b7000000 00b700000000b7b7b7b7b7b7b7b7f4f4cccccccccccccc00cccccccccccc00cccccc00cc0000cccc cccccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccccc000000 000000ccccccccccccccccccccccccccccf4cccccccccccccccccccc00cccccccccccc00cccccc00 cccc00cccccccccccccccccccccccccccc66b7f4cccccccccccccccccc66cccccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccf4cccccccccccccccccccc00cccc00cccccc00 cccccc00cccc00cccccccccc00cccc00cccccc00cccccc00cccccc00cccccc00cccc00cccccccccc cccccccc00cccccccccccccccccccc66b7f4cccccccccccccccccc66cccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccf4cccccccccccccccccc00cccccccccccc00cccccc00cc

cccc00cccc00cccccccccccc00cccccccc00cccccc00cccccc00cccccccc00cccc00cccccccc00cc cc00cccccc00cccccccccc00cccccccccccccccccccc66b7f4cccccccccccccccccc66cccccccccc ccccccccccccccccccccccccccccccccccccccccccccccccccf4cccccccccccccccccccc00cccccc cccccc00cccccc00cccccc00cccccc00cccc00cccccccccccc00cccccccc00cccc00cccccccc00cc cc00cccccc00cccccccccc00cccccccccccccccccccc66b7f4cccccccccccccccccc66cccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0000cccc00 cccccccccccccccccccc66b7b7b7b7b7b7b700b7b7b7b7b7b700b7b7b700b7b7b7b700b7b7b7b7b7 b7b7b7b7b7f4f4cccccccccccccc00cccccccccccc00cccccc0000cccc00cccccccccccccccccc66 cccccccccccccccccccccccccccccccccccccccccccccccccccccccc000000000000cccccccccccc ccccccccccccccccf4cccccccccccccccccccc00cccccccccccc00cccccc00cccc00cccccc00cccc cccccccccccccccc66b7f4cccccccccccccccccc66cccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccf4cccccccccccccccccccccc0000cccccccc00cccccc00cccc00cccc cccccc00cccc00cccccc00cccccc00cccccc00cccccc00cccc00cccccc00cccccccccc00cccccccc cccccccccccc66b7f4cccccccccccccccccc66cccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccf4cccccccccccccccccccc00cccccccc00cccccccc00cccccc00cccc00cccccc 00cccc00cccccccc00cccccc00cccccc00cccccccc00cccccc00cccc00cccccc00cccccc00cccccc cccc00cccccccccccccccccccc66b7f4cccccccccccccccccc66cccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccf4cccccccccccccccccccc00cccccccccccc00cccc0000cc cccc00cccccc00cccccc00cccccccccc00cccccccc00cccccc00cccc00cccccc00cccccc00cccccc cccc00cccccccccccccccccccc66b7f4cccccccccccccccccc66cccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccc00000000cccccccccccccccccccc cc66b7b7b7b7b7b7b700b7b7b7b7b7b700b7b7b700b7b7b7b700b7b7b7b7b7b7b7b7b7b7f4f4cccc cccccccccc00cccccccccccc00cccccc00cccccc00cccccccccccccccccc66cccccccccccccccccc cccccccccccccccccccccccccccccccccccccc000000000000ccccccccccccccccccccccccccccf4 cccccccccccccccccccc00cccccccccccc00cccccc00cccccc000000cccccccccccccccccccccccc f4cccccccccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccf4cccccccccccccccccccccc0000cccccccccc000000cc00cc00cccccccccc00cccccc0000 00cc00cccc00000000cccccccc00cccccc000000cccccc000000ccccccccccccccccccccccccf4cc cccccccccccccccccc66ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4 cccccccccccccccccccccc00000000cccccccccc00000000cccccccc000000cccccc00cccccccccc 000000cc00cccccc0000cccc00cccccccc0000cccccccc00cccccc00cccc000000cccccccccccccc ccccccccccf4cccccccccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccf4cccccccccccccccccccc00cccccccccccccc0000cc00cccccc00cccccc00cccc cccc000000cccccc0000cccc00cccccccc0000cccccccc00cccccc00cccc000000cccccccccccccc ccccccccccf4cccccccccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccc0000cc0000cccccccccccccccccccc66b7b7b7b7b7b7b7 00b7b7b7b7b7b700b7b7b700b7b7b7b700b7b7b7b7b7b7b7b7b7b7f4f4cccccccccccccc00cccccc cccccc00cccccc00cccccc00cccccccccccccccccc66cccccccccccccccccccccccccccccccccccc cccccccccccccccccccc000000000000ccccccccccccccccccccccccccccccf4cccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cc66ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4cccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc66 ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4cccccccccccccccc cccccccccccccccccccccc00cccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccc66ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4 cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccc0000cc0000cccccccccccccccccccc66b7b7b7b7b7b7b700b7b7b7b7b7b700b7 b7b700b7b7b7b700b7b7b7b7b7b7b7b7b7b7f4f4cccccccccccccc00cccccccccccc00cccccc00cc

cccc00cccccccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccc cc000000000000ccccccccccccccccccccccccccccccf4cccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc66cccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccccccccf4cccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc66cccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccf4cccccccccccccccccccccccccccccccccc cccc00cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc66cccc ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4cccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc66cccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc00 00cccc0000cccccccccccccccccc66b7b7b7b7b7b7b7b700b7b7b7b700b7b7b7b700b7b7b7b700b7 b7b7b7b7b7b7b7b7b7f4f4cccccccccccccccc00cccccccc00cccccccc00cccccc00cccccccccccc cccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccccc000000000000cccc ccccccccccccccccccccccccccccf4cccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccc66cccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccf4cccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccc66cccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccf4cccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccc66cccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccf4cccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccc66cccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0000cccc000000cccccc cccccccccc66b7b7b7b7b7b7b7b7b700000000b7b7b7b7b700b7b7b7b700b7b7b7b7b7b7b7b7b7b7 f4f4cccccccccccccccccc00000000cccccccccc00cccccc00cccccccccccccccccc66cccccccccc cccccccccccccccccccccccccccccccccccccccccccccc000000000000cccccccccccccccccccccc cccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc66b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7f4f4cccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccc66cccccccccccccccccccccccccccc cccccccccccccccccccccccccccc000000000000cccccccccccccccccccccccccccccccccccc6666 cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cc6666cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccc6666cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc66 66cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc6666 cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccc6666cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

cccccccccccc6666cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccc6666cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccc66b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7f4f4cccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccc cccccccccc000000000000cccccccccccccccccccccccccccccccccccccccc666666666666666666 6666666666666666666666666666666666666666666666666666666666666666cccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc6666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 666666666666666666666666666666666666666666666666666666666666cccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666cccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc66 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666cccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccc66b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7f4f4cccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccccc00000000 0000cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccc66b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7 b7b7b7b7f4f4cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc66cc cccccccccccccccccccccccccccccccccccccccccccccccccccccc000000000000cccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 66b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7f4f4cccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccc66cccccccccccccccccccc cccccccccccccccccccccccccccccccccccc000000000000cccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc66b7b7b7b7b7b7b7b7 b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7f4f4cccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccc66cccccccccccccccccccccccccccccccccccccc cccccccccccccccccc000000000000cccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccc66f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4 f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4666666666666666666666666666666666666666666 666666666666666666666666cccccccccccccccccccccccccccccccccccccccccccccccccccccccc 000000000000cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc000000000000cccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccc000000000000cccc00000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000ccccf4f4f4f4f4f4 f4f4f4f4f4f4f466cccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff00ccccf4cccccccccccccccccccccccc66cc cccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffff00ccccf4cccccccccccccccccccccccc66cccccccccc0000000000 00cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffff00ccccf4cccccccccccccccccccccccc66cccccccccc000000000000cccc00ffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ccccf4cc cccccccccccccccccccccc66cccccccccc000000000000cccc00ffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffff00ccccf466666666666666666666 666666cccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffff00cccccccccccccccccccccccccccccccccccccccccc00 0000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffff00cccccccccccccccccccccccccccccccccccccccccc000000000000cccc00ff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 ccccccccf4ccf4ccf4ccf4ccf4ccf4cccccccccccc000000000000cccc00ffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccccc cccccccccccc66cccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff00ccccf4cccccccccccccccccccccccccccccc cccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff00cccccccccccccccccccccccccccccc66cccccccccc000000000000 cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff00ccccf4cccccccccccccccccccccccccccccccccccc000000000000cccc00ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccc

cccccccc66cccccccccc66cccccccccc000000000000cccc00ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffff00ccccf4cccccccccc66cc66cccccc cccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff00cccccccccccccc66cc66cc66cccccc66cccccccccc0000 00000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffff00ccccf4cccccc66cc66cc66cc66cccccccccccccccc000000000000cccc00ffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cc cccccccc66cc66cc66cc66cccccc66cccccccccc000000000000cccc00ffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ccccf4cccccccccccccc cccccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffff00cccccccccccccccccccccccccccccc66cccccc cccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffff00ccccf4cccccccccccccccccccccccccccccccccccc000000000000cc cc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff00cccccccccccccccccccccccccccccc66cccccccccc000000000000cccc00ffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ccccf4cccccc cccccccccccccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff00ccccccf4ccf4ccf4ccf4ccf4ccf4cc 66cccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff00ccccf4cccccccccccccccccccccccccccccccccccc000000 000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff ffffffff00ff00ff00ffffffffff00ff00ff00ffffffffffffff00ff00ff00ffffffffff00ff00ff 00ffffffffff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffff00ff00ff00ffffffffff00ff00ff00ffffffffff00ff00ff00ff ffffffffffff00ff00ff00ffffffffff00ff00ff00ffffffffff00ff00ff00ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ffffffffff00ff00ff00ff ffffffff00ff00ff00ffffffffffffff00ff00ff00ffffffffff00ff00ff00ffffffffff00ff00ff 00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff ffffffff00ff00ff00ffffffffff00ff00ff00ffffffffffffff00ff00ff00ffffffffff00ff00ff 00ffffffffff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffff00ff00ff00ffffffffff00ff00ff00ffffffffff00ff00ff00ffffffffffffff00ff00ff 00ffffffffff00ff00ff00ffffffffff00ff00ff00ffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffff00ff00ff00ffffffffff00ff00ff00ffffffffff00ff00ff00ff ffffffffffff00ff00ff00ffffffffff00ff00ff00ffffffffff00ff00ff00ffffffffffffffffff ffffffffffff00cccccccccccccccccccccccccccccc66cccccccccc000000000000cccc00ffffff ffffffffffffffffffffffffffffffffffffffffffff00000000000000ffffff00000000000000ff ffffff000000000000ff00ffffff00000000000000ffffffff000000000000ff00ffff0000000000 00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000ff ffff00000000ffffffffffffff00000000ffffffffffffff00000000ffffffffffffff00000000ff ffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff00000000000000ffffff00000000000000ffffffff000000000000ff00ffffff000000000000 00ffffffff000000000000ff00ffff000000000000ff00ffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff00000000000000ffffff00000000000000ffffffff000000000000ff 00ffffff00000000000000ffffffff000000000000ff00ffff000000000000ff00ffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff00000000000000ffffff00000000000000ff ffffff000000000000ff00ffffff00000000000000ffffffff000000000000ff00ffff0000000000 00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000ff ffff00000000000000ffffffff000000000000ff00ffffff00000000000000ffffffff0000000000 00ff00ffff000000000000ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff00000000000000ffffff00000000000000ffffffff000000000000ff00ffffff000000000000 00ffffffff000000000000ff00ffff000000000000ff00ffffffffffffffffffffffffffff00cccc f4cccccccccccccccccccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffff ffffffffffffffffffffffffffff00ff00ff00ff00ffffff00ff00ff00ff00ffffff00ff00ff00ff 00ffffffffff00ff00ff00ff00ffffff00ff00ff00ff00ffffff00ff00ff00ff00ffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff00ffff00ffffffffffff ffffffff00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffff00ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff 00ffffff00ff00ff00ff00ffffff00ff00ff00ff00ffffffffff00ff00ff00ff00ffffff00ff00ff 00ff00ffffff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffff00ff00ff00ff00ffffff00ff00ff00ff00ffffff00ff00ff00ff00ffffffffff00ff00ff 00ff00ffffff00ff00ff00ff00ffffff00ff00ff00ff00ffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffff00ff00ff00ff00ffffff00ff00ff00ff00ffffff00ff00ff00ff 00ffffffffff00ff00ff00ff00ffffff00ff00ff00ff00ffffff00ff00ff00ff00ffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff00ffffff00ff00ff00ff 00ffffff00ff00ff00ff00ffffffffff00ff00ff00ff00ffffff00ff00ff00ff00ffffff00ff00ff 00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ff 00ffff00ffffffff00ff00ffffff00ffffffff0000ffffffff00ffffffff00ff00ffffff00ffffff ff0000ffffff00ffffffff0000ffffffffffffffffffffffffffffff00cccccccccccccccccccccc cccccccc66cccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffff ffff00000000000000ff00ff00000000000000ff00ffff000000000000ff00ff00ff000000000000 00ff00ffff000000000000ff00ff00000000000000ff00ff00ffffffffffffffffffffffffffffff ffffffffffffffffffffffff00000000000000ff00ffffff00ffffffffffffffffffff00ffffffff ffffffffffff00ffffffffffffffffffff00ffffffffffffffffff00ffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffff00000000000000ff00ff00000000000000ff 00ffff000000000000ff00ff00ff00000000000000ff00ffff000000000000ff00ff000000000000 00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000ff 00ff00000000000000ff00ffff000000000000ff00ff00ff00000000000000ff00ffff0000000000 00ff00ff00000000000000ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffff ffff00000000000000ff00ff00000000000000ff00ffff000000000000ff00ff00ff000000000000 00ff00ffff000000000000ff00ff00000000000000ff00ff00ffffffffffffffffffffffffffffff ffffffffffffffffffffffff00000000000000ff00ff00000000000000ff00ffff000000000000ff 00ff00ff00000000000000ff00ffff000000000000ff00ff00000000000000ff00ff00ffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff00ff0000ff0000ffffff00ff0000ff00 00ffffffff00ff0000ff00ff00ffffff00ff0000ff0000ffffffff00ff0000ff00ff00ffff00ff00 00ff00ff00ffffffffffffffffffffffffffff00ccccf4cccccccccccccccccccccccccccccccccc cc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffff ffffffff00ff00ff00ff00ff00ffff00ffffffff00ffffffffff00ffffffff00ffffffffff00ffff ffff00ffffffffff00ffffffff00ffffffff00ffffffff00ffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffff ffffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff00ff0000ff00ff00ffff00ff0000ff00ff00ffffff00ff0000 ff0000ffffffff00ff0000ff00ff00ffffff00ff0000ff0000ffffff00ff0000ff0000ffffffffff ffffffffffffffffffff00cccccccccccccccccccccccccccccc66cccccccccc000000000000cccc 00ffffffffffffffffffffffffffffffffffffffffff00000000000000ff00ff00000000000000ff 00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff000000000000 00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000ff 00ff00ffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffff ffffffff00ffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff ffff00000000000000ff00ff00000000000000ff00ff00000000000000ff00ff00ff000000000000 00ff00ff00000000000000ff00ff00000000000000ff00ff00ff00ffffffffffffffffffffffffff ffffffffffffffffffffffff00000000000000ff00ff00000000000000ff00ff00000000000000ff 00ff00ff00000000000000ff00ff00000000000000ff00ff00000000000000ff00ff00ff00ffffff ffffffffffffffffffffffffffffffffffffffffffff00000000000000ff00ff00000000000000ff 00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff000000000000 00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000ff 00ff00000000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff000000000000 00ff00ff00000000000000ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff00ffffffff0000ffffff00ffffffff0000ffffffff00ffffffff00ff00ffffff00ff ffffff0000ffffffff00ffffffff00ff00ffff00ffffffff00ff00ffffffffffffffffffffffffff ff00ccccf4cccccccccccccccccccccccccccccccccccc000000000000cccc00ffffffffffffffff ffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff00ff00ffffffffffffff 000000ffffffffffffffff000000ffffffffffffffff000000ffffffffffffffff000000ffffffff ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffff ffffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000

000000ffffffff000000000000ffffffffff000000000000ffffffffff000000000000ffffffffff 000000000000ffffffff000000000000ffffffffffffffffffffffffffffffff00cccccccccccccc cccccccccccccccc66cccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffff ffff00000000000000ff00ff00000000000000ff00ff00000000000000ff00ff00ff000000000000 00ff00ff00000000000000ff00ff00000000000000ff00ff00ff00ffffffffffffffffffffffffff ffffffffffffffffffffffff00000000000000ff00ff00ffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff00000000000000ff00ff00000000000000ff 00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff000000000000 00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000ff 00ff00000000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff000000000000 00ff00ff00000000000000ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffff ffff00000000000000ff00ff00000000000000ff00ff00000000000000ff00ff00ff000000000000 00ff00ff00000000000000ff00ff00000000000000ff00ff00ff00ffffffffffffffffffffffffff ffffffffffffffffffffffff00000000000000ff00ff00000000000000ff00ff00000000000000ff 00ff00ff00000000000000ff00ff00000000000000ff00ff00000000000000ff00ff00ff00ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffff00ccccf4cccccccccccccccccccccccccc cccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffff ffffffff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffff ffffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffff00cccccccccccccccccccccccccccccc66cccccccccc00000000 0000cccc00ffffffffffffffffffffffffffffffffff00000000000000ff00ff00000000000000ff 00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff000000000000 00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000ff 00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff00000000000000ff00ff00000000000000ff00ff00000000000000ff00ff00ff000000000000 00ff00ff00000000000000ff00ff00000000000000ff00ff00ff00ffffffffffffffffffffffffff ffffffffffffffffffffffff00000000000000ff00ff00000000000000ff00ff00000000000000ff 00ff00ff00000000000000ff00ff00000000000000ff00ff00000000000000ff00ff00ff00ffffff ffffffffffffffffffffffffffffffffffffffffffff00000000000000ff00ff00000000000000ff 00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff000000000000 00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000ff 00ff00000000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff000000000000 00ff00ff00000000000000ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffff00ccccf4cccccccccccccccccccccccccccccccccccc000000000000cccc00ffffffff ffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffff

ffffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffff ffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff 00ffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffff00ff00ff00ffffffffff00ff00ff00ffffffffff00ff00ff00ffffffffffffff00ff00ff 00ffffffffff00ff00ff00ffffffffff00ff00ff00ffffffffffffffffffffffffffffff00cccccc cccccccccccccccccccccccc66cccccccccc000000000000cccc00ffffffffffffffffffffffffff ffff00000000000000ff00ff00000000000000ff00ff00000000000000ff00ff00ff000000000000 00ff00ff00000000000000ff00ff00000000000000ff00ff00ff000000ffffffffffffffffffffff ffffffffffffffffffffffff00000000000000ff00ff00000000000000ffffffff000000000000ff ffffffff000000000000ffffffffff000000000000ffffffff000000000000ffffffff00000000ff ffffffffffffffffffffffffffffffffffffffffffff00000000000000ff00ff00000000000000ff 00ff00000000000000ff00ff000000000000000000ff00ff00000000000000ff00ff000000000000 00ff00ff00000000000000ff00ffffffffffffffffffffffffffffffffffffff00000000000000ff 00ff00000000000000ff00ff00000000000000ff00ff000000000000000000ff00ff000000000000 00ff00ff00000000000000ff00ff00000000000000ff00ffffffffffffffffffffffffffffffffff ffff00000000000000ff00ff00000000000000ff00ff00000000000000ff00ff0000000000000000 00ff00ff00000000000000ff00ff00000000000000ff00ff00000000000000ff00ffffffffffffff ffffffffffffffffffffffff00000000000000ff00ff00000000000000ff00ff00000000000000ff 00ff000000000000000000ff00ff00000000000000ff00ff00000000000000ff00ff000000000000 00ff00ffffffffffffffffffffffffffffffffffffff000000000000ffffffff00000000000000ff ffff00000000000000ffffffff000000000000ff00ffffff00000000000000ffffffff0000000000 00ff00ffff000000000000ff00ffffffffffffffffffffffffffff00ccccf4cccccccccccccccccc cccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffff00ffffffff00ff 00ff0000ffffffff00ff00ff00ff00ffffffff0000ff00ffff00ffffffff00ff00ff00ff00ffffff ff0000ff00ff00ffffffff0000ff00ff00ffffffffffffffffffffffffffffffffffffffffffffff ffffff00ffffffff00ff00ff00ff00ff00ff00ff00ffffff00ffffffff00ffffffffff00ffffffff 00ffffffffff00ffffffff00ffffffff00ffffffff00ffffffff00ffffffffffffffffffffffffff ffffffffffffffffffffffffff00ffffffff00ff00ff0000ffffffff00ff00ff00ff00ffffffff00 00ff00ff0000ffffffff00ff00ff00ff00ffffffff0000ff00ff00ffffffff0000ff00ff00ff00ff 00ff00ffffffffffffffffffffffffffffffffffffffff00ffffffff00ff00ff0000ffffffff00ff 00ff00ff00ffffffff0000ff00ff0000ffffffff00ff00ff00ff00ffffffff0000ff00ff00ffffff ff0000ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffff000000000000ff 00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ff00000000 000000ff00ff00000000000000ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffff ffffff00ffffffff00ff00ff0000ffffffff00ff00ff00ff00ffffffff0000ff00ff0000ffffffff 00ff00ff00ff00ffffffff0000ff00ff00ffffffff0000ff00ff00ff00ff00ff00ffffffffffffff ffffffffffffffffffffffffff00ffffffff00ffffffff00ffffffff00ff00ffff00ffffffff00ff 00ffffff00ffffffff0000ffffffff00ffffffff00ff00ffffff00ffffffff0000ffffff00ffffff ff0000ffffffffffffffffffffffffffffff00cccccccccccccccccccccccccccccc66cccccccccc 000000000000cccc00ffffffffffffffffffffffffffffff00ff0000ff0000ff00ff00ff0000ff00 00ff00ffff00ff0000ff00ff00ff00ff00ff0000ff0000ff00ffff00ff0000ff00ff00ff0000ff00 00ff00ff00ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff00ff0000ff00 00ff00000000000000ff00ffffffff00ffffffff00ffffffffff00ffffffff00ffffffffff00ffff ffff00ffffffff00ffffffff00ffffffff00ffffffffffffffffffffffffffffffffffffffffffff ffffffff00ff0000ff0000ff000000ff0000ff0000ff00000000ff0000ff00ff0000000000ff0000 ff0000ff00000000ff0000ff00ff00000000ff0000ff00ff00000000000000ff00ff00ffffffffff ffffffffffffffffffffffffffff00ff0000ff0000ff000000ff0000ff0000ff00000000ff0000ff 00ff0000000000ff0000ff0000ff00000000ff0000ff00ff00000000ff0000ff00ff000000000000 00ff00ff00ffffffffffffffffffffffffffffffffffffff00000000000000ff0000000000000000 00ff000000000000000000ff0000000000000000000000ff000000000000000000ff000000000000 000000ff00000000000000ff00ff00ffffffffffffffffffffffffffffffffffffff00ff0000ff00 00ff000000ff0000ff0000ff00000000ff0000ff00ff0000000000ff0000ff0000ff00000000ff00 00ff00ff00000000ff0000ff00ff00000000000000ff00ff00ffffffffffffffffffffffffffffff ffffffff00ffffffff00ffffffff00ff0000ff0000ffffff00ff0000ff0000ffffffff00ff0000ff 00ff00ffffff00ff0000ff0000ffffffff00ff0000ff00ff00ffff00ff0000ff00ff00ffffffffff ffffffffffffffffff00ccccf4cc66cc66cc66cc66cc66cc66cccccccccccc000000000000cccc00

ffffffffffffffffffffffffffffff00ff0000ff00ff00ffff00ff0000ff00ff00ffffff00ff0000 ff0000ffffffff00ff0000ff00ff00ffffff00ff0000ff0000ffffff00ff0000ff0000ffffff00ff ffffff00ffffffffffffffffffffffffffffffffffffffffff00ff0000ff00ff00ff00ff00ff00ff 00ff00ffffff00ffffffff00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffffff00ff ffffff00ffffffff00ffffffff00ffffffffffffffffffffffffffffffffffffffffff00ff0000ff 00ff00ff0000ff0000ff00ff00ff00ff00ff0000ff0000ff00ff0000ff0000ff00ff00ff00ff00ff 0000ff0000ff00ff00ff0000ff0000ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffff ffffffffff00ff0000ff00ff00ff0000ff0000ff00ff00ff00ff00ff0000ff0000ff00ff0000ff00 00ff00ff00ff00ff00ff0000ff0000ff00ff00ff0000ff0000ff00ff00ff00ff00ff00ffffffffff ffffffffffffffffffffffffffffff000000000000ff00ff00000000000000ff00ff00ff00000000 000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ff 00ff00ff00ffffffffffffffffffffffffffffffffffffffff00ff0000ff00ff00ff0000ff0000ff 00ff00ff00ff00ff0000ff0000ff00ff0000ff0000ff00ff00ff00ff00ff0000ff0000ff00ff00ff 0000ff0000ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffff00ffffffff 00ffffffff00ff0000ff00ff00ffff00ff0000ff00ff00ffffff00ff0000ff0000ffffffff00ff00 00ff00ff00ffffff00ff0000ff0000ffffff00ff0000ff0000ffffffffffffffffffffffffffffff 00cccccccccccccccccccccccccccccc66cccccccccc000000000000cccc00ffffffffffffffffff ffffffffffff00ffffffff0000ffffff00ffffffff0000ffffffff00ffffffff00ff00ffffff00ff ffffff0000ffffffff00ffffffff00ff00ffff00ffffffff00ff00ffffffffffffff00ffffffffff ffffffffffffffffffffffffffffffff00ffffffff0000000000000000ff00ff00ffffffff00ffff ffff00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffffff00ffffffff00ffffffffff ffffffff00ffffffffffffffffffffffffffffffffffffffffff00ffffffff000000000000ffffff ff00000000000000ffffffff00000000000000ffffffff00000000000000ffffffff000000000000 ffffffff00000000000000ff00ff00ff00ffffffffffffffffffffffffffffffffffffff00ffffff ff000000000000ffffffff00000000000000ffffffff00000000000000ffffffff00000000000000 ffffffff000000000000ffffffff00000000000000ff00ff00ff00ffffffffffffffffffffffffff ffffffffffff00000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000ff00ff00ff00ffffff ffffffffffffffffffffffffffffffff00ffffffff000000000000ffffffff00000000000000ffff ffff00000000000000ffffffff00000000000000ffffffff000000000000ffffffff000000000000 00ff00ff00ff00ffffffffffffffffffffffffffffffffffffff00ffffffff00ffffffff00ffffff ff0000ffffff00ffffffff0000ffffffff00ffffffff00ff00ffffff00ffffffff0000ffffffff00 ffffffff00ff00ffff00ffffffff00ff00ffffffffffffffffffffffffffff00ccccf4cccccccccc cccccccccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffff000000 000000ffffffff000000000000ffffffffff000000000000ffffffffff000000000000ffffffffff 000000000000ffffffff000000000000ffffffffffffff000000ffffffffffffffffffffffffffff ffffffffffffff000000000000ff00ff00ff00ff00ff00ffffffffff000000000000ffffffffff00 0000000000ffffffffff000000000000ffffffff000000000000ffffffffffffff000000ffffffff ffffffffffffffffffffffffffffffffff000000000000ff00ff00000000000000ff00ff00ff0000 0000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff 00ff00ff00ffffffffffffffffffffffffffffffffffffffffffff000000000000ff00ff00000000 000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff 00000000000000ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffff000000 000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ff 00000000000000ff00ff00000000000000ff00ff00ff00ff00ffffffffffffffffffffffffffffff ffffffffffffff000000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff0000 0000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ff00ff00ffffffffff ffffffffffffffffffffffffffffffffff000000000000ffffffff000000000000ffffffff000000 00000000ffffffff00000000000000ffffffff00000000000000ffffffff000000000000ffffffff 000000000000ffffffffffffffffffffffffffffffff00cccccccccccccccccccccccccccccc66cc cccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff00000000000000ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff00000000000000ff00ff00000000000000ff00ff00000000000000ff 00ff00ff00000000000000ff00ff00000000000000ff00ff00000000000000ff00ff00ff00ffffff ffffffffffffffffffffffffffffffffffffffffffff00000000000000ff00ff00000000000000ff 00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff000000000000 00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000ff

00ff00000000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff000000000000 00ff00ff00000000000000ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffff ffff00000000000000ff00ff00000000000000ff00ff00000000000000ff00ff00ff000000000000 00ff00ff00000000000000ff00ff00000000000000ff00ff00ff00ffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffff00ccccf4cccccccccccccccccccccccccccccccccccc0000000000 00cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff 00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffff00cccccccccccccccccccccccccccccc66cccccccccc000000000000cccc00ffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff00000000000000ff00ff00ffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000ff 00ff00000000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff000000000000 00ff00ff00000000000000ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffff ffff00000000000000ff00ff00000000000000ff00ff00000000000000ff00ff00ff000000000000 00ff00ff00000000000000ff00ff00000000000000ff00ff00ff00ffffffffffffffffffffffffff ffffffffffffffffffffffff00000000000000ff00ff00000000000000ff00ff00000000000000ff 00ff00ff00000000000000ff00ff00000000000000ff00ff00000000000000ff00ff00ff00ffffff ffffffffffffffffffffffffffffffffffffffffffff00000000000000ff00ff00000000000000ff 00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff000000000000 00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ccccf4cc cccc66cc66cc66cc66cccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffff ffffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccc66cc66cc66cc66cc cccc66cccccccccc000000000000cccc00ffffffffffffffffffffffffffffff000000000000ffff ffff000000000000ffffffffff000000000000ffffffffff000000000000ffffffffff0000000000 00ffffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffff00000000000000ff00ff00ff00ff00ff00ffffffff000000000000ffffffffff000000000000 ffffffffff000000000000ffffffff000000000000ffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff00000000000000ff00ff00000000000000ff00ff00000000000000ff 00ff00ff00000000000000ff00ff00000000000000ff00ff00000000000000ff00ff00ff00ff00ff 00ff00ffffffffffffffffffffffffffffffffffffff00000000000000ff00ff00000000000000ff 00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff000000000000 00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffff00000000000000ff 00ff00000000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff000000000000 00ff00ff00000000000000ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffff ffff00000000000000ff00ff00000000000000ff00ff00000000000000ff00ff00ff000000000000 00ff00ff00000000000000ff00ff00000000000000ff00ff00ff00ff00ff00ff00ffffffffffffff ffffffffffffffffffffffff000000000000ffffffff000000ff00ff00ffffffff0000ff00ff00ff ffffffff00ff00ff00ff00ffffffff0000ff00ff00ffffffff0000ff00ff00ff00ffffffffff00ff 00ff00ffffffffffffffffffffffffffff00ccccf4cccccc66cc66cc66cccccccccccccccccccc00 0000000000cccc00ffffffffffffffffffffffffffffff00ffffffff00ffffffff00ffffffff00ff ffffffff00ffffffff00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffffff00ffffff ff00ffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ff 00ff00000000000000ff00ffffff00ffffffff00ffffffffff00ffffffff00ffffffffff00ffffff ff00ffffffff00ffffffff00ffffffff00000000ffffffffffffffffffffffffffffffffffffffff ffffff00ffffffff00ff00ff0000ffffffff00ff00ff000000ffffffff0000ff00ff0000ffffffff 00ff00ff000000ffffffff0000ff00ff00ffffffff0000ff00ff00000000000000ffffffffffffff ffffffffffffffffffffffffff00ffffffff00ff00ff0000ffffffff00ff00ff000000ffffffff00 00ff00ff0000ffffffff00ff00ff000000ffffffff0000ff00ff00ffffffff0000ff00ff00000000 000000ffffffffffffffffffffffffffffffffffffffff000000000000ff00ff00000000000000ff 00ff000000000000000000ff00ff00000000000000ff00ff000000000000000000ff00ff00000000 000000ff00ff00000000000000ffffffffffffffffffffffffffffffffffffffff00ffffffff00ff 00ff0000ffffffff00ff00ff000000ffffffff0000ff00ff0000ffffffff00ff00ff000000ffffff ff0000ff00ff00ffffffff0000ff00ff00000000000000ffffffffffffffffffffffffffffffffff ffffff00ffffffff00ffffffff000000000000ff00ffff000000000000ff00ffffff000000000000 00ffffffff000000000000ff00ffffff00000000000000ffffff00000000000000ffffffffffffff ffffffffffffffff00cccccccccccccc66cc66cccccccccc66cccccccccc000000000000cccc00ff ffffffffffffffffffffffffffff00ffffffff00ffffffff00ffffffff00ffffffffff00ffffffff 00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffffff00ffffffff00ffffffff00ffff ffffffffffffffffffffffffffffffffffffffffffffffff00ff0000ff0000ff00ff00ff00ff00ff 00ffffffff00ffffffff00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffffff00ffff ffff00ffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff00ff0000ff00 00ff00ff00ff0000ff0000ff00ff0000ff0000ff00ff00ff00ff00ff0000ff0000ff00ff0000ff00 00ff00ff00ff0000ff0000ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffff ffffffff00ff0000ff0000ff00ff00ff0000ff0000ff00ff0000ff0000ff00ff00ff00ff00ff0000 ff0000ff00ff0000ff0000ff00ff00ff0000ff0000ff00ff00ff00ff00ff00ff00ff00ffffffffff ffffffffffffffffffffffffffff00000000000000ff00ff00000000000000ff00ff000000000000 00ff00ff00ff00000000000000ff00ff00000000000000ff00ff00000000000000ff00ff00ff00ff 00ff00ff00ffffffffffffffffffffffffffffffffffffff00ff0000ff0000ff00ff00ff0000ff00 00ff00ff0000ff0000ff00ff00ff00ff00ff0000ff0000ff00ff0000ff0000ff00ff00ff0000ff00 00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffff00ffffffff00 ffffffff00ffffffff0000ffffff00ffffffff0000ffffffff00ffffffff00ff00ffffff00ffffff ff0000ffffffff00ffffffff00ff00ffff00ffffffff00ff00ffffffffffffffffffffffffffff00 ccccf4cccccccccc66cccccccccccccccccccccccc000000000000cccc00ffffffffffffffffffff ffffffffff00ffffffff00ffffffff00ffffffff00ffffffffff00ffffffff00ffffffffff00ffff ffff00ffffffffff00ffffffff00ffffffff00ffffffff00ffffffff00ffffffffffffffffffffff ffffffffffffffffffffffffffffff00ff0000ff00ff00000000000000ff00ff00ffffff00ffffff ff00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffffff00ffffffff00ffffffff00ff ffffffffffffffffffffffffffffffffffffffffffffffffff00ff0000ff00ff00000000ff0000ff 00ff0000000000ff0000ff0000ff00000000ff0000ff00ff0000000000ff0000ff0000ff000000ff 0000ff0000ff00000000000000ff00ffffffffffffffffffffffffffffffffffffffff00ff0000ff 00ff00000000ff0000ff00ff0000000000ff0000ff0000ff00000000ff0000ff00ff0000000000ff 0000ff0000ff000000ff0000ff0000ff00000000000000ff00ffffffffffffffffffffffffffffff ffffffffff000000000000ff000000000000000000ff0000000000000000000000ff000000000000 000000ff0000000000000000000000ff000000000000000000ff00000000000000ff00ffffffffff ffffffffffffffffffffffffffffff00ff0000ff00ff00000000ff0000ff00ff0000000000ff0000

ff0000ff00000000ff0000ff00ff0000000000ff0000ff0000ff000000ff0000ff0000ff00000000 000000ff00ffffffffffffffffffffffffffffffffffffffff00ffffffff00ffffffff00ff0000ff 00ff00ffff00ff0000ff00ff00ffffff00ff0000ff0000ffffffff00ff0000ff00ff00ffffff00ff 0000ff0000ffffff00ff0000ff0000ffffffffffffffffffffffffffffff00cccccccccccccccccc cccccccccccc66cccccccccc000000000000cccc00ffffffffffffffffffffffffffffff00ffffff ff00ffffffff00ffffffff00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffffffff00 ffffffff00ffffffff00ffffffff00ffffffff00ffffffff00ffffffffffffffffffffffffffffff ffffffffffff00ffffffff0000ff00ff00ff00ff00ff00ffffffff00ffffffff00ffffffffff00ff ffffff00ffffffffff00ffffffff00ffffffff00ffffffff00ffffffff00ffffffff00ffffffffff ffffffffffffffffffffffffffffffff00ffffffff0000ff00ff00ffffffff0000ff00ff0000ffff ffff00ff00ff00ff00ffffffff0000ff00ff0000ffffffff00ff00ff0000ffffffff00ff00ff00ff 00ff00ff00ff00ffffffffffffffffffffffffffffffffffffff00ffffffff0000ff00ff00ffffff ff0000ff00ff0000ffffffff00ff00ff00ff00ffffffff0000ff00ff0000ffffffff00ff00ff0000 ffffffff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffff00000000 000000ff00ff00000000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff0000 0000000000ff00ff00000000000000ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffff ffffffffffff00ffffffff0000ff00ff00ffffffff0000ff00ff0000ffffffff00ff00ff00ff00ff ffffff0000ff00ff0000ffffffff00ff00ff0000ffffffff00ff00ff00ff00ff00ff00ff00ffffff ffffffffffffffffffffffffffffffff00ffffffff00ffffffff00ff0000ff0000ffffff00ff0000 ff0000ffffffff00ff0000ff00ff00ffffff00ff0000ff0000ffffffff00ff0000ff00ff00ffff00 ff0000ff00ff00ffffffffffffffffffffffffffff00ccccf4cccccccccccccccccccccccccccccc cccccc000000000000cccc00ffffffffffffffffffffffffffffff000000000000ffffffff000000 000000ffffffffff000000000000ffffffffff000000000000ffffffffff000000000000ffffffff 000000000000ffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff000000 000000000000000000ff00ff00ff00ffffff000000000000ffffffffff000000000000ffffffffff 000000000000ffffffff000000000000ffffffffffffffffff00ffffffffffffffffffffffffffff ffffffffffffff000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000ff00ff00ffffff ffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 000000ff00ff00ffffffffffffffffffffffffffffffffffffffff00000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000ff00ff00ffffffffffffffffffffffffffffffffffffffff000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000ff00ff00ffffffffffffffffffffffffff ffffffffffffff000000000000ffffffff00ffffffff00ff00ffff00ffffffff00ff00ffffff00ff ffffff0000ffffffff00ffffffff00ff00ffffff00ffffffff0000ffffff00ffffffff0000ffffff ffffffffffffffffffffffff00cccccccccccccccccccccccccccccc66cccccccccc000000000000 cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff 00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff ffffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffff ffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff ffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffff000000000000ffffffff000000000000ffffffffff000000000000ffffffffff 000000000000ffffffffff000000000000ffffffff000000000000ffffffffffffffffffffffffff ffffff00ccccf4cccccccccccccccccccccccccccccccccccc000000000000cccc00ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffff000000000000ff00ff00ff00ffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000ff

00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ff00000000 000000ff00ff00000000000000ff00ff00ffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff000000000000 00ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ffffffffffffffffffffffffff ffffffffffffffffffffffffff000000000000ff00ff00000000000000ff00ff00ff000000000000 00ff00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ffffff ffffffffffffffffffffffffffffffffffffffffffffff000000000000ff00ff00000000000000ff 00ff00ff00000000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff00000000 000000ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccc66cc 66cc66cc66cc66cc66cc66cccccccccc000000000000cccc00ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffff ffffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffff ffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccccccccccccccc cccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffff000000000000ff00ff00000000000000ff00ff00ff000000000000 00ff00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ffffff ffffffffffffffffffffffffffffffffffffffffffffff000000000000ff00ff00000000000000ff 00ff00ff00000000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff00000000 000000ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000ff 00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ff00000000 000000ff00ff00000000000000ff00ff00ffffffffffffffffffffffffffffffffffffffffffffff ffffff000000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff000000000000 00ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff00cccccccccccccccccc66cccccccccccccccccccccc0000 00000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff 00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffff ffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff ffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffff ffffffffffffffffffffffffff000000000000ffffffff000000000000ffffffffff000000000000 ffffffffff000000000000ffffffffff000000000000ffffffff000000000000ffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffff000000000000ff00ff00ff00ff00ff00ff 00ffffff000000000000ffffffffff000000000000ffffffffff000000000000ffffffff00000000 0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000ff 00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ff00000000 000000ff00ff00000000000000ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffff ffffff000000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff000000000000 00ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ff00ff00ff00ffffffffffffff ffffffffffffffffffffffffff000000000000ff00ff00000000000000ff00ff00ff000000000000 00ff00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ff00ff 00ff00ffffffffffffffffffffffffffffffffffffffff000000000000ff00ff00000000000000ff 00ff00ff00000000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff00000000 000000ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffff000000000000ff ffffff0000ff00ff00ff00ffffff00ff00ff00ff00ffffffff0000ff00ff00ffffffffff00ff00ff 00ff00ffffff000000ff00ff00ffffffffff00ff00ff00ffffffffffffffffffffffffffffff00cc cccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffff ffffffff00ffffffff00ffffffff00ffffffff00ffffffffff00ffffffff00ffffffffff00ffffff ff00ffffffffff00ffffffff00ffffffff00ffffffff00ffffffff00000000ffffffffffffffffff ffffffffffffffffffffffffffff00ffffffff0000ff00ff00000000000000ffffffff00ffffffff 00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffffff00ffffffff00ffffffff000000 00ffffffffffffffffffffffffffffffffffffffffffffff00ffffffff0000ff00ff00ffffffff00 00ff00ff0000ffffffff00ff00ff000000ffffffff0000ff00ff0000ffffffff00ff00ff0000ffff ffff00ff00ff00000000000000ff00ffffffffffffffffffffffffffffffffffffff00ffffffff00 00ff00ff00ffffffff0000ff00ff0000ffffffff00ff00ff000000ffffffff0000ff00ff0000ffff ffff00ff00ff0000ffffffff00ff00ff00000000000000ff00ffffffffffffffffffffffffffffff ffffffff00000000000000ff00ff00000000000000ff00ff00000000000000ff00ff000000000000 000000ff00ff00000000000000ff00ff00000000000000ff00ff00000000000000ff00ffffffffff ffffffffffffffffffffffffffff00ffffffff0000ff00ff00ffffffff0000ff00ff0000ffffffff 00ff00ff000000ffffffff0000ff00ff0000ffffffff00ff00ff0000ffffffff00ff00ff00000000 000000ff00ffffffffffffffffffffffffffffffffffffff00ffffffff00ffffffff000000000000 00ffffff00000000000000ffffffff000000000000ff00ffffff00000000000000ffffffff000000 000000ff00ffff000000000000ff00ffffffffffffffffffffffffffff00cccccccccccccccc6666 66cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffff00ffffffff 00ffffffff00ffffffff00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffffffff00ff ffffff00ffffffff00ffffffff00ffffffff00ffffffffffffffffffffffffffffffffffffffffff ffffffffff00ff0000ff00ff00ff00ff00ff00ff00ff00ffffff00ffffffff00ffffffffff00ffff ffff00ffffffffff00ffffffff00ffffffff00ffffffff00ffffffff00ffffffffffffffffffffff ffffffffffffffffffffffffffffff00ff0000ff00ff00ff0000ff0000ff00ff00ff00ff00ff0000 ff0000ff00ff0000ff0000ff00ff00ff00ff00ff0000ff0000ff00ff00ff0000ff0000ff00ff00ff 00ff00ff00ffffffffffffffffffffffffffffffffffffffff00ff0000ff00ff00ff0000ff0000ff 00ff00ff00ff00ff0000ff0000ff00ff0000ff0000ff00ff00ff00ff00ff0000ff0000ff00ff00ff 0000ff0000ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffff0000000000 00ff00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ff0000 0000000000ff00ff00000000000000ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffff ffffffffff00ff0000ff00ff00ff0000ff0000ff00ff00ff00ff00ff0000ff0000ff00ff0000ff00 00ff00ff00ff00ff00ff0000ff0000ff00ff00ff0000ff0000ff00ff00ff00ff00ff00ffffffffff ffffffffffffffffffffffffffffff00ffffffff00ffffffff00ffffffff00ff00ffff00ffffffff 00ff00ffffff00ffffffff0000ffffffff00ffffffff00ff00ffffff00ffffffff0000ffffff00ff ffffff0000ffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccc cccc000000000000cccc00ffffffffffffffffffffffffffffff00ffffffff00ffffffff00ffffff ff00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffffff00 ffffffff00ffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff00ff0000 ff0000ff00000000000000ff00ffffffff00ffffffff00ffffffffff00ffffffff00ffffffffff00 ffffffff00ffffffff00ffffffff00ffffffff00ffffffffffffffffffffffffffffffffffffffff ffffffffffff00ff0000ff0000ff000000ff0000ff0000ff00000000ff0000ff00ff0000000000ff 0000ff0000ff00000000ff0000ff00ff00000000ff0000ff00ff00000000000000ff00ff00ffffff ffffffffffffffffffffffffffffffff00ff0000ff0000ff000000ff0000ff0000ff00000000ff00

00ff00ff0000000000ff0000ff0000ff00000000ff0000ff00ff00000000ff0000ff00ff00000000 000000ff00ff00ffffffffffffffffffffffffffffffffffffff00000000000000ff000000000000 000000ff000000000000000000ff0000000000000000000000ff000000000000000000ff00000000 0000000000ff00000000000000ff00ff00ffffffffffffffffffffffffffffffffffffff00ff0000 ff0000ff000000ff0000ff0000ff00000000ff0000ff00ff0000000000ff0000ff0000ff00000000 ff0000ff00ff00000000ff0000ff00ff00000000000000ff00ff00ffffffffffffffffffffffffff ffffffffffff00ffffffff00ffffffff00ff0000ff0000ffffff00ff0000ff0000ffffffff00ff00 00ff00ff00ffffff00ff0000ff0000ffffffff00ff0000ff00ff00ffff00ff0000ff00ff00ffffff ffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cc cc00ffffffffffffffffffffffffffffff00ffffffff00ffffffff00ffffffff00ffffffffff00ff ffffff00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffffff00ffffffff00ffffffff 00ffffffff00ffffffffffffffffffffffffffffffffffffffffff00ffffffff00ff00ff00ff00ff 00ff00ff00ffffff00ffffffff00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffffff 00ffffffff00ffffffff00ffffffff00ffffffffffffffffffffffffffffffffffffffffff00ffff ffff00ff00ff0000ffffffff00ff00ff00ff00ffffffff0000ff00ff0000ffffffff00ff00ff00ff 00ffffffff0000ff00ff00ffffffff0000ff00ff00ff00ff00ff00ffffffffffffffffffffffffff ffffffffffffff00ffffffff00ff00ff0000ffffffff00ff00ff00ff00ffffffff0000ff00ff0000 ffffffff00ff00ff00ff00ffffffff0000ff00ff00ffffffff0000ff00ff00ff00ff00ff00ffffff ffffffffffffffffffffffffffffffffff000000000000ff00ff00000000000000ff00ff00ff0000 0000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff 00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffff00ffffffff00ff00ff0000ffff ffff00ff00ff00ff00ffffffff0000ff00ff0000ffffffff00ff00ff00ff00ffffffff0000ff00ff 00ffffffff0000ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffff00ffff ffff00ffffffff00ff0000ff00ff00ffff00ff0000ff00ff00ffffff00ff0000ff0000ffffffff00 ff0000ff00ff00ffffff00ff0000ff0000ffffff00ff0000ff0000ffffffffffffffffffffffffff ffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffff ffffffffffffffff000000000000ffffffff000000000000ffffffffff000000000000ffffffffff 000000000000ffffffffff000000000000ffffffff000000000000ffffffffffffffffff00ffffff ffffffffffffffffffffffffffffffffffff00000000000000000000000000ff00ff00ffffffff00 0000000000ffffffffff000000000000ffffffffff000000000000ffffffff000000000000ffffff ffffffffffff00ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000ff00ff00ff00ffffffffffffffffffffffffffffffffffffff0000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000ff00ff00ff00ffffffffffffffffffffff ffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000ff00ff00ff00ff ffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 000000ff00ff00ff00ffffffffffffffffffffffffffffffffffffff000000000000ffffffff00ff ffffff0000ffffff00ffffffff0000ffffffff00ffffffff00ff00ffffff00ffffffff0000ffffff ff00ffffffff00ff00ffff00ffffffff00ff00ffffffffffffffffffffffffffff00cccccccccccc cccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffff ffffffffffffffffffffffffffffffff00ff00ff00ff00ff00ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffff ffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff00 0000000000ffffffffff000000000000ffffffffff000000000000ffffffffff000000000000ffff ffff000000000000ffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccc cccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffff00000000000000ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffff00000000000000ff00ff00000000000000ff00ff000000000000 00ff00ff00ff00000000000000ff00ff00000000000000ff00ff00000000000000ff00ff00ff00ff ffffffffffffffffffffffffffffffffffffffffffffffff00000000000000ff00ff000000000000 00ff00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00000000 000000ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 00ff00ff00000000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff00000000 000000ff00ff00000000000000ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffff ffffffff00000000000000ff00ff00000000000000ff00ff00000000000000ff00ff00ff00000000 000000ff00ff00000000000000ff00ff00000000000000ff00ff00ff00ffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000 000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff 00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff00000000000000ff00ff00ffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 00ff00ff00000000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff00000000 000000ff00ff00000000000000ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffff ffffffff00000000000000ff00ff00000000000000ff00ff00000000000000ff00ff00ff00000000 000000ff00ff00000000000000ff00ff00000000000000ff00ff00ff00ffffffffffffffffffffff ffffffffffffffffffffffffffff00000000000000ff00ff00000000000000ff00ff000000000000 00ff00ff00ff00000000000000ff00ff00000000000000ff00ff00000000000000ff00ff00ff00ff ffffffffffffffffffffffffffffffffffffffffffffffff00000000000000ff00ff000000000000 00ff00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00000000 000000ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccc cccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff00ff00ff00ff00ff00ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff

00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666 cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffff000000000000 ffffffff000000000000ffffffffff000000000000ffffffffff000000000000ffffffffff000000 000000ffffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffff00000000000000ff00ff00ff00ff00ff00ffffffff000000000000ffffffffff00000000 0000ffffffffff000000000000ffffffff000000000000ffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffff00000000000000ff00ff00000000000000ff00ff000000000000 00ff00ff00ff00000000000000ff00ff00000000000000ff00ff00000000000000ff00ff00ff00ff 00ff00ff00ffffffffffffffffffffffffffffffffffffff00000000000000ff00ff000000000000 00ff00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00000000 000000ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffff000000000000 00ff00ff00000000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff00000000 000000ff00ff00000000000000ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffff ffffffff00000000000000ff00ff00000000000000ff00ff00000000000000ff00ff00ff00000000 000000ff00ff00000000000000ff00ff00000000000000ff00ff00ff00ff00ff00ff00ffffffffff ffffffffffffffffffffffffffff000000000000ffffffff000000ff00ff00ffffffff0000ff00ff 00ffffffffff00ff00ff00ff00ffffffff0000ff00ff00ffffffff0000ff00ff00ff00ffffffffff 00ff00ff00ffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccc cc000000000000cccc00ffffffffffffffffffffffffffffff00ffffffff00ffffffff00ffffffff 00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffffff00ff ffffff00ffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffff00ffffffff 00ff00ff00000000000000ff00ffffff00ffffffff00ffffffffff00ffffffff00ffffffffff00ff ffffff00ffffffff00ffffffff00ffffffff00000000ffffffffffffffffffffffffffffffffffff ffffffffff00ffffffff00ff00ff0000ffffffff00ff00ff000000ffffffff0000ff00ff0000ffff ffff00ff00ff000000ffffffff0000ff00ff00ffffffff0000ff00ff00000000000000ffffffffff ffffffffffffffffffffffffffffff00ffffffff00ff00ff0000ffffffff00ff00ff000000ffffff ff0000ff00ff0000ffffffff00ff00ff000000ffffffff0000ff00ff00ffffffff0000ff00ff0000 0000000000ffffffffffffffffffffffffffffffffffffffff000000000000ff00ff000000000000 00ff00ff000000000000000000ff00ff00000000000000ff00ff000000000000000000ff00ff0000 0000000000ff00ff00000000000000ffffffffffffffffffffffffffffffffffffffff00ffffffff 00ff00ff0000ffffffff00ff00ff000000ffffffff0000ff00ff0000ffffffff00ff00ff000000ff ffffff0000ff00ff00ffffffff0000ff00ff00000000000000ffffffffffffffffffffffffffffff ffffffffff00ffffffff00ffffffff000000000000ff00ffff000000000000ff00ffffff00000000 000000ffffffff000000000000ff00ffffff00000000000000ffffff00000000000000ffffffffff ffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc 00ffffffffffffffffffffffffffffff00ffffffff00ffffffff00ffffffff00ffffffffff00ffff ffff00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffffff00ffffffff00ffffffff00 ffffffffffffffffffffffffffffffffffffffffffffffffffff00ff0000ff0000ff00ff00ff00ff 00ff00ffffffff00ffffffff00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffffff00 ffffffff00ffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff00ff0000 ff0000ff00ff00ff0000ff0000ff00ff0000ff0000ff00ff00ff00ff00ff0000ff0000ff00ff0000 ff0000ff00ff00ff0000ff0000ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffff ffffffffffff00ff0000ff0000ff00ff00ff0000ff0000ff00ff0000ff0000ff00ff00ff00ff00ff 0000ff0000ff00ff0000ff0000ff00ff00ff0000ff0000ff00ff00ff00ff00ff00ff00ff00ffffff ffffffffffffffffffffffffffffffff00000000000000ff00ff00000000000000ff00ff00000000 000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00000000000000ff00ff00ff 00ff00ff00ff00ffffffffffffffffffffffffffffffffffffff00ff0000ff0000ff00ff00ff0000 ff0000ff00ff0000ff0000ff00ff00ff00ff00ff0000ff0000ff00ff0000ff0000ff00ff00ff0000 ff0000ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffff00ffffff ff00ffffffff00ffffffff0000ffffff00ffffffff0000ffffffff00ffffffff00ff00ffffff00ff ffffff0000ffffffff00ffffffff00ff00ffff00ffffffff00ff00ffffffffffffffffffffffffff ff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffff ffffffffffffff00ffffffff00ffffffff00ffffffff00ffffffffff00ffffffff00ffffffffff00 ffffffff00ffffffffff00ffffffff00ffffffff00ffffffff00ffffffff00ffffffffffffffffff ffffffffffffffffffffffffffffffffff00ff0000ff00ff00000000000000ff00ff00ffffff00ff

ffffff00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffffff00ffffffff00ffffffff 00ffffffffffffffffffffffffffffffffffffffffffffffffffff00ff0000ff00ff00000000ff00 00ff00ff0000000000ff0000ff0000ff00000000ff0000ff00ff0000000000ff0000ff0000ff0000 00ff0000ff0000ff00000000000000ff00ffffffffffffffffffffffffffffffffffffffff00ff00 00ff00ff00000000ff0000ff00ff0000000000ff0000ff0000ff00000000ff0000ff00ff00000000 00ff0000ff0000ff000000ff0000ff0000ff00000000000000ff00ffffffffffffffffffffffffff ffffffffffffff000000000000ff000000000000000000ff0000000000000000000000ff00000000 0000000000ff0000000000000000000000ff000000000000000000ff00000000000000ff00ffffff ffffffffffffffffffffffffffffffffff00ff0000ff00ff00000000ff0000ff00ff0000000000ff 0000ff0000ff00000000ff0000ff00ff0000000000ff0000ff0000ff000000ff0000ff0000ff0000 0000000000ff00ffffffffffffffffffffffffffffffffffffffff00ffffffff00ffffffff00ff00 00ff00ff00ffff00ff0000ff00ff00ffffff00ff0000ff0000ffffffff00ff0000ff00ff00ffffff 00ff0000ff0000ffffff00ff0000ff0000ffffffffffffffffffffffffffffff00cccccccccccccc cc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffff00ff ffffff00ffffffff00ffffffff00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffffff ff00ffffffff00ffffffff00ffffffff00ffffffff00ffffffff00ffffffffffffffffffffffffff ffffffffffffffff00ffffffff0000ff00ff00ff00ff00ff00ffffffff00ffffffff00ffffffffff 00ffffffff00ffffffffff00ffffffff00ffffffff00ffffffff00ffffffff00ffffffff00ffffff ffffffffffffffffffffffffffffffffffff00ffffffff0000ff00ff00ffffffff0000ff00ff0000 ffffffff00ff00ff00ff00ffffffff0000ff00ff0000ffffffff00ff00ff0000ffffffff00ff00ff 00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffff00ffffffff0000ff00ff00ff ffffff0000ff00ff0000ffffffff00ff00ff00ff00ffffffff0000ff00ff0000ffffffff00ff00ff 0000ffffffff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffff0000 0000000000ff00ff00000000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff 00000000000000ff00ff00000000000000ff00ff00ff00ff00ff00ff00ffffffffffffffffffffff ffffffffffffffff00ffffffff0000ff00ff00ffffffff0000ff00ff0000ffffffff00ff00ff00ff 00ffffffff0000ff00ff0000ffffffff00ff00ff0000ffffffff00ff00ff00ff00ff00ff00ff00ff ffffffffffffffffffffffffffffffffffff00ffffffff00ffffffff00ff0000ff0000ffffff00ff 0000ff0000ffffffff00ff0000ff00ff00ffffff00ff0000ff0000ffffffff00ff0000ff00ff00ff ff00ff0000ff00ff00ffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccc cccccccccc000000000000cccc00ffffffffffffffffffffffffffffff000000000000ffffffff00 0000000000ffffffffff000000000000ffffffffff000000000000ffffffffff000000000000ffff ffff000000000000ffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff00 0000000000000000000000ff00ff00ff00ffffff000000000000ffffffffff000000000000ffffff ffff000000000000ffffffff000000000000ffffffffffffffffff00ffffffffffffffffffffffff ffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000ff00ff00ff ffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000ff00ff00ffffffffffffffffffffffffffffffffffffffff0000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000ff00ff00ffffffffffffffffffffffffffffffffffffffff00 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000ff00ff00ffffffffffffffffffffff ffffffffffffffffff000000000000ffffffff00ffffffff00ff00ffff00ffffffff00ff00ffffff 00ffffffff0000ffffffff00ffffffff00ff00ffffff00ffffffff0000ffffff00ffffffff0000ff ffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc00000000 0000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff 00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffff ffffffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff ffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff 00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff

00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffff000000000000ffffffff000000000000ffffffffff000000000000ffffff ffff000000000000ffffffffff000000000000ffffffff000000000000ffffffffffffffffffffff ffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffff000000000000ff00ff00ff00ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 00ff00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ff0000 0000000000ff00ff00000000000000ff00ff00ffffffffffffffffffffffffffffffffffffffffff ffffffffff000000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff00000000 000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ff00ff00000000000000ff00ff00ff00000000 000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ff ffffffffffffffffffffffffffffffffffffffffffffffffff000000000000ff00ff000000000000 00ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff0000 0000000000ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccc cccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff00ff00ff00ff00ff00ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff 00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff 00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffff ffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffff ffffffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cc cccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffff000000000000ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ff00ff00000000000000ff00ff00ff00000000 000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ff ffffffffffffffffffffffffffffffffffffffffffffffffff000000000000ff00ff000000000000 00ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff0000 0000000000ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 00ff00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ff0000 0000000000ff00ff00000000000000ff00ff00ffffffffffffffffffffffffffffffffffffffffff ffffffffff000000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff00000000 000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc 000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff 00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff

00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffff ffffffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff00ff00ff00ffffffffff00ff00ff00ffffffffffffff00ff 00ff00ffffffffff00ff00ff00ffffffffffffff00ff00ff00ffffffffff00ff00ff00ffffffffff ffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00 ffffffffffffffffffffffffffffff000000000000ffffffff000000000000ffffffffff00000000 0000ffffffffff000000000000ffffffffff000000000000ffffffff000000000000ffffffff0000 0000ffffffffffffffffffffffffffffffffffffffffffffff000000000000ff00ff000000000000 00ff00ffffff000000000000ffffffffff000000000000ffffffffff000000000000ffffffff0000 00000000ffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffff0000000000 00ff00ff00000000000000ff00ff000000000000000000ff00ff00000000000000ff00ff00000000 0000000000ff00ff00000000000000ff00ff00000000000000ffffffffffffffffffffffffffffff ffffffffff000000000000ff00ff00000000000000ff00ff000000000000000000ff00ff00000000 000000ff00ff000000000000000000ff00ff00000000000000ff00ff00000000000000ffffffffff ffffffffffffffffffffffffffffff000000000000ff00ff00000000000000ff00ff000000000000 000000ff00ff00000000000000ff00ff000000000000000000ff00ff00000000000000ff00ff0000 0000000000ffffffffffffffffffffffffffffffffffffffff000000000000ff00ff000000000000 00ff00ff000000000000000000ff00ff00000000000000ff00ff000000000000000000ff00ff0000 0000000000ff00ff00000000000000ffffffffffffffffffffffffffffffffffffffff0000000000 00ffffffff000000000000ff00ffff000000000000ff00ffffff00000000000000ffffffff000000 000000ff00ffffff00000000000000ffffff00000000000000ffffffffffffffffffffffffffffff 00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffff ffffffffffff00ffffffff00ffffffff00ffffffff00ffffffffff00ffffffff00ffffffffff00ff ffffff00ffffffffff00ffffffff00ffffffff00ffffffff00ffffffff00ffffffffffffffffffff ffffffffffffffffffffffffffffffff00ffffffff0000ff00ff00ff00ff00ff00ffffffff00ffff ffff00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffffff00ffffffff00ffffffff00 ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff0000ff00ff00ffffff ff0000ff00ff0000ffffffff00ff00ff00ff00ffffffff0000ff00ff0000ffffffff00ff00ff0000 ffffffff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffff00ffffff ff0000ff00ff00ffffffff0000ff00ff0000ffffffff00ff00ff00ff00ffffffff0000ff00ff0000 ffffffff00ff00ff0000ffffffff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffff ffffffffffff00000000000000ff00ff00000000000000ff00ff00000000000000ff00ff00ff0000 0000000000ff00ff00000000000000ff00ff00000000000000ff00ff00ff00ff00ff00ff00ffffff ffffffffffffffffffffffffffffffff00ffffffff0000ff00ff00ffffffff0000ff00ff0000ffff ffff00ff00ff00ff00ffffffff0000ff00ff0000ffffffff00ff00ff0000ffffffff00ff00ff00ff 00ff00ff00ff00ffffffffffffffffffffffffffffffffffffff00ffffffff00ffffffff00ffffff ff0000ffffff00ffffffff0000ffffffff00ffffffff00ff00ffffff00ffffffff0000ffffffff00 ffffffff00ff00ffff00ffffffff00ff00ffffffffffffffffffffffffffff00cccccccccccccccc 666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffff00ffff ffff00ffffffff00ffffffff00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffffffff 00ffffffff00ffffffff00ffffffff00ffffffff00ffffffffffffffffffffffffffffffffffffff ffffffffffffff00ff0000ff00ff00000000000000ff00ff00ffffff00ffffffff00ffffffffff00 ffffffff00ffffffffff00ffffffff00ffffffff00ffffffff00ffffffff00ffffffffffffffffff ffffffffffffffffffffffffffffffffff00ff0000ff00ff00000000ff0000ff00ff0000000000ff 0000ff0000ff00000000ff0000ff00ff0000000000ff0000ff0000ff000000ff0000ff0000ff0000 0000000000ff00ffffffffffffffffffffffffffffffffffffffff00ff0000ff00ff00000000ff00 00ff00ff0000000000ff0000ff0000ff00000000ff0000ff00ff0000000000ff0000ff0000ff0000 00ff0000ff0000ff00000000000000ff00ffffffffffffffffffffffffffffffffffffffff000000 000000ff000000000000000000ff0000000000000000000000ff000000000000000000ff00000000 00000000000000ff000000000000000000ff00000000000000ff00ffffffffffffffffffffffffff ffffffffffffff00ff0000ff00ff00000000ff0000ff00ff0000000000ff0000ff0000ff00000000 ff0000ff00ff0000000000ff0000ff0000ff000000ff0000ff0000ff00000000000000ff00ffffff ffffffffffffffffffffffffffffffffff00ffffffff00ffffffff00ff0000ff00ff00ffff00ff00 00ff00ff00ffffff00ff0000ff0000ffffffff00ff0000ff00ff00ffffff00ff0000ff0000ffffff

00ff0000ff0000ffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccc cccccccc000000000000cccc00ffffffffffffffffffffffffffffff00ffffffff00ffffffff00ff ffffff00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffff ff00ffffffff00ffffffff00ffffffff00ffffffffffffffffffffffffffffffffffffffffff00ff 0000ff0000ff00ff00ff00ff00ff00ffffffff00ffffffff00ffffffffff00ffffffff00ffffffff ff00ffffffff00ffffffff00ffffffff00ffffffff00ffffffff00ffffffffffffffffffffffffff ffffffffffffffff00ff0000ff0000ff00ff00ff0000ff0000ff00ff0000ff0000ff00ff00ff00ff 00ff0000ff0000ff00ff0000ff0000ff00ff00ff0000ff0000ff00ff00ff00ff00ff00ff00ff00ff ffffffffffffffffffffffffffffffffffff00ff0000ff0000ff00ff00ff0000ff0000ff00ff0000 ff0000ff00ff00ff00ff00ff0000ff0000ff00ff0000ff0000ff00ff00ff0000ff0000ff00ff00ff 00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffff00000000000000ff00ff0000 0000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff 00000000000000ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffff00ff 0000ff0000ff00ff00ff0000ff0000ff00ff0000ff0000ff00ff00ff00ff00ff0000ff0000ff00ff 0000ff0000ff00ff00ff0000ff0000ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffff ffffffffffffffff00ffffffff00ffffffff00ff0000ff0000ffffff00ff0000ff0000ffffffff00 ff0000ff00ff00ffffff00ff0000ff0000ffffffff00ff0000ff00ff00ffff00ff0000ff00ff00ff ffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc0000000000 00cccc00ffffffffffffffffffffffffffffff00ffffffff00ffffffff00ffffffff00ffffffffff 00ffffffff00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffffff00ffffffff00ffff ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff00ffffffff000000000000 00ff00ff00ff00ffffff00ffffffff00ffffffffff00ffffffff00ffffffffff00ffffffff00ffff ffff00ffffffff00ffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff00 ffffffff000000000000ffffffff00000000000000ffffffff00000000000000ffffffff00000000 000000ffffffff000000000000ffffffff0000000000000000ff00ff00ffffffffffffffffffffff ffffffffffffffffff00ffffffff000000000000ffffffff00000000000000ffffffff0000000000 0000ffffffff00000000000000ffffffff000000000000ffffffff0000000000000000ff00ff00ff ffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000ff00ff00ffffffffffffffffffffffffffffffffffffffff00ffffffff000000000000 ffffffff00000000000000ffffffff00000000000000ffffffff00000000000000ffffffff000000 000000ffffffff0000000000000000ff00ff00ffffffffffffffffffffffffffffffffffffffff00 ffffffff00ffffffff00ffffffff00ff00ffff00ffffffff00ff00ffffff00ffffffff0000ffffff ff00ffffffff00ff00ffffff00ffffffff0000ffffff00ffffffff0000ffffffffffffffffffffff ffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffff ffffffffffffffffffff000000000000ffffffff000000000000ffffffffff000000000000ffffff ffff000000000000ffffffffff000000000000ffffffff000000000000ffffffffffffff000000ff ffffffffffffffffffffffffffffffffffffffff00000000000000ff00ff00ff00ff00ffffffffff ff000000000000ffffffffff000000000000ffffffffff000000000000ffffffff000000000000ff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff00000000000000ff00ff 00000000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff 00ff00000000000000ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffff 00000000000000ff00ff00000000000000ff00ff00000000000000ff00ff00ff00000000000000ff 00ff00000000000000ff00ff00000000000000ff00ff00ff00ff00ff00ffffffffffffffffffffff ffffffffffffffffffff00000000000000ff00ff00000000000000ff00ff00000000000000ff00ff 00ff00000000000000ff00ff00000000000000ff00ff00000000000000ff00ff00ff00ff00ff00ff ffffffffffffffffffffffffffffffffffffffff00000000000000ff00ff00000000000000ff00ff 00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00000000000000ff 00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff 000000000000ffffffff00000000000000ffffffff00000000000000ffffffff00000000000000ff ffffff000000000000ffffffff000000000000ffffffffffffffffffffffffffffffff00cccccccc cccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ff00ff00ff00ffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffff000000000000ff00ff000000000000 00ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff0000 0000000000ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 00ff00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ff0000

0000000000ff00ff00000000000000ff00ff00ffffffffffffffffffffffffffffffffffffffffff ffffffffff000000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff00000000 000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ff00ff00000000000000ff00ff00ff00000000 000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccc cccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff ffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff 00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff 00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffff ffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc00 0000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffff000000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff00000000 000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ff00ff00000000000000ff00ff00ff00000000 000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ff ffffffffffffffffffffffffffffffffffffffffffffffffff000000000000ff00ff000000000000 00ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff0000 0000000000ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 00ff00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ff0000 0000000000ff00ff00000000000000ff00ff00ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff00ff00ffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff 00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffff ffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffff ffffffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff ffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff 00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffff ffffffffff000000000000ffffffff000000000000ffffffffff000000000000ffffffffff000000

000000ffffffffff000000000000ffffffff000000000000ffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ff00ff00ff0000000000ffffffffff00000000 0000ffffffffff000000000000ffffffffff000000000000ffffffff000000000000ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffff000000000000ff00ff000000000000 00ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff0000 0000000000ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 00ff00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ff0000 0000000000ff00ff00000000000000ff00ff00ffffffffffffffffffffffffffffffffffffffffff ffffffffff000000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff00000000 000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ffffffffffffffffffffff ffffffffffffffffffffffffffffff000000000000ff00ff00000000000000ff00ff00ff00000000 000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ff ffffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff0000000000 00ffffffffff000000000000ffffffffff000000000000ffffffffff000000000000ffffffff0000 00000000ffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc66 6666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffff00ffffff ff00ffffffff00ffffffff00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffffffff00 ffffffff00ffffffff00ffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff00ffffffff0000ff00ff00ffffffff00ffffffffff00ffffffff00ffffffffff00ff ffffff00ffffffffff00ffffffff00ffffffff00ffffffff00ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff00ffffffff0000ff00ff00ffffffff0000ff00ffff00ffff ffff00ff00ff00ff00ffffffff0000ff00ffff00ffffffff00ff00ff0000ffffffff00ff00ff00ff ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff0000ff00ff00ffffff ff0000ff00ffff00ffffffff00ff00ff00ff00ffffffff0000ff00ffff00ffffffff00ff00ff0000 ffffffff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 000000ff00ff00000000000000ff00ffff000000000000ff00ff00ff00000000000000ff00ffff00 0000000000ff00ff00000000000000ff00ff00ffffffffffffffffffffffffffffffffffffffffff ffffffffffff00ffffffff0000ff00ff00ffffffff0000ff00ffff00ffffffff00ff00ff00ff00ff ffffff0000ff00ffff00ffffffff00ff00ff0000ffffffff00ff00ff00ffffffffffffffffffffff ffffffffffffffffffffffffffffffff00ffffffff00ffffffff00ffffffff00ffffffffff00ffff ffff00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffffff00ffffffff00ffffffffff ffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccc cccccc000000000000cccc00ffffffffffffffffffffffffffffff00ffffffff00ffffffff00ffff ffff00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffffff 00ffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00 00ff00ff00ff0000ffffffff00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffffffff 00ffffffff00ffffffff00ffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffff00ff0000ff00ff00ff0000ff0000ff00ff00ff00ff00ff0000ff0000ff00ffff00 ff0000ff00ff00ff00ff00ff0000ff0000ff00ff00ff0000ff0000ff00ffffffffffffffffffffff ffffffffffffffffffffffffffffffffff00ff0000ff00ff00ff0000ff0000ff00ff00ff00ff00ff 0000ff0000ff00ffff00ff0000ff00ff00ff00ff00ff0000ff0000ff00ff00ff0000ff0000ff00ff ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000ff00ff00000000 000000ff00ff00ff00000000000000ff00ffff000000000000ff00ff00ff00000000000000ff00ff 00000000000000ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00 00ff00ff00ff0000ff0000ff00ff00ff00ff00ff0000ff0000ff00ffff00ff0000ff00ff00ff00ff 00ff0000ff0000ff00ff00ff0000ff0000ff00ffffffffffffffffffffffffffffffffffffffffff ffffffffffffff00ffffffff00ffffffff00ffffffff00ffffffffff00ffffffff00ffffffffff00 ffffffff00ffffffffff00ffffffff00ffffffff00ffffffff00ffffffffffffffffffffffffffff ffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000 cccc00ffffffffffffffffffffffffffffff00ffffffff00ffffffff00ffffffff00ffffffffff00 ffffffff00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffffff00ffffffff00ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff0000ff0000ffffff00ff ffffff00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffff ff00ffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff 0000ff0000ffffff00ff0000ff0000ffffffff00ff0000ff00ff00ffffff00ff0000ff0000ffffff ff00ff0000ff00ff00ffff00ff0000ff00ff00ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffff00ff0000ff0000ffffff00ff0000ff0000ffffffff00ff0000ff00ff00ffffff 00ff0000ff0000ffffffff00ff0000ff00ff00ffff00ff0000ff00ff00ffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff00000000000000ffffff00000000000000ffffffff00 0000000000ff00ffffff00000000000000ffffffff000000000000ff00ffff000000000000ff00ff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff0000ff0000ffffff00ff 0000ff0000ffffffff00ff0000ff00ff00ffffff00ff0000ff0000ffffffff00ff0000ff00ff00ff ff00ff0000ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff ffffff00ffffffff00ffffffff00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffffff ff00ffffffff00ffffffff00ffffffff00ffffffffffffffffffffffffffffffffffffffffffffff ffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffff ffffffffffffffffff00ffffffff00ffffffff00ffffffff00ffffffffff00ffffffff00ffffffff ff00ffffffff00ffffffffff00ffffffff00ffffffff00ffffffff00ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffff00ffffffff00ff00ffff00ffffffff00ffffffffff 00ffffffff00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffffff00ffffffff00ffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ff00ffff00 ffffffff00ff00ffffff00ffffffff0000ffffffff00ffffffff00ff00ffffff00ffffffff0000ff ffff00ffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 ffffffff00ff00ffff00ffffffff00ff00ffffff00ffffffff0000ffffffff00ffffffff00ff00ff ffff00ffffffff0000ffffff00ffffffff0000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff000000000000ff00ffff000000000000ff00ffffff00000000000000ffffff ff000000000000ff00ffffff00000000000000ffffff00000000000000ffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffff00ffffffff00ff00ffff00ffffffff00ff00ffffff 00ffffffff0000ffffffff00ffffffff00ff00ffffff00ffffffff0000ffffff00ffffffff0000ff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ffffffff00 ffffffff00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffffffff00ffffffff00ffff ffff00ffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccc cccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffff 000000000000ffffffff000000000000ffffffffff000000000000ffffffffff000000000000ffff ffffff000000000000ffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffff000000000000ffffffff000000000000ffffffffff000000000000ffffff ffff000000000000ffffffffff000000000000ffffffff000000000000ffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffff000000000000ffffffff000000000000ffffffff ff000000000000ffffffffff000000000000ffffffffff000000000000ffffffff000000000000ff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff 000000000000ffffffffff000000000000ffffffffff000000000000ffffffffff000000000000ff ffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000000000ffffffff000000000000ffffffffff000000000000ffffffffff000000000000ffff ffffff000000000000ffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffff000000000000ffffffff000000000000ffffffffff000000000000ffffff ffff000000000000ffffffffff000000000000ffffffff000000000000ffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffff000000000000ffffffff000000000000ffffffff ff000000000000ffffffffff000000000000ffffffffff000000000000ffffffff000000000000ff ffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccc cccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc0000 00000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cc cccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc6666 66cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccc cccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cc cc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccc cccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccc cccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000 000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccc

cccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffff ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff0000ff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 000000ffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffff00ffffffffffffffffff00000000ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ffffff0000ff ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666 cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffff ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffff00ffff00ffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff00ff00ffffffff00ffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff00ffffff00ff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff00ff00ffffffffffffffffff00ffff00ffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff00ffffffffff00ffffffffff00ffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccc cc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff00ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffff00ffffff00ffff00ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff00ffff00ffff00ffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffffff ffffffff00ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffff00ffffffff00ffffffffff00ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc 00ffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff00ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffff00ffff00ffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffffffffffffff00ffff00ff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffff ffffffffffffffffffffffffff00ffffff00ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffff00ffffff00ffffffffffffffff000000ffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccc cc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffff ffffffff0000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff00ffff00ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff00ff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffff0000000000ffffffffffffffff00ffff00ffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccc cccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffff00ffffff00 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff00ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff00ffffff00ffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff00ffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00 ffffffffffffffff00ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc00000000 0000cccc00ffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff 00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffff00ffff00ffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffffffffffffff00 ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffff ffffffffffffffffffffffffffffffffff00ffffff00ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffff00ffffff00ffffffffffffff00000000ffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccc cccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cc cccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc 000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc 666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccc cccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc0000000000 00cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccc cccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccc cccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc00 0000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc66 6666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccc cccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000

cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccc cccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccc cccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc0000 00000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cc cccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc6666 66cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccc cccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cc cc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccc cccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccc cccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000 000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccc cccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666 cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccc cc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc 00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccc cc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccc cccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc00000000 0000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccc cccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccccccccccc cccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff00cccccccccccccccccccccccccccccccccccccccccc 000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff00ccccf4f4f4f4f4f4f4f4f4f4f4f4f466cccccccccc000000000000cccc00 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00ccccf4cccccccccccccccccccccccc66cccccccccc000000000000cccc00ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ccccf4cccccccccc cccccccccccccc66cccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff00ccccf4cccccccccccccccccccccccc66cc cccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffff00ccccf4cccccccccccccccccccccccc66cccccccccc0000000000 00cccc00000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000ccccf466666666666666666666666666cccccccccc000000000000cccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccc000000000000cccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccc000000000000ccccf4f4f4f4f466ccccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4cc f4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4cccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccf4f4f4f4f466cccccccccccccccccccccccccccccccccccccccccc00 0000000000ccccf4cccccccc66ccccccccccccccccccccccccccccccccccf4cccccccccccccccccc cccccccccccccccccccccccccccccccccccccccc66cccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccf4cccccccc66cccccccccccccccccccccccccccccccccccccccccc000000000000ccccf4cc cccccc66ccccf4cccccccccccccccccccccccccccccccccccccccccccccccccccccccccc66cccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4cccccccc66 cccccccccccccccccccccccccccccccccccccccccc000000000000ccccf4cccccccc66cccccccccc cccccccccccc66ccccccccccf4cccccccccccccccccccccccccccccccccccccccccc66cccccccccc cccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccccccf4cccccccc66cccccccccccccccccc cccccccccccccccccccccccc000000000000ccccf4cccccccc66ccccf4cccccccccccccc66cccccc cccccccccccccccccccccccccccccccccccc66cccccccccc66cc66cccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccf4cccccccc66cccccccccccccccccccccccccccccccccccc cccccc000000000000ccccf4cccccccc66cccccccccccccccccc66cc66ccccccccccf4cccccccccc cccccccccccccccccccccccccccccccc66cc66cccccccccc66cccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccf4cccccccc66cccccccccccccccccccccccccccccccccccccccccc000000000000 ccccf4cccccccc66ccccf4cccccccccc66cc66cccccccccccccccccccccccccccccccccccccccccc 66cccccccccc66cc66cc66cccccccccccccc66666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 666666666666666666666666666666666666666666666666666666666666666666666666ccccf4cc cccccc66cccccccccccccccccccccccccccccccccccccccccc000000000000ccccf4cccccccc66cc cccccccccccc66cc66cc66ccccccccccf4cccccccccccccccccccccccccccccccccccccccccc66cc 66cccccccccc66cc6666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 666666666666666666666666666666666666666666666666666666ccccf4cccccccc66cccccccccc cccccccccccccccccccccccccccccccc000000000000ccccf4cccccccc66ccccf4cccccccccc66cc 66cccccccccccccccccccccccccccccccccccccccccc66cccccccccc66cc66cccccccccccccccccc 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666

666666666666666666666666666666666666ccccf4cccccccc66cccccccccccccccccccccccccccc cccccccccccccc000000000000ccccf4cccccccc66cccccccccccccccccc66cc66ccccccccccf4cc cccccccccccccccccccccccccccccccccccccccc66cccccccccccccc66cccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccf4cccccccc66cccccccccccccccccccccccccccccccccccccccccc0000 00000000ccccf4cccccccc66ccccf4cccccccccccccc66cccccccccccccccccccccccccccccccccc cccccccc66cccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccf4cccccccc66cccccccccccccccccccccccccccccccccccccccccc000000000000ccccf4cccc cccc66ccccccccccccccccccccccccccccccccccf4cccccccccccccccccccccccccccccccccccccc cccccccccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4cccccccc66cc cccccccccccccccccccccccccccccccccccccccc000000000000ccccf4cccccccc66ccccf4cccccc cccccccccccccccccccccccccccccccccccccccccccccccccccc66cccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccccf4cccccccc66cccccccccccccccccccc cccccccccccccccccccccc000000000000ccccf46666666666cccccc66cc66cc66cc66cc66cc66cc 66cc66cc66cc66cc66cc66cc66cc66cc66cc66cc66cc66cc66cc66cc66cc66cc66cccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccf46666666666cccccccccccccccccccccccccccccccccccccc cccc000000000000cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc000000000000cc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccc000000000000cccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccc000000000000cccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccc000000000000cccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc000000 000000cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccc000000000000cccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccc000000000000cccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccc000000000000cccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cc000000000000ccccccccccccccccccccccccccccccccccccccccf4f4f4f4f4f4f4f4f4f4f4f4f4 f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4cccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccccccf4f4f4f4f4f4f4f4f4f4f4f4f4f4f4 f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4

cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4 ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4 ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4cccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccccccf4f4f4f4f4f4f4f4f4f4f4f4f4f4f4 f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4 f4f4f4f4f4f4f4f4cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc000000000000cccc ccccccccccccccccccccccccccccccccf4f4cccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccf4f4cccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccf4f4cccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4f4cccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4cccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccf4cccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccf4f4cccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4 f4cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccc000000000000cccccccccccccccccccccc ccccccccccccf4cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccf4cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccf4cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccccf4cccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccf4cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccf4cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4cccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccc000000000000ccccccccccccccccccccccccccccccccf4cccccc cccccccccccccccccccccccccccc00cccccccccccccccccccccccccccccccccccccccccccccccccc 66ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4cccccccccc cccccccccccccccccccccccccccccccccccc00cccccc00cccccccccccccc00cccccccccccccccccc cccccccccccccccccccccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc66 ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4cccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccc66cccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccc000000000000ccccccccccccccccccccccccccccccf4cccccccccccccccccccc000000 00cccccccc00cccccccccccccccccccccccccccccccccccccccccccccccccccc66cccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccccf4cccccccccccccccc00cccccccc00cc cccccccccccccccccc00cccccc00cccccccccccccc00cccccccccccccccccccc00cccccccccccccc cccccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccc00cc00cccccc00cccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc66cccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccccf4cccccccccccccccccc00cccccccc00 cccccccccccccccccccccccccccccccccc00cccccccccccccccccccccccccccc00cccccccccccccc cccccccccccccccccccccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc00000000 0000ccccccccccccccccccccccccccccccf4cccccccccccccccccc00cccccccc00cccccc00cccccc cccccccccccccccccccccccccccccccccccccccccccccc66cccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccf4cccccccccccccccc00cccccccc00cccccccccccccccccccc 00cccccccccccccccccccccc00cccccccccccccccccccc00cccccccccccccccccccccccccccccc66 ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4cccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccc00cccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccf4cccccccccccccccccc0000cccccc00cccccccccccccccccc cccccccccccccccc00cccccccccccccccccccccccccccc00cccccccccccccccccccccccccccccccc cccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccc000000000000cccccccccccccc ccccccccccccccf4cccccccccccccccccc00cccccccccccccccccc00cccccc000000cccccccc0000 00cccccc00cc0000cccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccf4cccccccccccccccccc00cccccccc00cccccc000000cccccccc00cccccc00cccccccc 00000000cccccc000000cccccc00000000cccc000000cccccccccccccccccc66cccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccf4cccccccccccccccccc00cccccccccccccc00 cc00cccccc00cccccccccccccc00cc00cc00cccccccccccccccccc00cccccc00cccccccccccccc00 cccccc00cccccc00cccccccccc00cc00cc00cccccc00cc00cccccccccccccc00cccccccccc00cc00 cccccc00cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccf4cccccccccccccccccccc0000cccccc00cccccc000000cccccc00cccccc00cccc0000 0000cccccccccccc000000cccc00000000cccc000000cccccccc00cc0000cccccccccccccccccc66 cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccc000000000000ccccccccccccccccccccccccccccf4cc cccccccccccccccc00cccccccccccccccccc00cccc00cccccc00cccc00cccccc00cccc0000cccccc cccccccccccc66ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4cccccc cccccccccccc00cccccccc00cccc00cccccc00cccccc00cccccc00cccccc00cccccc00cccc00cccc cc00cccccc00cccccc00cccccc00cccccccccccccccc66cccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccc00cccccccccccccccccccccccccccccccc cc00cccccccccc00cccccccccccccc00cccccccccccccccccccccccccccccccccccccccccccccccc

cc00cccccccccc00cccccc00cccccc00cccccc00cccccc00cccccc00cccccccccccccccccccccccc cccccccccc66ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4cccccc cccccccccccccc00cc00cccc00cccc00cccccc00cccc00cccccc00cccccc00cccccccccccccc00cc cccccccccc00cccccc00cccccc00cccccc0000cccc00cccccccccccccccc66cccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccc000000000000ccccccccccccccccccccccccccccf4cccccccccccccccccc00 cccccccccccccccccc00cccc00cccccc00cccccccccccc00cccc00cccccccccccccccccccc66cccc ccccccccccccccccccccccccccccccccccccccccccccccccccccccf4cccccccccccccccccccc00cc cc00cccccccccccccc00cccccc00cccccc00cccccc00cccccc00cccccccccccc00cccccc00cccccc 00cccccc00cccccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccf4cccccccccccccccccccccc00cccccccccc00cccccccccccccc00cccccccccccccccccccc cccccccccccccccccccccc00cccccc00cccccccccccccccccc00cccccc00cccccccccccccc00cccc cccccccccccccccccccccccccccccccccc00cccccccccc00cccccc00cccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccccccccccf4cccccccccccccccccccc00cc 0000cc00cccc00cccccc00cccccc00cc00cccccccc00cccccccccccccc00cccccccccccc00cccccc 00cccccc00cccccc00cccccc00cccccccccccccccc66cccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 000000000000ccccccccccccccccccccccccccccf4cccccccccccccccccc00cccccccccccccccccc 00cccc0000000000cccccc00000000cccc00cccccccccccccccccccc66cccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccf4cccccccccccccccccccc00cccc00cccccccc000000 00cccccc00cccccc00cccccc00cccccc00cccccc00000000cccccc00cccccc0000000000cccccccc cccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccc00cccccccccccccccccc00cc00cccccc00cccccccccc00cccccccccccccc00cccc cccccc00cc00cccccc00cccccccccccccccccccccccccc00cccccccccccccccccc00cc00cc00cccc cc00cccccc00cccccccccccccccccc00cc00cccccccccccccccccc66cccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccf4cccccccccccccccccccc00cccc00cc00cccc000000 0000cccccccc00cccccccccc00cccccccccccccccc0000cccccccc00cccccc0000000000cccccc00 cccccc00cccccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc000000000000cccccc ccccccccccccccccccccccf4cccccccccccccccccc00cccccccccccccccccc00cccc00cccccccccc cc00cccccc00cccc00cccccccccccccccccccc66cccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccf4cccccccccccccccccccc00cccc00cccccc00cccccc00cccccc00cccccc00 cccccc00cccccc00cccc00cccccc00cccccc00cccccc00cccccccccccccccccccccccc66cccccccc ccccccccccccccccccccccccccccccccccccccccccccccccccf4cccccccccccccccccccccccccc00 cccccc00cccccc00cccccc00cccccccccccccccccccccccccccccccccccccccccc00cccccccccccc cccccccccccccc00cccccc00cccccccccccccc00cccccccccccccccccccccccccccccccccccccc00 cccccccccc00cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccf4cccccccccccccccccccc00cccccc0000cccc00cccccccccccccc00cc00cc cccccc00cccccccccccccccccccc00cccccc00cccccc00cccccccccccccc00cccccc00cccccccccc cccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

cccccccccccccccccccccccccccccccccccccccccccc000000000000cccccccccccccccccccccccc ccccf4cccccccccccccccccccc00cccccccc00cccccc00cccc00cccccc00cccc00cccccc00cccc00 cccccccccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccccccc f4cccccccccccccccccccccc0000cccccccc00cccccc00cccccc00cccccc00cccccc00cccc0000cc cc00cccccc00cccccc00cccccc00cccccc00cccccccccccccccc66cccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccc00cccccccccc00cccccccccccccc00cccccccccccccccccccccccccccccccccccccccc cc00cccccc00cccccccccccccccccc00cccccc00cccccc00cccccc00cccccc00cccccccccccccccc cccccccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc f4cccccccccccccccccccc00cccccc0000cccc00cccccc00cccc00cccccc00cccccc00cccccccccc cccccccccc00cccccc00cccccc00cccccc00cccccc00cccccc00cccccccccccccccc66cccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccc000000000000ccccccccccccccccccccccccccccf4cccccccccccc cccccccccc00000000cccccccc00cccccc000000cccccccc000000cc00cc00cccccccccccccccccc cc66ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4cccccccccccccccc cccccc0000cccccccccc000000cc00cccc00cccccc00cccccccc0000cc00cccccc000000cc00cccc cc0000cccc000000cccccccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccf4cccccccccccccccccc00cc00cccccccccccccc00cccccc00cccccccccccccccc cccccc00cccccccccccccccccccccccccc00cccccccccccccc00cccccccccc00cc00cccccccccccc cc00cccccccccc00cc00cccccccccccccccccccccccccc00cc00cccccc00cccccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4cccccccccccccccc cccc00cccccccc00cccccc000000cccccc00cccccc00cccccccc0000cccccccccc000000cccccccc cc0000cccc000000cccccccc00000000cccccccccccccccccc66cccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccc000000000000ccccccccccccccccccccccccccccccf4cccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc66cccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccf4cccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccc66ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4 cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccf4cccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccc00cccccccccccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0000000000 00ccccccccccccccccccccccccccccccf4cccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccc66cccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccf4cccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc66cc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccc66cccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccf4cccccccccccccccccccccccccccccccccccccccccccccccccc

cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc00cccccccccc cccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccc000000000000cccccccccccccccc ccccccccccccccccf4cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccf4cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccc66cccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccf4cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc66cccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccc000000000000cccccccccccccccccccccccccccccccccc 66cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc66cc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccc66cccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cc66cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc66cc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccc66cccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccc000000000000cccccccccccccccccccccccccccccccccccc6666cccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc6666cccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc6666cccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccc6666cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc66cccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc6666cccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccc6666cccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc00 0000000000cccccccccccccccccccccccccccccccccccccccc666666666666666666666666666666 66666666666666666666666666666666666666666666cccccccccccccccccccccccccccccccccccc

cccccccccccccccccccccccccccccccccccccccccccccc6666666666666666666666666666666666 6666666666666666666666666666666666666666666666666666666666666666666666666666cccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc66 cc66cc66cc66cc66cc66cc66cc66cc66cc66cc66cc66cc66cc66cc66cc66cc66cc66cc66cc66cc66 cc66cc66cc66cc66cc66cc66cc66cc66cc66cc66cc66cc66cc66cc66cc66cc66cc66cc66cc66cc66 cc66cc66cc66cc66cc66cc66cc66cc66cc66cc66cccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccc6666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 666666666666cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc000000000000cccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccc000000000000cccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccc000000000000cccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccc000000000000cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc000000000000 cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccc000000000000cccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccc000000000000cccc00000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000

00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000ccccf4f4f4f4f4f4f4f4f4f4f4f4 f466cccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff00ccccf4cccccccccccccccccccccccc66cccccccccc0000 00000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffff00ccccf4cccccccccccccccccccccccc66cccccccccc000000000000cccc00ffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cc ccf4cccccccccccccccccccccccc66cccccccccc000000000000cccc00ffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ccccf4cccccccccccccc cccccccccc66cccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffff00ccccf466666666666666666666666666cccccc cccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffff00cccccccccccccccccccccccccccccccccccccccccc000000000000cc cc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff00cccccccccccccccccccccccccccccccccccccccccc000000000000cccc00ffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ccccccccf4cc f4ccf4ccf4ccf4ccf4cccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccccccccccccccccc 66cccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff00ccccf4cccccccccccccccccccccccccccccccccccc000000

000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff00cccccccccccccccccccccccccccccc66cccccccccc000000000000cccc00ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccc f4cccccccccccccccccccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccccc66cc cccccccc66cccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffff00ccccf4cccccccccc66cc66cccccccccccccccccc cc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffff00cccccccccccccc66cc66cc66cccccc66cccccccccc000000000000cccc 00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff00ccccf4cccccc66cc66cc66cc66cccccccccccccccc000000000000cccc00ffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccc66cc 66cc66cc66cccccc66cccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffff00ccccf4cccccccccccccccccccccccccc cccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffff00cccccccccccccccccccccccccccccc66cccccccccc00000000 0000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffff00ccccf4cccccccccccccccccccccccccccccccccccc000000000000cccc00ffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccc cccccccccccccccccccccccc66cccccccccc000000000000cccc00ffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ccccf4cccccccccccccccccc cccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff00ccccccf4ccf4ccf4ccf4ccf4ccf4cc66cccccccccc 000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff00ccccf4cccccccccccccccccccccccccccccccccccc000000000000cccc00 ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ffffffffff00ff 00ff00ffffffffff00ff00ff00ffffffffffffff00ff00ff00ffffffffff00ff00ff00ffffffffff 00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00cccccccccccccccccccccccccccccc66cccccccccc000000000000cccc00ffffffffffffffffff ffffffffffffffffffffffffffffffff00000000000000ffffff00000000000000ffffffff000000 000000ff00ffffff00000000000000ffffffff000000000000ff00ffff000000000000ff00ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ccccf4cccccccccc cccccccccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffff ffffffffffffffff00ff00ff00ff00ffffff00ff00ff00ff00ffffff00ff00ff00ff00ffffffffff 00ff00ff00ff00ffffff00ff00ff00ff00ffffff00ff00ff00ff00ffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccccccccccccccccc66cc cccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffff00000000 000000ff00ff00000000000000ff00ffff000000000000ff00ff00ff00000000000000ff00ffff00 0000000000ff00ff00000000000000ff00ff00ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffff00ccccf4cccccccccccccccccccccccccccccccccccc0000000000 00cccc00ffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffff00cccccccccccccccccccccccccccccc66cccccccccc000000000000cccc00ffffffffff ffffffffffffffffffffffffffffffff00000000000000ff00ff00000000000000ff00ff00000000 000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00000000000000ff00ff00ff 00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ccccf4cc cccccccccccccccccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffff ffffffffffffff00ffffffff00ff00ff0000ffffffff00ff00ff00ff00ffffffff0000ff00ffff00 ffffffff00ff00ff00ff00ffffffff0000ff00ff00ffffffff0000ff00ffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccccccccccccc cccc66cccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffff00ff 0000ff0000ff00ff00ff0000ff0000ff00ffff00ff0000ff00ff00ff00ff00ff0000ff0000ff00ff ff00ff0000ff00ff00ff0000ff0000ff00ff00ff00ffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffff00ccccf4cccccccccccccccccccccccccccccccccccc00 0000000000cccc00ffffffffffffffffffffffffffffffffffffffffff00ff0000ff00ff00ffff00 ff0000ff00ff00ffffff00ff0000ff0000ffffffff00ff0000ff00ff00ffffff00ff0000ff0000ff ffff00ff0000ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffff00cccccccccccccccccccccccccccccc66cccccccccc000000000000cccc00ff ffffffffffffffffffffffffffffffffffffffff00ffffffff0000ffffff00ffffffff0000ffffff ff00ffffffff00ff00ffffff00ffffffff0000ffffffff00ffffffff00ff00ffff00ffffffff00ff 00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 ccccf4cccccccccccccccccccccccccccccccccccc000000000000cccc00ffffffffffffffffffff ffffffffffffffffffffff000000000000ff00ff00000000000000ff00ff00ff00000000000000ff 00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccccc cccccccccccc66cccccccccc000000000000cccc00ffffffffffffffffffffffffffffff00000000

0000ffffffff00000000000000ffffff00000000000000ffffffff000000000000ff00ffffff0000 0000000000ffffffff000000000000ff00ffff000000000000ff00ffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff00ccccf4cccccccccccccccccccccccccccccc cccccc000000000000cccc00ffffffffffffffffffffffffffffff00ffffffff00ffffffffff00ff 00ff00ff00ffffff00ff00ff00ff00ffffff00ff00ff00ff00ffffffffff00ff00ff00ff00ffffff 00ff00ff00ff00ffffff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff00cccccccccccccccccccccccccccccc66cccccccccc000000000000 cccc00ffffffffffffffffffffffffffffff00ffffffff00ffff00000000000000ff00ff00000000 000000ff00ffff000000000000ff00ff00ff00000000000000ff00ffff000000000000ff00ff0000 0000000000ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff00ccccf4cc66cc66cc66cc66cc66cc66cccccccccccc000000000000cccc00ffffffffffff ffffffffffffffffff00ffffffff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff 00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccc cccccccccccccccccccc66cccccccccc000000000000cccc00ffffffffffffffffffffffffffffff 00ffffffff0000000000000000ff00ff00000000000000ff00ff00000000000000ff00ff00ff0000 0000000000ff00ff00000000000000ff00ff00000000000000ff00ff00ff00ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffff00ccccf4cccccccccccccccccccccc cccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffff00000000000000ffff ffff00ff00ff0000ffffffff00ff00ff000000ffffffff0000ff00ff0000ffffffff00ff00ff0000 00ffffffff0000ff00ff00ffffffff0000ff00ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff00cccccccccccccccccccccccccccccc66cccccccccc0000 00000000cccc00ffffffffffffffffffffffffffffffffffffffffff00ff0000ff0000ff00ff00ff 0000ff0000ff00ffff00ff0000ff00ff00ff00ff00ff0000ff0000ff00ffff00ff0000ff00ff00ff 0000ff0000ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffff00ccccf4cccccccccccccccccccccccccccccccccccc000000000000cccc00ffff ffffffffffffffffffffffffffffffffffffff00ff0000ff00ff00ffff00ff0000ff00ff00ffffff 00ff0000ff0000ffffffff00ff0000ff00ff00ffffff00ff0000ff0000ffffff00ff0000ff0000ff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cc cccccccccccccccccccccccccccc66cccccccccc000000000000cccc00ffffffffffffffffffffff ffffffffffffffffffff00ffffffff0000ffffff00ffffffff0000ffffffff00ffffffff00ff00ff ffff00ffffffff0000ffffffff00ffffffff00ff00ffff00ffffffff00ff00ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ccccf4cccccc66cc66cc 66cc66cccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffff ff000000000000ffffffff000000000000ffffffffff000000000000ffffffffff000000000000ff ffffffff000000000000ffffffff000000000000ffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffff00cccccccccc66cc66cc66cc66cccccc66cccccc cccc000000000000cccc00ffffffffffffffffffffffffffffff000000000000ffffffff000000ff 00ff00ffffffff0000ff00ff00ffffffffff00ff00ff00ff00ffffffff0000ff00ff00ffffffff00 00ff00ff00ff00ffffffffff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffff00ccccf4cccccc66cc66cc66cccccccccccccccccccc000000000000cc cc00ffffffffffffffffffffffffffffff00ffffffff00ffffffff000000000000ff00ffff000000 000000ff00ffffff00000000000000ffffffff000000000000ff00ffffff00000000000000ffffff 00000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff00cccccccccccccc66cc66cccccccccc66cccccccccc000000000000cccc00ffffffffffffff ffffffffffffffff00ffffffff00ffffffff00ff00ff00ff00ffffff00ff00ff00ff00ffffffffff 00ff00ff00ff00ffffff00ff00ff00ff00ffffffffff00ff00ff00ff00ffffff00ff00ff00ff00ff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ccccf4cccccc cccc66cccccccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffff00 ffffffff00ffff000000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ffff00 0000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccccccccccccccccc 66cccccccccc000000000000cccc00ffffffffffffffffffffffffffffff00ffffffff00ffff00ff 00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff ffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff00ccccf4cccccccccccccccccccccccccccccccccccc000000 000000cccc00ffffffffffffffffffffffffffffff000000000000000000000000ff00ff00000000 000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff 00000000000000ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff00cccccccccccccccccccccccccccccc66cccccccccc000000000000cccc00ffffff ffffffffffffffffffffffffffffffffffff00ffffffff0000ff00ff00ffffffff0000ff00ffff00 ffffffff00ff00ff00ff00ffffffff0000ff00ffff00ffffffff00ff00ff0000ffffffff00ff00ff 00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccc f4cccccccccccccccccccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffff ffffffffffffffffff00ff0000ff00ff00ff0000ff0000ff00ff00ff00ff00ff0000ff0000ff00ff ff00ff0000ff00ff00ff00ff00ff0000ff0000ff00ff00ff0000ff0000ff00ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccc66cc66cc66cc66cc 66cc66cc66cccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffff 00ff0000ff0000ffffff00ff0000ff0000ffffffff00ff0000ff00ff00ffffff00ff0000ff0000ff ffffff00ff0000ff00ff00ffff00ff0000ff00ff00ffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffff00cccccccccccccccccccccccccccccccccccccccc cc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffff00ffffffff00ff00ff ff00ffffffff00ff00ffffff00ffffffff0000ffffffff00ffffffff00ff00ffffff00ffffffff00 00ffffff00ffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffff00cccccccccccccccccc66cccccccccccccccccccccc000000000000cccc 00ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff000000000000ffff ffffff000000000000ffffffffff000000000000ffffffffff000000000000ffffffff0000000000 00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffff ffffffffffffff000000000000ffffffff0000ff00ff00ff00ffffff00ff00ff00ff00ffffffff00 00ff00ff00ffffffffff00ff00ff00ff00ffffff000000ff00ff00ffffffffff00ff00ff00ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccc cc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffff00ff ffffff00ffffffff00000000000000ffffff00000000000000ffffffff000000000000ff00ffffff 00000000000000ffffffff000000000000ff00ffff000000000000ff00ffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccc cccccccccc000000000000cccc00ffffffffffffffffffffffffffffff00ffffffff00ffffffffff 00ff00ff00ff00ffffff00ff00ff00ff00ffffff00ff00ff00ff00ffffffffff00ff00ff00ff00ff ffff00ff00ff00ff00ffffff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc00000000 0000cccc00ffffffffffffffffffffffffffffff00ffffffff00ffff00000000000000ff00ff0000 0000000000ff00ffff000000000000ff00ff00ff00000000000000ff00ffff000000000000ff00ff 00000000000000ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffff ffffffffffffffffffffff00ffffffff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff

00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff 00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccc cccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffff ffff00000000000000000000000000ff00ff00000000000000ff00ff00000000000000ff00ff00ff 00000000000000ff00ff00000000000000ff00ff00000000000000ff00ff00ff00ffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cc cccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffff00 ffffffff00ff00ff0000ffffffff00ff00ff00ff00ffffffff0000ff00ffff00ffffffff00ff00ff 00ff00ffffffff0000ff00ff00ffffffff0000ff00ffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc 000000000000cccc00ffffffffffffffffffffffffffffffffffffffffff00ff0000ff0000ff00ff 00ff0000ff0000ff00ffff00ff0000ff00ff00ff00ff00ff0000ff0000ff00ffff00ff0000ff00ff 00ff0000ff0000ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00 ffffffffffffffffffffffffffffffffffffffffff00ff0000ff00ff00ffff00ff0000ff00ff00ff ffff00ff0000ff0000ffffffff00ff0000ff00ff00ffffff00ff0000ff0000ffffff00ff0000ff00 00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffff ffffffffffffffffffffffff00ffffffff0000ffffff00ffffffff0000ffffffff00ffffffff00ff 00ffffff00ffffffff0000ffffffff00ffffffff00ff00ffff00ffffffff00ff00ffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc 666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffff ffffff000000000000ffffffff000000000000ffffffffff000000000000ffffffffff0000000000 00ffffffffff000000000000ffffffff000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccc cccccccc000000000000cccc00ffffffffffffffffffffffffffffff000000000000ffffffff0000 00ff00ff00ffffffff0000ff00ff00ffffffffff00ff00ff00ff00ffffffff0000ff00ff00ffffff ff0000ff00ff00ff00ffffffffff00ff00ff00ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc0000000000 00cccc00ffffffffffffffffffffffffffffff00ffffffff00ffffffff000000000000ff00ffff00 0000000000ff00ffffff00000000000000ffffffff000000000000ff00ffffff00000000000000ff ffff00000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffff ffffffffffffffffffff00ffffffff00ffffffff00ff00ff00ff00ffffff00ff00ff00ff00ffffff ffff00ff00ff00ff00ffffff00ff00ff00ff00ffffffffff00ff00ff00ff00ffffff00ff00ff00ff 00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccc cccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffff ff00ffffffff00ffff000000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff ff000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccc cccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffff00ffffffff00ffff 00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff 00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc00 0000000000cccc00ffffffffffffffffffffffffffffff000000000000000000000000ff00ff0000 0000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00ff00000000000000ff 00ff00000000000000ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ff ffffffffffffffffffffffffffffffffffffffff00ffffffff0000ff00ff00ffffffff0000ff00ff ff00ffffffff00ff00ff00ff00ffffffff0000ff00ffff00ffffffff00ff00ff0000ffffffff00ff 00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffff ffffffffffffffffffffff00ff0000ff00ff00ff0000ff0000ff00ff00ff00ff00ff0000ff0000ff 00ffff00ff0000ff00ff00ff00ff00ff0000ff0000ff00ff00ff0000ff0000ff00ffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc66 6666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffff ffff00ff0000ff0000ffffff00ff0000ff0000ffffffff00ff0000ff00ff00ffffff00ff0000ff00 00ffffffff00ff0000ff00ff00ffff00ff0000ff00ff00ffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccc cccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffff00ffffffff00ff 00ffff00ffffffff00ff00ffffff00ffffffff0000ffffffff00ffffffff00ff00ffffff00ffffff ff0000ffffff00ffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000 cccc00ffffffffffffffffffffffffffffffffffffffffff00000000000000ff00ff000000000000 00ff00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff00ff00000000 000000ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffff ffffffffffffffffff000000000000ffffffff000000000000ff00ffff000000000000ff00ffffff 00000000000000ffffffff000000000000ff00ffffff00000000000000ffffff00000000000000ff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccc cccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffff 00ffffffff00ffffffff00ff00ff00ff00ffffff00ff00ff00ff00ffffffffff00ff00ff00ff00ff ffff00ff00ff00ff00ffffffffff00ff00ff00ff00ffffff00ff00ff00ff00ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccc cccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffff00ffffffff00ffff00 0000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ffff000000000000ff00ff 00ff00000000000000ff00ff00000000000000ff00ffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc0000 00000000cccc00ffffffffffffffffffffffffffffff00ffffffff00ffff00ff00ff00ff00ff00ff 00ff00ff00ff00ff00ffffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffffff00ff00ff00ff 00ff00ff00ff00ff00ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffff ffffffffffffffffffffffffff00ffffffff00000000000000ff00ff00000000000000ff00ff00ff 00000000000000ff00ff00000000000000ff00ff00ff00000000000000ff00ff00000000000000ff 00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cc cccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffff ffffffff00000000000000ffffffff0000ff00ff00ffffffff0000ff00ff0000ffffffff00ff00ff 000000ffffffff0000ff00ff0000ffffffff00ff00ff0000ffffffff00ff00ff00ffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc6666 66cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffff ff00ff0000ff00ff00ff0000ff0000ff00ff00ff00ff00ff0000ff0000ff00ffff00ff0000ff00ff 00ff00ff00ff0000ff0000ff00ff00ff0000ff0000ff00ffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccc cccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffff00ff0000ff0000ff ffff00ff0000ff0000ffffffff00ff0000ff00ff00ffffff00ff0000ff0000ffffffff00ff0000ff

00ff00ffff00ff0000ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cc cc00ffffffffffffffffffffffffffffffffffffffffff00ffffffff00ff00ffff00ffffffff00ff 00ffffff00ffffffff0000ffffffff00ffffffff00ff00ffffff00ffffffff0000ffffff00ffffff ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffff ffffffffffffffffffffffffffff000000000000ffffffff000000000000ffffffffff0000000000 00ffffffffff000000000000ffffffffff000000000000ffffffff000000000000ffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccc cccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffff00 0000000000ffffffff000000000000ffffffffff000000000000ffffffffff000000000000ffffff ffff000000000000ffffffff000000000000ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccc cccccccccccc000000000000cccc00ffffffffffffffffffffffffffffff00ffffffff00ffffffff 00ffffffff00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffffffff00ffffffff00ff ffffff00ffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000 000000cccc00ffffffffffffffffffffffffffffff00ffffffff00ffffffff00ffffffff00ffffff ffff00ffffffff00ffffffffff00ffffffff00ffffffffff00ffffffff00ffffffff00ffffffff00 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffff ffffffffffffffffffffffff00ffffffff00ffffffff00ffffffff00ffffffffff00ffffffff00ff ffffffff00ffffffff00ffffffffff00ffffffff00ffffffff00ffffffff00ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccc cccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffff ffffff00ffffffff00ffffffff00ffffffff00ffffffffff00ffffffff00ffffffffff00ffffffff 00ffffffffff00ffffffff00ffffffff00ffffffff00ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666 cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffff000000000000 ffffffff000000000000ffffffffff000000000000ffffffffff000000000000ffffffffff000000 000000ffffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccc cc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc 00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccc cc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccc cccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc00000000 0000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccc cccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cc cccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc

000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc 666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffff ffffffffffff00ffffffffffffffffffffffff00ffffffffff00ffffffffffffffffff00ffffff00 ffffffffffffffffffffffffffff00ffffffffff00ffff0000000000ffffffffffffffffffffff00 ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff00ffffffffffff00ffffffffffffffffffffffffffff00ffffffffffffffffffffff00ffff ffffffffff0000000000ffff00ffffffffff00ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccc cccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffff00ffffff ffffffffffffffffffff00ffffffffff00ffffffffffffffffff00ffffffff00ffffffffffffffff ffffffff00ffffffffff00ffffffffff00ffffffffffffffffffffffff00ffffffff00ffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff ffff00ffffffffffffffffffffffffff00ffffffffffffffffffffff00ffffffffffffffffff00ff ffffffff00ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc0000000000 00cccc00ffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff ff00ffffffffff00ffffffffffffffffff00ffffffffff00ffffffffffffffffffffff00ffffffff ff00ffffffffff00ffffffffffffffffffffff00ffffffffff00ffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffff00ffffffffffff ffffffffffff00ffffffff00ffffffffffff00ffffffffffffffffffff00ffffffffff00ffffffff ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffff ffffffffffffffffffffffffffffffffff00ffffffffff000000ffffff00000000ffff00000000ff ffffffffffffffff00ffffffffffff00ffffffffffffffffff00ffffffffff00ffffffffffff00ff ffffffffffffffffff00ffffffffffff00ffffffffffffffffffff000000ffff00ffffff00ffff00 0000ffffff000000ffffffffffffffff00ffff00ffffffffff00ffffffffffffffffffffff00ffff ff000000ffffffffff00ffffffffffffffffffff00ffffffffffff00ffffffffff00ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccc cccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffff ffffffffffffffff00ffffffffffffffff00ff00ffffff00ff00ffffff00ffffffffffffffffff00 ffffffffffffff00ffffffffffffffff00ffffffffff00ffffffffffff00ffffffffffffffffff00

ffffffffffffff00ffffffffffffffffff00ffffff00ff00ffffff00ff00ffffff00ff00ffffff00 ffffffffffffff00ff00ffffffffffff00ffffffffffffffffffff00ffffffffff00ffffffffff00 ffffffffffffffffffffff00ffffffffffff00ffffffffff00ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccc cccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffff00 ffffffffff00000000ff00ffffff00ff00ffffff00ffffffffffffffffff00ffffffffffff00ffff ffffffffffffff00ffffffffff00ffffffffffff00ffffffffffffffffffff00ffffffffffff00ff ffffffffffffffffff0000ffffff00ffffff00ff00ffffffffff00ffffffffffffffffffffff0000 ffffffffffffff00ffffffffffffffffff00ffffffffffffffffffffff00ffffffffffffffffffff ffff00ffffffffffff00ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc00 0000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00 ff00ffffff00ff00ffffff00ffffffffffffffffff00ffffffffff00ffffffffffffffffffffff00 ffffffffff00ffffffffff00ffffffffffffffffffffff00ffffffffff00ffffffffffffffffffff ffff00ffff00ffffff00ff00ffffffffff00ffffffffffffffffffffff00ff00ffffffffff00ffff ffffffffffffffff00ffffffffffffffffffffff00ffffffffffffffffffffffff00ffffffffff00 ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ff ffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00ffffff00ff00ff ffff00ffffffffffffffffff00ffffffff00ffffffffffffffffffffffff00ffffffffff00ffffff ffff00ffffffffffffffffffffffff00ffffffff00ffffffffffffffffff00ffffff00ff00ffff00 00ff00ffffff00ff00ffffff00ffffffffffffff00ffff00ffffffff00ffffffffffffffffff00ff ffffffffffff0000ffff00ffffffffffffffffffffffffff00ffffffffff00ffffffffff00ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffff ffffffffffffffffffffffffffff00ffffff00000000ffff00000000ffff00000000ffffffffffff ffffff00ffffff00ffffffffffffffffffffffffffff00ffffffffff00ffffffff00ffffffffffff ffffffffffffff00ffffff00ffffffffffffffffffff000000ffffff0000ff00ffff000000ffffff 000000ffffffffffffffff00ffffff00ffff00ffffffffffffffffffff00ffffffffffffff00ffff ff00ffffffffffffffffffffffffff00ffffffff00ffffffffff00ffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc66 6666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 00ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccc cccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000 cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccc cccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccc cccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc0000 00000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cc cccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc6666 66cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccc cccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffff00cccccccccccccccccccccccccccccccccccccccccc000000000000cc cc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff00cccccccccccccccccccccccccccccccccccccccccc000000000000cccc00ffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ccccf4f4f4f4 f4f4f4f4f4f4f4f4f466cccccccccc000000000000cccc00ffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff00ccccf4cccccccccccccccccccccccc 66cccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff00ccccf4cccccccccccccccccccccccc66cccccccccc000000 000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff00ccccf4cccccccccccccccccccccccc66cccccccccc000000000000cccc00ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccc f4cccccccccccccccccccccccc66cccccccccc000000000000cccc00000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000ccccf46666666666666666 6666666666cccccccccc000000000000cccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cc000000000000cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc000000000000cccc f4f4f4f4f466ccccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4ccf4cc f4ccf4ccf4ccf4ccf4ccf4ccf4cccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4f4f4f4 f466cccccccccccccccccccccccccccccccccccccccccc000000000000ccccf4cccccccc66cccccc ccccccccccccccccccccccccccccf4cccccccccccccccccccccccccccccccccccccccccccccccccc cccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccccccccccf4cccccccc66cccccccccccccc cccccccccccccccccccccccccccc000000000000ccccf4cccccccc66ccccf4cccccccccccccccccc cccccccccccccccccccccccccccccccccccccccc66cccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccf4cccccccc66cccccccccccccccccccccccccccccccc cccccccccc000000000000ccccf4cccccccc66cccccccccccccccccccccc66ccccccccccf4cccccc cccccccccccccccccccccccccccccccccccc66cccccccccccccc66cccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccf4cccccccc66cccccccccccccccccccccccccccccccccccccccccc00000000 0000ccccf4cccccccc66ccccf4cccccccccccccc66cccccccccccccccccccccccccccccccccccccc cccc66cccccccccc66cc66cccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc f4cccccccc66cccccccccccccccccccccccccccccccccccccccccc000000000000ccccf4cccccccc 66cccccccccccccccccc66cc66ccccccccccf4cccccccccccccccccccccccccccccccccccccccccc 66cc66cccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4cccccccc66cccccc cccccccccccccccccccccccccccccccccccc000000000000ccccf4cccccccc66ccccf4cccccccccc 66cc66cccccccccccccccccccccccccccccccccccccccccc66cccccccccc66cc66cc66cccccccccc cccc6666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 6666666666666666666666666666666666666666ccccf4cccccccc66cccccccccccccccccccccccc cccccccccccccccccc000000000000ccccf4cccccccc66cccccccccccccc66cc66cc66cccccccccc f4cccccccccccccccccccccccccccccccccccccccccc66cc66cccccccccc66cc6666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666

66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 6666666666666666666666ccccf4cccccccc66cccccccccccccccccccccccccccccccccccccccccc 000000000000ccccf4cccccccc66ccccf4cccccccccc66cc66cccccccccccccccccccccccccccccc cccccccccccc66cccccccccc66cc66cccccccccccccccccc66666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 66666666666666666666666666666666666666666666666666666666666666666666666666666666 6666ccccf4cccccccc66cccccccccccccccccccccccccccccccccccccccccc000000000000ccccf4 cccccccc66cccccccccccccccccc66cc66ccccccccccf4cccccccccccccccccccccccccccccccccc cccccccc66cccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4cccccccc 66cccccccccccccccccccccccccccccccccccccccccc000000000000ccccf4cccccccc66ccccf4cc cccccccccccc66cccccccccccccccccccccccccccccccccccccccccc66cccccccccc66cccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

ccccccccccccccccccccccccccccccccccccccccccccccccccccf4cccccccc66cccccccccccccccc cccccccccccccccccccccccccc000000000000ccccf4cccccccc66cccccccccccccccccccccccccc ccccccccf4cccccccccccccccccccccccccccccccccccccccccccccccccccccccccc66cccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccf4cccccccc66cccccccccccccccccccccccccccccccccc cccccccc000000000000ccccf4cccccccc66ccccf4cccccccccccccccccccccccccccccccccccccc cccccccccccccccccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccf4cccccccc66cccccccccccccccccccccccccccccccccccccccccc0000000000 00ccccf46666666666cccccc66cc66cc66cc66cc66cc66cc66cc66cc66cc66cc66cc66cc66cc66cc 66cc66cc66cc66cc66cc66cc66cc66cc66cccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4 6666666666cccccccccccccccccccccccccccccccccccccccccc000000000000cccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccc000000000000cccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccc000000000000cccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc00 0000000000cccc000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000ccccf4f4f4f4f4f4f4f4f4f4f4f4f466cccccccccc000000000000cccc00ff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 ccccf4cccccccccccccccccccccccc66cccccccccc000000000000cccc00ffffffffffffffffffff ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff ffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff ffffffffffffffff00ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ccccf4cccccccccccc cccccccccccc66cccccccccc000000000000cccc00ffffffffffffffffffffff0000ffffffffff00 00ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff0000ffffffff ffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff00 ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff00ccccf4cccccccccccccccccccccccc66cccc cccccc000000000000cccc00ffffffffffffffffffffff0000ffffffff0000ffffffffffffffffff ffffffffffffffffffffffffffffffffffff00ffffffffffff0000ffffffffffffffffffffffffff ff00ffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff00ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff00ccccf4cccccccccccccccccccccccc66cccccccccc000000000000 cccc00ffffffffffffffffffff00ffff00ffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffff00ffffffffffff00ffff00ffffffffffffffffffffffff00ffffffffff00ffff ffffffffffffffffffff00000000ffff00ff0000ffffffff00ff0000ffffff000000ffffffff0000 00ffffffff00000000ffffffffffffffffff00000000ffffffffffff00ffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff00ccccf466666666666666666666666666cccccccccc000000000000cccc00ffffffffffff ffffffff00ffff00ffffffffffffffffffffffffffffff00000000000000ffffffffffffffffff00 ffffffffffff00ffff00ffffffffffffffffffffff00ffffffffffff00ffffffffffffffffffffff 00ffffffffffff0000ffff00ffffff0000ffffffff00ffffff00ffff00ffffff00ffff00ffffff00 ffffffffffffffffffffffff00ffffffffffff00ffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccc cccccccccccccccccccccccccccccccc000000000000cccc00ffffffffffffffffffff00ffff00ff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff00ffff 00ffffffffffffffffffff00ffffffffffffff00ffffffffffffffffffffff00ffffffffffff00ff ffff00ffffff00ffffffffff00ffffff00ffffffffffff00ffff00ffffff00ffffffffffffffffff ffffff00ffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccccccccccccccc cccccccccccccc000000000000cccc00ffffffffffffffffff000000000000ffffffffffffffffff ffffffffff00000000000000ffffffffffffffffff00ffffffffff000000000000ffffffffffffff ffffff00ffffffffffff00ffffffffffffffffffffffff000000ffffff00ffffff00ffffff00ffff ffffff0000000000ffffff00000000ffff00ffffff00ffffffffffffffffffffffff00ffffffffff

ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff00cccccccccccccccccc66cccccccccccccccccccccc0000 00000000cccc00ffffffffffffffffff00ffffffff00ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff00ffffffffff00ffffffff00ffffffffffffffffffffff00ffffffff ff00ffffffffffffffffffffffffffffff00ffff00ffffff00ffffff00ffffffffff00ffffffffff ff00ffffff00ffff00ffffff00ffffffffffffffffffffffff00ffffffffffff00ffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffff00cccccccccccccccc66cc66cccccccccccccccccccc000000000000cccc00ffff ffffffffffffff00ffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffff00ffffffff00ffffffff00ffffffffffffffffffffffff00ffffffff00ffffffffffffff ffffffffffffffff00ffff00ffffff00ffffff00ffffffffff00ffffff00ffff00ffffff00ffff00 ffff0000ffffffffffffffffffffffff00ffffffffff00ffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cc cccccccccccccccc66cccccccccccccccccccccc000000000000cccc00ffffffffffffffffff00ff ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff 00ffffffff00ffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff00000000ff ffff00000000ffffffff00ffffffffffff000000ffffffff000000ff00ffff0000ff00ffffffffff ffffffffffffff00ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc66cc 66cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffff ffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff00ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000ffffffff00ff ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffff00cccccccccccccccccc66cccccccccccccccccc cccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffff00cccccccccccccccc66cc66cccccccccccccccccccc000000000000cc cc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff00cccccccccccccccccc66cccccccccccccccccccccc000000000000cccc00ffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff00ffffffffffffffffff ffffffffffffffffffffffffffffff00ffffffffffffffffff0000ffffffff00ffffffffffffffff ffffffffffff00ffffffffffffffffffff00ffffffffffff0000ffffffffffffffffffffffffffff ff0000ffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff

0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccc cccc66cc66cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffff00ffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff ffffffffffff00ffffffffffffffff00ffffffffffff00ffffffffffffffffffffffffffff00ffff ffffffffffffffff00ffffffffffffffff00ffffffffffffffffffffffffff00ffffffffffff00ff ffffffffffffffffffffff000000ffffffffffffffffffff00ffffffffffffffff00ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccc cccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff ffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 ffffffffffffffff00ffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff ff00ffffff00ffffffffffffffffff00ffffffffffffffff00ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000 000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffff00ff 0000ffffffff00ff0000ffffff000000ffffffff000000ffffffff00000000ffffffffffffffffff 00000000ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff00ffffff ffff000000ffffffffffffffffffffff00000000ffffffffffffffffffff00ffffff00ffffffffff 00ffffffffffffffffffffff00ffffffffff000000ffffffffffffffffffffff00ffffff00ffffff ffffffffffff00ffffff00ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffff00cccccccccccccccc666666cccccccccccccccccccc000000000000cccc00ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff0000ffff00ffffff0000ff ffffff00ffffff00ffff00ffffff00ffff00ffffff00ffffffffffffffffffffffff00ffffffffff ffffffff00000000000000ffffffffffffffffffff00ffffffffff00ffffffffffffff00ffffffff ffffffffffffffffffff00ffffffffffffffffffff00ffff00ffffffffffff00ffffffffffffffff ffffff00ffffffffffffff00ffffffffffffffffffffff00ffffff00ffffffffffffffffff00ffff 00ffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccc cccccccccccccccccccccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffff00ffffffffffff00ffffff00ffffff00ffffffffff00ffffff00ff ffffffffff00ffff00ffffff00ffffffffffffffffffffffff00ffffffffffffffffffffffffffff ffffffffffffffffffffffff00ffffffffff00ffffffffffffff00ffffffffffffffffffffffffff ff00ffffffffffffffffffff00ff00ffffffffffffff00ffffffffffffffffffffff00ffffffffff ffff00ffffffffffffffffffffff00ffffff00ffffffffffffffffff00ff00ffffffffffffff00ff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ccccccf4f4f4f4f4f4f4f4 f4f4f4f4f4cccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffff000000ffffff00ffffff00ffffff00ffffffffff0000000000ffffff00000000ffff00 ffffff00ffffffffffffffffffffffff00ffffffffffffffffff00000000000000ffffffffffffff ffffff00ffffffffff00ffffffffffffff00ffffffffffffffffffffffffffff00ffffffffffffff ffffff000000ffffffffffffff00ffffffffffffffffffffff00ffffffffffffff00ffffffffffff ffffffffff00ffffff00ffffffffffffffffff000000ffffffffffffff00ffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffff00ccccf4cccccccccccccccccccccccc66cccccccc cc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 ffff00ffffff00ffffff00ffffffffff00ffffffffffff00ffffff00ffff00ffffff00ffffffffff ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff 00ffffffffffffff00ffffffffffffffffffffffffffff00ffffffffffffffffffff00ffff00ffff ffffffff00ffffffffffffffffffffff00ffffffffffffff00ffffffffffffffffffffff00ffffff 00ffffffffffffffffff00ffff00ffffffffffff00ffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffff00ccccf4cccccccccccccccccccccccc66cccccccccc000000000000cccc 00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff00ffffff00ffff ff00ffffffffff00ffffff00ffff00ffffff00ffff00ffff0000ffffffffffffffffffffffff00ff ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff00ffffffffffff00 ffffffffffff0000ffffffffffff00ffffffffff0000ffffff00ffffff00ffffffff00ffffffffff 0000ffffffffffff00ffffffffffff00ffffffffffff0000ffffff00ffffff00ffffffff0000ffff ff00ffffff00ffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff00ccccf4cccccccccccccccccccccccc66cccccccccc000000000000cccc00ffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffff00000000ffffff00000000ffffffff00ffffffffffff00 0000ffffffff000000ff00ffff0000ff00ffffffffffffffffffffffff00ffffffffffffffffffff ffffffffffffffffffffffffffffffffffff00ffffffff00ffffffffffff00ffffffffffff0000ff ffffffffff00ffffffffff0000ffffff00ffffffff00ffffff00ffffffffff0000ffffffffffff00 ffffffffffff00ffffffffffff0000ffffffff000000ffffffffff0000ffffff00ffffffff00ffff ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ccccf4cccccccc cccccccccccccccc66cccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff00000000000000ffffffff00ffffffffffffffffffffffffffffffffffffff ffffffffffffffffff00ffffffffff0000ffffffffffffffffffff0000ffffffffffffff00ffffff ff0000ffffffffffffffffffffff0000ffffffffffffffffffffffffffffff0000ffffffffffffff ffffff0000ffffffffffffffffffffffff0000ffffffffffffffffffffff0000ffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffff00ccccf4cccccccccc6666cccccccccc66 cccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffff00ccccf4cccccccc66666666cccccccc66cccccccccc00000000 0000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffff00ccccf4cccccc666666666666cccccc66cccccccccc000000000000cccc00ffffffff ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff00ffffffffffffffffffffff00ffffffff0000ffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ccccf4 cccc6666666666666666cccc66cccccccccc000000000000cccc00ffffffffffffffffff00000000 ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff0000 0000ffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffff ffffffff00ffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ccccf4cccc66666666666666 66cccc66cccccccccc000000000000cccc00ffffffffffffffffff00ffffff00ffffff0000ffffff ffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ffffff00ffffffffffff ffffffffffffff00ffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff00ccccf4cccccccccccccccccccccccc66cccccccccc 000000000000cccc00ffffffffffffffffff00ffffff00ffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffff00ffffffffff00ffffff00ffffffffffffffffffffffff00ffff ffffff00ffffffffffffffffffffffff00000000ffff00ff0000ffffffff00ff0000ffffff000000 ffffffff000000ffffffff00000000ffffffffffffffffff000000ffffffffffffff00ffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff00ccccf4cccccccccccccccccccccccc66cccccccccc000000000000cccc00 ffffffffffffffffff00ffffff00ffffffffffffffffffffffffffffff00000000000000ffffffff ffffffffff00ffffffffff00ffffff00ffffffffffffffffffffff00ffffffffffff00ffffffffff ffffffffffff00ffffffffffff0000ffff00ffffff0000ffffffff00ffffff00ffff00ffffff00ff ff00ffffff00ffffffffffffffffffffff00ffffffffffffff00ffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00ccccf4cccccccccccccccccccccccc66cccccccccc000000000000cccc00ffffffffffffffffff 00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff ffff00000000ffffffffffffffffffffff00ffffffffffffff00ffffffffffffffffffffff00ffff ffffffff00ffffff00ffffff00ffffffffff00ffffff00ffffffffffff00ffff00ffffff00ffffff ffffffffffffffff00ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ccccf4cccccccccc cccccccccccccc66cccccccccc000000000000cccc00ffffffffffffffffff00ffffff00ffffffff ffffffffffffffffffffff00000000000000ffffffffffffffffff00ffffffffff00ffffff00ffff ffffffffffffffffff00ffffffffffff00ffffffffffffffffffffffff000000ffffff00ffffff00 ffffff00ffffffffff0000000000ffffff00000000ffff00ffffff00ffffffffffffffffffffff00 ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff00ccccf4cccccccccccccccccccccccc66cc cccccccc000000000000cccc00ffffffffffffffffff00ffffff00ffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff00ffffffffff00ffffff00ffffffffffffffffffffff ff00ffffffffff00ffffffffffffffffffffffffffffff00ffff00ffffff00ffffff00ffffffffff 00ffffffffffff00ffffff00ffff00ffffff00ffffffffffffffffffffff00ffffffffffffff00ff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffff00ccccf4f4f4f4f4f4f4f4f4f4f4f4f466cccccccccc0000000000 00cccc00ffffffffffffffffff00ffffff00ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffff00ffffffff00ffffff00ffffffffffffffffffffffffff00ffffffff00ff ffffffffffffffffffffffffffff00ffff00ffffff00ffffff00ffffffffff00ffffff00ffff00ff ffff00ffff00ffff0000ffffffffffffffffffffff00ffffffffffff00ffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffff00ccccf4cccccccccccccccccccccccc66cccccccccc000000000000cccc00ffffffffff ffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff00ffffffff00000000ffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff ff00000000ffffff00000000ffffffff00ffffffffffff000000ffffffff000000ff00ffff0000ff 00ffffffffffffffffffffff00ffffffffffff00ffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ccccf4cc cccccccccccccccccccccc66cccccccccc000000000000cccc00ffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff00 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000 ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffff00ccccf4cccccccccccccccccccc cccc66cccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffff00ccccf4cccccccccccccccccccccccc66cccccccccc00 0000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffff00ccccf4cccccccccccccccccccccccc66cccccccccc000000000000cccc00ff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff00ffffffff ffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffff0000ffffffff00ffff ffffffffffffffffffffffff00ffffffffffffffffffff00ffffffffffff0000ffffffffffffffff ffffffffffffff0000ffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff00 ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 ccccf4cccccccccccccccccccccccc66cccccccccc000000000000cccc00ffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffff00ffffffffffffffffffffff00ffffffffffffffffffffffffff ffffffffffffffffffffffff00ffffffffffffffff00ffffffffffff00ffffffffffffffffffffff ffffff00ffffffffffffffffffff00ffffffffffffffff00ffffffffffffffffffffffffff00ffff ffffff000000ffffffffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffff00 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ccccf4cccccccccccc cccccccccccc66cccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffff00ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffff00ffffffffffffffff00ffffffffffffffffffffffffff00ffffffff00ffffff00ffff ffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff00ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff00ccccf4cccccccccccccccccccccccc66cccc

cccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 0000ffff00ff0000ffffffff00ff0000ffffff000000ffffffff000000ffffffff00000000ffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff ffff00ffffffffff000000ffffffffffffffffffffff00000000ffffffffffffffffffff00ffffff 00ffffffffff00ffffffffffffffffffffff00ffffffffff00ffffff00ffffffffffffffffff0000 0000ffffffffffffffffffff00ffffff00ffffffffff00ffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff00ccccf4cccccccccccccccccccccccc66cccccccccc000000000000 cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff0000ffff00 ffffff0000ffffffff00ffffff00ffff00ffffff00ffff00ffffff00ffffffffffffffffffffff00 ffffffffffffffffffff00000000000000ffffffffffffffffffff00ffffffffff00ffffffffffff ff00ffffffffffffffffffffffffffff00ffffffffffffffffffff00ffff00ffffffffffff00ffff ffffffffffffffffff00ffffffffff00ffffff00ffffffffffffffffffffffff00ffffffffffffff ffffff00ffff00ffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff00ccccf4cccccccccccccccccccccccc66cccccccccc000000000000cccc00ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffff00ffffffffffff00ffffff00ffffff00ffffffffff 00ffffff00ffffffffffff00ffff00ffffff00ffffffffffffffffffffff00ffffffffffffffffff ffffffffffffffffffffffffffffffffffff00ffffffffff00ffffffffffffff00ffffffffffffff ffffffffffffff00ffffffffffffffffffff00ff00ffffffffffffff00ffffffffffffffffffffff 00ffffffffff00ffffff00ffffffffffffffffffffffff00ffffffffffffffffffff00ff00ffffff ffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ccccf4cccc cccccccccccccccccccc66cccccccccc000000000000cccc00ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffff000000ffffff00ffffff00ffffff00ffffffffff0000000000ffffff00 000000ffff00ffffff00ffffffffffffffffffffff00ffffffffffffffffffff00000000000000ff ffffffffffffffffff00ffffffffff00ffffffffffffff00ffffffffffffffffffffffffffff00ff ffffffffffffffffff000000ffffffffffffff00ffffffffffffffffffffff00ffffffffff00ffff ff00ffffffffffffffffffffffff00ffffffffffffffffffff000000ffffffffffffff00ffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffff00ccccf4cccccccccccccccccccccc cc66cccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffff00ffff00ffffff00ffffff00ffffffffff00ffffffffffff00ffffff00ffff00ffffff 00ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff ff00ffffffff00ffffffffffffff00ffffffffffffffffffffffffffff00ffffffffffffffffffff 00ffff00ffffffffffff00ffffffffffffffffffffff00ffffffffff00ffffff00ffffffffffffff ffffffffff00ffffffffffffffffffff00ffff00ffffffffffff00ffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff00ccccf4cccccccccccccccccccccccc66cccccccccc0000 00000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff00 ffffff00ffffff00ffffffffff00ffffff00ffff00ffffff00ffff00ffff0000ffffffffffffffff ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff00ff ffffffffff00ffffffffffff0000ffffffffffff00ffffffffff0000ffffff00ffffff00ffffffff 00ffffffffff0000ffffffffffff00ffffffff00ffffff00ffffffff0000ffffffffffff00ffffff ffff0000ffffff00ffffff00ffffffff00ffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffff00ccccf4cccccccccccccccccccccccc66cccccccccc000000000000cccc00ffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffff00000000ffffff00000000ffffffff00ff ffffffffff000000ffffffff000000ff00ffff0000ff00ffffffffffffffffffffff00ffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ffffffffffff00ffffff ffffff0000ffffffffffff00ffffffffff0000ffffff00ffffffff00ffffff00ffffffffff0000ff ffffffffff00ffffffffff000000ffffffffff0000ffffffffffff00ffffffffff0000ffffff00ff ffffff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cc ccf466666666666666666666666666cccccccccc000000000000cccc00ffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffff00000000000000ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff00ffffffffff0000ffffffffffffffffffff0000ffffffffff ffff00ffffffff0000ffffffffffffffffffffff0000ffffffffffffffffffffffffffffff0000ff ffffffffffffffffff0000ffffffffffffff00ffffffff0000ffffffffffffffffffffff0000ffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ccccf4cccccccccccccc cccccccccc66cccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffff00ccccf4cccccccccccccccccccccccc66cccccc cccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffff00ccccf4cccccccccccccccccccccccc66cccccccccc000000000000cc cc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffff0000ffffffffffffffffff ffffffffff00ffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff0000 ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff00ccccf4cccccccccccccccccccccccc66cccccccccc000000000000cccc00ffffffffffffff ffffffff0000ffffffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff ffffffffffff00ffffffffffff0000ffffffffff0000ffffffffffffffffffffffffffff00ffffff ffffffffffffffffffff00ffffffffffffffffff00000000ffffffffff0000ffffffffff00ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ccccf4cccccc cccccccccccccccccc66cccccccccc000000000000cccc00ffffffffffffffffffffff0000ffffff ffffffffffffff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff00ffff ffffffff0000ffffffff0000ffffffffffffffffffffffffffff00ffffffffffffffffffffffffff 00ffffffffffffffffffff00ffffff00ffffff0000ffffffffffff00ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff00ccccf4cccc6666666666666666cccc 66cccccccccc000000000000cccc00ffffffffffffffffffff00ffff00ffffffffffffffffff00ff ffff00ffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff00ffff00ffff ffffffffffffffffffffffffffffffffff00ffffffff0000ffffffffffffff00ffffffffffffffff ffff00ffffff00ffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff00ccccf4cccc6666666666666666cccc66cccccccccc000000 000000cccc00ffffffffffffffffffff00ffff00ffffffffffffffffff00ffffff00ffffffffffff ffff00000000000000ffffffffffffffffff00ffffffffffff00ffff00ffffffffffffffffffffff ffffffffffffff00ffffffffff0000ffffffffffff00ffffffffffffffffffffff00ffffff00ffff ffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff00ccccf4cccccc666666666666cccccc66cccccccccc000000000000cccc00ffffff ffffffffffffff00ffff00ffffffffffffffffff00000000ffffffffffffffffffffffffffffffff ffffffffffffffffff00ffffffffffff00ffff00ffffffffffffffffffffffffffffffffffff00ff ffffffffffffffffffffffff00ffffffffffffffffffffff00000000ffffffffffffffffffffffff ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccc f4cccccccc66666666cccccccc66cccccccccc000000000000cccc00ffffffffffffffffff000000 000000ffffffffffffffff00ffffff00ffffffffffffffff00000000000000ffffffffffffffffff 00ffffffffff000000000000ffffffffffffffffffffffffffffffffff00ffffffffffffffffffff ffffff00ffffffffffffffffffffff00ffffff00ffffffffffffffffffffffff00ffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ccccf4cccccccccc6666cc cccccccc66cccccccccc000000000000cccc00ffffffffffffffffff00ffffffff00ffffffffffff ffff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff00ffff ffff00ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffff00ffffffffffff ffffffffffff00ffffff00ffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffff00ccccf4cccccccccccccccccccccccc66cccccccc cc000000000000cccc00ffffffffffffffffff00ffffffff00ffffffffffffffff00ffffff00ffff ffffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ffffffff00ffffffffffff ffffffffffffffffffff00ffffffffffff0000ffffffffff00ffffffffffffffffffffffff00ffff ff00ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffff00ccccf4cccccccccccccccccccccccc66cccccccccc000000000000cccc 00ffffffffffffffffff00ffffffff00ffffffffffffffff00000000ffffffffffffffffffffffff ffffffffffffffffffffffffffff00ffffffff00ffffffff00ffffffffffffffffffffffffffffff 00ffffffffffffff0000ffffffff00ffffffffffffffffffffffffff00000000ffffffffffffffff ffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff00ccccf4cccccccccccccccccccccccc66cccccccccc000000000000cccc00ffffffffffffffff ffffffffffffff00000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff0000 ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ccccf4cccccccc cccccccccccccccc66cccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffff00ccccf466666666666666666666666666 cccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffff00cccccccccccccccccccccccccccccccccccccccccc00000000 0000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffff0000ffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffff ffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffff00cccccccccccccccc66cc66cccccccccccccccccccc000000000000cccc00ffffffff ffffffff00000000000000ffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff ffffffffffffffffffffffffffffffff00ffffffffff00ffffffffffffffffffffffffffff00ffff ffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff00000000ffffffffff00 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccc cccccccccccc66cccccccccccccccccccccc000000000000cccc00ffffffffffffffffffffff00ff

ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffff ffffffffffffff00ffffffffff00ffffffffffffffffffffffffffff00ffffffffff00ffffffffff ffffffffffffffffff0000ffffffffffffffffffff00ffffff00ffffffff00ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc66cc66cc cccccccccccccccccc000000000000cccc00ffffffffffffffffffffff00ffffffffffffffffffff ffffffffffffffffffffffffffffffff00ffffffff00ff00ffff00ffff00ffffff00ffffffff00ff ffffff0000000000ffffffffffffffffffffff00ffffffffffff00ffffffffffffffffffffffff00 ffff00ffffffffffffffffff00ffffff00ffffffffff00ffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff00cccccccccccccccccc66cccccccccccccccccccccc 000000000000cccc00ffffffffffffffffffffff00ffffffffffffffffffff00000000000000ffff ffffffffffffff00ffffffff0000ff0000ff00ff00ffffff00ffffffff00ffffffffff00ffffffff ffffffffffffffffffff00ffffffffffffff00ffffffffffffffffffffff00ffff00ffffffffffff ffffff00ffffff00ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff00cccccccccccccccc66cc66cccccccccccccccccccc000000000000cccc00 ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff00ff ffffff00ffff00ffff00ff00ffffff00ffffffff00ffffffffff00ffffffffffffffffffffffffff ff00ffffffffffffffff00ffffffffffffffffffff00ffff00ffffffffffffffffff00000000ffff ffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00cccccccccccccccccc66cccccccccccccccccccccc000000000000cccc00ffffffffffffffffff ffff00ffffffffffffffffffff00000000000000ffffffffffffffffff00ffffffff00ffff00ffff 00ff00ffffff00ffffffff00ffffffffff00ffffffffffffffffffffffffffff00ffffffffffffff 00ffffffffffffffffffff000000000000ffffffffffffffff00ffffff00ffffffffff00ffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc 66cc66cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffff00ffffffffffff ffffffffffffffffffffffffffffffffffffffff00ffffffff00ffff00ffff00ff00ffffff00ffff ffff00ffffffffff00ffffffffffffffffffffffffffff00ffffffffffff00ffffffffffffffffff ffff00ffffffff00ffffffffffffffff00ffffff00ffffffffff00ffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccccc66cccccccccccccc cccccccc000000000000cccc00ffffffffffffffffffffff00ffffffffffffffffffffffffffffff ffffffffffffffffffffffff00ffffff00ffff00ffff00ff00ffff0000ffffffff00ffffffffff00 ffffffffffffffffffffffffffff00ffffffffff00ffffffffffffffffffffffff00ffffffff00ff ffffffffffffff00ffffff00ffffffff00ffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffff00cccccccccccccccc66cc66cccccccccccccccccccc0000000000 00cccc00ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff ffffff00ffffff00ffff00ffff00ffff0000ff00ffffffff00ffffffffffff000000ffffffffffff ffffffffff00ffffffffffffffffffffffffffffffffffff00ffffffff00ffffffffffffffff0000

0000ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffff00cccccccccccccccccc66cccccccccccccccccccccc000000000000cccc00ffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff ffffffffffffffffffffffffffffffffffffffffff00000000000000ffffffffffffffff0000ffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccc cccccccc66cc66cccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccccc66cccccc cccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffff00cccccccccccccccc66cc66cccccccccccccccccccc00 0000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff00ffffffffffffffffff0000ffffffffffffffffffffffffffffffff00ffffffffffff0000ff ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff00ffffffffffff00 00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffff00cccccccccccccccccc66cccccccccccccccccccccc000000000000cccc00ff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff ffff00ffffffffffffffffffffffffffffffffffff00ffffffffffffffff00ffffffffffffffffff ffffffff00ffffffffffffffffffffffffffffffffffff00ffffffffffffffff00ffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 cccccccccccccccc66cc66cccccccccccccccccccc000000000000cccc00ffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff00ffff ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffff00ffffffffffff ffffffffffffffffffffffff00ffffffffffffffff00ffffffffffffffffffffffffff00ffffffff ffffffffffffffffff00ffffffff00ffffffffffffffff00ffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccccc 66cccccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffff00ff00ffff00ffff00ffffff00ffffffff00ffffffff0000000000ffffffffffffffff ffffffffffffffffffffffffffffffff00ffffffffffff00ffffffffffff000000ffffffff0000ff ffffff00ff0000ffffffffffff00ffffffffffffffffffffff00ffffffffffff000000ffffffffff 00ffffffff00ff0000ffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccc66cc66cccccccccccccc cccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff00 00ff00ff00ffffff00ffffffff00ffffffffff00ffffffffffffffffffffff00000000000000ffff ffffffffffffffff00ffffffffff00ffffffffff00ffffff00ffffff0000ffffffff0000ffff00ff ffffffff00ffffffffffffffffffffff00ffffffffff00ffffff00ffffffff00ffffffff0000ffff 00ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff00cccccccccccccccccc66cccccccccccccccccccccc000000000000 cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff00ffff00ff00ffffff00 ffffffff00ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 ffffffffff00ffffffffffffffffff00ffffffffffffffffff00ffffff00ffffffffff00ffffffff ffffffffffffff00ffffffffffffffffff00ff00000000000000ff00ffffff00ffffffffff00ffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff00cccccccccccccccc66cc66cccccccccccccccccccc000000000000cccc00ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff00ffff00ffff00ff00ffffff00ffffffff00ffffffff ff00ffffffffffffffffffffff00000000000000ffffffffffffffffffff00ffffffffff00ffffff ffffff00000000ffffffffffffffffff00ffffff00ffffffffff00ffffffffffffffffffffff00ff ffffffffff00000000ffffffff00ffffffff00ffffff00ffffffffff00ffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccc cccccccccccccccccccccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff00ffff00ffff00ff00ffffff00ffffffff00ffffffffff00ffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ffffffffff00ffffff00ffff ffffffffffffff00ffffff00ffffffffff00ffffffffffffffffffffff00ffffffffff00ffffff00 ffffffff00ffffffff00ffffff00ffffffffff00ffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffff00cccccccccccccccccccccccccccc cccccccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00ffff00ffff00ff00ffff0000ffffffff00ffffffffff00ffffffffffffffffffffffffffffffff ffffffffffffffffffffffffff00ffffffffff00ffffffff00ffffff00ffffff0000ffffffff00ff ffff00ffffffff00ffffffffff0000ffffffffffff00ffffffff00ffffff00ffffffff00ffffffff 00ffffff00ffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff00ccccf4f4f4f4f4f4f4f4f4f4f4f4f466cccccccccc0000 00000000cccc00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff00ffff00ffff 0000ff00ffffffff00ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffff ffffffffff00ffffffff00ffffffffff000000ff00ffff0000ffffffff00000000ffffffffff00ff ffffffff0000ffffffffffff00ffffffffff000000ff00ffffffffffffffff00000000ffffffffff 00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffff00ccccf4cccccccccccccccccccccccc66cccccccccc000000000000cccc00ffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff ffff0000ffffffffffffffffff0000ffffffffffffffffffffffff0000ffffffffffffffffffffff ffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00cc ccf4cccccccccccccccccccccccc66cccccccccc000000000000cccc00ffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ccccf4cccccccccccccc cccccccccc66cccccccccc000000000000cccc00ffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffff00ccccf4cccccccccccccccccccccccc66cccccc cccc000000000000cccc000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000ccccf466666666666666666666666666cccccccccc000000000000cc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccc000000000000cccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccc000000000000cccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccc000000000000cccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc000000 000000cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccc000000000000cccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccc000000000000cccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccc000000000000cccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cc000000000000cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc000000000000cccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccc000000000000cccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccc000000000000cccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccc000000000000cccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc000000f4 f4f4f4f4cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccccccf4f4f4f4f4f4cccccc66cccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccf4cccccc66f4cccccc66cccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccf4cccccc66f4cccccc66cccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4cc cccc66f4cccccc66cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4cccccc66f4cccccc66cc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccf4cccccc66f4cccccc66f4f4f4f4f4f4cccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccf4f4f4f4f4f4f4cccccc66f4cccccccccccccccccc66cccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccf4cccccc cccccccccccc66f4cccccccccccccccccc6600000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000

00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000f4cccccccccccccccccc66f4cc cccccccccccccccc6600000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000f4cccccccccccccccccc66f466666666666666666666 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000f466666666666666666666 grestore showpage %%enddocument endtexfig 439 1490 a fn(fig.)15 b fq(3.2)f(-)31 b fj(construction)15 b(d'un)i(pr)n(o)n(gr)n(amme)f(ave)n(c)g fn(vpei)75 1633 y fq(sym)o(b)q(olis)o(\023)-21 b(es)17 b(par)f(des)h(p)q(oin)o(ts)g fj(\()-9 b(\()q fq(noircis)p fj(\))g(\))q fq(.)16 b(l'application)j(du) e(pro)q(duit)g(\022)-23 b(a)16 b(tous)g(les)i(couples)g(donne)f(le)75 1689 y(c)o(hamp)f fk(t)p fq(.)g(on)g(utilise)j(ensuite)e(une)g(r)o (\023)-21 b(ecurrence)16 b(p)q(our)g(faire)g(la)h(somme)f(de)g(tous)g (les)h(pro)q(duits.)f(un)75 1746 y(pas)k(de)g(r)o(\023)-21 b(ecurrence)19 b(est)g(d)o(\023)-21 b(ecrit)20 b(comme)f(la)h(somme)f (du)i(c)o(hamp)e fk(t)h fq(a)o(v)o(ec)f(lui-m)o(^)-21 b(eme)20 b(d)o(\023)-21 b(ecal)o(\023)g(e)19 b(d'une)75

1802 y(p)q(osition)g(dans)f(la)g(direction)h(\(0)p fm(;)8 b fq(0)p fm(;)g fq(1\).)14 b(cette)i(\023)-21 b(etap)q(e)17 b(est)g(repr)o(\023)-21 b(esen)o(t)o(\023)g(ee)17 b(dans)g(la)h(fen)o (^)-21 b(etre)17 b(du)h(milieu)75 1859 y(dans)e(la)g(\014gure)g(3.2.)f (ensuite,)h(l'utilisateur)i(p)q(eut)e(r)o(\023)-21 b(ep)o(\023)g(eter) 14 b(l')o(\023)-21 b(etap)q(e)16 b(de)g(r)o(\023)-21 b(ecurrence)16 b(pr)o(\023)-21 b(ec)o(\023)g(edemmen)o(t)75 1915 y(d)o(\023)g(e\014nie)16 b(en)g(appuy)o(an)o(t)e(sur)h(un)h(b)q (outon,)f(et)g(v)o(oir)g(\022)-23 b(a)15 b(c)o(haque)f(\023)-21 b(etap)q(e)15 b(l'asp)q(ect)h(des)f(c)o(hamps.)146 2031 y(une)f(fois)g(l'ensem)o(ble)i(des)e(c)o(hamps)g(cr)o(\023)-21 b(e)o(\023)g(es,)12 b(les)i(\023)-21 b(equations)13 b(en)o(tre)h(les)h (c)o(hamps)f(ainsi)h(que)f(les)h(d)o(\023)-21 b(e\014-)75 2087 y(nitions)16 b(des)g(fonctions)g(utilis)o(\023)-21 b(ees)16 b(p)q(euv)o(en)o(t)f(^)-21 b(etre)15 b(simplemen)o(t)h(rapp)q (el)o(\023)-21 b(ees)16 b(p)q(our)g(obtenir)g(le)g(texte)f(de)75 2144 y(programme)f fn(pei)p fq(.)g(notons)f(\023)-21 b(egalemen)o(t)13 b(qu'un)i(c)o(hamp)g(in)o(term)o(\023)-21 b(ediaire)15 b(in)o(utile)i(p)q(eut)d(^)-21 b(etre)13 b(supprim)o(\023)-21 b(e)75 2200 y(apr)o(\022)g(es)11 b(a)o(v)o(oir)h(substitu)o(\023)-21 b(e,)12 b(dans)g(les)i(d)o(\023)-21 b(e\014nitions)13 b(des)g(c)o(hamps)f(l'utilisan)o(t,)h(son)g(nom)f (par)g(sa)g(d)o(\023)-21 b(e\014nition.)75 2338 y fw(3.4.2)55 b(in)n(t)o(\023)-27 b(er)o(^)g(ets-limit)o(ations)146 2429 y fn(vpei)13 b fq(p)q(ermet)h(la)g(construction)f(pas-\022)-23 b(a-pas)14 b(du)g(programme)e(a)o(v)o(ec)h(un)h(con)o(tr^)-23 b(ole)14 b(visuel)h(sur)f(l'as-)75 2486 y(p)q(ect)20 b(de)f(c)o(haque)g(nouv)o(eau)h(c)o(hamp)f(cr)o(\023)-21 b(e)o(\023)g(e.)17 b(a)i(c)o(haque)g(fois)g(qu'un)h(nouv)o(eau)f(c)o (hamp)g(est)g(d)o(\023)-21 b(e\014ni,)19 b(le)75 2542 y(placemen)o(t)h(des)g(v)m(aleurs)h(est)f(calcul)o(\023)-21 b(e)20 b(sur)g(un)g(p)q(etit)g(nom)o(bre)g(de)g(p)q(oin)o(ts)g(\022)-23 b(a)19 b(l'aide)i(de)f(la)g(librairie)p eop %%page: 42 44 42 43 bop 75 269 a fq(42)615 b fl(chapitre)16 b(3.)30 b(raffinement)15 b(et)f(abstra)o(ction)75 397 y fq(p)o(olylib)22 b([63])e(et)h(du)g(logiciel)j fn(maple)p fq([11])c(p)q(our)h(les)h (comp)q(ositions)g(et)f(in)o(v)o(ersions)g(de)h(fonctions.)75 453 y(ce)d(dessin)h(d'un)g(nouv)o(eau)f(c)o(hamp,)g(m)o(^)-21 b(eme)18 b(s'il)i(est)f(partiel,)g(p)q(ermet)g(g)o(\023)-21 b(en)o(\023)g(eralemen)o(t)18 b(de)h(d)o(\023)-21 b(etecter)75 510 y(imm)o(\023)g(ediatemen)o(t)18 b(si)h(l'op)o(\023)-21 b(eration)18 b(e\013ectu)o(\023)-21 b(ee)18 b(donne)h(le)g(r)o(\023)-21 b(esultat)17 b(pr)o(\023)-21 b(evu.)18 b(une)h(limitation)h(par)e(rap-) 75 566 y(p)q(ort)e(\022)-23 b(a)16 b(l'expressivit)o(\023)-21 b(e)18 b(du)f(langage)f fn(pei)g fq(r)o(\023)-21 b(eside)17 b(dans)f(l'obligation)i(de)f(construire)g(des)g(d)o(\023)-21 b(e\014nitions)75 623 y(explicites,)20 b(c'est-\022)-23 b(a-dire)19 b(assimilables)h(\022)-23 b(a)18 b(des)g(a\013ectations.)g (on)g(ne)h(p)q(eut)g(en)f(e\013et)g(appliquer)i(une)75 679 y(op)o(\023)-21 b(eration)15 b(que)i(sur)f(un)g(c)o(hamp)g(conn)o (u)h(\(pr)o(\023)-21 b(ec)o(\023)g(edemmen)o(t)14 b(d)o(\023)-21 b(e\014ni\))16 b(alors)g(que)h fn(pei)f fq(autorise)g(des)g(d)o(\023) -21 b(e-)75 736 y(\014nitions)16 b(implicites.)i(ce)d(probl)o(\022)-21 b(eme)15 b(se)g(r)o(\023)-21 b(ev)o(\022)g(ele)15 b(aussi)g(g)o(^)-21 b(enan)o(t)14 b(dans)h(les)h(d)o(\023)-21 b(e\014nitions)16 b(r)o(\023)-21 b(ecursiv)o(es.)146 795 y fn(vpei)18 b fq(ne)i(p)q(ermet)f(de)g(concev)o(oir)g(que)h(de)f(p)q(etits)h (programmes)e fn(pei)p fq(,)g(le)i(nom)o(bre)e(de)i(c)o(hamps)75 852 y(in)o(term)o(\023)-21 b(ediaires)22 b(v)o(enan)o(t)f(tr)o(\022)-21

b(es)20 b(vite)i(alourdir)g(les)g(manipulations,)h(et)e(ce)h(malgr)o (\023)-21 b(e)21 b(la)g(fonction)h(de)75 908 y(substitution)16 b(d)o(\023)-21 b(ecrite)15 b(pr)o(\023)-21 b(ec)o(\023)g(edemmen)o(t.) 146 968 y(finalemen)o(t,)18 b(l'exp)o(\023)-21 b(erience)18 b(de)g(ce)g(premier)g(protot)o(yp)q(e)f(\(en)o(viron)h(6000)e(lignes)j (de)f(langage)f(c\))75 1024 y(nous)j(fait)g(p)q(enser)h(que)f(l'a)s (jout)f(d'une)i(fen)o(^)-21 b(etre)19 b(in)o(terpr)o(\022)-21 b(ete)19 b(d'expressions)i fn(pei)f fq(rem)o(\023)-21 b(edierait)20 b(aux)75 1081 y(limitations)h(\023)-21 b(ev)o(o)q(qu)o(\023)g(ees.)18 b(cet)i(in)o(terpr)o(\022)-21 b(ete)20 b(devrait)f(^)-21 b(etre)20 b(capable)h(de)g(repr)o(\023)-21 b(esen)o(ter)19 b(graphiquemen)o(t)75 1137 y(une)c(\023)-21 b(equation)14 b(en)o(tr)o(\023)-21 b(ee)15 b(au)g(cla)o(vier.)75 1299 y ft(3.5)66 b(un)23 b(outil)h(p)r(our)f(le)f(ra\016nemen)n(t)h(de) g(programmes)146 1407 y fq(l'outil)13 b fn(pei)g fq(initialemen)o(t)i (d)o(\023)-21 b(ev)o(elopp)o(\023)g(e)13 b(par)f(e.)h(violard)h(dans)f (le)g(cadre)g(de)h(sa)e(th)o(\022)-21 b(ese)13 b(est)f(un)i(outil)75 1463 y(de)21 b(manipulation)g(de)g(programmes.)d(l'ensem)o(ble)k(des)e (r)o(\022)-21 b(egles)20 b(de)g(ra\016nemen)o(t)g(et)g(d'abstraction)75 1520 y(pr)o(\023)-21 b(esen)o(t)o(\023)g(ees)11 b(en)j(section)f(3.3)f (y)h(son)o(t)f(implan)o(t)o(\023)-21 b(ees)13 b(et)g(on)g(p)q(eut)h (transformer)d(un)j(programme)e(dans)h(cet)75 1576 y(en)o(vironnemen)o (t)j(par)g(application)h(des)f(r)o(\022)-21 b(egles)16 b(sur)f(c)o(hacune)i(des)e(\023)-21 b(equations.)15 b(les)h(seules)h (mo)q(di\014ca-)75 1633 y(tions)e(qu'on)f(p)q(eut)h(app)q(orter)f(au)g (programme)f(se)i(fon)o(t)e(par)h(ce)h(biais.)g(l'utilisation)h(de)f (cet)g(outil)g(est)75 1689 y(logiquemen)o(t)h(l')o(\023)-21 b(etap)q(e)14 b(suiv)m(an)o(te)h(d')o(\023)-21 b(ecriture)15 b(d'un)g(programme,)e(qui)i(a)g(pu)f(^)-21 b(etre)13 b(con\030)-20 b(cu)16 b(initialemen)o(t)75 1745 y(dans)f(l'en)o (vironnemen)o(t)i fn(vpei)d fq(par)h(exemple.)146 1862 y(l'en)o(vironnemen)o(t)h fn(pei)g fq(app)q(orte)g(une)g(aide)h(\022) -23 b(a)15 b(l'utilisateur)j(p)q(our)e(la)g(transformation)f(des)h (pro-)75 1918 y(grammes,)g(mais)h(ne)h(p)q(ermet)g(pas,)e(p)q(our)i (l'instan)o(t)f(de)h(transformations)e(compl)o(\022)-21 b(etemen)o(t)17 b(automa-)75 1974 y(tis)o(\023)-21 b(ees.)15 b(nous)h(esp)o(\023)-21 b(erons)15 b(p)q(ouv)o(oir)i(implan)o(ter)f(ce) h(t)o(yp)q(e)f(de)g(transformation)f(de)h(programmes)f(sur)h(la)75 2031 y(base)k(des)g(tra)o(v)m(aux)f(r)o(\023)-21 b(ealis)o(\023)g(es)19 b(concernan)o(t)h(les)g(strat)o(\023)-21 b(egies)19 b(de)h (transformation,)e(pr)o(\023)-21 b(esen)o(t)o(\023)g(es)18 b(dans)i(le)75 2087 y(c)o(hapitre)c(4.)146 2204 y(en)g(l')o(\023)-21 b(etat)14 b(actuel,)i(la)h(transformation)d(d'un)j(programme)e(se)h (fait)g(pas-\022)-23 b(a-pas)7 b(:)16 b(l'utilisateur)h(s)o(\023)-21 b(e-)75 2260 y(lectionne)19 b(une)e(expression)h(de)g(c)o(hamps)e(de)i (donn)o(\023)-21 b(ees)17 b(quelconque)h(dans)f(le)h(syst)o(\022)-21 b(eme)16 b(d')o(\023)-21 b(equations,)75 2316 y(et)16 b(p)q(eut)h(c)o(hoisir,)g(par)e(men)o(u,)i(le)g(ra\016nemen)o(t)e(ou)h (l'abstraction)g(de)h(cette)f(expression.)h(le)g(logiciel,)75 2373 y(s'il)22 b(p)q(eut)f(iden)o(ti\014er)h(cette)f(expression)g(\022) -23 b(a)21 b(un)g(mem)o(bre)g(de)g(l'une)g(des)h(r)o(\022)-21 b(egles,)19 b(remplace)j(dans)f(le)75 2429 y(programme)d(l'expression)j (initiale)g(par)f(l'expression)g(ra\016n)o(\023)-21 b(ee)18 b(ou)i(abstraite.)e(l'utilisateur)j(p)q(eut)74 2486 y(\023)-21 b(egalemen)o(t)14 b(r)o(\023)-21 b(e)o(\023)g(ecrire)14 b(une)i(expression)g(de)f(c)o(hamps)g(de)h(donn)o(\023)-21 b(ees)14 b(\(par)h(exemple)h(p)q(our)g(arriv)o(er)e(\022)-23 b(a)15 b(une)75 2542 y(forme)k(d'expression)h(qu'il)g(est)f(p)q (ossible)i(de)f(ra\016ner)f(o)q(\022)-24 b(u)19 b(d'abstraire\))7 b(;)19 b(le)h(syst)o(\022)-21 b(eme)18 b(v)o(\023)-21

b(eri\014e)19 b(alors)p eop %%page: 43 45 43 44 bop 75 269 a fl(3.5.)29 b(un)15 b(outil)i(pour)f(le)f (raffinement)g(de)g(pr)o(ogrammes)371 b fq(43)75 397 y(que)16 b(la)f(nouv)o(elle)i(expression)f(est)e(\023)-21 b(equiv)m(alen)o(te)16 b(\022)-23 b(a)15 b(la)g(pr)o(\023)-21 b(ec)o(\023)g(eden)o(te.)146 453 y(p)o(our)17 b(plus)i(de)g(d)o(\023) -21 b(etails)18 b(sur)g(ce)h(logiciel,)h(on)e(p)q(ourra)g(se)g(r)o (\023)-21 b(ef)o(\023)g(erer)16 b(\022)-23 b(a)18 b([56)o(],)g(don)o(t) f(les)i(annexes)g(d)o(\023)-21 b(e-)75 510 y(criv)o(en)o(t)20 b(de)g(mani)o(\022)-21 b(ere)19 b(exhaustiv)o(e)i(les)f(fonctionnalit)o (\023)-21 b(es)20 b(de)g(base)g(du)g(logiciel.)i(le)e(mo)q(de)g(de)g (fonc-)75 566 y(tionnemen)o(t)d(reste)g(iden)o(tique)h(\022)-23 b(a)17 b(la)g(v)o(ersion)g(d)o(\023)-21 b(ev)o(elopp)o(\023)g(ee)16 b(initialemen)o(t,)j(bien)f(que)f(de)g(nom)o(breuses)75 623 y(mo)q(di\014cations)g(aien)o(t)d(\023)-21 b(et)o(\023)g(e)14 b(app)q(ort)o(\023)-21 b(ees.)14 b(notammen)o(t,)g(un)h(traducteur)h(p) q(ermettan)o(t)e(d'asso)q(cier)i(\022)-23 b(a)15 b(un)75 679 y(programme)20 b fn(pei)p fq(,)g(une)i(in)o(terpr)o(\023)-21 b(etation)20 b(fonctionnelle)k(\()p fj(cf.)c fq(section)i(2.3.5\))d (sous)h(la)i(forme)e(d'un)75 736 y(programme)13 b fn(caml)p fq(,)h(\022)-23 b(a)12 b(\023)-21 b(et)o(\023)g(e)12 b(a)s(jout)o(\023)-21 b(e)13 b(\022)-23 b(a)13 b(l'en)o(vironnemen)o (t.)i(le)g(programme)e fn(caml)h fq(g)o(\023)-21 b(en)o(\023)g(er)o (\023)g(e)11 b(p)q(eut)j(^)-21 b(etre)75 792 y(utilis)o(\023)g(e)19 b(p)q(our)g(v)o(\023)-21 b(eri\014er)18 b(l'exactitude)i(des)e(r)o (\023)-21 b(esultats)18 b(obten)o(us)g(sur)g(un)h(jeu)g(d'essai.)f (egalemen)o(t,)g(un)75 849 y(con)o(tr^)-23 b(oleur)15 b(de)g(t)o(yp)q(e)h(\022)-23 b(a)13 b(\023)-21 b(et)o(\023)g(e)13 b(d)o(\023)-21 b(ev)o(elopp)o(\023)g(e)15 b(p)q(our)g(les)h(programmes) e fn(pei)7 b fq(:)15 b(cet)g(outil,)h(utilisan)o(t)g(le)f(calcu-)75 905 y(lateur)h fn(omega)p fq([30)o(],)f(t)o(yp)q(e)g(c)o(hacune)i(des)e (expressions)h(de)g(c)o(hamps)f(de)h(donn)o(\023)-21 b(ees)15 b(d'un)g(\023)-21 b(enonc)o(\023)g(e)14 b fn(pei)p fq(,)75 962 y(c'est-\022)-23 b(a-dire)19 b(calcule)h(le)f(domaine)f (des)h(v)m(aleurs)g(et)f(le)h(domaine)g(de)f(r)o(\023)-21 b(ef)o(\023)g(erence)17 b(de)i(c)o(hacune)g(de)f(ces)75 1018 y(expressions.)g(le)g(con)o(tr^)-23 b(ole)18 b(p)q(orte)g(alors)f (sur)h(la)g(coh)o(\023)-21 b(erence)17 b(des)h(expressions)h(vis-\022) -23 b(a-vis)19 b(de)f(la)g(d)o(\023)-21 b(e\014-)75 1074 y(nition)19 b(des)f(op)o(\023)-21 b(erations.)16 b(nous)i(v)o(errons)f (dans)h(le)h(c)o(hapitre)f(5,)f(que)h(les)h(r)o(\023)-21 b(esultats)16 b(pro)q(duits)j(par)e(ce)75 1131 y(con)o(tr^)-23 b(oleur)15 b(de)h(t)o(yp)q(e)f(p)q(euv)o(en)o(t)g(^)-21 b(etre)14 b(utilis)o(\023)-21 b(es)16 b(par)f(d'autres)f(outils.)p eop %%page: 44 46 44 45 bop 75 269 a fq(44)615 b fl(chapitre)16 b(3.)30 b(raffinement)15 b(et)f(abstra)o(ction)p eop %%page: 45 47 45 46 bop 1801 269 a fq(45)75 777 y fi(chapitre)32 b(4)75 1053 y fp(strat)m(\023)-56 b(egies)41 b(de)d(transformations)146 1344 y fq(il)21 b(a)d(\023)-21 b(et)o(\023)g(e)18 b(mon)o(tr)o(\023)-21 b(e)19 b(dans)h([56)o(,)f(46])g(que)i fn(pei)f fq(p)q(ermettait)g(de)g (transformer)f(un)h(programme)f(en)75 1401 y(utilisan)o(t)i(les)g(r)o (\023)-21 b(esultats)18 b(issus)j(des)f(tec)o(hniques)h(de)g(parall)o (\023)-21 b(elisation)21 b(automatique)7 b(:)20 b(l'analyse)g(des)75 1457 y(d)o(\023)-21 b(ep)q(endances)17 b(p)q(ermet)f(de)g(d)o(\023)-21 b(eterminer)16 b(un)g(c)o(hangemen)o(t)g(de)g(base)g(comp)q(os)o(\023) -21 b(e)15 b(d'une)i(fonction)f(d'or-)75 1514 y(donnancemen)o(t)f(et)f

(de)g(placemen)o(t)h(des)g(calculs.)g(ce)f(c)o(hangemen)o(t)g(de)h (base)f(est)g(appliqu)o(\023)-21 b(e)15 b(aux)f(deux)75 1570 y(mem)o(bres)20 b(de)g(c)o(hacune)h(des)e(\023)-21 b(equations)20 b(de)g(l')o(\023)-21 b(enonc)o(\023)g(e)19 b fn(pei)h fq(et)g(on)g(mon)o(tre)f(que)h(l'application)i(des)75 1627 y(r)o(\022)-21 b(egles)18 b(qui)i(on)o(t)e(p)q(our)h(e\013et)f (d'instiller)j(le)e(c)o(hangemen)o(t)g(de)g(base)g(au)g(co)q(eur)g(des) g(expressions,)g(est)75 1683 y(con\015uen)o(te.)f(cette)e(tec)o(hnique) j(de)e(transformation)f(est)h(main)o(tenan)o(t)g(classique)i(et)e(est)g (disp)q(onible)75 1740 y(dans)h(de)g(nom)o(breux)f(formalismes,)h (notammen)o(t)e fn(alpha)p fq(.)i(nous)f(rapp)q(elons)i(bri)o(\022)-21 b(ev)o(emen)o(t)17 b(dans)g(la)75 1796 y(premi)o(\022)-21 b(ere)15 b(section)h(ce)f(t)o(yp)q(e)h(de)f(transformation)f(sur)h (l'exemple)i(de)f(l')o(\023)-21 b(elimination)16 b(de)g(gauss.)146 1921 y(dans)j(la)i(suite)g(du)f(c)o(hapitre,)h(nous)f(nous)g(in)o(t)o (\023)-21 b(eressons)20 b(\022)-23 b(a)20 b(d'autres)f(applications)j (du)f(ra\016ne-)75 1978 y(men)o(t)e(de)g(programmes)e(\023)-21 b(ev)o(o)q(qu)o(\023)g(e)17 b(dans)i(le)g(c)o(hapitre)h(pr)o(\023)-21 b(ec)o(\023)g(eden)o(t.)17 b(notammen)o(t,)g(nous)i(v)o(errons)f(que)75 2034 y(le)j(ra\016nemen)o(t)f(p)q(ermet)g(de)h(prendre)g(en)f(compte)g (des)h(relations)g(\014nes)f(en)o(tre)g(programmes,)f(que)75 2091 y(seule)j(l')o(\023)-21 b(equiv)m(alence)22 b(faible)g(p)q(ermet)e (de)h(d)o(\023)-21 b(ecrire.)20 b(les)h(strat)o(\023)-21 b(egies)19 b(que)i(nous)f(prop)q(osons)h(ici)g(son)o(t)75 2147 y(constitu)o(\023)-21 b(ees)19 b(de)h(l'application)i(successiv)o (e)f(de)f(plusieurs)h(r)o(\022)-21 b(egles)19 b(de)h(ra\016nemen)o(t,)f (et)g(constituen)o(t)75 2204 y(des)h(sc)o(h)o(\023)-21 b(emas)19 b(t)o(yp)q(es)h(de)g(transformation)f(d'une)i(forme)e(de)h (programme)f(v)o(ers)h(une)g(autre.)g(selon)75 2260 y(l'arc)o (hitecture)c(de)g(la)g(mac)o(hine)g(parall)o(\022)-21 b(ele,)16 b(les)g(primitiv)o(es)h(implan)o(t)o(\023)-21 b(ees)15 b(sur)h(le)g(mat)o(\023)-21 b(eriel)15 b(ou)g(dans)h(le)75 2316 y(langage)g(vis)o(\023)-21 b(e,)16 b(certaines)h(solutions)h(son)o (t)e(conn)o(ues)h(p)q(our)e(^)-21 b(etre)16 b(plus)h(e\016caces)g(que)g (d'autres.)f(nous)75 2373 y(mon)o(trons)e(ici,)h(par)f(le)i(biais)g(de) f(ces)f(strat)o(\023)-21 b(egies)13 b(de)i(transformation,)e(commen)o (t)h(passer)h(d'une)g(solu-)75 2429 y(tion)h(\022)-23 b(a)16 b(une)g(autre.)f(t)l(out)h(au)g(long)g(de)g(l'exp)q(os)o(\023) -21 b(e)16 b(des)g(strat)o(\023)-21 b(egies,)14 b(nous)i(illustrerons)i (les)e(tec)o(hniques)75 2486 y(d)o(\023)-21 b(ecrites)15 b(a)o(v)o(ec)f(l'exemple)i(du)f(pro)q(duit)g(matrice-v)o(ecteur.)g(cet) f(exp)q(os)o(\023)-21 b(e)15 b(des)g(strat)o(\023)-21 b(egies)13 b(de)i(transfor-)75 2542 y(mation)g(pr)o(\023)-21 b(ecise)15 b(les)h(id)o(\023)-21 b(ees)16 b(pr)o(\023)-21 b(esen)o(t)o(\023)g(ees)13 b(dans)j([22)o(].)p eop %%page: 46 48 46 47 bop 75 269 a fq(46)521 b fl(chapitre)16 b(4.)45 b(stra)l(t)1144 257 y(\023)1138 269 y(egies)16 b(de)f(transf)o(orma)l (tions)75 397 y ft(4.1)66 b(t)-6 b(ransformation)23 b(par)g(c)n (hangemen)n(t)f(de)h(base)146 508 y fq(le)16 b(programme)g fn(pei)f fq(suiv)m(an)o(t)i(traduit)g(l'algorithme)f(d')o(\023)-21 b(elimination)17 b(de)g(gauss.)e(l'algorithme)75 565 y(r)o(\023)-21 b(esout)12 b(le)j(syst)o(\022)-21 b(eme)12 b(lin)o(\023)-21 b(eaire)15 b fm(ax)e fq(=)g fm(b)g fq(o)q(\022)-24 b(u)13 b fm(a)h fq(est)f(une)i(matrice)f(de)g(dimension)h fm(n)7 b ff(\002)g fm(n)15 b fq(et)e fm(b)g fq(un)i(v)o(ecteur)75 621 y(de)i(taille)i fm(n)p fq(.)e(l'algorithme)g(pro)q(c)o(\022)-21 b(ede)17 b(par)g(une)g(triangularisation)h(de)g(la)f(matrice)g fm(a)g fq(p)q(our)h(ensuite)75 678 y(e\013ectuer)11 b(une)h (substitution)g(par)f(remon)o(t)o(\023)-21 b(ee)10 b(et)h(r)o(\023)-21

b(esoudre)11 b(le)h(syst)o(\022)-21 b(eme.)9 b(nous)j(ne)f(nous)h(in)o (t)o(\023)-21 b(eressons)10 b(ici)75 734 y(qu'\022)-23 b(a)14 b(la)h(phase)g(de)f(triangularisation.)h(le)g(programme)f fn(pei)g fq(suiv)m(an)o(t)h(prend)g(en)g(en)o(tr)o(\023)-21 b(ee)14 b(les)h(c)o(hamps)75 791 y fk(a)j fq(et)h fk(b)f fq(repr)o(\023)-21 b(esen)o(tan)o(t)17 b(resp)q(ectiv)o(emen)o(t)i(la)g (matrice)g(et)f(le)i(v)o(ecteur.)e(nous)g(plongeons)i(ensuite)f(ces)75 847 y(c)o(hamps)13 b(dans)g(un)g(espace)g(\022)-23 b(a)13 b(trois)f(dimensions)j(\()p fm(i;)8 b(j;)g(k)q fq(\))i(\022)-23 b(a)13 b(tra)o(v)o(ers)e(les)j(c)o(hamps)e fk(x)h fq(et)g fk(y)p fq(.)f(le)h(calcul)i(est)75 904 y(alors)g(sp)o(\023)-21 b(eci\014)o(\023)g(e)14 b(par)h(une)g(d)o(\023)-21 b(e\014nition)16 b(r)o(\023)-21 b(ecursiv)o(e)14 b(du)h(c)o(hamp)g fk(c)p fq(.)g(la)f(matrice)h(triangularis)o(\023)-21 b(ee)15 b(ainsi)h(que)75 960 y(le)d(v)o(ecteur)g(mo)q(di\014)o(\023)-21 b(e)13 b(se)f(trouv)o(en)o(t)g(sur)g(le)i(plan)f fm(i)f fq(=)h fm(k)h fq(et)e(son)o(t)g(repr)o(\023)-21 b(esen)o(t)o(\023)g(es) 11 b(par)h(les)h(c)o(hamps)g fk(xn)f fq(et)g fk(yn)p fq(.)146 1078 y(si)j(la)h(v)o(ersion)f(de)g(ce)g(programme)f(doit)g(^) -21 b(etre)14 b(in)o(terpr)o(\023)-21 b(et)o(\023)g(ee)14 b(op)o(\023)-21 b(erationnellemen)o(t,)15 b(en)g(c)o(hoisissan)o(t)75 1135 y(l'axe)c fm(k)h fq(comme)f(direction)i(d'ordonnancemen)o(t,)e (nous)g(constatons)f(que)i(le)g(programme)e(utilise)j(alors)75 1191 y(des)i(op)o(\023)-21 b(erations)13 b(g)o(\023)-21 b(eom)o(\023)g(etriques)13 b(de)h(t)o(yp)q(e)h(di\013usion,)g(comme)f (par)g(exemple)i(la)f(fonction)g fk(pivot)p fq(.)e(or,)75 1248 y(certaines)18 b(mac)o(hines)f(n'autorisen)o(t)g(pas)g(ce)g(t)o (yp)q(e)g(de)g(comm)o(unication)h(et)f(ne)g(p)q(ermetten)o(t)g(que)g (des)75 1304 y(comm)o(unications)12 b(d'un)h(pro)q(cesseur)f(v)o(ers)f (un)i(de)f(ses)g(v)o(oisins.)g(ce)g(son)o(t)f(par)h(exemple)h(les)f(h)o (yp)q(oth)o(\022)-21 b(eses)75 1360 y(prises)16 b(p)q(our)f(les)h(r)o (\023)-21 b(eseaux)14 b(systoliques.)h(cette)f(con)o(train)o(te)h(de)g (comm)o(unication)h(in\015ue)h(sur)d(l'ordon-)75 1417 y(nancemen)o(t)k(du)h(programme,)d(et)i(nous)g(c)o(herc)o(hons)g(une)h (nouv)o(elle)f(\023)-21 b(ecriture)18 b(du)g(programme)f(p)q(our)75 1473 y(en)d(tenir)h(compte.)f(le)g(nouv)o(eau)g(programme)f(est)h (obten)o(u)g(par)g(l'application)i(d'un)e(c)o(hangemen)o(t)g(de)75 1530 y(base)h(p)q(ermettan)o(t)g(d'obtenir)g(une)h(v)o(ersion)g (systolique)g(du)f(programme)g fk(gauss1)p fq(.)75 1648 y fk(gauss1)23 b(:)h(\(a,b\))14 b ff(7!)i fk(\(xn,yn\))75 1663 y fx(8)75 1700 y(>)75 1712 y(>)75 1725 y(>)75 1737 y(>)75 1750 y(>)75 1762 y(<)75 1837 y(>)75 1849 y(>)75 1862 y(>)75 1874 y(>)75 1887 y(>)75 1899 y(:)137 1698 y fk(a)f fq(=)g fk(alignx)7 b(::)g(x)137 1754 y(b)15 b fq(=)g fk(aligny)7 b(::)g(y)137 1811 y(c)15 b fq(=)g fk(el)g fa(b)h fk(\(x)23 b(/&/)8 b(y)24 b(/&/)7 b(\(c)24 b fa(c)g fk(pre\))f(/&/)8 b(\(c)23 b fa(c)i fk(cp)o(\))f(/&/)8 b(\(c)23 b fa(c)h fk(lp\))g(/&/)7 b(\(c)24 b fa(c)g fk(piv\)\))137 1867 y(xn)15 b fq(=)g fk(c)g fa(c)h fk(last1)137 1924 y(yn)f fq(=)g fk(c)g fa(c)h fk(last2)100 1996 y(alignx)49 b fq(=)h fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(1)p ff(\024)p fk(i)p ff(\024)p fk(n)6 b(&)i(1)p ff(\024)p fk(j)p ff(\024)p fk(n)g(&)g(k)p fq(=)p fk(0\).\(i,j\))100 2053 y(aligny)49 b fq(=)h fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(1)p ff(\024)p fk(i)p ff(\024)p fk(n)6 b(&)i(j)p fq(=)p fk(n+1)g(&)g(k)p fq(=)p fk(0\).\(i\))100 2109 y(pre)121 b fq(=)50 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(k)p fm(<)p fk(i)p ff(\024)p fk(n)6 b(&)i(1)p ff(\024)p fk(j)p ff(\024)p fk(n+1)g(&)g(0)p fm(<)p fk(k\).\(i,j,k-1\))100 2165 y(piv)121 b fq(=)50 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(k)p fm(<)p fk(i)p

ff(\024)p fk(n)6 b(&)i(1)p ff(\024)p fk(j)p ff(\024)p fk(n+1)g(&)g(0)p fm(<)p fk(k\).\(k,k,k-1\))100 2222 y(cp)145 b fq(=)50 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(k)p fm(<)p fk(i)p ff(\024)p fk(n)6 b(&)i(1)p ff(\024)p fk(j)p ff(\024)p fk(n+1)g(&)g(0)p fm(<)p fk(k\).\(i,k,k-1\))100 2278 y(lp)145 b fq(=)50 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(k)p fm(<)p fk(i)p ff(\024)p fk(n)6 b(&)i(1)p ff(\024)p fk(j)p ff(\024)p fk(n+1)g(&)g(0)p fm(<)p fk(k\).\(k,j,k-1\))100 2335 y(el)145 b fq(=)50 b fk(id)10 b fq(#)g fm(\025)p fk(\(a)p fq(;)o fk(b)p fq(;)o fk(c)p fq(;)p fk(d\).\(a-b*c/d\))100 2391 y(last1)73 b fq(=)50 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(1)p ff(\024)p fk(i)p ff(\024)p fk(n)6 b(&)i(i)p ff(\024)p fk(j)p ff(\024)p fk(n)g(&)g(k)p fq(=)p fk(i-1\).\(i,j,k\))100 2448 y(last2)73 b fq(=)50 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(1)p ff(\024)p fk(i)p ff(\024)p fk(n)6 b(&)i(j)p fq(=)p fk(n+1)g(&)g(k)p fq(=)p fk(i-1\).\(i,j,k\))146 2542 y fq(l'analyse)20 b(des)g(d)o(\023)-21 b(ep)q(endances)21 b(selon)g(les)g(tec)o(hniques)g(systoliques)g(classiques)g(fournit)f (un)h(or-)p eop %%page: 47 49 47 48 bop 75 269 a fl(4.1.)29 b(transf)o(orma)l(tion)17 b(p)l(ar)f(changement)e(de)h(base)493 b fq(47)75 397 y(donnancemen)o(t)16 b(p)q(ossible)i(des)e(calculs)i(d)o(\023)-21 b(e\014ni)16 b(par)g(la)g(fonction)g fm(t)p fq(\()p fm(i;)8 b(j;)g(k)q fq(\))k(=)i fm(i)c fq(+)h fm(j)i fq(+)e fm(k)q fq(,)k(ainsi)i(qu'un)75 453 y(placemen)o(t)d(d)o(\023)-21 b(e\014ni)13 b(par)g fm(p)p fq(\()p fm(i;)8 b(j;)g(k)q fq(\))h(=)k(\()p fm(i;)8 b(k)q fq(\).)j(nous)i(p)q(ouv)o(ons)g (expliciter)i(ce)e(c)o(hoix)h(de)f(cadencemen)o(t)h(et)75 510 y(de)k(placemen)o(t)h(en)f(transforman)o(t)e(le)i(programme)f(pr)o (\023)-21 b(ec)o(\023)g(eden)o(t)16 b(par)i(l'application)i(du)e(c)o (hangemen)o(t)75 566 y(de)j(base)f fk(h)g fq(=)g fm(\025)p fk(\(i,j,k\).\(i,k,i+j+k\))d fq(aux)j(deux)h(mem)o(bres)f(de)h (certaines)f(des)g(\023)-21 b(equations)19 b(de)75 623 y fk(gauss1)p fq(.)g(sur)h(ce)h(t)o(yp)q(e)f(d'exemple,)h(il)h(est)e (in)o(t)o(\023)-21 b(eressan)o(t)19 b(d'appliquer)i(ce)g(c)o(hangemen)o (t)f(de)h(base)f(\022)-23 b(a)75 679 y(toutes)19 b(les)h(\023)-21 b(equations,)19 b(sauf)g(celles)j(qui)f(expliciten)o(t)h(un)e(c)o (hangemen)o(t)g(de)g(dimension)i(en)o(tres)d(v)m(a-)75 736 y(riables,)g(en)g(l'o)q(ccurrence)g(celles)h(d)o(\023)-21 b(e\014nissan)o(t)18 b fk(a)g fq(et)g fk(b)p fq(.)g(le)h(r)o(\023)-21 b(esultat)17 b(de)i(la)f(transformation)f(est)h(un)75 792 y(programme)h(don)o(t)h(les)g(c)o(hamps)g(son)o(t)g(exprim)o(\023) -21 b(es)20 b(dans)g(une)h(nouv)o(elle)g(base,)f(c'est-\022)-23 b(a-dire)20 b(que)h(les)75 849 y(expressions)16 b(fonction)g(d'un)f(c)o (hamp)g fk(x)g fq(deviennen)o(t)i(des)f(expressions)g(fonction)f(de)h fk(h)7 b(::)g(x)p fq(.)146 944 y(il)16 b(est)f(in)o(t)o(\023)-21 b(eressan)o(t)14 b(de)i(noter)f(que)g(cette)h(transformation)e(p)q(eut) g(^)-21 b(etre)15 b(automatis)o(\023)-21 b(ee)14 b(car)h(le)h(sous-)75 1000 y(ensem)o(ble)h(des)e(r)o(\022)-21 b(egles)15 b(\(1b\),)g(\(3b\),) f(\(3d\),)g(\(7b\),)h(\(11b\))f(augmen)o(t)o(\023)-21 b(e)14 b(de)i(la)g(r)o(\022)-21 b(egle)15 b fk(y)g fq(=)g fk(x)h ff(\000)-8 b(!)16 b fk(h)8 b(::)f(x)15 b fq(=)75 1057 y fk(h)7 b(::)h(x)16 b fq(est)g(con\015uen)o(t,)h(et)f(toute)g (expression)i(fonction)f(de)g fk(x)f fq(devien)o(t)i(une)f(expression)g (de)g(\()p fk(h)7 b(::)g(x)p fq(\).)75 1113 y(ce)19 b(t)o(yp)q(e)f(de)h (transformation)f(a)g(d'ailleurs)h(\023)-21 b(et)o(\023)g(e)17 b(implan)o(t)o(\023)-21 b(e)19 b(et)f(sera)g(in)o(t)o(\023)-21 b(egr)o(\023)g(e)17 b(pro)q(c)o(hainemen)o(t)i(dans)75 1170 y(l'en)o(vironnemen)o(t)e(de)f(transformation.)e(un)i(nom)o(bre)g

(\014ni)h(d'applications)g(successiv)o(es)g(de)f(ce)h(sous-)75 1226 y(ensem)o(ble)c(de)f(r)o(\022)-21 b(egles)440 1210 y fg(1)469 1226 y fq(nous)11 b(am)o(\022)-21 b(ene)11 b(\014nalemen)o(t)h(\022)-23 b(a)11 b(l')o(\023)-21 b(enonc)o(\023)g(e) 11 b(suiv)m(an)o(t,)h(o)q(\022)-24 b(u)11 b(les)h(c)o(hamps)g fk(h)7 b(::)g(c)p fq(,)k fk(h)d(::)f(xn)75 1283 y fq(et)18 b fk(h)8 b(::)f(yn)18 b fq(on)o(t)f(\023)-21 b(et)o(\023)g(e)16 b(renomm)o(\023)-21 b(es)17 b fk(c)p fq(,)h fk(xn)g fq(et)h fk(yn)f fq(\(en)g(se)h(serv)m(an)o(t)f(de)h(la)f(propri)o(\023)-21 b(et)o(\023)g(e)17 b(de)i(ra\016nemen)o(t)f(3)75 1339 y(d)o(\023)-21 b(e\014nie)16 b(\022)-23 b(a)15 b(partir)g(de)g(l')o (\023)-21 b(equiv)m(alence)18 b(forte)c(des)i(c)o(hamps)f(de)g(donn)o (\023)-21 b(ees\).)75 1491 y fk(gauss2)23 b(:)h(\(a,b\))14 b ff(7!)i fk(\(xn,yn\))75 1506 y fx(8)75 1543 y(>)75 1555 y(>)75 1568 y(>)75 1580 y(>)75 1593 y(>)75 1605 y(<)75 1680 y(>)75 1692 y(>)75 1705 y(>)75 1717 y(>)75 1730 y(>)75 1742 y(:)137 1541 y fk(a)f fq(=)g fk(alignx')7 b(::)g(x)137 1597 y(b)15 b fq(=)g fk(aligny')7 b(::)g(y)137 1654 y(c)15 b fq(=)g fk(el)g fa(b)h fk(\(x/&/)7 b(y/&/)g(\(c)24 b fa(c)g fk(pre'\))f(/&/)8 b(\(c)24 b fa(c)g fk(cp')o(\))g(/&/)8 b(\(c)23 b fa(c)h fk(lp'\))g(/&/)7 b(\(c)24 b fa(c)g fk(piv'\)\))137 1710 y(xn)15 b fq(=)g fk(c)g fa(c)h fk(last1')137 1767 y(yn)f fq(=)g fk(c)g fa(c)h fk(last2')100 1839 y(alignx')49 b fq(=)h fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(1)p ff(\024)p fk(i)p ff(\024)p fk(n)6 b(&)i(1)p ff(\024)p fk(k-i-j)p ff(\024)p fk(n)g(&)g(j)p fq(=)p fk(1\).\(i,k-i-j\))100 1896 y(aligny')49 b fq(=)h fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(1)p ff(\024)p fk(i)p ff(\024)p fk(n)6 b(&)i(k-i-j)p fq(=)p fk(n+1)f(&)h(j)p fq(=)p fk(1\).\(i\))100 1952 y(pre')121 b fq(=)50 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(j)p fm(<)p fk(i)p ff(\024)p fk(n)6 b(&)i(2*j+i)p fm(<)p fk(k)g(&)f(k-i-j)p ff(\024)p fk(n+1)h(&)f(1)p ff(\024)p fk(j)p ff(\024)p fk(n\).\(i,j-1,k-1\))100 2009 y(piv')121 b fq(=)50 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(j)p fm(<)p fk(i)p ff(\024)p fk(n)6 b(&)i(2*j+i)p fm(<)p fk(k)g(&)f(k-i-j)p ff(\024)p fk(n+1)h(&)f(1)p ff(\024)p fk(j)p ff(\024)p fk(n\).\(j,j-1,3*j-1\))100 2065 y(cp')145 b fq(=)50 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(j)p fm(<)p fk(i)p ff(\024)p fk(n)6 b(&)i(2*j+i)p fm(<)p fk(k)g(&)f(k-i-j)p ff(\024)p fk(n+1)h(&)f(1)p ff(\024)p fk(j)p ff(\024)p fk(n\).\(i,j-1,i+2*j-1\))100 2122 y(lp')145 b fq(=)50 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(j)p fm(<)p fk(i)p ff(\024)p fk(n)6 b(&)i(2*j+i)p fm(<)p fk(k)g(&)f(k-i-j)p ff(\024)p fk(n+1)h(&)f(1)p ff(\024)p fk(j)p ff(\024)p fk(n\).\(j,j-1,j+k-i-1\))100 2178 y(last1')73 b fq(=)50 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(1)p ff(\024)p fk(i)p ff(\024)p fk(n)6 b(&)i(i)p ff(\024)p fk(k-i-j)p ff(\024)p fk(n)g(&)g(j)p fq(=)p fk(i-1\).\(i,j,k\))100 2234 y(last2')73 b fq(=)50 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(1)p ff(\024)p fk(i)p ff(\024)p fk(n)6 b(&)i(k-i-j)p fq(=)p fk(n+1)f(&)h(j)p fq(=)p fk(i-1\).\(i,j,k\)) p 75 2454 709 2 v 124 2497 a fd(1)p fc(:)h fd(une)19 b(exception)i(est)e(faite)h(p)q(our)g(les)e(\023)-18 b(equations)21 b(expriman)o(t)g(un)e(c)o(hangemen)o(t)i(de)e (dimension,)i(mais)f(ce)f(cas)75 2542 y(particulier)d(n'emp)o(^)-18 b(ec)o(he)13 b(pas)h(l'automatisation.)p eop %%page: 48 50 48 49 bop 75 269 a fq(48)521 b fl(chapitre)16 b(4.)45 b(stra)l(t)1144 257 y(\023)1138 269 y(egies)16 b(de)f(transf)o(orma)l (tions)75 397 y ft(4.2)66 b(strat)o(\023)-32 b(egie)22

b(1)11 b(:)22 b(simpli\014cation)j(des)d(comm)n(unications)146 499 y fq(la)f(premi)o(\022)-21 b(ere)21 b(strat)o(\023)-21 b(egie)19 b(de)j(transformation)e(que)h(nous)g(in)o(tro)q(duisons)h(a)f (p)q(our)g(but)h(de)f(sim-)75 556 y(pli\014er)f(les)f(op)o(\023)-21 b(erations)17 b(de)i(routage)e(d'un)i(programme.)e(ce)h(t)o(yp)q(e)h (de)f(simpli\014cation)j(pr)o(\023)-21 b(esen)o(te)18 b(au)75 612 y(moins)c(deux)g(in)o(t)o(\023)-21 b(er)o(^)g(ets.)11 b(il)k(p)q(ermet,)e(quand)h(la)g(simpli\014cation)i(est)d(p)q(ossible,) i(de)f(dimin)o(uer)h(le)f(v)o(olume)75 669 y(des)k(comm)o(unications)g (\022)-23 b(a)16 b(e\013ectuer.)h(egalemen)o(t,)g(cette)g(strat)o(\023) -21 b(egie)16 b(de)i(transformation)e(p)q(ermet)h(de)75 725 y(conclure)f(sur)f(l')o(\023)-21 b(equiv)m(alence)17 b(de)e(plusieurs)i(programmes)d(di\013)o(\023)-21 b(eran)o(t)14 b(par)g(leurs)i(comm)o(unications)g(et)75 782 y(nous)h(p)q(ensons)g (que)g(cet)g(asp)q(ect)f(concerne)i(particuli)o(\022)-21 b(eremen)o(t)17 b(les)g(algorithmes)g(systoliques,)g(c'est-)75 838 y(\022)-23 b(a-dire)15 b(les)h(algorithmes)e(parall)o(\022)-21 b(eles)15 b(qui)h(alternen)o(t)e(une)i(phase)e(de)h(calcul)i(a)o(v)o (ec)d(une)h(phase)g(de)g(com-)75 894 y(m)o(unication.)146 1008 y(la)20 b(simpli\014cation)j(est)e(p)q(ossible)h(lorsque)g(les)f (routages)f(son)o(t)g(uniformes)h(a)o(v)o(ec)f(la)h(forme)g(g)o(\023) -21 b(e-)75 1064 y(n)o(\023)g(erale)20 b(suiv)m(an)o(te)9 b(:)20 b fm(f)5 b fq(\()p fm(i)478 1071 y fg(1)496 1064 y fm(;)j(:)g(:)g(:)d(;)j(i)614 1071 y fw(m)p fx(\000)p fg(1)687 1064 y fm(;)g(i)724 1071 y fw(m)754 1064 y fq(\))21 b(=)h(\()p fm(i)884 1071 y fg(1)916 1064 y fq(+)14 b fm(a)989 1071 y fg(1)1008 1064 y fm(;)8 b(:)g(:)g(:)t(;)g(i)1125 1071 y fw(m)p fx(\000)p fg(1)1212 1064 y fq(+)14 b fm(a)1285 1071 y fw(m)p fx(\000)p fg(1)1359 1064 y fm(;)8 b(i)1396 1071 y fw(m)1440 1064 y ff(\000)14 b fq(1\))20 b(\(la)h(v)m(ariable)g fm(i)1815 1071 y fw(m)75 1121 y fq(p)q(eut)f(repr)o(\023)-21 b(esen)o(ter)19 b(la)h(direction)i(de)e(temps)g(par)f(exemple\).)i (bien)g(que)f(ces)g(conditions)h(sem)o(blen)o(t)75 1177 y(con)o(traignan)o(tes,)14 b(de)i(nom)o(breux)f(algorithmes)g (systoliques)h(utilisen)o(t)h(de)f(tels)f(routages.)75 1301 y fw(4.2.1)55 b(princip)r(e)146 1388 y fq(le)18 b(princip)q(e)j(de)d(la)g(simpli\014cation)j(rep)q(ose)d(sur)g (l'expression)h(de)g(la)f(fonction)g(utilis)o(\023)-21 b(ee)19 b(par)f(un)75 1444 y(routage,)13 b(sous)i(la)g(forme)f(d'une)h (comp)q(osition)g(de)h(fonctions.)e(dans)g(un)h(programme)f(o)q(\022) -24 b(u)15 b(un)g(c)o(hamp)75 1501 y(de)e(donn)o(\023)-21 b(ees)12 b(est)h(d)o(\023)-21 b(e\014ni)13 b(par)f fk(y)h fq(=)f fk(x)j fa(c)h fk(f)p fq(,)c(nous)h(c)o(herc)o(hons)g(\022)-23 b(a)12 b(r)o(\023)-21 b(e)o(\023)g(ecrire)11 b(la)i(fonction)g fk(f)f fq(sous)h(la)g(forme)f fk(f)75 1557 y fq(=)f fk(g)f ff(\016)g fk(f')p fq(,)h(o)q(\022)-24 b(u)11 b fk(f')g fq(est)g(une)g(fonction)h(plus)g fj(\()-9 b(\()q fq(simple)p fj(\))g(\))13 b fq(que)e fk(f)p fq(.)g(ensuite,)g(nous)h(c)o(herc)o (hons)f(une)h(d)o(\023)-21 b(e\014nition)74 1614 y(\023)g(equiv)m(alen) o(te)18 b(\022)-23 b(a)17 b(celle)h(de)g fk(y)p fq(,)e(utilisan)o(t)i (uniquemen)o(t)h(le)e(routage)f fk(f')p fq(.)h(p)o(our)f(cela,)h(il)i (faut)d(trouv)o(er)g(la)75 1670 y(bijection)g fk(h)d fq(d'un)i(c)o(hangemen)o(t)f(de)g(base,)g(nous)g(p)q(ermettan)o(t)g (d'obtenir)g(une)g(\023)-21 b(equation)13 b(\023)-21 b(equiv)m(alen)o(te)75 1727 y(de)20 b(la)h(forme)e fk(y')h fq(=)g fk(x)15 b fa(c)h fk(f')p fq(,)j(o)q(\022)-24 b(u)20 b fk(y')g fq(=)g fk(h)8 b(::)f(y)p fq(.)19 b(il)j(s'agit)d(donc)h(de)h (trouv)o(er)e(une)i(repr)o(\023)-21 b(esen)o(tation)75 1783 y(di\013)o(\023)g(eren)o(te)15 b(des)g(c)o(hamps)g(ne)h(n)o(\023) -21 b(ecessitan)o(t)14 b(plus)j(le)f(routage)e(des)h(v)m(aleurs)i(par)e

(la)g(fonction)h fk(g)p fq(.)146 1840 y(nous)f(nous)g(in)o(t)o(\023)-21 b(eressons)14 b(plus)j(particuli)o(\022)-21 b(eremen)o(t)15 b(aux)h(c)o(hamps)f(de)g(donn)o(\023)-21 b(ees)15 b(d)o(\023)-21 b(e\014nis)16 b(r)o(\023)-21 b(ecursiv)o(e-)75 1896 y(men)o(t)13 b(\022)-23 b(a)13 b(l'aide)h(de)g(ces)f(op)o(\023)-21 b(erations)13 b(de)g(routage.)f(ces)h(c)o(hamps)h(son)o(t)e(d)o(\023) -21 b(e\014nis)14 b(par)f(une)g(\023)-21 b(equation)13 b(de)g(la)75 1953 y(forme)7 b(:)16 b fk(x)g fq(=)h fk(x0)24 b(/&/)7 b(\(x)24 b fa(c)g fk(f\))p fq(,)16 b(et)g(son)o(t)g(l')o(\023) -21 b(equiv)m(alen)o(t)17 b(des)g(v)m(ariables)g(uniformis)o(\023)-21 b(ees)17 b(des)g(langages)75 2009 y(d')o(\023)-21 b(equations)14 b(r)o(\023)-21 b(ecurren)o(tes)15 b([48)o(].)75 2133 y fw(4.2.2)55 b(conditions)146 2220 y fq(la)21 b(r)o(\023)-21 b(e)o(\023)g(ecriture)21 b(de)h(l')o(\023)-21 b(equation)21 b(expriman)o(t)h(le)h(routage)e(r)o(\023)-21 b(ecursif)21 b(n)o(\023)-21 b(ecessite,)22 b(a\014n)g(d'arriv)o(er)f(\022)-23 b(a)75 2277 y(l')o(\023)i(equation)15 b(v)o(oulue,)g(certaines)h (conditions)g(\023)-21 b(enonc)o(\023)g(ees)14 b(dans)h(la)h(prop)q (osition)g(suiv)m(an)o(te)8 b(:)75 2390 y fo(prop)q(osition)15 b(4)e fq(soit)g(une)g(bijection)h fk(h)e fq(et)g(une)h(fonction)g fk(f)f fq(telle)i(que)f fm(dom)p fq(\()p fk(f)p fq(\))5 b ff([)g fm(img)r fq(\()p fk(f)p fq(\))k ff(\022)k fm(dom)p fq(\()p fk(h)p fq(\).)75 2446 y(alors)i(un)g(\023)-21 b(enonc)o(\023)g(e)14 b(a)o(y)o(an)o(t)g(p)q(our)h(p)q(ost-)o(\023)-21 b(equation)659 2542 y fk(x)15 b fq(=)g fk(x0)24 b(/&/)7 b(\(x)24 b fa(c)g fk(f\))91 b fq(\()p fm(e)s fq(1\))p eop %%page: 49 51 49 50 bop 75 269 a fl(4.2.)29 b(stra)l(t)336 257 y(\023)330 269 y(egie)16 b(1)7 b(:)15 b(simplifica)l(tion)i(des)e(communica)l (tions)333 b fq(49)75 397 y(est)15 b(ra\016n)o(\023)-21 b(e)14 b(par)h(l')o(\023)-21 b(enonc)o(\023)g(e)14 b(o)q(\022)-24 b(u)15 b(\()p fm(e)s fq(1\))f(est)h(substitu)o(\023)-21 b(ee)15 b(par)473 492 y fk(h)8 b(::)f(x)13 b fq(=)g fk(h)7 b(::)g(x0/&/)h(\(h)f(::)h(x\))15 b fa(c)g fk(h)10 b ff(\016)g fk(f)g ff(\016)g fk(h)1241 475 y fq(-1)1354 492 y fq(\()p fm(e)s fq(2\))75 586 y(si)16 b fm(dom)p fq(\()p fm(\033)251 593 y fr(x)267 586 y fq(\))d ff(\022)g fm(dom)p fq(\()p fk(h)p fq(\))c ff(^)h fm(dom)p fq(\()p fm(\033)671 593 y fr(x0)703 586 y fq(\))j ff(\022)g fm(dom)p fq(\()p fk(h)p fq(\).)75 699 y fj(pr)n(euve.)i fq(en)g(utilisan)o(t)i(les)e(r)o (\022)-21 b(egles)15 b(de)h(r)o(\023)-21 b(e)o(\023)g(ecriture)14 b(et)h(les)h(h)o(yp)q(oth)o(\022)-21 b(eses)14 b(de)i(la)f(prop)q (osition)9 b(:)170 814 y fk(x)15 b fq(=)h fk(x0/&/)7 b(\(x)24 b fa(c)g fk(f\))631 786 y fg(\()p fw(i)r fg(\))616 814 y ff(\000)-7 b(!)50 b fk(h)8 b(::)f(x)15 b fq(=)g fk(h)8 b(::)f(\(x0/&/)g(\(x)24 b fa(c)g fk(f\)\))616 857 y fg(\(11)p fw(b)p fg(\))616 886 y ff(\000)-7 b(!)50 b fk(h)8 b(::)f(x)15 b fq(=)g fk(\(h)8 b(::)g(x0)o(\)/&/)g(\(h)g(::)f (\(x)24 b fa(c)g fk(f\)\))624 929 y fg(\(3)p fw(b)p fg(\))616 957 y ff(\000)-7 b(!)50 b fk(h)8 b(::)f(x)15 b fq(=)g fk(\(h)8 b(::)g(x0)o(\)/&/)g(\(\(h)f(::)h(x\))24 b fa(c)g fk(h)10 b ff(\016)g fk(f)g ff(\016)f fk(h)1601 941 y fq(-1)1639 957 y fk(\))75 1066 y fa(\003)146 1178 y fq(ainsi)j(toute)f (bijection)h(satisfaisan)o(t)f(les)h(conditions)g(pr)o(\023)-21 b(ec)o(\023)g(eden)o(tes)10 b(p)q(ermet)h(de)h(transformer)d(\()p fm(e)s fq(1\))75 1235 y(en)17 b(\()p fm(e)s fq(2\))6 b(;)16 b(nous)g(donnons)h(main)o(tenan)o(t)g(une)g(condition)g (su\016san)o(te)g(p)q(our)f(l'existence)i(d'une)f(bijec-)75 1291 y(tion)11 b(particuli)o(\022)-21 b(ere)11 b fk(h)f

fq(telle)i(que)e(la)h(d)o(\023)-21 b(ecomp)q(osition)11 b fk(f)23 b(=)10 b(g)g ff(\016)g fk(f')g fq(p)q(ermette)h(de)f (supprimer)i(le)f(routage)e fk(g)p fq(.)75 1404 y fo(th)o(\023)-25 b(eor)o(\022)g(eme)17 b(1)31 b fj(soit)17 b(une)e(\023)-22 b(e)n(quation)16 b(de)g(la)g(forme)h fq(\()p fm(e)s fq(1\))e fj(o)q(\022)-24 b(u)279 1499 y fk(f)12 b fq(=)h fm(\025)p fq(\()p fm(i)424 1506 y fg(1)442 1499 y fm(;)8 b(:)g(:)g(:)t(;)g(i)559 1506 y fw(m)p fx(\000)p fg(1)632 1499 y fm(;)g(i)669 1506 y fw(m)700 1499 y fq(\))k ff(j)g fq(\(0)p fm(
y fw(m)741 2132 y fq(\).)15 b(nous)g(a)o(v)o(ons)f(donc)8 b(:)364 2217 y fh(h)388 2223 y fg(0)448 2217 y fy(=)42 b fh(\025)p fy(\()p fh(i)576 2223 y fg(1)595 2217 y fh(;)7 b(:)g(:)g(:)e(;)i(i)702 2223 y fw(m)733 2217 y fy(\))p fg(j)p fy(\()p fh(i)791 2223 y fw(m)834 2217 y fy(=)12 b(0\))p fh(:)p fy(\()p fh(i)957 2223 y fg(1)975 2217 y fh(;)7 b(:)g(:)g(:)e(;)i(i)1082 2223 y fw(m)p fx(\000)p fg(1)1156 2217 y fh(;)g fy(0\))448 2267 y(=)42 b fh(\025)p fy(\()p fh(i)576 2273 y fg(1)595 2267 y fh(;)7 b(:)g(:)g(:)e(;)i(i)702 2273 y fw(m)733 2267 y fy(\))p fg(j)p fy(\()p fh(i)791 2273 y fw(m)834 2267 y fy(=)12 b(0\))p fh(:)p fy(\()p fh(i)957 2273 y fg(1)985 2267 y fy(+)d fh(i)1040 2273 y fw(m)1072 2267 y fh(b)1090 2273 y fg(1)1108 2267 y fh(;)e(:)g(:)g(:)e(;)i(i)1215 2273 y fw(m)p fx(\000)p fg(1)1298 2267 y fy(+)j fh(i)1354 2273 y fw(m)1386 2267 y fh(b)1404 2273 y fw(m)p fx(\000)p fg(1)1477 2267 y fh(;)d(i)1510 2273 y fw(m)1542 2267 y fy(\))364 2317 y fh(h)388 2323 y fg(1)448 2317 y fy(=)42 b fh(\025)p fy(\()p fh(i)576 2323 y fg(1)595 2317 y fh(;)7 b(:)g(:)g(:)e(;)i(i)702 2323 y fw(m)733 2317 y fy(\))p fg(j)p fy(\()p fh(i)791 2323 y fw(m)834 2317 y fy(=)12 b(1\))p fh(:)p fy(\()p fh(i)957 2323 y fg(1)985 2317 y fy(+)d fh(b)1044 2323 y fg(1)1063 2317 y fh(;)e(:)g(:)g(:)t(;)g(i)1169 2323 y fw(m)p fx(\000)p fg(1)1252 2317 y fy(+)j fh(b)1312 2323 y fw(m)p fx(\000)p fg(1)1386 2317 y fh(;)d fy(1\))448 2367 y(=)42 b fh(\025)p fy(\()p fh(i)576 2373 y fg(1)595 2367 y fh(;)7 b(:)g(:)g(:)e(;)i(i)702 2373 y fw(m)733 2367 y fy(\))p fg(j)p fy(\()p fh(i)791 2373 y fw(m)834 2367 y fy(=)12 b(1\))p fh(:)p fy(\()p fh(i)957 2373 y fg(1)985 2367 y fy(+)d fh(i)1040 2373 y fw(m)1072 2367 y fh(b)1090 2373 y fg(1)1108 2367 y fh(;)e(:)g(:)g(:)e(;)i(i)1215 2373 y fw(m)p fx(\000)p fg(1)1298 2367 y fy(+)j fh(i)1354 2373 y fw(m)1386 2367 y fh(b)1404 2373 y fw(m)p fx(\000)p fg(1)1477 2367 y fh(;)d(i)1510 2373 y fw(m)1542 2367 y fy(\))364 2417 y fh(h)388 2423 y fg(2)448 2417 y fy(=)42 b fh(\025)p fy(\()p fh(i)576 2423 y fg(1)595 2417 y fh(;)7 b(:)g(:)g(:)e(;)i(i)702 2423 y fw(m)733 2417 y fy(\))p fg(j)p fy(\()p fh(i)791 2423 y fw(m)834 2417 y fy(=)12 b(2\))p fh(:)p fy(\()p fh(i)957 2423 y fg(1)985 2417 y fy(+)d(2)p fh(b)1065 2423 y fg(1)1083 2417 y fh(;)e(:)g(:)g(:)e(;)i (i)1190 2423 y fw(m)p fx(\000)p fg(1)1273 2417 y fy(+)j(2)p fh(b)1354 2423 y fw(m)p fx(\000)p fg(1)1427 2417 y fh(;)d fy(2\))448 2466 y(=)42 b fh(\025)p fy(\()p fh(i)576 2472 y fg(1)595 2466 y fh(;)7 b(:)g(:)g(:)e(;)i(i)702 2472 y fw(m)733 2466 y fy(\))p fg(j)p fy(\()p fh(i)791 2472 y fw(m)834 2466 y fy(=)12 b(2\))p fh(:)p fy(\()p fh(i)957 2472 y fg(1)985 2466 y fy(+)d fh(i)1040 2472 y fw(m)1072 2466 y fh(b)1090 2472 y fg(1)1108 2466 y fh(;)e(:)g(:)g(:)e(;)i(i)1215 2472 y fw(m)p fx(\000)p fg(1)1298 2466 y fy(+)j fh(i)1354 2472 y fw(m)1386 2466 y fh(b)1404 2472 y fw(m)p fx(\000)p fg(1)1477 2466 y fh(;)d(i)1510 2472 y fw(m)1542 2466 y fy(\))364 2511 y(.)364 2527 y(.)364 2544 y(.)p eop %%page: 50 52 50 51 bop 75 269 a fq(50)521 b fl(chapitre)16 b(4.)45 b(stra)l(t)1144 257 y(\023)1138 269 y(egies)16 b(de)f(transf)o(orma)l (tions)201 386 y fh(h)225 392 y fw(n)s fx(\000)p fg(1)340 386 y fy(=)42 b fh(\025)p fy(\()p fh(i)468 392 y fg(1)488 386 y fh(;)7 b(:)g(:)g(:)t(;)g(i)594 392 y fw(m)626 386 y fy(\))p fg(j)p fy(\()p fh(i)684 392 y fw(m)727 386 y fy(=)12 b fh(n)5 b fg(\000)p fy(1\))p fh(:)p fy(\()p

fh(i)920 392 y fg(1)948 386 y fy(+)k(\()p fh(n)c fg(\000)p fy(1\))p fh(b)1130 392 y fg(1)1149 386 y fh(;)i(:)g(:)g(:)t(;)g(i)1255 392 y fw(m)p fx(\000)p fg(1)1338 386 y fy(+)j(\()p fh(n)5 b fg(\000)p fy(1\))p fh(b)1521 392 y fw(m)p fx(\000)p fg(1)1595 386 y fh(;)i(n)e fg(\000)p fy(1\))340 436 y(=)42 b fh(\025)p fy(\()p fh(i)468 442 y fg(1)488 436 y fh(;)7 b(:)g(:)g(:)t(;)g(i)594 442 y fw(m)626 436 y fy(\))p fg(j)p fy(\()p fh(i)684 442 y fw(m)727 436 y fy(=)12 b fh(n)5 b fg(\000)p fy(1\))p fh(:)p fy(\()p fh(i)920 442 y fg(1)948 436 y fy(+)k fh(i)1003 442 y fw(m)1035 436 y fh(b)1053 442 y fg(1)1071 436 y fh(;)e(:)g(:)g(:)e(;)i(i)1178 442 y fw(m)p fx(\000)p fg(1)1261 436 y fy(+)j fh(i)1317 442 y fw(m)1348 436 y fh(b)1366 442 y fw(m)p fx(\000)p fg(1)1440 436 y fh(;)d(i)1473 442 y fw(m)1505 436 y fy(\))90 507 y fq(consid)o(\023)-21 b(erons)15 b(la)g(fonction)h fk(h)p fq(=)d fm(h)670 514 y fg(0)699 507 y fq(#)d fm(h)773 514 y fg(1)801 507 y fq(#)18 b fm(:)8 b(:)g(:)16 b fq(#)10 b fm(h)1002 514 y fw(n)s fx(\000)p fg(1)1076 507 y fq(.)15 b(p)o(ar)f(d)o(\023)-21 b(e\014nition)330 600 y fk(h)12 b fq(=)h fm(\025)p fq(\()p fm(i)475 607 y fg(1)493 600 y fm(;)8 b(:)g(:)g(:)d(;)j(i)611 607 y fw(m)641 600 y fq(\))k ff(j)h fq(\(0)p ff(\024)o fm(i)788 607 y fw(m)820 600 y fm(
fh(a)1088 1074 y fg(1)1107 1068 y fh(;)e(:)g(:)g(:)e(;)i(i)1214 1074 y fw(m)p fx(\000)p fg(1)1297 1068 y fg(\000)i fh(i)1352 1074 y fw(m)1384 1068 y fh(b)1402 1074 y fw(m)p fx(\000)p fg(1)1485 1068 y fy(+)h fh(a)1549 1074 y fw(m)p fx(\000)p fg(1)1623 1068 y fh(;)d(i)1656 1074 y fw(m)1696 1068 y fg(\000)j fy(1\))147 1118 y(=)i fh(\025)p fy(\()p fh(i)245 1124 y fg(1)264 1118 y fh(;)7 b(:)g(:)g(:)e(;)i(i)371 1124 y fw(m)p fx(\000)p fg(1)445 1118 y fh(;)g(i)478 1124 y fw(m)509 1118 y fy(\))12 b fg(j)f fy(\(0)p fh(
12 b(de)i fm(b)f fq(son)o(t)g(d)o(\023)-21 b(ecal)o(\023)g(es)13 b(le)h(long)g(de)g(la)g(diagonale,)g(v)o(ers)f(le)i(haut)75 2091 y(\022)-23 b(a)13 b(gauc)o(he)h(\(les)g(b)q(ords)g(son)o(t)f(b)q (oucl)o(\023)-21 b(es)14 b(toro)-5 b(\177)-18 b(\020dalemen)o(t\))14 b(a)o(v)m(an)o(t)f(l')o(\023)-21 b(etap)q(e)13 b(suiv)m(an)o(te)h(\(v)o (oir)f(\014gure)h(4.1,)f(sur)75 2147 y(laquelle)k(les)f(\015)o(\022)-21 b(ec)o(hes)14 b(mon)o(tren)o(t)g(le)i(d)o(\023)-21 b(eplacemen)o(t)15 b(des)g(v)m(aleurs)h(du)g(c)o(hamp)e fk(a)p fq(\).)h(en)g(repr)o(\023) -21 b(esen)o(tan)o(t)13 b(les)75 2204 y(calculs)j(dans)f(un)f(cub)q(e)i (form)o(\023)-21 b(e)13 b(des)i(deux)g(directions)h fm(i)e fq(et)g fm(j)j fq(de)d(la)h(matrice)g fm(a)f fq(et)h(de)f(la)h (direction)h fm(k)q fq(,)75 2260 y(au)f(b)q(out)g(de)h fm(n)e fq(\023)-21 b(etap)q(es,)15 b(nous)g(a)o(v)o(ons)f(l'ensem)o (ble)j(des)e(pro)q(duits)h(sur)f(le)h(plan)g(\()p fm(i)c fq(=)h fm(j)s fq(\))h(du)i(cub)q(e.)75 2316 y(l'algorithme)k(d)o(\023) -21 b(ecrit)20 b(se)g(traduit)f(par)h(le)h(progamme)e fn(pei)g fq(suiv)m(an)o(t)9 b(:)19 b fk(p)h fq(est)f(d)o(\023)-21 b(e\014ni)21 b(comme)d(\023)-21 b(etan)o(t)75 2373 y(la)19 b(sup)q(erp)q(osition)i(des)e(c)o(hamps)g(de)g(donn)o(\023)-21 b(ees)18 b fk(a)h fq(et)g fk(b)p fq(,)f(tous)g(deux)i(d)o(\023)-21 b(e\014nis)19 b(r)o(\023)-21 b(ecursiv)o(emen)o(t)18 b(par)h(les)75 2429 y(routages)c(utilisan)o(t)j(les)f(fonctions)f fk(left)g fq(et)g fk(upleft)g fq(a)o(v)o(ec)g(les)h(v)m(aleurs)g (initiales)i fk(a0)d fq(et)g fk(b0)g fq(d)o(\023)-21 b(e\014nies)75 2486 y(\022)e(a)15 b(partir)g(des)g(donn)o(\023)-21 b(ees)15 b fk(m)g fq(et)g fk(v)p fq(.)p eop %%page: 51 53 51 52 bop 75 269 a fl(4.2.)29 b(stra)l(t)336 257 y(\023)330 269 y(egie)16 b(1)7 b(:)15 b(simplifica)l(tion)i(des)e(communica)l (tions)333 b fq(51)75 397 y fk(matvect1)23 b(:)g(\(m,v\))15 b ff(7!)h fk(p)75 407 y fx(8)75 445 y(>)75 457 y(>)75 470 y(>)75 482 y(>)75 495 y(>)75 507 y(>)75 520 y(>)75 532 y(>)75 544 y(>)75 557 y(>)75 569 y(<)75 644 y(>)75 657 y(>)75 669 y(>)75 681 y(>)75 694 y(>)75 706 y(>)75 719 y(>)75 731 y(>)75 744 y(>)75 756 y(>)75 769 y(:)137 449 y fk(a0)f fq(=)g fk(cube)7 b(::)h(a0)137 505 y(b0)15 b fq(=)g fk(cube)7 b(::)h(b0)137 562 y(m)15 b fq(=)g fk(aligna)7 b(::)g(a0)137 618 y(v)15 b fq(=)g fk(alignb)7 b(::)g(b0)137 674 y(a)15 b fq(=)g fk(a0)g(/&/)8 b fq(\()p fk(a)14 b fa(c)i fk(left)o fq(\))137 731 y fk(b)f fq(=)g fk(b0)g(/&/)8 b fq(\()p fk(b)14 b fa(c)i fk(upleft)o fq(\))137 787 y fk(p)f fq(=)g fk(prod)g fa(b)g fk(\(\(a)24 b(/&/)7 b(b\))15 b fa(c)h fk(diag)o fq(\))96 850 y fk(cube)88 b fq(=)42 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j,k)p fm(<)p fk(n\).\(i,j,k\))96 906 y(aligna)e fq(=)i fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n)6 b(&)i(k)p fq(=)p fk(0\).\(i,j\))96 963 y(alignb)40 b fq(=)i fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n)6 b(&)i(i=j)g(&)g(k)p fq(=)p fk(0\).\(i\))96 1019 y(left)88 b fq(=)42 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n)6 b(&)i(0)p fm(<)p fk(k)p fm(<)p fk(n\).\(i,\(j+1\))23 b(mod)g(n,k-1\))96 1075 y(upleft)40 b fq(=)i fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n)6 b(&)i(0)p fm(<)p fk(k)p fm(<)p fk(n\).\(\(i+1\))23 b(mod)h(n,\(j+1\))f(mod)g(n,k-1\))96 1132 y(prod)88 b fq(=)42 b fm(\025)p fk(\(a)p fq(;)o fk(b\).\(a*b\))96 1188 y(diag)88 b fq(=)42 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j,k)p ff(\024)p fk(n)6 b(&)i(i)p fq(=)p fk(j\))75 1344 y fo(d)o(\023)-25 b(ecomp)q(osition)19

b(des)e(routages)146 1443 y fq(les)h(routages)e fk(left)h fq(et)h fk(upleft)f fq(p)q(euv)o(en)o(t)h(se)g(d)o(\023)-21 b(ecomp)q(oser)17 b(de)h(fa\030)-20 b(con)17 b(\022)-23 b(a)18 b(faire)g(appara)-5 b(^)-18 b(\020tre)17 b(une)75 1499 y(fonction)f(de)f(routage)f fk(g)h fq(dans)h(les)g(expressions)8 b(:)186 1619 y fk(left)89 b fq(=)42 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(k)p fm(<)p fk(n\).\(i,\(j+1\))21 b(mod)i(n,k\))10 b ff(\016)448 1676 y fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p fm(<)p fk(k)p fm(<)p fk(n)22 b(&)i(0)p ff(\024)p fk(i,j)p fm(<)p fk(n\).\(i,j,k-1\))60 b fq(=)42 b fk(g)10 b ff(\016)f fk(prev)186 1732 y(upleft)41 b fq(=)h fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(k)p fm(<)p fk(n\).\(i,\(j+1\))21 b(mod)i(n,k\))10 b ff(\016)448 1789 y fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n\).\(\(i+1\))21 b(mod)i(n,j,k\))9 b ff(\016)448 1845 y fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p fm(<)p fk(k)p fm(<)p fk(n)22 b(&)i(0)p ff(\024)p fk(i,j)p fm(<)p fk(n\).\(i,j,k-1\))60 b fq(=)42 b fk(g)10 b ff(\016)f fk(up)h ff(\016)g fk(prev)146 1971 y fq(les)j(noms)g(donn)o(\023)-21 b(es)12 b(aux)h(fonctions)g(obten)o (ues)g(dans)g(cette)g(d)o(\023)-21 b(ecomp)q(osition)13 b(re\015)o(\022)-21 b(eten)o(t)12 b(le)i(fait)f(que,)75 2027 y(d)o(\023)-21 b(eplacer)13 b(les)g(v)m(aleurs)g(le)g(long)g(de)g (la)f(diagonale)i(est)d(\023)-21 b(equiv)m(alen)o(t)13 b(\022)-23 b(a)12 b(les)h(d)o(\023)-21 b(eplacer)13 b(v)o(ers)f(la)h (gauc)o(he,)f(puis)75 2084 y(v)o(ers)h(le)h(haut.)g(l'id)o(\023)-21 b(ee)13 b(est)h(donc)g(de)g(d)o(\023)-21 b(emon)o(trer)12 b(qu'un)h(programme)g(qui)h(ne)g(d)o(\023)-21 b(eplace)14 b(aucune)h(v)m(aleur)75 2140 y(de)f fk(a)f fq(tout)f(en)i(routan)o(t)e (les)i(v)m(aleurs)g(de)g fk(b)f fq(v)o(ers)g(le)h(haut,)f(est)f(\023) -21 b(equiv)m(alen)o(t)14 b(au)f(programme)g(pr)o(\023)-21 b(ec)o(\023)g(eden)o(t)6 b(;)75 2197 y(autremen)o(t)12 b(dit,)h(que)g(nous)g(p)q(ouv)o(ons)f(simpli\014er)j(les)e(op)o(\023) -21 b(erations)12 b(de)h(routage)f(en)h(enlev)m(an)o(t)g(le)h(facteur) 75 2253 y(comm)o(un)h fk(g)g fq(des)h(deux)f(fonctions.)146 2316 y(nous)c(dev)o(ons)h(mon)o(trer)f(qu'il)i(existe)f(un)h(c)o (hangemen)o(t)e(de)h(base)g(p)q(ermettan)o(t)f(d'obtenir,)h(\022)-23 b(a)12 b(partir)75 2373 y(du)19 b(programme)e(initial,)k(un)d (programme)g(a)o(v)o(ec)g(des)h(routages)e(simpli\014)o(\023)-21 b(es,)20 b(c'est-\022)-23 b(a-dire)18 b(que)h(p)q(our)75 2429 y(c)o(haque)d(\023)-21 b(equation)15 b(de)i(la)g(forme)f fk(x)g fq(=)g fk(x0)24 b(/&/)8 b(\(x)23 b fa(c)h fk(g)10 b ff(\016)g fk(f'\))p fq(,)16 b(il)h(existe)g(un)g(c)o(hangemen)o(t)f (de)h(base,)75 2486 y(tel)d(que)h(lorsqu'il)g(est)e(appliqu)o(\023)-21 b(e)15 b(\022)-23 b(a)14 b(cette)e(\023)-21 b(equation,)13 b(elle)j(se)e(r)o(\023)-21 b(e)o(\023)g(ecrit)12 b(de)i(la)h(mani)o (\022)-21 b(ere)13 b(suiv)m(an)o(te)c(:)k fk(h)7 b(::)h(x)75 2542 y fq(=)16 b fk(\(h)7 b(::)h(x0\))23 b(/&/)8 b(\(\(h)f(::)h(x\))24 b fa(c)g fk(f'\))p fq(.)p eop %%page: 52 54 52 53 bop 75 269 a fq(52)521 b fl(chapitre)16 b(4.)45 b(stra)l(t)1144 257 y(\023)1138 269 y(egies)16 b(de)f(transf)o(orma)l (tions)75 1645 y @beginspecial @setspecial %%begindocument: transf1.pstex /$f2psdict 200 dict def $f2psdict begin $f2psdict /mtrx matrix put /l {lineto} bind def /m {moveto} bind def /s {stroke} bind def

/n {newpath} bind def /gs {gsave} bind def /gr {grestore} bind def /clp {closepath} bind def /graycol {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul setrgbcolor} bind def /col-1 {} def /col0 {0 0 0 setrgbcolor} bind def /col1 {0 0 1 setrgbcolor} bind def /col2 {0 1 0 setrgbcolor} bind def /col3 {0 1 1 setrgbcolor} bind def /col4 {1 0 0 setrgbcolor} bind def /col5 {1 0 1 setrgbcolor} bind def /col6 {1 1 0 setrgbcolor} bind def /col7 {1 1 1 setrgbcolor} bind def /col8 {.68 .85 .9 setrgbcolor} bind def /col9 {0 .39 0 setrgbcolor} bind def /col10 {.65 .17 .17 setrgbcolor} bind def /col11 {1 .51 0 setrgbcolor} bind def /col12 {.63 .13 .94 setrgbcolor} bind def /col13 {1 .75 .8 setrgbcolor} bind def /col14 {.7 .13 .13 setrgbcolor} bind def /col15 {1 .84 0 setrgbcolor} bind def end /$f2psbegin {$f2psdict begin /$f2psenteredstate save def} def /$f2psend {$f2psenteredstate restore end} def $f2psbegin 0 setlinecap 0 setlinejoin -9.0 391.0 translate 0.900 -0.900 scale 0.500 setlinewidth % polyline n 99 349 m 169 414 l 169 434 l 149 434 l 74 364 l 74 349 l 99 349 l gs col7 0.95 graycol fill gr gs col7 s gr % polyline n 184 129 m 254 194 l 254 214 l 234 214 l 159 144 l 159 129 l 184 129 l gs col7 0.95 graycol fill gr gs col7 s gr % polyline n 264 89 m 334 154 l 334 174 l 314 174 l 239 104 l 239 89 l 264 89 l gs col7 0.95 graycol fill gr gs col7 s gr [4.000000] 0 setdash % polyline n 174 309 m 249 379 l 249 339 l 219 309 l 174 309 l gs col7 0.95 graycol fill gr gs col7 s gr [] 0 setdash n 182.000 311.000 m 174.000 309.000 l 182.000 307.000 l gs 2 setlinejoin col7 s gr % polyline n 105 168 m 175 233 l 175 253 l 155 253 l 80 183 l 80 168 l 105 168 l gs col7 0.95 graycol fill gr gs col7 s gr % polyline n 279 269 m 329 314 l 329 284 l 314 269 l 279 269 l gs col7 0.95 graycol fill gr gs col7 s gr [4.000000] 0 setdash % polyline n 234 284 m 309 354 l 269 354 l 234 319 l 234 284 l gs col7 0.95 graycol fill gr gs col7 s gr [] 0 setdash n 232.000 292.000 m 234.000 284.000 l 236.000 292.000 l gs 2 setlinejoin col7 s gr

[4.000000] 0 setdash % polyline n 154 359 m 189 394 l 164 394 l 154 384 l 154 359 l gs col7 0.95 graycol fill gr gs col7 s gr [] 0 setdash n 152.000 367.000 m 154.000 359.000 l 156.000 367.000 l gs 2 setlinejoin col7 s gr n 211.000 156.000 m 209.000 164.000 l 207.000 156.000 l gs 2 setlinejoin col-1 s gr [4.000000] 0 setdash n 224.000 164.000 15.000 0.000 180.000 arcn gs col-1 s gr [] 0 setdash n 181.000 131.000 m 179.000 139.000 l 177.000 131.000 l gs 2 setlinejoin col-1 s gr [4.000000] 0 setdash n 194.000 139.000 15.000 0.000 180.000 arcn gs col-1 s gr [] 0 setdash [4.000000] 0 setdash % polyline n 124 364 m 194 329 l gs col-1 s gr [] 0 setdash n 185.950 330.789 m 194.000 329.000 l 187.739 334.367 l gs 2 setlinejoin col-1 s gr [4.000000] 0 setdash % polyline n 157 205 m 237 165 l gs col-1 s gr [] 0 setdash [4.000000] 0 setdash % polyline n 129 184 m 209 144 l gs col-1 s gr [] 0 setdash [4.000000] 0 setdash % interpolated spline n 98 243 m 87.293 248.999 84.043 252.249 85 256 curveto 86.229 260.821 97.406 261.258 102 261 curveto 128.581 259.508 160.081 246.258 228 208 curveto gs col-1 s gr [] 0 setdash n 220.048 210.184 m 228.000 208.000 l 222.011 213.669 l gs 2 setlinejoin col-1 s gr % polyline n 174 254 m 334 174 l gs col-1 s gr % polyline n 254 214 m 254 129 l 159 129 l 159 214 l clp gs col-1 s gr % polyline n 174 254 m 174 169 l 79 169 l 79 254 l clp gs col-1 s gr [4.000000] 0 setdash % polyline n 159 394 m 229 359 l gs col-1 s gr [] 0 setdash n 220.950 360.789 m 229.000 359.000 l 222.739 364.367 l gs 2 setlinejoin col-1 s gr [4.000000] 0 setdash % polyline n 89 419 m 159 384 l gs col-1 s gr [] 0 setdash n 150.950 385.789 m 159.000 384.000 l 152.739 389.367 l gs 2 setlinejoin col-1 s

gr % polyline n 169 434 m 329 354 l gs col-1 s gr % polyline n 74 349 m 234 269 l gs col-1 s gr % polyline n 19 139 m 19 164 l gs col-1 s gr n 21.000 156.000 m 19.000 164.000 l 17.000 156.000 l gs 2 setlinejoin % polyline n 249 394 m 249 309 l 154 309 l 154 394 l clp gs col-1 s gr n 174 169 m 174 169 l gs col-1 s gr % polyline n 129 364 m 124 364 l 124 359 l 129 359 l clp gs 0.50 setgray fill gs col-1 s gr % polyline n 89 424 m 84 424 l 84 419 l 89 419 l clp gs 0.50 setgray fill gr gs col-1 s gr % polyline n 134 184 m 129 184 l 129 179 l 134 179 l clp gs 0.50 setgray fill gs col-1 s gr n 19 139 m 19 139 l gs col-1 s gr % polyline n 79 169 m 239 89 l gs col-1 s gr % polyline n 164 394 m 159 394 l 159 389 l 164 389 l clp gs 0.50 setgray fill gs col-1 s gr % polyline n 19 139 m 54 139 l gs col-1 s gr n 46.000 137.000 m 54.000 139.000 l 46.000 141.000 l gs 2 setlinejoin n 174 169 m 174 169 l gs col-1 s gr n 174 169 m 174 169 l gs col-1 s gr n 174 169 m 174 169 l gs col-1 s gr % polyline n 159 209 m 154 209 l 154 204 l 159 204 l clp gs 0.50 setgray fill gs col-1 s gr % polyline n 169 434 m 169 349 l 74 349 l 74 434 l clp gs col-1 s gr % polyline n 19 139 m 49 119 l gs col-1 s gr n 41.234 121.774 m 49.000 119.000 l 43.453 125.102 l gs 2 setlinejoin % polyline n 239 129 m 239 89 l 334 89 l 334 174 l 254 174 l gs col-1 s gr % polyline n 234 309 m 234 269 l 329 269 l 329 354 l 249 354 l gs col-1 s gr % polyline n 99 244 m 94 244 l 94 239 l 99 239 l clp gs 0.50 setgray fill gr gs col-1 s gr $f2psend %%enddocument @endspecial 356 707 a fh(a)378 713 y fg(0)p fw(;)p fg(0)423 707 y fh(b)441 713 y fg(0)581 914 y fh(a)603 920 y fg(2)p fw(;)p fg(2)648 914 y fh(b)666 920 y fg(2)656 558 y fh(a)678 564 y fg(0)p fw(;)p fg(1)723 558 y fh(b)741 564 y fg(1)769 670 y fh(a)791 676 y fg(1)p fw(;)p fg(2)836 670 y fh(b)854 676 y fg(2)881 782 y fh(a)903 788 y fg(2)p fw(;)p fg(0)948 782 y fh(b)966 788 y fg(0)956 408 y fh(a)978 414 y fg(0)p fw(;)p fg(2)1023 408 y fh(b)1041 414 y fg(2)1181 632 y fh(a)1203 638 y fg(2)p fw(;)p fg(1)1248 632 y fh(b)1266 638 y fg(1)337 1382 y fh(a)359 1388 y fg(0)p fw(;)p fg(0)404 1382 y fh(b)422 1388 y fg(0)1162 1082 y fh(a)1184 1088

col-1 s gr

gr

gr

gr

col-1 s gr

gr

col-1 s gr

y fg(0)p fw(;)p fg(2)1229 1082 y fh(b)1247 1088 y fg(2)637 1457 y fh(a)659 1463 y fg(2)p fw(;)p fg(0)704 1457 y fh(b)722 1463 y fg(0)75 595 y ff(i)95 b(j)131 483 y(k)562 1589 y fh(a)584 1595 y fg(2)p fw(;)p fg(2)629 1589 y fh(b)647 1595 y fg(2)1069 520 y fh(a)1091 526 y fg(1)p fw(;)p fg(0)1135 520 y fh(b)1153 526 y fg(0)937 1195 y fh(a)959 1201 y fg(1)p fw(;)p fg(0)1004 1195 y fh(b)1022 1201 y fg(0)1050 1307 y fh(a)1072 1313 y fg(2)p fw(;)p fg(1)1117 1307 y fh(b)1135 1313 y fg(1)750 1232 y fh(a)772 1238 y fg(0)p fw(;)p fg(1)817 1232 y fh(b)835 1238 y fg(1)450 1476 y fh(a)472 1482 y fg(1)p fw(;)p fg(1)517 1476 y fh(b)535 1482 y fg(1)469 801 y fh(a)491 807 y fg(1)p fw(;)p fg(1)536 801 y fh(b)554 807 y fg(1)862 1326 y fh(a)884 1332 y fg(1)p fw(;)p fg(2)929 1326 y fh(b)947 1332 y fg(2)311 1743 y fn(fig.)15 b fq(4.1)f(-)31 b fj(t)m(r)n(ansformation)15 b(de)h fk(matvect1)f fj(en)h fk(matvect2)f fj(p)n(our)i fm(n)c fq(=)g(3)75 1894 y fo(t)l(ransformation)18 b(de)f fk(matvect1)146 1993 y fq(nous)i(p)q(ouv)o(ons)i(main)o(tenan)o(t)e(appliquer)j(la)e(strat)o (\023)-21 b(egie)19 b(de)h(transformation)e(pr)o(\023)-21 b(ec)o(\023)g(eden)o(te)19 b(p)q(our)75 2050 y(obtenir)14 b(de)f(nouv)o(elles)i(d)o(\023)-21 b(e\014nitions)14 b(des)f(c)o(hamps)g fk(a)g fq(et)g fk(b)p fq(,)g(don)o(t)g(les)g (routages)g(ne)g(comp)q(orten)o(t)g(plus)h(le)75 2106 y(facteur)e fk(g)p fq(.)h(ensuite,)g(il)h(faut)e(transformer)f(c)o (haque)h(\023)-21 b(equation)12 b(faisan)o(t)h(r)o(\023)-21 b(ef)o(\023)g(erence)11 b(\022)-23 b(a)13 b fk(a)f fq(et)h fk(b)f fq(p)q(our)h(tenir)75 2163 y(compte)h(de)g(leurs)h(nouv)o(elles) g(d)o(\023)-21 b(e\014nitions.)15 b(la)f(transformation)e(est)i(r)o (\023)-21 b(ealis)o(\023)g(ee)13 b(par)h(le)g(c)o(hangemen)o(t)g(de)75 2219 y(base)h fk(h)p fq(.)g(dans)g(notre)f(exemple,)j(nous)e(d)o(\023) -21 b(eduisons)16 b(du)f(facteur)506 2342 y fk(g)d fq(=)h fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(k)p fm(<)p fk(n\).\(i,\(j+1\))21 b(mod)i(n,k\))75 2465 y fq(la)16 b(bijection)9 b(:)506 2542 y fk(h)j fq(=)h fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(k)p fm(<)p fk(n\).\(i,\(j+k\))21 b(mod)i(n,k\))p eop %%page: 53 55 53 54 bop 75 269 a fl(4.2.)29 b(stra)l(t)336 257 y(\023)330 269 y(egie)16 b(1)7 b(:)15 b(simplifica)l(tion)i(des)e(communica)l (tions)333 b fq(53)75 397 y(don)o(t)15 b(l'in)o(v)o(erse)h(est)f fk(h)451 380 y fq(-1)503 397 y fq(=)h fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(k
b(nous)e(dev)o(ons)g(main)o(tenan)o(t)f(exprimer)i(les)g(c)o(hamps)f fk(m)g fq(et)g fk(v)f fq(qui)i(d)o(\023)-21 b(ep)q(enden)o(t)22 b(de)f fk(a0)g fq(et)g fk(b0)189 978 y fq(resp)q(ectiv)o(emen)o(t,)c (en)h(fonction)g(de)f(\()p fk(h)8 b(::)f(a0)p fq(\))17 b(et)g(\()p fk(h)7 b(::)g(b0)p fq(\))17 b(.)g(p)o(our)f(cela,)i(nous)g (in)o(tro)q(duisons)189 1035 y(ces)13 b(derni)o(\022)-21 b(eres)13 b(expressions)h(dans)g(les)f(d)o(\023)-21 b(e\014nitions)9 b(:)k fk(m)g fq(=)g fk(aligna)7 b(::)g(a0)p fq(,)12 b(et)h fk(v)g fq(=)h fk(alignb)7 b(::)g(b0)189 1091 y fq(sous)15 b(la)g(forme)g(suiv)m(an)o(te)8 b(:)214 1218 y fk(m)15 b fq(=)g fk(\(aligna)9 b ff(\016)h fk(h)537 1201 y fq(-1)584 1218 y ff(\016)g fk(h\))d(::)h(a0)214 1274 y(v)15 b fq(=)g fk(\(alignb)9 b ff(\016)h fk(h)537 1257 y fq(-1)584 1274 y ff(\016)g fk(h\))d(::)h(b0)189 1385 y fq(l'application)16 b(de)e(la)h(r)o(\022)-21 b(egle)14 b(\(7a\))f(m)o(\022)-21 b(ene)14 b(\022)-23 b(a)14 b(une)g(r)o(\023)-21 b(e)o(\023)g(ecriture) 14 b(des)g(alignemen)o(ts)h(de)g fk(a0)f fq(et)g fk(b0)g fq(en)8 b(:)214 1511 y fk(m)15 b fq(=)g fk(aligna)9 b ff(\016)h fk(h)513 1494 y fq(-1)558 1511 y fk(::)d(\(h)h(::)g(a0)o(\)) 214 1567 y(v)15 b fq(=)g fk(alignb)9 b ff(\016)h fk(h)513 1551 y fq(-1)558 1567 y fk(::)d(\(h)h(::)g(b0)o(\))189 1678 y fq(le)20 b(calcul)h(de)g fk(aligna)9 b ff(\016)h fk(h)666 1661 y fq(-1)723 1678 y fq(donne)20 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n)6 b(&)i(k)p fq(=)p fk(0\).\(i,j\))19 b fq(=)h fk(aligna)f fq(et)189 1735 y(celui)e(de)e fk(alignb)10 b ff(\016)f fk(h)565 1717 y fq(-1)618 1735 y fq(donne)16 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n)6 b(&)h(i)p fq(=)p fk(j)i(&)e(k)p fq(=)p fk(0\).\(i\))15 b fq(=)g fk(alignb)p fq(.)143 1843 y({)23 b(egalemen)o(t,)10 b(nous)g(in)o(tro)q(duisons)i(les)f(nouv)o(elles)h(expressions)f fk(h)c(::)h(a)i fq(et)g fk(h)e(::)f(b)j fq(dans)h(l')o(\023)-21 b(equation)189 1900 y(d)o(\023)g(e\014nissan)o(t)13 b fk(p)p fq(,)g(en)g(appliquan)o(t)i(le)f(c)o(hangemen)o(t)f(de)h(base)f (aux)g(deux)h(mem)o(bres)g(de)f(l')o(\023)-21 b(equation.)189 1956 y(l')o(\023)g(equation)14 b fk(h)8 b(::)f(p)15 b fq(=)h fk(h)7 b(::)g(\(prod)23 b fa(b)i fk(\(\(a)e(/&/)8 b(b\))23 b fa(c)h fk(diag\)\))15 b fq(devien)o(t)8 b(:)222 2069 y fg(\(1)p fw(b)p fg(\))214 2097 y ff(\000)-7 b(!)50 b fk(h)7 b(::)h(p)15 b fq(=)g fk(prod)g fa(b)g fk(\(h)8 b(::)g(\(\(a)23 b(/&/)8 b(b\))23 b fa(c)i fk(diag)o(\)\))222 2140 y fg(\(3)p fw(b)p fg(\))214 2169 y ff(\000)-7 b(!)50 b fk(h)7 b(::)h(p)15 b fq(=)g fk(prod)g fa(b)g fk(\(\(h)8 b(::)g(\(a)23 b(/&/)8 b(b\))o(\))24 b fa(c)g fk(diag'\))337 2225 y fq(car)15 b fm(dom)p fq(\()p fk(diag)o fq(\))9 b ff([)i fm(img)r fq(\()p fk(diag)n fq(\))h ff(\022)h fm(dom)p fq(\()p fk(h)p fq(\))h(et)337 2282 y(o)q(\022)-24 b(u)15 b fk(diag')g fq(=)g fk(h)10 b ff(\016)g fk(diag)f ff(\016)h fk(h)814 2265 y fq(-1)867 2282 y fq(=)15 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(i)p fq(=)p fk(\(j-k\))22 b(mod)h(n\))214 2336 y fg(\(11)p fw(b)p fg(\))214 2365 y ff(\000)-7 b(!)50 b fk(h)7 b(::)h(p)15 b fq(=)g fk(prod)g fa(b)g fk(\(\(\(h)8 b(::)f(a\))24 b(/&/)8 b(\(h)f(::)h(b\)\))23 b fa(c)i fk(diag')o(\))75 2486 y fq(t)l(outes)15 b(ces)f(\023)-21 b(equations)15 b(formen)o(t)f(le)i(programme)e fk(matvect1')7 b fq(:)p eop %%page: 54 56 54 55 bop 75 269 a fq(54)521 b fl(chapitre)16 b(4.)45 b(stra)l(t)1144 257 y(\023)1138 269 y(egies)16 b(de)f(transf)o(orma)l (tions)75 397 y fk(matvect1')23 b(:)g(\(m,v\))15 b ff(7!)g

fk(p)75 407 y fx(8)75 445 y(>)75 457 y(>)75 470 y(>)75 482 y(>)75 495 y(>)75 507 y(>)75 520 y(>)75 532 y(>)75 544 y(>)75 557 y(>)75 569 y(<)75 644 y(>)75 657 y(>)75 669 y(>)75 681 y(>)75 694 y(>)75 706 y(>)75 719 y(>)75 731 y(>)75 744 y(>)75 756 y(>)75 769 y(:)137 449 y fk(h)7 b(::)h(a0)14 b fq(=)i fk(cube)7 b(::)g(\(h)h(::)g(a0)o(\))137 505 y(h)f(::)h(b0)14 b fq(=)i fk(cube)7 b(::)g(\(h)h(::)g(b0)o(\))137 562 y(m)15 b fq(=)g fk(aligna)7 b(::)g(\(h)h(::)g(a0)o(\))137 618 y(v)15 b fq(=)g fk(alignb)7 b(::)g(\(h)h(::)g(b0)o(\))137 674 y(h)f(::)h(a)15 b fq(=)g fk(h)8 b(::)f(a0)15 b(/&/)7 b fq(\()p fk(\(h)h(::)f(a\))15 b fa(c)h fk(prev)o fq(\))137 731 y fk(h)7 b(::)h(b)15 b fq(=)g fk(h)8 b(::)f(b0)15 b(/&/)7 b fq(\()p fk(\(h)h(::)f(b\))15 b fa(c)h fk(up)9 b ff(\016)h fk(prev)p fq(\))137 787 y fk(h)d(::)h(p)15 b fq(=)g fk(prod)g fa(b)g fk(\(\(\(h)8 b(::)f(a\))24 b(/&/)7 b(\(h)h(::)g(b\)\))23 b fa(c)h fk(diag'\))96 850 y(prev)52 b fq(=)42 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n)6 b(&)i(0)p fm(<)p fk(k)p fm(<)p fk(n\).\(i,j,k-1\))96 906 y(up)100 b fq(=)42 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n\).\(\(i+1\))21 b(mod)j(n,j,k\))96 963 y(diag)192 946 y fx(0)244 963 y fq(=)42 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(i)p fq(=)p fk(\(j-k\))22 b(mod)h(n\))75 1048 y fq(ce)e(programme)g(p)q(eut)f(^)-21 b(etre)21 b(simpli\014)o(\023)-21 b(e)22 b(en)g(utilisan)o(t)g(la)g(propri)o (\023)-21 b(et)o(\023)g(e)20 b(3,)g(car)h(tous)g(les)h(c)o(hamps)f(on)o (t)75 1104 y(leur)h(domaines)g(de)g(r)o(\023)-21 b(ef)o(\023)g(erence) 20 b(inclus)j(dans)e fm(dom)p fq(\()p fk(h)p fq(\))f(et)h(on)g(v)o (\023)-21 b(eri\014e)22 b fm(img)r fq(\()p fk(h)p fq(\))f ff(\022)i fm(dom)p fq(\()p fk(h)p fq(\).)c(egale-)75 1161 y(men)o(t,)12 b(les)g(deux)h(premi)o(\022)-21 b(eres)11 b(\023)-21 b(equations)12 b(p)q(euv)o(en)o(t)g(^)-21 b(etre)11 b(supprim)o(\023)-21 b(ees)12 b(car)g fk(h)e ff(\016)g fk(cube)23 b(=)h(h)p fq(,)11 b(et)h(on)h(v)o(\023)-21 b(eri\014e)75 1217 y fm(dom)p fq(\()p fm(v)201 1224 y fr(a0)233 1217 y fq(\))13 b ff(\022)g fm(dom)p fq(\()p fk(h)p fq(\).)g(nous)i(obtenons)g(ainsi)i(le)f(programme)e fk(matvect2)p fq(,)g(ra\016nan)o(t)g fk(matvect1)6 b fq(:)75 1338 y fk(matvect2)23 b(:)g(\(m,v\))15 b ff(7!)h fk(p)75 1353 y fx(8)75 1390 y(>)75 1402 y(>)75 1415 y(>)75 1427 y(>)75 1440 y(>)75 1452 y(<)75 1527 y(>)75 1539 y(>)75 1552 y(>)75 1564 y(>)75 1577 y(>)75 1589 y(:)137 1388 y fk(m)f fq(=)g fk(aligna)7 b(::)g(a0)137 1444 y(v)15 b fq(=)g fk(alignb)7 b(::)g(b0)137 1501 y(a)15 b fq(=)g fk(a0)24 b(/&/)7 b(\(a)24 b fa(c)g fk(prev\))137 1557 y(b)15 b fq(=)g fk(b0)24 b(/&/)7 b(\(b)24 b fa(c)g fk(up)10 b ff(\016)g fk(prev)o(\))137 1614 y(p)15 b fq(=)g fk(prod)g fa(b)g fk(\(a/&/)8 b(b\))23 b fa(c)i fk(diag')96 1674 y(prev)41 b fq(=)h fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n)6 b(&)h(0)p fm(<)p fk(k)p fm(<)p fk(n\).\(i,j,k-1\))96 1731 y(up)89 b fq(=)42 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n\).\(\(i+1\))20 b(mod)k(n,j,k\))75 1823 y fq(en)17 b(fait,)g(en)h(utilisan)o(t)g(la)g(m)o(^)-21 b(eme)16 b(tec)o(hnique,)i(on)g(p)q(eut)g(mon)o(trer)e(que)i(les)g (programmes)e fk(matvect1)75 1880 y fq(et)f fk(matvect2)f fq(son)o(t)g(\023)-21 b(equiv)m(alen)o(ts.)75 2046 y fw(4.2.4)55 b(application)18 b(au)h(pro)r(duit)f(de)h(matrices)d(de)i (cannon)146 2147 y fq(un)12 b(exemple)i(similaire)h(est)d(celui)j(de)e (l'algorithme)g(de)g(m)o(ultiplication)i(de)e(matrices)g(de)g(cannon)75

2204 y([8)o(].)f(l'algorithme)g(\023)-21 b(evite)13 b(la)g(r)o(\023)-21 b(eplication)13 b(des)g(co)q(e\016cien)o(ts)h(en)f(routan)o(t)f(les)h (v)m(aleurs)h(n)o(\023)-21 b(ecessaires)12 b(p)q(our)75 2260 y(c)o(hacune)20 b(des)f(m)o(ultiplications.)i(l'encom)o(bremen)o (t)e(m)o(\023)-21 b(emoire)18 b(induit)j(par)d(cet)h(algorithme)g(est)g (de)75 2316 y(fait)d(r)o(\023)-21 b(eduit)15 b([34)o(].)g(comme)g(le)h (mon)o(tre)f(la)h(\014gure)g(4.2,)e(apr)o(\022)-21 b(es)15 b(l'alignemen)o(t)i(initial)h(des)d(matrices,)h(et)75 2373 y(le)f(pro)q(duit)h(des)f(co)q(e\016cien)o(ts)g(appari)o(\023)-21 b(es,)14 b(le)h(routage)f(consiste)h(en)g(une)h(rotation)d(de)i(droite) g(\022)-23 b(a)15 b(gauc)o(he)75 2429 y(des)e(v)m(aleurs)h(de)g(la)f (premi)o(\022)-21 b(ere)13 b(matrice,)g(et)g(du)h(bas)f(v)o(ers)f(le)i (haut)f(de)h(celles)g(de)g(la)f(deuxi)o(\022)-21 b(eme)14 b(matrice.)75 2486 y(l'algorithme)h(p)q(eut)h(s')o(\023)-21 b(ecrire)7 b(:)p eop %%page: 55 57 55 56 bop 75 269 a fl(4.2.)29 b(stra)l(t)336 257 y(\023)330 269 y(egie)16 b(1)7 b(:)15 b(simplifica)l(tion)i(des)e(communica)l (tions)333 b fq(55)517 1042 y @beginspecial @setspecial %%begindocument: cannon.pstex /$f2psdict 200 dict def $f2psdict begin $f2psdict /mtrx matrix put /l {lineto} bind def /m {moveto} bind def /s {stroke} bind def /n {newpath} bind def /gs {gsave} bind def /gr {grestore} bind def /clp {closepath} bind def /graycol {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul setrgbcolor} bind def /col-1 {} def /col0 {0 0 0 setrgbcolor} bind def /col1 {0 0 1 setrgbcolor} bind def /col2 {0 1 0 setrgbcolor} bind def /col3 {0 1 1 setrgbcolor} bind def /col4 {1 0 0 setrgbcolor} bind def /col5 {1 0 1 setrgbcolor} bind def /col6 {1 1 0 setrgbcolor} bind def /col7 {1 1 1 setrgbcolor} bind def /col8 {.68 .85 .9 setrgbcolor} bind def /col9 {0 .39 0 setrgbcolor} bind def /col10 {.65 .17 .17 setrgbcolor} bind def /col11 {1 .51 0 setrgbcolor} bind def /col12 {.63 .13 .94 setrgbcolor} bind def /col13 {1 .75 .8 setrgbcolor} bind def /col14 {.7 .13 .13 setrgbcolor} bind def /col15 {1 .84 0 setrgbcolor} bind def end /$f2psbegin {$f2psdict begin /$f2psenteredstate save def} def /$f2psend {$f2psenteredstate restore end} def $f2psbegin 0 setlinecap 0 setlinejoin -92.0 279.0 translate 0.900 -0.900 scale 0.500 setlinewidth % polyline n 164 149 m 164 310 l gs col-1 s gr % polyline

n % n % n n % n % n % n % n n

274 149 m 274 310 l gs col-1 s gr polyline 329 149 m 329 310 l gs col-1 s gr polyline 114 149 m 329 149 l gs col-1 s gr 114 309 m 114 309 l gs col-1 s gr polyline 114 309 m 329 309 l gs col-1 s gr polyline 114 229 m 329 229 l gs col-1 s gr polyline 114 269 m 329 269 l gs col-1 s gr polyline 114 189 m 329 189 l gs col-1 s gr 112.000 201.000 m 104.000 199.000 l 112.000 197.000 gr 1 setlinecap [1 3.000000] 3.000000 setdash % polyline n 104 199 m 124 199 l gs col-1 s gr [] 0 setdash 0 setlinecap n 112.000 241.000 m 104.000 239.000 l 112.000 237.000 gr 1 setlinecap [1 3.000000] 3.000000 setdash % polyline n 104 239 m 124 239 l gs col-1 s gr [] 0 setdash 0 setlinecap n 327.000 241.000 m 319.000 239.000 l 327.000 237.000 gr 1 setlinecap [1 3.000000] 3.000000 setdash % polyline n 319 239 m 339 239 l gs col-1 s gr [] 0 setdash 0 setlinecap n 327.000 201.000 m 319.000 199.000 l 327.000 197.000 gr 1 setlinecap [1 3.000000] 3.000000 setdash % polyline n 319 199 m 339 199 l gs col-1 s gr [] 0 setdash 0 setlinecap n 327.000 281.000 m 319.000 279.000 l 327.000 277.000 gr 1 setlinecap [1 3.000000] 3.000000 setdash % polyline n 319 279 m 339 279 l gs col-1 s gr [] 0 setdash 0 setlinecap n 327.000 161.000 m 319.000 159.000 l 327.000 157.000 gr 1 setlinecap [1 3.000000] 3.000000 setdash % polyline n 319 159 m 339 159 l gs col-1 s gr [] 0 setdash 0 setlinecap n 112.000 161.000 m 104.000 159.000 l 112.000 157.000 gr 1 setlinecap [1 3.000000] 3.000000 setdash % polyline n 104 159 m 124 159 l gs col-1 s gr [] 0 setdash 0 setlinecap % polyline n 219 149 m 219 310 l gs col-1 s gr n 167.000 161.000 m 159.000 159.000 l 167.000 157.000 gr

l gs 2 setlinejoin col-1 s

l gs 2 setlinejoin col-1 s

l gs 2 setlinejoin col-1 s

l gs 2 setlinejoin col-1 s

l gs 2 setlinejoin col-1 s

l gs 2 setlinejoin col-1 s

l gs 2 setlinejoin col-1 s

l gs 2 setlinejoin col-1 s

1 setlinecap [1 3.000000] 3.000000 setdash % polyline n 159 159 m 179 159 l gs col-1 s gr [] 0 setdash 0 setlinecap n 222.000 161.000 m 214.000 159.000 l 222.000 157.000 gr 1 setlinecap [1 3.000000] 3.000000 setdash % polyline n 214 159 m 234 159 l gs col-1 s gr [] 0 setdash 0 setlinecap n 272.000 161.000 m 264.000 159.000 l 272.000 157.000 gr 1 setlinecap [1 3.000000] 3.000000 setdash % polyline n 264 159 m 284 159 l gs col-1 s gr [] 0 setdash 0 setlinecap n 162.000 201.000 m 154.000 199.000 l 162.000 197.000 gr 1 setlinecap [1 3.000000] 3.000000 setdash % polyline n 154 199 m 174 199 l gs col-1 s gr [] 0 setdash 0 setlinecap n 217.000 201.000 m 209.000 199.000 l 217.000 197.000 gr 1 setlinecap [1 3.000000] 3.000000 setdash % polyline n 209 199 m 229 199 l gs col-1 s gr [] 0 setdash 0 setlinecap n 277.000 201.000 m 269.000 199.000 l 277.000 197.000 gr 1 setlinecap [1 3.000000] 3.000000 setdash % polyline n 269 199 m 289 199 l gs col-1 s gr [] 0 setdash 0 setlinecap n 277.000 241.000 m 269.000 239.000 l 277.000 237.000 gr 1 setlinecap [1 3.000000] 3.000000 setdash % polyline n 269 239 m 289 239 l gs col-1 s gr [] 0 setdash 0 setlinecap n 217.000 241.000 m 209.000 239.000 l 217.000 237.000 gr 1 setlinecap [1 3.000000] 3.000000 setdash % polyline n 209 239 m 229 239 l gs col-1 s gr [] 0 setdash 0 setlinecap n 162.000 241.000 m 154.000 239.000 l 162.000 237.000 gr 1 setlinecap [1 3.000000] 3.000000 setdash % polyline n 154 239 m 174 239 l gs col-1 s gr [] 0 setdash 0 setlinecap n 222.000 281.000 m 214.000 279.000 l 222.000 277.000 gr 1 setlinecap [1 3.000000] 3.000000 setdash % polyline n 214 279 m 234 279 l gs col-1 s gr [] 0 setdash 0 setlinecap n 277.000 281.000 m 269.000 279.000 l 277.000 277.000 gr

l gs 2 setlinejoin col-1 s

l gs 2 setlinejoin col-1 s

l gs 2 setlinejoin col-1 s

l gs 2 setlinejoin col-1 s

l gs 2 setlinejoin col-1 s

l gs 2 setlinejoin col-1 s

l gs 2 setlinejoin col-1 s

l gs 2 setlinejoin col-1 s

l gs 2 setlinejoin col-1 s

l gs 2 setlinejoin col-1 s

1 setlinecap [1 3.000000] 3.000000 setdash % polyline n 269 279 m 289 279 l gs col-1 s gr [] 0 setdash 0 setlinecap % polyline n 114 149 m 114 310 l gs col-1 s gr n 112.000 281.000 m 104.000 279.000 l 112.000 277.000 l gr 1 setlinecap [1 3.000000] 3.000000 setdash % polyline n 104 279 m 124 279 l gs col-1 s gr [] 0 setdash 0 setlinecap n 162.000 281.000 m 154.000 279.000 l 162.000 277.000 l gr 1 setlinecap [1 3.000000] 3.000000 setdash % polyline n 154 279 m 174 279 l gs col-1 s gr [] 0 setdash 0 setlinecap 1 setlinecap [1 3.000000] 3.000000 setdash % interpolated spline n 119 179 m 108.272 169.788 104.522 164.788 104 159 curveto 103.533 153.823 106.033 148.823 114 139 curveto gs col-1 s gr [] 0 setdash 0 setlinecap n 107.407 143.953 m 114.000 139.000 l 110.514 146.473 l gr 1 setlinecap [1 3.000000] 3.000000 setdash % interpolated spline n 284 179 m 273.272 169.788 269.522 164.788 269 159 curveto 268.533 153.823 271.033 148.823 279 139 curveto gs col-1 s gr [] 0 setdash 0 setlinecap n 272.407 143.953 m 279.000 139.000 l 275.514 146.473 l gr 1 setlinecap [1 3.000000] 3.000000 setdash % interpolated spline n 229 299 m 218.272 289.788 214.522 284.788 214 279 curveto 213.533 273.823 216.033 268.823 224 259 curveto gs col-1 s gr [] 0 setdash 0 setlinecap n 217.407 263.953 m 224.000 259.000 l 220.514 266.473 l gr 1 setlinecap [1 3.000000] 3.000000 setdash % interpolated spline n 227 260 m 216.272 250.788 212.522 245.788 212 240 curveto 211.533 234.823 214.033 229.823 222 220 curveto gs col-1 s gr [] 0 setdash 0 setlinecap n 215.407 224.953 m 222.000 220.000 l 218.514 227.473 l gr 1 setlinecap [1 3.000000] 3.000000 setdash % interpolated spline n 224 214 m 213.272 204.788 209.522 199.788 209 194 curveto 208.533 188.823 211.033 183.823 219 174 curveto gs col-1 s gr

gs 2 setlinejoin col-1 s

gs 2 setlinejoin col-1 s

gs 2 setlinejoin col-1 s

gs 2 setlinejoin col-1 s

gs 2 setlinejoin col-1 s

gs 2 setlinejoin col-1 s

[] 0 setdash 0 setlinecap n 212.407 178.953 m 219.000 174.000 l 215.514 181.473 l gr 1 setlinecap [1 3.000000] 3.000000 setdash % interpolated spline n 284 219 m 273.272 209.788 269.522 204.788 269 199 curveto 268.533 193.823 271.033 188.823 279 179 curveto gs col-1 s gr [] 0 setdash 0 setlinecap n 272.407 183.953 m 279.000 179.000 l 275.514 186.473 l gr 1 setlinecap [1 3.000000] 3.000000 setdash % interpolated spline n 284 259 m 273.272 249.788 269.522 244.788 269 239 curveto 268.533 233.823 271.033 228.823 279 219 curveto gs col-1 s gr [] 0 setdash 0 setlinecap n 272.407 223.953 m 279.000 219.000 l 275.514 226.473 l gr 1 setlinecap [1 3.000000] 3.000000 setdash % interpolated spline n 284 299 m 273.272 289.788 269.522 284.788 269 279 curveto 268.533 273.823 271.033 268.823 279 259 curveto gs col-1 s gr [] 0 setdash 0 setlinecap n 272.407 263.953 m 279.000 259.000 l 275.514 266.473 l gr 1 setlinecap [1 3.000000] 3.000000 setdash % interpolated spline n 174 179 m 163.272 169.788 159.522 164.788 159 159 curveto 158.533 153.823 161.033 148.823 169 139 curveto gs col-1 s gr [] 0 setdash 0 setlinecap n 162.407 143.953 m 169.000 139.000 l 165.514 146.473 l gr 1 setlinecap [1 3.000000] 3.000000 setdash % interpolated spline n 117 220 m 106.272 210.788 102.522 205.788 102 200 curveto 101.533 194.823 104.033 189.823 112 180 curveto gs col-1 s gr [] 0 setdash 0 setlinecap n 105.407 184.953 m 112.000 180.000 l 108.514 187.473 l gr 1 setlinecap [1 3.000000] 3.000000 setdash % interpolated spline n 172 216 m 161.272 206.788 157.522 201.788 157 196 curveto 156.533 190.823 159.033 185.823 167 176 curveto gs col-1 s gr [] 0 setdash 0 setlinecap n 160.407 180.953 m 167.000 176.000 l 163.514 183.473 l gr 1 setlinecap [1 3.000000] 3.000000 setdash % interpolated spline n 169 254 m

gs 2 setlinejoin col-1 s

gs 2 setlinejoin col-1 s

gs 2 setlinejoin col-1 s

gs 2 setlinejoin col-1 s

gs 2 setlinejoin col-1 s

gs 2 setlinejoin col-1 s

gs 2 setlinejoin col-1 s

158.272 244.788 154.522 239.788 154 234 curveto 153.533 228.823 156.033 223.823 164 214 curveto gs col-1 s gr [] 0 setdash 0 setlinecap n 157.407 218.953 m 164.000 214.000 l 160.514 221.473 l gs 2 setlinejoin gr 1 setlinecap [1 3.000000] 3.000000 setdash % interpolated spline n 169 294 m 158.272 284.788 154.522 279.788 154 274 curveto 153.533 268.823 156.033 263.823 164 254 curveto gs col-1 s gr [] 0 setdash 0 setlinecap n 157.407 258.953 m 164.000 254.000 l 160.514 261.473 l gs 2 setlinejoin gr 1 setlinecap [1 3.000000] 3.000000 setdash % interpolated spline n 119 259 m 108.272 249.788 104.522 244.788 104 239 curveto 103.533 233.823 106.033 228.823 114 219 curveto gs col-1 s gr [] 0 setdash 0 setlinecap n 107.407 223.953 m 114.000 219.000 l 110.514 226.473 l gs 2 setlinejoin gr 1 setlinecap [1 3.000000] 3.000000 setdash % interpolated spline n 122 300 m 111.272 290.788 107.522 285.788 107 280 curveto 106.533 274.823 109.033 269.823 117 260 curveto gs col-1 s gr [] 0 setdash 0 setlinecap n 110.407 264.953 m 117.000 260.000 l 113.514 267.473 l gs 2 setlinejoin gr 1 setlinecap [1 3.000000] 3.000000 setdash % interpolated spline n 229 179 m 218.272 169.788 214.522 164.788 214 159 curveto 213.533 153.823 216.033 148.823 224 139 curveto gs col-1 s gr [] 0 setdash 0 setlinecap n 217.407 143.953 m 224.000 139.000 l 220.514 146.473 l gs 2 setlinejoin gr $f2psend %%enddocument @endspecial 580 476 a ff(a)606 483 y fs(0)p fe(;)p fs(0)580 551 y ff(b)601 558 y fs(0)p fe(;)p fs(0)786 476 y ff(a)812 483 y fs(0)p fe(;)p fs(1)786 551 y ff(b)807 558 y fs(1)p fe(;)p fs(1)1199 551 y ff(b)1220 558 y fs(3)p fe(;)p fs(3)1199 476 y ff(a)1225 483 y fs(0)p fe(;)p fs(3)993 476 y ff(a)1019 483 y fs(0)p fe(;)p fs(2)993 551 y ff(b)1014 558 y fs(2)p fe(;)p fs(2)580 626 y ff(a)606 633 y fs(1)p fe(;)p fs(1)580 701 y ff(b)601 708 y fs(1)p fe(;)p fs(0)580 1001 y ff(b)601 1008 y fs(3)p fe(;)p fs(0)580 926 y ff(a)606 933 y fs(3)p fe(;)p fs(3)786 1001 y ff(b)807 1008 y fs(0)p fe(;)p fs(1)786 626 y ff(a)812 633 y fs(1)p fe(;)p fs(2)786 776 y ff(a)812 783 y fs(2)p fe(;)p fs(3)786 851 y ff(b)807 858 y fs(3)p fe(;)p fs(1)786 926 y ff(a)812 933 y fs(3)p fe(;)p fs(0)993 626 y ff(a)1019 633 y fs(1)p fe(;)p fs(3)993 701 y ff(b)1014 708 y fs(3)p fe(;)p fs(2)1199 701 y ff(b)1220 708 y fs(0)p fe(;)p fs(3)1199 626 y ff(a)1225 633 y fs(1)p

col-1 s

col-1 s

col-1 s

col-1 s

col-1 s

fe(;)p fs(0)993 776 y ff(a)1019 783 y fs(2)p fe(;)p fs(0)1199 776 y ff(a)1225 783 y fs(2)p fe(;)p fs(1)1199 851 y ff(b)1220 858 y fs(1)p fe(;)p fs(3)993 851 y ff(b)1014 858 y fs(0)p fe(;)p fs(2)993 1001 y ff(b)1014 1008 y fs(1)p fe(;)p fs(2)1199 1001 y ff(b)1220 1008 y fs(2)p fe(;)p fs(3)993 926 y ff(a)1019 933 y fs(3)p fe(;)p fs(1)1199 926 y ff(a)1225 933 y fs(3)p fe(;)p fs(2)580 776 y ff(a)606 783 y fs(2)p fe(;)p fs(2)580 851 y ff(b)601 858 y fs(2)p fe(;)p fs(0)786 701 y ff(b)807 708 y fs(2)p fe(;)p fs(1)75 1186 y fn(fig.)22 b fq(4.2)f(-)44 b fj(pr)n(o)n(duit)22 b(de)h(matric)n(es)f(de)h(cannon) e fq(\()p fm(n)p fq(=4\))8 b fj(:)22 b(alignement)f(initial)h(des)g (matric)n(es)h(et)75 1242 y(c)n(ommunic)n(ations)75 1573 y fk(cannon)g(:)h(\(ma,mb\))14 b ff(7!)i fk(c)75 1591 y fx(8)75 1628 y(>)75 1641 y(>)75 1653 y(>)75 1666 y(>)75 1678 y(>)75 1690 y(>)75 1703 y(>)75 1715 y(<)75 1790 y(>)75 1802 y(>)75 1815 y(>)75 1827 y(>)75 1840 y(>)75 1852 y(>)75 1865 y(>)75 1877 y(:)137 1623 y fk(ma)f fq(=)g fk(align1)7 b(::)g(a0)137 1679 y(mb)15 b fq(=)g fk(align2)7 b(::)g(b0)137 1736 y(a)15 b fq(=)g fk(a0)24 b(/&/)7 b(\(a)24 b fa(c)g fk(left\))137 1792 y(b)15 b fq(=)g fk(b0)24 b(/&/)7 b(\(b)24 b fa(c)g fk(up\))137 1849 y(p)15 b fq(=)g fk(prod)g fa(b)g fk(\(a)24 b(/&/)8 b(b\))137 1905 y(c)15 b fq(=)g fk(add)g fa(b)h fk(\(p)23 b(/&/)8 b(c)23 b fa(c)i fk(prev)o(\))100 1978 y(align1)49 b fq(=)h fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i)p ff(\024)p fk(n)6 b(&)i(0)p ff(\024)p fk(j)p fm(<)p fk(n)g(&)g(k)p fq(=)p fk(0\).\(i,\(i+j\))23 b(mod)g(n\))100 2034 y(align2)49 b fq(=)h fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p ff(\024)p fk(n)6 b(&)i(k)p fq(=)p fk(0\).\(\(i+j\))23 b(mod)g(n,j\))100 2090 y(left)97 b fq(=)50 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i)p fm(<)p fk(n)6 b(&)i(0)p fm(<)p fk(k)p fm(<)p fk(n\).\(i,\(j+1\))23 b(mod)g(n,k-1\))100 2147 y(up)145 b fq(=)50 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n)6 b(&)i(0)p fm(<)p fk(k)p fm(<)p fk(n\).\(\(i+1\))23 b(mod)g(n,j,k-1\))100 2203 y(prev)97 b fq(=)50 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n)6 b(&)i(0)p fm(<)p fk(k)p fm(<)p fk(n\).\(i,j,k-1\))100 2260 y(prod)97 b fq(=)50 b fm(\025)p fk(\(a)p fq(;)o fk(b\).\(a+b\))100 2316 y(add)121 b fq(=)50 b fk(id)10 b fq(#)g fm(\025)p fk(\(a)p fq(;)o fk(b\).\(a+b\))146 2486 y fq(nous)h(p)q(ouv)o(ons)h(l\022)-23 b(a)12 b(aussi,)g(trouv)o (er)f(des)h(programmes)d(\023)-21 b(equiv)m(alen)o(ts.)12 b(p)o(ar)f(exemple,)i(en)f(r)o(\023)-21 b(e)o(\023)g(ecriv)m(an)o(t)75 2542 y(les)16 b(fonctions)f(de)h(routages)e fk(left)h fq(et)g fk(up)g fq(de)g(la)h(mani)o(\022)-21 b(ere)15 b(suiv)m(an)o(te)8 b(:)p eop %%page: 56 58 56 57 bop 75 269 a fq(56)521 b fl(chapitre)16 b(4.)45 b(stra)l(t)1144 257 y(\023)1138 269 y(egies)16 b(de)f(transf)o(orma)l (tions)207 502 y fk(left)41 b fq(=)h fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(k)p fm(<)p fk(n\).\(\(i+1\))21 b(mod)i(n,j,k\))10 b ff(\016)421 558 y fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(j)p fm(<)p fk(n)c(&)i(0)p fm(<)p fk(k)p fm(<)p fk(n\).\(\(i-1\))23 b(mod)g(n,\(j+1\))g(mod)h (n,k-1\))344 615 y fq(=)42 b fk(g)10 b ff(\016)f fk(downleft)207 671 y(up)89 b fq(=)42 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(k)p fm(<)p fk(n\).\(\(i+1\))21 b(mod)i(n,j,k\))10 b ff(\016)421 728 y fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n)c(&)h(0)p

fm(<)p fk(k)p fm(<)p fk(n\).\(i,j,k-1\))344 784 y fq(=)42 b fk(g)10 b ff(\016)f fk(prev)146 906 y fq(la)18 b(bijection)i fk(h)f fq(=)g fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(k)p fm(<)p fk(n\).\(\(i+k\))i(mod)i(n,j,k\))p fq(,)18 b(obten)o(ue)h(\022)-23 b(a)18 b(partir)h(du)g(fac-)75 963 y(teur)13 b(comm)o(un)h fk(g)f fq(est)h(utilis)o(\023)-21 b(ee)14 b(p)q(our)g(e\013ectuer)g(un)g(c)o(hangemen)o(t)f(de)h(base)g (et)f(obtenir)h(le)h(programme)75 1019 y(suiv)m(an)o(t,)g(selon)h(le)g (m)o(^)-21 b(eme)15 b(pro)q(c)o(\023)-21 b(ed)o(\023)g(e)6 b(:)75 1137 y fk(cannon2)23 b(:)h(\(ma,mb\))14 b ff(7!)h fk(c)75 1155 y fx(8)75 1192 y(>)75 1205 y(>)75 1217 y(>)75 1230 y(>)75 1242 y(>)75 1255 y(>)75 1267 y(>)75 1280 y(<)75 1354 y(>)75 1367 y(>)75 1379 y(>)75 1392 y(>)75 1404 y(>)75 1417 y(>)75 1429 y(>)75 1442 y(:)137 1187 y fk(ma)g fq(=)g fk(align1)7 b(::)g(a0)137 1244 y(mb)15 b fq(=)g fk(align2)7 b(::)g(b0)137 1300 y(a)15 b fq(=)g fk(a0)24 b(/&/)7 b(\(a)24 b fa(c)g fk(downleft)o(\))137 1357 y(b)15 b fq(=)g fk(b0)24 b(/&/)7 b(\(b)24 b fa(c)g fk(prev\))137 1413 y(p)15 b fq(=)g fk(prod)g fa(b)g fk(\(a)24 b(/&/)8 b(b\))137 1469 y(c)15 b fq(=)g fk(add)g fa(b)h fk(\(p)23 b(/&/)8 b(c)23 b fa(c)i fk(prev)o(\))100 1542 y(downleft)49 b fq(=)h fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(j)p fm(<)p fk(n)6 b(&)i(0)p fm(<)p fk(k)p fm(<)p fk(n\).\(\(i-1\))23 b(mod)g(n,\(j+1\))g(mod)h(n,k-1\))100 1598 y(prev)145 b fq(=)50 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n)6 b(&)i(0)p fm(<)p fk(k)p fm(<)p fk(n\).\(i,j,k-1\))146 1693 y fq(dans)19 b(ce)g(nouv)o(eau)h(programme,)e(les)i(co)q(e\016cien)o(ts)g(de)g(la)g (matrice)f fm(a)h fq(son)o(t)e(d)o(\023)-21 b(eplac)o(\023)g(es)19 b(succesi-)75 1749 y(v)o(emen)o(t)i(sur)g(la)h(ligne)h(suiv)m(an)o(te)f (et)f(la)h(colonne)g(pr)o(\023)-21 b(ec)o(\023)g(eden)o(te,)20 b(du)i(plan)h(suiv)m(an)o(t,)e(tandis)h(que)g(les)75 1806 y(co)q(e\016cien)o(ts)16 b(de)g fm(b)i fq(son)o(t)c(simplemen)o(t) i(d)o(\023)-21 b(eplac)o(\023)g(es)15 b(sur)g(le)h(plan)g(suiv)m(an)o (t.)75 1979 y ft(4.3)66 b(strat)o(\023)-32 b(egie)22 b(2)11 b(:)22 b(in)n(tro)r(duction)j(d'une)e(di\013usion)146 2091 y fq(le)12 b(programme)e(du)j(pro)q(duit)f(matrice-v)o(ecteur)g fk(matvect1)p fq(,)e(est)i(un)g(algorithme)g(que)g(nous)g(a)o(v)o(ons) 75 2147 y(quali\014)o(\023)-21 b(e)16 b(de)f(systolique)h(car)f(ses)g (routages)f(repr)o(\023)-21 b(esen)o(ten)o(t)14 b(des)h(comm)o (unications)h(p)q(oin)o(t-\022)-23 b(a-p)q(oin)o(t.)15 b(en)75 2204 y(supp)q(osan)o(t)f(que)g(l'on)g(disp)q(ose)h(d'une)f (primitiv)o(e)h(de)f(di\013usion,)h(caract)o(\023)-21 b(eristique)13 b(du)i(mo)q(d)o(\022)-21 b(ele)14 b(de)g(pro-)75 2260 y(grammation)d(data-parall)o(\022)-21 b(ele,)12 b(ces)h(comm)o(unications)g(p)q(euv)o(en)o(t)e(^)-21 b(etre)12 b(remplac)o(\023)-21 b(ees)12 b(par)g(cet)g(op)o(\023)-21 b(erateur)75 2316 y(de)16 b(di\013usion.)g(cela)g(signi\014e)h(qu'une)e (d)o(\023)-21 b(e\014nition)17 b(r)o(\023)-21 b(ecursiv)o(e)15 b(de)h(c)o(hamp)f(de)h(donn)o(\023)-21 b(ees)15 b(\(celle)i(de)e fk(b)h fq(sur)75 2373 y(l'exemple\))k(est)f(transform)o(\023)-21 b(ee)18 b(en)h(une)h(d)o(\023)-21 b(e\014nition)20 b(simple,)g(faisan)o (t)f(in)o(terv)o(enir)h(une)g(op)o(\023)-21 b(eration)18 b(de)75 2429 y(routage,)e(elle-m)o(^)-21 b(eme)17 b(d)o(\023)-21 b(e\014nie)18 b(r)o(\023)-21 b(ecursiv)o(emen)o(t.)16 b(une)h(telle)i(transformation)c(rep)q(ose)i(sur)g(le)h(r)o(\023)-21 b(esultat)75 2486 y(suiv)m(an)o(t,)15 b(qui)h(d)o(\023)-21 b(ecrit)15 b(une)h(autre)f(strat)o(\023)-21 b(egie)14 b(de)h(transformation)f(de)i(programmes)6 b(:)p eop %%page: 57 59

57 58 bop 75 269 a fl(4.3.)29 b(stra)l(t)336 257 y(\023)330 269 y(egie)16 b(2)7 b(:)15 b(intr)o(oduction)h(d'une)f(diffusion)480 b fq(57)75 397 y fo(th)o(\023)-25 b(eor)o(\022)g(eme)17 b(2)49 b fj(soit)16 b fk(g)g fj(une)h(fonction)f(d)o(\023)-22 b(e\014nie)15 b(r)o(\023)-22 b(e)n(cursivement)16 b(p)n(ar)h fk(g)24 b(=)f(i)10 b fq(#)g fk(\(g)24 b ff(\016)f fk(s\))p fj(,)17 b(o)q(\022)-24 b(u)17 b fk(i)f fj(est)75 453 y(l'identit)o(\023)-22 b(e)20 b(d)o(\023)-22 b(e\014nie)20 b(sur)h(un)g(sous-domaine,)g(et)f fk(s)h fj(est)f(une)h(fonction.)f(l') o(\023)-22 b(e)n(quation)20 b fk(y)h fj(=)g fk(x)16 b fa(c)h fk(g)j fj(se)75 510 y(r)o(\023)-22 b(e)o(\023)g(e)n(crit)16 b(alors)g(en)7 b(:)33 b fk(y)24 b(=)f(x)16 b fa(c)h fk(i)f(/&/)8 b(y)16 b fa(c)g fk(s)75 604 y fj(pr)n(euve.)f fq(p)o(ar)f(application)j (des)f(r)o(\022)-21 b(egles)14 b(de)i(ra\016nemen)o(t,)e(nous)i(a)o(v)o (ons)6 b(:)740 711 y fk(y)15 b fq(=)g fk(x)g fa(c)h fk(g)623 752 y fw(def)q(:)616 779 y ff(\000)-7 b(!)51 b fk(y)15 b fq(=)g fk(x)g fa(c)h fk(\(i)9 b fq(#)h fk(\(g)g ff(\016)g fk(s\)\))623 822 y fg(\(9)p fw(a)p fg(\))616 850 y ff(\000)-7 b(!)51 b fk(y)15 b fq(=)g fk(x)g fa(c)h fk(i)f(/&/)7 b(x)15 b fa(c)h fk(\(g)9 b ff(\016)h fk(s\))623 893 y fg(\(5)p fw(a)p fg(\))616 922 y ff(\000)-7 b(!)51 b fk(y)15 b fq(=)g fk(x)g fa(c)h fk(i)f(/&/)7 b(\(x)24 b fa(c)g fk(g\))15 b fa(c)g fk(s)75 1009 y fq(en)g(r)o(\023)-21 b(eit)o(\023)g(eran)o(t)13 b(le)j(calcul)9 b(:)421 1105 y fk(y)15 b fq(=)g fk(x)g fa(c)h fk(i)f(/&/)7 b(\(x)24 b fa(c)g fk(\(i)10 b fq(#)g fk(\(g)g ff(\016)g fk(s\)\))o(\))15 b fa(c)h fk(s)298 1161 y ff(\000)-7 b(!)50 b fk(y)15 b fq(=)g fk(x)g fa(c)h fk(i)f(/&/)7 b(\(x)24 b fa(c)g fk(i\))15 b fa(c)h fk(s)f(/&/)7 b(\(x)24 b fa(c)g fk(g)g ff(\016)f fk(s\))15 b fa(c)h fk(s)298 1218 y ff(\000)-7 b(!)50 b fk(y)15 b fq(=)g fk(x)g fa(c)h fk(i)f(/&/)7 b(\(x)24 b fa(c)g fk(i\))15 b fa(c)h fk(s)f(/&/)7 b(\(\(x)24 b fa(c)g fk(i\))f fa(c)i fk(s\))15 b fa(c)g fk(s)g(/&/)8 b fq(..)75 1404 y(d)o(\023)-21 b(eplions)15 b(main)o(tenan)o(t)g(la)h (d)o(\023)-21 b(e\014nition)16 b fk(y')24 b(=)f(x)15 b fa(c)h fk(i)f(/&/)7 b(y')15 b fa(c)h fk(s)7 b fq(:)409 1509 y fk(y')15 b fq(=)g fk(x)g fa(c)h fk(i)f(/&/)7 b(y')15 b fa(c)h fk(s)296 1550 y fw(def)286 1577 y ff(\000)-7 b(!)50 b fk(y')15 b fq(=)g fk(x)g fa(c)h fk(i)f(/&/)7 b(\(x)24 b fa(c)g fk(i\))15 b fa(c)h fk(s)f(/&/)7 b(\(y')24 b fa(c)g fk(s\))15 b fa(c)g fk(s)296 1618 y fw(def)286 1645 y ff(\000)-7 b(!)50 b fk(y')15 b fq(=)g fk(x)g fa(c)h fk(i)f(/&/)7 b(\(x)24 b fa(c)g fk(i\))15 b fa(c)h fk(s)f(/&/)7 b(\(\(x)24 b fa(c)g fk(i\))f fa(c)i fk(s)o(\))15 b fa(c)h fk(s)f(/&/)8 b fq(..)75 1806 y(p)o(our)14 b(toute)g(\023)-21 b(etap)q(e)14 b fm(n)i fq(de)f(la)g(r)o(\023)-21 b(ecurrence,)15 b(les)h fm(n)f fq(premiers)h(termes)e(des)i(d)o(\023)-21 b(e\014nitions)15 b(de)h fk(y)f fq(et)g fk(y')f fq(son)o(t)74 1863 y(\023)-21 b(egaux,)14 b(donc)h fk(y)g fq(=)h fk(y')p fq(.)e(finalemen)o(t)i(nous)g(a)o(v)o(ons)6 b(:)15 b fk(y)g fq(=)h fk(x)f fa(c)g fk(g)g ff(\000)-7 b(!)15 b fk(y)h fq(=)f fk(\(x)24 b fa(c)g fk(i\))f(/&/)8 b(\(y)24 b fa(c)g fk(s\))75 1919 y fa(\003)146 2034 y fq(les)16 b(d)o(\023)-21 b(e\014nitions)16 b(des)g(c)o(hamps)f(de)h(donn)o(\023) -21 b(ees)16 b fk(a)f fq(et)g fk(b)h fq(dans)f(le)i(programme)d fk(matvect2)h fq(son)o(t)f(sem-)75 2091 y(blables)22 b(\022)-23 b(a)20 b(l'expression)i(ra\016n)o(\023)-21 b(ee)19 b(du)i(th)o(\023)-21 b(eor)o(\022)g(eme)19 b(2.)g(in)o(tuitiv)o (emen)o(t,)i(on)g(constate)e(que)i(le)h(c)o(hamp)75 2147 y fk(a)p fq(,)17 b(par)h(exemple,)h(est)e(constitu)o(\023)-21

b(e)18 b(des)g(v)m(aleurs)h(de)f fk(a0)f fq(qui)i(on)o(t)d(\023)-21 b(et)o(\023)g(e)16 b(successiv)o(emen)o(t)j(recopi)o(\023)-21 b(ees)18 b(sur)75 2204 y(c)o(hacun)k(des)g(plans)g fm(k)g fq(de)g fk(a)p fq(.)e(on)i(d)o(\023)-21 b(eduit)22 b(facilemen)o(t)g (de)g(cette)f(observ)m(ation,)g(une)h(fonction)g(qui)75 2260 y(exprime)i(qu'une)f(v)m(aleur)i(plac)o(\023)-21 b(ee)23 b(au)g(p)q(oin)o(t)g(\()p fm(i;)8 b(j;)g(k)q fq(\))20 b(du)k(c)o(hamp)f fk(a)g fq(pro)o(vien)o(t)g(du)g(p)q(oin)o(t) h(\()p fm(i;)8 b(j;)g fq(0\))75 2316 y(du)19 b(c)o(hamp)g fk(a0)p fq(.)f(nous)g(\023)-21 b(ecriv)o(ons)18 b(donc)h(en)g fn(pei)f fq(l')o(\023)-21 b(equation)19 b fk(a)f fq(=)h fk(a0)c fa(c)h fk(spreada)o fq(,)i(o)q(\022)-24 b(u)19 b fk(spreada)e fq(=)75 2373 y fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j,k)p fm(<)p fk(n\).\(i,j,0\))g fq(est)k(l'op)o(\023)-21 b(eration)20 b(de)i(routage)e(traduisan)o(t)g (cette)h(di\013usion.)75 2429 y(apr)o(\022)-21 b(es)16 b(a)o(v)o(oir)h(d)o(\023)-21 b(e\014ni)18 b fk(b)f fq(de)g(mani)o(\022) -21 b(ere)17 b(similaire,)i(nous)f(trouv)o(ons)e(le)i(programme)e(suiv) m(an)o(t,)i(utilisan)o(t)75 2486 y(uniquemen)o(t)e(des)g(routages)e(de) i(t)o(yp)q(e)f(di\013usion.)p eop %%page: 58 60 58 59 bop 75 269 a fq(58)521 b fl(chapitre)16 b(4.)45 b(stra)l(t)1144 257 y(\023)1138 269 y(egies)16 b(de)f(transf)o(orma)l (tions)75 397 y fk(matvect3)23 b(:)g(\(m,v\))15 b ff(7!)h fk(p)75 412 y fx(8)75 449 y(>)75 461 y(>)75 474 y(>)75 486 y(>)75 499 y(>)75 511 y(<)75 586 y(>)75 598 y(>)75 611 y(>)75 623 y(>)75 636 y(>)75 648 y(:)137 447 y fk(m)f fq(=)g fk(aligna)7 b(::)g(a0)137 503 y(v)15 b fq(=)g fk(alignb)7 b(::)g(b0)137 560 y(a)15 b fq(=)g fk(a0)g fa(c)h fk(spreada)137 616 y(b)f fq(=)g fk(b0)g fa(c)h fk(spreadb)137 673 y(p)f fq(=)g fk(prod)g fa(b)g fk(\(\(a/&/)8 b(b\))23 b fa(c)h fk(diag'\))100 733 y(spreada)14 b fq(=)i fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j,k)p fm(<)p fk(n\).\(i,j,)o(0\))100 790 y(spreadb)e fq(=)i fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j,k)p fm(<)p fk(n\).\(\(i+k)o(\))21 b(mod)j(n,j,0\))75 876 y fq(il)17 b(s'agit)f(main)o(tenan)o(t)g(de)h(v)o(\023)-21 b(eri\014er)16 b(que)h(ce)f(programme)f(est)i(ra\016n)o(\023)-21 b(e)15 b(par)h(le)h(pr)o(\023)-21 b(ec)o(\023)g(eden)o(t.)15 b(p)o(our)g(cela,)75 933 y(nous)g(appliquons)i(le)f(th)o(\023)-21 b(eor)o(\022)g(eme)13 b(2.)75 1048 y fj(pr)n(euve.)j fq(d'apr)o(\022)-21 b(es)14 b(l')o(\023)-21 b(enonc)o(\023)g(e)15 b(du)h(th)o(\023)-21 b(eor)o(\022)g(eme)14 b(2,)h(il)i(faut)f(mon)o (trer)f(qu'on)g(p)q(eut)i(r)o(\023)-21 b(e)o(\023)g(ecrire)15 b(les)h(fonctions)75 1104 y fk(spreada)f fq(et)g fk(spreadb)g fq(sous)h(une)g(forme)g(r)o(\023)-21 b(ecursiv)o(e)15 b(iden)o(tique)j(\022)-23 b(a)15 b(la)i(d)o(\023)-21 b(e\014nition)16 b(de)g fk(g)g fq(dans)g(le)h(th)o(\023)-21 b(eo-)75 1160 y(r)o(\022)g(eme.)14 b(en)h(e\013et,)g fk(spreada)f fq(et)h fk(spreadb)f fq(p)q(euv)o(en)o(t)i(se)f(r)o(\023) -21 b(e)o(\023)g(ecrire)14 b(de)i(la)f(mani)o(\022)-21 b(ere)15 b(suiv)m(an)o(te)8 b(:)170 1262 y fk(spreada)49 b fq(=)58 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j,k)p fm(<)p fk(n\).\(i,j,0\))387 1319 y fq(=)g fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(k)p fq(=)p fk(0\))23 b fq(#)10 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n)c(&)i(0)p fm(<)p fk(k)p fm(<)p fk(n\).\(i,j,0\))387 1375 y fq(=)58 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(k)p fq(=)p fk(0\))23 b fq(#)10 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p

fk(i,j,k)p fm(<)p fk(n\).\(i,j,0\))397 1432 y ff(\016)60 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n)6 b(&)i(0)p fm(<)p fk(k)p fm(<)p fk(n\).\(i,j,k-1\))387 1488 y fq(=)58 b fk(i)10 b fq(#)g fk(spreada)f ff(\016)h fk(prev)170 1555 y(spreadb)49 b fq(=)58 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j,k)p fm(<)p fk(n\).\(\(i+k\))21 b(mod)i(n,j,0\))387 1611 y fq(=)58 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(k)p fq(=)p fk(0\).\(\(i+k\))21 b(mod)i(n,j,0\))i fq(#)480 1668 y fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n)6 b(&)i(0)p fm(<)p fk(k)p fm(<)p fk(n\).\(\(i+k\))23 b(mod)g(n,j,0\))387 1724 y fq(=)58 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(k)p fq(=)p fk(0\))23 b fq(#)480 1781 y fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j,k)p fm(<)p fk(n\).\(\(i+k\))e(mod)i(n,j,0\))397 1837 y ff(\016)60 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n)6 b(&)i(0)p fm(<)p fk(k)p fm(<)p fk(n\).\(\(i+1\))23 b(mod)g(n,j,k-1\))387 1893 y fq(=)58 b fk(i)10 b fq(#)g fk(spreadb)f ff(\016)h fk(up)g ff(\016)g fk(prev)75 1945 y fa(\003)75 2155 y ft(4.4)66 b(repr)o(\023)-32 b(esen)n(tation)22 b(du)h(probl)o(\022)-32 b(eme)23 b(en)f(deux)i(dimensions)146 2260 y fq(nous)17 b(p)q(ouv)o(ons)h(constater,)f(d'apr)o(\022)-21 b(es)17 b(la)h(d)o(\023)-21 b(e\014nition)18 b(du)h(c)o(hamp)e fk(p)h fq(du)g(pr)o(\023)-21 b(ec)o(\023)g(eden)o(t)17 b(programme,)75 2316 y(que)k(ses)g(v)m(aleurs)h(son)o(t)e(au)g(nom)o (bre)h(de)g fm(n)834 2300 y fg(2)853 2316 y fq(,)f(car)h(les)g(pro)q (duits)h(ne)f(s'e\013ectuen)o(t)f(que)i(sur)e(le)i(plan)75 2373 y(diagonal)17 b(du)g(cub)q(e.)g(on)g(p)q(eut)g(donc)g(souhaiter)f fj(\()-9 b(\()q fq(compacter)p fj(\))g(\))16 b fq(les)h(v)m(aleurs)g (plac)o(\023)-21 b(ees)17 b(par)f(ce)h(c)o(hamp)75 2429 y(dans)k(un)g(espace)g(carr)o(\023)-21 b(e)19 b(\022)-23 b(a)21 b(deux)g(dimensions,)h(par)f(exemple,)g(comme)g(le)g(mon)o(tre)f (la)h(\014gure)g(4.3.)75 2486 y(ce)d(compactage)f(illustre)i(une)f (application)i(de)e(l')o(\023)-21 b(equiv)m(alence)19 b(faible)9 b(:)18 b(nous)f(ne)i(nous)e(in)o(t)o(\023)-21 b(eressons)75 2542 y(plus)22 b(\022)-23 b(a)21 b(tous)g(les)h(p)q(oin)o (ts)g(de)f(notre)g(domaine)h(de)g(r)o(\023)-21 b(ef)o(\023)g(erence,)20 b(mais)h(seulemen)o(t)h(au)f(domaine)h(des)p eop %%page: 59 61 59 60 bop 75 269 a fl(4.4.)29 b(repr)310 257 y(\023)304 269 y(esent)l(a)l(tion)17 b(du)e(pr)o(obl)867 257 y(\022)861 269 y(eme)h(en)f(deux)g(dimensions)298 b fq(59)75 397 y(v)m(aleurs.)17 b(nous)g(pro)q(c)o(\023)-21 b(edons)16 b(en)h(deux)g(\023)-21 b(etap)q(es)16 b(p)q(our)h(mon)o(trer)e(la)i (relation)h(en)o(tre)e(le)i(programme)d(en)75 453 y(deux)k(dimensions)g (et)f(celui)i(en)e(trois)g(dimensions)9 b(:)18 b(d'ab)q(ord)f(nous)h (transformons)f(le)i(programme)75 510 y fk(matvect3')h fq(a\014n)h(que)g(les)h(v)m(aleurs)g(de)g(tous)e(ses)h(c)o(hamps)g (soien)o(t)g(plac)o(\023)-21 b(ees)22 b(sur)f(le)g(premier)h(plan.)75 566 y(ensuite)h(nous)f(mon)o(trons)f(que)h(ce)g(nouv)o(eau)g(programme) f(est)h(un)g(ra\016nemen)o(t)f(du)i(programme)75 623 y(don)o(t)15 b(les)h(c)o(hamps)f(appartiennen)o(t)h(\022)-23 b(a)15 b fe(z)772 606 y fg(2)787 623 y fq(.)75 751 y fw(4.4.1)55 b(regroup)r(emen)n(t)16 b(des)j(v)m(aleurs)e(sur)i(le)f (premier)e(plan)75 1574 y @beginspecial @setspecial %%begindocument: transf2.pstex /$f2psdict 200 dict def $f2psdict begin $f2psdict /mtrx matrix put

/l {lineto} bind def /m {moveto} bind def /s {stroke} bind def /n {newpath} bind def /gs {gsave} bind def /gr {grestore} bind def /clp {closepath} bind def /graycol {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul setrgbcolor} bind def /col-1 {} def /col0 {0 0 0 setrgbcolor} bind def /col1 {0 0 1 setrgbcolor} bind def /col2 {0 1 0 setrgbcolor} bind def /col3 {0 1 1 setrgbcolor} bind def /col4 {1 0 0 setrgbcolor} bind def /col5 {1 0 1 setrgbcolor} bind def /col6 {1 1 0 setrgbcolor} bind def /col7 {1 1 1 setrgbcolor} bind def /col8 {.68 .85 .9 setrgbcolor} bind def /col9 {0 .39 0 setrgbcolor} bind def /col10 {.65 .17 .17 setrgbcolor} bind def /col11 {1 .51 0 setrgbcolor} bind def /col12 {.63 .13 .94 setrgbcolor} bind def /col13 {1 .75 .8 setrgbcolor} bind def /col14 {.7 .13 .13 setrgbcolor} bind def /col15 {1 .84 0 setrgbcolor} bind def end /$f2psbegin {$f2psdict begin /$f2psenteredstate save def} def /$f2psend {$f2psenteredstate restore end} def $f2psbegin 0 setlinecap 0 setlinejoin -103.0 319.0 translate 0.900 -0.900 scale 0.500 setlinewidth % polyline n 319 159 m 369 204 l 369 174 l 354 159 l 319 159 l gs col7 0.95 graycol fill gr gs col7 s gr [4.000000] 0 setdash % polyline n 274 174 m 349 244 l 309 244 l 274 209 l 274 174 l gs col7 0.95 graycol fill gr gs col7 s gr [] 0 setdash n 272.000 182.000 m 274.000 174.000 l 276.000 182.000 l gs 2 setlinejoin col7 s gr [4.000000] 0 setdash % polyline n 194 249 m 229 284 l 204 284 l 194 274 l 194 249 l gs col7 0.95 graycol fill gr gs col7 s gr [] 0 setdash n 192.000 257.000 m 194.000 249.000 l 196.000 257.000 l gs 2 setlinejoin col7 s gr % polyline n 139 239 m 209 304 l 209 324 l 189 324 l 114 254 l 114 239 l 139 239 l gs col7 0.95 graycol fill gr gs col7 s gr [4.000000] 0 setdash % polyline n 214 199 m 289 269 l 289 229 l 259 199 l 214 199 l gs col7 0.95 graycol fill gr gs col7 s gr [] 0 setdash n 222.000 201.000 m 214.000 199.000 l 222.000 197.000 l gs 2 setlinejoin col7 s

gr % polyline n 209 324 m 369 244 l gs col-1 s gr % polyline n 114 239 m 274 159 l gs col-1 s gr % polyline n 369 329 m 369 354 l gs col-1 s gr n 371.000 346.000 m 369.000 354.000 l 367.000 346.000 l gs 2 setlinejoin col-1 s gr % polyline n 369 329 m 399 309 l gs col-1 s gr n 391.234 311.774 m 399.000 309.000 l 393.453 315.102 l gs 2 setlinejoin col-1 s gr % polyline n 369 329 m 404 329 l gs col-1 s gr n 396.000 327.000 m 404.000 329.000 l 396.000 331.000 l gs 2 setlinejoin col-1 s gr % polyline n 209 324 m 209 239 l 114 239 l 114 324 l clp gs col-1 s gr n 369 329 m 369 329 l gs col-1 s gr % polyline n 289 284 m 289 199 l 194 199 l 194 284 l clp gs col-1 s gr % polyline n 544 284 m 544 179 l 429 179 l 429 284 l clp gs col-1 s gr % polyline n 274 199 m 274 159 l 369 159 l 369 244 l 289 244 l gs col-1 s gr $f2psend %%enddocument @endspecial 1106 1537 a ff(j)-132 b(i)1050 1424 y(k)1425 1124 y fh(a)1447 1130 y fg(1)p fw(;)p fg(1)1492 1124 y fh(b)1510 1130 y fg(1)1275 1124 y fh(a)1297 1130 y fg(1)p fw(;)p fg(0)1342 1124 y fh(b)1360 1130 y fg(0)1556 1124 y fh(a)1578 1130 y fg(1)p fw(;)p fg(2)1623 1124 y fh(b)1641 1130 y fg(2)1425 1012 y fh(a)1447 1018 y fg(0)p fw(;)p fg(1)1492 1012 y fh(b)1510 1018 y fg(1)1556 1012 y fh(a)1578 1018 y fg(0)p fw(;)p fg(2)1623 1012 y fh(b)1641 1018 y fg(2)1275 1237 y fh(a)1297 1243 y fg(2)p fw(;)p fg(0)1342 1237 y fh(b)1360 1243 y fg(0)1425 1237 y fh(a)1447 1243 y fg(2)p fw(;)p fg(1)1492 1237 y fh(b)1510 1243 y fg(1)1556 1237 y fh(a)1578 1243 y fg(2)p fw(;)p fg(2)1623 1237 y fh(b)1641 1243 y fg(2)1275 1012 y fh(a)1297 1018 y fg(0)p fw(;)p fg(0)1342 1012 y fh(b)1360 1018 y fg(0)94 1199 y fh(a)116 1205 y fg(0)p fw(;)p fg(0)161 1199 y fh(b)179 1205 y fg(0)919 900 y fh(a)941 906 y fg(0)p fw(;)p fg(2)986 900 y fh(b)1004 906 y fg(2)394 1274 y fh(a)416 1280 y fg(2)p fw(;)p fg(0)461 1274 y fh(b)479 1280 y fg(0)319 1406 y fh(a)341 1412 y fg(2)p fw(;)p fg(2)386 1406 y fh(b)404 1412 y fg(2)694 1012 y fh(a)716 1018 y fg(1)p fw(;)p fg(0)761 1012 y fh(b)779 1018 y fg(0)806 1124 y fh(a)828 1130 y fg(2)p fw(;)p fg(1)873 1124 y fh(b)891 1130 y fg(1)506 1050 y fh(a)528 1056 y fg(0)p fw(;)p fg(1)573 1050 y fh(b)591 1056 y fg(1)206 1293 y fh(a)228 1299 y fg(1)p fw(;)p fg(1)273 1293 y fh(b)291 1299 y fg(1)619 1143 y fh(a)641 1149 y fg(1)p fw(;)p fg(2)686 1143 y fh(b)704 1149 y fg(2)335 1672 y fn(fig.)15 b fq(4.3)f(-)31 b fj(comp)n(actage)16 b(des)g(champs)h fk(a)f fj(et)g fk(b)g fj(dans)g(un)g(c)n(arr)o(\023) -22 b(e)16 b(de)h fe(z)1571 1656 y fg(2)146 1780 y fq(p)o(our)j(mettre) g(en)g(\023)-21 b(evidence)21 b(le)h(placemen)o(t)f(des)g(v)m(aleurs)h (sur)f(une)g(partie)g(seulemen)o(t)g(du)h(do-)75 1837

y(maine)d(de)g(r)o(\023)-21 b(ef)o(\023)g(erence,)17 b(nous)g(\023)-21 b(ecriv)o(ons)18 b(un)h(programme)e(plus)i(abstrait,) f fk(mavect3')p fq(,)f(don)o(t)h(les)h(rou-)75 1893 y(tages)d(sur)h (les)g(c)o(hamps)g fk(a)p fq(,)f fk(b)h fq(prennen)o(t)g(en)g(compte)g (le)g(placemen)o(t)h(des)f(v)m(aleurs)g(restrein)o(t)g(au)g(plan)75 1949 y fm(i)12 b fq(=)h(\()p fm(j)f ff(\000)f fm(k)q fq(\))k fm(mod)f(n)p fq(.)i(ce)f(programme)f(est)h(le)h(suiv)m(an)o(t)8 b(:)75 2063 y fk(matvect3')23 b(:)g(\(m,v\))15 b ff(7!)g fk(p)75 2078 y fx(8)75 2115 y(>)75 2128 y(>)75 2140 y(>)75 2153 y(>)75 2165 y(>)75 2178 y(<)75 2252 y(>)75 2265 y(>)75 2277 y(>)75 2290 y(>)75 2302 y(>)75 2315 y(:)137 2113 y fk(m)g fq(=)g fk(aligna)7 b(::)g(a0)137 2170 y(v)15 b fq(=)g fk(alignb)7 b(::)g(b0)137 2226 y(a')15 b fq(=)g fk(a0)g fa(c)h fk(spreada)532 2210 y fx(0)137 2283 y fk(b')f fq(=)g fk(b0)g fa(c)h fk(spreadb)532 2266 y fx(0)137 2339 y fk(p)f fq(=)g fk(prod)g fa(b)g fk(\(a'/&/)8 b(b'\))100 2400 y(spreada)268 2383 y fx(0)294 2400 y fq(=)15 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j,k)p fm(<)p fk(n)6 b(&)i(i)p fq(=)p fk(\(j-k\))23 b(mod)h(n\).\(i,j,0\))100 2456 y(spreadb)268 2440 y fx(0)294 2456 y fq(=)15 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j,k)p fm(<)p fk(n)6 b(&)i(i)p fq(=)p fk(\(j-k\))23 b(mod)h(n\).\(j,j,0\))146 2542 y fq(le)18 b(ra\016nemen)o(t)g(du)g(programme)f(pr)o(\023)-21 b(ec)o(\023)g(eden)o(t)16 b(est)i(obten)o(u)g(en)g(r)o(\023)-21 b(e)o(\023)g(ecriv)m(an)o(t)17 b(les)g(\023)-21 b(equations)18 b(com-)p eop %%page: 60 62 60 61 bop 75 269 a fq(60)521 b fl(chapitre)16 b(4.)45 b(stra)l(t)1144 257 y(\023)1138 269 y(egies)16 b(de)f(transf)o(orma)l (tions)75 397 y fq(p)q(ortan)o(t)f(les)i(routages)7 b(:)281 499 y fk(a')15 b fq(=)g fk(a0)g fa(c)h fk(spreada)676 482 y fx(0)170 542 y fg(\(5)p fw(a)p fg(\))178 570 y ff(!)58 b fk(a')15 b fq(=)g fk(\(a0)24 b fa(c)g fk(spreada)o(\))15 b fa(c)g fk(diag)901 554 y fx(0)281 627 y fq(car)g fk(spreada)9 b ff(\016)h fk(diag)663 610 y fx(0)689 627 y fq(=)15 b fk(spreada)907 610 y fx(0)281 707 y fk(b')g fq(=)g fk(b0)g fa(c)h fk(spreadb)676 690 y fx(0)170 750 y fg(\(5)p fw(a)p fg(\))178 778 y ff(!)58 b fk(b')15 b fq(=)g fk(\(b0)24 b fa(c)g fk(spreadb)o(\))15 b fa(c)g fk(diag)901 762 y fx(0)281 835 y fq(car)g fk(spreadb)9 b ff(\016)h fk(diag)663 818 y fx(0)689 835 y fq(=)15 b fk(spreadb)907 818 y fx(0)146 914 y fq(en)f(renomman)o(t)f(les)i(expressions)g fk(a0)g fa(c)g fk(spreada)e fq(et)h fk(b0)h fa(c)h fk(spreadb)o fq(,)d(resp)q(ectiv)o(emen)o(t)i fk(a)f fq(et)g fk(b)p fq(,)75 970 y(nous)h(obtenons)g(p)q(our)h(l')o(\023)-21 b(equation)15 b(du)g(c)o(hamp)h fk(p)7 b fq(:)277 1072 y fk(p)15 b fq(=)h fk(prod)f fa(b)g fk(\(a)24 b fa(c)g fk(diag)755 1055 y fx(0)790 1072 y fk(/&/)7 b(b)24 b fa(c)g fk(diag)1072 1055 y fx(0)1083 1072 y fk(\))170 1115 y fg(\(8)p fw(b)p fg(\))176 1143 y ff(!)56 b fk(p)15 b fq(=)h fk(prod)f fa(b)g fk(\(\(a)23 b(/&/)8 b(b\))24 b fa(c)g fk(diag)930 1127 y fx(0)941 1143 y fk(\))277 1200 y fq(car)15 b fm(dom)p fq(\()p fk(diag)553 1183 y fx(0)564 1200 y fq(\))d ff(\022)h fm(dom)p fq(\()p fm(\033)772 1207 y fr(a)789 1200 y fq(\))c ff(\\)i fm(dom)p fq(\()p fm(\033)987 1207 y fr(b)1004 1200 y fq(\))e ff(^)i fm(img)r fq(\()p fk(diag)1266 1183 y fx(0)1275 1200 y fq(\))i ff(\022)g fm(dom)p fq(\()p fm(v)1480 1207 y fr(a)1497 1200 y fq(\))c ff(\\)i fm(dom)p fq(\()p fm(v)1691 1207 y fr(b)1708 1200 y fq(\))277 1256 y(\(de)16 b(la)f(derni)o(\022)-21

b(ere)15 b(\023)-21 b(equation)14 b(de)i fk(matvect3)p fq(\))75 1335 y(nous)f(obtenons)g(ainsi)i(le)f(programme)e fk(matvect3)g fq(par)h(ra\016nemen)o(t.)146 1450 y(nous)i(p)q(ouv)o (ons)h(main)o(tenan)o(t)g(expliciter)i(le)e(placemen)o(t)h(des)f(v)m (aleurs)h(sur)e(le)i(premier)g(plan)f(du)75 1506 y(cub)q(e.)e(nous)g (constatons)e(que)i(les)h(domaines)f(de)g(v)m(aleurs)g(de)g fk(a0)f fq(et)h fk(a')p fq(,)e(de)i(m)o(^)-21 b(eme)15 b(que)h(ceux)g(de)g fk(b0)75 1563 y fq(et)i fk(b')p fq(,)f(son)o(t)g (di\013)o(\023)-21 b(eren)o(ts)17 b(bien)i(que)f(leurs)h(cardinaux)g (soien)o(t)e(\023)-21 b(egaux.)16 b(nous)i(allons)h(mon)o(trer)e(que)h (le)75 1619 y(programme)c fk(matvect3")g fq(qui)i(suit,)f(est)g (ra\016n)o(\023)-21 b(e)14 b(par)h fk(matvect3')p fq(.)75 1734 y fk(matvect3")23 b(:)g(\(m,v\))15 b ff(7!)g fk(p)75 1748 y fx(8)75 1786 y(>)75 1798 y(>)75 1811 y(>)75 1823 y(>)75 1836 y(>)75 1848 y(<)75 1923 y(>)75 1935 y(>)75 1948 y(>)75 1960 y(>)75 1973 y(>)75 1985 y(:)137 1784 y fk(m)g fq(=)g fk(aligna)7 b(::)g(a0)132 b fq(\()p fm(i)p fq(\))137 1840 y fk(v)15 b fq(=)g fk(alignb)7 b(::)g(b0)132 b fq(\()p fm(ii)p fq(\))137 1897 y fk(a)15 b fq(=)g fk(a0)g fa(c)h fk(front)152 b fq(\()p fm(iii)p fq(\))137 1953 y fk(b)15 b fq(=)g fk(b0)g fa(c)h fk(spreadb)508 1937 y fx(00)612 1953 y fq(\()p fm(iv)r fq(\))137 2010 y fk(p)f fq(=)g fk(prod)g fa(b)g fk(\(a/&/)8 b(b\))100 2070 y(front)118 b fq(=)50 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n)6 b(&)i(k)p fq(=)p fk(0\).\(i,j,k\))100 2127 y(spreadb)268 2110 y fx(00)338 2127 y fq(=)50 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n)6 b(&)i(k)p fq(=)p fk(0\).\(j,j,0\))146 2213 y fq(p)o(our)19 b(cela,)h(nous)g(transformons)e(l'op)o(\023)-21 b(eration)19 b(de)h(routage)e(sur)i(le)h(c)o(hamp)e fk(b)p fq(,)g(en)i(utilisan)o(t)f(la)75 2270 y(propri)o(\023)-21 b(et)o(\023)g(e)14 b(2)g(qui)i(p)q(ermet)g(remplacer)g(toutes)e(les)i (o)q(ccurrences)g(de)g fk(b0)f fq(par)f fk(h)8 b(::)f(b0)p fq(,)15 b(o)q(\022)-24 b(u)15 b(la)g(bijection)75 2326 y fk(h)p fq(,)f(\023)-21 b(egale)14 b(\022)-23 b(a)15 b(son)g(in)o(v)o(erse,)g(est)8 b(:)364 2429 y fk(h)15 b fq(=)50 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n)6 b(&)i(k)p fq(=)p fk(0\).\(i,j,\(j-i\)) 22 b(mod)i(n\))h fq(#)488 2485 y fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(i)p fq(=)p fk(\(j-k\))d(mod)h(n)8 b(&)g(k)p ff(6)p fq(=)p fk(0\).\(i,j,0\))488 2542 y fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(i)p ff(6)p fq(=)p fk(\(j-k\))22 b(mod)h(n)8 b(&)g(k)p ff(6)p fq(=)p fk(0\).\(i,j,k\))p eop %%page: 61 63 61 62 bop 75 269 a fl(4.4.)29 b(repr)310 257 y(\023)304 269 y(esent)l(a)l(tion)17 b(du)e(pr)o(obl)867 257 y(\022)861 269 y(eme)h(en)f(deux)g(dimensions)298 b fq(61)75 397 y(nous)15 b(a)o(v)o(ons)7 b(:)340 497 y fk(v)15 b fq(=)g fk(alignb)7 b(::)g(b0)170 552 y fg(\()p fw(pr)q(op:)p fg(2)q(\))207 580 y ff(!)88 b fk(v)15 b fq(=)g fk(alignb)7 b(::)g(\(h)h(::)f(b0\))340 637 y fq(car)14 b fm(dom)p fq(\()p fm(\033)545 644 y fr(b0)578 637 y fq(\))e ff(\022)h fm(img)r fq(\()p fk(h)p fq(\))g(de)j(\()p fm(iv)r fq(\))170 691 y fg(\(7)p fw(b)p fg(\))176 720 y ff(!)119 b fk(v)15 b fq(=)g fk(\(alignb)9 b ff(\016)h fk(h\))d(::)h(b0)170 788 y ff(!)125 b fk(v)15 b fq(=)g fk(alignb)7 b(::)g(b0)340 845 y fq(car)14 b fk(alignb)c ff(\016)g fk(h)23 b(=)h(alignb)75 922 y fq(et)210 966 y fk(b)15 b fq(=)h fk(\(h)7 b(::)h(b0\))15 b fa(c)g fk(spreadb)716 949 y fx(00)100 1021 y fg(\(3)p fw(a)p fg(\))107 1049 y ff(!)58 b fk(b)15 b fq(=)h fk(h)7

b(::)g(\(b0)24 b fa(c)g fk(spreab)685 1033 y fx(0)696 1049 y fk(\))210 1106 y fq(car)15 b fk(spreadb)454 1089 y fx(0)480 1106 y fq(=)g fk(h)554 1089 y fq(-1)602 1106 y ff(\016)10 b fk(spreadb)803 1089 y fx(00)833 1106 y ff(\016)g fk(h)210 1162 y fq(et)15 b fm(dom)p fq(\()p fk(spreadb)535 1146 y fx(00)555 1162 y fq(\))10 b ff([)g fm(img)r fq(\()p fk(spreadb)889 1146 y fx(00)908 1162 y fq(\))i ff(\022)h fm(img)r fq(\()p fk(h)p fq(\))8 b ff(^)j fm(dom)p fq(\()p fm(v)1301 1169 y fr(b0)1333 1162 y fq(\))h ff(\022)h fm(dom)p fq(\()p fk(h)p fq(\))210 1219 y(car)i fm(dom)p fq(\()p fm(v)412 1226 y fr(b0)444 1219 y fq(\))e(=)g fm(dom)p fq(\()p fk(alignb)n fq(\))i(des)g(deuxi)o (\022)-21 b(emes)16 b(et)f(quatri)o(\022)-21 b(emes)14 b(\023)-21 b(equations)14 b(de)i fk(matvect3')146 1296 y fq(p)o(our)e(le)i(c)o(hamp)e fk(a)p fq(,)h(nous)g(v)o(oulons)g(in)o (tro)q(duire)h(l'op)o(\023)-21 b(eration)14 b(g)o(\023)-21 b(eom)o(\023)g(etrique)13 b fk(spreada)1633 1280 y fx(0)1659 1296 y fq(appliqu)o(\023)-21 b(ee)75 1353 y(sur)16 b fk(a0)p fq(.)g(il)h(s'agit)f(l\022)-23 b(a)16 b(d')o(\023)-21 b(equiv)m(alence)18 b(faible,)g(et)e(nous)g(rempla\030)-20 b(cons)17 b(l'expression)h fk(a)e fq(=)g fk(a0)f fa(c)h fk(front)o fq(,)75 1409 y(\022)-23 b(a)15 b(l'aide)h(de)g(la)f(propri)o (\023)-21 b(et)o(\023)g(e)14 b(4.\(1\),)f(par)i(la)h(nouv)o(elle)g (expression)9 b(:)614 1498 y fk(h)e(::)h(\(\(a0)23 b fa(c)h fk(front)o(\))g fa(c)g fk(spreada)1273 1481 y fx(0)1284 1498 y fk(\))75 1587 y fq(puisque)17 b(nous)e(v)o(\023)-21 b(eri\014ons)15 b(les)h(conditions)9 b(:)143 1669 y({)23 b fk(h)15 b fq(est)g(une)g(in)o(v)o(erse)h(gauc)o(he)f(de)h fk(spreada)914 1653 y fx(0)925 1647 y fq(-1)143 1759 y fq({)23 b fm(dom)p fq(\()p fk(front)n fq(\))13 b(=)g fm(img)r fq(\()p fk(spreada)756 1742 y fx(0)765 1759 y fq(\))189 1815 y(car)i fm(img)r fq(\()p fk(spreada)531 1799 y fx(0)540 1815 y fq(\))f(=)g fm(img)r fq(\()p fk(front)n fq(\))f ff(\022)h fm(dom)p fq(\()p fm(v)1043 1822 y fr(a0)1076 1815 y fq(\))f ff(\022)j fm(dom)p fq(\()p fk(aligna)o fq(\))d(=)h fm(img)r fq(\()p fk(front)n fq(\))h(de)i(\()p fm(i)p fq(\))189 1872 y(et)e(\()p fm(iii)p fq(\).)143 1961 y({)23 b fk(h)p fq(\()p fm(img)r fq(\()p fk(spreada)497 1945 y fx(0)505 1961 y fq(\)\))12 b ff(\022)h fm(dom)p fq(\()p fm(\033)731 1968 y fr(a0)764 1961 y fq(\))f ff(\022)h fm(img)r fq(\()p fk(h)p fq(\))189 2017 y(car)19 b fk(h)p fq(\()p fm(img)r fq(\()p fk(spreada)577 2001 y fx(0)586 2017 y fq(\)\))g(=)i fm(dom)p fq(\()p fk(spreada)969 2001 y fx(0)979 2017 y fq(\))f ff(\022)g fm(dom)p fq(\()p fk(front)o fq(\))f ff(\022)i fm(dom)p fq(\()p fm(\033)1518 2024 y fr(a0)1550 2017 y fq(\))f ff(\022)g fm(img)r fq(\()p fk(h)p fq(\))e(de)189 2074 y(\()p fm(iii)p fq(\).)146 2157 y(l')o(\023)-21 b(equation)14 b(d)o(\023)-21 b(e\014nissan)o(t)15 b(le)h(c)o(hamp)f fk(a)g fq(devien)o(t)h(ensuite)9 b(:)277 2257 y fk(a)15 b fq(=)h fk(h)7 b(::)h(\(\(a0)23 b fa(c)h fk(front)o(\))g fa(c)g fk(spreada)1026 2240 y fx(0)1037 2257 y fk(\))170 2311 y fg(\(5)p fw(b)p fg(\))176 2340 y ff(!)56 b fk(a)15 b fq(=)h fk(h)7 b(::)h(\(a0)23 b fa(c)h fk(front)10 b ff(\016)g fk(spreada)939 2324 y fx(0)949 2340 y fk(\))277 2396 y fq(car)15 b fm(img)r fq(\()p fk(spreada)619 2380 y fx(0)629 2396 y fq(\))d ff(\022)h fm(dom)p fq(\()p fk(front)n fq(\))g ff(\022)g fm(dom)p fq(\()p fm(\033)1138 2403 y fr(a0)1170 2396 y fq(\))170 2465 y ff(!)62 b fk(a)15 b fq(=)h fk(h)7 b(::)h(\(a0)23 b fa(c)h fk(spreada)776 2448 y fx(0)787

2465 y fk(\))277 2521 y fq(car)15 b fk(front)10 b ff(\016)g fk(spreada)684 2505 y fx(0)709 2521 y fq(=)16 b fk(spreada)928 2505 y fx(0)p eop %%page: 62 64 62 63 bop 75 269 a fq(62)521 b fl(chapitre)16 b(4.)45 b(stra)l(t)1144 257 y(\023)1138 269 y(egies)16 b(de)f(transf)o(orma)l (tions)146 397 y fq(l')o(\023)-21 b(equation)16 b(d)o(\023)-21 b(e\014nissan)o(t)16 b(le)i(c)o(hamp)e fk(p)p fq(,)h(en)g(utilisan)o(t) h(les)f(nouv)o(elles)h(d)o(\023)-21 b(e\014nitions)18 b(de)f fk(a)f fq(et)h fk(b)p fq(,)f(de-)75 453 y(vien)o(t)8 b(:)340 560 y fk(p)15 b fq(=)g fk(prod)g fa(b)g fk(\(h)8 b(::)g(\(a0)23 b fa(c)h fk(spreada)1024 543 y fx(0)1035 560 y fk(\))g(/&/)7 b(h)h(::)g(\(b0)23 b fa(c)h fk(spreadb)1572 543 y fx(0)1583 560 y fk(\)\))170 615 y fg(\(11)p fw(a)p fg(\))186 643 y ff(!)109 b fk(p)15 b fq(=)g fk(prod)g fa(b)g fk(\(h)8 b(::)g(\(a0)23 b fa(c)h fk(spreada)1024 627 y fx(0)1059 643 y fk(/&/)7 b(b0)24 b fa(c)g fk(spreadb)1437 627 y fx(0)1448 643 y fk(\)\))170 698 y fg(\(1)p fw(a)p fg(\))178 726 y ff(!)117 b fk(p)15 b fq(=)g fk(h)8 b(::)f(\(prod)23 b fa(b)h fk(\(a0)g fa(c)g fk(spreada)1041 710 y fx(0)1075 726 y fk(/&/)8 b(b0)24 b fa(c)g fk(spreadb)1454 710 y fx(0)1464 726 y fk(\)\))170 781 y fg(\()p fw(pr)q(op:)p fg(2)q(\))207 810 y ff(!)88 b fk(h)7 b(::)g(p)15 b fq(=)h fk(h)7 b(::)h(\(prod)23 b fa(b)h fk(\(a0)f fa(c)i fk(spreada)1128 793 y fx(0)1162 810 y fk(/&/)8 b(b0)23 b fa(c)i fk(spreadb)1541 793 y fx(0)1551 810 y fk(\)\))340 878 y fq(car)14 b fm(dom)p fq(\()p fm(\033)545 885 y fr(p)562 878 y fq(\))f ff(\022)f fm(img)r fq(\()p fk(h)p fq(\))170 933 y fg(\()p fw(i)r(i)r fg(\))178 961 y ff(!)117 b fk(p)15 b fq(=)g fk(prod)g fa(b)g fk(\(a0)24 b fa(c)g fk(spreada)913 945 y fx(0)947 961 y fk(/&/)8 b(b0)24 b fa(c)g fk(spreadb)1326 945 y fx(0)1336 961 y fk(\))340 1018 y fq(car)14 b fm(dom)p fq(\()p fm(v)541 1025 y fr(p)558 1018 y fq(\))f ff(\022)g fm(dom)p fq(\()p fk(h)p fq(\))146 1158 y(il)e(su\016t)f(main)o(tenan)o (t)f(de)i(nommer)f fk(a)g fq(l'expression)h fk(a0)k fa(c)g fk(spreada)1310 1142 y fx(0)1331 1158 y fq(et)10 b fk(b)g fq(l'expression)h fk(b0)k fa(c)h fk(spreadb)1934 1142 y fx(0)1944 1158 y fq(,)75 1214 y(p)q(our)f(obtenir)h(le)g(programme)e fk(matvect3')p fq(.)75 1373 y fw(4.4.2)55 b(suppression)19 b(d'une)f(dimension)146 1471 y fq(nous)13 b(p)q(ouv)o(ons)g(main)o (tenan)o(t)g(mon)o(trer)f(que)i(le)g(programme)e fk(matvect3")g fq(ra\016ne)h(le)h(programme)75 1527 y(suiv)m(an)o(t,)h(don)o(t)g(les)h (c)o(hamps)f(son)o(t)g(exprim)o(\023)-21 b(es)15 b(dans)g fe(z)1006 1511 y fg(2)1030 1527 y fq(:)75 1647 y fk(matvect4)23 b(:)g(\(m,v\))15 b ff(7!)h fk(p)75 1665 y fx(8)75 1702 y(>)75 1714 y(>)75 1727 y(>)75 1739 y(>)75 1752 y(>)75 1764 y(>)75 1777 y(>)75 1789 y(<)75 1864 y(>)75 1876 y(>)75 1889 y(>)75 1901 y(>)75 1914 y(>)75 1926 y(>)75 1939 y(>)75 1951 y(:)137 1697 y fk(a0)f fq(=)g fk(matrix)7 b(::)g(a0)137 1753 y(b0)15 b fq(=)g fk(matrix)7 b(::)g(b0)137 1810 y(m)15 b fq(=)g fk(a0)137 1866 y(v)g fq(=)g fk(align)7 b(::)h(b0)137 1922 y(b)15 b fq(=)g fk(b0)g fa(c)h fk(spread)137 1979 y(p)f fq(=)g fk(prod)g fa(b)g fk(\(a0/&/)8 b(b\))100 2051 y(matrix)49 b fq(=)h fm(\025)p fk(\(i,j\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n\))100 2108 y(align)73 b fq(=)50 b fm(\025)p fk(\(i,j\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n)6 b(&)i(i)p fq(=)p fk(j\).\(i\))100 2164 y(spread)49 b fq(=)h fm(\025)p fk(\(i,j\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n\).\(j,j\))146 2260 y fq(p)o(our)18 b(le)i(mon)o(trer,)d(il)j(su\016t)f(de)h

(substituer)f(dans)g fk(matvect4)f fq(toutes)g(les)i(o)q(ccurrences)g (de)f fk(a0)p fq(,)75 2316 y fk(b0)p fq(,)e fk(b)h fq(et)g fk(p)g fq(par)g fk(aligna)7 b(::)g(a0)p fq(,)17 b fk(aligna)7 b(::)g(b0)p fq(,)18 b fk(aligna)6 b(::)i(b)18 b fq(et)g fk(aligna)6 b(::)i(p)17 b fq(resp)q(ectiv)o(emen)o(t,)i(\022)-23 b(a)75 2373 y(l'aide)17 b(de)f(la)h(propri)o(\023)-21 b(et)o(\023)g(e)14 b(2)i(\(on)g(sait)g(des)g(deux)h(premi)o(\022)-21 b(eres)15 b(\023)-21 b(equations)15 b(de)h fk(matvect4)f fq(que)i fm(dom)p fq(\()p fm(\033)1797 2380 y fr(a0)1829 2373 y fq(\))75 2429 y(et)j fm(dom)p fq(\()p fm(\033)263 2436 y fr(b0)295 2429 y fq(\))g ff(\022)h fm(img)r fq(\()p fk(aligna)n fq(\),)f(et)f(on)h(d)o(\023)-21 b(eduit)21 b(des)f(autres)f(\023)-21 b(equations)19 b fm(dom)p fq(\()p fm(\033)1515 2436 y fr(p)1532 2429 y fq(\))h(=)h fm(dom)p fq(\()p fm(\033)1756 2436 y fr(b)1773 2429 y fq(\))f(=)75 2486 y fm(dom)p fq(\()p fm(\033)205 2493 y fr(b0)237 2486 y fq(\)\).)14 b(nous)h(a)o(v)o(ons)7 b(:)p eop %%page: 63 65 63 64 bop 75 269 a fl(4.5.)29 b(stra)l(t)336 257 y(\023)330 269 y(egie)16 b(3)7 b(:)15 b(intr)o(oduction)h(d'une)f(r)1105 257 y(\023)1099 269 y(eduction)451 b fq(63)146 359 y fx(8)146 396 y(>)146 409 y(>)146 421 y(>)146 434 y(>)146 446 y(>)146 458 y(>)146 471 y(>)146 483 y(<)146 558 y(>)146 570 y(>)146 583 y(>)146 595 y(>)146 608 y(>)146 620 y(>)146 633 y(>)146 645 y(:)207 391 y fk(aligna)7 b(::)g(a0)15 b fq(=)h fk(matrix)7 b(::)g(\(aligna)g(::)h(a0)o(\))207 447 y(aligna)f(::)g(b0)15 b fq(=)h fk(matrix)7 b(::)g(\(aligna)g(::)h (b0)o(\))207 504 y(m)15 b fq(=)h fk(aligna)7 b(::)g(a0)207 560 y(v)15 b fq(=)h fk(align)7 b(::)g(\(aligna)g(::)h(b0)o(\))207 617 y(aligna)f(::)g(b)15 b fq(=)h fk(\(aligna)7 b(::)h(b0)o(\))15 b fa(c)h fk(spread)207 673 y(aligna)7 b(::)g(p)15 b fq(=)h fk(prod)f fa(b)g fk(\(aligna)7 b(::)h(a0)o(/&/)g(aligna)f(::)h(b\))146 767 y fq(comme)14 b fk(matrix)9 b ff(\016)h fk(aligna)j fq(=)i fk(aligna)p fq(,)e(les)j(deux)f(premi)o(\022)-21 b(eres)13 b(\023)-21 b(equations)14 b(son)o(t)g(toujours)f(vraies)75 824 y(\(les)19 b(con)o(train)o(tes)f fm(dom)p fq(\()p fm(v)524 831 y fr(a0)556 824 y fq(\))g ff(\022)g fm(dom)p fq(\()p fk(aligna)n fq(\))g(et)h fm(dom)p fq(\()p fm(v)1110 831 y fr(b0)1142 824 y fq(\))e ff(\022)i fm(dom)p fq(\()p fk(aligna)n fq(\))f(p)q(ouv)m(an)o(t)g(^)-21 b(etre)17 b(d)o(\023)-21 b(e-)75 880 y(duites)16 b(resp)q(ectiv)o(emen)o(t)g(de)g (la)g(troisi)o(\022)-21 b(eme)15 b(et)g(quatri)o(\022)-21 b(eme)14 b(\023)-21 b(equation\))14 b(et)i(p)q(euv)o(en)o(t)e(^)-21 b(etre)15 b(supprim)o(\023)-21 b(ees.)75 937 y(en)15 b(e\013et)g(apr)o(\022)-21 b(es)14 b(r)o(\023)-21 b(e)o(\023)g (ecriture)14 b(par)g(la)i(r)o(\022)-21 b(egle)14 b(\(7b\),)g(on)h (obtien)o(t)g(par)g(exemple)i(p)q(our)e(la)g(premi)o(\022)-21 b(ere)14 b(\023)-21 b(equa-)75 993 y(tion)8 b(:)17 b fk(aligna)7 b(::)g(a0)17 b fq(=)g fk(aligna)7 b(::)g(a0)p fq(.)17 b(la)g(substitution)i(nous)e(donne)h(imm)o(\023)-21 b(ediatemen)o(t)17 b(l'aligne-)75 1049 y(men)o(t)d(de)h fk(m)f fq(par)g(rapp)q(ort)g(\022)-23 b(a)14 b fk(a0)g fq(dans)h fk(matvect3")e fq(\(troisi)o(\022)-21 b(eme)13 b(\023)-21 b(equation\).)13 b(de)h(m)o(^)-21 b(eme,)13 b(l'alignemen)o(t)75 1106 y(de)19 b fk(v)g fq(par)g(rapp)q(ort)f(\022) -23 b(a)18 b fk(b0)h fq(appara)-5 b(^)-18 b(\020t)19 b(apr)o(\022)-21 b(es)17 b(l'application)k(de)e(la)h(r)o(\022)-21 b(egle)18 b(\(7b\),)g(car)g fk(align)10 b ff(\016)f fk(aligna)75 1162 y(=)24 b(alignb)p fq(.)15 b(le)h(routage)f fk(spreadb)692 1146 y fx(00)729 1162 y fq(emplo)o(y)o(\023)-21 b(e)15

b(dans)h fk(matvect3")f fq(s'obtien)o(t)h(par)g(le)h(ra\016nemen)o(t)e (de)75 1219 y(l')o(\023)-21 b(equation)15 b(d)o(\023)-21 b(e\014nissan)o(t)15 b fk(b)7 b fq(:)281 1324 y fk(aligna)g(::)g(b)15 b fq(=)g fk(\(aligna)7 b(::)h(b0\))15 b fa(c)g fk(spread)171 1367 y fg(\(3)p fw(a)p fg(\))178 1395 y ff(!)58 b fk(aligna)7 b(::)g(b)15 b fq(=)g fk(aligna)7 b(::)g(\(b0)24 b fa(c)g fk(aligna)1080 1378 y fq(-1)1128 1395 y ff(\016)10 b fk(spread)f ff(\016)h fk(aligna)o(\))281 1452 y fq(car)15 b fm(dom)p fq(\()p fk(spread)n fq(\))d ff(\022)h fm(img)r fq(\()p fk(spread)n fq(\))f ff(\022)h fm(img)r fq(\()p fk(aligna)n fq(\))281 1508 y(et)i fm(dom)p fq(\()p fm(v)460 1515 y fr(b0)492 1508 y fq(\))d ff(\022)h fm(dom)p fq(\()p fk(aligna)o fq(\))i(de)g(l')o(\023)-21 b(equation)15 b(d)o(\023)-21 b(e\014nissan)o(t)15 b fk(b)170 1561 y fw(def)q(:)178 1588 y ff(!)58 b fk(aligna)7 b(::)g(b)15 b fq(=)g fk(aligna)7 b(::)g(\(b0)24 b fa(c)g fk(spreadb)o(\))281 1644 y fq(car)15 b fk(aligna)500 1627 y fq(-1)547 1644 y ff(\016)10 b fk(spread)f ff(\016)h fk(aligna)i fq(=)h fk(spreadb)1138 1628 y fx(00)171 1699 y fg(\()p fw(i)r(i)r fg(\))178 1728 y ff(!)58 b fk(b)15 b fq(=)g fk(b0)g fa(c)h fk(spreadb)652 1711 y fx(00)281 1784 y fq(car)f fm(dom)p fq(\()p fm(v)483 1791 y fr(b)500 1784 y fq(\))d(=)h fm(img)r fq(\()p fk(spread)p fq(\))d ff(\022)j fm(dom)p fq(\()p fk(aligna)n fq(\))146 1923 y(p)o(our)j(obtenir)h(l')o(\023)-21 b(equation)16 b(\()p fm(iii)p fq(\))f(de)j fk(matvect3")d fq(nous)i(in)o(tro)q(duisons)h(le)f(c)o(hamp)g(in)o(term)o(\023)-21 b(ediaire)75 1979 y fk(a)17 b fq(d)o(\023)-21 b(e\014ni)18 b(par)f fk(a)h fq(=)g fk(a0)p fq(,)e(et)i(nous)f(renfor\030)-20 b(cons)17 b(les)i(con)o(train)o(tes)d(sur)i(cette)f(p)q(ost-)o(\023)-21 b(equation,)17 b(qui)h(p)q(eut)75 2036 y(se)h(r)o(\023)-21 b(e)o(\023)g(ecrire)17 b fk(a)i fq(=)g fk(a0)14 b fa(c)i fk(front)i fq(\(propri)o(\023)-21 b(et)o(\023)g(e)17 b(6\).)g(en\014n)j(en)f(appliquan)o(t)g(successiv)o(emen)o(t)h(les)f(r) o(\022)-21 b(egles)75 2092 y(\(11a\))18 b(et)h(\(i)q(i\))g(sur)g(la)h (derni)o(\022)-21 b(ere)18 b(\023)-21 b(equation)19 b(du)g(pr)o(\023) -21 b(ec)o(\023)g(eden)o(t)18 b(syst)o(\022)-21 b(eme,)18 b(\()p fm(dom)p fq(\()p fm(v)1457 2099 y fr(p)1473 2092 y fq(\))h ff(\022)h fm(dom)p fq(\()p fk(aligna)n fq(\)\))75 2149 y(nous)14 b(obtenons)h fk(matvect3")p fq(.)d(nous)j(concluons)g (donc)g(que)g fk(matvect4)e fq(est)h(ra\016n)o(\023)-21 b(e)13 b(par)h fk(matvect3")p fq(.)75 2319 y ft(4.5)66 b(strat)o(\023)-32 b(egie)22 b(3)11 b(:)22 b(in)n(tro)r(duction)j (d'une)e(r)o(\023)-32 b(eduction)146 2429 y fq(nous)14 b(a)o(v)o(ons)g(jusqu'\022)-23 b(a)14 b(pr)o(\023)-21 b(esen)o(t)14 b(raisonn)o(\023)-21 b(e)14 b(sur)h(la)g(phase)g(du)g (pro)q(duit)h(des)f(co)q(e\016cien)o(ts)g(de)g(l'algo-)75 2486 y(rithme)e(du)g(pro)q(duit)g(matrice-v)o(ecteur.)f(nous)h(compl)o (\023)-21 b(etons)11 b(main)o(tenan)o(t)i(l'algorithme)f(par)h(la)f (phase)75 2542 y(de)18 b(sommation)f(de)g(ces)h(pro)q(duits.)g(nous)f (allons)i(mon)o(trer)d(commen)o(t)h(passer)g(d'une)h(v)o(ersion)g (utili-)p eop %%page: 64 66 64 65 bop 75 269 a fq(64)521 b fl(chapitre)16 b(4.)45 b(stra)l(t)1144 257 y(\023)1138 269 y(egies)16 b(de)f(transf)o(orma)l (tions)75 397 y fq(san)o(t)e(des)i(routages)e(de)h(v)o(oisins-\022)-23 b(a-v)o(oisins)16 b(\022)-23 b(a)14 b(une)g(v)o(ersion)g(pro\014tan)o (t)g(d'un)g(op)o(\023)-21 b(erateur)13 b(de)h(r)o(\023)-21 b(eduction.)75 453 y(in)o(tro)q(duire)17 b(un)f(tel)g(op)o(\023)-21 b(erateur)14 b(est)i(une)g(strat)o(\023)-21 b(egie)14 b(couran)o(te)i(de)g(transformation)e(de)i(programmes,)75

510 y(car)h(il)i(a)d(\023)-21 b(et)o(\023)g(e)16 b(mon)o(tr)o(\023)-21 b(e)16 b(que)i(la)g(mise)g(en)g(o)q(euvre)g(de)g(ces)g(op)o(\023)-21 b(erateurs)16 b(sur)i(une)g(mac)o(hine)h(parall)o(\022)-21 b(ele)18 b(a)75 566 y fm(p)h fq(pro)q(cesseurs,)h(p)q(ermet)f(de)h(r)o (\023)-21 b(esoudre)18 b(des)i(probl)o(\022)-21 b(emes)19 b(de)h(taille)h fm(n)e fq(en)h(un)g(temps)f(de)h(l'ordre)f(de)80 605 y fw(n)p 80 612 21 2 v 82 638 a(p)116 623 y fq(+)10 b(log)220 634 y fg(2)238 623 y fq(\()p fm(p)p fq(\))15 b([33)o(].)146 774 y(la)20 b(sommation)f(des)i(co)q(e\016cien)o(ts)g (se)f(trouv)m(an)o(t)f(sur)h(c)o(hacune)h(des)g(lignes)g(de)g fk(p)f fq(n)o(\023)-21 b(ecessite)20 b(un)75 831 y(routage)d(des)h(v)m (aleurs)h(le)f(long)g(de)g(c)o(hacune)h(de)f(ces)g(lignes.)h(le)f (programme)f(suiv)m(an)o(t)h(mon)o(tre)f(une)75 887 y(fa\030)-20 b(con)15 b(p)q(ossible)i(d'e\013ectuer)e(la)h(sommation)e(des)h(\023) -21 b(el)o(\023)g(emen)o(ts)13 b(de)j(ligne)9 b(:)515 1761 y @beginspecial @setspecial %%begindocument: recur.pstex /$f2psdict 200 dict def $f2psdict begin $f2psdict /mtrx matrix put /l {lineto} bind def /m {moveto} bind def /s {stroke} bind def /n {newpath} bind def /gs {gsave} bind def /gr {grestore} bind def /clp {closepath} bind def /graycol {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul setrgbcolor} bind def /col-1 {} def /col0 {0 0 0 setrgbcolor} bind def /col1 {0 0 1 setrgbcolor} bind def /col2 {0 1 0 setrgbcolor} bind def /col3 {0 1 1 setrgbcolor} bind def /col4 {1 0 0 setrgbcolor} bind def /col5 {1 0 1 setrgbcolor} bind def /col6 {1 1 0 setrgbcolor} bind def /col7 {1 1 1 setrgbcolor} bind def /col8 {.68 .85 .9 setrgbcolor} bind def /col9 {0 .39 0 setrgbcolor} bind def /col10 {.65 .17 .17 setrgbcolor} bind def /col11 {1 .51 0 setrgbcolor} bind def /col12 {.63 .13 .94 setrgbcolor} bind def /col13 {1 .75 .8 setrgbcolor} bind def /col14 {.7 .13 .13 setrgbcolor} bind def /col15 {1 .84 0 setrgbcolor} bind def /drawsplinesection { /y3 exch def /x3 exch def /y2 exch def /x2 exch def /y1 exch def /x1 exch def /xa x1 x2 x1 sub 0.666667 mul add def /ya y1 y2 y1 sub 0.666667 mul add def /xb x3 x2 x3 sub 0.666667 mul add def /yb y3 y2 y3 sub 0.666667 mul add def x1 y1 lineto xa ya xb yb x3 y3 curveto } def

end /$f2psbegin {$f2psdict begin /$f2psenteredstate save def} def /$f2psend {$f2psenteredstate restore end} def $f2psbegin 0 setlinecap 0 setlinejoin -171.0 412.0 translate 0.900 -0.900 scale 0.500 setlinewidth 1 setlinecap [1 4.000000] 4.000000 setdash % polyline n 315 411 m 218 411 l 218 315 l 315 315 l clp gs col-1 s gr [] 0 setdash 0 setlinecap % polyline n 319 382 m 331 420 l gs col-1 s gr % polyline n 315 411 m 327 449 l gs col-1 s gr % polyline n 197 332 m 197 353 l gs col-1 s gr n 199.000 345.000 m 197.000 353.000 l 195.000 345.000 l gs 2 setlinejoin col-1 gr % polyline n 197 332 m 214 332 l gs col-1 s gr n 206.000 330.000 m 214.000 332.000 l 206.000 334.000 l gs 2 setlinejoin col-1 gr % polyline n 310 440 m 310 344 l 214 344 l 214 440 l clp gs col-1 s gr % polyline n 427 382 m 427 286 l 331 286 l 331 382 l clp gs col-1 s gr % polyline n 340 382 m 344 399 l gs col-1 s gr 1 setlinecap [1 3.000000] 3.000000 setdash % polyline n 323 382 m 227 382 l 227 286 l 323 286 l clp gs col-1 s gr [] 0 setdash 0 setlinecap [4.000000] 0 setdash % open spline n 252.000 357.000 m 250.000 352.500 l 250.000 352.500 248.000 348.000 243.500 348.000 drawsplinesection 243.500 348.000 239.000 348.000 235.000 352.500 drawsplinesection 231.000 357.000 l gs col-1 s gr [] 0 setdash n 237.810 352.349 m 231.000 357.000 l 234.820 349.692 l gs 2 setlinejoin col-1 gr [4.000000] 0 setdash % open spline n 285.000 357.000 m 283.000 352.500 l 283.000 352.500 281.000 348.000 277.000 348.000 drawsplinesection 277.000 348.000 273.000 348.000 268.500 352.500 drawsplinesection 264.000 357.000 l gs col-1 s gr [] 0 setdash n 271.071 352.757 m 264.000 357.000 l 268.243 349.929 l gs 2 setlinejoin col-1 gr [4.000000] 0 setdash % open spline n 256.000 390.000 m 254.000 386.000 l 254.000 386.000 252.000 382.000 247.500 382.000 drawsplinesection 247.500 382.000 243.000 382.000 239.000 386.000 drawsplinesection 235.000 390.000 l gs col-1 s gr [] 0 setdash

s

s

s

s

n 242.071 385.757 m 235.000 390.000 l 239.243 382.929 l gs 2 setlinejoin col-1 gr [4.000000] 0 setdash % open spline n 285.000 390.000 m 283.000 386.000 l 283.000 386.000 281.000 382.000 277.000 382.000 drawsplinesection 277.000 382.000 273.000 382.000 268.500 386.000 drawsplinesection 264.000 390.000 l gs col-1 s gr [] 0 setdash n 271.308 386.180 m 264.000 390.000 l 268.651 383.190 l gs 2 setlinejoin col-1 gr [4.000000] 0 setdash % open spline n 252.000 424.000 m 250.000 419.500 l 250.000 419.500 248.000 415.000 243.500 415.000 drawsplinesection 243.500 415.000 239.000 415.000 235.000 419.500 drawsplinesection 231.000 424.000 l gs col-1 s gr [] 0 setdash n 237.810 419.349 m 231.000 424.000 l 234.820 416.692 l gs 2 setlinejoin col-1 gr [4.000000] 0 setdash % open spline n 285.000 424.000 m 283.000 419.500 l 283.000 419.500 281.000 415.000 277.000 415.000 drawsplinesection 277.000 415.000 273.000 415.000 268.500 419.500 drawsplinesection 264.000 424.000 l gs col-1 s gr [] 0 setdash n 271.071 419.757 m 264.000 424.000 l 268.243 416.929 l gs 2 setlinejoin col-1 gr $f2psend %%enddocument @endspecial 1096 1214 a fy(1)88 b(2)f(3)1313 1307 y(6)-129 b(5)f(4)1096 1416 y(7)88 b(8)f(9)-583 b(2+3)50 b(3)875 1544 y(6)-145 b(5+6)-183 b(4+11)642 1667 y(7+17)14 b(8+9)50 b(9)1096 1589 y fu(s0)13 b fy(=)h fu(p)563 1278 y fh(j)515 1337 y(i)642 1416 y fy(1+5)1047 1667 y fu(s1)f fy(=)p fu(add)h ft(b)g fu(\(p/&/)6 b(\(s0)22 b ft(c)g fu(pre)o(\)\))890 1761 y(s2)13 b fy(=)h fu(add)f ft(b)h fu(\(p/&/)7 b(\(s1)21 b ft(c)h fu(pre)o(\)\))553 1905 y fn(fig.)15 b fq(4.4)g(-)30 b fj(r)n(outage)17 b(r)o(\023)-22 b(e)n(cursif)16 b(des)g(pr)n(o)n (duits)75 2097 y fk(matvect4)23 b(:)g(\(m,v\))15 b ff(7!)h fk(r)75 2109 y fx(8)75 2146 y(>)75 2159 y(>)75 2171 y(>)75 2184 y(>)75 2196 y(>)75 2209 y(>)75 2221 y(>)75 2233 y(>)75 2246 y(>)75 2258 y(>)75 2271 y(>)75 2283 y(>)75 2296 y(<)75 2370 y(>)75 2383 y(>)75 2395 y(>)75 2408 y(>)75 2420 y(>)75 2433 y(>)75 2445 y(>)75 2458 y(>)75 2470 y(>)75 2482 y(>)75 2495 y(>)75 2507 y(>)75 2520 y(:)137 2147 y fk(a0)f fq(=)g fk(matrix)7 b(::)g(a0)137 2203 y(b0)15 b fq(=)g fk(matrix)7 b(::)g(b0)137 2260 y(m)15 b fq(=)g fk(a0)137 2316 y(v)g fq(=)g fk(align)7 b(::)h(b0)137 2373 y(b)15 b fq(=)g fk(b0)g fa(c)h fk(spread)137 2429 y(p)f fq(=)g fk(prod)g fa(b)g fk(\(a0/&/)8 b(b\))137 2485 y(s)15 b fq(=)g fk(add)g fa(b)h fk(\(p/&/)7 b(s)24 b fa(c)g fk(pre)o(\))137 2542 y(r)15 b fq(=)g fk(s)g fa(c)h fk(col)p eop %%page: 65 67 65 66 bop 75 269 a fl(4.5.)29 b(stra)l(t)336 257 y(\023)330 269 y(egie)16 b(3)7 b(:)15 b(intr)o(oduction)h(d'une)f(r)1105 257 y(\023)1099 269 y(eduction)451 b fq(65)100 397 y fk(col)73 b fq(=)50 b fm(\025)p fk(\(i,j\))p ff(j)p fk(\(j=0\))100

s

s

s

s

453 y(pre)73 b fq(=)50 b fm(\025)p fk(\(i,j\))p ff(j)p fk(\(0)p ff(\024)p fk(i)p fm(<)p fk(n)23 b(&)h(0)p ff(\024)p fk(j)p fm(<)p fk(n-1\).\(i,j+1\))100 510 y(prod)49 b fq(=)h fm(\025)p fk(\(a)p fq(;)o fk(b\).\(a*b\))100 566 y(add)73 b fq(=)50 b fk(id)25 b fq(#)10 b fm(\025)p fk(\(a)p fq(;)o fk(b\).\(a+b\))146 670 y fq(la)h(d)o(\023)-21 b(e\014nition)12 b(du)g(c)o(hamp)f fk(s)g fq(pro)q(c)o(\022)-21 b(ede)11 b(r)o(\023)-21 b(ecursiv)o(emen)o(t)11 b(p)q(our)g(ac)o (heminer)h(les)g(pro)q(duits)c(:)j(les)h(paires)75 726 y(de)g(v)m(aleurs)g(son)o(t)e(form)o(\023)-21 b(ees)10 b(par)h(sup)q(erp)q(osition)i(de)e(la)h(matrice)f fk(p)g fq(et)g(d'elle-m)o(^)-21 b(eme)12 b(d)o(\023)-21 b(eplac)o(\023)g(ee)11 b(par)g(l'op)o(\023)-21 b(e-)75 782 y(ration)15 b fk(pre)g fq(\(cf.)f(\014gure)i(4.4\),)d(puis)j(les)g(deux)g(v)m(aleurs)g(son)o (t)f(somm)o(\023)-21 b(ees)14 b(p)q(our)h(n'en)h(rendre)f(qu'une.)75 909 y(nous)i(mon)o(trons)f(\022)-23 b(a)17 b(pr)o(\023)-21 b(esen)o(t)16 b(que)h(la)h(d)o(\023)-21 b(e\014nition)17 b(r)o(\023)-21 b(ecursiv)o(e)17 b(du)h(c)o(hamp)f fk(s)g fq(p)q(eut)g(s'abstraire)f(en)i(une)75 966 y(d)o(\023)-21 b(e\014nition)15 b(non)g(r)o(\023)-21 b(ecursiv)o(e,)14 b(faisan)o(t)g(appara)-5 b(^)-18 b(\020tre)14 b(une)h(op)o(\023)-21 b(eration)14 b(de)h(r)o(\023)-21 b(eduction.)14 b(cette)g(transforma-) 75 1022 y(tion)h(est)g(v)m(alid)o(\023)-21 b(ee)17 b(par)e (l'application)i(du)e(th)o(\023)-21 b(eor)o(\022)g(eme)13 b(suiv)m(an)o(t)c(:)75 1149 y fo(th)o(\023)-25 b(eor)o(\022)g(eme)18 b(3)50 b fj(soit)17 b fk(f)g fj(une)g(fonction)g(d)o(\023)-22 b(e\014nie)16 b(p)n(ar)h(la)g(r)o(\023)-22 b(e)n(curr)n(enc)n(e)16 b fk(f)24 b(=)g(i)10 b fq(#)g fk(\(f)f ff(\016)h fk(s)1594 1133 y fq(-1)1632 1149 y fk(\))p fj(,)16 b(o)q(\022)-24 b(u)18 b fk(i)f fj(est)75 1205 y(l'identit)o(\023)-22 b(e)15 b(d)o(\023)-22 b(e\014nie)14 b(sur)i(un)f(sous-domaine,)h(et)f fk(s)g fj(est)g(bije)n(ctive.)g(l')o(\023)-22 b(e)n(quation)15 b fk(y)g fq(=)h fk(f)g fq(;)8 b fa(b)16 b fk(x)f fj(se)g(r)o(\023)-22 b(e)o(\023)g(e)n(crit)75 1262 y(en)16 b(la)g(d)o(\023)-22 b(e\014nition)15 b(suivante,)h(o)q(\022)-24 b(u)17 b(le)f(champ)h (interm)o(\023)-22 b(e)n(diair)n(e)15 b fk(t)i fj(est)e(d)o(\023)-22 b(e\014ni)16 b(r)o(\023)-22 b(e)n(cursivement)7 b(:)506 1314 y fk(t)50 b fq(=)g fk(x)24 b(/&/)8 b(\(t)23 b fa(c)h fk(s\))506 1371 y(y)50 b fq(=)g fk(t)16 b fa(c)h fk(i)75 1470 y fj(pr)n(euve.)e fq(en)g(utilisan)o(t)i(les)e(r)o(\022)-21 b(egles)15 b(de)h(ra\016nemen)o(t,)e(nous)h(p)q(ouv)o(ons)g(\023)-21 b(ecrire)7 b(:)259 1522 y fk(y)15 b fq(=)h fk(f)f fq(;)8 b fa(b)14 b fk(x)124 1563 y fw(def)q(:)118 1590 y ff(\000)-7 b(!)68 b fk(y)15 b fq(=)h fk(\(i)9 b fq(#)h fk(f)g ff(\016)g fk(s)545 1574 y fq(-1)582 1590 y fk(\))15 b fq(;)8 b fa(b)15 b fk(x)125 1633 y fg(\(10\))118 1662 y ff(\000)-7 b(!)68 b fk(y)15 b fq(=)h fk(i)f fq(;)8 b fa(b)14 b fk(x)h(/&/)8 b(\(f)i ff(\016)g fk(s)692 1645 y fq(-1)729 1662 y fk(\))15 b fq(;)8 b fa(b)15 b fk(x)133 1705 y fg(\(6\))118 1733 y ff(\000)-7 b(!)68 b fk(y)15 b fq(=)h fk(i)f fq(;)8 b fa(b)14 b fk(x)h(/&/)8 b(f)15 b fq(;)8 b fa(b)15 b fk(\(s)735 1717 y fq(-1)796 1733 y fq(;)8 b fa(b)23 b fk(x\))100 1776 y fg(\()p fw(pr)q(op)p fg(1\))118 1805 y ff(\000)-7 b(!)68 b fk(y)15 b fq(=)h fk(x)f fa(c)g fk(i)g(/&/)8 b(f)15 b fq(;)8 b fa(b)14 b fk(\(x)24 b fa(c)g fk(s\))146 1896 y fq(en)15 b(it)o(\023)-21 b(eran)o(t)14 b(le)i(calcul)9 b(:)170 2010 y ff(\000)-7 b(!)51 b fk(y)15 b fq(=)g fk(x)g fa(c)h fk(i)f(/&/)7 b(\(x)24 b fa(c)g fk(s\))15 b fa(c)g fk(i)g(/&/)8 b(f)15 b fq(;)8 b fa(b)15 b fk(\(\(x)23 b fa(c)h fk(s\))g fa(c)g fk(s\))179 2053

y fg(\(8)p fw(b)p fg(\))170 2081 y ff(\000)-7 b(!)51 b fk(y)15 b fq(=)g fk(\(x)24 b(/&/)7 b(x)24 b fa(c)g fk(s)g(/&/)7 b(\(x)24 b fa(c)g fk(s\))g fa(c)g fk(s)g(/&/)7 b(...\))15 b fa(c)g fk(i)294 2138 y fq(car)f fm(dom)p fq(\()p fk(i)p fq(\))e ff(\022)h fm(dom)p fq(\()p fm(\033)705 2145 y fr(x)722 2138 y fq(\))294 2194 y(et)i fm(img)r fq(\()p fk(i)p fq(\))e(=)i fm(dom)p fq(\()p fk(i)p fq(\))d ff(\022)h fm(dom)p fq(\()p fm(v)882 2201 y fr(x)899 2194 y fq(\))c ff(\\)i fm(:)d(:)g(:)g ff(\\)i fm(dom)p fq(\()p fm(v)1196 2201 y fr(x)1223 2194 y ff(\016)g fk(s)e fm(:)g(:)g(:)15 b ff(\016)10 b fk(s)p fq(\))170 2251 y ff(\000)-7 b(!)51 b fk(y)15 b fq(=)g fk(t)g fa(c)h fk(i)45 b fq(a)o(v)o(ec)g fk(t)15 b fq(=)g fk(x)24 b(/&/)8 b(\(t)23 b fa(c)i fk(s)o(\))75 2303 y fa(\003)75 2429 y fq(nous)20 b(p)q(ouv)o(ons)f(main)o(tenan)o(t) g(\023)-21 b(ecrire)19 b(le)i(programme)d fn(pei)i fq(suiv)m(an)o(t,)g (qui)g(abstrait)f(le)i(programme)75 2486 y fk(matvect4)6 b fq(:)p eop %%page: 66 68 66 67 bop 75 269 a fq(66)521 b fl(chapitre)16 b(4.)45 b(stra)l(t)1144 257 y(\023)1138 269 y(egies)16 b(de)f(transf)o(orma)l (tions)75 397 y fk(matvect5)23 b(:)g(\(m,v\))15 b ff(7!)h fk(r)75 409 y fx(8)75 446 y(>)75 459 y(>)75 471 y(>)75 484 y(>)75 496 y(>)75 509 y(>)75 521 y(>)75 534 y(>)75 546 y(>)75 559 y(>)75 571 y(>)75 583 y(>)75 596 y(<)75 671 y(>)75 683 y(>)75 696 y(>)75 708 y(>)75 720 y(>)75 733 y(>)75 745 y(>)75 758 y(>)75 770 y(>)75 783 y(>)75 795 y(>)75 808 y(>)75 820 y(:)137 447 y fk(a0)f fq(=)g fk(matrix)7 b(::)g(a0)137 503 y(b0)15 b fq(=)g fk(matrix)7 b(::)g(b0)137 560 y(m)15 b fq(=)g fk(a0)137 616 y(v)g fq(=)g fk(align)7 b(::)h(b0)137 673 y(b)15 b fq(=)g fk(b0)g fa(c)h fk(spread)137 729 y(p)f fq(=)g fk(prod)g fa(b)g fk(\(a0/&/)8 b(b\))137 786 y(s)15 b fq(=)g fk(sum)g fa(b)h fk(\(red)23 b fq(;)8 b fa(b)23 b fk(p\))137 842 y(r)15 b fq(=)g fk(s)g fa(c)h fk(col)100 915 y(red)f fq(=)g fm(\025)p fk(\(i,j\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n\).\(i,0\))100 971 y(sum)g fq(=)g fk(id)25 b fq(#)10 b fm(\025)p fk(\(a)p fq(;)o fk(b\).\(a+sum\(b\)\))75 1037 y fj(pr)n(euve.)16 b fq(nous)g(p)q(ouv)o(ons)g(r)o(\023)-21 b(e)o(\023)g(ecrire)14 b(la)j(fonction)f fk(red)f fq(et)h(obtenir)g (une)h(d)o(\023)-21 b(e\014nition)17 b(sem)o(blable)g(\022)-23 b(a)16 b(celle)75 1094 y(de)g fk(f)f fq(dans)g(le)h(th)o(\023)-21 b(eor)o(\022)g(eme)13 b(pr)o(\023)-21 b(ec)o(\023)g(eden)o(t)6 b(:)170 1196 y fk(red)50 b fq(=)g fm(\025)p fk(\(i,j\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n\).\(i,0\))292 1253 y fq(=)g fm(\025)p fk(\(i,j\))p ff(j)p fk(\(0)p ff(\024)p fk(i)p fm(<)p fk(n)7 b(&)g(j)p fq(=)p fk(0\).\(i,0\))j fq(#)377 1309 y fm(\025)p fk(\(i,j\))p ff(j)p fk(\(0)p ff(\024)p fk(i)p fm(<)p fk(n)d(&)g(0)p fm(<)p fk(j)p fm(<)p fk(n\).\(i,0\))292 1366 y fq(=)50 b fk(col)10 b fq(#)g fm(\025)p fk(\(i,j\))p ff(j)p fk(\(0)p ff(\024)p fk(i)p fm(<)p fk(n&)22 b(0)p ff(\024)p fk(j)p fm(<)p fk(n\).\(i,0\))10 b ff(\016)377 1422 y fm(\025)p fk(\(i,j\))p ff(j)p fk(\(0)p ff(\024)p fk(i)p fm(<)p fk(n)d(&)g(0)p fm(<)p fk(j)p fm(<)p fk(n\).\(i,j-1\))292 1483 y fq(=)50 b fk(col)10 b fq(#)g fk(red)f ff(\016)h fq(\()p fm(\025)p fk(\(i,j\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n-1\).\(i,j+1\))m fq(\))1291 1459 y fq(-1)292 1539 y fq(=)50 b fk(col)10 b fq(#)g fk(red)f ff(\016)h fk(pre)693 1523 y fq(-1)146 1619 y fq(p)o(osons)k fk(y)g fq(=)h fk(red)g fq(;)8 b fa(b)15 b fk(p)p fq(.)f(on)i(d)o(\023)-21

b(eduit)15 b(du)g(th)o(\023)-21 b(eror)o(\022)g(eme)13 b(pr)o(\023)-21 b(ec)o(\023)g(eden)o(t,)13 b(un)i(ra\016nemen)o(t)f(de) i(la)f(d)o(\023)-21 b(e\014ni-)75 1676 y(tion)15 b(de)h fk(y)f fq(sous)g(la)h(forme)7 b(:)720 1688 y fx(\()774 1732 y fk(t)13 b fq(=)g fk(p/&/)7 b fq(\()p fk(t)23 b fa(c)i fk(pre)o fq(\))774 1789 y fk(y)13 b fq(=)g fk(t)i fa(c)g fk(col)75 1882 y fq(l')o(\023)-21 b(equation)11 b fk(s)g fq(=)h fk(sum)i fa(b)i fk(y)11 b fq(de)h fk(matvect5)e fq(devien)o(t)i(donc)g fk(s)f fq(=)h fk(sum)i fa(b)i fk(\(t)23 b fa(c)i fk(col)o(\))p fq(.)11 b(cette)g(d)o(\023)-21 b(e\014nition)75 1938 y(de)16 b fk(s)f fq(p)q(eut)g(se)h(r)o(\023)-21 b(e)o(\023)g(ecrire)14 b(d'apr)o(\022)-21 b(es)14 b(la)h(r)o(\022)-21 b(egle)15 b(\(2b\),)f(en)i fk(s)f fq(=)g fk(\(sum)23 b fa(b)i fk(t)o(\))16 b fa(c)f fk(col)p fq(.)146 1997 y(il)f(nous)f(reste)g(\022)-23 b(a)13 b(utiliser)h(le)g(fait)f(que)h (la)f(somme)g fk(sum)g fq(d'une)g(s)o(\023)-21 b(equence)14 b(de)f(longueur)h(quelconque)75 2054 y(p)q(eut)i(se)f(r)o(\023)-21 b(e)o(\023)g(ecrire)14 b(en)i(fonction)f(de)h(la)f(somme)g(binaire)i fk(add)p fq(,)d(de)i(la)f(fa\030)-20 b(con)15 b(suiv)m(an)o(te)9 b(:)584 2159 y fk(sum)23 b(=)h(id)10 b fq(#)g fm(\025)p fk(\(a)p fq(;)o fk(b\).\(add\(a)p fq(;)n fk(sum\(b\)\)\))75 2262 y fq(utilisons)17 b(main)o(tenan)o(t)e(la)g(prop)q(osition)h(suiv) m(an)o(te)9 b(:)75 2377 y fo(prop)q(osition)16 b(5)40 b fq(soit)14 b(une)f(fonction)h(r)o(\023)-21 b(ecursiv)o(e)13 b fk(f)24 b(=)f(id)34 b fq(#)10 b fm(\025)p fk(\(a)p fq(;)o fk(b\).\(a)23 b ff(\012)h fk(f\(b\)\))p fq(,)12 b(o)q(\022)-24 b(u)14 b ff(\012)f fq(est)g(un)75 2433 y(op)o(\023)-21 b(erateur)14 b(binaire)i(asso)q(ciatif.)g(alors)7 b(:)487 2542 y fk(f)15 b fa(b)h fk(\(x1)23 b(/&/)8 b(x2\))k fq(=)h fk(f)i fa(b)h fk(\(f)23 b fa(b)i fk(x1)e(/&/)8 b(f)23 b fa(b)i fk(x2)o(\))p eop %%page: 67 69 67 68 bop 75 269 a fl(4.5.)29 b(stra)l(t)336 257 y(\023)330 269 y(egie)16 b(3)7 b(:)15 b(intr)o(oduction)h(d'une)f(r)1105 257 y(\023)1099 269 y(eduction)451 b fq(67)75 397 y fj(pr)n(euve.)12 b fq(d'une)g(part,)g(nous)g(a)o(v)o(ons)g fk(f)e ff(\016)g fk(f)i fq(=)h fk(f)f fq(car)g(p)q(our)g(une)h(s)o(\023)-21 b(equence)13 b fm(x)f fq(de)h(longueur)g(quelconque,)75 453 y fk(f)p fq(\()p fm(x)p fq(\))k(rend)h(une)h(s)o(\023)-21 b(equence)18 b(\022)-23 b(a)18 b(un)f(\023)-21 b(el)o(\023)g(emen)o(t,) 16 b(et)i(l'image)g(par)g fk(f)f fq(d'une)i(s)o(\023)-21 b(equence)18 b(d'un)f(\023)-21 b(el)o(\023)g(emen)o(t)17 b(est)75 510 y(cet)d(\023)-21 b(el)o(\023)g(emen)o(t.)75 566 y(d'autre)13 b(part,)g(soien)o(t)h(les)h(c)o(hamps)f fk(x1)g fq(=)g(\()p fm(v)857 573 y fg(1)888 566 y fq(:)e fm(\033)939 573 y fg(1)958 566 y fq(\),)h fk(x2)h fq(=)g(\()p fm(v)1153 573 y fg(2)1184 566 y fq(:)e fm(\033)1235 573 y fg(2)1254 566 y fq(\))i(et)g(les)g(p)q(oin)o(ts)h fm(z)1559 573 y fg(1)1590 566 y ff(2)e fm(dom)p fq(\()p fm(v)1759 573 y fg(1)1777 566 y fq(\))h(et)75 623 y fm(z)96 630 y fg(2)131 623 y ff(2)j fm(dom)p fq(\()p fm(v)304 630 y fg(2)322 623 y fq(\).)g(supp)q(osons)h(que)g fm(v)705 630 y fg(1)724 623 y fq(\()p fm(z)763 630 y fg(1)782 623 y fq(\))f(est)g(une)h(s)o(\023)-21 b(equence)18 b(de)g(longueur)g (quelconque)10 b(:)17 b fm(v)1701 630 y fg(1)1720 623 y fq(\()p fm(z)1759 630 y fg(1)1777 623 y fq(\))f(=)75 679 y ff(f)p fm(a)122 686 y fg(1)140 679 y fq(;)8 b fm(:)g(:)g(:)d fq(;)j fm(a)266 686 y fw(n)288 679 y ff(g)p fq(.)15 b(de)g(m)o(^)-21 b(eme)14 b fm(v)562 686 y fg(2)581 679 y fq(\()p fm(z)620 686 y fg(2)638 679 y fq(\))e(=)h ff(f)p fm(b)759 686

y fg(1)777 679 y fq(;)8 b fm(:)g(:)g(:)d fq(;)j fm(b)899 686 y fw(m)929 679 y ff(g)p fq(.)146 792 y(les)15 b(s)o(\023)-21 b(eman)o(tiques)15 b(resp)q(ectiv)o(es)h(des)g(deux)f(expressions)h (son)o(t)f(alors)7 b(:)189 882 y(p)o(our)14 b fk(f)h fa(b)h fk(\(x1)23 b(/&/)8 b(x2\))f fq(:)243 975 y({)23 b(sur)15 b(le)h(domaine)g fm(dom)p fq(\()p fm(v)721 982 y fg(1)739 975 y fq(\))9 b ff(\\)i fm(dom)p fq(\()p fm(v)933 982 y fg(2)951 975 y fq(\))c(:)35 b(\()p fk(f)10 b ff(\016)g fq(\()p fm(v)1149 982 y fg(1)1167 975 y fq(;)e fm(v)1210 982 y fg(2)1228 975 y fq(\)\)\()p fm(z)1303 982 y fg(1)1321 975 y fq(;)g fm(z)1363 982 y fg(2)1381 975 y fq(\))1024 1031 y(=)13 b fk(f)p fq(\()p fm(v)1136 1038 y fg(1)1155 1031 y fq(\()p fm(z)1194 1038 y fg(1)1212 1031 y fq(\);)8 b fm(v)1273 1038 y fg(2)1291 1031 y fq(\()p fm(z)1330 1038 y fg(2)1348 1031 y fq(\)\))1024 1088 y(=)13 b fm(a)1096 1095 y fg(1)1125 1088 y ff(\012)e fm(:)d(:)g(:)g ff(\012)i fm(a)1303 1095 y fw(n)1336 1088 y ff(\012)g fm(b)1401 1095 y fg(1)1430 1088 y ff(\012)g fm(:)e(:)g(:)g ff(\012)j fm(b)1604 1095 y fw(m)243 1158 y fq({)23 b(sur)15 b(le)h(domaine)g fm(dom)p fq(\()p fm(v)721 1165 y fg(1)739 1158 y fq(\))p ff(n)p fm(dom)p fq(\()p fm(v)906 1165 y fg(2)923 1158 y fq(\))7 b(:)15 b fk(f)p fq(\()p fm(v)1040 1165 y fg(1)1058 1158 y fq(\()p fm(z)1097 1165 y fg(1)1116 1158 y fq(\)\))c(=)i fm(a)1235 1165 y fg(1)1264 1158 y ff(\012)e fm(:)d(:)g(:)g ff(\012)i fm(a)1442 1165 y fw(n)243 1229 y fq({)23 b(sur)15 b(le)h(domaine)g fm(dom)p fq(\()p fm(v)721 1236 y fg(2)739 1229 y fq(\))p ff(n)p fm(dom)p fq(\()p fm(v)906 1236 y fg(1)923 1229 y fq(\))7 b(:)15 b fk(f)p fq(\()p fm(v)1040 1236 y fg(2)1058 1229 y fq(\()p fm(z)1097 1236 y fg(2)1116 1229 y fq(\)\))c(=)i fm(b)1231 1236 y fg(1)1260 1229 y ff(\012)d fm(:)e(:)g(:)g ff(\012)j fm(b)1434 1236 y fw(n)189 1322 y fq(p)o(our)j fk(f)h fa(b)h fk(\(f)23 b fa(b)i fk(x1)e(/&/)8 b(f)23 b fa(b)i fk(x2)o(\))8 b fq(:)243 1414 y({)23 b(sur)15 b(le)h(domaine)g fm(dom)p fq(\()p fm(v)721 1421 y fg(1)739 1414 y fq(\))9 b ff(\\)i fm(dom)p fq(\()p fm(v)933 1421 y fg(2)951 1414 y fq(\))c(:)35 b(\()p fk(f)10 b ff(\016)g fq(\(\()p fk(f)f ff(\016)h fm(v)1233 1421 y fg(1)1252 1414 y fq(\);)o(\()p fk(f)g ff(\016)f fm(v)1388 1421 y fg(2)1407 1414 y fq(\)\)\)\()p fm(z)1500 1421 y fg(1)1518 1414 y fq(;)f fm(z)1560 1421 y fg(2)1578 1414 y fq(\))1024 1471 y(=)13 b(\()p fk(f)d ff(\016)g fm(v)1179 1478 y fg(1)1198 1471 y fq(\()p fm(z)1237 1478 y fg(1)1255 1471 y fq(\)\))f ff(\012)i fq(\()p fk(f)p fq(\()p fk(f)e ff(\016)h fm(v)1494 1478 y fg(2)1513 1471 y fq(\()p fm(z)1552 1478 y fg(2)1570 1471 y fq(\)\)\))1024 1527 y(=)j(\()p fk(f)d ff(\016)g fm(v)1179 1534 y fg(1)1198 1527 y fq(\()p fm(z)1237 1534 y fg(1)1255 1527 y fq(\)\))f ff(\012)i fq(\()p fk(f)e ff(\016)h fm(v)1452 1534 y fg(2)1471 1527 y fq(\()p fm(z)1510 1534 y fg(2)1528 1527 y fq(\)\))1024 1583 y(=)j(\()p fm(a)1114 1590 y fg(1)1143 1583 y ff(\012)d fm(:)e(:)g(:)g ff(\012)j fm(a)1321 1590 y fw(n)1343 1583 y fq(\))f ff(\012)h fq(\()p fm(b)1455 1590 y fg(1)1483 1583 y ff(\012)f fm(:)e(:)g(:)g ff(\012)j fm(b)1657 1590 y fw(m)1688 1583 y fq(\))243 1654 y({)23 b(sur)15 b(le)h(domaine)g fm(dom)p fq(\()p fm(v)721 1661 y fg(1)739 1654 y fq(\))p ff(n)p fm(dom)p fq(\()p fm(v)906 1661 y fg(2)923 1654 y fq(\))7 b(:)15 b fk(f)p fq(\()p fk(f)p fq(\()p fm(v)1082 1661 y fg(1)1100 1654 y fq(\()p fm(z)1139 1661 y fg(1)1157 1654 y fq(\)\)\))d(=)h fm(a)1295 1661 y fg(1)1323 1654 y ff(\012)e fm(:)d(:)g(:)g ff(\012)i fm(a)1501 1661 y

fw(n)243 1725 y fq({)23 b(sur)15 b(le)h(domaine)g fm(dom)p fq(\()p fm(v)721 1732 y fg(2)739 1725 y fq(\))p ff(n)p fm(dom)p fq(\()p fm(v)906 1732 y fg(1)923 1725 y fq(\))7 b(:)15 b fk(f)p fq(\()p fk(f)p fq(\()p fm(v)1082 1732 y fg(2)1100 1725 y fq(\()p fm(z)1139 1732 y fg(2)1157 1725 y fq(\)\)\))d(=)h fm(b)1291 1732 y fg(1)1319 1725 y ff(\012)d fm(:)e(:)g(:)g ff(\012)j fm(b)1493 1732 y fw(n)75 1818 y fq(les)i(deux)f(expressions)h(de)g(c)o(hamps)f(de)g (donn)o(\023)-21 b(ees)12 b(son)o(t)g(donc)f(\023)-21 b(egales)12 b(si)g(l'op)o(\023)-21 b(erateur)11 b ff(\012)i fq(est)f(asso)q(ciatif.)75 1874 y fa(\003)75 2044 y fq(la)j(prop)q (osition)h(5)f(nous)g(donne)9 b(:)35 b fk(sum)15 b fa(b)h fk(t)41 b fq(=)h fk(sum)15 b fa(b)g fk(\(p)24 b(/&/)7 b(t)24 b fa(c)g fk(pre\))902 2100 y fq(=)42 b fk(sum)15 b fa(b)g fk(\(sum)23 b fa(b)i fk(p)o(/&/)8 b(sum)23 b fa(b)i fk(\(t)e fa(c)h fk(pre\)\))75 2178 y fq(puisque)19 b(le)f(c)o(hamp)g(de)f(donn)o(\023)-21 b(ees)18 b fk(p)f fq(n'est)g(form)o(\023)-21 b(e)16 b(que)i(de)g(s)o(\023)-21 b(equences)18 b(d'un)f(\023)-21 b(el)o(\023)g(emen)o(t,)15 b(on)j(p)q(eut)g(d)o(\023)-21 b(e-)75 2234 y(duire)9 b(:)37 b fk(sum)15 b fa(b)g fk(p)e fq(=)g fk(p)p fq(.)f(de)g(m)o(^)-21 b(eme,)12 b(puisque)i(\()p fk(p)e(/&/)7 b(sum)15 b fa(b)h fk(\(t)23 b fa(c)h fk(pre\))p fq(\))12 b(est)g(form)o(\023)-21 b(e)11 b(de)i(s)o(\023)-21 b(equences)75 2290 y(d'au)15 b(plus)h(deux)f(\023)-21 b(el)o(\023)g(emen)o(ts,)14 b(on)h(a)7 b(:)486 2388 y fk(sum)15 b fa(b)h fk(t)41 b fq(=)h fk(add)15 b fa(b)g fk(\(p/&/)7 b(\(sum)24 b fa(b)g fk(t\))g fa(c)g fk(pre)o(\))146 2486 y fq(en)15 b(renomman)o(t)f fk(sum)h fa(b)g fk(t)g fq(en)h fk(s')p fq(,)f(nous)g(a)o(v)o(ons)f fk(s')h fq(=)h fk(add)e fa(b)i fk(\(p)23 b(/&/)8 b(s')23 b fa(c)i fk(pre)o(\))p eop %%page: 68 70 68 69 bop 75 269 a fq(68)521 b fl(chapitre)16 b(4.)45 b(stra)l(t)1144 257 y(\023)1138 269 y(egies)16 b(de)f(transf)o(orma)l (tions)146 397 y fq(de)g(plus,)g(comme)h fk(col)9 b ff(\016)h fk(col)23 b(=)h(col)p fq(,)15 b(nous)g(a)o(v)o(ons)7 b(:)693 501 y fk(r)13 b fq(=)f fk(\(\(sum)24 b fa(b)g fk(t\))f fa(c)i fk(col)o(\))15 b fa(c)h fk(col)578 557 y ff(\000)-7 b(!)42 b fk(r)13 b fq(=)f fk(\(sum)24 b fa(b)g fk(t\))15 b fa(c)g fk(col)585 599 y fw(def)q(:)578 626 y ff(\000)-7 b(!)42 b fk(r)13 b fq(=)f fk(s')j fa(c)h fk(col)146 774 y fq(au)f(\014nal,)h(nous)f(a)o(v)o(ons)565 702 y fx(\()624 746 y fk(s')f fq(=)i fk(add)f fa(b)g fk(\(p)24 b(/&/)7 b(s')24 b fa(c)g fk(pre\))624 802 y(r)15 b fq(=)g fk(s')g fa(c)h fk(col)75 889 y fq(ces)e(deux)h(derni)o(\022) -21 b(eres)13 b(\023)-21 b(equations)14 b(son)o(t)f(pr)o(\023)-21 b(esen)o(tes)14 b(dans)g fk(matvect4)f fq(et)h(nous)h(a)o(v)o(ons)e (mon)o(tr)o(\023)-21 b(e)12 b(qu'elles)75 945 y(son)o(t)20 b(un)g(ra\016nemen)o(t)g(de)h(l')o(\023)-21 b(equation)20 b(d)o(\023)-21 b(e\014nissan)o(t)20 b fk(r)g fq(de)h fk(matvect5)p fq(.)d(les)j(deux)g(programmes)e(ne)75 1002 y(di\013)o(\023)-21 b(eran)o(t)14 b(que)i(par)e(ces)h(\023)-21 b(equations,)14 b(nous)h(concluons)i(que)e fk(matvect5)f fq(abstrait)h fk(matvect4)p fq(.)75 1058 y fa(\003)75 1173 y fj(note.)j fq(la)h(d)o(\023)-21 b(emonstration)17 b(e)q(^)-24 b(ut)18 b(\023)-21 b(et)o(\023)g(e)17 b(plus)i(simple)h(si) f(nous)g(a)o(vions)e(\023)-21 b(egalemen)o(t)18 b(utilis)o(\023)-21 b(e)19 b(la)g(fonction)75 1230 y fk(sum)c fq(dans)g(les)h(programmes)e (pr)o(\023)-21 b(ec)o(\023)g(eden)o(ts,)13 b(fonction)j(qui)g(aurait)e (\023)-21 b(et)o(\023)g(e)13 b(appliqu)o(\023)-21 b(ee)16

b(sur)f(la)h(s)o(\023)-21 b(equence)15 b(\014-)75 1286 y(nale)f(obten)o(ue)f(par)f(sup)q(erp)q(ositions)i(successiv)o(es.)g (cep)q(endan)o(t,)f(nous)g(ab)q(orderons)f(dans)h(le)h(pro)q(c)o(hain) 75 1342 y(c)o(hapitre)19 b(la)g(traduction)g(d')o(\023)-21 b(equations)18 b fn(pei)h fq(en)g(co)q(de)h(data-parall)o(\022)-21 b(ele,)18 b(et)h(des)g(op)o(\023)-21 b(erations)18 b(comme)75 1399 y fk(sum)c fq(ne)h(son)o(t)f(pas)g(directemen)o(t)i(traduisibles)g (dans)f(ces)g(langages)f(en)h(raison)g(de)g(l'absence)g(du)h(t)o(yp)q (e)75 1455 y(liste.)146 1570 y(finalemen)o(t,)10 b(nous)g(a)o(v)o(ons)g (mon)o(tr)o(\023)-21 b(e)8 b(par)i(abstractions)g(successiv)o(es,)g (que)h(le)g(programme)e fk(matvect1)75 1627 y fq(est)18 b(une)i(v)o(ersion)e(tr)o(\022)-21 b(es)18 b(particularis)o(\023)-21 b(ee,)18 b(par)h(son)f(sc)o(h)o(\023)-21 b(ema)18 b(de)h(comm)o (unication)g(explicite,)i(du)e(pro-)75 1683 y(gramme)f(abstrait)g fk(matvect5)p fq(,)g(pro)q(c)o(he)h(de)g(l')o(\023)-21 b(enonc)o(\023)g(e)18 b(m)o(^)-21 b(eme)18 b(du)i(probl)o(\022)-21 b(eme)18 b(du)i(pro)q(duit)f(matrice-)75 1740 y(v)o(ecteur.)75 1894 y ft(4.6)66 b(strat)o(\023)-32 b(egie)22 b(4)11 b(:)22 b(mo)r(di\014cation)i(des)e(alignemen)n(ts)75 2001 y fw(4.6.1)55 b(algorithme)16 b(initial)146 2091 y fq(nous)21 b(sa)o(v)o(ons)g(que)h(le)g(placemen)o(t)g(des)g(donn)o (\023)-21 b(ees)22 b(rev)o(^)-21 b(et)20 b(une)i(imp)q(ortance)g (primordiale)h(dans)75 2147 y(le)c(domaine)h(du)f(parall)o(\023)-21 b(elisme,)18 b(\023)-21 b(etan)o(t)17 b(donn)o(\023)-21 b(e)18 b(le)h(co)q(^)-24 b(ut)19 b(actuel)f(\023)-21 b(el)o(\023)g(ev)o(\023)g(e)17 b(des)i(comm)o(unications.)g(nous)75 2204 y(mon)o(trons)13 b(dans)i(cette)f(section)h(une)g(strat)o(\023)-21 b(egie)13 b(de)h(transformation)f(bas)o(\023)-21 b(ee)14 b(sur)g(l')o(\023)-21 b(equiv)m(alence)16 b(faible)75 2260 y(p)q(ermettan)o(t)i(de)h(mo)q(di\014er)g(le)g(placemen)o(t)g (initial)i(des)e(donn)o(\023)-21 b(ees.)17 b(l'exemple)j(c)o(hoisi)g (est)e(d)o(\023)-21 b(eriv)o(\023)g(e)17 b(du)75 2316 y(pro)q(duit)22 b(matrice-v)o(ecteur)8 b(:)21 b(il)i(s'agit)d(en)i (fait)f(d'une)h(v)m(arian)o(te)g(de)f(l'op)o(\023)-21 b(eration)21 b fj(gaxpy)h fq([23)o(],)f(qui)75 2373 y(est)e(simplemen)o (t)h(un)f(calcul)h(de)g(la)f(forme)7 b(:)18 b fm(c)h fq(=)g fm(ax)12 b fq(+)h fm(y)r fq(,)19 b fm(a)f ff(2)h fe(r)1272 2356 y fw(m)p fx(\002)p fw(n)1347 2373 y fq(,)g fm(x)f ff(2)h fe(r)1508 2356 y fw(n)1528 2373 y fq(,)f fm(y)j ff(2)e fe(r)1687 2356 y fw(m)1715 2373 y fq(.)g(nous)75 2429 y(nous)f(in)o(t)o(\023)-21 b(eressons)16 b(ici)j(au)f(cas)f (particulier)j fm(y)e fq(=)f fm(x)p fq(,)g(cette)h(op)o(\023)-21 b(eration)15 b(\023)-21 b(etan)o(t)16 b(fr)o(\023)-21 b(equemmen)o(t)17 b(utilis)o(\023)-21 b(ee)75 2486 y(de)20 b(mani)o(\022)-21 b(ere)20 b(it)o(\023)-21 b(erativ)o(e)19 b(p)q(our)h(calculer)h fm(a)p fq(\()p fm(:)8 b(:)g(:)d fq(\()p fm(a)p fq(\()p fm(ax)13 b fq(+)h fm(x)p fq(\))e(+)i fm(x)p fq(\))8 b fm(:)g(:)g(:)m fq(\))13 b(+)g fm(x)p fq(,)20 b(par)f(exemple)i(dans)f(la)75 2542 y(m)o(\023)-21 b(etho)q(de)15 b(du)g(gradien)o(t)g(conjugu)o(\023)-21 b(e.)p eop %%page: 69 71 69 70 bop 75 269 a fl(4.6.)29 b(stra)l(t)336 257 y(\023)330 269 y(egie)16 b(4)7 b(:)15 b(modifica)l(tion)h(des)f(alignements)462 b fq(69)146 397 y(la)14 b(premi)o(\022)-21 b(ere)15 b(v)o(ersion)g (reprend)g(le)g(placemen)o(t)h(des)f(donn)o(\023)-21 b(ees)14 b(de)h fk(matvect5)p fq(.)e(ce)i(placemen)o(t)g(est)75 453 y(parfois)g(obligatoire)h(quand)g(on)f(doit)g(tenir)h(compte)f(de)h (certaines)g(restrictions)f(li)o(\023)-21 b(ees)16 b(\022)-23 b(a)15 b(la)h(mac)o(hine)75 510 y(o)q(\022)-24 b(u)16

b(\022)-23 b(a)16 b(un)h(langage)f(\(par)f(exemple,)i(les)g (di\013usions)g(doiv)o(en)o(t)g(se)f(faire)g(selon)h(les)g(axes)f (canoniques)h(de)75 566 y(la)j(grille)h(de)f(pro)q(cesseurs)f(virtuels) i(sur)e(les)h fj(cm-200)g fq(and)g fj(cm-5)f fq(de)g fj(thinking)g(machines)g fq([47)o(]\).)75 623 y(si)e(cette)g(con)o (train)o(te)f(dispara)-5 b(^)-18 b(\020t,)16 b(il)i(existe)f(alors)f (un)h(algorithme)g(don)o(t)f(le)h(placemen)o(t)g(des)g(donn)o(\023)-21 b(ees)75 679 y(dimin)o(ue)20 b(le)g(nom)o(bre)e(de)h(comm)o(unications) g(n)o(\023)-21 b(ecessaires,)18 b(et)h(nous)f(mon)o(trons)g(dans)h (cette)f(section)75 736 y(commen)o(t)d(passer)g(du)g(premier)h (algorithme)g(au)f(second.)146 953 y(les)g(placemen)o(ts)g(des)f (di\013)o(\023)-21 b(eren)o(ts)14 b(c)o(hamps)h(de)f(donn)o(\023)-21 b(ees)15 b(de)g(l'algorithme)g(initial)h(son)o(t)e(repr)o(\023)-21 b(esen-)75 1009 y(t)o(\023)g(es)15 b(sur)h(la)g(\014gure)h(4.5\(a\).)d (comme)h(dans)h fk(matvect5)p fq(,)f(le)i(v)o(ecteur)f fm(x)g fq(\(repr)o(\023)-21 b(esen)o(t)o(\023)g(e)14 b(par)i(le)h(c)o(hamp)f fk(x)p fq(\))75 1066 y(est)g(align)o(\023)-21 b(e)15 b(sur)h(la)g(premi)o(\022)-21 b(ere)16 b(ligne)h(de)f(la)g (matrice)g(\()p fk(b0)p fq(\),)e(puis)j(recopi)o(\023)-21 b(e)16 b(sur)f(toutes)h(les)g(lignes)h(de)f(la)75 1122 y(matrice)c(p)q(our)f(former)g fk(b)p fq(.)g(les)h(pro)q(duits)g(\()p fk(p)p fq(\))f(son)o(t)f(ensuite)j(somm)o(\023)-21 b(es)10 b(le)i(long)g(des)g(lignes)g(p)q(our)g(obtenir)75 1179 y fm(ax)p fq(.)j(les)h(sommes)e(arbitrairemen)o(t)h(plac)o(\023)-21 b(ees)16 b(sur)f(la)g(derni)o(\022)-21 b(ere)16 b(colonne)g(formen)o(t) e fk(c0)p fq(.)h(l'addition)h(de)75 1235 y fm(ax)h fq(a)o(v)o(ec)f fm(x)h fq(n)o(\023)-21 b(ecessite)17 b(la)g(transp)q(osition)g(de)g fk(c0)p fq(,)f(donnan)o(t)h(le)h(c)o(hamp)e fk(c1)p fq(.)h(finalemen)o (t)g(le)h(r)o(\023)-21 b(esultat)75 1292 y fm(ax)10 b fq(+)h fm(x)k fq(est)g(plac)o(\023)-21 b(e)15 b(sur)g(la)h(premi)o (\022)-21 b(ere)15 b(ligne)h(de)g(la)f(matrice)h(\()p fk(c)p fq(\).)e(cet)g(algorithme)i(s')o(\023)-21 b(ecrit)14 b(en)i fn(pei)7 b fq(:)286 2387 y @beginspecial @setspecial %%begindocument: gaxpy.pstex /$f2psdict 200 dict def $f2psdict begin $f2psdict /mtrx matrix put /l {lineto} bind def /m {moveto} bind def /s {stroke} bind def /n {newpath} bind def /gs {gsave} bind def /gr {grestore} bind def /clp {closepath} bind def /graycol {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul setrgbcolor} bind def /col-1 {} def /col0 {0 0 0 setrgbcolor} bind def /col1 {0 0 1 setrgbcolor} bind def /col2 {0 1 0 setrgbcolor} bind def /col3 {0 1 1 setrgbcolor} bind def /col4 {1 0 0 setrgbcolor} bind def /col5 {1 0 1 setrgbcolor} bind def /col6 {1 1 0 setrgbcolor} bind def /col7 {1 1 1 setrgbcolor} bind def /col8 {.68 .85 .9 setrgbcolor} bind def /col9 {0 .39 0 setrgbcolor} bind def /col10 {.65 .17 .17 setrgbcolor} bind def /col11 {1 .51 0 setrgbcolor} bind def /col12 {.63 .13 .94 setrgbcolor} bind def

/col13 {1 .75 .8 setrgbcolor} bind def /col14 {.7 .13 .13 setrgbcolor} bind def /col15 {1 .84 0 setrgbcolor} bind def end /$f2psbegin {$f2psdict begin /$f2psenteredstate save def} def /$f2psend {$f2psenteredstate restore end} def $f2psbegin 0 setlinecap 0 setlinejoin -288.0 445.0 translate 0.900 -0.900 scale 0.500 setlinewidth n 442.577 340.664 m 445.000 344.000 l 441.292 342.197 gr n 457.571 329.000 19.571 -129.965 129.965 arcn gs col-1 s gr n 442.720 333.564 m 445.000 337.000 l 441.372 335.041 gr n 455.500 325.500 15.572 -132.397 132.397 arcn gs col-1 s gr n 442.226 325.949 m 445.000 329.000 l 441.117 327.613 gr n 450.000 321.500 9.014 -123.690 123.690 arcn gs col-1 s gr n 454.577 340.664 m 457.000 344.000 l 453.292 342.197 gr n 469.571 329.000 19.571 -129.965 129.965 arcn gs col-1 s gr n 454.720 333.564 m 457.000 337.000 l 453.372 335.041 gr n 467.500 325.500 15.572 -132.397 132.397 arcn gs col-1 s gr n 454.226 325.949 m 457.000 329.000 l 453.117 327.613 gr n 462.000 321.500 9.014 -123.690 123.690 arcn gs col-1 s gr n 669.292 315.803 m 673.000 314.000 l 670.577 317.336 gr n 685.571 329.000 19.571 129.965 -129.965 arc gs col-1 s gr n 669.372 322.959 m 673.000 321.000 l 670.720 324.436 gr n 683.500 332.500 15.572 132.397 -132.397 arc gs col-1 s gr n 669.117 330.387 m 673.000 329.000 l 670.226 332.051 gr n 678.000 336.500 9.014 123.690 -123.690 arc gs col-1 s gr n 646.577 340.664 m 649.000 344.000 l 645.292 342.197 gr n 661.571 329.000 19.571 -129.965 129.965 arcn gs col-1 s gr n 646.720 333.564 m 649.000 337.000 l 645.372 335.041 gr n 659.500 325.500 15.572 -132.397 132.397 arcn gs col-1 s gr n 646.226 325.949 m 649.000 329.000 l 645.117 327.613 gr n 654.000 321.500 9.014 -123.690 123.690 arcn gs col-1 s gr n 466.577 340.664 m 469.000 344.000 l 465.292 342.197

l gs 2 setlinejoin col-1 s

l gs 2 setlinejoin col-1 s

l gs 2 setlinejoin col-1 s

l gs 2 setlinejoin col-1 s

l gs 2 setlinejoin col-1 s

l gs 2 setlinejoin col-1 s

l gs 2 setlinejoin col-1 s

l gs 2 setlinejoin col-1 s

l gs 2 setlinejoin col-1 s

l gs 2 setlinejoin col-1 s

l gs 2 setlinejoin col-1 s

l gs 2 setlinejoin col-1 s

l gs 2 setlinejoin col-1 s

gr n 481.571 329.000 gs col-1 s gr n 466.720 333.564 gr n 479.500 325.500 gs col-1 s gr n 466.226 325.949 gr n 474.000 321.500 gs col-1 s gr n 410.123 385.329 gr n 401.000 398.600 gs col-1 s gr n 410.613 385.117 gr n 404.500 394.000 gs col-1 s gr n 410.197 385.292 gr n 397.000 401.571 gs col-1 s gr n 410.123 373.329 gr n 401.000 386.600 gs col-1 s gr n 410.613 373.117 gr n 404.500 382.000 gs col-1 s gr n 410.197 373.292 gr n 397.000 389.571 gs col-1 s gr n 599.613 385.117 gr n 593.500 394.000 gs col-1 s gr n 604.051 386.226 gr n 608.500 394.000 gs col-1 s gr n 589.336 374.577 gr n 601.000 389.571 gs col-1 s gr n 589.384 374.644 gr n 597.000 386.600 gs col-1 s gr n 589.051 374.226 gr n 593.500 382.000 gs col-1 s gr n 452.614 388.638 gr n 458.000 388.500 gs col-1 s gr n 410.123 397.329

19.571 -129.965 129.965 arcn m 469.000 337.000 l 465.372 335.041 l gs 2 setlinejoin col-1 s 15.572 -132.397 132.397 arcn m 469.000 329.000 l 465.117 327.613 l gs 2 setlinejoin col-1 s 9.014 -123.690 123.690 arcn m 412.000 389.000 l 408.616 386.644 l gs 2 setlinejoin col-1 s 14.600 -138.888 -41.112 arc m 412.000 389.000 l 408.949 386.226 l gs 2 setlinejoin col-1 s 9.014 -146.310 -33.690 arc m 412.000 389.000 l 408.664 386.577 l gs 2 setlinejoin col-1 s 19.571 -140.035 -39.965 arc m 412.000 377.000 l 408.616 374.644 l gs 2 setlinejoin col-1 s 14.600 -138.888 -41.112 arc m 412.000 377.000 l 408.949 374.226 l gs 2 setlinejoin col-1 s 9.014 -146.310 -33.690 arc m 412.000 377.000 l 408.664 374.577 l gs 2 setlinejoin col-1 s 19.571 -140.035 -39.965 arc m 601.000 389.000 l 597.949 386.226 l gs 2 setlinejoin col-1 s 9.014 -146.310 -33.690 arc m 601.000 389.000 l 602.387 385.117 l gs 2 setlinejoin col-1 s 9.014 -33.690 -146.310 arcn m 586.000 377.000 l 587.803 373.292 l gs 2 setlinejoin col-1 s 19.571 -39.965 -140.035 arcn m 586.000 377.000 l 587.877 373.329 l gs 2 setlinejoin col-1 s 14.600 -41.112 -138.888 arcn m 586.000 377.000 l 587.387 373.117 l gs 2 setlinejoin col-1 s 9.014 -33.690 -146.310 arcn m 455.000 392.000 l 451.312 390.156 l gs 2 setlinejoin col-1 s 4.610 49.399 130.601 arcn m 412.000 401.000 l 408.616 398.644 l gs 2 setlinejoin col-1 s

gr n 401.000 410.600 14.600 -138.888 -41.112 arc gs col-1 s gr n 410.613 397.117 m 412.000 401.000 l 408.949 398.226 l gs 2 setlinejoin gr n 404.500 406.000 9.014 -146.310 -33.690 arc gs col-1 s gr n 410.197 397.292 m 412.000 401.000 l 408.664 398.577 l gs 2 setlinejoin gr n 397.000 413.571 19.571 -140.035 -39.965 arc gs col-1 s gr n 657.117 315.387 m 661.000 314.000 l 658.226 317.051 l gs 2 setlinejoin gr n 666.000 321.500 9.014 123.690 -123.690 arc gs col-1 s gr n 658.226 340.949 m 661.000 344.000 l 657.117 342.613 l gs 2 setlinejoin gr n 666.000 336.500 9.014 -123.690 123.690 arcn gs col-1 s gr n 614.123 397.329 m 616.000 401.000 l 612.616 398.644 l gs 2 setlinejoin gr n 605.000 410.600 14.600 -138.888 -41.112 arc gs col-1 s gr n 614.613 397.117 m 616.000 401.000 l 612.949 398.226 l gs 2 setlinejoin gr n 608.500 406.000 9.014 -146.310 -33.690 arc gs col-1 s gr n 614.197 397.292 m 616.000 401.000 l 612.664 398.577 l gs 2 setlinejoin gr n 601.000 413.571 19.571 -140.035 -39.965 arc gs col-1 s gr % polyline n 355 347 m 355 311 l 319 311 l 319 347 l clp gs col-1 s gr % polyline n 415 347 m 415 311 l 379 311 l 379 347 l clp gs col-1 s gr % polyline n 355 407 m 355 371 l 319 371 l 319 407 l clp gs col-1 s gr % polyline n 415 407 m 415 371 l 379 371 l 379 407 l clp gs col-1 s gr % polyline n 355 467 m 355 431 l 319 431 l 319 467 l clp gs col-1 s gr % polyline n 559 347 m 559 311 l 523 311 l 523 347 l clp gs col-1 s gr % polyline n 619 347 m 619 311 l 583 311 l 583 347 l clp gs col-1 s gr % polyline n 559 407 m 559 371 l 523 371 l 523 407 l clp gs col-1 s gr % polyline n 379 320 m 415 320 l gs col-1 s gr % polyline n 475 407 m 475 371 l 439 371 l 439 407 l clp gs col-1 s gr % polyline n 439 380 m 475 380 l gs col-1 s gr % polyline n 406 371 m 406 407 l gs col-1 s gr % polyline n 319 440 m 355 440 l gs col-1 s gr % polyline n 583 317 m 613 347 l gs col-1 s gr % polyline

col-1 s

col-1 s

col-1 s

col-1 s

col-1 s

col-1 s

col-1 s

n % n % n

589 371 m 619 401 l gs col-1 s gr polyline 643 317 m 673 347 l gs col-1 s gr polyline 649 311 m 679 341 l gs col-1 s gr 1 setlinecap [1 3.000000] 3.000000 setdash % polyline n 475 407 m 475 371 l 466 371 l 466 407 l clp gs [] 0 setdash 0 setlinecap % polyline n 679 347 m 679 311 l 643 311 l 643 347 l clp gs % polyline n 583 377 m 613 407 l gs col-1 s gr % polyline n 619 407 m 619 371 l 583 371 l 583 407 l clp gs % polyline n 589 311 m 619 341 l gs col-1 s gr % polyline n 475 347 m 475 311 l 439 311 l 439 347 l clp gs 1 setlinecap [1 4.000000] 4.000000 setdash % polyline n 499 299 m 499 479 l gs col-1 s gr [] 0 setdash 0 setlinecap % polyline n 439 319 m 475 319 l gs col-1 s gr % polyline n 679 407 m 679 371 l 643 371 l 643 407 l clp gs % polyline n 643 377 m 673 407 l gs col-1 s gr % polyline n 649 371 m 679 401 l gs col-1 s gr /times-roman findfont 6.00 scalefont setfont 334 332 m gs 1 -1 scale (a) col-1 show gr /times-roman findfont 6.00 scalefont setfont 454 416 m gs 1 -1 scale (c1) col-1 show gr /times-roman findfont 6.00 scalefont setfont 457 356 m gs 1 -1 scale (b) col-1 show gr /times-roman findfont 6.00 scalefont setfont 538 329 m gs 1 -1 scale (a) col-1 show gr /times-roman findfont 6.00 scalefont setfont 658 356 m gs 1 -1 scale (b) col-1 show gr /times-roman findfont 6.00 scalefont setfont 394 416 m gs 1 -1 scale (c0) col-1 show gr /times-roman findfont 6.00 scalefont setfont 599 419 m gs 1 -1 scale (c0) col-1 show gr /times-roman findfont 6.00 scalefont setfont 598 332 m gs 1 -1 scale (b0) col-1 show gr /times-roman findfont 6.00 scalefont setfont 325 392 m gs 1 -1 scale (p = a*b) col-1 show gr /times-roman findfont 6.00 scalefont setfont 529 389 m

col-1 s gr col-1 s gr

col-1 s gr

col-1 s gr

col-1 s gr

gs 1 -1 scale (p = a*b) col-1 show gr /times-roman findfont 6.00 scalefont setfont 322 437 m gs 1 -1 scale (c = b0+c1) col-1 show gr /times-roman findfont 6.00 scalefont setfont 394 319 m gs 1 -1 scale (b0) col-1 show gr /times-roman findfont 6.00 scalefont setfont 649 419 m gs 1 -1 scale (c = b0+c0) col-1 show gr $f2psend %%enddocument @endspecial 225 w fy(\(a\))715 b(\(b\))363 2531 y fn(fig.)15 b fq(4.5)f(-)31 b fj(\(a\))15 b(a)o(lgorithme)i(initial)64 b(\(b\))15 b(a)o(lgorithme)h(am)o(\023)-22 b(elior)o(\023)g(e)p eop %%page: 70 72 70 71 bop 75 269 a fq(70)521 b fl(chapitre)16 b(4.)45 b(stra)l(t)1144 257 y(\023)1138 269 y(egies)16 b(de)f(transf)o(orma)l (tions)75 397 y fk(gaxpx1)23 b(:)h(\(a,x\))14 b ff(7!)i fk(c)75 411 y fx(8)75 449 y(>)75 461 y(>)75 473 y(>)75 486 y(>)75 498 y(>)75 511 y(>)75 523 y(>)75 536 y(>)75 548 y(>)75 561 y(>)75 573 y(<)75 648 y(>)75 660 y(>)75 673 y(>)75 685 y(>)75 698 y(>)75 710 y(>)75 723 y(>)75 735 y(>)75 747 y(>)75 760 y(>)75 772 y(:)137 452 y fk(a)f fq(=)g fk(matrix)7 b(::)g(a)137 509 y(x)15 b fq(=)g fk(align)7 b(::)h(b0)137 565 y(b)15 b fq(=)g fk(b0)g fa(c)h fk(spread)137 622 y(p)f fq(=)g fk(prod)g fa(b)g fk(\(a)24 b(/&/)8 b(b\))137 678 y(c0)15 b fq(=)g fk(sum)g fa(b)g fk(\(reduce)23 b fq(;)8 b fa(b)24 b fk(p\))137 735 y(c1)15 b fq(=)g fk(c0)g fa(c)h fk(col2row)137 791 y(c)f fq(=)g fk(add)g fa(b)h fk(\(b0)23 b(/&/)8 b(c1\))100 865 y(matrix)73 b fq(=)50 b fm(\025)p fk(\(i,j\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n\).\(i,j\))100 922 y(align)97 b fq(=)50 b fm(\025)p fk(\(i,j\))p ff(j)p fk(\(i)p fq(=)p fk(0)6 b(&)i(0)p ff(\024)p fk(j)p fm(<)p fk(n\).\(j\))100 978 y(spread)73 b fq(=)50 b fm(\025)p fk(\(i,j\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n\).\(0,j\))100 1035 y(reduce)73 b fq(=)50 b fm(\025)p fk(\(i,j\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n\).\(i,n-1\))100 1091 y(col2row)f fq(=)h fm(\025)p fk(\(i,j\))p ff(j)p fk(\(i)p fq(=)p fk(0)6 b(&)i(0)p ff(\024)p fk(j)p fm(<)p fk(n\).\(j,n-1\))100 1147 y(add)145 b fq(=)50 b fm(\025)p fk(\(a)p fq(;)o fk(b\).\(a+b\))100 1204 y(prod)121 b fq(=)50 b fm(\025)p fk(\(a)p fq(;)o fk(b\).\(a*b\))100 1260 y(sum)145 b fq(=)50 b fk(id)10 b fq(#)g fm(\025)p fk(\(a)p fq(;)o fk(b\).\(a+sum)22 b(b\))75 1383 y fw(4.6.2)55 b(algorithme)16 b(a)n(v)n(ec)j(placemen)n(t)e(am)o(\023)-27 b(elior)o(\023)g(e)146 1469 y fq(si)17 b(on)g(s'autorise)f(la)i (di\013usion)g(des)f(v)m(aleurs)h(diagonales,)f(nous)g(p)q(ouv)o(ons)g (alors)g(concev)o(oir)g(une)75 1525 y(v)o(ersion)e(plus)g(e\016cace,)g (comme)f(esquiss)o(\023)-21 b(e)14 b(sur)h(la)g(\014gure)f(4.5\(b\).)f (en)h(e\013et,)g(les)h(alignemen)o(ts)h(de)e fm(x)h fq(et)75 1582 y fm(ax)i fq(sur)g(la)h(diagonale)f(fon)o(t)g(que)g(la)h(phase)f (de)h(transp)q(osition)f(devien)o(t)h(in)o(utile.)h(le)e(gain)h (engendr)o(\023)-21 b(e)75 1638 y(est)15 b(imp)q(ortan)o(t)g(d)o(\022) -21 b(es)14 b(lors)i(que)f(l'op)o(\023)-21 b(eration)15 b(est)f(r)o(\023)-21 b(ep)o(\023)g(et)o(\023)g(ee)13 b(de)j(nom)o(breuses)f(fois.)75 1758 y fo(r)o(\023)-25 b(e-alignmen)o(ts)19 b(du)e(v)o(ecteur)146 1843 y fq(l'id)o(\023)-21

b(ee)18 b(de)g(la)h(transformation)d(rep)q(ose)j(sur)f(le)h(r)o(\023) -21 b(e-alignemen)o(t)18 b(de)g fk(b0)g fq(et)g fk(c0)p fq(,)f(que)i(nous)f(allons)75 1900 y(placer)f(sur)g(la)g(diagonale,)g (comme)f(le)i(sugg)o(\022)-21 b(ere)15 b(la)i(\014gure)g(4.5.)e(cette)h (mo)q(di\014cation)i(du)f(placemen)o(t)75 1956 y(du)f(v)o(ecteur)f(v)m (a)g(ensuite)i(guider)f(la)f(reste)g(de)h(la)f(transformation.)146 2069 y(nous)d(c)o(hangeons)g(d'ab)q(ord)g(la)h(d)o(\023)-21 b(e\014nition)13 b(de)g fk(b0)f fq(fonction)g(de)h fk(x)f fq(en)h(appliquan)o(t)g(un)g(c)o(hangemen)o(t)75 2126 y(de)f(base)f(\()o(\023)-21 b(egal)10 b(\022)-23 b(a)11 b(son)h(in)o(v)o(erse\),)f(qui)g(\023)-21 b(ec)o(hange)10 b(les)i(v)m(aleurs)h(plac)o(\023)-21 b(ees)11 b(sur)g(la)h(diagonale)g (et)f(celles)j(plac)o(\023)-21 b(ees)75 2182 y(sur)15 b(la)h(premi)o(\022)-21 b(ere)15 b(ligne)9 b(:)401 2279 y fk(row2diag)j fq(=)49 b fm(\025)p fk(\(i,j\))p ff(j)p fk(\(i)p fq(=)p fk(0)6 b(&)i(0)p ff(\024)p fk(j)p fm(<)p fk(n\).\(j,j\))25 b fq(#)689 2336 y fm(\025)p fk(\(i,j\))p ff(j)p fk(\(i)p ff(6)p fq(=)p fk(0)6 b(&)i(i)p fq(=)p fk(j)g(&)g(0)p ff(\024)p fk(j)p fm(<)p fk(n\).\(0,j\))24 b fq(#)689 2392 y fm(\025)p fk(\(i,j\))p ff(j)p fk(\(i)p ff(6)p fq(=)p fk(0)6 b(&)i(i)p ff(6)p fq(=)p fk(j)g(&)g(0)p ff(\024)p fk(i,j)p fm(<)p fk(n\).\(i,j\))146 2486 y fq(des)15 b(d)o(\023)-21 b(e\014nitions)16 b(10)e(et)i(9,)e(nous)i(obtenons)f(un) h(programme)e(ra\016n)o(\023)-21 b(e)14 b(en)i(rempla\030)-20 b(can)o(t)15 b(toutes)g(les)75 2542 y(o)q(ccurrences)h(de)g fk(b0)f fq(par)g fk(\(row2diag)6 b(::)i(b0\))p fq(:)p eop %%page: 71 73 71 72 bop 75 269 a fl(4.6.)29 b(stra)l(t)336 257 y(\023)330 269 y(egie)16 b(4)7 b(:)15 b(modifica)l(tion)h(des)f(alignements)462 b fq(71)75 471 y fk(gaxpx1')23 b(:)h(\(a,x\))14 b ff(7!)i fk(c)75 485 y fx(8)75 522 y(>)75 535 y(>)75 547 y(>)75 560 y(>)75 572 y(>)75 585 y(>)75 597 y(>)75 610 y(>)75 622 y(>)75 635 y(>)75 647 y(<)75 722 y(>)75 734 y(>)75 747 y(>)75 759 y(>)75 772 y(>)75 784 y(>)75 796 y(>)75 809 y(>)75 821 y(>)75 834 y(>)75 846 y(:)137 526 y fk(a)f fq(=)g fk(matrix)7 b(::)g(a)137 583 y(x)15 b fq(=)g fk(align)7 b(::)h(\(row2diag)e(::)i(b0\))171 b fq(\()p fm(i)p fq(\))137 639 y fk(b)15 b fq(=)g fk(\(row2diag)7 b(::)h(b0)o(\))15 b fa(c)h fk(spread)129 b fq(\()p fm(ii)p fq(\))137 696 y fk(p)15 b fq(=)g fk(prod)g fa(b)g fk(\(a)24 b(/&/)8 b(b\))137 752 y(c0)15 b fq(=)g fk(sum)g fa(b)g fk(\(reduce)23 b fq(;)8 b fa(b)24 b fk(p\))137 809 y(c1)15 b fq(=)g fk(c0)g fa(c)h fk(col2row)137 865 y(c)f fq(=)g fk(add)g fa(b)h fk(\(row2diag)6 b(::)i(b0)24 b(/&/)7 b(c1\))146 973 y fq(le)15 b(nouv)o(el)h(alignemen)o(t)g(de)g fk(b0)f fq(par)g(rapp)q(ort)f(\022)-23 b(a)15 b fk(x)g fq(s'obtien)o(t)g(en)h (appliquan)o(t)g(les)g(r)o(\022)-21 b(egles)7 b(:)100 1106 y(\()p fm(i)p fq(\))174 1077 y fg(\(7)p fw(b)p fg(\))166 1106 y ff(\000)-7 b(!)50 b fk(x)15 b fq(=)h fk(align)9 b ff(\016)h fk(row2diag)c(::)i(b0)166 1174 y ff(\000)-7 b(!)50 b fk(x)15 b fq(=)h fk(align2)6 b(::)i(b0)289 1231 y fq(a)o(v)o(ec)15 b fk(align2)d fq(=)h fk(align)c ff(\016)h fk(row2diag)h fq(=)i fm(\025)p fk(\(i,j\))p ff(j)p fk(\(i=j)6 b(&)i(0)p ff(\024)p fk(j)p fm(<)p fk(n\).\(j\))75 1349 y fq(in)o(tuitiv)o(emen)o(t,)13 b(on)f(constate)g(que)g(le)h(c)o(hamp)g fk(b)f fq(a)g(les)h(m)o(^)-21 b(emes)11 b(v)m(aleurs)i(dans)g(les)g (deux)f(\023)-21 b(enonc)o(\023)g(es,)10 b(mais)75 1406 y(que)18 b(ces)h(v)m(aleurs)g(on)o(t)e(des)h(origines)h(di\013)o(\023) -21 b(eren)o(tes)7 b(;)17 b(ceci)j(est)d(un)i(cas)f(t)o(ypique)g(d')o

(\023)-21 b(equiv)m(alence)20 b(faible.)75 1462 y(de)d(ce)g(fait,)f (nous)h(rempla\030)-20 b(cons)18 b(le)f(mem)o(bre)g(droit)g(de)g(l')o (\023)-21 b(equation)16 b(\()p fm(ii)p fq(\))g(par)g(un)i(c)o(hamp)f (faiblemen)o(t)74 1519 y(\023)-21 b(equiv)m(alen)o(t)16 b(selon)g(les)g(d)o(\023)-21 b(e\014nitions)16 b(9)f(et)g(10)7 b(:)327 1673 y fk(b)13 b fq(=)g fk(\(row2diag)6 b(::)i(\(\(row2diag)f (::)g(b0\))24 b fa(c)g fk(spread)o(\)\))15 b fa(c)h fk(row2diag)75 1827 y fq(nous)c(simpli\014ons)j(main)o(tenan)o(t)d(cette)g(expression) h(p)q(our)g(obtenir)g(une)g(nouv)o(elle)h(expression)f(du)g(rou-)75 1884 y(tage)h(appliqu)o(\023)-21 b(e)17 b(sur)e fk(b0)p fq(.)f(dans)h(ce)h(qui)g(suit,)f fk(i)g fq(d)o(\023)-21 b(enote)14 b(l'iden)o(tit)o(\023)-21 b(e)16 b(dans)f fe(z)1374 1867 y fg(2)1389 1884 y fq(:)223 2001 y fk(b)g fq(=)g fk(\(row2diag)7 b(::)h(\(\(row2diag)e(::)i(b0\))24 b fa(c)g fk(spread)o(\)\))15 b fa(c)g fk(row2diag)106 2056 y fg(\(3)p fw(a)p fg(\))100 2085 y ff(\000)-7 b(!)50 b fk(b)15 b fq(=)g fk(\(row2diag)7 b(::)h(\(row2diag)f(::)g(\(b0)24 b fa(c)g fk(spread2)o(\)\)\))15 b fa(c)g fk(row2diag)223 2153 y fq(car)g fm(dom)p fq(\()p fk(spread)n fq(\))10 b ff([)g fm(img)r fq(\()p fk(spread)n fq(\))j ff(\022)f fm(img)r fq(\()p fk(row2diag)n fq(\))223 2209 y(et)j fm(dom)p fq(\()p fm(v)402 2216 y fr(b0)434 2209 y fq(\))e ff(\022)g fm(dom)p fq(\()p fk(row2diag)n fq(\))i(de)g(\()p fm(i)p fq(\),)223 2266 y(et)g(a)o(v)o(ec)g fk(spread2)f fq(=)h fk(row2diag)9 b ff(\016)h fk(spread)g ff(\016)f fk(row2diag)14 b fq(=)i fm(\025)p fk(\(i,j\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n\).\(j,j\))108 2320 y fg(\(7)p fw(b)p fg(\))100 2349 y ff(\000)-7 b(!)50 b fk(b)15 b fq(=)g fk(\(i)p ff(j)373 2356 y fw(dom)p fg(\()p fr(row2di)q(ag)p fg(\))595 2349 y fk(::)8 b(\(b0)24 b fa(c)g fk(spread2)o(\)\))15 b fa(c)g fk(row2diag)100 2417 y ff(\000)-7 b(!)50 b fk(b)15 b fq(=)g fk(\(b0)24 b fa(c)g fk(spread2)o(\))15 b fa(c)h fk(row2diag)223 2474 y fq(simpli\014cation,)h(car)e fm(dom)p fq(\()p fk(spread2)n fq(\))e ff(\022)g fm(dom)p fq(\()p fk(row2diag)n fq(\))p eop %%page: 72 74 72 73 bop 75 269 a fq(72)521 b fl(chapitre)16 b(4.)45 b(stra)l(t)1144 257 y(\023)1138 269 y(egies)16 b(de)f(transf)o(orma)l (tions)108 377 y fg(\(5)p fw(b)p fg(\))100 406 y ff(\000)-7 b(!)50 b fk(b)15 b fq(=)g fk(b0)g fa(c)h fk(spread2)9 b ff(\016)h fk(row2diag)223 462 y fq(car)15 b fm(img)r fq(\()p fk(row2diag)m fq(\))e ff(\022)g fm(dom)p fq(\()p fk(spread2)n fq(\))f ff(\022)h fm(dom)p fq(\()p fm(\033)1143 469 y fr(b0)1175 462 y fq(\))100 531 y ff(\000)-7 b(!)50 b fk(b)15 b fq(=)g fk(b0)g fa(c)h fk(spread2)223 587 y fq(d)o(\023)-21 b(e\014nition)16 b(de)g fk(spread2)p fq(,)d fk(spread2)f fq(=)h fk(spread2)c ff(\016)h fk(row2diag)75 682 y fq(les)16 b(pr)o(\023)-21 b(ec)o(\023)g(eden)o(ts)14 b(calculs)i(de)g(ra\016nemen)o(t)f(nous)g(am)o(\022)-21 b(enen)o(t)14 b(\022)-23 b(a)7 b(:)75 801 y fk(gaxpx2)23 b(:)h(\(a,x\))14 b ff(7!)i fk(c)75 815 y fx(8)75 852 y(>)75 865 y(>)75 877 y(>)75 890 y(>)75 902 y(>)75 915 y(>)75 927 y(>)75 939 y(>)75 952 y(>)75 964 y(>)75 977 y(<)75 1052 y(>)75 1064 y(>)75 1076 y(>)75 1089 y(>)75 1101 y(>)75 1114 y(>)75 1126 y(>)75 1139 y(>)75 1151 y(>)75 1164 y(>)75 1176 y(:)137 856 y fk(a)f fq(=)g fk(matrix)7 b(::)g(a)137 913 y(x)15 b fq(=)g fk(align2)7 b(::)g(b0)137 969 y(b)15 b fq(=)g fk(b0)g fa(c)h fk(spread2)137 1025 y(p)f fq(=)g fk(prod)g fa(b)g fk(\(a)24 b(/&/)8 b(b\))137

1082 y(c0)15 b fq(=)g fk(sum)g fa(b)g fk(\(reduce)23 b fq(;)8 b fa(b)24 b fk(p\))137 1138 y(c1)15 b fq(=)g fk(c0)g fa(c)h fk(col2row)137 1195 y(c)f fq(=)g fk(add)g fa(b)h fk(\(row2diag)6 b(::)i(b0)24 b(/&/)7 b(c1\))75 1292 y fq(de)16 b(la)g(m)o(^)-21 b(eme)15 b(mani)o(\022)-21 b(ere,)16 b(nous)g(mo)q(di\014ons)h(l'alignemen)o(t)g(de)f fm(ax)g fq(\()p fk(c0)p fq(\))f(en)i(utilisan)o(t)g(le)g(c)o(hangemen)o (t)75 1348 y(de)f(base)7 b(:)354 1473 y fk(col2diag)k fq(=)49 b fm(\025)p fk(\(i,j\))p ff(j)p fk(\(j)p fq(=)p fk(n-1)6 b(&)i(0)p ff(\024)p fk(i)p fm(<)p fk(n\).\(i,i\))25 b fq(#)641 1529 y fm(\025)p fk(\(i,j\))p ff(j)p fk(\(j)p ff(6)p fq(=)p fk(n-1)6 b(&)i(i)p fq(=)p fk(j)g(&)g(0)p ff(\024)p fk(i)p fm(<)p fk(n\).\(i,n-1\))24 b fq(#)641 1586 y fm(\025)p fk(\(i,j\))p ff(j)p fk(\(j)p ff(6)p fq(=)p fk(n-1)6 b(&)i(i)p ff(6)p fq(=)p fk(j)g(&)g(0)p ff(\024)p fk(i,j)p fm(<)p fk(n\).\(i,j\))75 1707 y fq(t)l(oujours)15 b(en)g(utilisan)o(t)i(les)f(d)o(\023)-21 b(e\014nitions)16 b(9)e(et)h(10,)g(nous)g(p)q(ouv)o(ons)g(ra\016ner)g fk(gaxpx2)f fq(en)8 b(:)75 1826 y fk(gaxpx2')23 b(:)h(\(a,x\))14 b ff(7!)i fk(c)75 1840 y fx(8)75 1877 y(>)75 1890 y(>)75 1902 y(>)75 1915 y(>)75 1927 y(>)75 1939 y(>)75 1952 y(>)75 1964 y(>)75 1977 y(>)75 1989 y(>)75 2002 y(<)75 2076 y(>)75 2089 y(>)75 2101 y(>)75 2114 y(>)75 2126 y(>)75 2139 y(>)75 2151 y(>)75 2164 y(>)75 2176 y(>)75 2189 y(>)75 2201 y(:)137 1881 y fk(a)f fq(=)g fk(matrix)7 b(::)g(a)137 1937 y(x)15 b fq(=)g fk(align2)7 b(::)g(b0)137 1994 y(b)15 b fq(=)g fk(b0)g fa(c)h fk(spread2)137 2050 y(p)f fq(=)g fk(prod)g fa(b)g fk(\(a)24 b(/&/)8 b(b\))137 2107 y(col2diag)e(::)i(c0)14 b fq(=)i fk(sum)f fa(b)g fk(\(reduce)23 b fq(;)8 b fa(b)24 b fk(p)o(\))50 b fq(\()p fm(iii)p fq(\))137 2163 y fk(c1)15 b fq(=)g fk(\(col2diag)7 b(::)h(c0)o(\))15 b fa(c)h fk(col2row)183 b fq(\()p fm(iv)r fq(\))137 2220 y fk(c)15 b fq(=)g fk(add)g fa(b)h fk(\(row2diag)6 b(::)i(b0)24 b(/&/)7 b(c1\))75 2316 y fq(comme)14 b(le)i(mon)o(tre)e (la)i(\014gure)f(4.5\(b\),)e(les)j(v)m(aleurs)g(de)f fk(p)g fq(son)o(t)f(rassem)o(bl)o(\023)-21 b(ees)14 b(sur)h(la)h (diagonale)f(p)q(our)75 2373 y(former)22 b fk(c0)p fq(.)f(les)i(c)o (hamps)g fk(p)f fq(et)g fk(\(col2diag)7 b(::)h(p)o(\))15 b fa(c)h fk(col2diag)21 b fq(son)o(t)h(faiblemen)o(t)g(\023)-21 b(equiv)m(alen)o(ts.)75 2429 y(nous)14 b(obtenons)g(une)h(nouv)o(elle)h (r)o(\023)-21 b(eduction)14 b(en)h(appliquan)o(t)g(les)f(\023)-21 b(etap)q(es)14 b(suiv)m(an)o(tes)h(de)f(ra\016nemen)o(t)g(\022)-23 b(a)75 2486 y(cette)15 b(expression)9 b(:)p eop %%page: 73 75 73 74 bop 75 269 a fl(4.6.)29 b(stra)l(t)336 257 y(\023)330 269 y(egie)16 b(4)7 b(:)15 b(modifica)l(tion)h(des)f(alignements)462 b fq(73)223 391 y fk(col2diag)6 b(::)i(c0)15 b fq(=)g fk(sum)g fa(b)g fk(\(reduce)23 b fq(;)8 b fa(b)24 b fk(\(\(col2diag)6 b(::)i(p\))24 b fa(c)g fk(col2diag)o(\)\))106 446 y fg(\(3)p fw(a)p fg(\))100 474 y ff(\000)-7 b(!)50 b fk(col2diag)6 b(::)i(c0)15 b fq(=)g fk(sum)g fa(b)g fk(\(reduce)23 b fq(;)8 b fa(b)24 b fk(\(col2diag)6 b(::)i(\(p)24 b fa(c)g fk(col2diag)o(\)\)\))223 531 y fq(car)15 b fm(dom)p fq(\()p fm(v)425 538 y fr(p)442 531 y fq(\))d ff(\022)h fm(dom)p fq(\()p fk(cold2diag)n fq(\))108 585 y fg(\(3)p fw(c)p fg(\))100 614 y ff(\000)-7 b(!)50 b fk(col2diag)6 b(::)i(c0)15 b fq(=)g fk(sum)g fa(b)g fk(\(col2diag)7 b(::)h(\(reduce2)23 b fq(;)8 b fa(b)23 b fk(\(p)h fa(c)g fk(col2diag)o(\)\))o(\))223 670 y fq(renommage)7 b(:)15 b fk(reduce2)35 b fq(=)13 b fk(col2diag)c ff(\016)g fk(reduce)h

ff(\016)g fk(col2diag)689 727 y fq(=)j fm(\025)p fk(\(i,j\))p ff(j)p fk(\(0)p ff(\024)p fk(i)p fm(<)p fk(n)6 b(&)i(0)p ff(\024)p fk(j)p fm(<)p fk(n\).\(i,i\))106 781 y fg(\(1)p fw(a)p fg(\))100 810 y ff(\000)-7 b(!)50 b fk(col2diag)6 b(::)i(c0)15 b fq(=)g fk(col2diag)7 b(::)g(\(sum)23 b fa(b)h fk(\(reduce2)f fq(;)8 b fa(b)24 b fk(\(p)f fa(c)h fk(col2diag)o(\)\)\))107 865 y fg(\()p fw(i)r(i)r fg(\))100 893 y ff(\000)-7 b(!)50 b fk(c0)15 b fq(=)g fk(sum)g fa(b)h fk(\(reduce2)22 b fq(;)8 b fa(b)24 b fk(\(p)f fa(c)i fk(col2diag)n(\)\))223 950 y fq(car)15 b fm(dom)p fq(\()p fm(v)425 957 y fr(c0)457 950 y fq(\))d ff(\022)h fm(dom)p fq(\()p fk(col2diag)o fq(\))h(de)i(l')o(\023)-21 b(equation)15 b(\()p fm(iv)r fq(\))75 1098 y(les)e(r)o(\023)-21 b(e)o(\023)g(ecritures)11 b(suiv)m(an)o(tes)i(nous)g(p)q(ermetten)o(t)f (de)h(supprimer)g(le)g(routage)f fk(col2diag)f fq(de)i(la)f(derni)o (\022)-21 b(ere)75 1154 y(expression)8 b(:)162 1313 y ff(\000)-7 b(!)51 b fk(c0)14 b fq(=)i fk(sum)f fa(b)g fk(\(reduce2)9 b ff(\016)h fk(col2diag)23 b fq(;)8 b fa(b)23 b fk(\(p)h fa(c)g fk(col2diag)o(\)\))286 1369 y fq(car)14 b fk(reduce2)23 b(=)h(reduce2)9 b ff(\016)h fk(col2diag)100 1412 y fg(\(6)p fw(;pr)q(op)p fg(1\))131 1441 y ff(\000)-7 b(!)82 b fk(c0)14 b fq(=)i fk(sum)f fa(b)g fk(\(reduce2)23 b fq(;)8 b fa(b)23 b fk(\(\(p)h fa(c)g fk(col2diag)o(\))g fa(c)g fk(col2diag)o(\)\))286 1497 y fq(car)14 b fk(col2diag)g fq(est)g(\023)-21 b(egale)15 b(\022)-23 b(a)15 b(son)g(in)o(v)o(erse)171 1540 y fg(\(5)p fw(b)p fg(\))162 1568 y ff(\000)-7 b(!)51 b fk(c0)14 b fq(=)i fk(sum)f fa(b)g fk(\(reduce2)23 b fq(;)8 b fa(b)23 b fk(\(p)h fa(c)g fk(i)p ff(j)998 1575 y fw(dom)p fg(\()p fr(col2dia)q(g)p fg(\))1212 1568 y fk(\)\))286 1625 y fq(car)14 b fm(dom)p fq(\()p fk(col2diag)o fq(\))e ff(\022)h fm(dom)p fq(\()p fm(\033)864 1632 y fr(p)881 1625 y fq(\))162 1693 y ff(\000)-7 b(!)51 b fk(c0)14 b fq(=)i fk(sum)f fa(b)g fk(\(reduce2)23 b fq(;)8 b fa(b)23 b fk(p\))286 1761 y fq(simpli\014cation,)17 b(car)40 b fm(img)r fq(\()p fk(col2diag)m fq(\))12 b ff(\022)h fm(dom)p fq(\()p fm(v)1171 1768 y fr(p)1188 1761 y fq(\))680 1818 y fm(dom)p fq(\()p fk(col2diag)n fq(\))f ff(\022)h fm(dom)p fq(\()p fm(\033)1182 1825 y fr(p)1199 1818 y fq(\))75 1954 y(nous)i(a)o(v)o(ons)f(donc)8 b(:)75 2125 y fk(gaxpx3)23 b(:)h(\(a,x\))14 b ff(7!)i fk(c)75 2140 y fx(8)75 2177 y(>)75 2189 y(>)75 2202 y(>)75 2214 y(>)75 2227 y(>)75 2239 y(>)75 2252 y(>)75 2264 y(>)75 2277 y(>)75 2289 y(>)75 2301 y(<)75 2376 y(>)75 2389 y(>)75 2401 y(>)75 2414 y(>)75 2426 y(>)75 2438 y(>)75 2451 y(>)75 2463 y(>)75 2476 y(>)75 2488 y(>)75 2501 y(:)137 2181 y fk(a)f fq(=)g fk(matrix)7 b(::)g(a)137 2237 y(x)15 b fq(=)g fk(align2)7 b(::)g(b0)137 2294 y(b)15 b fq(=)g fk(b0)g fa(c)h fk(spread2)137 2350 y(p)f fq(=)g fk(prod)g fa(b)g fk(\(a)24 b(/&/)8 b(b\))137 2407 y(c0)15 b fq(=)g fk(sum)g fa(b)g fk(\(reduce2)23 b fq(;)8 b fa(b)24 b fk(p)o(\))137 2463 y(c1)15 b fq(=)g fk(\(col2diag)7 b(::)h(c0)o(\))15 b fa(c)h fk(col2row)57 b fq(\()p fm(v)r(i)p fq(\))137 2520 y fk(c)15 b fq(=)g fk(add)g fa(b)h fk(\(row2diag)6 b(::)i(b0/&/)f(c1\))p eop %%page: 74 76 74 75 bop 75 269 a fq(74)521 b fl(chapitre)16 b(4.)45 b(stra)l(t)1144 257 y(\023)1138 269 y(egies)16 b(de)f(transf)o(orma)l (tions)75 397 y fo(suppression)i(de)g(la)i(transp)q(osition)146 527 y fq(in)o(tuitiv)o(emen)o(t,)g(nous)h(observ)o(ons)f(que)g fk(c0)g fq(et)h fk(b0)f fq(son)o(t)f(tous)h(les)h(deux)g(align)o(\023)

-21 b(es)20 b(sur)f(la)g(diago-)75 583 y(nale,)i(et)f(qu'ainsi)i(la)f (transp)q(osition)g(d)o(\023)-21 b(e\014nie)21 b(par)f fk(col2row)g fq(est)g(in)o(utile.)i(comme)e fk(b0)g fq(est)g(align)o (\023)-21 b(e)75 640 y(par)20 b fk(row2diag)p fq(,)f(nous)h(dev)o(ons)g (in)o(tro)q(duire)i fk(row2diag)d fq(dans)h(l'expression)i(de)e fk(c0)p fq(.)g(l'id)o(\023)-21 b(ee)20 b(est)g(de)75 696 y(d)o(\023)-21 b(ecomp)q(oser)12 b fk(col2diag)g fq(\022)-23 b(a)12 b(l'aide)i(de)f fk(row2diag)p fq(.)e(puisque)j fk(col2diag)d fq(r)o(\023)-21 b(e-aligne)13 b fk(b0)g fq(sur)f(la)h(derni)o(\022)-21 b(ere)75 753 y(colonne,)21 b(nous)g(dev)o(ons)g(compl)o(\023)-21 b(eter)20 b fk(row2diag)g fq(par)g(un)i(c)o(hangemen)o(t)e(de)h(base)g(qui)g(\023)-21 b(ec)o(hange)20 b(les)75 809 y(v)m(aleurs)c(plac)o(\023)-21 b(ees)15 b(sur)f(la)h(derni)o(\022)-21 b(ere)15 b(colonne)h(a)o(v)o(ec) e(celles)j(de)e(la)g(premi)o(\022)-21 b(ere)15 b(ligne.)g(app)q(elons)i fk(row2col)75 866 y fq(le)f(c)o(hangemen)o(t)f(de)h(base)7 b(:)366 1036 y fk(row2col)k fq(=)49 b fm(\025)p fk(\(i,j\))p ff(j)p fk(\(j)p fq(=)p fk(n-1)6 b(&)i(0)p ff(\024)p fk(i)p fm(<)p fk(n\).\(0,i\))25 b fq(#)629 1092 y fm(\025)p fk(\(i,j\))p ff(j)p fk(\(j)p ff(6)p fq(=)p fk(n-1)6 b(&)i(i)p fq(=)p fk(0)g(&)g(0)p ff(\024)p fk(j)p fm(<)p fk(n\).\(j,n-1\))24 b fq(#)629 1149 y fm(\025)p fk(\(i,j\))p ff(j)p fk(\(j)p ff(6)p fq(=)p fk(n-1)6 b(&)i(i)p ff(6)p fq(=)p fk(0)g(&)g(0)p ff(\024)p fk(i,j)p fm(<)p fk(n\).\(i,j\))146 1338 y fq(comme)15 b fk(col2diag)g fq(et)g fk(row2col)9 b ff(\016)h fk(row2diag)15 b fq(son)o(t)f(\023)-21 b(egales)15 b(sur)h(le)h(domaine)f(de)g(v)m (aleur)h(de)f fk(c0)p fq(,)75 1394 y(les)j(c)o(hamps)f fk(col2diag)7 b(::)g(c0)18 b fq(et)g fk(row2col)9 b ff(\016)h fk(row2diag)d(::)g(c0)18 b fq(son)o(t)g(faiblemen)o(t)g(\023)-21 b(equiv)m(alen)o(ts.)19 b(de)75 1451 y(plus,)d fk(row2col)9 b ff(\016)h fk(row2diag)c(::)h(c0)15 b fq(p)q(eut)g(^)-21 b(etre)14 b(r)o(\023)-21 b(e)o(\023)g(ecrit)13 b fk(row2col)7 b(::)g(\(row2diag)g(::)h(c0)o(\))15 b fq(\022)-23 b(a)15 b(l'aide)h(de)75 1507 y(la)c(r)o(\022)-21 b(egle)11 b(\(7a\),)g(et)g fk(col2row)g fq(est)g(\023)-21 b(egal)11 b(\022)-23 b(a)11 b fk(row2col)g fq(sur)h(la)g(premi)o(\022)-21 b(ere)12 b(ligne)h(\(i.e.)e(le)i(domaine)f(de)h(v)m(aleurs)75 1563 y(de)19 b fk(row2diag)7 b(::)g(c0)p fq(\).)18 b(p)o(ar)f(cons)o (\023)-21 b(equen)o(t,)18 b(nous)h(p)q(ouv)o(ons)g(conclure)h(que)f (les)g(c)o(hamps)g(de)g(donn)o(\023)-21 b(ees)75 1620 y fk(c1)18 b fq(et)h fk(row2diag)6 b(::)i(c0)18 b fq(son)o(t)g (faiblemen)o(t)h(\023)-21 b(equiv)m(alen)o(ts.)19 b(ceci)g(nous)g(p)q (ermet)g(d'obtenir)g(le)h(nouv)o(el)74 1676 y(\023)-21 b(enonc)o(\023)g(e)15 b fk(gaxpx3)g fq(en)i(substituan)o(t)f(la)g(d)o (\023)-21 b(e\014nition)17 b(de)f fk(c1)g fq(par)g fk(row2diag)7 b(::)g(c0)16 b fq(en)g(utilisan)o(t)h(l'impli-)75 1733 y(cation)e(mo)q(dulo)h(l')o(\023)-21 b(equiv)m(alence)17 b(faible)g(\(d)o(\023)-21 b(e\014nition)16 b(10\):)75 1868 y fk(gaxpx3')23 b(:)h(\(a,x\))14 b ff(7!)i fk(c)75 1890 y fx(8)75 1927 y(>)75 1940 y(>)75 1952 y(>)75 1965 y(>)75 1977 y(>)75 1990 y(>)75 2002 y(>)75 2015 y(<)75 2089 y(>)75 2102 y(>)75 2114 y(>)75 2127 y(>)75 2139 y(>)75 2152 y(>)75 2164 y(>)75 2177 y(:)137 1922 y fk(a)f fq(=)g fk(matrix)7 b(::)g(a)137 1979 y(x)15 b fq(=)g fk(align2)7 b(::)g(b0)137 2035 y(b)15 b fq(=)g fk(b0)g fa(c)h fk(spread2)137 2092 y(p)f fq(=)g fk(prod)g fa(b)g fk(\(a)24 b(/&/)8 b(b\))137 2148 y(c0)15 b fq(=)g fk(sum)g fa(b)g fk(\(reduce2)23 b fq(;)8 b fa(b)24 b fk(p)o(\))137 2204 y(c)15 b fq(=)g fk(add)g fa(b)h fk(\(row2diag)6 b(::)i(b0)24 b(/&/)7 b(row2diag)g(::)h(c0)o(\))75 2316

y fq(l')o(\023)-21 b(enonc)o(\023)g(e)19 b(\014nal)i(est)g(obten)o(u)f (en)h(appliquan)o(t)g(les)g(r)o(\022)-21 b(egles)20 b(\(11a\),)f (\(1a\))g(sur)h(la)h(derni)o(\022)-21 b(ere)20 b(\023)-21 b(equation,)75 2373 y(a\014n)19 b(de)g(factoriser)g(le)g(c)o(hangemen)o (t)g(de)g(base)g fk(row2diag)f fq(dans)h(la)g(partie)g(droite.)g(on)g (p)q(eut)h(alors)75 2429 y(simpli\014er)h(l')o(\023)-21 b(equation)18 b(en)i(rempla\030)-20 b(can)o(t)18 b(l'unique)j(o)q (ccurrence)f(de)f fk(c)g fq(par)f fk(row2diag)7 b(::)g(c)p fq(,)18 b(puis)i(en)75 2486 y(appliquan)o(t)c(la)g(r)o(\022)-21 b(egle)14 b(\(i)q(i\).)p eop %%page: 75 77 75 76 bop 75 269 a fl(4.6.)29 b(stra)l(t)336 257 y(\023)330 269 y(egie)16 b(4)7 b(:)15 b(modifica)l(tion)h(des)f(alignements)462 b fq(75)177 377 y fg(\(11)p fw(a)p fg(\))179 406 y ff(\000)-7 b(!)52 b fk(c)15 b fq(=)g fk(add)g fa(b)h fk(\(row2diag)6 b(::)i(\(b0)23 b(/&/)8 b(c0\)\))187 449 y fg(\(1)p fw(a)p fg(\))181 477 y ff(\000)-8 b(!)51 b fk(c)15 b fq(=)g fk(row2diag)7 b(::)g(\(add)23 b fa(b)i fk(\(b0)e(/&/)8 b(c0\))o(\))170 517 y fw(pr)q(op)p fg(2)176 544 y ff(\000)-8 b(!)56 b fk(row2diag)6 b(::)i(c)15 b fq(=)g fk(row2diag)7 b(::)g(\(add)23 b fa(b)h fk(\(b0)g(/&/)7 b(c0\)\))304 600 y fq(car)15 b fm(dom)p fq(\()p fm(\033)510 607 y fr(c)526 600 y fq(\))e ff(\022)g fm(img)r fq(\()p fk(row2diag)m fq(\))187 655 y fg(\()p fw(i)r(i)r fg(\))181 684 y ff(\000)-8 b(!)51 b fk(c)15 b fq(=)g fk(add)g fa(b)h fk(\(b0)23 b(/&/)8 b(c0\))304 740 y fq(car)15 b fm(dom)p fq(\()p fm(\033)510 747 y fr(c)526 740 y fq(\))e ff(\022)g fm(dom)p fq(\()p fk(row2diag)n fq(\))75 830 y(nous)18 b(obtenons)h(\014nalemen)o (t)g(un)g(programme)e(ra\016n)o(\023)-21 b(e,)17 b(don)o(t)h(le)h(v)o (ecteur)g(est)f(initialemen)o(t)i(align)o(\023)-21 b(e)75 886 y(sur)15 b(la)h(diagonale)8 b(:)75 999 y fk(gaxpx4)23 b(:)h(\(a,x\))14 b ff(7!)i fk(c)75 1021 y fx(8)75 1058 y(>)75 1070 y(>)75 1083 y(>)75 1095 y(>)75 1108 y(>)75 1120 y(>)75 1133 y(>)75 1145 y(<)75 1220 y(>)75 1232 y(>)75 1245 y(>)75 1257 y(>)75 1270 y(>)75 1282 y(>)75 1295 y(>)75 1307 y(:)137 1053 y fk(a)f fq(=)g fk(matrix)7 b(::)g(a)137 1109 y(x)15 b fq(=)g fk(align2)7 b(::)g(b0)137 1166 y(b)15 b fq(=)g fk(b0)g fa(c)h fk(spread2)137 1222 y(p)f fq(=)g fk(prod)g fa(b)g fk(\(a)24 b(/&/)8 b(b\))137 1278 y(c0)15 b fq(=)g fk(sum)g fa(b)g fk(\(reduce2)23 b fq(;)8 b fa(b)24 b fk(p)o(\))137 1335 y(c)15 b fq(=)g fk(add)g fa(b)h fk(\(b0/&/)7 b(c0\))100 1407 y(align2)73 b fq(=)50 b fm(\025)p fk(\(i,j\))p ff(j)p fk(\(i)p fq(=)p fk(j)6 b(&)i(0)p ff(\024)p fk(j)p fm(<)p fk(n\).\(j\))100 1464 y(spread2)49 b fq(=)h fm(\025)p fk(\(i,j\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n\).\(j,j\))100 1520 y(reduce2)f fq(=)h fm(\025)p fk(\(i,j\))p ff(j)p fk(\(0)p ff(\024)p fk(i,j)p fm(<)p fk(n\).\(i,i\))p eop %%page: 76 78 76 77 bop 75 269 a fq(76)521 b fl(chapitre)16 b(4.)45 b(stra)l(t)1144 257 y(\023)1138 269 y(egies)16 b(de)f(transf)o(orma)l (tions)p eop %%page: 77 79 77 78 bop 1801 269 a fq(77)75 718 y fi(chapitre)32 b(5)75 935 y fh(pei)38 b fp(et)h(les)g(langages)g(data-parall)m(\022)-56 b(el)q(es)146 1168 y fq(nous)18 b(a)o(v)o(ons)f(mon)o(tr)o(\023)-21 b(e)16 b(dans)j([21)o(])e(que)i(le)g(formalisme)f fn(pei)g fq(et)g(le)h(mo)q(d)o(\022)-21 b(ele)18 b(de)h(programmation)75 1224 y(data-parall)o(\022)-21 b(ele)19 b(pr)o(\023)-21 b(esen)o(ten)o(t)17 b(de)i(nom)o(breuses)g(similitudes.)i(les)e(ob)s

(jets)f(manipul)o(\023)-21 b(es)19 b(son)o(t)f(dans)h(les)75 1281 y(deux)f(cas)f(des)g(ensem)o(bles)h(de)g(v)m(aleurs)8 b(:)17 b(les)h(c)o(hamps)f(de)g(donn)o(\023)-21 b(ees)17 b(en)g fn(pei)g fq(et)g(les)h(v)m(ariables)g(paral-)75 1337 y(l)o(\022)-21 b(eles)11 b(dans)g(les)g(langages)f(data-parall)o (\022)-21 b(eles.)11 b(la)f(manipulation)i(de)f(ces)g(ob)s(jets)f (passe)g(par)h(l'application)75 1394 y(d'op)o(\023)-21 b(erations)11 b(globales)i(de)g(trois)f(t)o(yp)q(es)c(:)k(la)h(mo)q (di\014cation)g(des)g(v)m(aleurs)g(\(le)g(calcul)h(d)o(\023)-21 b(e\014ni)13 b(en)g fn(pei)f fq(par)75 1450 y(l'op)o(\023)-21 b(eration)16 b(fonctionnelle\),)j(le)f(r)o(\023)-21 b(earrangemen)o(t) 15 b(des)j(v)m(aleurs)g(dans)g(l'ensem)o(ble)g(\(les)g(comm)o(unica-)75 1506 y(tions)c(d)o(\023)-21 b(e\014nies)15 b(en)g fn(pei)f fq(par)g(l'op)o(\023)-21 b(eration)14 b(g)o(\023)-21 b(eom)o(\023)g(etrique\))12 b(ou)i(le)h(placemen)o(t)g(d'un)g(ob)s(jet) e(par)h(rapp)q(ort)75 1563 y(\022)-23 b(a)15 b(un)h(autre)e(\(l'op)o (\023)-21 b(eration)14 b(de)i(c)o(hangemen)o(t)f(de)h(base)f(en)h fn(pei)p fq(\).)146 1686 y(il)j(sem)o(ble)h(alors)f(naturel)g(de)h(c)o (herc)o(her)f(\022)-23 b(a)18 b(v)o(\023)-21 b(eri\014er)19 b(et)g(pr)o(\023)-21 b(eciser)19 b(ces)g(similitudes,)i(et)e(il)h(nous) f(a)75 1742 y(sem)o(bl)o(\023)-21 b(e)16 b(que)h(l')o(\023)-21 b(etude)16 b(du)g(passage)g(d'un)f(\023)-21 b(enonc)o(\023)g(e)15 b fn(pei)h fq(\022)-23 b(a)16 b(un)h(programme)e(data-parall)o(\022)-21 b(ele)16 b(p)q(ermette)75 1799 y(de)e(con\014rmer)g(les)h(liens)h (existan)o(ts,)d(ou)h(de)g(mettre)f(en)i(a)o(v)m(an)o(t)e(les)h(di\013) o(\023)-21 b(erences.)14 b(nous)g(exp)q(osons)g(donc)75 1855 y(dans)22 b(ce)g(c)o(hapitre)h(les)f(princip)q(es)j(qui)d(dirigen) o(t)h(la)f(traduction)h(des)f(programmes)f fn(pei)g fq(v)o(ers)h(les)75 1911 y(langages)c(data-parall)o(\022)-21 b(eles.)19 b(un)f(premier)i (protot)o(yp)q(e)d(de)i(traducteur)g(\022)-23 b(a)17 b(\023)-21 b(et)o(\023)g(e)16 b(r)o(\023)-21 b(ealis)o(\023)g(e)18 b(p)q(our)g(g)o(\023)-21 b(en)o(\023)g(erer)75 1968 y(du)15 b(co)q(de)g fj(high)h(performanc)n(e)f(f)m(ortr)n(an)f fq(\(hpf\))f(\022)-23 b(a)14 b(partir)h(de)g(programmes)e fn(pei)p fq(.)h(le)h(c)o(hoix)g(de)g(hpf)75 2024 y(comme)k(langage)g (cible)i(a)d(\023)-21 b(et)o(\023)g(e)18 b(motiv)o(\023)-21 b(e)18 b(par)h(la)g(forte)g(probabilit)o(\023)-21 b(e)20 b(qu'il)g(devienne)h(une)f(norme)f(en)75 2081 y(mati)o(\022)-21 b(ere)14 b(de)i(langages)f(data-parall)o(\022)-21 b(eles)15 b(p)q(our)h(la)f(programmation)f(d'applications)j(scien)o(ti\014ques.) 146 2147 y(nous)f(pr)o(\023)-21 b(esen)o(tons)15 b(rapidemen)o(t)h(le)h (langage)f(hpf,)g(puis)h(nous)f(le)h(comparons)e(aux)h(autres)g(lan-)75 2204 y(gages)i(data-parall)o(\022)-21 b(eles)18 b(existan)o(ts,)g(en)g (mettan)o(t)g(en)g(a)o(v)m(an)o(t)g(certains)h(asp)q(ects)f(s)o(\023) -21 b(eman)o(tiques)18 b(qui)h(le)75 2260 y(distinguen)o(t)13 b(de)f(ces)f(autres)g(langages.)h(p)o(ar)e(la)i(suite)g(nous)g(exp)q (osons)g(les)g(princip)q(es)i(de)e(la)f(traduction)75 2316 y(de)18 b fn(pei)f fq(v)o(ers)g(hpf,)g(notammen)o(t)f(ceux)i (implan)o(t)o(\023)-21 b(es)18 b(dans)f(le)i(protot)o(yp)q(e)d(r)o (\023)-21 b(ealis)o(\023)g(e)17 b(dans)g(le)i(cadre)e(de)75 2373 y(ce)g(tra)o(v)m(ail.)f(l'ob)s(jectif)g(premier)i(de)e(la)h(r)o (\023)-21 b(ealisation)16 b(de)h(ce)g(traducteur)f(est)g(de)h(pro)q (duire)g(des)g(co)q(des)75 2429 y(data-parall)o(\022)-21 b(eles)14 b(exploitables)i(par)e(un)h(compilateur)g(commercial.)g(av)o (ec)f(l'aide)h(de)g(cet)f(outil,)g(il)i(est)75 2486 y(p)q(ossible)d (d'observ)o(er)d(les)i(cons)o(\023)-21 b(equences)12 b(des)f(transformations)f fn(pei)h fq(sur)g(un)g(co)q(de)h(data-parall) o(\022)-21 b(ele.)11 b(le)75 2542 y(traducteur)i(autorise)g(ainsi)h (indirectemen)o(t)g(de)g(faire)f(de)g(la)g(transformation)f(de)h (programmes)f(data-)p eop

%%page: 78 80 78 79 bop 75 269 a fq(78)404 b fl(chapitre)16 b(5.)30 b fn(pei)15 b fl(et)g(les)g(langa)o(ges)g(d)o(a)l(t)l(a-p)l(arall)1735 257 y(\022)1729 269 y(eles)75 397 y fq(parall)o(\022)-21 b(eles.)18 b(en\014n,)h(nous)f(v)o(errons)f(qu'il)j(est)d(capable,)i (mo)o(y)o(ennan)o(t)e(des)i(mo)q(di\014cations)g(mineures,)75 453 y(de)d(g)o(\023)-21 b(en)o(\023)g(erer)13 b(du)j(co)q(de)f (data-parall)o(\022)-21 b(ele)16 b(p)q(our)f(d'autres)g(compilateurs)h (existan)o(ts.)75 690 y ft(5.1)66 b(pr)o(\023)-32 b(esen)n(tation)22 b(d'hpf)146 823 y fq(nous)17 b(ne)h(faisons)f(ici)i(qu'un)e(exp)q(os)o (\023)-21 b(e)17 b(succinct)i(et)e(partiel)h(du)g(langage)g(hpf,)e(et)h (nous)h(encou-)75 879 y(rageons)f(le)i(lecteur)f(\022)-23 b(a)18 b(consulter)g([32)o(])g(p)q(our)g(une)g(pr)o(\023)-21 b(esen)o(tation)17 b(exhaustiv)o(e,)h(ainsi)h(que)f([52)o(])f(p)q(our) 75 936 y(a)o(v)o(oir)d(un)i(ap)q(er\030)-20 b(cu)16 b(des)g(futures)f (orien)o(tations)g(de)g(d)o(\023)-21 b(ev)o(elopp)q(emen)o(t.)146 1065 y(le)14 b(langage)g(hpf)g(est)g(un)h(langage)f fj(data-p)n(ar)n (al)r(l)o(\022)-22 b(ele)p fq(.)14 b(les)h(langages)f(data-parall)o (\022)-21 b(eles)14 b(reprennen)o(t)75 1121 y(l'id)o(\023)-21 b(ee,)19 b(issue)g(du)g(langage)g(apl)g([29)o(],)f(de)h(p)q(ouv)o(oir)g (manipuler)h(directemen)o(t)g(non)f(seulemen)o(t)g(des)75 1178 y(v)m(ariables)12 b(scalaires,)g(mais)f(aussi)g(des)g(collections) i(de)e(v)m(aleurs,)h(habituellemen)o(t)h(des)e(tableaux.)g(cette)75 1234 y(id)o(\023)-21 b(ee)21 b(a)f(\023)-21 b(et)o(\023)g(e)19 b(reprise)j(dans)f(f)l(ortran90)e(\022)-23 b(a)21 b(tra)o(v)o(ers)e (les)j(expressions)g(de)f(tableaux.)g(on)h(p)q(eut)f(ainsi)75 1291 y(exprimer)12 b(l'addition)i(de)e(deux)g(matrices)g fk(a)f fq(et)h fk(b)f fq(par)h(la)g(simple)g(\023)-21 b(ecriture)12 b fk(a+b)p fq(.)f(la)g(parall)o(\023)-21 b(elisation)13 b(de)75 1347 y(telles)h(expressions)g(sem)o(ble)g(alors) e(naturelle)d(:)k(on)g(p)q(eut)h(imaginer)f(que)h(le)f(compilateur)h (distribue)h(les)75 1404 y(v)m(aleurs)d(des)f(tableaux)g(sur)g (plusieurs)i(pro)q(cesseurs)e(et)g(applique)i(le)f(m)o(^)-21 b(eme)10 b(traitemen)o(t)g(en)h(parall)o(\022)-21 b(ele)12 b(\022)-23 b(a)75 1460 y(c)o(hacune)13 b(des)f(v)m(aleurs.)h(les)g (collections)g(de)g(v)m(aleurs)g(p)q(euv)o(en)o(t)g(alors)d(^)-21 b(etre)11 b(vues)i(comme)f(des)g fj(variables)75 1516 y(p)n(ar)n(al)r(l)o(\022)-22 b(eles)p fq(.)15 b(le)i(programmeur)f (disp)q(ose)h(d'un)g(mo)q(d)o(\022)-21 b(ele)17 b(de)g(programmation)e (pro)q(c)o(he)i(de)g(celui)h(d'un)75 1573 y(langage)d(s)o(\023)-21 b(equen)o(tiel,)16 b(en)f(manipulan)o(t)h(les)g(ob)s(jets)f(parall)o (\022)-21 b(eles)16 b(comme)f(des)g(scalaires.)75 1788 y fw(5.1.1)55 b(op)o(\023)-27 b(erations)18 b(parall)o(\022)-27 b(eles)146 1905 y fq(comme)21 b(tous)h(les)i(langages)e(data-parall)o (\022)-21 b(eles,)22 b(et)g(notammen)o(t)g(f)l(ortran)14 b(90)o(,)22 b(un)h(traitemen)o(t)75 1961 y(parall)o(\022)-21 b(ele)21 b(en)g(hpf)f(est)g(sp)o(\023)-21 b(eci\014)o(\023)g(e)20 b(par)g(l'application)i(d'une)f(op)o(\023)-21 b(eration)19 b fj(sc)n(alair)n(e)h fq(sur)g(un)h(tableau.)75 2018 y(l'op)o(\023)-21 b(eration)11 b(est)g(alors)h(e\013ectu)o(\023)-21 b(ee)11 b(sur)h(tous)g(\(ou)f(une)i(partie\))e(les)h(\023)-21 b(el)o(\023)g(emen)o(ts)10 b(du)j(tableau)f(en)g(parall)o(\022)-21 b(ele.)75 2074 y(si)17 b(plusieurs)i(tableaux)e(son)o(t)f(impliqu)o (\023)-21 b(es)18 b(dans)f(l'op)o(\023)-21 b(eration,)15 b(ils)j(doiv)o(en)o(t)e(^)-21 b(etre)15 b fj(c)n(onformes)p fq(,)h(c'est-\022)-23 b(a-)75 2131 y(dire)15 b(^)-21 b(etre)14 b(de)i(m)o(^)-21 b(eme)14 b(dimension)j(et)e(a)o(v)o(oir)f (la)i(m)o(^)-21 b(eme)14 b(taille)j(dans)e(toutes)g(les)h(dimensions.) 146 2204 y(l'op)o(\023)-21 b(eration)19 b(p)q(eut)j(n')o(^)-21 b(etre)19 b(appliqu)o(\023)-21 b(ee)22 b(que)f(sur)g(une)g(section)h

(de)f(tableau,)g(not)o(\023)-21 b(ee)20 b(comme)g(en)75 2260 y(f)l(ortran)14 b(90)o(,)j(p)q(our)g(c)o(haque)h(dimension,)g(par) f(un)g(triplet)h fk(\()p fj(b)n(orne)f(inf)o(\023)-22 b(erieur)n(e)7 b fk(:)17 b fj(b)n(orne)h(sup)o(\023)-22 b(erieur)n(e)8 b fk(:)75 2316 y fj(p)n(as)15 b fk(\))p fq(,)g(o)q(\022)-24 b(u)15 b fj(p)n(as)g fq(est)h(optionnel.)g(p)o(our) f(un)h(tableau)f fk(t)p fq(,)g fk(t\()p fm(x)p fk(:)p fm(y)r fk(:)p fm(p)p fk(\))g fq(d)o(\023)-21 b(esigne)15 b(les)g(\023)-21 b(el)o(\023)g(emen)o(ts)14 b(de)i(tableau)75 2373 y fk(t\()p fm(i)p fk(\))i fq(tels)g(que)h fm(x)f ff(\024)g fm(i)f ff(\024)i fm(y)14 b ff(^)e fq(\()p fm(i)g ff(\000)g fm(x)p fq(\))18 b fm(mod)g(p)g fq(=)g(0.)f(ainsi)j(la)f (section)g fk(a\(2,3:10:3\))d fq(d)o(\023)-21 b(esigne)19 b(les)74 2429 y(\023)-21 b(el)o(\023)g(emen)o(ts)13 b(de)i(la)f(ligne)i (2,)e(colonnes)h(3,)e(6)h(et)g(9.)g(notons)g(aussi)g(que)h fk(t\(:\))f fq(d)o(\023)-21 b(esigne)14 b(tous)g(les)g(\023)-21 b(el)o(\023)g(emen)o(ts)75 2486 y(du)16 b(tableau)f(unidimensionne)q(l) j fk(t)p fq(.)p eop %%page: 79 81 79 80 bop 75 269 a fl(5.1.)29 b(pr)246 257 y(\023)240 269 y(esent)l(a)l(tion)17 b(d'hpf)1103 b fq(79)75 397 y fo(l'instruction)19 b fk(forall)146 483 y fq(en)g(hpf,)f(le)i (programmeur)e(sp)o(\023)-21 b(eci\014e)20 b(l'application)h(d'une)f (instruction)g(data-parall)o(\022)-21 b(ele)19 b(a)o(v)o(ec)75 539 y(l'instruction)d fk(forall)p fq(,)e(qui)i(g)o(\023)-21 b(en)o(\023)g(eralise)15 b(l'a\013ectation)g(de)g(sections)h(de)g (tableaux)f(de)h(f)l(ortran)e(90)o(.)396 639 y fk(forall)g(\()p fj(triplet-sp)n(e)n(c)p fk(,)p fj(...)p fk(,)p fj(triplet-sp)n(e)n(c)p fk(:)p fj(masque)f fk(\))i fj(a\013e)n(ctation)75 739 y fq(o)q(\022)-24 b(u)10 b fj(triplet-sp)n(e)n(c)g fq(est)g(de)h(la)g (forme)c(:)j fj(indic)n(e)g fq(=)h fk(\()p fj(b)n(orne)g(inf)o(\023)-22 b(erieur)n(e)p fk(:)p fj(b)n(orne)11 b(sup)o(\023)-22 b(erieur)n(e)p fk(:)p fj(p)n(as)10 b fk(\))g fq(et)g fj(masque)75 795 y fq(est)15 b(un)h(pr)o(\023)-21 b(edicat)15 b(\()p fj(masque)g fq(et)g fj(p)n(as)f fq(son)o(t)h(optionnels\).)75 908 y(la)g(s)o(\023)-21 b(eman)o(tique)15 b(op)o(\023)-21 b(erationnelle)16 b(de)g(l'instruction)g fk(forall)e fq(est)h(la)h(suiv)m(an)o(te)8 b(:)131 1008 y(1.)21 b(\023)-21 b(en)o(um)o(\023)g(eration)13 b(de)j(l'ensem)o(ble)g(des)g(v)m(aleurs)g (prises)g(par)f(c)o(haque)g(indice,)131 1074 y(2.)21 b(\023)-21 b(en)o(um)o(\023)g(eration)12 b(de)i(l'ensem)o(ble)h(des)f (pro)q(cesseurs)g(virtuels)h(v)m(alides,)g(d)o(\023)-21 b(e\014ni)14 b(par)g(le)g(pro)q(duit)h(car-)189 1130 y(t)o(\023)-21 b(esien)15 b(des)g(ensem)o(bles)i(des)e(v)m(aleurs)h (d'indice,)131 1220 y(3.)21 b(\023)-21 b(en)o(um)o(\023)g(eration)12 b(de)i(l'ensem)o(ble)h(des)f(pro)q(cesseurs)h(virtuels)f(actifs,)g(d)o (\023)-21 b(e\014ni)14 b(par)g(la)g(restriction)g(de)189 1276 y(l'ensem)o(ble)i(des)g(pro)q(cesseurs)g(virtuels)g(v)m(alides)h (v)o(\023)-21 b(eri\014an)o(t)14 b fj(masque)p fq(,)131 1342 y(4.)21 b(\023)-21 b(ev)m(aluation)14 b(de)h(la)g(partie)f(droite) h(de)f(l'a\013ectation)g(par)g(l'ensem)o(ble)i(des)f(pro)q(cesseurs)g (virtuels)189 1398 y(actifs,)131 1464 y(5.)22 b(a\013ectation)14 b(du)i(r)o(\023)-21 b(esultat)14 b(\022)-23 b(a)15 b(la)g(partie)h (gauc)o(he.)75 1538 y(p)o(ar)e(exemple,)i(l'instruction)290 1627 y fk(forall)23 b(\(i=2:3,j=2:4,j.gt.i\))e(a\(i-1,j\)=a\(i,j\))75 1716 y fq(est)14 b(ex)o(\023)-21 b(ecut)o(\023)g(ee)12 b(de)i(la)g(mani)o(\022)-21 b(ere)14 b(suiv)m(an)o(te)8 b(:)14 b(l'ensem)o(ble)h(des)f(v)m(aleurs)h(d'indices)g(est)e(\023)-21 b(ev)m(alu)o(\023)g(e)7 b(:)13 b fm(v)1680 1723 y fw(i)1708 1716 y fq(=)p ff(f)p fq(2,3)p ff(g)75 1773 y fq(et)d

fm(v)145 1780 y fw(j)173 1773 y fq(=)p ff(f)p fq(2,3,4)p ff(g)p fq(.)e(puis)i(l'ensem)o(ble)i(des)f(pro)q(cesseurs)f(virtuels)h (v)m(alides)h(est)d(\023)-21 b(ev)m(alu)o(\023)g(e)7 b(:)j ff(f)p fq(\(2,2\),\(2,3\))o(,\()o(2,4\))o(,)75 1829 y(\(3,2\),\(3,3\))o(,\(3,)o(4\))p ff(g)e fq(et)13 b(en\014n)g(l'ensem)o(ble)g(des)g(pro)q(cesseurs)g(virtuels)g(actifs)8 b(:)j ff(f)p fq(\(2,3\),\(2,4\),)o(\(3,)o(4\))p ff(g)o fq(.)e(en-)75 1886 y(\014n)i(les)f(v)m(aleurs)i fk(a\(2,3\))p fq(,)p fk(a\(2,4\))p fq(,)p fk(a\(3,4\))6 b fq(son)o(t)k(resp)q(ectiv)o (emen)o(t)h(a\013ect)o(\023)-21 b(ees)9 b(\022)-23 b(a)9 b fk(a\(1,3\))p fq(,)p fk(a\(1,4\))p fq(,)p fk(a\(2,4\))p fq(.)75 2061 y fo(le)18 b(blo)q(c)h fk(forall)146 2147 y fq(il)c(faut)e(distinguer)i(l')p fj(instruction)f fk(forall)f fq(du)i(blo)q(c)g fk(forall)p fq(.)d(la)i(premi)o(\022)-21 b(ere)14 b(construction)h(n'au-)75 2204 y(torise)f(qu'une)g (a\013ectation)f(li)o(\023)-21 b(ee)14 b(au)g fk(forall)p fq(.)f(dans)g(le)i(deuxi)o(\022)-21 b(eme)14 b(cas,)f(plusieurs)j (instructions)f(p)q(eu-)75 2260 y(v)o(en)o(t)c(former)g(l'in)o(t)o (\023)-21 b(erieur)12 b(du)f fk(forall)p fq(,)g(qui)h(est)f(termin)o (\023)-21 b(e)11 b(par)g fk(endforall)p fq(.)f(le)i(blo)q(c)h(p)q(eut)f (notammen)o(t)75 2316 y(con)o(tenir)i(une)g(im)o(brication)h(de)f fk(forall)p fq(.)e(dans)h(ce)h(cas,)f(l'ensem)o(ble)i(des)f(pro)q (cesseurs)g(actifs)g(est)f(une)75 2373 y(restriction)j(de)f(l'ensem)o (ble)i(des)f(pro)q(cesseurs)f(actifs)g(d)o(\023)-21 b(e\014ni)16 b(par)f(les)h fk(forall)e fq(engloban)o(ts.)146 2486 y(cette)g(construction)h(nous)h(sera)e(utile)j(par)d(la)i(suite)f(car)g (hpf)g(imp)q(ose)h(une)f(restriction)h(imp)q(or-)75 2542 y(tan)o(te)7 b(:)19 b(un)h(indice)h(apparaissan)o(t)e(dans)g(un)h fm(tr)q(ipl)q(et)10 b ff(\000)h fm(spec)19 b fq(ne)h(p)q(eut)g(d)o (\023)-21 b(ep)q(endre)20 b(d'autres)f(indices)p eop %%page: 80 82 80 81 bop 75 269 a fq(80)404 b fl(chapitre)16 b(5.)30 b fn(pei)15 b fl(et)g(les)g(langa)o(ges)g(d)o(a)l(t)l(a-p)l(arall)1735 257 y(\022)1729 269 y(eles)75 397 y fq(apparaissan)o(t)e(dans)i(un)f (autre)g fm(tr)q(ipl)q(et)c ff(\000)g fm(spec)15 b fq(\([32)n(],)f (page)g(171\).)e(il)j(est)f(donc)h(n)o(\023)-21 b(ecessaire)14 b(d'utiliser)75 453 y(une)g(im)o(brication)h(de)f fk(forall)e fq(p)q(our)i(d)o(\023)-21 b(ecrire)14 b(des)g(domaines)g(qui)g(ne)g(d)o (\023)-21 b(ep)q(enden)o(t)14 b(pas)f(que)h(de)g(b)q(ornes)75 510 y(constan)o(tes.)g(p)o(ar)g(exemple,)j(un)e(domaine)h(triangulaire) g(sera)f(d)o(\023)-21 b(ecrit)15 b(par)7 b(:)147 610 y fk(forall)23 b(\(i=1:n\))242 667 y(forall)g(\(j=1:i\))337 723 y(a\(i,j\))h(=)f(....)242 780 y(endforall)147 836 y(endforall)75 964 y fo(la)18 b(b)q(oucle)h(ind)o(\023)-25 b(ep)q(endan)o(te)146 1052 y fq(notons)16 b(que)i(l'on)g(p)q(eut)f (\023)-21 b(egalemen)o(t)16 b(sp)o(\023)-21 b(eci\014er)18 b(un)g(traitemen)o(t)f(parall)o(\022)-21 b(ele)18 b(en)g(ins)o(\023)-21 b(eran)o(t)17 b(un)h(blo)q(c)75 1109 y(d'instructions)23 b(\022)-23 b(a)22 b(l'in)o(t)o(\023)-21 b(erieur)23 b(d'une)g(b)q (oucle)h fk(do)f(...)h(enddo)e fq(pr)o(\023)-21 b(ec)o(\023)g(ed)o (\023)g(ee)20 b(de)j(la)g(directiv)o(e)g fk($hpf!)75 1165 y(independent)p fq(.)12 b(le)j(programmeur)f(garan)o(tit)f(alors)h (au)g(compilateur)h(que)g(les)g(it)o(\023)-21 b(erations)14 b(son)o(t)f(ind)o(\023)-21 b(e-)75 1222 y(p)q(endan)o(tes)16 b(les)f(unes)h(des)f(autres,)f(p)q(ermettan)o(t)h(ainsi)h(au)f (compilateur)h(de)f(distribuer)h(c)o(hacune)g(des)75 1278 y(it)o(\023)-21 b(erations)17 b(sur)i(des)f(pro)q(cesseurs)h (di\013)o(\023)-21 b(eren)o(ts)17 b(p)q(our)i(une)g(ex)o(\023)-21 b(ecution)18 b(parall)o(\022)-21 b(ele.)19 b(nous)f(n'utiliserons)75 1335 y(pas)c(ici)i(ce)f(t)o(yp)q(e)f(de)h(b)q(oucle,)g(qui)g(se)g

(rappro)q(c)o(he)f(du)h(mo)q(d)o(\022)-21 b(ele)14 b(d'ex)o(\023)-21 b(ecution)15 b(mimd,)e(mais)i(nous)f(p)q(ou-)75 1391 y(v)o(ons)f(remarquer)g(que)h(l'instruction)h fk(forall)e fq(p)q(eut)g(^)-21 b(etre)12 b(remplac)o(\023)-21 b(ee)14 b(par)f(une)h(im)o(brication)h(parfaite)75 1447 y(de)g(b)q(oucles)h fk(do)e fq(ind)o(\023)-21 b(ep)q(endan)o(tes.)16 b(p)o(ar)d(exemple,)j (les)f(s)o(\023)-21 b(eman)o(tiques)14 b(du)h fk(forall)f fq(et)g(de)h(l'im)o(brication)75 1504 y(de)h(b)q(oucles)g(ind)o(\023) -21 b(ep)q(endan)o(tes)16 b(suiv)m(an)o(tes)g(son)o(t)e(\023)-21 b(equiv)m(alen)o(tes.)75 1604 y fk(forall)23 b(\(i=1:n,j=1:m\))237 b($hpf!)23 b(independent\(i,j\))290 1661 y(a\(i,j\)=b\(j,i\))332 b(do)24 b(i=1,n)1006 1717 y(do)f(j=1,m)1077 1774 y(a\(i,j\)=b\(j,i\)) 1006 1830 y(enddo)934 1887 y(enddo)75 2016 y fw(5.1.2)55 b(in)n(trinsics)146 2104 y fq(hpf)20 b(enric)o(hit)h(le)h(jeu)e(des)h (primitiv)o(es)h(de)e(f)l(ortran)g(90)g(propres)g(au)g(mo)q(d)o(\022) -21 b(ele)21 b(data-parall)o(\022)-21 b(ele,)75 2161 y(baptis)o(\023)g(ees)10 b fj(intrinsics)p fq(.)f(ces)i(primitiv)o(es)h (implan)o(ten)o(t)f(notammen)o(t)f(les)h(r)o(\023)-21 b(eductions)11 b(de)g(tableaux.)f(elles)75 2217 y(p)q(ermetten)o(t)20 b(ainsi)i(d')o(\023)-21 b(ecrire)21 b(des)g(programmes)e(plus)j(p)q (ortables)f(tout)f(en)h(gagnan)o(t)e(en)i(e\016cacit)o(\023)-21 b(e,)75 2274 y(ces)21 b(primitiv)o(es)g(p)q(ouv)m(an)o(t)f(^)-21 b(etre)19 b(optimis)o(\023)-21 b(ees)20 b(par)g(le)h(compilateur.)g (nous)f(ne)h(citerons)g(ici)g(que)g(les)75 2330 y(primitiv)o(es)f(de)f (la)h(famille)g fk(xxx)p 636 2330 15 2 v 17 w(scatter)e fq(que)h(nous)g(utiliserons)h(par)f(la)g(suite)h(p)q(our)f(traduire)g (les)75 2387 y(r)o(\023)-21 b(eductions)15 b(g)o(\023)-21 b(eom)o(\023)g(etriques)13 b(de)j fn(pei)p fq(.)f(p)o(armi)g(les)g(op)o (\023)-21 b(erateurs)14 b(de)i(r)o(\023)-21 b(eduction)15 b(disp)q(onibles)j(\(remplace)75 2443 y fk(xxx)p fq(\))c(on)i(trouv)o (e)e fk(sum)p fq(,)g fk(product)p fq(,)g fk(maxval)p fq(,)g fj(etc)p fq(.)h(la)g(primitiv)o(e)i(prend)f(comme)f(param)o (\022)-21 b(etres)6 b(:)143 2542 y({)23 b(un)15 b(tableau)h fm(a)f fq(de)h(dimension)h fm(m)e fq(qui)h(con)o(tien)o(t)f(les)h(donn) o(\023)-21 b(ees)15 b(\022)-23 b(a)15 b(r)o(\023)-21 b(eduire,)p eop %%page: 81 83 81 82 bop 75 269 a fl(5.1.)29 b(pr)246 257 y(\023)240 269 y(esent)l(a)l(tion)17 b(d'hpf)1103 b fq(81)143 397 y({)23 b(un)15 b(tableau)h fm(b)f fq(de)g(dimension)i fm(n)f fq(qui)g(con)o(tien)o(t)f(les)h(v)m(aleurs)g(initiales)h(des)f (r)o(\023)-21 b(eductions,)143 505 y({)23 b(un)15 b(ensem)o(ble)i(de)e (tableaux)h(d'indirection)h fm(x)985 512 y fg(1)1019 505 y fq(\022)-23 b(a)15 b fm(x)1083 512 y fw(n)1121 505 y fq(de)g(m)o(^)-21 b(eme)14 b(dimension)j(que)f fm(a)p fq(.)75 614 y(soit)k ff(a)g fq(l'ensem)o(ble)h(des)g(indices)g (de)g fm(a)p fq(,)e(et)h fm(z)i fq(un)e fm(m)p fq(-uplet)h ff(2)g fe(n)1243 597 y fw(m)1273 614 y fq(.)e(un)g(\023)-21 b(el)o(\023)g(emen)o(t)19 b(du)h(tableau)g(r)o(\023)-21 b(e-)75 670 y(sultat)15 b(calcul)o(\023)-21 b(e)17 b(par)e(la)h (primitiv)o(e)h(de)f(la)g(famille)h fk(xxx)p 1016 670 15 2 v 17 w(scatter)d fq(utilisan)o(t)j ff(\012)f fq(comme)f(op)o(\023) -21 b(erateur)14 b(de)75 727 y(r)o(\023)-21 b(eduction)15 b(est)8 b(:)474 794 y fm(r)q fq(\()p fm(i)530 801 y fg(1)548 794 y fm(;)g(:)g(:)g(:)d(;)j(i)666 801 y fw(n)687 794 y fq(\))13 b(=)889 762 y fx(n)958 794 y fm(a)p fq(\()p fm(z)r fq(\))786 850 y fw(z)q fx(2aj8)p fw(k)q fx(2)p fg([1)p fw(::n)p fg(])p fw(;x)1028 854 y fd(k)1044 850 y fg(\()p fw(z)q fg(\)=)p fw(i)1124 854 y fd(k)1173 794 y ff(\012)e fm(b)p fq(\()p fm(i)1273 801 y fg(1)1290

794 y fm(;)d(:)g(:)g(:)d(;)j(i)1408 801 y fw(n)1430 794 y fq(\))75 949 y(appuy)o(ons)16 b(nous)g(sur)g(un)h(exemple)g(de)f([27) o(],)f(page)h(90)f(p)q(our)i(expliquer)g(de)g(mani)o(\022)-21 b(ere)15 b(plus)i(in)o(tuitiv)o(e)75 1005 y(le)f(fonctionnemen)o(t)g (de)f(la)h(primitiv)o(e.)g(p)o(our)f(les)h(tableaux)8 b(:)146 1168 y fk(a)15 b fq(=)235 1071 y fx(2)235 1144 y(6)235 1171 y(4)284 1112 y fq(1)41 b(2)g(3)284 1168 y(4)g(5)g(6)284 1224 y(7)g(8)g(9)455 1071 y fx(3)455 1144 y(7)455 1171 y(5)498 1168 y fq(,)15 b fk(b)g fq(=)616 1071 y fx(2)616 1144 y(6)616 1171 y(4)664 1112 y ff(\000)p fq(1)42 b ff(\000)p fq(2)f ff(\000)p fq(3)664 1168 y ff(\000)p fq(4)h ff(\000)p fq(5)f ff(\000)p fq(6)664 1224 y ff(\000)p fq(7)h ff(\000)p fq(8)f ff(\000)p fq(9)942 1071 y fx(3)942 1144 y(7)942 1171 y(5)985 1168 y fq(,)15 b fk(x1)g fq(=)1126 1071 y fx(2)1126 1144 y(6)1126 1171 y(4)1174 1112 y fq(1)42 b(1)f(1)1174 1168 y(2)h(1)f(1)1174 1224 y(3)h(2)f(1)1346 1071 y fx(3)1346 1144 y(7)1346 1171 y(5)1389 1168 y fq(et)15 b fk(x2)g fq(=)1556 1071 y fx(2)1556 1144 y(6)1556 1171 y(4)1604 1112 y fq(1)41 b(2)h(3)1604 1168 y(1)f(1)h(2)1604 1224 y(1)f(1)h(1)1776 1071 y fx(3)1776 1144 y(7)1776 1171 y(5)75 1354 y fq(le)16 b(r)o(\023)-21 b(esultat)14 b(de)i fk(r)23 b(=)h(sum)p 521 1354 v 17 w(scatter\(a,b,x1,x2\))13 b fq(est)i fk(r)g fq(=)1140 1257 y fx(2)1140 1331 y(6)1140 1357 y(4)1188 1298 y fq(14)77 b(6)f(0)1211 1354 y(8)41 b ff(\000)p fq(5)h ff(\000)p fq(6)1211 1411 y(0)f ff(\000)p fq(8)h ff(\000)p fq(9)1454 1257 y fx(3)1454 1331 y(7)1454 1357 y(5)75 1468 y fq(l')o(\023)-21 b(el)o(\023)g(emen)o(t)16 b(de)h(tableau)h(r)o(\023)-21 b(esultat)16 b fk(r)p fq(\(1,2\))f(est)i (calcul)o(\023)-21 b(e)18 b(comme)f(suit)8 b(:)16 b(on)h(c)o(herc)o(he) h(tous)f(les)g(couples)75 1525 y fk(x1\()p fm(i;)8 b(j)s fk(\))p fq(,)p fk(x2\()p fm(i;)f(j)r fk(\))13 b fq(tels)k(que)g fk(x1\()p fm(i;)8 b(j)s fk(\))14 b fq(=)i(1)h(et)f fk(x2\()p fm(i;)8 b(j)s fk(\))14 b fq(=)i(2.)g(a)g(c)o(haque)h(fois)g(que)f(la)h (condition)h(est)75 1581 y(v)o(\023)-21 b(eri\014)o(\023)g(ee,)15 b(on)i(somme)f(la)g(v)m(aleur)i fk(a\()p fm(i;)8 b(j)s fk(\))p fq(.)14 b(nous)i(a)o(v)o(ons)f(ici)j(deux)f(couples)h(v)o(\023) -21 b(eri\014an)o(t)16 b(les)h(conditions,)75 1638 y(s)o(\023)-21 b(electionnan)o(t)15 b(deux)g(\023)-21 b(el)o(\023)g(emen)o(ts)14 b(dans)h fk(a)8 b fq(:)p 510 1700 902 2 v 509 1757 2 57 v 535 1740 a fk(x1)p fq(\(1,2\))13 b(=)j(1)49 b(et)h fk(x2)p fq(\(1,2\))13 b(=)j(2)p 1155 1757 v 49 w fk(a)p fq(\(1,2\))e(=)h(2)p 1411 1757 v 509 1813 v 535 1796 a fk(x1)p fq(\(2,3\))e(=)j(1)49 b(et)h fk(x2)p fq(\(2,3\))13 b(=)j(2)p 1155 1813 v 49 w fk(a)p fq(\(2,3\))e(=)h(6)p 1411 1813 v 510 1815 902 2 v 75 1909 a(soit)g fk(r)p fq(\(1,2\))f(=)h(2)g(+)g(6)g(+)h fk(b)p fq(\(1,2\))d(=)j(2)f(+)g(6)g (-2)g(=)h(6.)146 2026 y(des)c(primitiv)o(es)i(de)g(r)o(\023)-21 b(eduction)12 b(moins)i(g)o(\023)-21 b(en)o(\023)g(erales)11 b(implan)o(ten)o(t)j(les)f(op)o(\023)-21 b(erations)12 b(de)h(t)o(yp)q(e)g fj(p)n(ar)n(al)r(lel-)75 2082 y(pr)n(e\014x)k fq(du)h(mo)q(d)o(\022)-21 b(ele)17 b(data-parall)o(\022)-21 b(ele.)17 b(la)h(r)o(\023)-21 b(eduction)17 b(s'e\013ectue)g(selon)h (un)g(des)g(axes)f(canoniques)h(du)75 2139 y(tableau.)d(ces)g(primitiv) o(es)h(son)o(t)e(baptis)o(\023)-21 b(ees)14 b fk(xxx)p 913 2139 15 2 v 17 w(suffix)g fq(et)h fk(xxx)p 1213 2139 v 16 w(prefix)p fq(.)f(l'exemple)i(classique)g(de)75 2195 y(la)21 b(sommation)g(de)g fm(n)g fq(nom)o(bres)g(\(v)o(oir)g (page)f(15\))h(s')o(\023)-21 b(ecrit)20 b(ais)o(\023)-21 b(emen)o(t)20 b(a)o(v)o(ec)g(cette)h(primitiv)o(e.)h(p)o(our)75

2252 y(sommer)15 b(le)i(tableau)g fk(a)f fq(pr)o(\023)-21 b(ec)o(\023)g(eden)o(t)15 b(selon)h(les)h(lignes,)g(nous)f(\023)-21 b(ecriv)o(ons)7 b(:)15 b fk(sum)p 1403 2252 v 17 w(prefix\(a,)23 b(dim)g(=)h(2\))75 2308 y fq(don)o(t)15 b(le)h(r)o(\023)-21 b(esultat)14 b(est)h(le)h(tableau)8 b(:)802 2370 y fx(2)802 2443 y(6)802 2469 y(4)854 2410 y fq(1)72 b(3)h(6)854 2466 y(4)f(9)50 b(15)854 2523 y(7)g(15)f(24)1092 2370 y fx(3)1092 2443 y(7)1092 2469 y(5)p eop %%page: 82 84 82 83 bop 75 269 a fq(82)404 b fl(chapitre)16 b(5.)30 b fn(pei)15 b fl(et)g(les)g(langa)o(ges)g(d)o(a)l(t)l(a-p)l(arall)1735 257 y(\022)1729 269 y(eles)75 397 y fw(5.1.3)55 b(alignemen)n(t)17 b(des)h(donn)o(\023)-27 b(ees)146 485 y fq(hpf)15 b(p)q(ermet)g(au)h (programmeur)e(d'ins)o(\023)-21 b(erer)15 b(dans)h(les)g(programmes,)e (des)i(directiv)o(es)g(\022)-23 b(a)16 b(l'in)o(ten-)75 542 y(tion)11 b(du)g(compilateur,)g(concernan)o(t)g(le)g(placemen)o(t)h (des)f(donn)o(\023)-21 b(ees)10 b(sur)h(les)g(pro)q(cesseurs.)g(le)g (placemen)o(t)75 598 y(in\015ue)16 b(de)e(mani)o(\022)-21 b(ere)14 b(consid)o(\023)-21 b(erable)15 b(sur)f(le)h(v)o(olume)f(de)h (comm)o(unications)f(in)o(ter-pro)q(cesseurs)h(et)f(donc)75 655 y(sur)k(les)h(p)q(erformances)f(d'un)h(programme.)e(le)h (compilateur)i(se)e(d)o(\023)-21 b(ec)o(harge)17 b(de)i(cette)f(t^)-23 b(ac)o(he)18 b(sur)g(le)75 711 y(programmeur)d(car)h(l'optimisation)h (automatique)f(du)h(placemen)o(t)g(des)f(donn)o(\023)-21 b(ees)16 b(est)g(un)h(probl)o(\022)-21 b(eme)75 768 y(di\016cile)18 b([17)o(,)c(43].)146 825 y(le)20 b(placemen)o(t)g(se)g(fait)g(en)g (plusieurs)g(\023)-21 b(etap)q(es)7 b(:)19 b(les)i(v)m(ariables)g (parall)o(\022)-21 b(eles)20 b(son)o(t)f(align)o(\023)-21 b(ees)20 b(en)o(tre)75 882 y(elles,)d(\023)-21 b(ev)o(en)o(tuellemen)o (t)17 b(\022)-23 b(a)16 b(tra)o(v)o(ers)f(des)i(tableaux)g(\014ctifs)g (app)q(el)o(\023)-21 b(es)17 b fj(templates)p fq(,)g(\022)-23 b(a)16 b(l'aide)h(de)g(la)g(direc-)75 938 y(tiv)o(e)d fk(align)p fq(.)f(les)i(v)m(ariables)g(parall)o(\022)-21 b(eles)15 b(son)o(t)e(ensuite)j(distribu)o(\023)-21 b(ees,)14 b(a)o(v)o(ec)g(la)g(directiv)o(e)h fk(distribute)p fq(,)75 995 y(sur)k(une)g(mac)o(hine)h(abstraite)f(constitu)o(\023)-21 b(ee)18 b(d'un)h(tableau)h(de)f(pro)q(cesseurs)g(virtuels)h(\(d)o(\023) -21 b(eclar)o(\023)g(ee)18 b(par)75 1051 y(la)g(directiv)o(e)h fk(processors)p fq(\).)d(en\014n,)i(le)h(tableau)f(de)h(pro)q(cesseurs) f(virtuels)h(est)e(plac)o(\023)-21 b(e)18 b(sur)g(les)h(pro-)75 1108 y(cesseurs)f(ph)o(ysiques)h(\(le)f(nom)o(bre)g(de)g(pro)q (cesseurs)g(ph)o(ysiques)h(est)e(supp)q(os)o(\023)-21 b(e)18 b(inf)o(\023)-21 b(erieur)18 b(ou)f(\023)-21 b(egal)17 b(au)75 1164 y(nom)o(bre)10 b(de)h(pro)q(cesseurs)f(virtuels\).)h(le)g (programmeur)e(ne)i(p)q(eut)g(in\015uencer)1401 1148 y fg(1)1431 1164 y fq(que)g(les)g(deux)g(premiers)75 1220 y(t)o(yp)q(es)i(de)h(placemen)o(ts.)g(notons)f(qu'\022)-23 b(a)12 b(ces)i(directiv)o(es)h(\(statiques\))d(corresp)q(onden)o(t)i (des)g(instructions)75 1277 y(\(dynamiques\))h(\023)-21 b(equiv)m(alen)o(tes)16 b(qui)g(son)o(t)e fk(realign)g fq(et)h fk(redistribute)p fq(.)75 1404 y fo(alignemen)o(t)146 1493 y fq(l'alignemen)o(t,)j(\022)-23 b(a)17 b(tra)o(v)o(ers)g(la)h (directiv)o(e)h fk(align)p fq(,)e(pr)o(\023)-21 b(ecise)18 b(les)g(relations)g(de)h(placemen)o(t)f(des)g(v)m(a-)75 1549 y(riables)e(parall)o(\022)-21 b(eles,)16 b(les)f(unes)h(par)f (rapp)q(ort)f(aux)h(autres,)g(ou)g(par)f(rapp)q(ort)h(\022)-23 b(a)15 b(un)g(template.)g(dans)g(le)75 1606 y(cas)e(o)q(\022)-24 b(u)14 b(une)g(v)m(ariable)h(parall)o(\022)-21 b(ele)14 b(est)f(align)o(\023)-21 b(ee)14 b(sur)f(une)h(autre,)f(le)h (compilateur)h(aligne)f(implicitemen)o(t)75 1662 y(la)e(v)m(ariable)i

(a)o(v)o(ec)e(un)g(template.)g(le)h(programmeur)e(a)h(la)h(garan)o(tie) e(que)i(deux)f(\023)-21 b(el)o(\023)g(emen)o(ts)11 b(de)h(v)m(ariables) 75 1719 y(parall)o(\022)-21 b(eles)15 b(align)o(\023)-21 b(es)14 b(sur)f(un)i(m)o(^)-21 b(eme)12 b(\023)-21 b(el)o(\023)g(emen)o (t)12 b(de)j(template)f(seron)o(t)f(\014nalemen)o(t)i(plac)o(\023)-21 b(es)13 b(sur)h(un)g(m)o(^)-21 b(eme)75 1775 y(pro)q(cesseur)13 b(ph)o(ysique.)g(la)g(directiv)o(e)g fk(align)f fq(o\013re)f(de)i(nom)o (breuses)g(p)q(ossibilit)o(\023)-21 b(es)14 b(d'alignemen)o(ts)f(par)75 1831 y(le)f(biais)h(de)f(fonctions)g(a\016nes)f(de)h(v)m(ariables)h(m)o (uettes)e(repr)o(\023)-21 b(esen)o(tan)o(t)10 b(les)j(dimensions,)g(et) e(du)h(sym)o(b)q(ole)75 1888 y fk(*)p fq(.)j(p)o(ar)f(exemple)9 b(:)218 2002 y fk(real)23 b(a\(100,100\),)g(b\(100,100\),)f (c\(100,100\),)h(d\(100\),)f(e\(50\),f\(100,100\))75 2058 y(!hpf$)h(template)g(t\(100,100\))75 2115 y(!hpf$)g(align)g (a\(i,j\))g(with)h(t\(i,j\))238 b(!)23 b(alignement)g(a)g(l'identite)75 2171 y(!hpf$)g(align)g(b\(j,i\))g(with)h(t\(i,j\))238 b(!)23 b(transposition)75 2228 y(!hpf$)g(align)g(c\(i,j\))g(with)h (t\(i+2,j\))190 b(!)23 b(translation)75 2284 y(!hpf$)g(align)g(d\(i\))h (with)f(t\(5,i\))286 b(!)23 b(positionnement)75 2341 y(!hpf$)g(align)g(e\(i\))h(with)f(d\(2*i-1\))238 b(!)23 b(eclatement)g(regulier)75 2397 y(!hpf$)g(align)g(f\(i,*\))g(with)h (t\(i,1\))238 b(!)23 b(ecrasement)g(de)g(la)h(deuxieme)f(dimension)75 2454 y(!hpf$)g(align)g(e\(i\))h(with)f(t\(i,*\))286 b(!)23 b(duplication)p 75 2500 709 2 v 124 2542 a fd(1)p fc(:)9 b fd(les)k(directiv)o(es)i(de)f(placemen)o(ts)g(ne)f(son)o(t)h(que)f (des)g(conseils)j(donn)o(\023)-18 b(es)14 b(au)f(compilateur.)p eop %%page: 83 85 83 84 bop 75 269 a fl(5.2.)29 b(diff)293 257 y(\023)287 269 y(erence)15 b(s)526 257 y(\023)520 269 y(emantique)h(des)f(indices) 679 b fq(83)75 397 y fo(distribution)146 483 y fq(la)13 b(distribution)j(des)d(\023)-21 b(el)o(\023)g(emen)o(ts)12 b(d'un)j(template)f(sur)f(la)h(mac)o(hine)h(virtuelle)h(se)e(fait,)f (par)g(dimen-)75 539 y(sion,)i(par)h(le)g(biais)g(des)g(mo)q(des)f fk(block)p fq(,)g fk(block\()p fm(n)p fk(\))p fq(,)f fk(cyclic)g fq(ou)i fk(cyclic\()p fm(n)p fk(\))p fq(,)e(ou)h fm(n)h fq(est)f(le)h(nom)o(bre)75 596 y(d')o(\023)-21 b(el)o(\023)g(emen)o(ts.)13 b(p)o(our)i(une)h(mac)o(hine)g fk(m)f fq(et)g(un)h(template)f fk(t)g fq(d)o(\023)-21 b(eclar)o(\023)g(es)14 b(resp)q(ectiv)o(emen)o(t)i(par)7 b(:)75 688 y fk(!hpf$)23 b(processors)g(m\(n1\))47 b(!)23 b(n1)h(et)g(n2)f(sont)h(des)f(parametres)75 744 y(!hpf$)g(template)g (t\(n2\))95 b(!)23 b(on)h(suppose)f(n2)h(>)f(n1)75 836 y fq(le)12 b(mo)q(de)f fk(block)f fq(attribue)h(des)g(blo)q(cs)h(de)g (taille)g fm(t)h fq(=)g ff(d)1006 818 y fr(n2)p 1006 825 31 2 v 1006 852 a(n1)1042 836 y ff(e)d fq(\023)-21 b(el)o(\023)g(emen)o(ts)10 b(con)o(tigus)h(du)g(template)g(\022)-23 b(a)11 b(c)o(hacun)75 893 y(des)k(pro)q(cesseurs)g(virtuels)9 b(:)14 b(le)i(premier)f(pro)q(cesseur)h(re\030)-20 b(coit)14 b(les)h(\023)-21 b(el)o(\023)g(emen)o(ts)13 b(1)i(\022)-23 b(a)14 b fm(t)p fq(,)h(le)g(deuxi)o(\022)-21 b(eme)16 b fm(t)9 b fq(+)h(1)75 949 y(\022)-23 b(a)16 b(2)p fm(t)p fq(,)h fj(etc)p fq(.)f(le)h(mo)q(de)h fk(block\()p fm(n)p fk(\))e fq(p)q(ermet)h(de)g(\014xer)g(la)g(taille)h(\022)-23 b(a)16 b fm(t)g fq(=)g fm(n)p fq(.)g(le)i(mo)q(de)f fk(cyclic)e fq(attribue)75 1006 y(les)g(\023)-21 b(el)o(\023)g(emen)o(ts)15 b(un)h(\022)-23 b(a)15 b(un)h(aux)f(pro)q(cesseurs,)h(puis)h(apr)o (\022)-21 b(es)14 b(a)o(v)o(oir)h(attribu)o(\023)-21 b(e)15 b fk(n1)f fq(\023)-21 b(el)o(\023)g(emen)o(ts,)14 b(recommence)75 1062 y(\022)-23 b(a)15 b(partir)g(du)h(premier)f(pro)q

(cesseur)h(jusqu'\022)-23 b(a)15 b(a)o(v)o(oir)g(distribu)o(\023)-21 b(e)15 b(tous)g(les)g(\023)-21 b(el)o(\023)g(emen)o(ts.)13 b(p)o(ar)i(exemple)9 b(:)75 1154 y fk(!hpf$)23 b(processors)g(m\(2\))75 1211 y(!hpf$)g(template)g(t\(5\))75 1267 y(!hpf$)g(distribute)g (t\(block\))f(onto)i(m)71 b(!)24 b(m\(1\))f(a)h(t\(1,2,3\))f(et)g (m\(2\))h(a)f(t\(4,5\))75 1323 y(!hpf$)g(distribute)g(t\(cyclic\))f (onto)i(m)47 b(!)24 b(m\(1\))f(a)h(t\(1,3,5\))f(et)g(m\(2\))h(a)f (t\(2,4\))75 1466 y ft(5.2)66 b(di\013)o(\023)-32 b(erence)22 b(s)o(\023)-32 b(eman)n(tique)22 b(des)g(indices)146 1568 y fq(la)17 b(plupart)i(des)f(langages)f(data-parall)o(\022)-21 b(eles)18 b(ne)g(p)q(ermetten)o(t)g(pas)g(d'aligner)g(les)g(v)m (ariables)i(pa-)75 1624 y(rall)o(\022)-21 b(eles)22 b(en)o(tres)f (elles.)i(les)f(v)m(ariables)h(parall)o(\022)-21 b(eles)22 b(son)o(t)f(directemen)o(t)h(plac)o(\023)-21 b(ees)22 b(sur)f(des)h(mac)o(hines)75 1681 y(virtuelles,)e(sp)o(\023)-21 b(eci\014)o(\023)g(ees)18 b(par)g(les)h(mots-cl)o(\023)-21 b(es)18 b fk(shape)f fq(en)i(c)1073 1664 y fx(\003)1092 1681 y fq([54)o(])f(ou)g(dpce[53)o(],)f(ou)h fk(collection)f fq(en)75 1737 y fn(hyperc)p fq([45].)f(la)i(d)o(\023)-21 b(eclaration)17 b(d'une)h(v)m(ariable)h(parall)o(\022)-21 b(ele)18 b(est)g(r)o(\023)-21 b(ealis)o(\023)g(ee)16 b(en)i(asso)q(cian)o(t)f(la)h(v)m(ariable)75 1794 y(a)o(v)o(ec)d(une)h (mac)o(hine)g(virtuelle.)g(p)o(ar)f(exemple)h(en)g(c)984 1777 y fx(\003)1018 1794 y fq(ou)f(dpce,)f(les)i(d)o(\023)-21 b(eclarations)218 1886 y fk(shape[10][10]m;)218 1942 y(int)24 b(m:a,b;)75 2034 y fq(on)o(t)18 b(p)q(our)i(e\013et)e (d'allouer)i(deux)g(v)m(ariables)g(parall)o(\022)-21 b(eles)20 b fk(a)f fq(et)g fk(b)g fq(sur)g(la)g(grille)i(de)f(pro)q (cesseurs)f(vir-)75 2091 y(tuels)d fk(m)p fq(.)f(ces)g(v)m(ariables)h (on)o(t)f(le)h(m)o(^)-21 b(eme)14 b(nom)o(bre)i(de)f(dimensions)i(et)e (la)h(m)o(^)-21 b(eme)14 b(taille)j(que)f fk(m)p fq(,)e(et)h(son)o(t)75 2147 y(align)o(\023)-21 b(ees)16 b(\022)-23 b(a)16 b(l'iden)o(tit)o (\023)-21 b(e)17 b(a)o(v)o(ec)e fk(m)p fq(,)h(c'est-\022)-23 b(a-dire)17 b(qu'un)e(\023)-21 b(el)o(\023)g(emen)o(t)15 b fk(a)1184 2154 y fw(i;j)1239 2147 y fq(et)h fk(b)1317 2154 y fw(i;j)1372 2147 y fq(est)g(allou)o(\023)-21 b(e)16 b(au)g(pro)q(cesseur)75 2204 y(virtuel)e fk(m)242 2211 y fw(i;j)281 2204 y fq(.)f(p)o(ar)g(cons)o(\023)-21 b(equen)o(t,)12 b(un)i(calcul)h(ne)f(p)q(eut)g(impliquer)h(que)f(des)g(v)m(aleurs)g (plac)o(\023)-21 b(ees)13 b(au)h(m)o(^)-21 b(emes)75 2260 y(indices)19 b(de)d(la)h(mac)o(hine)g(virtuelle.)h(si)g(ce)f (n'est)f(pas)g(le)h(cas,)f(le)h(programmeur)f(doit)h(explicitemen)o(t) 75 2316 y(donner)f(l'instruction)h(de)f(d)o(\023)-21 b(eplacer)16 b(ou)f(recopier)i(la)e(v)m(aleur)i(sur)f(le)g(pro)q (cesseur)g(virtuel.)g(cette)g(res-)75 2373 y(triction)j(\()o(\023)-21 b(egalemen)o(t)17 b(pr)o(\023)-21 b(esen)o(te)17 b(dans)h fn(pei)p fq(\))g(p)q(oss)o(\022)-21 b(ede)17 b(l'a)o(v)m(an)o(tage)h (de)g(fait)g(prendre)h(conscience)h(au)75 2429 y(programmeur)d(des)i (comm)o(unications)g(induites)h(par)e(son)h(algorithme.)f(le)h(texte)f (du)h(programme)75 2486 y(con)o(tien)o(t)13 b(donc)h(des)f fj(instructions)f fq(de)i(comm)o(unications,)f(c'est-\022)-23 b(a-dire)14 b(des)f(instructions)h(qui)g(\\d)o(\023)-21 b(efor-)75 2542 y(men)o(t")15 b(l')o(\023)-21 b(enonc)o(\023)g(e)14 b(initial)k(du)d(probl)o(\022)-21 b(eme,)15 b(p)q(our)h(faire)f(en)h (sorte)f(que)h(les)g(indices)h(utilis)o(\023)-21 b(es)16 b(r)o(\023)-21 b(ef)o(\023)g(erencen)o(t)p eop %%page: 84 86 84 85 bop 75 269 a fq(84)404 b fl(chapitre)16 b(5.)30 b fn(pei)15 b fl(et)g(les)g(langa)o(ges)g(d)o(a)l(t)l(a-p)l(arall)1735 257 y(\022)1729 269 y(eles)75 397 y fq(les)h(pro)q(cesseurs)g(virtuels)

g(et)f(non)g(les)h(o)q(ccurrences)g(initiales)i(des)d(v)m(ariables.)146 510 y(hpf,)c(en)i(rev)m(anc)o(he,)f(n'imp)q(ose)h(pas)f(cette)h(con)o (train)o(te.)e(les)i(indices)h(des)f(v)m(ariables)g(parall)o(\022)-21 b(eles)13 b(ne)75 566 y(r)o(\023)-21 b(ef)o(\023)g(erencen)o(t)14 b(pas)h(les)i(pro)q(cesseurs)f(virtuels)g(mais)g(son)o(t)f(r)o(\023)-21 b(eellemen)o(t)16 b(les)g(indices)i(des)e(tableaux.)f(p)o(ar)75 623 y(cons)o(\023)-21 b(equen)o(t,)16 b(le)i(placemen)o(t)g(ne)g(mo)q (di\014e)g(pas)f(la)g(s)o(\023)-21 b(eman)o(tique)17 b(d'un)h(programme.)d(p)o(our)i(un)g(m)o(^)-21 b(eme)75 679 y(texte)17 b(de)h(programme,)d(mais)j(don)o(t)f(les)h(v)m(ariables) g(ne)g(pas)f(plac)o(\023)-21 b(ees)17 b(de)h(la)g(m)o(^)-21 b(eme)16 b(mani)o(\022)-21 b(ere,)17 b(seul)h(le)75 736 y(temps)13 b(d'ex)o(\023)-21 b(ecution)14 b(di\013)o(\022)-21 b(ere.)12 b(ainsi,)j(la)e(\014gure)h(5.1)e(illustre)j(cette)e(di\013)o (\023)-21 b(erence)14 b(sur)f(une)h(transp)q(osition)75 792 y(de)19 b(matrice,)f(\023)-21 b(ecrite)19 b(en)g(c)545 776 y fx(\003)583 792 y fq(\(\022)-23 b(a)19 b(gauc)o(he\))g(et)g(le)g (programme)e(\023)-21 b(equiv)m(alen)o(t)20 b(en)g(hpf)e(\(\022)-23 b(a)19 b(droite\).)f(en)75 849 y(c)108 832 y fx(\003)127 849 y fq(,)c(les)g(indices)i fk(i)e fq(et)g fk(j)g fq(repr)o(\023)-21 b(esen)o(ten)o(t)13 b(des)h(n)o(um)o(\023)-21 b(eros)13 b(de)i(pro)q(cesseurs)f(virtuels,)h(c'est-\022)-23 b(a-dire)14 b(que)h(les)75 905 y(v)m(aleurs)g(de)g fk(b)g fq(ne)g(son)o(t)e(pas)i (transp)q(os)o(\023)-21 b(ees)6 b(;)14 b(en)h(hpf)g(au)f(con)o(traire,) g(les)h(indices)i(son)o(t)c(les)j(indices)g(des)75 962 y(matrices.)i(le)h(programme)f(hpf)g(sans)g(les)h(directiv)o(es)h(de)f (placemen)o(t)g(\(lignes)g(1)g(\022)-23 b(a)18 b(3\))g(pro)q(duirait)75 1018 y(les)k(m)o(^)-21 b(emes)21 b(r)o(\023)-21 b(esultats)20 b(que)i(le)g(programme)f(list)o(\023)-21 b(e,)21 b(mais)h(a)o(v)o(ec)f (une)h(p)q(erformance)g(moindre)g(si)g(le)75 1074 y(compilateur)16 b(ne)g(place)g(pas)f(automatiquemen)o(t)g(les)h(matrices)f(comme)g (indiqu)o(\023)-21 b(e.)75 1213 y fk(shape)23 b(mat[100][100];)332 b(real)24 b(a\(100,100\),)e(b\(100,100\))75 1269 y(float)h(:)h(mat)f (i,j,a,b;)309 b(!hpf$)24 b(processors)e(m\(100,100\))862 1326 y(!hpf$)i(align)f(a\(i,j\))g(with)g(b\(j,i\))123 1382 y(i=pc_coord\(0\);)403 b(!hpf$)24 b(distribute)e(a\(block\))h (onto)g(m)123 1438 y(j=pc_coord\(1\);)123 1495 y([j][i])g(b)g(=)h ([i][j])f(a;)286 b(forall\(i=1:100,j=1:00\))21 b(b\(j,i\))i(=)h (a\(i,j\))425 1643 y fn(fig.)15 b fq(5.1)f(-)30 b fj(t)m(r)n(ansp)n (osition)14 b(de)j(matric)n(e)f(en)g(c)1253 1626 y fx(\003)1288 1643 y fj(et)g(en)g(hpf)75 1833 y ft(5.3)66 b(sc)n(h)o(\023)-32 b(ema)22 b(d'ensem)n(ble)g(du)h(m)o(\023)-32 b(ecanisme)21 b(de)i(traduction)146 1934 y fq(un)9 b(\023)-21 b(enonc)o(\023)g(e)10 b fn(pei)g fq(quelconque)j(n'est,)c(de)j(mani)o(\022)-21 b(ere)10 b(g)o(\023)-21 b(en)o(\023)g(erale,)9 b(pas)h(directemen)o(t)i (traduisible)g(en)f(un)75 1991 y(co)q(de)16 b(data-parall)o(\022)-21 b(ele.)15 b(les)h(caract)o(\023)-21 b(eristiques)15 b(de)h fn(pei)f fq(emp)o(^)-21 b(ec)o(han)o(t)15 b(cette)g(traduction)g(son)o (t)g(de)h(deux)75 2047 y(sortes)7 b(:)13 b(l'asp)q(ect)h(\023)-21 b(equationnel)14 b(des)g(\023)-21 b(enonc)o(\023)g(es)12 b(et)i(l'absence)h(d'ordonnancemen)o(t)f(op)o(\023)-21 b(erationnel)14 b(p)q(our)74 2104 y(\023)-21 b(ev)m(aluer)12 b(la)h(solution)f(d'une)g(\023)-21 b(equation.)11 b(p)o(ar)g(cons)o (\023)-21 b(equen)o(t,)11 b(certaines)i(transformations)e fj(s)o(\023)-22 b(emantiques)p fq(,)75 2160 y(utilisan)o(t)14 b(les)g(r)o(\022)-21 b(egles)11 b(\023)-21 b(enonc)o(\023)g(ees)12 b(dans)i(les)f(c)o(hapitres)h(3)f(et)g(4,)f(doiv)o(en)o(t)g(^)-21 b(etre)12 b(pr)o(\023)-21 b(ealablemen)o(t)13 b(e\013ectu)o(\023)-21 b(ees)75 2217 y(p)q(our)15 b(obtenir)h(un)f(\023)-21 b(enonc)o(\023)g(e)14 b(ra\016n)o(\023)-21 b(e)14 b(sous)h(une)h(forme)

e fj(tr)n(aduisible)p fq(.)189 2316 y fo(equations)8 b fq(:)18 b(nous)g(ne)g(p)q(ouv)o(ons)g(traduire)h(que)f(des)f(\023)-21 b(equations)18 b(assimilables)i(\022)-23 b(a)18 b(des)g(a\013ec-)189 2373 y(tations,)g(c'est-\022)-23 b(a-dire)19 b(celles)h(don)o(t)f(au)f (moins)h(un)g(des)g(mem)o(bres)g(n'est)f(comp)q(os)o(\023)-21 b(e)18 b(que)h(d'un)189 2429 y(iden)o(ti\014cateur)d(de)g(c)o(hamp.)f (p)o(ar)g(exemple,)h(nous)g(ne)g(sa)o(v)o(ons)e(pas)h(traduire)h(l')o (\023)-21 b(equation)15 b fk(f)7 b(::)h(x)189 2486 y fq(=)15 b fk(g)8 b(::)f(y)p fq(.)15 b(il)h(est)f(donc)h(n)o(\023)-21 b(ecessaire)16 b(de)f(faire)h(appara)-5 b(^)-18 b(\020tre)15 b(uniquemen)o(t)i fk(x)e fq(ou)g fk(y)h fq(dans)f(l'un)h(des)189 2542 y(mem)o(bres,)g(\022)-23 b(a)16 b(l'aide)h(des)g(r)o(\022)-21 b(egles)16 b(exp)q(os)o(\023)-21 b(ees)16 b(en)h(section)g(3.3.)e(en)i (l'o)q(ccurrence,)g(on)f(p)q(eut)h(faire)p eop %%page: 85 87 85 86 bop 75 269 a fl(5.3.)29 b(sch)274 257 y(\023)268 269 y(ema)15 b(d'ensemble)g(du)g(m)839 257 y(\023)833 269 y(ecanisme)g(de)g(traduction)306 b fq(85)189 397 y(appara)-5 b(^)-18 b(\020tre)14 b fk(x)h fq(uniquemen)o(t)h(en)f(mem)o (bre)g(gauc)o(he)g(si)h fk(f)e fq(est)h(in)o(v)o(ersible,)h(et)f(en)g (appliquan)o(t)h fk(f)1809 380 y fq(-1)189 453 y fq(sur)h(les)h(deux)g (mem)o(bres)f(\(r)o(\022)-21 b(egles)16 b(\(i\))h(et)g(\(7b\))g(\022) -23 b(a)16 b(condition)j(que)f(les)f(domaines)h(de)g(r)o(\023)-21 b(ef)o(\023)g(erence)189 510 y(de)14 b fk(x)f fq(et)h(de)g fk(y)f fq(soien)o(t)h(inclus)i(dans)d fm(dom)p fq(\()p fk(h)p fq(\)\),)f(puis)j(en)f(calculan)o(t)h(le)f(nouv)o(eau)g(c)o (hangemen)o(t)f(de)189 566 y(base)j fk(f)315 550 y fq(-1)362 566 y ff(\016)10 b fk(g)15 b fq(appliqu)o(\023)-21 b(e)17 b(\022)-23 b(a)16 b fk(y)p fq(,)f(ce)h(qui)h(donne)f(l')o(\023)-21 b(equation)16 b fk(x)g fq(=)g fk(\(f)1328 550 y fq(-1)1375 566 y ff(\016)10 b fk(g\))d(::)g(y)p fq(.)16 b(dans)f(d'autres)189 623 y(cas,)f(la)i(traduction)g(est)f(imp)q(ossible)10 b(:)15 b(par)g(exemple,)h(aucune)g(r)o(\022)-21 b(egle)15 b(de)h(ra\016nemen)o(t)f(n'existe)189 679 y(actuellemen)o(t)j(p)q(our)g (r)o(\023)-21 b(e)o(\023)g(ecrire)17 b(l')o(\023)-21 b(equation)17 b fk(x)e fa(c)g fk(f)j fq(=)g fk(y)d fa(c)g fk(g)j fq(de)g(mani)o(\022)-21 b(ere)17 b(\022)-23 b(a)17 b(faire)h(appara)-5 b(^)-18 b(\020tre)189 736 y fk(x)21 b fq(ou)g fk(y)g fq(seul)h(sur)f(l'un)h(des)g(mem)o(bres,)f(dans)g(le)h (cas)f(o)q(\022)-24 b(u)21 b fk(f)h fq(et)f fk(g)g fq(son)o(t)f(des)i (fonctions)f(non)189 792 y(in)o(v)o(ersibles.)h(p)o(ar)e(cons)o(\023) -21 b(equen)o(t,)20 b(l')o(\023)-21 b(enonc)o(\023)g(e)20 b(con)o(tenan)o(t)g(une)i(telle)f(\023)-21 b(equation)21 b(ne)g(p)q(ourra)f(^)-21 b(etre)189 849 y(traduit.)189 953 y fo(cadencemen)o(t)16 b(des)e(\023)-25 b(equations)17 b(r)o(\023)-25 b(ecurren)o(tes)6 b fq(:)13 b(nous)i(ne)f(traduisons)g (que)h(les)e(\023)-21 b(equations)189 1009 y(r)o(\023)g(ecurren)o(tes) 20 b(p)q(our)i(lesquelles)i(nous)e(p)q(ouv)o(ons)g(d)o(\023)-21 b(eterminer)22 b(un)g(cadencemen)o(t)g(des)g(calculs)189 1066 y(dans)17 b(le)g(temps.)f(ce)h(probl)o(\022)-21 b(eme)17 b(est)f(largemen)o(t)h(ab)q(ord)o(\023)-21 b(e)16 b(dans)h(la)g(litt)o(\023)-21 b(erature)16 b(concernan)o(t)g(la)189 1122 y(parall)o(\023)-21 b(elisation)22 b(automatique,)e(et)h(nous)h (sa)o(v)o(ons)e(qu'il)i(consiste)g(\022)-23 b(a)21 b(trouv)o(er)f(des)h (fonctions)189 1179 y(de)f(cadencemen)o(t)g(et)g(de)g(placemen)o(t.)g (en)g fn(pei)p fq(,)f(cette)h(transformation)e(se)i(traduit)g(par)f(un) 189 1235 y(c)o(hangemen)o(t)d(de)h(base)g(appliqu)o(\023)-21 b(e)17 b(\022)-23 b(a)17 b(l')o(\023)-21 b(enonc)o(\023)g(e.)15 b(un)i(exemple)h(simple)g(est)f(celui)h(du)f(pro)q(cessus)189 1292 y(de)e(di\013usion)i(discr)o(\022)-21 b(ete)15 b(de)g(la)h

(\014gure)f(5.2.)p 179 1407 1564 2 v 179 1744 2 338 v 193 1449 a fk(do)g fm(i)d fq(=)h(1)p fm(;)8 b(n)311 1506 y fk(do)15 b fm(j)g fq(=)e(1)p fm(;)8 b(n)429 1562 y(y)r fq(\()p fm(i;)g(j)s fq(\))i(=)j fm(f)5 b fq(\()p fm(y)r fq(\()p fm(i)10 b ff(\000)g fq(1)p fm(;)e(j)s fq(\))p fm(;)g(y)r fq(\()p fm(i)o(;)g(j)h ff(\000)h fq(1\)\))311 1619 y fk(enddo)193 1675 y(enddo)p 1741 1744 v 179 1746 1564 2 v 547 1823 a fn(fig.)15 b fq(5.2)f(-)30 b fj(pr)n(o)n(c)n(essus) 15 b(de)h(di\013usion)g(discr)o(\022)-22 b(ete)189 1984 y fq(qui)16 b(s')o(\023)-21 b(ecrit)14 b(en)h fn(pei)p fq(,)g(si)h fk(x)f fq(est)g(le)h(c)o(hamp)f(con)o(tenan)o(t)g(les)g(v)m (aleurs)i(initiales)9 b(:)510 2090 y fk(y)15 b fq(=)g fk(f)g fa(b)h fk(\(x)23 b(/&/)8 b(\(y)24 b fa(c)g fk(f1\))f(/&/)8 b(\(y)23 b fa(c)i fk(f2)o(\)\))95 b fq(\(1\))510 2147 y fk(f1)15 b fq(=)g fm(\025)p fk(\(i,j\))p ff(j)p fk(\(1)p ff(\024)p fk(i)p ff(\024)p fk(n)7 b(&)h(1)p ff(\024)p fk(j)p ff(\024)p fk(n\).\(i-1,j\))510 2203 y(f2)15 b fq(=)g fm(\025)p fk(\(i,j\))p ff(j)p fk(\(1)p ff(\024)p fk(i)p ff(\024)p fk(n)7 b(&)h(1)p ff(\024)p fk(j)p ff(\024)p fk(n\).\(i,j-1\))189 2309 y fq(nous)22 b(sa)o(v)o(ons)g(qu'il)i(existe) f(dans)g(ce)g(cas,)g(une)g(transformation)f(a\016ne)g(temps)h ff(\002)g fq(espace)189 2366 y(p)q(ermettan)o(t)14 b(de)i(parall)o (\023)-21 b(eliser)16 b(la)g(r)o(\023)-21 b(ecurrence.)14 b(en)i(l'o)q(ccurrence,)g(cette)f(transformation)f(p)q(eut)188 2422 y(^)-21 b(etre)6 b(:)757 2436 y fx( )811 2480 y fm(t)811 2536 y(p)854 2436 y fx(!)900 2508 y fq(=)948 2436 y fx( )1001 2480 y fq(1)42 b(1)1001 2536 y(1)g(0)1109 2436 y fx(!)8 b( )1203 2480 y fm(i)1203 2536 y(j)1245 2436 y fx(!)p eop %%page: 86 88 86 87 bop 75 269 a fq(86)404 b fl(chapitre)16 b(5.)30 b fn(pei)15 b fl(et)g(les)g(langa)o(ges)g(d)o(a)l(t)l(a-p)l(arall)1735 257 y(\022)1729 269 y(eles)189 397 y fq(o)q(\022)-24 b(u)11 b(l'indice)j fm(t)e fq(repr)o(\023)-21 b(esen)o(te)11 b(le)i(temps)e(et)h fm(p)f fq(les)h(pro)q(cesseurs.)g(en)g fn(pei)p fq(,)f(cette)h(transformation)e(est)189 453 y(r)o(\023)-21 b(ealis)o(\023)g(ee)12 b(par)g(l'application)i(de)f(c)o (hangemen)o(t)g(de)g(base)g fk(h)f fq(=)h fm(\025)p fk (\(t,p\).\(t+p,t\))d fq(sur)j(l')o(\023)-21 b(equation)189 510 y(\(1\).)13 b(apr)o(\022)-21 b(es)15 b(application)i(des)e(r)o (\022)-21 b(egles,)15 b(nous)g(obtenons)7 b(:)462 598 y fk(y')15 b fq(=)h fk(f)f fa(b)g fk(\(x')23 b(/&/)8 b(\(y')23 b fa(c)i fk(g1)o(\))f(/&/)8 b(\(y')23 b fa(c)h fk(g2\)\))95 b fq(\(2\))462 654 y fk(g1)15 b fq(=)h fm(\025)p fk(\(t,p\))p ff(j)p fk(\(1)p ff(\024)p fk(p)p ff(\024)p fk(n)6 b(&)i(1)p ff(\024)p fk(t-p)p ff(\024)p fk(n\).\(t-1,p-1\))462 710 y(g2)15 b fq(=)h fm(\025)p fk(\(t,p\))p ff(j)p fk(\(1)p ff(\024)p fk(p)p ff(\024)p fk(n)6 b(&)i(1)p ff(\024)p fk(t-p)p ff(\024)p fk(n\).\(t-1,p\))189 801 y fq(o)q(\022)-24 b(u)18 b fk(g1)g fq(=)h fk(h)12 b ff(\016)g fk(f1)g ff(\016)g fk(h)565 784 y fq(-1)621 801 y fq(et)18 b fk(g2)g fq(=)h fk(h)12 b ff(\016)g fk(f2)g ff(\016)g fk(h)987 784 y fq(-1)1025 801 y fq(.)18 b(une)h(dimension)h(d)o(\023)-21 b(e\014nissan)o(t)18 b(les)h(fonctions)189 857 y(g)o(\023)-21 b(eom)o(\023)g(etriques)9 b fk(g1)i fq(et)g fk(g2)g fq(comme)f(des)i (translations,)f(nous)g(v)o(errons)f(que)i(cette)f(transformation)189 914 y(nous)h(p)q(ermet)h(de)g(traduire)g(la)g(r)o(\023)-21 b(ecurrence)13 b(par)f(une)h(b)q(oucle)i(s)o(\023)-21 b(equen)o(tielle)14 b(sur)e fm(t)h fq(et)g(une)g(b)q(oucle)189 970 y(parall)o(\022)-21 b(ele)16 b(sur)f fm(p)p fq(.)189

1043 y(notons)e(que)i(dans)g(cet)f(exemple,)i(une)f(seule)g(direction)h (repr)o(\023)-21 b(esen)o(te)14 b(le)h(temps,)f(sous)g(la)h(forme)189 1100 y(d'une)f(translation)h(pr)o(\023)-21 b(esen)o(te)13 b(dans)i(toutes)e(fonctions)i(g)o(\023)-21 b(eom)o(\023)g(etriques.)12 b(notre)i(traducteur)g(ac-)189 1156 y(tuel)h(ne)g(reconna)-5 b(^)-18 b(\020t)15 b(que)g(cette)g(forme)f(de)h(cadencemen)o(t)g(lin)o (\023)-21 b(eaire,)16 b(mais)e(d'autres)g(tec)o(hniques)189 1213 y(de)i(cadencemen)o(t)h(p)q(ourraien)o(t)e(^)-21 b(etre)15 b(incluses,)j(par)e(exemple)h(la)g(tec)o(hnique)g(de)g (cadencemen)o(t)189 1269 y(m)o(ulti-dimensionnel)23 b(exp)q(os)o(\023) -21 b(ee)19 b(dans)h([16)o(].)e(de)i(nouv)o(elles)h(formes)e(d')o(\023) -21 b(equations)18 b(p)q(ourraien)o(t)189 1326 y(alors)j(^)-21 b(etre)21 b(traduites)7 b(:)22 b(en)o(tre)g(autres,)g(l')o(\023)-21 b(equation)22 b(\(1\))f(p)q(ourrait)g(^)-21 b(etre)22 b(traduite)g(par)g(deux)189 1382 y(b)q(oucles)16 b(s)o(\023)-21 b(equen)o(tielles,)16 b(donnan)o(t)g(le)f(programme)g(f)l(ortran)f(de)h (la)h(\014gure)f(5.2.)75 1473 y(apr)o(\022)-21 b(es)14 b(a)o(v)o(oir)g(transform)o(\023)-21 b(e)13 b(l')o(\023)-21 b(enonc)o(\023)g(e)14 b(de)i(mani)o(\022)-21 b(ere)14 b(\022)-23 b(a)15 b(resp)q(ecter)h(ces)f(princip)q(es,)i(nous)e(p)q (ouv)o(ons)g(en)o(ta-)75 1530 y(mer)e(un)g(pro)q(cessus)h(de)f (transformation)f(de)i(nature)e fj(syntaxique)p fq(,)h(que)g(nous)h(d)o (\023)-21 b(ecriv)o(ons)12 b(main)o(tenan)o(t.)75 1671 y ft(5.4)66 b(le)23 b(traducteur)h fc(pei2hpf)146 1772 y fq(la)18 b(traduction)g(n)o(\023)-21 b(ecessite)18 b(que)g(les)g(\023)-21 b(enonc)o(\023)g(es)16 b fn(pei)i fq(accept)o(\023)-21 b(es)17 b(en)h(en)o(tr)o(\023)-21 b(ee)17 b(aien)o(t)h(une)h(forme)e(bien)75 1829 y(pr)o(\023)-21 b(ecise,)13 b(que)g(nous)g(app)q(elons)h fj(forme)g(tr)n(aduisible)p fq(.)e(g)o(\023)-21 b(en)o(\023)g(eralemen)o(t,)11 b(les)h(\023)-21 b(enonc)o(\023)g(es)12 b(transform)o(\023)-21 b(es)10 b(par)j(le)75 1885 y(calcul)i(de)e(ra\016nemen)o(t)g fn(pei)g fq(p)q(our)h(obtenir)f(des)g(\023)-21 b(equations)12 b(assimilables)k(\022)-23 b(a)13 b(des)g(a\013ectations,)f(et)h(des)74 1942 y(\023)-21 b(equations)14 b(r)o(\023)-21 b(ecurren)o(tes)14 b(ordonnanc)o(\023)-21 b(ees,)15 b(ne)g(son)o(t)f(pas)h(sous)g(cette)g (forme)g(traduisible.)h(cep)q(endan)o(t,)75 1998 y(si)d(elle)h(existe,) f(la)g(mise)g(sous)g(forme)f(traduisible)j(d'un)e(tel)f(\023)-21 b(enonc)o(\023)g(e)11 b(est)h(un)i(pro)q(cessus)f(automatisable)75 2055 y(de)19 b(transformation)e(syn)o(taxique)8 b(:)18 b(il)i(est)f(r)o(\023)-21 b(ealis)o(\023)g(e)17 b(dans)i(notre)f (protot)o(yp)q(e)g(par)h(un)g(pr)o(\023)-21 b(e-pro)q(cesseur)75 2111 y(baptis)o(\023)g(e)17 b fk(normhpf)p fq(.)f(dans)h(la)h(suite,)f (nous)h(donnons)f(d'ab)q(ord)h(la)f(forme)g(traduisible)i(c)o(hoisie,)f (ainsi)75 2167 y(que)i(les)g(raisons)f(qui)h(nous)g(on)o(t)e(amen)o (\023)-21 b(e)19 b(\022)-23 b(a)19 b(ce)h(c)o(hoix,)f(puis)h(nous)g (mon)o(trons)e(les)i(transformations)75 2224 y(syn)o(taxiques)15 b(op)o(\023)-21 b(er)o(\023)g(ees)14 b(par)h fk(normhpf)p fq(.)75 2344 y fw(5.4.1)55 b(f)-5 b(orme)18 b(traduisible)146 2429 y fq(le)c(traducteur)f(accepte)h(en)h(en)o(tr)o(\023)-21 b(ee)12 b(un)i(sous-ensem)o(bles)h(des)f(programmes)f fn(pei)p fq(,)g(constitu)o(\023)-21 b(e)13 b(des)74 2486 y(\023)-21 b(equations)15 b(a)o(y)o(an)o(t)e(la)j(forme)e(suiv)m(an)o (te)9 b(:)p eop %%page: 87 89 87 88 bop 75 269 a fl(5.4.)29 b(le)16 b(traducteur)f fk(pei2hpf)1034 b fq(87)p 75 353 1822 2 v 74 409 2 57 v 100 392 a fj(f)m(orme)16 b(tr)n(aduisible)p 1896 409 v 75 411 1822 2 v 74 1021 2 610 v 155 492 a fq(1.)23 b(op)o(\023)-21 b(eration)14 b(g)o(\023)-21 b(eom)o(\023)g(etrique)6

b(:)15 b fk(y)g fq(=)g fk(x)g fa(c)h fk(g)155 586 y fq(2.)23 b(op)o(\023)-21 b(eration)14 b(fonctionnelle)c(:)15 b fk(y)g fq(=)g fk(f)g fa(b)h fk(\(x)942 593 y fg(1)984 586 y fk(/&/)8 b fm(:)g(:)g(:)22 b fk(/&/)7 b(x)1244 593 y fw(n)1267 586 y fk(\))155 680 y fq(3.)23 b(op)o(\023)-21 b(eration)14 b(de)i(c)o(hangemen)o(t)f(de)h(base)7 b(:)15 b fk(y)g fq(=)h fk(h)7 b(::)g(x)155 773 y fq(4.)23 b(propri)o(\023)-21 b(et)o(\023)g(e)13 b(de)j(c)o(hamp)f(de)g(donn)o(\023)-21 b(ees)8 b(:)15 b fk(y)g fq(=)g fk(h)7 b(::)h(y)155 867 y fq(5.)23 b(r)o(\023)-21 b(eduction)15 b(g)o(\023)-21 b(eom)o(\023)g(etrique)6 b(:)15 b fk(y)g fq(=)h fk(fr)e fa(b)i fk(\(gr)23 b fq(;)8 b fa(b)24 b fk(x\))155 961 y fq(6.)f(d)o(\023)-21 b(e\014nition)15 b(r)o(\023)-21 b(ecursiv)o(e)7 b(:)15 b fk(y)g fq(=)h fk(fc)f fa(b)g fk(\(x)24 b(/&/)7 b(\(y)24 b fa(c)g fk(g)1144 968 y fg(1)1162 961 y fk(\))g(/&/)8 b fm(:)g(:)g(:)22 b fk(/&/)7 b(\(y)24 b fa(c)g fk(g)1601 968 y fw(n)1623 961 y fk(\)\))p 1896 1021 v 75 1023 1822 2 v 75 1033 v 74 1089 2 57 v 100 1072 a fj(contr)n(aintes)p 1896 1089 v 75 1091 1822 2 v 74 1494 2 404 v 168 1172 a fq({)f(dans)k(5.)h(la)g(d)o(\023)-21 b(e\014nition)29 b(de)g fk(fr)f fq(doit)f(^)-21 b(etre)27 b(de)i(la)f(forme)g(r)o(\023)-21 b(ecursiv)o(e)28 b(pr)o(\023)-21 b(e-d)o(\023)g(e\014nie)28 b fk(fr)g fq(=)214 1229 y fk(id)9 b fq(#)h fm(\025)p fk(\(a)p fq(;)o fk(b\).\(a)23 b ff(\012)i fk(fr\(b\)\))o fq(,)16 b(o)q(\022)-24 b(u)17 b ff(\012)h fq(est)e(un)i(op)o(\023)-21 b(erateur)16 b(asso)q(ciatif,)h(comm)o(utatif)f(a)o(v)o(ec)f(\023)-21 b(el)o(\023)g(e-)214 1285 y(men)o(t)14 b(neutre.)i(dans)e(le)i(protot)o (yp)q(e)f(actuel,)g(seuls)h fk(+)f fq(et)g fk(*)g fq(son)o(t)g(accept)o (\023)-21 b(es.)168 1379 y({)23 b(dans)16 b(6.)g fk(fc)h fq(doit)f(^)-21 b(etre)15 b(de)j(la)f(forme)f fk(fc)h fq(=)g fk(id)34 b fq(#)10 b fm(\025)p fk(\(a)p fq(;)n fk(b)p fq(;)p fm(:)e(:)g(:)22 b fq(;)o fk(z\).\(a)i ff(\014)1517 1386 y fg(1)1560 1379 y fk(b)f ff(\014)1642 1386 y fg(2)1669 1379 y fm(:)8 b(:)g(:)d ff(\014)1764 1386 y fw(n)1811 1379 y fk(z\))p fq(,)214 1435 y(o)q(\022)-24 b(u)15 b(les)h ff(\014)378 1442 y fw(i)407 1435 y fq(son)o(t)e(des)i(op)o(\023)-21 b(erateurs)14 b(quelconques)i(sur)g(des)f(scalaires.)p 1896 1494 v 75 1496 1822 2 v 146 1556 a(nous)j(dirons)i(qu'un)e(\023) -21 b(enonc)o(\023)g(e)17 b fn(pei)i fq(est)f fj(tr)n(aduisible)h fq(si)g(toutes)f(ses)g(\023)-21 b(equations)18 b(son)o(t)g(sous)h (l'une)75 1613 y(des)e(formes)f(d)o(\023)-21 b(ecrites)17 b(dans)g(le)g(tableau)h fj(f)m(orme)f(tr)n(aduisible)f fq(et)h(si)g(elles)i(resp)q(ecten)o(t)e(les)g(conditions)74 1669 y(\023)-21 b(enonc)o(\023)g(ees)14 b(dans)h(le)h(tableau)g fj(contr)n(aintes)p fq(.)146 1782 y(plusieurs)23 b(raisons)f(nous)g(on) o(t)g(amen)o(\023)-21 b(e)21 b(\022)-23 b(a)22 b(ne)g(consid)o(\023)-21 b(erer)23 b(que)f(cet)g(ensem)o(ble)h(restrein)o(t)f(d'ex-)75 1838 y(pressions.)f(elles)i(nous)e(p)q(ermetten)o(t)g(d'asso)q(cier)h (\022)-23 b(a)20 b(c)o(hacune)i(d'en)o(tre)f(elles,)i(un)e(ensem)o(ble) i(d'ins-)75 1895 y(tructions)16 b(hpf,)g(sans)g(a)o(v)o(oir)g(b)q (esoin)h(d'informations)f(suppl)o(\023)-21 b(emen)o(taires)17 b(con)o(textuelles)h(\(tir)o(\023)-21 b(ees)15 b(du)75 1951 y(programme\).)j(p)o(ar)h(ailleurs,)i(la)f(traduction)g (d'expressions)g(de)h(c)o(hamps)e(de)h(donn)o(\023)-21 b(ees)20 b(plus)h(com-)75 2008 y(pliqu)o(\023)-21 b(ees)17 b(n'est)e(pas)g(toujours)g(p)q(ossible.)i(examinons)e(les)h(probl)o (\022)-21 b(emes)16 b(li)o(\023)-21 b(es)16 b(\022)-23 b(a)15 b(certaines)h(expressions)75 2064 y fn(pei)7 b fq(:)189 2147 y fo(op)o(\023)-25 b(eration)20 b(g)o(\023)-25

b(eom)o(\023)g(etrique)8 b fq(:)16 b(on)i(se)f(limite)i(\022)-23 b(a)17 b(la)g(traduction)g(d')o(\023)-21 b(equations)16 b(de)i(la)f(forme)g fk(y)189 2204 y fq(=)g fk(x)e fa(c)g fk(g)p fq(.)h(consid)o(\023)-21 b(erons)16 b(en)i(e\013et,)d(un)j(c)o (hamp)e(de)h(donn)o(\023)-21 b(ees)17 b(d)o(\023)-21 b(e\014ni)17 b(par)f fk(y)h fq(=)g fk(\(x)24 b fa(c)g fk(g\))15 b fa(c)g fk(f)p fq(.)189 2260 y(la)g(traduction)h(de)h(cette) e(expression)i(supp)q(oserait)f(de)g(la)h(ra\016ner)e(en)h(une)g (expression)h(de)f(la)189 2316 y(forme)f fk(y)g fq(=)h fk(x)f fa(c)g fk(\(g)10 b ff(\016)g fk(f\))p fq(,)15 b(en)h(v)o(\023)-21 b(eri\014an)o(t)15 b(les)h(conditions)h(de)f(la)g (r)o(\022)-21 b(egle)15 b(\(5b\))g(dans)g(l'en)o(vironne-)189 2373 y(men)o(t)i fn(pei)p fq(,)f(et)i(de)f(calculer)i(la)f(comp)q (osition)g(de)g(fonctions)f fk(g)10 b ff(\016)g fk(f)17 b fq(car)g(hpf)g(ne)h(p)q(ermet)g(pas)189 2429 y(d'exprimer)g(la)f (comp)q(osition)i(de)f(fonctions)f(agissan)o(t)g(sur)g(des)h(indices)i (de)d(tableau.)h(on)g(est)189 2486 y(donc)d(conduit)h(\022)-23 b(a)15 b(exprimer)h(ces)f(deux)h(op)o(\023)-21 b(erations)14 b(g)o(\023)-21 b(eom)o(\023)g(etriques)13 b(successiv)o(es)j(en)g(d)o (\023)-21 b(ecomp)q(o-)189 2542 y(san)o(t)16 b(l'expression)i(initiale) h(en)e(deux)f(\023)-21 b(equations)17 b fk(y)f fq(=)h fk(x)1182 2526 y fx(0)1209 2542 y fa(c)f fk(f)g fq(et)h fk(x)1379 2526 y fx(0)1407 2542 y fq(=)g fk(x)e fa(c)h fk(g)p fq(.)g(c'est)g(ce)h(que)p eop %%page: 88 90 88 89 bop 75 269 a fq(88)404 b fl(chapitre)16 b(5.)30 b fn(pei)15 b fl(et)g(les)g(langa)o(ges)g(d)o(a)l(t)l(a-p)l(arall)1735 257 y(\022)1729 269 y(eles)189 397 y fq(fera)f(la)i(phase)f(de)h (normalisation)g(pr)o(\023)-21 b(esen)o(t)o(\023)g(ee)13 b(plus)k(loin.)189 550 y fo(op)o(\023)-25 b(eration)17 b(fonctionnelle)10 b fq(:)k(nous)g(imp)q(osons)h(que)g(tous)e(les)i(c)o (hamps)g(corresp)q(ondan)o(t)f(aux)189 606 y(argumen)o(ts)i(de)i(la)g (fonction)g(utilis)o(\023)-21 b(ee)19 b(par)e(l'op)o(\023)-21 b(eration)17 b(fonctionnelle)i(soien)o(t)f(pr)o(\023)-21 b(esen)o(ts)16 b(dans)189 663 y(l')o(\023)-21 b(equation.)11 b(consid)o(\023)-21 b(erons)12 b(par)g(exemple)h(la)g(fonction)f fk(f)g fq(=)h fm(\025)p fk(\(a)p fq(;)n fk(b\).\(a-\(b*a\)\))e fq(et)h(l')o(\023)-21 b(equation)189 719 y fk(y)12 b fq(=)g fk(f)j fa(b)h fk(\(x1/&/)7 b(x2\))p fq(.)k(sous)i(cette)f (forme,)f(il)j(est)e(tr)o(\022)-21 b(es)11 b(simple)j(de)e(substituer)h (aux)f(argumen)o(ts)189 776 y fk(a)k fq(et)g fk(b)h fq(les)g(c)o(hamps) f fk(x1)h fq(et)f fk(x2)g fq(resp)q(ectiv)o(emen)o(t.)h(dans)f(le)i (cas)e(con)o(traire,)g(par)g(exemple)i fk(y)e fq(=)189 832 y fk(f)f fa(b)g fk(x)p fq(,)g(il)h(est)f(n)o(\023)-21 b(ecessaire)15 b(de)h(consulter)g(dans)f(le)h(reste)f(du)h(programme)e (la)h(d)o(\023)-21 b(e\014nition)16 b(de)g fk(x)p fq(.)189 985 y fo(op)o(\023)-25 b(eration)22 b(in)o(v)o(erse)d(g)o(\023)-25 b(eom)o(\023)g(etrique)7 b fq(:)18 b(l'op)o(\023)-21 b(eration)17 b(de)h(r)o(\023)-21 b(eduction)18 b(g)o(\023)-21 b(eom)o(\023)g(etrique)16 b(de)j fn(pei)189 1041 y fq(p)q(ose)c(le)i (probl)o(\022)-21 b(eme)15 b(du)h(non-d)o(\023)-21 b(eterminisme)17 b(des)e(solutions)i(obten)o(ues.)e(un)g(\023)-21 b(enonc)o(\023)g(e)14 b(constitu)o(\023)-21 b(e)189 1098 y(de)16 b(la)g(seule)g(\023)-21 b(equation)15 b fk(y)h fq(=)g fk(f)f fq(;)8 b fa(b)15 b fk(x)h fq(n'est)f(pas)h(un)g(programme)f fn(pei)p fq(,)g(si)i(la)f (fonction)g fk(f)g fq(n'est)189 1154 y(pas)f(injectiv)o(e)j(car)d(le)i (c)o(hamp)f(solution)h fk(y)f fq(n'est)f(pas)h(unique)i(\(les)e(s)o (\023)-21 b(equences)16 b(de)g(v)m(aleurs)h(on)o(t)189 1211 y(un)g(ordre)g(quelconque\).)h(or,)f(le)h(langage)f(hpf)f(ne)i(p)q (ermet)f(ce)g(t)o(yp)q(e)g(d'op)o(\023)-21 b(eration)16

b(que)i(si)f(la)189 1267 y(comm)o(unication)d(est)g(accompagn)o(\023) -21 b(ee)13 b(d'un)i(op)o(\023)-21 b(erateur)12 b(de)j(r)o(\023)-21 b(eduction,)13 b(\022)-23 b(a)14 b(l'aide)h(des)f fj(intrinsics)189 1324 y fq(de)j(la)g(famille)h fk(xxx)p 527 1324 15 2 v 17 w(scatter)p fq(.)d(c'est)h(p)q(ourquoi)h(nous)g(a)o(v)o(ons)f(c)o (hoisi)i(de)f(ne)g(traduire)g(que)g(les)189 1380 y(r)o(\023)-21 b(eductions)15 b fn(pei)g fq(de)g(la)h(forme)e(5.)75 1562 y fw(5.4.2)55 b(normalisation)17 b(a)n(v)m(an)n(t)i(traduction)146 1649 y fq(comme)f(nous)i(l'a)o(v)o(ons)f(dit)h(en)g(in)o(tro)q (duction,)g(certains)e(\023)-21 b(enonc)o(\023)g(es)19 b(p)q(euv)o(en)o(t)g(^)-21 b(etre)18 b(transform)o(\023)-21 b(es)75 1706 y(syn)o(taxiquemen)o(t)17 b(en)h(des)e(\023)-21 b(enonc)o(\023)g(es)16 b(traduisibles)j(\022)-23 b(a)17 b(l'aide)i(d'un)e(pr)o(\023)-21 b(e-pro)q(cesseur)17 b(agissan)o(t)g(comme)75 1762 y(un)22 b(\014ltre)246 1746 y fg(2)285 1762 y fq(a)o(v)m(an)o(t)f(la)g(traduction)g(propremen) o(t)g(dite.)h(ce)f(pr)o(\023)-21 b(e-pro)q(cesseur)21 b(nomm)o(\023)-21 b(e)20 b fk(normhpf)g fq(est)75 1819 y(en)o(tre)e(autres)f(c)o(harg)o(\023)-21 b(e)17 b(d'in)o(tro)q(duire)h (les)h(d)o(\023)-21 b(e\014nitions)19 b(de)f(c)o(hamps)g(de)g(donn)o (\023)-21 b(ees)18 b(in)o(term)o(\023)-21 b(ediaires)18 b(n)o(\023)-21 b(e-)75 1875 y(cessaires,)19 b(et)f(plus)i(g)o(\023)-21 b(en)o(\023)g(eralemen)o(t)17 b(de)i(transformer)e(l')o(\023)-21 b(enonc)o(\023)g(e)17 b(initial)k(en)d(\023)-21 b(enonc)o(\023)g(e)17 b(traduisible)k(par)75 1931 y(de)15 b(simples)h(a)s(justemen)o(ts)d (syn)o(taxiques.)i(p)o(ar)f(exemple,)h(une)g(\023)-21 b(equation)14 b(non-r)o(\023)-21 b(ecursiv)o(e)14 b(de)h(la)g(forme)75 1988 y fk(y)g fq(=)h fm(e)186 1995 y fg(1)205 1988 y fq(\()p fm(e)244 1995 y fg(2)262 1988 y fq(\()p fm(:)8 b(:)g(:)e(e)362 1995 y fw(n)385 1988 y fq(\()p fk(x)p fq(\))i fm(:)g(:)g(:)l fq(\)\),)15 b(o)q(\022)-24 b(u)15 b fm(e)652 1995 y fw(i)682 1988 y fq(est)g(une)h(simple)h(op)o(\023)-21 b(eration)15 b(g)o(\023)-21 b(eom)o(\023)g(etrique,)13 b(fonctionnelle,)18 b(ou)d(un)75 2044 y(c)o(hangemen)o(t)g(de)h(base,)e (est)h(remplac)o(\023)-21 b(ee)16 b(par)f(l'ensem)o(ble)h(d')o(\023)-21 b(equations)7 b(:)75 2058 y fx(8)75 2096 y(>)75 2108 y(>)75 2120 y(>)75 2133 y(<)75 2208 y(>)75 2220 y(>)75 2233 y(>)75 2245 y(:)133 2097 y fk(y)12 b fq(=)h fm(e)238 2104 y fg(1)257 2097 y fq(\()p fk(y)299 2104 y fr(1)316 2097 y fq(\))133 2153 y fk(y)157 2160 y fr(1)187 2153 y fq(=)g fm(e)256 2160 y fg(2)274 2153 y fq(\()p fk(y)316 2160 y fr(2)333 2153 y fq(\))133 2210 y fm(:)8 b(:)g(:)133 2266 y fk(y)157 2273 y fr(n)187 2266 y fq(=)13 b fm(e)256 2273 y fw(n)278 2266 y fq(\()p fk(x)p fq(\))75 2344 y(l')o(\023)-21 b(enonc)o(\023)g(e)18 b fn(pei)g fq(obten)o(u)h(apr)o(\022)-21 b(es)18 b(ces)i(transformations)d(est)h(\023)-21 b(equiv)m(alen)o(t)19 b(\022)-23 b(a)19 b(l')o(\023)-21 b(enonc)o(\023)g(e)18 b(initial,)j(comme)75 2401 y(nous)15 b(l'a)o(v)o(ons)f(vu)g(en)i (section)f(3.2.)e(la)i(\014gure)g(5.3)e(illustre)k(l'ensem)o(ble)f(des) f(transformations)e(que)i(le)75 2457 y(pr)o(\023)-21 b(e-pro)q(cesseur)15 b(p)q(eut)h(e\013ectuer)f(p)q(our)h(rendre)f (traduisible)i(un)e(\023)-21 b(enonc)o(\023)g(e)6 b(:)p 75 2500 709 2 v 124 2542 a fd(2)p fc(:)j fd(au)14 b(sens)f fi(unix)g fd(du)h(terme.)p eop %%page: 89 91 89 90 bop 75 269 a fl(5.4.)29 b(le)16 b(traducteur)f fk(pei2hpf)1034 b fq(89)p 75 353 1758 2 v 75 790 2 438 v 104 397 a fk(sample)23 b(:)h(\(a,b,c\))14 b ff(7!)i fk(z)104 412 y fx(8)104 449 y(>)104 462 y(>)104 474 y(>)104 487 y(<)104 562 y(>)104 574 y(>)104 586 y(>)104 599 y(:)166

451 y fk(w)f fq(=)h fk(x)f(/&/)7 b(y)166 507 y(z)15 b fq(=)h fk(fc1)e fa(b)i fk(w)166 564 y(x)f fq(=)h fk(fb1)7 b(::)g(\(\(a)24 b fa(c)g fk(fg1)o(\))g fa(c)g fk(fg2\))166 620 y(y)15 b fq(=)h fk(fc3)e fa(b)i fk(\(fc2)23 b fa(b)h fk(\(b)g(/&/)8 b(c\))23 b(/&/)8 b(y)23 b fa(c)i fk(fg3)o(\))1095 397 y(sample)e(:)g(\(a,b,c\))15 b ff(7!)g fk(z)1095 419 y fx(8)1095 456 y(>)1095 469 y(>)1095 481 y(>)1095 493 y(>)1095 506 y(>)1095 518 y(>)1095 531 y(>)1095 543 y(<)1095 618 y(>)1095 630 y(>)1095 643 y(>)1095 655 y(>)1095 668 y(>)1095 680 y(>)1095 693 y(>)1095 705 y(:)1156 451 y fk(z)g fq(=)h fk(fc1)f fa(b)g fk(\(x)24 b(/&/)7 b(y\))1156 507 y(x)15 b fq(=)h fk(fb1)7 b(::)g(x')1156 564 y(x')15 b fq(=)h fk(x'')f fa(c)g fk(fg2)1156 620 y(x'')g fq(=)h fk(a)f fa(c)g fk(fg1)1156 677 y(y1)g fq(=)h fk(fc2)f fa(b)g fk(\(b)24 b(/&/)7 b(c\))1156 733 y(y)15 b fq(=)h fk(fc3)f fa(b)g fk(\(y1)24 b(/&/)7 b(y)24 b fa(c)g fk(fg3\))p 1831 790 v 75 792 1758 2 v 344 869 a fn(fig.)15 b fq(5.3)f(-)31 b fj(t)m(r)n(ansformations)15 b(syntaxiques)g(r)o(\023)-22 b(e)n(alis)o(\023)g(e)n(es)15 b(p)n(ar)h fk(normhpf)75 1012 y fw(5.4.3)55 b(ordonnancemen)n(t)18 b(a)n(v)m(an)n(t)h (traduction)146 1101 y fq(p)o(our)d(pro)q(duire)j(un)f(co)q(de)g (data-parall)o(\022)-21 b(ele,)18 b(nous)f(dev)o(ons)g(\023)-21 b(egalemen)o(t)17 b(ordonner)g(les)g(\023)-21 b(equations)75 1157 y(du)22 b(programme)f fn(pei)g fq(sous)g(forme)g(traduisible.)i (nous)f(utilisons)h(p)q(our)f(cela)g(l'ordre)g(induit)h(par)75 1214 y(les)e(d)o(\023)-21 b(e\014nitions)20 b(de)g(c)o(hamps)g(de)g (donn)o(\023)-21 b(ees)8 b(:)19 b(nous)h(disons)g(qu'un)g(c)o(hamp)g fk(x)g fq(d)o(\023)-21 b(ep)q(end)20 b(causalemen)o(t)75 1270 y(d'un)c(c)o(hamp)g fk(y)g fq(si)g fk(x)g fq(la)g(d)o(\023)-21 b(e\014nition)17 b(de)f fk(x)g fq(con)o(tien)o(t)g(au)f(moins)i(une)f (o)q(ccurrence)h(de)f fk(y)p fq(.)g(a)g(partir)f(des)75 1327 y(c)o(hamps)k(en)h(en)o(tr)o(\023)-21 b(ee,)18 b(nous)h(p)q(ouv)o (ons)h(construire)f(un)h(graphe)f(don)o(t)g(les)h(no)q(euds)g(son)o(t)f (les)h(c)o(hamps)75 1383 y(de)d(donn)o(\023)-21 b(ees)16 b(du)i(programme,)d(et)h(les)i(arcs)e(repr)o(\023)-21 b(esen)o(ten)o(t)15 b(la)i(relation)g fj(\()-9 b(\()q fq(d)o(\023)-21 b(ep)q(end)17 b(causalemen)o(t)g(de)p fj(\))-9 b(\))q fq(.)75 1440 y(l')o(\023)-21 b(enonc)o(\023)g(e)13 b fn(pei)h fq(est)g(traduisible)i(si)e(ce)h(graphe)f(est)g(sans)g (circuit.)h(dans)e(ce)i(cas,)f(dans)g(le)h(programme)75 1496 y(imp)o(\023)-21 b(eratif,)17 b(tout)f(c)o(hamp)i fk(x)f fq(d)o(\023)-21 b(ep)q(endan)o(t)17 b(causalemen)o(t)h(d'un)g(c) o(hamp)f fk(y)g fq(devra)g(appara)-5 b(^)-18 b(\020tre)18 b(apr)o(\022)-21 b(es)16 b fk(y)75 1553 y fq(dans)k(l'ordre)f(des)h (instructions.)g(cette)f(relation)h(sur)g(l'ensem)o(ble)h(des)e(c)o (hamps)h(d'un)g(tel)g(graphe)74 1609 y(\023)-21 b(etan)o(t)15 b(d'ordre)h(partiel,)h(nous)f(p)q(ouv)o(ons)h(c)o(hoisir)g(p)q(our)f (deux)h(c)o(hamps)g(non)f(comparables)h(un)g(ordre)75 1666 y(d'apparition)h(quelconque.)g(de)g(plus,)g(p)q(our)f(p)q(ouv)o (oir)h(traduire)f(les)g(\023)-21 b(equations)17 b(en)h(a\013ectations,) e(le)75 1722 y(c)o(hamp)f(d)o(\023)-21 b(ep)q(endan)o(t)15 b(causalemen)o(t)h(d'une)g(expression)g(ne)f(p)q(eut)g(^)-21 b(etre)14 b(qu'un)i(iden)o(ti\014cateur)1692 1705 y fg(3)1712 1722 y fq(.)146 1780 y(ainsi,)21 b(le)g(programme)f(de)h(droite)f(de)h (la)g(\014gure)g(5.3)e(est)h(ordonnanc)o(\023)-21 b(e)20 b(comme)g(le)i(mon)o(tre)d(la)75 1837 y(\014gure)e(5.4.)f(l'ordre)h (d'apparition)h(des)e(\023)-21 b(equations)17 b(dans)g(le)h(syst)o (\022)-21 b(eme)16 b(sera)g(celui)j(des)f(instructions)75 1893 y(du)e(programme)e(imp)o(\023)-21 b(eratif.)146 2010 y(cette)16 b(m)o(\023)-21 b(etho)q(de)16 b(d'ordonnancemen)o(t)g

(est)h(simple)h(car)e(elle)i(tire)f(partie)g(de)g(l'ordonnancemen)o(t) 75 2066 y(propre)f(au)h(mo)q(d)o(\022)-21 b(ele)16 b(data-parall)o (\022)-21 b(ele)8 b(:)16 b(comme)g(nous)g(l'a)o(v)o(ons)g(d)o(\023)-21 b(ej\022)e(a)15 b(vu,)h(le)h(\014l)g(d'ex)o(\023)-21 b(ecution)17 b(des)f(op)o(\023)-21 b(e-)75 2123 y(rations)14 b(parall)o(\022)-21 b(eles)15 b(est)g(en)g(e\013et)f(s)o(\023)-21 b(equen)o(tiel.)14 b(ici,)i(les)f(c)o(hamps)f(de)h(donn)o(\023)-21 b(ees)15 b(ou)f(v)m(ariables)i(parall)o(\022)-21 b(eles)75 2179 y(son)o(t)14 b(consid)o(\023)-21 b(er)o(\023)g(ees)15 b(dans)g(leur)h(en)o(ti)o(\022)-21 b(eret)o(\023)g(e.)14 b(plus)h(pr)o(\023)-21 b(ecis)o(\023)g(emen)o(t,)14 b(cela)i (signi\014e)h(que)e(l'ordonnancemen)o(t)75 2236 y(e\013ectu)o(\023)-21 b(e)16 b(implique)k(qu'une)e(v)m(ariable)g(parall)o(\022)-21 b(ele)18 b(est)f(compl)o(\022)-21 b(etemen)o(t)16 b(d)o(\023)-21 b(e\014nie)18 b(par)f(une)h(instruction,)75 2292 y(c'est-\022)-23 b(a-dire)17 b(que)g(toutes)f(ses)g(v)m(aleurs)i(son)o(t)c(\023)-21 b(ev)m(alu)o(\023)g(ees)16 b(lors)h(de)g(cette)f(instruction.)h(p)o(ar) f(opp)q(osition,)75 2348 y(nous)c(v)o(errons)f(en)i(section)f(5.10.2)e (qu'un)i(ordonnancemen)o(t)g(issu)h(des)f(tec)o(hniques)h(de)f(parall)o (\023)-21 b(elisation)75 2405 y(p)q(ermet)14 b(d')o(\023)-21 b(ev)m(aluer)13 b(certains)h(sous-ensem)o(bles)h(de)f(v)m(aleurs)g (d'une)g(v)m(ariable)h(parall)o(\022)-21 b(ele)14 b(\022)-23 b(a)13 b(des)h(instan)o(ts)75 2461 y(distincts.)p 75 2500 709 2 v 124 2542 a fd(3)p fc(:)9 b fd(une)k(exception)i(est)e (faite)g(actuellemen)o(t)j(p)q(our)d(les)h(alignemen)o(ts)h(d)o(\023) -18 b(eduits)15 b(d'un)e(c)o(hangemen)o(t)i(de)e(base)p eop %%page: 90 92 90 91 bop 75 269 a fq(90)404 b fl(chapitre)16 b(5.)30 b fn(pei)15 b fl(et)g(les)g(langa)o(ges)g(d)o(a)l(t)l(a-p)l(arall)1735 257 y(\022)1729 269 y(eles)75 383 y fk(sample)23 b(:)h(\(a,b,c\))14 b ff(7!)i fk(z)75 405 y fx(8)75 442 y(>)75 454 y(>)75 467 y(>)75 479 y(>)75 492 y(>)75 504 y(>)75 517 y(>)75 529 y(<)75 604 y(>)75 616 y(>)75 629 y(>)75 641 y(>)75 654 y(>)75 666 y(>)75 679 y(>)75 691 y(:)137 437 y fk(x'')f fq(=)g fk(a)g fa(c)h fk(fg1)137 493 y(y1)f fq(=)g fk(fc2)g fa(b)g fk(\(b)24 b(/&/)8 b(c\))137 550 y(y)15 b fq(=)g fk(fc3)g fa(b)h fk(\(y1)23 b(/&/)8 b(y)23 b fa(c)i fk(fg3)o(\))137 606 y(x')15 b fq(=)g fk(x'')g fa(c)g fk(fg2)137 662 y(x)g fq(=)g fk(fb1)7 b(::)h(x')137 719 y(z)15 b fq(=)g fk(fc1)g fa(b)h fk(\(x)23 b(/&/)8 b(y\))293 862 y fn(fig.)15 b fq(5.4)f(-)31 b fj(t)m(ri)15 b(des)g(\023)-22 b(e)n(quations)16 b(selon)f(l'or)n(dr)n(e)h(des)g(d)o(\023)-22 b(ep)n(endanc)n(es)15 b(c)n(ausales)146 1004 y fq(pratiquemen)o(t)10 b(dans)g(le)h(protot)o (yp)q(e,)e(l'ordonnancemen)o(t)i(est)f(r)o(\023)-21 b(ealis)o(\023)g(e) 9 b(par)i(un)f(autre)g(\014ltre)h(baptis)o(\023)-21 b(e)75 1060 y fk(ord)p fq(,)14 b(appliqu)o(\023)-21 b(e)16 b(apr)o(\022)-21 b(es)15 b fk(normhpf)p fq(.)75 1195 y fw(5.4.4)55 b(synopsis)19 b(du)g(fonctionnemen)n(t)d(du)j(traducteur)146 1285 y fq(lorsqu'elles)f(ab)q(outissen)o(t)g(\022)-23 b(a)17 b(une)h(forme)f(traduisible,)i(des)f(transformations)e(pr)o(\023)-21 b(ec)o(\023)g(eden)o(tes)16 b(r)o(\023)-21 b(e-)75 1341 y(sulte)14 b(un)g(programme)e fn(pei)i fq(don)o(t)f(la)g(structure)h (est)f(sem)o(blable)i(\022)-23 b(a)13 b(celle)i(d'un)f(programme)e (parall)o(\022)-21 b(ele.)75 1398 y(le)22 b(tra)o(v)m(ail)g(restan)o(t) f(\022)-23 b(a)21 b(r)o(\023)-21 b(ealiser)21 b(se)h(r)o(\023)-21 b(eduit)22 b(main)o(tenan)o(t)f(\022)-23 b(a)21 b(la)h(traduction)g (des)f(\023)-21 b(equations)21 b(une)h(\022)-23 b(a)75 1454 y(une,)17 b(et)f(\022)-23 b(a)15 b(l'inf)o(\023)-21 b(erence)18 b(des)e(dimensions)i(des)f(v)m(ariables)g(parall)o(\022)-21

b(eles)17 b(utilis)o(\023)-21 b(ees.)17 b(le)g(m)o(\023)-21 b(ecanisme)16 b(de)g(la)75 1511 y(traduction)f(p)q(eut)g(^)-21 b(etre)14 b(r)o(\023)-21 b(esum)o(\023)g(e)14 b(de)h(la)h(mani)o(\022) -21 b(ere)15 b(suiv)m(an)o(te)8 b(:)131 1614 y(1.)22 b(analyse)g(lexicale)i(et)d(syn)o(taxique)h(du)g(programme)e fn(pei)i fq(et)f(construction)h(d'un)g(arbre)f(de)189 1670 y(syn)o(taxe)14 b(abstraite)h(\(ast\).)131 1773 y(2.)22 b(p)o(arcours)15 b(de)i(l'ast)g(p)q(our)f(sto)q(c)o(k)o(er)g (les)h(informations)g(pr)o(\023)-21 b(esen)o(tes)15 b(dans)i(l')o(\023) -21 b(equation)16 b(dans)g(un)189 1829 y(format)9 b(de)j(donn)o(\023) -21 b(ees)10 b(in)o(term)o(\023)-21 b(ediaire.)11 b(on)h(v)o(\023)-21 b(eri\014e)11 b(\022)-23 b(a)11 b(ce)g(momen)o(t)f(que)i(les)f (informations)g(retir)o(\023)-21 b(ees)189 1886 y(des)14 b(\023)-21 b(equations)15 b(p)q(ourron)o(t)e(^)-21 b(etre)14 b(exploit)o(\023)-21 b(ees)16 b(p)q(our)f(la)h(pro)q(duction)g(de)g(co) q(de.)131 1989 y(3.)22 b(p)o(asse)f(suppl)o(\023)-21 b(emen)o(taire)23 b(sur)g(l'ensem)o(ble)h(des)d(\023)-21 b(equations)22 b(p)q(our)h(inf)o(\023)-21 b(erer)22 b(des)h (informations)189 2045 y(globales)f(concernan)o(t)g(les)h(domaines)g (des)f(c)o(hamps)g(de)g(donn)o(\023)-21 b(ees.)22 b(on)g(compl)o(\022) -21 b(ete)22 b(alors)g(les)189 2102 y(informations)15 b(du)h(format)d(in)o(term)o(\023)-21 b(ediaire.)131 2204 y(4.)22 b(p)o(assage)16 b(des)i(informations)f(\022)-23 b(a)18 b(un)g(formateur)e(de)i(texte)f(qui)i(exploite)f(les)h (informations)e(du)189 2261 y(format)c(in)o(term)o(\023)-21 b(ediaire)16 b(p)q(our)g(pro)q(duire)g(le)g(co)q(de)g(hpf.)75 2396 y fw(5.4.5)55 b(t)-5 b(raduction)19 b(hpf)g(des)f(\023)-27 b(equations)17 b fv(pei)146 2486 y fq(nous)c(nous)g(in)o(t)o(\023)-21 b(eressons)13 b(main)o(tenan)o(t)g(aux)g(instructions)h(hpf)f(asso)q (ci)o(\023)-21 b(ees)13 b(\022)-23 b(a)14 b(c)o(hacune)g(des)e(\023)-21 b(equa-)75 2542 y(tions)15 b(traduisibles.)p eop %%page: 91 93 91 92 bop 75 269 a fl(5.4.)29 b(le)16 b(traducteur)f fk(pei2hpf)1034 b fq(91)75 397 y fo(op)o(\023)-25 b(eration)19 b(g)o(\023)-25 b(eom)o(\023)g(etrique)146 491 y fq(soit)15 b(l')o(\023)-21 b(equation)15 b(de)g(la)h(forme)f(1.:)862 561 y fk(y)d fq(=)h fk(x)i fa(c)h fk(g)75 660 y fq(rapp)q(elons)k(que)e fk(g)g fq(est)g(de)h(la)g(forme)e fm(\025)p fq(\()p fm(z)r fq(\))g ff(j)g fm(dom)p fq(\()p fk(g)p fq(\))p fm(:)p fk(g)p fq(\()n fm(z)r fq(\))h(et)g(que)h(le)g(c)o(hamp)f fk(y)g fq(est)g(\()p fm(v)1641 667 y fr(x)1668 660 y ff(\016)10 b fk(g)18 b fq(:)f fm(\033)1799 667 y fr(x)1816 660 y fq(\).)75 717 y(l'instruction)i fk(forall)e fq(d'hpf)g(autorise)h (une)g(traduction)g(directe)h(de)f(l'op)o(\023)-21 b(eration)17 b(g)o(\023)-21 b(eom)o(\023)g(etrique.)75 773 y(nous)15 b(traduisons)g(l')o(\023)-21 b(equation)15 b(pr)o(\023)-21 b(ec)o(\023)g(eden)o(te)14 b(par)8 b(:)563 890 y fk(forall)23 b(\()p fm(z)15 b ff(2)e fm(dom)p fq(\()p fk(g)p fq(\))p fk(\))23 b(y\()p fm(z)r fk(\))g(=)h(x\(g\()p fm(z)r fk(\)\))75 1001 y fq(si)19 b(le)f(domaine)h(de)f fk(g)g fq(n'est)f(pas)h(pr)o (\023)-21 b(ecis)o(\023)g(e)17 b(dans)h(la)g(d)o(\023)-21 b(e\014nition)19 b(de)g(la)f(fonction,)g(le)g(domaine)h(utilis)o(\023) -21 b(e)75 1058 y(est)17 b fm(dom)p fq(\()p fm(\033)278 1065 y fr(x)294 1058 y fq(\).)f(de)h(plus,)h(la)f(con)o(train)o(te)f fm(img)r fq(\()p fk(g)p fq(\))e ff(\022)h fm(dom)p fq(\()p fm(v)1122 1065 y fr(x)1139 1058 y fq(\))h(garan)o(tit)g(que)h(les)h (indices)h fk(g\()p fm(z)r fk(\))d fq(son)o(t)75 1114 y(v)m(alides)h(p)q(our)e(le)h(tableau)g fk(x)p fq(.)f(p)o(ar)f (exemple,)i(la)g(traduction)f(de)h(l')o(\023)-21 b(equation)690 1226 y fk(y)15 b fq(=)g fk(x)g fa(c)h fk(right)555 1282

y fq(a)o(v)o(ec)50 b fk(right)14 b fq(=)i fm(\025)p fk(\(i\))p ff(j)p fk(\(1)p fm(<)p fk(i)p ff(\024)p fk(100\).\(i-1\))75 1394 y fq(est)f fk(forall)23 b(\(i=2:100\))g(y\(i\))g(=)h(x\(i-1\))p fq(.)75 1540 y fo(op)o(\023)-25 b(eration)19 b(fonctionnelle)146 1634 y fq(soit)c(l')o(\023)-21 b(equation)15 b(de)g(la)h(forme)f(2.)7 b(:)676 1750 y fk(y)12 b fq(=)h fk(f)i fa(b)h fk(\(x)898 1757 y fg(1)940 1750 y fk(/&/)7 b fm(:)h(:)g(:)22 b fk(/&/)8 b(x)1200 1757 y fw(n)1222 1750 y fk(\))75 1865 y fq(cette)14 b(\023)-21 b(equation)14 b(est)h(traduite)h(par)f(l'instruction)h(hpf)7 b(:)284 1981 y fk(forall)23 b(\()p fm(z)15 b ff(2)e fm(dom)p fk(\()p fm(\033)690 1988 y fr(x)706 1981 y fk(\))24 b(,)g fm(z)15 b ff(2)e fm(dom)p fk(\(f\)\))23 b(y\()p fm(z)r fk(\))g(=)h(f\(x)1324 1988 y fg(1)1342 1981 y fq(\()p fm(z)r fq(\))p fk(,)p fm(:)8 b(:)g(:)d fk(,x)1533 1988 y fw(n)1555 1981 y fq(\()p fm(z)r fq(\))p fk(\))75 2093 y fq(notons)17 b(que)h(nous)g(supp)q(osons)g(ici)h fm(dom)p fq(\()p fm(\033)841 2100 y fr(x)858 2093 y fq(\))d(=)i fm(dom)p fq(\()p fm(\033)1075 2100 y fr(x)1090 2104 y fo(1)1104 2093 y fq(\))f(=)g fm(:)8 b(:)g(:)15 b fq(=)i fm(dom)p fq(\()p fm(\033)1443 2100 y fr(x)1458 2104 y fo(n)1473 2093 y fq(\).)g(cette)g(con)o(train)o(te)75 2150 y(actuelle)g(p)q(eut)d(^)-21 b(etre)15 b(lev)o(\023)-21 b(ee)15 b(dans)g(une)h(v)o(ersion)f(future)h(du)f(traducteur.)75 2206 y(la)j(restriction)g(de)g(l'ensem)o(ble)h(des)e(pro)q(cesseurs)h (virtuels)h(v)m(alides)g(\022)-23 b(a)18 b fm(dom)p fq(\()p fk(f)p fq(\))e(est)h(repr)o(\023)-21 b(esen)o(t)o(\023)g(e)16 b(par)75 2262 y(la)g(partie)f fj(masque)g fq(de)h(l'instruction)g fk(forall)p fq(.)e(nous)h(traduirons)h(par)f(exemple,)h(l')o(\023)-21 b(equation)7 b(:)646 2374 y fk(y)15 b fq(=)g fk(divide)g fa(b)g fk(\(x1/&/)7 b(x2\))646 2431 y(divide)14 b fq(=)i fm(\025)p fk(\(a)p fq(;)o fk(b\))p ff(j)p fk(\(b)p ff(6)p fq(=)p fk(0\).\(a/b\))75 2542 y fq(en)g fk(forall)23 b(\()p fm(z)14 b ff(2)f fm(dom)p fk(\()p fm(\033)541 2549 y fr(x2)574 2542 y fk(\),x2\()p fm(z)r fk(\).neq.0\))22 b(y\()p fm(z)r fk(\))h(=)h(x1\()p fm(z)r fk(\)/x2\()p fm(z)r fk(\))p eop %%page: 92 94 92 93 bop 75 269 a fq(92)404 b fl(chapitre)16 b(5.)30 b fn(pei)15 b fl(et)g(les)g(langa)o(ges)g(d)o(a)l(t)l(a-p)l(arall)1735 257 y(\022)1729 269 y(eles)75 397 y fo(propri)o(\023)-25 b(et)o(\023)g(e)17 b(de)h(c)o(hamp)f(de)g(donn)o(\023)-25 b(ees)146 491 y fq(l')o(\023)k(equation)14 b fk(x)h fq(=)g fk(h)8 b(::)f(x)15 b fq(exprime)h(que)g(l'application)h(de)e(la)g (fonction)h(iden)o(tit)o(\023)-21 b(e)15 b(sur)g(le)h(domaine)75 548 y(des)e(v)m(aleurs)g(et)f(r)o(\023)-21 b(ef)o(\023)g(erence)12 b(de)h fk(x)g fq(ne)h(mo)q(di\014e)g(pas)f fk(x)p fq(.)g(dans)g(ce)g(t) o(yp)q(e)g(d')o(\023)-21 b(equation,)13 b(la)g(fonction)h(utilis)o (\023)-21 b(ee)75 604 y(dans)14 b(le)h(c)o(hangemen)o(t)e(de)i(base)f (ne)g(p)q(eut)g(^)-21 b(etre)12 b(autre)i(que)g(l'iden)o(tit)o(\023)-21 b(e.)14 b(en)g(e\013et,)g(de)g(par)g(la)g(d)o(\023)-21 b(e\014nition)75 661 y(du)18 b(c)o(hangemen)o(t)g(de)g(base,)f(nous)h (dev)o(ons)g(v)o(\023)-21 b(eri\014er)18 b(les)f(\023)-21 b(egalit)o(\023)g(es)6 b(:)18 b fm(v)1267 668 y fr(x)1302 661 y fq(=)g fm(v)1377 668 y fr(x)1405 661 y ff(\016)10 b fk(h)1462 644 y fq(-1)1517 661 y fq(et)17 b fm(\033)1598 668 y fr(x)1633 661 y fq(=)h fm(\033)1712 668 y fr(x)1740 661 y ff(\016)10 b fk(h)1797 644 y fq(-1)1834 661 y fq(.)75 717 y(nous)22 b(p)q(ouv)o(ons)h(d)o(\023)-21 b(eduire)23 b(de)g(cette)e(\023)-21 b(equation)22 b(les)h(dimensions)h(de)f(la)g(v) m(ariable)h fk(x)e fq(utilis)o(\023)-21 b(ee)23 b(dans)75

773 y(le)e(programme)e(hpf,)g(car)h(les)h(v)m(aleurs)g(du)g(c)o(hamp)f fk(x)g fq(son)o(t)f(plac)o(\023)-21 b(ees)20 b(dans)h fm(dom)p fq(\()p fm(\033)1578 780 y fr(x)1594 773 y fq(\))g ff(\022)g fm(dom)p fq(\()p fk(h)p fq(\).)75 830 y(cette)11 b(forme)f(d')o(\023)-21 b(equation)11 b(n'est)f(donc)i(pas)f (directemen)o(t)h(traduite)f(sous)g(forme)f(d'instructions)i(hpf,)75 886 y(mais)18 b(utilis)o(\023)-21 b(ee)18 b(p)q(our)g(dimensionner)i (le)e(tableau)g(utilis)o(\023)-21 b(e)18 b(p)q(our)g(la)g(traduction)g (du)g(c)o(hamp)f fk(x)p fq(.)g(cette)75 943 y(information)12 b(est)f(utilis)o(\023)-21 b(ee)13 b(conjoin)o(temen)o(t)e(a)o(v)o(ec)g (les)i(c)o(hangemen)o(ts)e(de)h(base)g(lian)o(t)g(di\013)o(\023)-21 b(eren)o(ts)11 b(c)o(hamps)75 999 y(de)16 b(donn)o(\023)-21 b(ees.)75 1144 y fo(op)o(\023)c(eration)19 b(de)e(c)o(hangemen)o(t)g (de)h(base)146 1238 y fq(une)e(\023)-21 b(equation)15 b(de)i(la)g(forme)f fk(y)g fq(=)h fk(h)7 b(::)h(x)16 b fq(indique)j(que)e(toute)e(v)m(aleur)j(plac)o(\023)-21 b(ee)17 b(au)f(p)q(oin)o(t)h fm(z)h fq(dans)75 1295 y(le)g(c)o(hamp)g fk(y)f fq(est)g(aussi)h(la)g(v)m(aleur)h(plac)o(\023)-21 b(ee)17 b(au)h(p)q(oin)o(t)g fk(h\()p fm(z)r fk(\))f fq(dans)h(le)g(c)o(hamp)g fk(x)p fq(.)f(on)h(p)q(eut)g(imaginer)75 1351 y(deux)e(mani)o(\022)-21 b(eres)15 b(de)g(traduire)h(cette)e(\023) -21 b(equation.)146 1412 y(la)16 b(premi)o(\022)-21 b(ere)17 b(consiste)g(\022)-23 b(a)16 b(d)o(\023)-21 b(eterminer)17 b(quel)h(tableau)f(est)f(calcul)o(\023)-21 b(e)18 b(le)f(premier)h (lors)e(de)h(l'ex)o(\023)-21 b(ecu-)75 1468 y(tion)16 b(du)h(programme)d(\(supp)q(osons)j(que)f(ce)g(soit)g fk(x)p fq(\),)f(et)h(\022)-23 b(a)15 b(recopier)i(les)g(v)m(aleurs)g fk(x\()p fm(z)r fk(\))e fq(en)i fk(y\(h\()p fm(z)r fk(\)\))p fq(.)75 1525 y(cette)11 b(fa\030)-20 b(con)12 b(de)g(pro)q(c)o(\023)-21 b(eder)12 b(implique)i(des)e(comm)o(unications)g(lors)g(de)h(l'ex)o (\023)-21 b(ecution,)11 b(mais)h(est)g(l'unique)75 1581 y(p)q(ossibilit)o(\023)-21 b(e)14 b(de)g(traduction)f(dans)g(des)g (langages)f(data-parall)o(\022)-21 b(eles)13 b(n'o\013ran)o(t)e(pas)i (la)g(p)q(ossibilit)o(\023)-21 b(e)15 b(d'ali-)75 1638 y(gnemen)o(t.)146 1698 y(l'autre)20 b(c)o(hoix)h(de)g(traduction)g (consid)o(\022)-21 b(ere)21 b(que)g(l')o(\023)-21 b(equation)20 b(indique)j(commen)o(t)d(les)h(tableaux)75 1755 y(son)o(t)d(plac)o (\023)-21 b(es)18 b(les)i(uns)f(par)f(rapp)q(ort)g(aux)g(autres)g(sur)h (la)g(mac)o(hine)g(virtuelle.)h(nous)f(a)o(v)o(ons)e(vu)i(que)75 1811 y(hpf)i(o\013re)f(la)i(p)q(ossibilit)o(\023)-21 b(e)22 b(de)g(traduire)f(cette)g(notion)h(a)o(v)o(ec)e(la)i(directiv)o (e)g fk(align)p fq(.)e(ce)h(c)o(hoix)h(est)75 1868 y(pr)o(\023)-21 b(ef)o(\023)g(erable)16 b(dans)i(la)f(mesure)h(o)q(\022)-24 b(u)17 b(il)i(n'induit)g(pas)e(de)h(comm)o(unication)g(\022)-23 b(a)17 b(l'ex)o(\023)-21 b(ecution.)17 b(av)o(ec)h(cette)75 1924 y(m)o(\023)-21 b(etho)q(de)12 b(nous)g(c)o(hoisissons)h(d'aligner) g(les)g(tableaux)f fk(x)g fq(et)g fk(y)g fq(relativ)o(emen)o(t)h(\022) -23 b(a)12 b(un)g(template)h(comm)o(un)75 1981 y fk(t)p fq(.)i(sc)o(h)o(\023)-21 b(ematiquemen)o(t,)14 b(les)i(alignemen)o(ts)g (corresp)q(ondan)o(ts)f(\022)-23 b(a)15 b(l')o(\023)-21 b(equation)15 b(pr)o(\023)-21 b(ec)o(\023)g(eden)o(te)14 b(son)o(t)7 b(:)687 2092 y fk(align)23 b(x\()p fm(z)r fk(\))h(with)f(t\()p fm(z)r fk(\))687 2148 y(align)g(y\()p fm(z)r fk(\))h(with)f(t\(h\()p fm(z)r fk(\)\))75 2256 y fq(le)d(template)f(doit)g(p)q(ouv)o(oir)h(con)o(tenir)f(les)h(di\013) o(\023)-21 b(eren)o(ts)18 b(tableaux)i(du)f(programme.)f(p)o(our)g (cela,)i(ses)75 2312 y(b)q(ornes)13 b(son)o(t)f(calcul)o(\023)-21 b(ees)14 b(de)f(fa\030)-20 b(con)13 b(\022)-23 b(a)13 b(d)o(\023)-21 b(e\014nir)13 b(l'en)o(v)o(elopp)q(e)h(parall)o(\023)-21 b(el)o(\023)g(epip)o(\022)g(edique)15 b(de)e fm(dom)p

fq(\()p fk(h)p fq(\))5 b ff([)g fm(img)r fq(\()p fk(h)p fq(\).)75 2369 y(en)12 b(supp)q(osan)o(t)f(que)h(les)h(autres)d(\023) -21 b(equations)11 b(du)h(programme)e fn(pei)i fq(nous)f(app)q(orten)o (t)h(des)g(informations)75 2425 y(sur)23 b(les)g(b)q(ornes)g(des)g (tableaux,)g(et)g(le)g(t)o(yp)q(e)g fm(ty)r(pe)g fq(des)g(v)m(aleurs)h (sto)q(c)o(k)o(\023)-21 b(ees,)21 b(nous)i(p)q(ouv)o(ons)g(alors)75 2482 y(pro)q(duire)16 b(les)g(d)o(\023)-21 b(eclarations)15 b(des)h(tableaux)f(et)g(du)h(template.)146 2542 y(supp)q(osons)f(qu'on) g(inf)o(\022)-21 b(ere)14 b(du)i(programme)d(que)j(les)f(tableaux)g fk(x)g fq(et)g fk(y)f fq(son)o(t)g(de)h(taille)i([1)8 b fm(:)g(:)g(:)t(n)p fq(])h ff(\002)p eop %%page: 93 95 93 94 bop 75 269 a fl(5.4.)29 b(le)16 b(traducteur)f fk(pei2hpf)1034 b fq(93)75 397 y([1)8 b fm(:)g(:)g(:)d(n)p fq(])15 b(alors)g(les)g(d)o(\023)-21 b(eclarations)15 b(des)h(tableaux)g(et)f(du)g(template)h(son)o(t)6 b(:)637 504 y fm(ty)r(pe)24 b fk(x\(n\),)f fm(ty)r(pe)h fk(y\(h\()p fq(1)p fk(\):h\()p fm(n)p fk(\)\))637 560 y(template)e(t\()p fm(dom)p fq(\()p fk(h)p fq(\))9 b ff([)i fm(img)r fq(\()p fk(h)p fq(\))p fk(\))75 662 y fq(en\014n,)k(\022)-23 b(a)14 b(l'ex)o(\023)-21 b(ecution,)14 b(il)i(reste)e(\022)-23 b(a)14 b(recopier)h(les)g(v)m(aleurs)h(du)e(tableau)h(d)o(\023)-21 b(ej\022)e(a)14 b(calcul)o(\023)-21 b(e)15 b(dans)f(le)i(nouv)o(eau)75 718 y(a\014n)11 b(de)g(resp)q(ecter)h(l')o(\023)-21 b(egalit)o(\023)g (e)10 b(des)h(v)m(aleurs)h(sp)o(\023)-21 b(eci\014)o(\023)g(ee)10 b(par)h(l')o(\023)-21 b(equation)10 b fn(pei)h fq(\(con)o(trairemen)o (t)f(au)h(premier)75 775 y(mo)q(de)j(de)f(traduction,)g(cette)h(copie)g (n'engendre)g(pas)f(de)h(comm)o(unication)g(du)g(fait)f(des)h (alignemen)o(ts)75 831 y(r)o(\023)-21 b(ealis)o(\023)g(es\).)17 b(illustrons)j(simplemen)o(t)f(ce)g(pro)q(c)o(\023)-21 b(ed)o(\023)g(e)18 b(a)o(v)o(ec)g(l'exemple)i(d'un)f(d)o(\023)-21 b(ecalage)18 b(en)o(tre)h(tableaux.)75 888 y(consid)o(\023)-21 b(erons)15 b(les)g(\023)-21 b(equations)14 b(suiv)m(an)o(tes,)i(o)q (\022)-24 b(u)15 b fk(x)g fq(est)g(un)g(c)o(hamp)h(en)f(en)o(tr)o(\023) -21 b(ee)7 b(:)630 992 y fk(x)15 b fq(=)h fk(matrix)6 b(::)i(x)630 1048 y(y)15 b fq(=)h fk(transl)6 b(::)i(x)496 1105 y fq(a)o(v)o(ec)49 b fk(transl)14 b fq(=)i fm(\025)p fk(\(i,j\))p ff(j)p fk(\(1)p ff(\024)p fk(i,j)p ff(\024)p fk(n\).\(i+1,j\))496 1161 y fq(et)96 b fk(matrix)14 b fq(=)i fm(\025)p fk(\(i,j\))p ff(j)p fk(\(1)p ff(\024)p fk(i,j)p ff(\024)p fk(n\).\(i,j\))75 1263 y fq(la)24 b(premi)o(\022)-21 b(ere)22 b(\023)-21 b(equation,)23 b(comme)h(nous)g(l'a)o(v)o(ons)f(vu)h(pr)o(\023)-21 b(ec)o(\023)g (edemmen)o(t,)22 b(con)o(train)o(t)h(les)h(domaines)75 1319 y(de)c(r)o(\023)-21 b(ef)o(\023)g(erence)19 b(et)g(de)i(v)m (aleurs)f(de)h fk(x)e fq(au)h(domaine)g(de)h fk(matrix)1188 1302 y fq(-1)1225 1319 y fq(,)e(c'est-\022)-23 b(a-dire)21 b(que)f(ces)g(domaines)75 1376 y(son)o(t)i(inclus)i(dans)e ff(f)p fq(\()p fm(i;)8 b(j)s fq(\))22 b ff(j)j fq(1)p ff(\024)p fm(i;)8 b(j)s ff(\024)n fm(n)p ff(g)p fq(.)22 b(la)h(seconde)f(\023)-21 b(equation,)21 b(toujours)h(selon)h(la)g(d)o (\023)-21 b(e\014nition)75 1432 y(du)22 b(c)o(hangemen)o(t)f(de)h (base,)f(con)o(train)o(t)g fm(dom)p fq(\()p fm(v)917 1439 y fr(y)934 1432 y fq(\))g(et)g fm(dom)p fq(\()p fm(\033)1162 1439 y fr(y)1179 1432 y fq(\))7 b(:)21 b(par)g(exemple)i fm(v)1529 1439 y fr(y)1568 1432 y fq(=)f fm(v)1647 1439 y fr(x)1696 1432 y ff(\016)10 b fk(h)1753 1416 y fq(-1)1811 1432 y fq(=)75 1489 y fm(v)97 1496 y fr(x)125 1489 y ff(\016)f fm(\025)p fk(\(i,j\))p ff(j)p fk(\(2)p ff(\024)p fk(i)p ff(\024)p fk(n+1)e(&)h(1)p ff(\024)p fk(j)p ff(\024)p

fk(n\).\(i-1,j\))o fq(,)14 b(qui)j(implique)g fm(dom)p fq(\()p fm(v)1343 1496 y fr(y)1360 1489 y fq(\))12 b ff(\022)h(f)p fq(\()p fm(i;)8 b(j)s fq(\))i ff(j)j fq(2)p ff(\024)p fm(i)p ff(\024)p fm(n)d fq(+)h(1)e ff(^)75 1545 y fq(1)p ff(\024)p fm(j)s ff(\024)p fm(n)p ff(g)p fq(.)15 b(nous)g(allons)h(donc)f(traduire)h(ces)e(\023)-21 b(equation)15 b(par)7 b(:)507 1652 y fm(ty)r(pe)25 b fk(x\(1:n\),)e fm(ty)r(pe)h fk(y\(2:n+1\))507 1709 y(template)f (t\(n+1,n\))507 1765 y(align)h(x\(i,j\))f(with)g(t\(i,j\))507 1821 y(align)h(y\(i,j\))f(with)g(t\(i+1,j\))507 1878 y(forall)g(\(i=1:n,j=1:n\))g(y\(i+1,j\))f(=)i(x\(i,j\))75 1979 y fj(r)n(estrictions)6 b fq(:)75 2095 y(l'expressivit)o(\023)-21 b(e)17 b(de)g(la)g(directiv)o(e)h fk(align)e fq(n')o(\023)-21 b(etan)o(t)15 b(pas)h(aussi)h(grande)g(que)g(celles)i(des)e(fonctions)g (ap-)75 2151 y(paraissan)o(t)g(dans)g(le)i(c)o(hangemen)o(t)e(de)h (base,)f(nous)g(sommes)g(amen)o(\023)-21 b(es)17 b(\022)-23 b(a)17 b(consid)o(\023)-21 b(erer)17 b(plusieurs)j(res-)75 2208 y(trictions.)e(la)f(premi)o(\022)-21 b(ere)18 b(est)f(li)o(\023) -21 b(ee)18 b(\022)-23 b(a)18 b(la)g(forme)f(a\016ne)g(des)h(alignemen) o(ts)h(hpf.)e(p)o(ar)f(cons)o(\023)-21 b(equen)o(t)17 b(la)75 2264 y(fonction)f(de)f(c)o(hangemen)o(t)g(de)h(base)f(doit)f(^) -21 b(etre)14 b(de)i(la)g(forme)7 b(:)443 2375 y fk(h)13 b fq(=)g fm(\025)p fk(\()p fm(i)595 2382 y fg(1)612 2375 y fm(;)8 b(:)g(:)g(:)d(;)j(i)730 2382 y fw(m)761 2375 y fk(\).\()p fm(f)855 2382 y fg(1)873 2375 y fq(\()p fm(i)907 2382 y fg(1)925 2375 y fm(;)g(:)g(:)g(:)d(;)j(i)1043 2382 y fw(m)1073 2375 y fq(\))p fm(;)g(:)g(:)g(:)d(;)j(f)1215 2382 y fw(n)1237 2375 y fq(\()p fm(i)1271 2382 y fg(1)1289 2375 y fm(;)g(:)g(:)g(:)t(;)g(i)1406 2382 y fw(m)1437 2375 y fq(\))p fk(\))75 2486 y fq(o)q(\022)-24 b(u)15 b(les)h fm(f)226 2493 y fw(i)255 2486 y fq(son)o(t)f(des)g(fonctions)h (a\016nes.)p eop %%page: 94 96 94 95 bop 75 269 a fq(94)404 b fl(chapitre)16 b(5.)30 b fn(pei)15 b fl(et)g(les)g(langa)o(ges)g(d)o(a)l(t)l(a-p)l(arall)1735 257 y(\022)1729 269 y(eles)146 397 y fq(une)i(autre)f(con)o(train)o(te) g(survien)o(t)h(quand,)f(p)q(our)h fk(h)8 b fq(:)16 b fe(z)1108 380 y fw(m)1151 397 y ff(7!)g fe(z)1245 380 y fw(n)1265 397 y fq(,)g(nous)g(a)o(v)o(ons)g fm(m)f ff(6)p fq(=)g fm(n)p fq(.)h(dans)g(ce)75 453 y(cas,)c(la)h(syn)o(taxe)e (de)i(la)g(directiv)o(e)h(nous)e(oblige)i(\022)-23 b(a)12 b(aligner)h(le)g(tableau)g(a)o(y)o(an)o(t)e(le)i(moins)g(de)g (dimensions)75 510 y(sur)h(celui)h(a)o(y)o(an)o(t)e(le)h(plus)h(de)f (dimensions.)h(nous)f(distinguons)h(donc)f(deux)h(cas)e(p)q(our)h(la)g (traduction)8 b(:)143 584 y({)23 b(si)15 b fm(m)e(>)g(n)i fq(alors)40 b fk(align)23 b(x\()p fm(z)r fk(\))h(with)f(t\()p fm(z)r fk(\))511 641 y(align)g(y\()p fm(dom)p fq(\()p fk(h)830 624 y fq(-1)867 641 y fq(\))p fk(\))g(with)g(t\()p fm(img)r fq(\()p fk(h)1221 624 y fq(-1)1257 641 y fq(\))p fk(\))189 693 y fq(a)o(v)o(ec)14 b fm(z)h ff(2)e fe(z)400 677 y fw(m)429 693 y fq(.)143 779 y({)23 b(si)15 b fm(m)e(<)g(n)i fq(alors)40 b fk(align)23 b(x\()p fm(dom)p fq(\()p fk(h)p fq(\))p fk(\))g(with)g(t\()p fm(img)r fq(\()p fk(h)p fq(\))p fk(\))511 836 y(align)g(y\()p fm(dom)p fq(\()p fk(h)830 819 y fq(-1)867 836 y fq(\))p fk(\))g(with)g(t\()p fm(img)r fq(\()p fk(h)1221 819 y fq(-1)1257 836 y fq(\))p fk(\))75 907 y fq(ainsi,)c(l'alignemen)o(t)h(d'un)e(v)o(ecteur)h(sur)f (la)g(premi)o(\022)-21 b(ere)18 b(colonne)i(d'un)e(v)o(ecteur)g(est)g (souv)o(en)o(t)g(d)o(\023)-21 b(e\014ni)75 963 y(par)16 b(l')o(\023)-21 b(equation)16 b fk(y)g fq(=)h fk(h)7

b(::)h(x)o fq(.)16 b(le)h(c)o(hangemen)o(t)f(de)h(base)g fk(h)f fq(est)g(alors)g fm(\025)p fk(\(i,j\))p ff(j)p fk(\(j)p fq(=)p fk(0\).\(i\))e fq(si)j fk(y)f fq(est)75 1020 y(le)k(v)o(ecteur,)e(ou)h(bien)i(son)e(in)o(v)o(erse)g fm(\025)p fk(\(i\).\(i,0\))e fq(si)j fk(x)f fq(est)g(le)g(v)o(ecteur.)g (si)h fk(y)f fq(est)g(le)g(v)o(ecteur)g(nous)75 1076 y(pro)q(duisons)d(les)g(directiv)o(es)9 b(:)170 1176 y fk(align)24 b(x\(i,j\))f(with)g(t\(i,j\))170 1233 y(align)h(y\(i\))f (with)g(t\(i,0\))75 1317 y fq(dans)14 b(ce)i(cas,)e(la)h(seule)h(con)o (train)o(te)f(implicite)i(de)e(l')o(\023)-21 b(equation)15 b(est)f(que)i(les)f(v)m(aleurs)h(du)f(v)o(ecteur)g(son)o(t)75 1374 y(celles)i(de)f(la)f(premi)o(\022)-21 b(ere)15 b(colonne)h(de)g (la)f(matrice)h(\()p fm(v)972 1381 y fr(y)1004 1374 y fq(=)g fm(v)1077 1381 y fr(x)1104 1374 y ff(\016)10 b fm(\025)p fk(\(i\).\(i,0\))n fq(\).)146 1430 y(p)o(ar)i(con)o(tre,)g (si)i fk(x)e fq(est)h(le)h(v)o(ecteur,)f(le)g(tableau)h fk(y)f fq(ne)g(p)q(eut)h(a)o(v)o(oir)e(de)i(v)m(aleurs)g(que)f(sur)g (sa)g(premi)o(\022)-21 b(ere)75 1487 y(colonne)18 b(\()p fm(dom)p fq(\()p fm(v)385 1494 y fr(y)402 1487 y fq(\))f(=)g fm(dom)p fq(\()p fm(\033)619 1494 y fr(y)636 1487 y fq(\))g(et)g fm(dom)p fq(\()p fm(\033)856 1494 y fr(y)873 1487 y fq(\))g ff(\022)f(f)p fq(\()p fm(i;)8 b(j)s fq(\))14 b ff(j)i fm(j)s fq(=)o(0)p ff(g)p fq(\).)g(p)o(ar)h(cons)o(\023)-21 b(equen)o(t)16 b(les)i(directiv)o(es)75 1543 y(g)o(\023)-21 b(en)o(\023)g(er)o(\023)g(ees)13 b(son)o(t)7 b(:)170 1643 y fk(align)24 b(x\(i\))f(with)g(t\(i,0\))170 1700 y(align)h(y\(i,0\))f(with)g(t\(i,0\))146 1784 y fq(le)f(traducteur)h (a\016c)o(he)f(d'ailleurs)i(un)e(message)g(d'a)o(v)o(ertissemen)o(t)g (dans)g(ce)h(dernier)g(cas)f(de)75 1841 y(\014gure,)15 b(car)g(l'utilisation)i(de)f(la)f(premi)o(\022)-21 b(ere)15 b(colonne)h(seulemen)o(t)h(d'une)e(matrice)h(est)f(inhabituelle.)75 1957 y fo(r)o(\023)-25 b(eduction)19 b(g)o(\023)-25 b(eom)o(\023)g (etrique)17 b(com)o(bin)o(\023)-25 b(ee)17 b(a)o(v)o(ec)g(une)h(op)o (\023)-25 b(eration)18 b(fonctionnelle)146 2043 y fq(seules)f(les)f (fonctions)g fk(xxx)p 618 2043 15 2 v 17 w(scatter)f fq(de)h(r)o(\023)-21 b(eduction)15 b(de)i(tableaux)f(d'hpf)f(\(v)o(oir) g(section)i(5.1.2\))75 2100 y(p)q(ermetten)o(t)e(d'exprimer)h(les)g(r)o (\023)-21 b(eductions)15 b fn(pei)g fq(en)g(toute)g(g)o(\023)-21 b(en)o(\023)g(eralit)o(\023)g(e.)13 b(soit)i(l')o(\023)-21 b(equation)15 b fn(pei)7 b fq(:)684 2170 y fk(y)15 b fq(=)g fk(fr)g fa(b)h fk(\(gr)23 b fq(;)8 b fa(b)24 b fk(x\))586 2227 y fq(o)q(\022)-24 b(u)50 b fk(fr)15 b fq(=)g fk(id)10 b fq(#)g fm(\025)p fk(\(a)p fq(;)o fk(b\).\(a)23 b ff(\012)h fk(fr\(b\)\))75 2297 y fq(et)f(soit)g fm(e)251 2304 y fx(\012)302 2297 y fq(l')o(\023)-21 b(el)o(\023)g(emen)o(t)22 b(neutre)i(de)f ff(\012)p fq(.)g(p)o(our)g(traduire)g(cette)f(\023)-21 b(equation)23 b(nous)g(a)o(v)o(ons)f(b)q(esoin)i(de)75 2354 y(construire)14 b(les)g(tableaux)g(d'indirections)h fm(x)841 2361 y fg(1)873 2354 y fq(\022)-23 b(a)13 b fm(x)935 2361 y fw(n)971 2354 y fq(utilis)o(\023)-21 b(es)14 b(par)g(hpf.)e(p)o(our)h(cela,)h(nous)f(d)o(\023)-21 b(e\014nissons)75 2410 y(la)16 b(fonction)f fm(index)g fq(qui)h(s)o(\023)-21 b(electionne)16 b(la)f fm(k)812 2394 y fw(i)q fg(\022)-18 b fw(eme)903 2410 y fq(dimension)16 b(d'un)g fm(m)p fq(-uplet)9 b(:)650 2485 y fm(index)k fq(:)41 b fe(n)865 2469 y fw(m)905 2485 y ff(\002)11 b fq([1)d fm(:)g(:)g(:)t(m)p fq(])41 b ff(7!)h fe(n)831 2542 y fq(\(\()p fm(i)883 2549 y fg(1)900 2542 y fm(;)8 b(::;)g(i)984 2549 y fw(m)1013 2542 y fq(\))p fm(;)g(k)q fq(\))53 b ff(!)42 b fm(i)1251 2549 y fw(k)p eop

%%page: 95 97 95 96 bop 75 269 a fl(5.4.)29 b(le)16 b(traducteur)f fk(pei2hpf)1034 b fq(95)75 397 y(les)16 b(tableaux)f fm(x)368 404 y fw(k)389 397 y fm(;)8 b ff(8)p fm(k)13 b ff(2)g fq([1)8 b fm(:)g(:)g(:)t(n)p fq(])15 b(son)o(t)g(construits)g (par)7 b(:)327 495 y ff(8)p fq(\()p fm(i)386 502 y fg(1)404 495 y fm(;)h(:)g(:)g(:)d(;)j(i)522 502 y fw(m)552 495 y fq(\))k ff(2)h fm(dom)p fq(\()p fm(\033)755 502 y fr(x)772 495 y fq(\))p fm(;)8 b(x)837 502 y fw(k)856 495 y fq(\()p fm(i)890 502 y fg(1)908 495 y fm(;)g(:)g(:)g(:)d(;)j(i)1026 502 y fw(m)1057 495 y fq(\))k(=)h fm(index)p fq(\()p fk(gr)o fq(\()p fm(i)1348 502 y fg(1)1366 495 y fm(;)8 b(:)g(:)g(:)d(;)j(i)1484 502 y fw(m)1514 495 y fq(\))p fm(;)g(k)q fq(\))146 592 y(ainsi,)14 b(nous)f(construisons)h(une)g (application)h(de)f(l'ensem)o(ble)h(des)e(\()p fm(i)1338 599 y fg(1)1356 592 y fm(;)8 b(:)g(:)g(:)d(;)j(i)1474 599 y fw(m)1505 592 y fq(\))k ff(2)h fm(dom)p fq(\()p fm(\033)1708 599 y fr(x)1725 592 y fq(\))f(dans)75 649 y(l'ensem)o(ble)j(des)d(\023)-21 b(el)o(\023)g(emen)o(ts)12 b(\()p fm(x)596 656 y fg(1)614 649 y fq(\()p fm(i)648 656 y fg(1)666 649 y fm(;)c(:)g(:)g(:)d(;)j(i)784 656 y fw(m)815 649 y fq(\))p fm(;)g(:)g(:)g(:)t(;)g(x)960 656 y fw(n)982 649 y fq(\()p fm(i)1016 656 y fg(1)1034 649 y fm(;)g(:)g(:)g(:)d(;)j(i)1152 656 y fw(m)1182 649 y fq(\)\),)k(comme)h(sp)o(\023)-21 b(eci\014)o(\023)g(e)13 b(dans)g([27)o(],)g(p.89.)146 705 y(notons)j(que)i(nous)f(sommes)f(ici) j(dans)e(le)h(cas)f(particulier)i(o)q(\022)-24 b(u)17 b fm(n)f fq(=)g fm(m)h fq(puisque)i(les)f(r)o(\023)-21 b(eductions)75 762 y(g)o(\023)g(eom)o(\023)g(etriques)13 b(de)j fn(pei)f fq(son)o(t)f(d)o(\023)-21 b(e\014nies)16 b(par)f(des)h(fonctions)f(de)h fe(z)1204 745 y fw(m)1245 762 y ff(7!)d fe(z)1337 745 y fw(m)1365 762 y fq(.)146 818 y(la)i(traduction)g(de)h(l')o(\023)-21 b(equation)15 b(pr)o(\023)-21 b(ec)o(\023)g(eden)o(te)14 b(est)h(alors)7 b(:)625 908 y fk(y)15 b fq(=)h ff(\012)p 753 908 15 2 v 17 w fk(scatter\(x,)p fm(e)1028 915 y fx(\012)1055 908 y fk(,)p fm(x)1105 915 y fg(1)1123 908 y fk(,)p fm(:)8 b(:)g(:)n fk(,)p fm(x)1250 915 y fw(n)1273 908 y fk(\))146 998 y fq(nous)15 b(traduisons)g(par)g(exemple)h(l')o(\023)-21 b(equation)690 1092 y fk(y)15 b fq(=)g fk(sum)g fa(b)g fk(\(red)24 b fq(;)8 b fa(b)23 b fk(x\))555 1149 y fq(a)o(v)o(ec)50 b fk(sum)14 b fq(=)i fk(id)10 b fq(#)g fm(\025)p fk(\(a)p fq(;)o fk(b\).\(a+sum\(b\)\))690 1205 y(red)k fq(=)i fm(\025)p fk(\(i,j\))p ff(j)p fk(\(1)p ff(\024)p fk(i,j)p ff(\024)p fk(3\).\(i,i\))75 1287 y fq(par)404 1432 y fk(y)f fq(=)h fk(sum)p 569 1432 v 17 w(scatter\(x,0,)893 1335 y fx(2)893 1408 y(6)893 1435 y(4)945 1375 y fk(1)50 b(2)g(3)945 1432 y(1)g(2)g(3)945 1488 y(1)g(2)g(3)1142 1335 y fx(3)1142 1408 y(7)1142 1435 y(5)1169 1432 y fk(,)1217 1335 y fx(2)1217 1408 y(6)1217 1435 y(4)1270 1375 y fk(1)f(2)h(3)1270 1432 y(1)f(2)h(3)1270 1488 y(1)f(2)h(3)1466 1335 y fx(3)1466 1408 y(7)1466 1435 y(5)1493 1432 y fk(\))146 1577 y fq(une)11 b(am)o(\023)-21 b(elioration)10 b(consisterait)h(\022)-23 b(a)10 b(examiner)h(les)g(cas)g(particuliers)h(de)f(r)o(\023)-21 b(eductions)10 b(selon)i(les)f(axes)75 1634 y(canoniques)k(du)f (domaine)h(de)f(r)o(\023)-21 b(ef)o(\023)g(erence,)12 b(a\014n)i(d'utiliser)h(les)g(primitiv)o(es)g(plus)g(simples)g fk(xxx)p 1690 1634 v 16 w(suffix)75 1690 y fq(ou)g fk(xxx)p 213 1690 v 17 w(prefix)p fq(.)75 1809 y fo(d)o(\023)-25 b(e\014nition)19 b(r)o(\023)-25 b(ecursiv)o(e)75 1895

y fq(consid)o(\023)k(erons)15 b(l')o(\023)-21 b(equation)15 b(suiv)m(an)o(te)8 b(:)457 1993 y fk(y)13 b fq(=)g fk(fc)i fa(b)g fk(\(x)24 b(/&/)7 b(\(y)24 b fa(c)g fk(g)961 2000 y fg(1)980 1993 y fk(\)/&/)7 b fm(:)h(:)g(:)22 b fk(/&/)7 b(\(y)24 b fa(c)g fk(g)1394 2000 y fw(n)1417 1993 y fk(\)\))75 2091 y fq(t)l(rouv)o(er)16 b(la)g(solution)i fk(y)e fq(d'une)h(telle)f (\023)-21 b(equation)16 b(revien)o(t)h(donc)f(\022)-23 b(a)16 b(r)o(\023)-21 b(esoudre)16 b(une)g(\023)-21 b(equation)15 b(de)i(p)q(oin)o(t)75 2147 y(\014xe.)h(une)h(traduction)f(na)-5 b(\177)-18 b(\020v)o(e)19 b(consiste)f(\022)-23 b(a)18 b(calculer)i(une)f(suite)f(de)h(c)o(hamps)f fk(y)g fq(don)o(t)g(le)h (dernier)g(est)75 2204 y(solution)e(de)g(l')o(\023)-21 b(equation.)16 b(c'est)f(la)i(solution)g(reten)o(ue)g(dans)g([21)o(],)e (o)q(\022)-24 b(u)17 b(une)g(b)q(oucle)h(s)o(\023)-21 b(equen)o(tielle)18 b(sur)75 2260 y(un)e(indice)h(suppl)o(\023)-21 b(emen)o(taire)16 b(repr)o(\023)-21 b(esen)o(te)14 b(la)i(suite)g(des)f (c)o(hamps)g fk(y)g fq(calcul)o(\023)-21 b(es.)146 2373 y(une)21 b(optimisation)h(consiste)f(\022)-23 b(a)21 b(confondre)h(cette)f(b)q(oucle)h(a)o(v)o(ec)f(la)g(ou)g(les)h (directions)g(repr)o(\023)-21 b(e-)75 2429 y(sen)o(tan)o(t)18 b(le)h(temps,)f(selon)h(que)g(l'on)g(utilise)h(des)f(cadencemen)o(ts)g (mono)f(o)q(\022)-24 b(u)18 b(m)o(ulti-dimensionnel)q(s.)75 2486 y(rapp)q(elons)i(en)e(e\013et)g(qu'une)g(telle)g(\023)-21 b(equation)18 b(n'est)f(traduisible)j(que)f(si)f(elle)i(d)o(\023)-21 b(e\014nit)18 b(un)g(cadence-)75 2542 y(men)o(t)g(des)h(calculs)9 b(:)18 b(les)h(termes)f(successifs)i(de)f(la)f(r)o(\023)-21 b(ecurrence)19 b(doiv)o(en)o(t)f(alors)f(^)-21 b(etre)18 b(calcul)o(\023)-21 b(es)19 b(selon)p eop %%page: 96 98 96 97 bop 75 269 a fq(96)404 b fl(chapitre)16 b(5.)30 b fn(pei)15 b fl(et)g(les)g(langa)o(ges)g(d)o(a)l(t)l(a-p)l(arall)1735 257 y(\022)1729 269 y(eles)75 397 y fq(ce)k(cadencemen)o(t.)g(ceci)g (se)f(traduit)h(de)g(mani)o(\022)-21 b(ere)18 b(g)o(\023)-21 b(en)o(\023)g(erale,)16 b(par)j(un)f(blo)q(c)i(constitu)o(\023)-21 b(e,)17 b(par)i(autan)o(t)75 453 y(de)f(b)q(oucles)i(s)o(\023)-21 b(equen)o(tielles)19 b(im)o(briqu)o(\023)-21 b(ees)18 b(qu'il)h(y)f(a)f(de)i(dimensions)g(de)f(temps,)g(et)f(\022)-23 b(a)18 b(l'in)o(t)o(\023)-21 b(erieur)18 b(de)75 510 y(ces)d(b)q(oucles,)g(par)g(une)g(op)o(\023)-21 b(eration)13 b(parall)o(\022)-21 b(ele)15 b fk(forall)f fq(sur)g(les)i(dimensions)g (non)e(temp)q(orelles.)i(l'im-)75 566 y(brication)i(des)g(b)q(oucles)g (supp)q(ose)g(que)g(l'indice)i(d'une)d(b)q(oucle)i(soit)e(ind)o(\023) -21 b(ep)q(endan)o(t)18 b(des)g(indices)h(des)75 623 y(b)q(oucles)h(in)o(ternes.)f(si)h(ce)f(n'est)f(pas)h(le)g(cas,)f(on)h (r)o(\023)-21 b(esout)17 b(classiquemen)o(t)j(ce)f(probl)o(\022)-21 b(eme)19 b(par)f(l'algo-)75 679 y(rithme)e(d')o(\023)-21 b(elimination)16 b(de)f(f)l(ourier.)146 794 y(la)20 b(traduction)g(est) g(constitu)o(\023)-21 b(ee)20 b(de)h(deux)g(blo)q(cs)g(d'instructions.) g(le)f(premier)h(e\013ectue)g(l'ini-)75 850 y(tialisation)d(de)g fk(y)f fq(a)o(v)o(ec)f(les)i(v)m(aleurs)g(de)f fk(x)g fq(utilis)o(\023)-21 b(ees)18 b(au)f(premier)h(instan)o(t)f(de)h (calcul,)g(tandis)f(que)h(le)75 906 y(deuxi)o(\022)-21 b(eme)16 b(est)f(une)h(b)q(oucle)g(s)o(\023)-21 b(equen)o(tielle)16 b(\023)-21 b(en)o(um)o(\023)g(eran)o(t)13 b(les)j(di\013)o(\023)-21 b(eren)o(ts)14 b(instan)o(ts)h(de)h(calcul.)146 1021 y(dans)f(l')o(\023)-21 b(equation)15 b(pr)o(\023)-21 b(ec)o(\023)g(eden)o(te,)14 b(les)i(fonctions)f fk(g)995 1028 y fw(k)1016 1021 y fm(;)8 b(k)13 b ff(2)g fq([1)8 b fm(:)g(:)g(:)d(n)p fq(])15 b(d)o(\023)-21 b(e\014nies)16 b(de)g fe(z)1532 1004 y fw(m)1576 1021 y fq(dans)f fe(z)1716

1004 y fw(m)1760 1021 y fq(p)q(eu-)75 1077 y(v)o(en)o(t)g(s')o(\023)-21 b(ecrire)577 1138 y fk(g)601 1145 y fw(k)634 1138 y fq(=)13 b(\()p fm(f)722 1145 y fw(k)q fg(1)759 1138 y fq(\()p fm(i)793 1145 y fg(1)811 1138 y fm(;)8 b(:)g(:)g(:)t(i)907 1145 y fw(m)939 1138 y fq(\))p fm(;)g(:)g(:)g(:)t(;)g(f)1080 1145 y fw(k)q(m)1129 1138 y fq(\()p fm(i)1163 1145 y fg(1)1181 1138 y fm(;)g(:)g(:)g(:)d(i)1278 1145 y fw(m)1309 1138 y fq(\)\))146 1228 y fn(pei)19 b fq(autorise)h(l'utilisation,)h (dans)f(une)g(m)o(^)-21 b(eme)19 b(d)o(\023)-21 b(e\014nition)20 b(r)o(\023)-21 b(ecursiv)o(e,)19 b(de)h(c)o(hamps)g(a)o(y)o(an)o(t)e (des)75 1284 y(domaines)e(de)g(v)m(aleurs)g(di\013)o(\023)-21 b(eren)o(ts.)14 b(la)h(cons)o(\023)-21 b(equence)16 b(est)f(qu'il)h (est)f(di\016cile)j(de)e(d)o(\023)-21 b(eterminer)15 b(quelles)75 1341 y(v)m(aleurs,)j(pro)o(v)o(enan)o(t)f(des)i(di\013)o (\023)-21 b(eren)o(ts)17 b(c)o(hamps)g(sup)q(erp)q(os)o(\023)-21 b(es,)18 b(son)o(t)f(utilis)o(\023)-21 b(ees)19 b(\022)-23 b(a)18 b(c)o(hacune)g(des)f(\023)-21 b(etap)q(es)75 1397 y(de)19 b(la)h(r)o(\023)-21 b(ecurrence.)18 b(le)h(probl)o(\022)-21 b(eme)19 b(se)g(p)q(ose)h(notammen)o(t)d(p)q(our)j(la)f(traduction)g (hpf)7 b(:)19 b(l'op)o(\023)-21 b(erateur)75 1454 y fk(fc)21 b fq(est)g(d)o(\023)-21 b(e\014ni)21 b(en)h fn(pei)f fq(\(comme)f(dans)i(tout)e(langage)h(fonctionnel\))h(sur)f(une)h(liste) g(de)g(longueur)75 1510 y(quelconque,)13 b(alors)e(qu'en)g(hpf,)g(nous) g(devrons)h(distinguer)g(les)g(cas)f(p)q(our)h(lesquels)h(l'op)o(\023) -21 b(erateur)10 b(a)h(un)75 1566 y(nom)o(bre)j(di\013)o(\023)-21 b(eren)o(t)14 b(d'argumen)o(ts.)e(le)j(probl)o(\022)-21 b(eme)14 b(se)h(r)o(\023)-21 b(esume)13 b(\022)-23 b(a)14 b(d)o(\023)-21 b(ecomp)q(oser)14 b(l'union)h(des)g(domaines)75 1623 y(de)21 b(v)m(aleurs)g(utilis)o(\023)-21 b(es,)21 b(en)g(sous-domaines)g(sur)f(lesquels)j(le)e(nom)o(bre)f(de)h(v)m (aleurs)g(sup)q(erp)q(os)o(\023)-21 b(ees)21 b(est)75 1679 y(constan)o(t.)9 b(un)i(tel)g(algorithme)f(de)h(d)o(\023)-21 b(ecomp)q(osition)11 b(a)f(par)g(exemple)h(\023)-21 b(et)o(\023)g(e)8 b(implan)o(t)o(\023)-21 b(e)10 b(p)q(our)h(un)g(probl)o(\022)-21 b(eme)75 1736 y(similaire)15 b(dans)d(une)h(v)o(ersion)g(r)o(\023)-21 b(ecen)o(te)12 b(de)h(la)g(librairie)h(p)o(olylib[63)q(].)e(nous)g(ne)h (nous)g(in)o(t)o(\023)-21 b(eressons)11 b(p)q(our)75 1792 y(l'instan)o(t)20 b(qu'\022)-23 b(a)20 b(deux)h(cas)g (particuliers)h(corresp)q(ondan)o(ts)e(\022)-23 b(a)20 b(la)g(grande)h(ma)s(jorit)o(\023)-21 b(e)18 b(des)j(probl)o(\022)-21 b(emes)75 1849 y(rencon)o(tr)o(\023)g(es)14 b(dans)h(la)h(pratique)8 b(:)143 1948 y({)23 b(nous)10 b(consid)o(\023)-21 b(erons)10 b(le)h(cas)f(o)q(\022)-24 b(u)10 b(le)h(domaine)g(des)f(v)m(aleurs)h (du)g(c)o(hamp)f(initial)i(est)e(disjoin)o(t)h(de)g(celui)189 2005 y(des)17 b(op)o(\023)-21 b(erations)15 b(g)o(\023)-21 b(eom)o(\023)g(etriques)15 b(appliqu)o(\023)-21 b(ees)18 b(r)o(\023)-21 b(ecursiv)o(emen)o(t.)15 b(c'est)h(le)i(cas)e(de)h(l')o (\023)-21 b(elimination)189 2061 y(de)12 b(gauss)g(par)g(exemple,)h(o)q (\022)-24 b(u)12 b(les)g(v)m(aleurs)i(du)e(c)o(hamp)g(initial)i(son)o (t)e(uniquemen)o(t)h(utilis)o(\023)-21 b(ees)13 b(p)q(our)189 2118 y(d)o(\023)-21 b(e\014nir)14 b(le)g(premier)g(pas)g(de)g(la)f(r)o (\023)-21 b(ecurrence.)13 b(dans)h(ce)f(cas)h(l'op)o(\023)-21 b(erateur)12 b(dans)i(la)g(r)o(\023)-21 b(ecurrence)13 b(ne)189 2174 y(p)q(orte)i(pas)g(sur)g(les)h(v)m(aleurs)g(du)g(c)o (hamp)f(initial.)143 2273 y({)23 b(le)13 b(deuxi)o(\022)-21 b(eme)13 b(cas)g(consid)o(\023)-21 b(er)o(\023)g(e)12 b(est)g(celui)j(o)q(\022)-24 b(u)13 b(les)g(v)m(aleurs)h(du)f(c)o(hamp) g(initial)i(son)o(t)d(utilis)o(\023)-21 b(ees)13 b(tout)189 2330 y(au)j(long)g(de)g(la)g(r)o(\023)-21 b(ecurrence.)16 b(un)g(exemple)h(t)o(ypique)g(est)f(la)g(somme)f(pr)o(\023)-21

b(e\014xe)16 b(d'un)g(v)o(ecteur)g(de)189 2386 y(nom)o(bres.)h(dans)h (ce)g(cas)g(l'op)o(\023)-21 b(erateur)17 b(utilise)j(\022)-23 b(a)17 b(toute)g(\023)-21 b(etap)q(e)17 b(de)i(la)f(r)o(\023)-21 b(ecurrence)18 b(une)h(v)m(aleur)189 2443 y(du)c(v)o(ecteur)h(initial.) 146 2542 y(dans)f(le)h(cas)f(particulier)i(d'un)f(cadencemen)o(t)g (a\016ne)f(mono-dimensionnel,)j(supp)q(osons)e(que)f(la)p eop %%page: 97 99 97 98 bop 75 269 a fl(5.4.)29 b(le)16 b(traducteur)f fk(pei2hpf)1034 b fq(97)75 397 y(dimension)17 b fm(i)306 404 y fg(1)340 397 y fq(soit)f(la)f(dimension)j(temp)q(orelle.)e(les)g (fonctions)g fm(f)1227 404 y fw(k)q fg(1)1280 397 y fq(repr)o(\023)-21 b(esen)o(ten)o(t)14 b(alors)i(les)g(d)o(\023)-21 b(ep)q(en-)75 453 y(dances)16 b(temp)q(orelles)g(p)q(our)g(tout)e fm(k)g ff(2)f fq([1)8 b fm(:)g(:)g(:)t(n)p fq(].)15 b(ces)g(fonctions)h(son)o (t)e(soit)h(de)h(la)f(forme)669 572 y fm(f)5 b fq(\()p fm(i)730 579 y fg(1)748 572 y fm(;)j(:)g(:)g(:)d(;)j(i)866 579 y fw(m)896 572 y fq(\))k(=)h fm(f)1001 553 y fx(0)1013 572 y fq(\()p fm(i)1047 579 y fg(1)1065 572 y fq(\))f(=)h fm(i)1159 579 y fg(1)1188 572 y ff(\000)d fm(c)75 691 y fq(o)q(\022)-24 b(u)15 b fm(c)g fq(est)g(une)h(constan)o(te)e(p)q (ositiv)o(e,)i(soit)f(de)h(la)f(forme)757 809 y fm(f)779 816 y fw(k)q fg(1)816 809 y fq(\()p fm(i)850 816 y fg(1)868 809 y fm(;)8 b(:)g(:)g(:)d(;)j(i)986 816 y fw(m)1016 809 y fq(\))13 b(=)g fm(exp)75 928 y fq(o)q(\022)-24 b(u)12 b fm(exp)f fq(a)h(une)g(v)m(aleur)h(ind)o(\023)-21 b(ep)q(endan)o(te)13 b(de)f fm(i)815 935 y fg(1)833 928 y fq(,)g(mais)f(est)h(inf)o(\023)-21 b(erieure)13 b(\022)-23 b(a)11 b fm(i)1276 935 y fg(1)1306 928 y fq(p)q(our)h(tout)f fm(i)1521 935 y fg(1)1551 928 y fq(dans)h fm(dom)p fq(\()p fm(f)1780 935 y fw(k)q fg(1)1816 928 y fq(\).)146 1046 y(p)o(our)j(nous)h(situer)h(dans)f(un)h(cas)f(simple)h(\()o(\023)-21 b(evitan)o(t)15 b(la)h(d)o(\023)-21 b(ecomp)q(osition)17 b(des)f(domaines)g(\023)-21 b(ev)o(o)q(qu)o(\023)g(ee)75 1103 y(pr)o(\023)g(ec)o(\023)g(edemmen)o(t\),)10 b(supp)q(osons)j(que)g (la)f(d)o(\023)-21 b(ep)q(endance)13 b(temp)q(orelle)h(est)e fm(f)1306 1086 y fx(0)1318 1103 y fq(\()p fm(i)1352 1110 y fg(1)1370 1103 y fq(\))g(=)h fm(i)1464 1110 y fg(1)1486 1103 y ff(\000)t fm(c)g fq(p)q(our)f(toutes)g(les)75 1159 y(fonctions)h fk(g)290 1166 y fw(k)310 1159 y fq(.)g(nous)f(c)o (herc)o(hons)h(les)h(b)q(ornes)f(inf)o(\023)-21 b(erieures)13 b(et)g(sup)o(\023)-21 b(erieures)13 b(de)g(la)g(b)q(oucle)i(s)o(\023) -21 b(equen)o(tielle,)75 1216 y(que)16 b(nous)f(app)q(elons)h fm(i)470 1223 y fg(1)487 1227 y fd(min)561 1216 y fq(et)f fm(i)630 1223 y fg(1)647 1227 y fd(max)723 1216 y fq(resp)q(ectiv)o (emen)o(t.)146 1278 y(l'initialisation)20 b(de)d(certaines)h(v)m (aleurs)h(de)e fk(y)h fq(a)o(v)o(ec)f(celles)i(du)e(c)o(hamp)h(initial) h fk(x)e fq(est)h(n)o(\023)-21 b(ecessaire)75 1334 y(p)q(our)15 b(amorcer)f(la)h(r)o(\023)-21 b(ecurrence.)14 b(les)g(\023)-21 b(el)o(\023)g(emen)o(ts)13 b(de)j(tableau)f(de)g fk(y)f fq(dev)m(an)o(t)g(^)-21 b(etre)14 b(initialis)o(\023)-21 b(es)16 b(son)o(t)e(ceux)75 1391 y(r)o(\023)-21 b(ef)o(\023)g(erenc)o (\023)g(es)19 b(\022)-23 b(a)20 b(l'instan)o(t)h fm(i)533 1398 y fg(1)574 1391 y fq(=)h fm(i)647 1398 y fg(1)664 1402 y fd(min)722 1391 y fq(.)f(soit)g fm(t)871 1398 y fg(0)912 1391 y fq(=)i fm(f)997 1374 y fx(0)1009 1391 y fq(\()p fm(i)1043 1398 y fg(1)1060 1402 y fd(min)1118 1391 y fq(\))d(l'instan)o(t)h(pr)o(\023)-21 b(ec)o(\023)g(edan)o(t)19 b(le)j(premier)g(pas)75 1447 y(de)c(calcul)g(de)g(la)f(r)o(\023)-21 b(ecurrence.)17 b(p)o(our)g(tout)f fm(k)h ff(2)f fq([1)8

b fm(:)g(:)g(:)d(n)p fq(],)17 b(nous)g(d)o(\023)-21 b(esignons)17 b(par)g ff(d)1525 1454 y fw(k)1563 1447 y fq(l'ensem)o(ble)h(des)75 1504 y(indices)f(r)o(\023)-21 b(ef)o(\023)g(erenc)o(\023)g(es)13 b(par)i(une)h(d)o(\023)-21 b(ep)q(endance)16 b fk(g)870 1511 y fw(k)906 1504 y fq(\022)-23 b(a)14 b(l'instan)o(t)i fm(i)1138 1511 y fg(1)1155 1515 y fd(min)1220 1504 y fq(:)412 1622 y ff(d)447 1629 y fw(k)480 1622 y fq(=)d(\()p fm(t)562 1629 y fg(0)581 1622 y fm(;)8 b(f)624 1629 y fw(k)q fg(2)660 1622 y fq(\()p fm(i)694 1629 y fg(1)711 1633 y fd(min)769 1622 y fm(;)g(i)806 1629 y fg(2)824 1622 y fm(;)g(:)g(:)g(:)t(;)g(i)941 1629 y fw(m)972 1622 y fq(\))p fm(;)g(:)g(:)g(:)t(;)g(f)1113 1629 y fw(k)q(m)1163 1622 y fq(\()p fm(i)1197 1629 y fg(1)1214 1633 y fd(min)1272 1622 y fm(;)g(i)1309 1629 y fg(2)1326 1622 y fm(;)g(:)g(:)g(:)d(;)j(i) 1444 1629 y fw(m)1474 1622 y fq(\)\))75 1741 y(l'ensem)o(ble)14 b(des)f(indices)i(r)o(\023)-21 b(ef)o(\023)g(erenc)o(\023)g(es)10 b(\022)-23 b(a)12 b(l'instan)o(t)h fm(i)963 1748 y fg(1)994 1741 y fq(=)g fm(i)1058 1748 y fg(1)1075 1752 y fd(min)1146 1741 y fq(est)f(alors)h ff(d)h fq(=)f ff(d)1453 1748 y fg(1)1477 1741 y ff([)5 b fm(:)j(:)g(:)s ff([)d(d)1640 1748 y fw(n)1663 1741 y fq(.)12 b(t)l(ous)h(les)74 1797 y(\023)-21 b(el)o(\023)g(emen)o(ts)9 b(de)j fk(y)e fq(appartenan)o(t)g (\022)-23 b(a)11 b ff(d)h fq(doiv)o(en)o(t)f(donc)f(^)-21 b(etre)10 b(initialis)o(\023)-21 b(es)12 b(a)o(v)o(ec)e(les)i(v)m (aleurs)g(corresp)q(ondan)o(tes)75 1854 y(du)k(c)o(hamp)f(initial)i fk(x)p fq(.)146 1916 y(dans)23 b(la)i(suite)g(de)g(la)f(r)o(\023)-21 b(ecurrence,)24 b(nous)h(consid)o(\023)-21 b(erons)24 b(les)h(deux)g(cas)e(\023)-21 b(ev)o(o)q(qu)o(\023)g(es)23 b(pr)o(\023)-21 b(ec)o(\023)g(edem-)75 1972 y(men)o(t)7 b(:)19 b(le)h(c)o(hamp)f(initial)i fk(x)e fq(ne)g(doit)h(pas)f(appara) -5 b(^)-18 b(\020tre)18 b(dans)h(l'instruction)i(si)e(il)i(n'est)d (utilis)o(\023)-21 b(e)20 b(que)75 2029 y(par)k(le)h(premier)g(calcul)g (de)g(la)f(r)o(\023)-21 b(ecurrence,)24 b(ce)h(qui)g(se)f(traduit)g (par)g(la)g(condition)i fm(dom)p fq(\()p fm(v)1766 2036 y fr(x)1783 2029 y fq(\))15 b ff(\\)75 2085 y fq(\()p fm(dom)p fq(\()p fk(g)221 2092 y fg(1)238 2085 y fq(\))h ff([)g fm(:)8 b(:)g(:)14 b ff([)i fm(dom)p fq(\()p fk(g)561 2092 y fw(n)583 2085 y fq(\)\))27 b(=)g ff(fg)p fq(.)c(dans)h(le)g (deuxi)o(\022)-21 b(eme)25 b(cas)f(de)g(\014gure)g(qui)h(se)f(traduit)g (par)75 2142 y(\()p fm(dom)p fq(\()p fk(g)221 2149 y fg(1)238 2142 y fq(\))14 b ff([)g fm(:)8 b(:)g(:)k ff([)i fm(dom)p fq(\()p fk(g)553 2149 y fw(n)575 2142 y fq(\)\))21 b ff(\032)h fm(dom)p fq(\()p fm(v)815 2149 y fr(x)832 2142 y fq(\),)e(il)i(appara)-5 b(^)-18 b(\020t)20 b(dans)h (l'instruction.)h(dans)e(les)i(instruc-)75 2198 y(tions)f(hpf)g(suiv)m (an)o(tes)g(donnan)o(t)g(la)g(forme)g(g)o(\023)-21 b(en)o(\023)g(erale) 19 b(de)i(la)h(traduction,)e(le)i(c)o(hamp)f fk(x)g fq(est)f(donc)75 2254 y(pr)o(\023)-21 b(esen)o(t)14 b(ou)h(pas)g(selon)h(le)g(cas.)146 2373 y(notons)f(que)h(la)g(restriction)h(don)o(t)e(nous)h(a)o(v)o(ons)f (parl)o(\023)-21 b(e)15 b(en)i(section)f(5.1.1)e(nous)i(oblige)h(\022) -23 b(a)16 b(utiliser)75 2429 y(des)f(blo)q(cs)h fk(forall)d fq(p)q(our)i(un)g(sc)o(h)o(\023)-21 b(ema)14 b(g)o(\023)-21 b(en)o(\023)g(eral)13 b(de)i(traduction.)f(nous)h(supp)q(osons)g(dans)g (ce)g(qui)g(suit)75 2486 y(que)i(l'ordre)f(d'im)o(brication)h(des)g fk(forall)e fq(est)i(tel)f(qu'un)h(indice)h(d)o(\023)-21 b(ep)q(end)17 b(uniquemen)o(t)h(des)f(indices)75 2542 y(apparaissan)o(t)e(dans)g(les)h fk(forall)e fq(engloban)o(ts.)p eop %%page: 98 100 98 99 bop 75 269 a fq(98)404 b fl(chapitre)16 b(5.)30

b fn(pei)15 b fl(et)g(les)g(langa)o(ges)g(d)o(a)l(t)l(a-p)l(arall)1735 257 y(\022)1729 269 y(eles)75 397 y fk(c)24 b(initialisation)170 453 y(forall)f(\()p fm(i)377 460 y fg(1)408 453 y fq(=)13 b fm(f)483 437 y fx(0)495 453 y fq(\()p fm(i)529 460 y fg(1)546 464 y fd(min)604 453 y fq(\))p fk(\))242 510 y(forall)23 b fq(\()p fm(i)443 517 y fg(2)474 510 y fq(=)13 b ff(d)557 517 y fg(2)575 510 y fk(\))242 566 y fm(:)8 b(:)g(:)314 623 y fk(forall)23 b(\()p fm(i)521 630 y fw(m)564 623 y fq(=)13 b ff(d)647 630 y fw(m)679 623 y fk(\))170 679 y(&)191 b(y\()p fm(i)449 686 y fg(1)467 679 y fm(;)8 b(i)504 686 y fg(2)522 679 y fm(;)g(:)g(:)g(:)d(;)j(i)640 686 y fw(m)670 679 y fk(\))24 b(=)f(x\()p fm(i)829 686 y fg(1)847 679 y fm(;)8 b(i)884 686 y fg(2)902 679 y fm(;)g(:)g(:)g(:)d(;)j(i)1020 686 y fw(m)1050 679 y fk(\))242 736 y fm(:)g(:)g(:)242 792 y fk(endforall)170 849 y(endforall)75 905 y(!)24 b(recurrence)170 962 y(do)g fm(i)258 969 y fg(1)300 962 y fk(=)g fm(i)364 969 y fg(1)381 973 y fd(min)439 962 y fk(,)p fm(i)479 969 y fg(1)496 973 y fd(max)242 1018 y fk(forall)f(\()p fm(i)449 1025 y fg(2)480 1018 y fq(=)13 b fm(dom)p fq(\()p fm(f)654 1025 y fg(12)689 1018 y fq(\))p fm(;)8 b(:)g(:)g(:)t(;)g(i)824 1025 y fw(m)867 1018 y fq(=)13 b fm(dom)p fq(\()p fm(f)1041 1025 y fw(n)p fg(2)1080 1018 y fq(\))c ff(\\)i fm(dom)p fk(\(fc\)\))242 1074 y fm(:)d(:)g(:)314 1131 y fk(forall)23 b fq(\()p fm(i)515 1138 y fw(m)558 1131 y fq(=)13 b fm(dom)p fq(\()p fm(f)732 1138 y fg(1)p fw(m)780 1131 y fq(\))d ff([)g fm(:)e(:)g(:)g ff([)i fm(dom)p fq(\()p fm(f)1077 1138 y fw(nm)1129 1131 y fq(\))p fk(\))170 1187 y(&)191 b(y\()p fm(i)449 1194 y fg(1)467 1187 y fm(;)8 b(i)504 1194 y fg(2)522 1187 y fm(;)g(:)g(:)g(:)d(;)j(i)640 1194 y fw(m)670 1187 y fk(\))24 b(=)170 1244 y(&)191 b(fc\(x\()p fm(i)521 1251 y fg(1)539 1244 y fm(;)8 b(i)576 1251 y fg(2)593 1244 y fm(;)g(:)g(:)g(:)d(;)j(i)711 1251 y fw(m)742 1244 y fk(\),y\(g)862 1251 y fg(1)879 1244 y fk(\()p fm(i)919 1251 y fg(1)938 1244 y fm(;)g(i)975 1251 y fg(2)992 1244 y fm(;)g(:)g(:)g(:)d(;)j(i)1110 1251 y fw(m)1140 1244 y fk(\)\))p fm(;)g(:)g(:)g(:)d(;)23 b fk(y\(g)1377 1251 y fw(n)1399 1244 y fk(\()p fm(i)1439 1251 y fg(1)1458 1244 y fm(;)8 b(i)1495 1251 y fg(2)1512 1244 y fm(;)g(:)g(:)g(:)d(;)j (i)1630 1251 y fw(m)1660 1244 y fk(\)\)\))314 1300 y fm(:)g(:)g(:)242 1357 y fk(endforall)170 1413 y(enddo)146 1557 y fq(nous)13 b(p)q(ouv)o(ons)h(illustrer)i(simplemen)o(t)f(ce)f (sc)o(h)o(\023)-21 b(ema)13 b(de)h(traduction)g(a)o(v)o(ec)f(l'exemple) i(de)g(la)f(di\013u-)75 1614 y(sion)e(discr)o(\022)-21 b(ete)12 b(pr)o(\023)-21 b(esen)o(t)o(\023)g(e)10 b(sur)i(la)g (\014gure)g(5.2.)e(de)i(l')o(\023)-21 b(equation)12 b(\(2\),)e(page)i (86,)f(p)q(our)h(laquelle)i(on)d(a)h(trouv)o(\023)-21 b(e)75 1670 y(un)18 b(cadencemen)o(t,)h(nous)f(dev)o(ons)g(construire)g (une)h(b)q(oucle)g(s)o(\023)-21 b(equen)o(tielle)20 b(a)o(y)o(an)o(t)c (p)q(our)i(indice)i fk(t)p fq(,)e(et)75 1727 y(donc)e(faire)f(de)h fk(t)f fq(une)g(v)m(ariable)i(ind)o(\023)-21 b(ep)q(endan)o(te.)16 b(ici,)g(les)g(expressions)g(de)g fk(t)f fq(et)g(de)g fk(p)g fq(deviennen)o(t)9 b(:)245 1894 y fx(\()303 1937 y fq(1)j ff(\024)h fk(t)d ff(\000)h fk(p)h ff(\024)h fm(n)303 1994 y fq(1)f ff(\024)h fk(p)g ff(\024)g fm(n)630 1966 y fq(c'est-\022)-23 b(a-dire)901 1894 y fx(\()959 1937 y fq(2)13 b ff(\024)g fk(t)f ff(\024)h fq(2)p fm(n)959 1994 y(max)p fq(\(1)p fm(;)8 b fk(t)h ff(\000)h fm(n)p fq(\))j ff(\024)g fk(p)f ff(\024)h fm(min)p fq(\()p fm(n;)8 b fk(t)h ff(\000)i fq(1\))75 2204 y(l'instan)o(t)16 b(initial)i(est)e

(donn)o(\023)-21 b(e)16 b(par)g(la)g(b)q(orne)h(inf)o(\023)-21 b(erieure)17 b(de)f(l'in)o(terv)m(alle)j(des)d(v)m(aleurs)h(de)g (l'indice)h fk(t)p fq(,)75 2260 y(c'est-\022)-23 b(a-dire)15 b fk(t)p fq(=2,)f(et)h(l'instan)o(t)f(pr)o(\023)-21 b(ec)o(\023)g(eden) o(t)14 b(est)g fm(t)938 2267 y fg(0)970 2260 y fq(=)e(1.)i(au)h (premier)h(pas)e(de)h(la)g(r)o(\023)-21 b(ecurrence)14 b(on)h(fait)75 2316 y(r)o(\023)-21 b(ef)o(\023)g(erence)17 b(aux)h(indices)i(\()p fm(t)545 2323 y fg(0)564 2316 y fq(,)d fk(p-1)p fq(\))h(et)f(\()p fm(t)791 2323 y fg(0)810 2316 y fq(,)h fk(p)p fq(\))f(p)q(our)i fm(max)p fq(\(1)p fm(;)8 b(t)1179 2323 y fg(0)1196 2316 y fq(\))17 b ff(\024)h fk(p)f ff(\024)h fm(min)p fq(\()p fm(n;)8 b(t)1543 2323 y fg(0)1561 2316 y fq(\)\),)17 b(soit)h fk(p)g fq(=)g(1.)75 2373 y(p)o(our)12 b(les)h(deux)g(fonctions)g fk(g1)f fq(et)h fk(g2)p fq(,)f(on)g(doit)h(donc)g(initialiser)i(la)e(v)m (ariable)h fk(y)e fq(aux)h(indices)h ff(f)p fq(\(1)p fm(;)8 b fq(1\))p ff(g)d([)75 2429 y(f)p fq(\(1)p fm(;)j fq(0\))p ff(g)p fq(.)j(si,)i(du)h(reste)g(de)g(l')o(\023)-21 b(enonc)o(\023)g(e,)12 b(nous)h(d)o(\023)-21 b(eduisons)14 b(que)g fm(dom)p fq(\()p fm(v)1246 2436 y fr(x)1263 2429 y fq(\))7 b ff(\\)g fq(\()p fm(dom)p fq(\()p fk(g1)n fq(\))g ff([)g fm(dom)p fq(\()p fk(g2)n fq(\)\))12 b(=)h ff(fg)75 2486 y fq(alors)20 b(l'instruction)h(in)o(terne)g(\022)-23 b(a)20 b(la)h(b)q(oucle)g(sera)f fk(y'\(t,p\))j(=)h (f\(y'\(t-1,p-1\),y'\(t-1,p\)\))o fq(.)17 b(si,)75 2542 y(par)e(con)o(tre)g(\()p fm(dom)p fq(\()p fk(g1)n fq(\))10 b ff([)h fm(dom)p fq(\()p fk(g2)o fq(\)\))h ff(\032)h fm(dom)p fq(\()p fm(v)904 2549 y fr(x)920 2542 y fq(\)\),)h(alors)h(l') o(\023)-21 b(equation)15 b(\(2\))g(est)f(traduite)i(par)7 b(:)p eop %%page: 99 101 99 100 bop 75 269 a fl(5.5.)29 b(exemple)15 b(1)7 b(:)483 257 y(\023)477 269 y(elimina)l(tion)17 b(de)e(ga)o(uss)758 b fq(99)195 397 y fk(forall)23 b(\(t=1,p=0:1\))f(y'\(t,p\))h(=)h (x\(t,p\))195 453 y(do)g(t)f(=)h(2,2*n)243 510 y(forall)f (\(p=max\(1,t-n\):min\(n,t-1\)\))171 566 y(&)120 b(y'\(t,p\))23 b(=)h(f\(x'\(t,p\),y'\(t-1,p-1\),y)o('\(t-1,p)o(\)\))195 623 y(enddo)75 810 y ft(5.5)66 b(exemple)24 b(1)11 b(:)21 b(\023)-32 b(elimination)24 b(de)e(gauss)146 912 y fq(nous)12 b(reprenons)h(ici)i(l'algorithme)e(pr)o(\023)-21 b(esen)o(t)o(\023)g(e) 11 b(sous)h(la)h(forme)f(du)i(programme)d fn(pei)i fq(de)g(la)g (section)75 968 y(4.1.)21 b(il)j(nous)e(p)q(ermet)h(notammen)o(t)e (d'appliquer)j(la)f(m)o(\023)-21 b(etho)q(de)22 b(de)g(traduction)h (des)g(r)o(\023)-21 b(ecurrences)75 1025 y(exp)q(os)o(\023)g(ee)17 b(pr)o(\023)-21 b(ec)o(\023)g(edemmen)o(t.)16 b(p)o(our)h(cet)h (exemple,)h(nous)e(constatons)g(que)h(l'union)h(des)f(domaines)g(de)75 1081 y(v)m(aleurs)13 b(des)f(c)o(hamps)g(initiaux)h fk(x)f fq(et)g fk(y)f fq(est)h(disjon)o(te)g(de)g(l'union)h(des)f(domaines)h (des)f(routages)f(utilis)o(\023)-21 b(es)75 1138 y(dans)15 b(la)g(r)o(\023)-21 b(ecurrence.)15 b(la)f(r)o(\023)-21 b(ecurrence)15 b(n'utilise)i(donc)e(des)g(v)m(aleurs)h(initiales)h (qu'au)e(premier)g(pas)g(de)75 1194 y(calcul,)h(et)f(seul)i(le)f(c)o (hamp)f(d)o(\023)-21 b(e\014ni)16 b(r)o(\023)-21 b(ecursiv)o(emen)o(t) 14 b(appara)-5 b(^)-18 b(\020t)15 b(dans)g(le)h(calcul.)146 1251 y(dans)g(un)i(but)g(de)f(concision,)i(nous)e(a)o(v)o(ons)f (fusionn)o(\023)-21 b(e)18 b(les)g fk(forall)e fq(sur)h(les)h (dimensions)h fk(i)e fq(et)g fk(j)p fq(,)75 1307 y(ces)e(deux)h (indices)h(\023)-21 b(etan)o(t)13 b(ind)o(\023)-21 b(ep)q(endan)o(ts)16 b(l'un)g(par)f(rapp)q(ort)g(\022)-23 b(a)14 b(l'autre.)242 1413 y fk(program)23 b(gauss)242 1470 y(real)g(c\(1:n,1:n+1,0:n\),)f

(xn\(1:n,1:n,1:n\),)g(yn\(1:n,n+1:n+1,1:n\))242 1526 y(real)h(x\(1:n,1:n,0:0\),)f(y\(1:n,n+1:n+1,0:0\))242 1583 y(real)h(a\(1:n,1:n\),)g(b\(1:n\))75 1695 y(!hpf$)47 b(template)23 b(t_c\(1:n,1:n+1,0:n\))75 1752 y(!hpf$)47 b(align)23 b(xn\(i,j,k\),yn\(i,j,k\),)e(c\(i,j,k\))i(with)g (t_c\(i,j,k\))75 1808 y(!hpf$)47 b(align)23 b(a\(i,j\))g(with)h (t_c\(i,j,0\))75 1865 y(!fpf$)47 b(align)23 b(b\(i\))h(with)f (t_c\(i,n+1,0\))242 1978 y(forall)g(\(i=1:n,j=1:n\))f (x\(i,j,0\)=a\(i,j\))242 2034 y(forall)h(\(i=1:n\))g (y\(i,n+1,0\)=b\(i\))75 2147 y(c)h(initialisation)e(recurrence)242 2204 y(forall)h(\(k=0,i=1:n,j=1:n\))f(c\(i,j,k\))g(=)i(x\(i,j,k\))242 2260 y(forall)f(\(k=0,i=1:n,j=n+1\))f(c\(i,j,k\))g(=)i(y\(i,j,k\))75 2316 y(c)g(recurrence)242 2373 y(do)g(k=1,n-1)314 2429 y(forall)f(\(i=k:n,j=k:n\))242 2486 y(&)143 b(c\(i,j,k\))23 b(=)h(c\(i,j,k-1\)-c\(i,k,k-1\)*c)o(\(k,j,k-)o(1\)/c\(k,k)o(,k-1\))242 2542 y(enddo)p eop %%page: 100 102 100 101 bop 75 269 a fq(100)381 b fl(chapitre)16 b(5.)30 b fn(pei)15 b fl(et)g(les)g(langa)o(ges)g(d)o(a)l(t)l(a-p)l(arall)1735 257 y(\022)1729 269 y(eles)242 453 y fk(forall)23 b (\(i=1:n,j=1:n,k=1:n,k)e(.eq.)j(i-1\))f(xn\(i,j,k\))f(=)i(c\(i,j,k\)) 242 510 y(forall)f(\(i=1:n,j)g(.eq.)g(n+1)h(.and.)f(k)h(.eq.)f(i-1\))g (yn\(i,j,k\))g(=)h(c\(i,j,k\))242 566 y(end)75 709 y ft(5.6)66 b(exemple)24 b(2)11 b(:)22 b fb(gaxpx)146 811 y fq(nous)g(traduisons)h(ici)h(les)f(programmes)e fk(gaxpx1)h fq(et)g fk(gaxpx4)g fq(de)h(la)g(section)g(4.6.)e(ces)i(pro-)75 867 y(grammes)16 b(illustren)o(t)j(plus)f(particuli)o(\022)-21 b(eremen)o(t)19 b(la)e(traduction)h(des)f(r)o(\023)-21 b(eductions)18 b(g)o(\023)-21 b(eom)o(\023)g(etriques.)15 b(no-)75 924 y(tons)21 b(que)g(nous)g(a)o(v)o(ons)f(instanci)o(\023)-21 b(e)22 b(le)g(param)o(\022)-21 b(etre)19 b(de)i(structure)g(du)h(probl) o(\022)-21 b(eme)21 b(\()p fm(n)h fq(=)h(5\))d(car)h(les)75 980 y(tableaux)e(n)o(\023)-21 b(ecessaires)19 b(\022)-23 b(a)18 b fk(sum)p 612 980 15 2 v 17 w(scatter)f fq(ne)i(doiv)o(en)o(t)g (con)o(tenir)g(que)g(des)g(constan)o(tes.)e(la)i(premier)75 1036 y(programme)h(est)h(la)h(traduction)g(de)f(l'algorithme)h (initial,)h(qui)f(place)h(le)f(v)o(ecteur)f fk(x)g fq(sur)h(la)f(pre-) 75 1093 y(mi)o(\022)-21 b(ere)19 b(ligne)i(de)f(la)g(matrice,)g(et)f(n) o(\023)-21 b(ecessite)20 b(ensuite)h(de)f(transp)q(oser)f(le)i(v)o (ecteur)e(r)o(\023)-21 b(esulat)19 b fk(c0)g fq(p)q(our)75 1149 y(l'additionner)e(a)o(v)o(ec)e(le)h(v)o(ecteur)f(original)h fk(x)p fq(.)242 1253 y fk(program)23 b(gaxpx1)242 1310 y(real)g(a\(0:4,0:4\),)g(b\(0:4,0:4\),)f(p\(0:4,0:4\))242 1366 y(real)h(c0\(0:4,0:4\),)g(c1\(0:4,0:4\),)f(c\(0:4,0:4\))242 1422 y(real)h(x\(0:4\),b0\(0:4,0:4\))75 1479 y(!hpf$)47 b(template)23 b(t_b0\(0:4,0:4\))75 1592 y(!hpf$)47 b(align)23 b(a\(i,j\),)g(b\(i,j\),)g(p\(i,j\),)g(c1\(i,j\),)g(c0\(i,j\),)f (c\(i,j\))i(with)f(t_b0\(i,j\))75 1648 y(!hpf$)47 b(align)23 b(x\(j\))h(with)f(t_b0\(0,j\))242 1761 y(forall)g(\(j=0:4\))g (b0\(0,j\)=x\(j\))242 1818 y(forall)g(\(i=0:4,j=0:4\))f(b\(i,j\))h(=)h (b0\(0,j\))242 1874 y(forall)f(\(i=0:4,j=0:4,true\))e(p\(i,j\))j(=)f (\(a\(i,j\)*b\(i,j\)\))242 1931 y(c0)h(=)f(sum_scatter\(p,0,)242 1987 y(&)95 b(\([[0,1,2,3,4],[0,1,2,3,4],[0,)o(1,2,3,4)o(],)242 2043 y(&)167 b([0,1,2,3,4],[0,1,2,3,4]]\),)242 2100 y(&)95 b(\([[4,4,4,4,4],[4,4,4,4,4],[4,)o(4,4,4,4)o(],)242 2156 y(&)167 b([4,4,4,4,4],[4,4,4,4,4]]\)\))242 2213 y(forall)23 b(\(j=0:4,i)g(.eq.)g(0\))h(c1\(i,j\))f(=)g(c0\(j,4\))242 2269 y(forall)g(\(i=0:4,j=0:4,true\))e(c\(i,j\))j(=)f (b0\(i,j\)+c1\(i,j\))242 2326 y(end)146 2486 y fq(dans)c(ce)h(deuxi)o (\022)-21 b(eme)20 b(programme,)e(on)h(constate)g(que)h(la)g(phase)g

(de)g(transp)q(osition)g(a)f(disparu)75 2542 y(\(a)o(v)m(an)o(t)c (dernier)h fk(forall)f fq(de)h fk(gaxpx1)p fq(\),)f(ainsi)h(que)g(le)h (tableau)f(in)o(term)o(\023)-21 b(ediaire)16 b fk(c1)p fq(.)f(des)h(conclusions)p eop %%page: 101 103 101 102 bop 75 269 a fl(5.7.)29 b(ad)o(apt)l(a)l(tion)509 257 y(\022)502 269 y(a)15 b(d'a)o(utres)g(langa)o(ges)g(d)o(a)l(t)l (a-p)l(arall)1407 257 y(\022)1401 269 y(eles)262 b fq(101)75 397 y(de)16 b(la)h(section)f(4.6,)f(nous)h(sa)o(v)o(ons)e(que)j(les)f (v)o(ecteurs)g(r)o(\023)-21 b(esultats)15 b(de)h(ces)g(deux)h (programmes)e(son)o(t)g(les)75 453 y(m)o(^)-21 b(emes)14 b(et)h(son)o(t)g(plac)o(\023)-21 b(es)15 b(sur)g(la)g(premi)o(\022)-21 b(ere)16 b(ligne)g(dans)g fk(gaxpx1)e fq(et)h(sur)g(la)h(diagonale)g (dans)f fk(gaxpx2)p fq(.)242 604 y fk(real)23 b(a\(0:4,0:4\),)g (b\(0:4,0:4\),)f(p\(0:4,0:4\))242 660 y(real)h(c0\(0:4,0:4\),)g (c\(0:4,0:4\))242 717 y(real)g(x\(0:4\),b0\(0:4,0:4\))75 773 y(!hpf$)47 b(template)23 b(t_b0\(0:4,0:4\))75 886 y(!hpf$)47 b(align)23 b(a\(i,j\),)g(b\(i,j\),)g(p\(i,j\),)g(c0\(i,j\),) g(c\(i,j\))g(with)g(t_b0\(i,j\))75 943 y(!hpf$)47 b(align)23 b(x\(j\))h(with)f(t_b0\(0,j\))242 1056 y(forall)g(\(j=0:4\))g (b0\(j,j\)=x\(j\))242 1112 y(forall)g(\(i=0:4,j=0:4\))f(b\(i,j\))h(=)h (b0\(j,j\))242 1168 y(forall)f(\(i=0:4,j=0:4,true\))e(p\(i,j\))j(=)f (\(a\(i,j\)*b\(i,j\)\))242 1225 y(c0)h(=)f(sum_scatter\(p,0,)242 1281 y(&)95 b(\([[0,1,2,3,4],[0,1,2,3,4],[0,)o(1,2,3,4)o(],)242 1338 y(&)167 b([0,1,2,3,4],[0,1,2,3,4]]\),)242 1394 y(&)95 b(\([[0,1,2,3,4],[0,1,2,3,4],[0,)o(1,2,3,4)o(],)242 1451 y(&)167 b([0,1,2,3,4],[0,1,2,3,4]]\)\))242 1507 y(forall)23 b(\(i=0:4,j=0:4,true\))e(c\(i,j\))j(=)f(b0\(i,j\)+c0\(i,j\))242 1564 y(end)75 1749 y ft(5.7)66 b(adaptation)23 b(\022)-33 b(a)22 b(d'autres)g(langages)f(data-parall)o(\022)-32 b(eles)146 1865 y fq(le)15 b(sc)o(h)o(\023)-21 b(ema)14 b(de)i(traduction)f(pr)o(\023)-21 b(esen)o(t)o(\023)g(e)13 b(pro)q(duit)j(des)f(programmes)f(hpf)h(d'un)h(st)o(yle)f(tr)o(\022)-21 b(es)13 b(parti-)75 1921 y(culier,)18 b(don)o(t)d(la)i(s)o(\023)-21 b(eman)o(tique)16 b(des)g(indices)i(de)f(tableau)g(est)f(la)g(m)o(^)-21 b(eme)16 b(que)g(celles)i(des)f(programmes)75 1978 y fn(pei)7 b fq(:)17 b(les)h(indices)h(d)o(\023)-21 b(esignen)o(t)17 b(les)g(p)q(oin)o(ts)h(d'un)f(domaine)h(de)f(r)o(\023)-21 b(ef)o(\023)g(erence)16 b(comm)o(un)h(aux)g(c)o(hamps)g(du)75 2034 y(programme.)f(ce)i(domaine)g(de)g(r)o(\023)-21 b(ef)o(\023)g(erence)17 b(repr)o(\023)-21 b(esen)o(te)17 b(la)h(mac)o(hine)g(virtuelle)i(utilis)o(\023)-21 b(ee)19 b(par)e(le)i(pro-)75 2091 y(gramme)d(data-parall)o(\022)-21 b(ele.)16 b(nous)h(a)o(v)o(ons)e(vu)i(que)g(cette)g(s)o(\023)-21 b(eman)o(tique)15 b(\023)-21 b(etait)15 b(celle)j(de)f(la)g(plupart)g (des)75 2147 y(langages)i(data-parall)o(\022)-21 b(eles)20 b(\(c)620 2131 y fw(?)639 2147 y fq([54)o(],)e(mpl[38)o(],)h fn(hyper-c)p fq([45],)g(dpce[53)n(],)g fj(etc)p fq(\),)g(et)g(par)g (cons)o(\023)-21 b(e-)75 2204 y(quen)o(t)14 b(le)i(co)q(de)e(pro)q (duit)i(p)q(eut)f(facilemen)o(t)f(^)-21 b(etre)13 b(adapt)o(\023)-21 b(e)13 b(\022)-23 b(a)14 b(n'imp)q(orte)h(quel)g(langage)f(data-parall) o(\022)-21 b(ele)75 2260 y(autorisan)o(t)15 b(la)h(d)o(\023)-21 b(eclaration)16 b(de)g(mac)o(hines)h(virtuelles.)g(les)f(mo)q (di\014cations)h(\022)-23 b(a)16 b(app)q(orter)f(concernen)o(t)75 2316 y(principalemen)o(t)k(le)e(remplacemen)o(t)g(des)g(alignemen)o(ts) h(par)e(des)h(instructions)g(de)g(comm)o(unication,)75 2373 y(comme)e(nous)g(l'a)o(v)o(ons)f(\023)-21 b(ev)o(o)q(qu)o(\023)g (e)13 b(dans)j(la)f(traduction)g(des)h(c)o(hangemen)o(ts)f(de)g(base)h fn(pei)p fq(.)e(egalemen)o(t,)75 2429 y(la)g(r)o(\023)-21 b(eduction)13 b(g)o(\023)-21 b(eom)o(\023)g(etrique)12

b(de)i fn(pei)f fq(n)o(\023)-21 b(ecessite)14 b(une)g(primitiv)o(e)h (de)f(r)o(\023)-21 b(eduction)14 b(tr)o(\022)-21 b(es)12 b(g)o(\023)-21 b(en)o(\023)g(erale)12 b(dans)i(le)75 2486 y(langage)i(cible,)h(et)f(seul)g(hpf)g(\022)-23 b(a)15 b(notre)h(connaissance)h(prop)q(ose)f(un)g(op)o(\023)-21 b(erateur)14 b(assez)i(g)o(\023)-21 b(en)o(\023)g(eral)14 b(p)q(our)75 2542 y(exprimer)i(toutes)f(ces)g(r)o(\023)-21 b(eductions.)p eop %%page: 102 104 102 103 bop 75 269 a fq(102)381 b fl(chapitre)16 b(5.)30 b fn(pei)15 b fl(et)g(les)g(langa)o(ges)g(d)o(a)l(t)l(a-p)l(arall)1735 257 y(\022)1729 269 y(eles)75 397 y ft(5.8)66 b(p)n(ersp)r(ectiv)n(es) 146 500 y fq(nous)15 b(donnons)h(dans)g(cette)f(section)h(quelques)h (pistes)f(p)q(our)g(am)o(\023)-21 b(eliorer)15 b(la)h(traduction)g(pr)o (\023)-21 b(esen-)75 557 y(t)o(\023)g(ee)18 b(pr)o(\023)-21 b(ec)o(\023)g(edemmen)o(t.)17 b(cette)h(am)o(\023)-21 b(elioration)18 b(consiste)h(\022)-23 b(a)18 b(pro\014ter)h(des)g (alignemen)o(ts)g(de)g(hpf)f(p)q(our)75 613 y(abstraire)e(les)g (expressions)h(de)f(tableaux)h(de)f(leur)h(signi\014cation)g(g)o(\023) -21 b(eom)o(\023)g(etrique)15 b(par)g(rapp)q(ort)h(au)f(r)o(\023)-21 b(e-)75 669 y(f)o(\023)g(eren)o(tiel)15 b(repr)o(\023)-21 b(esen)o(tan)o(t)14 b(la)h(mac)o(hine)i(virtuelle.)146 727 y(nous)22 b(p)q(ouv)o(ons)g(main)o(tenan)o(t)f(sc)o(h)o(\023)-21 b(ematiser)21 b(l'utilisation)j(t)o(ypique)f(des)f(c)o(hamps)g(de)h (donn)o(\023)-21 b(ees)75 783 y(dans)18 b(les)g(\023)-21 b(enonc)o(\023)g(es)16 b fn(pei)8 b fq(:)17 b(\022)-23 b(a)18 b(partir)g(des)g(c)o(hamps)g(en)g(en)o(tr)o(\023)-21 b(ee,)17 b(d'autres)g(c)o(hamps)h(son)o(t)f(d)o(\023)-21 b(e\014nis)18 b(p)q(our)75 840 y(repr)o(\023)-21 b(esen)o(ter)11 b(le)h(placemen)o(t)g(sur)f(le)i(r)o(\023)-21 b(ef)o(\023)g(eren)o (tiel)10 b(des)i(v)m(aleurs)h(en)e(en)o(tr)o(\023)-21 b(ee.)11 b(ces)g(d)o(\023)-21 b(e\014nitions)12 b(utilisen)o(t)h(des)75 896 y(op)o(\023)-21 b(erations)12 b(g)o(\023)-21 b(eom)o(\023)g (etriques)11 b(et)i(des)g(c)o(hangemen)o(ts)g(de)g(base)g(\(alignemen)o (t,)g(duplication\))i(a\014n)e(d'ame-)75 953 y(ner)j(les)h(v)m(aleurs)g (en)g(tous)e(les)i(p)q(oin)o(ts)g(du)f(r)o(\023)-21 b(ef)o(\023)g(eren) o(tiel)16 b(o)q(\022)-24 b(u)16 b(auron)o(t)f(lieu)j(des)e(calculs.)h (nous)f(app)q(elons)75 1009 y(cette)i(derni)o(\022)-21 b(ere)19 b(cat)o(\023)-21 b(egorie)18 b(de)h(c)o(hamp,)f(les)h fj(champs)h(plac)o(\023)-22 b(es)p fq(.)18 b(dans)g(notre)g(sc)o(h)o (\023)-21 b(ema)17 b(de)i(traduction)75 1066 y(pr)o(\023)-21 b(ec)o(\023)g(eden)o(t,)15 b(ce)h(son)o(t)g(les)h(c)o(hamps)f(plac)o (\023)-21 b(es)17 b(qui)g(apparaissen)o(t)f(dans)g(les)h(calculs,)h(et) e(par)g(cons)o(\023)-21 b(equen)o(t)75 1122 y(les)16 b(indices)i(des)d(tableaux)h(traduisan)o(t)f(ces)h(c)o(hamps)g(d)o (\023)-21 b(esignen)o(t)15 b(des)h(pro)q(cesseurs)g(virtuels,)g(comme) 75 1178 y(nous)g(l'a)o(v)o(ons)f(soulign)o(\023)-21 b(e)16 b(en)h(section)f(5.2.)f(l'id)o(\023)-21 b(ee)16 b(est)f(donc)i(de)f (substituer)g(dans)g(le)h(programme)e(les)75 1235 y(c)o(hamps)k(plac)o (\023)-21 b(es)19 b(par)g(les)h(c)o(hamps)f(en)g(en)o(tr)o(\023)-21 b(ee)19 b(m)o(unis)g(de)h(l'alignemen)o(t)g(corresp)q(ondan)o(t.)f (ainsi,)h(le)75 1291 y(programme)d(hpf)g(r)o(\023)-21 b(esultat)16 b(de)i(la)g(traduction)g(ne)g(comp)q(orte)f(plus)i(les)f (\\d)o(\023)-21 b(eformations")16 b(dues)i(au)75 1348 y(placemen)o(t)13 b(don)o(t)f(nous)g(a)o(v)o(ons)f(parl)o(\023)-21 b(e.)12 b(p)o(our)f(cela,)i(nous)f(dev)o(ons)g(am)o(\023)-21 b(eliorer)12 b(la)h(g)o(\023)-21 b(en)o(\023)g(eration)10 b(des)i(direc-)75 1404 y(tiv)o(es)k(d'alignemen)o(t)h(de)f(fa\030)-20 b(con)16 b(\022)-23 b(a)15 b(prendre)i(en)f(compte)g(les)g (duplications,)i(ainsi)f(que)f(la)g(traduction)75 1461

y(des)f(\023)-21 b(equations)14 b(r)o(\023)-21 b(ecurren)o(tes.)75 1587 y fw(5.8.1)55 b(t)-5 b(raduction)19 b(des)g(di\013usions)f(par)h (des)f(alignemen)n(ts)146 1675 y fq(les)d(alignemen)o(ts)g(hpf)f(que)h (nous)f(a)o(v)o(ons)g(pris)h(en)g(compte)f(jusqu'\022)-23 b(a)14 b(pr)o(\023)-21 b(esen)o(t)14 b(son)o(t)f(uniquemen)o(t)75 1731 y(d)o(\023)-21 b(eduits)22 b(des)g(c)o(hangemen)o(ts)g(de)g(base)g (de)h(l')o(\023)-21 b(enonc)o(\023)g(e)21 b fn(pei)p fq(,)g(et)h(repr)o(\023)-21 b(esen)o(ten)o(t)20 b(par)i(cons)o(\023)-21 b(equen)o(t)21 b(des)75 1788 y(bijections)13 b(en)o(tre)f(la)g(repr)o (\023)-21 b(esen)o(tation)11 b(des)i(v)m(aleurs)g(de)f(tableau)g(et)g (la)g(repr)o(\023)-21 b(esen)o(tation)11 b(des)i(v)m(aleurs)g(sur)75 1844 y(un)h(template.)g(cep)q(endan)o(t,)g(la)h(directiv)o(e)g fk(align)e fq(nous)h(p)q(ermet)g(de)h(prendre)f(en)h(compte)d(\023)-21 b(egalemen)o(t)75 1901 y(des)18 b(duplications)h(de)f(v)m(aleurs.)f(d)o (\023)-21 b(eterminer)17 b(quand)h(une)f(v)m(aleur)i(in)o(tiale)f(est)f (dupliqu)o(\023)-21 b(ee)19 b(revien)o(t)f(\022)-23 b(a)75 1957 y(iden)o(ti\014er)17 b(dans)e(l')o(\023)-21 b(enonc)o(\023)g(e)14 b fn(pei)p fq(,)h(le)h(motif)7 b(:)859 2058 y fk(x)15 b fq(=)h fk(h)7 b(::)h(y)859 2114 y(z)15 b fq(=)h fk(y)f fa(c)g fk(g)75 2215 y fq(o)q(\022)-24 b(u)14 b fk(x)f fq(est)h(un)g(c)o(hamp)g(de)g(donn)o(\023)-21 b(ees)14 b(en)g(en)o(tr)o(\023)-21 b(ee,)13 b fk(h)7 b fq(:)14 b fe(z)979 2199 y fw(n)1011 2215 y ff(7!)f fe(z)1103 2199 y fw(p)1119 2215 y fq(,)g(et)h fk(g)7 b fq(:)14 b fe(z)1288 2199 y fw(n)1320 2215 y ff(7!)f fe(z)1412 2199 y fw(n)1445 2215 y fq(est)h(une)g(fonction)g(non)75 2272 y(injectiv)o(e,)19 b(a)o(v)o(ec)f fm(img)r fq(\()p fk(g)p fq(\))f(=)h fm(dom)p fq(\()p fk(h)p fq(\).)f(supp)q(osons)i(les) g(c)o(hamps)f fk(x)p fq(,)g fk(y)g fq(et)g fk(z)h fq(resp)q(ectiv)o (emen)o(t)f(\023)-21 b(egaux)75 2328 y(aux)17 b(paires)g(de)h (fonctions)f(\()p fm(v)595 2335 y fr(x)620 2328 y fq(:)g fm(\033)676 2335 y fr(x)693 2328 y fq(\),)f(\()p fm(v)780 2335 y fr(y)805 2328 y fq(:)h fm(\033)861 2335 y fr(y)878 2328 y fq(\))g(et)g(\()p fm(v)1008 2335 y fr(z)1033 2328 y fq(:)f fm(\033)1088 2335 y fr(z)1106 2328 y fq(\).)g(de)h(la)g(d)o (\023)-21 b(e\014nition)18 b(des)f(op)o(\023)-21 b(erations,)16 b(les)75 2385 y(deux)f(\023)-21 b(equations)14 b(pr)o(\023)-21 b(ec)o(\023)g(eden)o(tes)14 b(nous)i(donnen)o(t)8 b(:)635 2485 y(\()p fm(v)675 2492 y fr(x)700 2485 y fq(:)15 b fm(\033)754 2492 y fr(x)772 2485 y fq(\))49 b(=)h(\()p fm(v)964 2492 y fr(y)991 2485 y ff(\016)10 b fk(h)1048 2469 y fq(-1)1093 2485 y fq(:)15 b fm(\033)1147 2492 y fr(y)1174 2485 y ff(\016)10 b fk(h)1231 2469 y fq(-1)1269 2485 y fq(\))635 2542 y(\()p fm(v)675 2549 y fr(z)700 2542 y fq(:)15 b fm(\033)754 2549 y fr(z)772 2542 y fq(\))49 b(=)h(\()p fm(v)964 2549 y fr(y)991 2542 y ff(\016)10 b fk(g)e fq(:)15 b fm(\033)1110 2549 y fr(y)1127 2542 y fq(\))p eop %%page: 103 105 103 104 bop 75 269 a fl(5.8.)29 b(perspectives)1248 b fq(103)75 397 y(nous)16 b(c)o(herc)o(hons)h(main)o(tenan)o(t)f(la)g (relation)h(en)o(tre)g(les)g(v)m(aleurs)g(du)g(c)o(hamp)f(en)o(tr)o (\023)-21 b(ee)15 b fk(x)h fq(et)h(les)g(v)m(aleurs)75 453 y(du)23 b(c)o(hamp)g fk(z)p fq(.)f(nous)h(a)o(v)o(ons)f fm(v)638 460 y fr(x)678 453 y fq(=)h fm(v)758 460 y fr(y)785 453 y ff(\016)10 b fk(h)842 437 y fq(-1)902 453 y ff(\))23 b fm(v)992 460 y fr(x)1020 453 y ff(\016)10 b fk(h)22 b fq(=)h fm(v)1179 460 y fr(y)1207 453 y ff(\016)10 b fk(h)1264 437 y fq(-1)1311 453 y ff(\016)g fk(h)23 b fq(soit)f fm(v)1506 460 y fr(y)1524 453 y ff(j)1537 460

y fw(dom)p fg(\()p fw(h)p fg(\))1670 453 y fq(=)h fm(v)1750 460 y fr(x)1777 453 y ff(\016)10 b fk(h)p fq(.)75 510 y(comme)j fm(dom)p fq(\()p fm(v)366 517 y fr(y)383 510 y fq(\))f ff(\022)h fm(dom)p fq(\()p fk(h)p fq(\),)g fm(v)655 517 y fr(y)686 510 y fq(=)h fm(v)757 517 y fr(x)785 510 y ff(\016)c fk(h)p fq(.)j(alors)h fm(v)1009 517 y fr(z)1040 510 y fq(=)g fm(v)1111 517 y fr(x)1139 510 y ff(\016)c fk(h)g ff(\016)f fk(g)p fq(.)14 b(cette)f(relation)h(nous)g (donne)h(le)75 566 y(placemen)o(t)h(des)f(v)m(aleurs)i(initiales)g(sur) e(le)h(c)o(hamp)f fk(z)p fq(.)g(p)o(ar)f(exemple,)i(le)g(motif)f(d')o (\023)-21 b(equations)7 b(:)537 655 y fk(x)12 b fq(=)h fm(\025)p fk(\(i,j\))p ff(j)p fk(\(1)p ff(\024)p fk(i)p ff(\024)p fk(n)7 b(&)h(j)p fq(=)p fk(i\).\(i\))f(::)g(y)537 711 y(z)12 b fq(=)h fk(y)i fa(c)h fm(\025)p fk(\(i,j\))p ff(j)p fk(\(1)p ff(\024)p fk(j)p ff(\024)p fk(n)7 b(&)g(1)p ff(\024)p fk(j)p ff(\024)p fk(n\).\(j,j\))75 800 y fq(donne)16 b fm(v)231 807 y fr(z)262 800 y fq(=)d fm(v)332 807 y fr(x)360 800 y ff(\016)d fm(\025)p fk(\(i,j\).\(j\))n fq(,)15 b(ce)h(qui)g(signi\014e)h(in)o(tuitiv)o(emen)o(t,)f(que)g(les)g (v)m(aleurs)g(de)g(co)q(ordonn)o(\023)-21 b(ees)75 857 y(\()p fm(i;)8 b(j)s fq(\))i(de)j fk(z)f fj(\()-9 b(\()p fq(viennen)o(t)p fj(\))g(\))14 b fq(des)f(p)q(oin)o(ts)f(de)h(co)q (ordonn)o(\023)-21 b(ees)12 b fm(j)j fq(de)d fk(x)p fq(,)g(ce)h(qui)g (p)q(eut)g(se)f(traduire)h(par)f(la)g(direc-)75 913 y(tiv)o(e)k fk(align)23 b(x\(j\))g(with)g(z\(*,j\))p fq(.)15 b(en)g(alignan)o(t)h (ces)g(deux)g(tableaux)g(sur)f(un)h(template)g(comm)o(un,)75 969 y(et)f(en)h(renomman)o(t)e(les)i(indices,)h(nous)e(a)o(v)o(ons)7 b(:)147 1055 y fk(align)23 b(x\(i\))71 b(with)23 b(t\(*,i\))147 1112 y(align)g(z\(i,j\))g(with)g(t\(i,j\))75 1232 y fw(5.8.2)55 b(substitution)18 b(des)h(c)n(hamps)f(plac)o(\023)-27 b(es)18 b(par)h(les)f(c)n(hamps)g(en)n(tr)o(\023)-27 b(ee)146 1318 y fq(il)17 b(est)g(imp)q(ortan)o(t)f(de)i(noter)e(que)h (l'alignemen)o(t)h(de)g fk(x)e fq(sur)h(le)h(template)f(est)f(p)q (ermanen)o(t,)h(c'est-)75 1374 y(\022)-23 b(a-dire)17 b(que)f(toute)g(mo)q(di\014cation)h(d'un)f(\023)-21 b(el)o(\023)g(emen) o(t)14 b fk(x\(i\))i fq(duran)o(t)g(l'ex)o(\023)-21 b(ecution)16 b(est)g(rep)q(ort)o(\023)-21 b(ee)15 b(sur)h(tous)75 1431 y(ses)e(\023)-21 b(el)o(\023)g(emen)o(ts)14 b(dupliqu)o(\023)-21 b(es)17 b(\([32)n(],)e(page)g(118\).)e(ainsi)k(les)f(instructions)428 1516 y fk(x\(1\))24 b(=)f(v)61 b fq(et)f fk(forall)23 b(\(i)p fq(=)p fk(1:n,j)p fq(=)p fk(1\))h(z\(i,j\))f(=)g(v)75 1602 y fq(r)o(\023)-21 b(ealisen)o(t)16 b(des)h(a\013ectations)f (\(resp)q(ectiv)o(emen)o(t)h(aux)g(v)m(ariables)h fk(x)e fq(et)h fk(y)p fq(\))f(par)g(le)i(m)o(^)-21 b(eme)15 b(ensem)o(ble)j(de)75 1659 y(pro)q(cesseurs)e(virtuels.)146 1715 y(cette)g(caract)o(\023)-21 b(eristique)16 b(p)q(ermet,)h(dans)g (certaines)g(conditions,)h(de)f(remplacer)h(une)f(traduction)75 1772 y(faisan)o(t)h(in)o(terv)o(enir)h(la)f(v)m(ariable)i fk(z)p fq(,)d(par)h(une)h(traduction)f(o)q(\022)-24 b(u)19 b(n'in)o(tervien)o(t)f(que)h(la)f(v)m(ariable)i fk(x)p fq(.)e(la)75 1828 y(condition,)d(p)q(our)f(r)o(\023)-21 b(ealiser)13 b(une)i(telle)g(substitution,)f(dans)g(le)h(cas)e(d'une)i (duplication,)g(est)f(que)g(toute)75 1885 y(op)o(\023)-21 b(eration)12 b(faisan)o(t)g(r)o(\023)-21 b(ef)o(\023)g(erence)12 b(aux)h(v)m(aleurs)h(de)f fk(z)p fq(,)f(le)i(fait)f(p)q(our)g(l'ensem)o (ble)h(des)g(v)m(aleurs)f(dupliqu)o(\023)-21 b(ees.)75 1941 y(p)o(ar)9 b(con)o(tre,)h(si)h(dans)f(l')o(\023)-21 b(enonc)o(\023)g(e)10 b fn(pei)p fq(,)f(une)i(expression)h(fait)e(r)o (\023)-21 b(ef)o(\023)g(erence)9 b(\022)-23 b(a)10 b(une)h(partie)f (seulemen)o(t)i(des)e(v)m(a-)75 1998 y(leurs)i(sur)f(la)g(premi)o(\022)

-21 b(ere)12 b(dimension)g(\(la)f(dimension)i(dupliqu)o(\023)-21 b(ee)13 b(par)e(l'alignemen)o(t)h(de)g fk(x)p fq(\))e(du)i(c)o(hamp)f fk(z)p fq(,)75 2054 y(alors)g(nous)h(ne)g(p)q(ouv)o(ons)g(exprimer)g (cette)g(expression)g(en)h(utilisan)o(t)f fk(x)g fq(\022)-23 b(a)11 b(la)h(place)h(de)f fk(z)p fq(.)f(p)o(ar)g(exemple,)75 2110 y(si)18 b(on)f(trouv)o(e)f(dans)i(le)g(programme)e(une)i (expression)g(comme)f fk(a)g fq(=)g fk(z)e fa(c)h fm(\025)p fk(\(i,j\))p ff(j)p fk(\(i=1)6 b(&)h(j=1\))p fq(,)17 b(on)75 2167 y(ne)f(p)q(ourra)f(pas)g(exprimer)h fk(a)f fq(en)g(fonction)h(d'une)f(v)m(ariable)i fk(x)e fq(align)o(\023)-21 b(ee)16 b(comme)f(ci-dessus.)75 2287 y fw(5.8.3)55 b(optimisation)17 b(des)h(traductions)h(des)f(r)o(\023)-27 b(ecurrences)146 2373 y fq(nos)14 b(programmes)g(traduits)g(en)h(hpf)g(son)o(t)f(des)h (programmes)e(\022)-23 b(a)15 b(assignation)g(unique,)g(et)g(il)h(est) 75 2429 y(souv)o(en)o(t)c(repro)q(c)o(h)o(\023)-21 b(e)12 b(\022)-23 b(a)13 b(ce)g(mo)q(d)o(\022)-21 b(ele)13 b(son)g(co)q(^)-24 b(ut)12 b(m)o(\023)-21 b(emoire)12 b(prohibitif.)i(des)f(tra)o(v)m(aux) f(imp)q(ortan)o(ts)g(on)o(t)g(\023)-21 b(et)o(\023)g(e)75 2486 y(men)o(\023)g(es)16 b(dans)g(ce)g(domaine)h([9)o(,)f(40,)f(62,)h (35)o(])g(mais)g(nous)g(nous)h(in)o(t)o(\023)-21 b(eressons)15 b(ici)i(\022)-23 b(a)16 b(un)h(cas)f(particulier)75 2542 y(d'optimisation)g(m)o(\023)-21 b(emoire.)p eop %%page: 104 106 104 105 bop 75 269 a fq(104)381 b fl(chapitre)16 b(5.)30 b fn(pei)15 b fl(et)g(les)g(langa)o(ges)g(d)o(a)l(t)l(a-p)l(arall)1735 257 y(\022)1729 269 y(eles)146 397 y fq(en)20 b(partan)o(t)g(du)h (constat)f(que)h(seul)h(le)f(r)o(\023)-21 b(esultat)20 b(\014nal)h(d'une)g(d)o(\023)-21 b(e\014nition)22 b(r)o(\023)-21 b(ecursiv)o(e)20 b(in)o(t)o(\023)-21 b(eresse)75 453 y(g)o(\023)g(en)o(\023)g(eralemen)o(t)15 b(le)j(programmeur,)d(il)j (vien)o(t)f(naturellemen)o(t)h(l'id)o(\023)-21 b(ee,)16 b(en)i(cas)e(de)h(r)o(\023)-21 b(ecurrence)17 b(de)g(pro-)75 510 y(fondeur)d(un,)g(de)g(substituer)g(les)f(\023)-21 b(ecritures)13 b(m)o(\023)-21 b(emoires)13 b(sur)g(la)h(dimension)i (temp)q(orelle)e(par)g(plusieurs)74 566 y(\023)-21 b(ecritures)16 b(dans)g(une)h(cellule)i(m)o(\023)-21 b(emoire)15 b(unique.)j(nous)e(p) q(ouv)o(ons)g(d)o(\023)-21 b(eterminer)16 b(que)h(seul)g(le)g(r)o(\023) -21 b(esultat)75 623 y(\014nal)19 b(de)g(la)f(r)o(\023)-21 b(ecurrence)18 b(est)h(signi\014catif)g(par)f(la)h(pr)o(\023)-21 b(esence)18 b(d'une)h(op)o(\023)-21 b(eration)17 b(de)i(g)o(\023)-21 b(eom)o(\023)g(etrique)16 b(s)o(\023)-21 b(e-)75 679 y(lectionnan)o(t)18 b(ces)g(v)m(aleurs)g(\014nales.)g(il)h(faut)e (naturellemen)o(t)h(s'assurer)f(qu'aucune)h(autre)f(d)o(\023)-21 b(e\014nition)75 736 y(n'utilise)20 b(une)e(v)m(aleur)h(du)g(c)o(hamp)f (\022)-23 b(a)18 b(un)g(instan)o(t)g(particulier.)h(dans)f(ce)g(cas,)g (nous)g(rempla\030)-20 b(cons)18 b(la)75 792 y(dimension)g(temp)q (orelle)g(par)e(un)h(scalaire.)g(dans)f(l'exemple)i fk(prefixsum)e fq(\(page)g(15\))f(de)i(la)g(somme)75 849 y(de)f fm(n)f fq(nom)o(bres,)g(notre)f(traduction)i(devien)o(t)8 b(:)170 924 y fk(a)24 b(=)g(r\(1\))170 980 y(do)g(i=2,n)242 1037 y(a)g(=)f(r\(i\))h(+)g(a)170 1093 y(enddo)75 1169 y fq(nous)18 b(n'a)o(v)o(ons)f(plus)i(les)f(sommes)g(partielles)h(comme)f(dans)g(le) h(v)o(ersion)f(traduite)g(pr)o(\023)-21 b(ec)o(\023)g(edemmen)o(t,)75 1225 y(mais)15 b(uniquemen)o(t)i(la)e(somme)g(\014nale)h(des)g(v)m (aleurs)g(du)g(v)o(ecteur)f fk(r)p fq(.)75 1343 y fw(5.8.4)55 b(exemple)146 1429 y fq(le)16 b(programme)f(de)h(la)g(\014gure)g(5.6)f (est)h(une)g(v)o(ersion)g(du)g(pro)q(duit)h(matriciel)g(vu)f(en)h (section)f(3.4,)75 1486 y(utilisan)o(t)f fm(n)279 1469 y fg(3)312 1486 y fq(pro)q(cesseurs)g(virtuels)g(p)q(our)g(deux)f (matrices)g fm(a)h fq(et)f fm(b)j fq(\()p fm(n)8 b ff(\002)g

fm(n)p fq(\).)14 b(le)g(programme)f(aligne)75 1542 y(les)g(matrices)g fm(a)f fq(et)g fm(b)j fq(dans)e(un)g(r)o(\023)-21 b(ef)o(\023)g(eren)o (tiel)12 b(\022)-23 b(a)12 b(trois)g(dimensions)d(:)j fm(a)h fq(est)f(align)o(\023)-21 b(ee)13 b(sur)f(la)h(face)f(lat)o (\023)-21 b(erale)75 1599 y(d'un)15 b(c)o(hamp)f(cubique,)h(et)f fm(b)j fq(sur)d(la)h(face)f(du)h(dessus)f(du)h(cub)q(e)g(commme)f(le)h (mon)o(tre)f(la)g(\014gure)h(5.5.)535 2243 y @beginspecial @setspecial %%begindocument: matmult3d.pstex /$f2psdict 200 dict def $f2psdict begin $f2psdict /mtrx matrix put /l {lineto} bind def /m {moveto} bind def /s {stroke} bind def /n {newpath} bind def /gs {gsave} bind def /gr {grestore} bind def /clp {closepath} bind def /graycol {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul setrgbcolor} bind def /col-1 {} def /col0 {0 0 0 setrgbcolor} bind def /col1 {0 0 1 setrgbcolor} bind def /col2 {0 1 0 setrgbcolor} bind def /col3 {0 1 1 setrgbcolor} bind def /col4 {1 0 0 setrgbcolor} bind def /col5 {1 0 1 setrgbcolor} bind def /col6 {1 1 0 setrgbcolor} bind def /col7 {1 1 1 setrgbcolor} bind def /col8 {.68 .85 .9 setrgbcolor} bind def /col9 {0 .39 0 setrgbcolor} bind def /col10 {.65 .17 .17 setrgbcolor} bind def /col11 {1 .51 0 setrgbcolor} bind def /col12 {.63 .13 .94 setrgbcolor} bind def /col13 {1 .75 .8 setrgbcolor} bind def /col14 {.7 .13 .13 setrgbcolor} bind def /col15 {1 .84 0 setrgbcolor} bind def end /$f2psbegin {$f2psdict begin /$f2psenteredstate save def} def /$f2psend {$f2psenteredstate restore end} def $f2psbegin 0 setlinecap 0 setlinejoin -220.0 202.0 translate 0.900 -0.900 scale 0.500 setlinewidth % polyline n 297 119 m 349 79 l 441 79 l 389 119 l 297 119 l gs 0.75 setgray fill gr gs col-1 s gr % polyline n 441 112 m 455 99 l gs col-1 s gr n 447.777 102.978 m 455.000 99.000 l 450.499 105.909 l gs 2 setlinejoin col-1 s gr % polyline n 441 112 m 455 112 l gs col-1 s gr n 447.000 110.000 m 455.000 112.000 l 447.000 114.000 l gs 2 setlinejoin col-1 s gr % polyline n 441 112 m 441 125 l gs col-1 s gr n 443.000 117.000 m 441.000 125.000 l 439.000 117.000 l gs 2 setlinejoin col-1 s

gr polyline 293 132 m 346 92 l 438 92 l 385 132 l gs col-1 s gr polyline 356 109 m 356 188 l gs col-1 s gr 358.000 180.000 m 356.000 188.000 l 354.000 180.000 l gs 2 setlinejoin col-1 s gr % polyline n 244 224 m 244 132 l 297 92 l 297 184 l 244 224 l gs 0.50 setgray fill gr gs col-1 s gr % polyline n 270 158 m 379 158 l gs col-1 s gr n 371.000 156.000 m 379.000 158.000 l 371.000 160.000 l gs 2 setlinejoin col-1 s gr % polyline n 438 92 m 438 184 l 385 224 l gs col-1 s gr % polyline n 385 224 m 385 132 l 293 132 l 293 224 l clp gs col-1 s gr $f2psend %%enddocument @endspecial 1274 1898 a fe(i)1300 1760 y(k)1349 1835 y(j)584 1823 y(a)966 1786 y(b)338 2387 y fn(fig.)g fq(5.5)f(-)30 b fj(pr)n(o)n(duit)17 b(matriciel)f(sur)g(un)h(cub)n(e)f(de)g(pr)n(o)n (c)n(esseur)f(virtuels)146 2486 y fq(le)h(c)o(hamp)g fk(a')f fq(est)h(ensuite)h(d)o(\023)-21 b(e\014ni)17 b(comme)e(la)h(di\013usion)h(de)g(la)f(matrice)g fm(a)g fq(selon)g(les)h(lignes)g(du)75 2542 y(cub)q(e,)e(et)e fk(b')h fq(comme)g(la)g(di\013usion)h(de)f fm(b)j fq(selon)d(les)h (colonnes)g(du)f(m)o(^)-21 b(eme)13 b(cub)q(e.)i(les)f(deux)h (di\013usions)p eop %%page: 105 107 105 106 bop 75 269 a fl(5.8.)29 b(perspectives)1248 b fq(105)75 397 y(p)q(ermetten)o(t)17 b(de)h(calculer)h(l'ensem)o(ble)f (des)g fm(n)872 380 y fg(3)908 397 y fq(pro)q(duits)g(en)g(une)g(op)o (\023)-21 b(eration)16 b(fonctionnelle.)j(en\014n,)75 453 y(les)f(pro)q(duits)g(son)o(t)e(somm)o(\023)-21 b(es)16 b(le)h(long)h(de)f(la)h(troisi)o(\022)-21 b(eme)16 b(dimension,)j(et)e (le)h(r)o(\023)-21 b(esulat)16 b fk(r)h fq(est)g(le)h(dernier)75 510 y(plan)e(de)g(cette)f(dimension.)75 656 y fk(matmult)23 b(:)h(\(a,b\))14 b ff(7!)i fk(r)75 672 y fx(8)75 709 y(>)75 721 y(>)75 734 y(>)75 746 y(>)75 759 y(>)75 771 y(>)75 784 y(>)75 796 y(>)75 809 y(>)75 821 y(>)75 833 y(>)75 846 y(>)75 858 y(>)75 871 y(>)75 883 y(<)75 958 y(>)75 970 y(>)75 983 y(>)75 995 y(>)75 1008 y(>)75 1020 y(>)75 1033 y(>)75 1045 y(>)75 1058 y(>)75 1070 y(>)75 1083 y(>)75 1095 y(>)75 1107 y(>)75 1120 y(>)75 1132 y(:)137 706 y fk(a)f fq(=)g fk(align1)7 b(::)g(a0)137 763 y(b)15 b fq(=)g fk(align2)7 b(::)g(b0)137 819 y(a0)15 b fq(=)g fk(dim)7 b(::)h(a)137 875 y(b0)15 b fq(=)g fk(dim)7 b(::)h(b)137 932 y(a')15 b fq(=)g fk(a0)g fa(c)h fk(spread1)137 988 y(b')f fq(=)g fk(b0)g fa(c)h fk(spread2)137 1045 y(p)f fq(=)g fk(mult)g fa(b)g fk(\(a')24 b(/&/)7 b(b'\))137 1101 y(c)15 b fq(=)g fk(add)g fa(b)h fk(\(p)23 b(/&/)8 b(c)23 b fa(c)i fk(prev)o(\))137 1158 y(r)15 b fq(=)g fk(c)g fa(c)h fk(last)100 1230 y(align1)73 b fq(=)50 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i)p fm(<)p fk(n)6 b(&)i(j)p fq(=)p fk(0)g(&)g(0)p ff(\024)p fk(k)p fm(<)p fk(n\).\(i,k\))100 1287 y(align2)73 b fq(=)50 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(i)p fq(=)p fk(0)6 b(&)i(0)p ff(\024)p fk(j)p fm(<)p fk(n)g(&)g(0)p % n % n n

ff(\024)p fk(k)p fm(<)p fk(n\).\(k,j\))100 1343 y(dim)145 b fq(=)50 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i)p fm(<)p fk(n)6 b(&)i(0)p ff(\024)p fk(j)p fm(<)p fk(n)g(&)g(0)p ff(\024)p fk(k)p fm(<)p fk(n\).\(i,j,k\))100 1400 y(spread1)49 b fq(=)h fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i)p fm(<)p fk(n)6 b(&)i(0)p ff(\024)p fk(j)p fm(<)p fk(n)g(&)g(0)p ff(\024)p fk(k)p fm(<)p fk(n\).\(i,0,k\))100 1456 y(spread2)49 b fq(=)h fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i)p fm(<)p fk(n)6 b(&)i(0)p ff(\024)p fk(j)p fm(<)p fk(n)g(&)g(0)p ff(\024)p fk(k)p fm(<)p fk(n\).\(0,j,k\))100 1512 y(last)121 b fq(=)50 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i)p fm(<)p fk(n)6 b(&)i(0)p ff(\024)p fk(j)p fm(<)p fk(n)g(&)g(k)p fq(=)p fk(n-1\))100 1569 y(prev)121 b fq(=)50 b fm(\025)p fk(\(i,j,k\))p ff(j)p fk(\(0)p ff(\024)p fk(i)p fm(<)p fk(n)6 b(&)i(0)p ff(\024)p fk(j)p fm(<)p fk(n)g(&)g(1)p ff(\024)p fk(k)p fm(<)p fk(n\).\(i,j,k-1\))100 1625 y(mult)121 b fq(=)50 b fm(\025)p fk(\(a)p fq(;)o fk(b\).\(a*b\))100 1682 y(add)145 b fq(=)50 b fk(id)25 b fq(#)10 b fm(\025)p fk(\(a)p fq(;)o fk(b\).\(a+b\))489 1813 y fn(fig.)15 b fq(5.6)f(-)30 b fj(pr)n(o)n(gr)n(amme)16 b fn(pei)h fj(de)f(pr)n(o)n(duit)h(matriciel)146 1936 y fq(nous)10 b(iden)o(ti\014ons)j(dans)e(ce)g(programme)f(deux)h (motifs)g(de)g(di\013usion,)h(qui)f(son)o(t)g(les)g(paires)g(d')o(\023) -21 b(equa-)75 1993 y(tions)8 b(:)463 2095 y fk(a)15 b fq(=)g fk(align1)7 b(::)g(a0)463 2151 y(a')14 b fq(=)i fk(a0)f fa(c)g fk(spread1)942 2123 y fq(et)1065 2095 y fk(b)g fq(=)h fk(align2)7 b(::)g(b0)1065 2151 y(b')15 b fq(=)h fk(b0)f fa(c)g fk(spread2)146 2258 y fq(les)23 b(v)m(aleurs)h(des)g(c)o(hamps)f(plac)o(\023)-21 b(es)23 b fk(a')g fq(et)g fk(b')f fq(son)o(t)h(donc)g fm(v)1242 2265 y fr(a)1257 2257 y fm(0)1294 2258 y fq(=)h fm(v)1375 2265 y fr(a)1402 2258 y ff(\016)10 b fk(align1)f ff(\016)h fk(spread1)22 b fq(=)75 2314 y fm(\025)p fk(\(i,j,k\).\(i,k\))10 b fq(et)h fm(v)495 2321 y fr(b)510 2313 y fm(0)536 2314 y fq(=)h fm(v)605 2321 y fr(b)633 2314 y ff(\016)e fk(align2)f ff(\016)h fk(spread2)h fq(=)h fm(\025)p fk(\(i,j,k\).\(k,j\))d fq(resp)q(ectiv)o(emen)o(t.)k(nous)75 2371 y(a)o(v)o(ons)h(vu)i(que)f (ces)h(di\013usions)g(p)q(euv)o(en)o(t)f(^)-21 b(etre)14 b(traduites)h(par)g(les)h(directiv)o(es)g(d'alignemen)o(ts)9 b(:)266 2486 y fk(align)23 b(a\(i,k\))g(with)g(a'\(i,*,k\))266 2542 y(align)g(b\(k,j\))g(with)g(b'\(*,j,k\))p eop %%page: 106 108 106 107 bop 75 269 a fq(106)381 b fl(chapitre)16 b(5.)30 b fn(pei)15 b fl(et)g(les)g(langa)o(ges)g(d)o(a)l(t)l(a-p)l(arall)1735 257 y(\022)1729 269 y(eles)75 397 y fq(etan)o(t)i(donn)o(\023)-21 b(e)18 b(les)h(alignemen)o(ts)g(sp)o(\023)-21 b(eci\014)o(\023)g(es)18 b(et)g(le)h(fait)f(que)h(toutes)f(les)h(r)o(\023)-21 b(ef)o(\023)g(erences)17 b(aux)h(c)o(hamps)g fk(a')75 453 y fq(et)k fk(b')f fq(utilisen)o(t)i(la)g(totalit)o(\023)-21 b(e)20 b(des)i(v)m(aleurs)h(de)f(ces)g(c)o(hamps,)g(nous)g(p)q(ouv)o (ons)g(substituer)g(dans)g(le)75 510 y(programme)14 b(hpf,)h(les)h(r)o (\023)-21 b(ef)o(\023)g(erences)13 b fk(a'\(i,j,k\))h fq(par)h fk(a\(i,k\))g fq(et)g fk(b'\(i,j,k\))f fq(par)g fk(b\(k,j\))p fq(.)146 566 y(la)h(somme)h(des)g(pro)q(duits,)g(d)o (\023)-21 b(e\014nie)16 b(par)f(le)i(c)o(hamp)e fk(c)h fq(sous)f(une)i(forme)e(r)o(\023)-21 b(ecursiv)o(e,)15 b(nous)g(am)o(\022)-21 b(ene)75 623 y(\022)e(a)13 b(c)o(herc)o(her)h (un)g(cadencemen)o(t)g(p)q(our)g(la)g(traduction.)f(une)h(fonction)g (de)g(temps)f(candidate)h(est)g(natu-)75 679 y(rellemen)o(t)g(la)g(d)o

(\023)-21 b(ep)q(endance)14 b(sur)g(l'axe)f fm(k)q fq(.)g(la)g(b)q (oucle)i(s)o(\023)-21 b(equen)o(tielle)15 b(repr)o(\023)-21 b(esen)o(tan)o(t)12 b(le)i(temps)f(p)q(eut)h(par)75 736 y(cons)o(\023)-21 b(equen)o(t)11 b(utiliser)j fk(k)e fq(comme)g(indice.)h(apr)o(\022)-21 b(es)12 b(substitution)g(de)h fk(p)e fq(par)h(sa)g(d)o(\023)-21 b(e\014nition,)12 b(la)g(traduction) 75 792 y(du)k(calcul)g(des)g(pro)q(duits)g(selon)g(ce)f(pro)q(c)o(\023) -21 b(ed)o(\023)g(e)14 b(est)8 b(:)147 877 y fk(forall)23 b(\(i=0:n-1,j=0:n-1,k=0\))e(c\(i,j,k\))h(=)i(a\(i,k\)*b\(k,j\))147 933 y(do)f(k=1,n-1)242 990 y(forall)g(\(i=0:n-1,j=0:n-1\))f(c\(i,j,k\)) g(=)i(c\(i,j,k-1\))f(+)g(a\(i,k\))g(*)h(b\(k,j\))147 1046 y(enddo)75 1131 y fq(de)16 b(plus,)h(nous)f(sommes)f(dans)h(le)h (cas)f(fa)o(v)o(orable)f(o)q(\022)-24 b(u)16 b(l'assignation)h(unique)g (sur)f fk(c)g fq(p)q(eut)g(^)-21 b(etre)14 b(lev)o(\023)-21 b(ee)75 1187 y(facilemen)o(t.)15 b(la)f(seule)h(autre)f(d)o(\023)-21 b(e\014nition)15 b(faisan)o(t)e(r)o(\023)-21 b(ef)o(\023)g(erence)13 b(\022)-23 b(a)14 b(une)h(o)q(ccurrence)g(de)f fk(c\(i,j,k\))e fq(\023)-21 b(etan)o(t)75 1244 y(la)18 b(s)o(\023)-21 b(election)17 b fk(last)g fq(du)h(dernier)h(plan)f(de)g(la)f(dimension) i fm(k)g fq(nous)e(p)q(ouv)o(ons)h(tranformer)e(le)i(tableau)75 1300 y(tri-dimensionnel)23 b fk(c)c fq(en)h(en)g(tableau)g (bi-dimensionnel)j(et)c(supprimer)i(la)f(derni)o(\022)-21 b(ere)18 b(\023)-21 b(equation.)19 b(le)75 1357 y(probl)o(\022)-21 b(eme)14 b(se)g(p)q(ose)g(de)g(sa)o(v)o(oir)g(commen)o(t)f(doit)g(^)-21 b(etre)13 b(align)o(\023)-21 b(e)14 b(ce)g(tableau)g(bi-dimensionel)k (sur)c(le)g(cub)q(e)75 1413 y(de)k(pro)q(cesseurs)g(virtuels.)h(p)o (our)e(restituer)h(les)g(comm)o(unications)h(de)f(v)o(oisins)g(\022)-23 b(a)18 b(v)o(oisins)g(pr)o(\023)-21 b(esen)o(tes)75 1470 y(dans)17 b(la)g(v)o(ersion)g(\022)-23 b(a)16 b(assignation)h(unique,)g (utilis)o(\023)-21 b(ee)18 b(p)q(our)f(la)g(somme)f(des)h(pro)q(duits,) g(une)h(p)q(ossiblit)o(\023)-21 b(e)75 1526 y(est)13 b(de)g(placer)h(le)g(tableau)f fk(c)g fq(\022)-23 b(a)12 b(c)o(haque)i(it)o(\023)-21 b(eration)12 b(de)h(la)h(b)q(oucle)g fk(do)p fq(,)e(sur)h(le)h(plan)g(corresp)q(ondan)o(t)f(\022)-23 b(a)12 b(la)75 1583 y(v)m(aleur)h(de)f(l'indice)i fk(k)p fq(.)e(cet)f(alignemen)o(t)i(dynamique)g(du)f(tableau)g(s'exprimerait)g (alors)g(par)g fk(realign)75 1639 y(c\(i,j\))23 b(with)g(t\(i,j,k\))p fq(.)14 b(cep)q(endan)o(t,)i(le)h(co)q(^)-24 b(ut)15 b(en)h(temps)f(du)h(r)o(\023)-21 b(ealignemen)o(t)16 b(est)f(probablemen)o(t)75 1695 y(imp)q(ortan)o(t)h(et)h(il)g(sem)o (ble)h(qu'un)f(alignemen)o(t)g(statique)g(arbitraire)g(sur)f(l'un)h (des)g(plans)h(de)f(la)g(troi-)75 1752 y(si)o(\022)-21 b(eme)16 b(dimension)h(est)f(pr)o(\023)-21 b(ef)o(\023)g(erable.)14 b(nous)i(c)o(hoisissons)g(ainsi)h(d'aligner)g fk(c)e fq(sur)h(le)g(plan)h fk(k)p fq(=)p fm(n)11 b ff(\000)g fq(1,)k(et)75 1808 y(notre)g(traduction)g(est)g(\014nalemen)o(t)9 b(:)242 1893 y fk(real)23 b(a\(0:n-1,0:n-1\),)f(b\(0:n-1,0:n-1\),)g (c\(0:n-1,0:n-1\))75 1949 y(!hpf$)47 b(template)23 b (t\(0:n-1,0:n-1,0:n-1\))75 2006 y(!hpf$)47 b(align)23 b(a\(i,k\))g(with)h(t\(i,*,k\))75 2062 y(!hpf$)47 b(align)23 b(b\(k,j\))g(with)h(t\(*,j,k\))75 2119 y(!hpf$)47 b(align)23 b(c\(i,j\))g(with)h(t\(i,j,n-1\))242 2232 y(forall)f (\(i=0:n-1,j=0:n-1,k=0\))e(c\(i,j\))i(=)h(a\(i,k\))f(*)h(b\(k,j\))242 2288 y(do)g(k=1,n-1)337 2345 y(forall\(i=0:n-1,j=0:n-1\))d(c\(i,j\))i (=)h(c\(i,j\))f(+)h(a\(i,k\))f(*)h(b\(k,j\))242 2401 y(enddo)146 2486 y fq(ce)15 b(texte)g(de)h(programme)e(est)h(bien)i(s)q (^)-24 b(ur)15 b(b)q(eaucoup)h(plus)h(in)o(tuitif)f(que)g(la)g(v)o (ersion)f(utilisan)o(t)i(les)75 2542 y(c)o(hamps)e(plac)o(\023)-21 b(es.)p eop %%page: 107 109

107 108 bop 75 269 a fl(5.9.)29 b(envir)o(onnement)16 b(logiciel)g(a)o(utour)g(de)f fn(pei)541 b fq(107)75 397 y ft(5.9)66 b(en)n(vironnemen)n(t)25 b(logiciel)f(autour)f(de)g fs(pei)146 498 y fq(la)15 b(\014gure)h(5.7)e(pr)o(\023)-21 b(esen)o(te)15 b(les)h(outils)h(d)o(\023)-21 b(ej\022)e(a)14 b(d)o(\023)-21 b(ev)o(elopp)o(\023)g(es)15 b(ou)g(en)h(cours)g(de)g(d)o (\023)-21 b(ev)o(elopp)q(emen)o(t)16 b(\(traits)75 555 y(pleins\),)c(o)q(\022)-24 b(u)12 b(les)g(pro)s(jets)e(de)h(d)o(\023) -21 b(ev)o(elopp)q(emen)o(ts)12 b(\(traits)e(hac)o(h)o(ur)o(\023)-21 b(es\))10 b(autour)h(du)h(formalisme)f fn(pei)p fq(.)g(nous)75 611 y(a)o(v)o(ons)i(d)o(\023)-21 b(ej\022)e(a)13 b(pr)o(\023)-21 b(esen)o(t)o(\023)g(e)13 b(en)h(section)h(3.5)e(et)h(3.4,)f(le)i(mo)q (dule)g(de)f(transformation)f(des)g(\023)-21 b(enonc)o(\023)g(es)13 b fn(pei)p fq(,)h(et)75 668 y(celui)20 b(de)e(conception)h(graphique)g fn(vpei)p fq(.)e(le)h(mo)q(dule)h(d'in)o(terpr)o(\023)-21 b(etation)17 b(fonctionnelle)j(est)e(d)o(\023)-21 b(ecrit)75 724 y(dans)16 b([57)o(])g(et)f(implan)o(te)i(l'in)o(terpr)o(\023)-21 b(etation)16 b(fonctionnelle)i(des)e(c)o(hamps)g(de)g(donn)o(\023)-21 b(ees)16 b(telle)h(que)f(nous)75 781 y(l'a)o(v)o(ons)f(d)o(\023)-21 b(e\014nie)16 b(en)g(section)g(2.3.5.)d(la)j(traduction)f(du)h (programme)e fn(pei)i fq(en)f(un)h(co)q(de)g fn(caml)f fq(nous)75 837 y(p)q(ermet)20 b(indirectemen)o(t)h(d'ex)o(\023)-21 b(ecuter)19 b(le)h(programme)f fn(pei)p fq(,)g(et)g(ce)h(mo)q(dule)h(p) q(ourrait)e(^)-21 b(etre)18 b(in)o(t)o(\023)-21 b(egr)o(\023)g(e)75 894 y(dans)15 b(l'en)o(vironnemen)o(t)g(graphique)h(a\014n)f(de)g (visualiser)h(quelles)g(son)o(t,)e(et)g(o)q(\022)-24 b(u)15 b(son)o(t)f(les)h(v)m(aleurs)g(dans)75 950 y(les)h(c)o(hamps,)f (en)g(fonction)h(de)f(c)o(hamps)h(en)f(en)o(tr)o(\023)-21 b(ee.)213 2243 y @beginspecial @setspecial %%begindocument: logiciel.pstex /$f2psdict 200 dict def $f2psdict begin $f2psdict /mtrx matrix put /l {lineto} bind def /m {moveto} bind def /s {stroke} bind def /n {newpath} bind def /gs {gsave} bind def /gr {grestore} bind def /clp {closepath} bind def /graycol {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul setrgbcolor} bind def /col-1 {} def /col0 {0 0 0 setrgbcolor} bind def /col1 {0 0 1 setrgbcolor} bind def /col2 {0 1 0 setrgbcolor} bind def /col3 {0 1 1 setrgbcolor} bind def /col4 {1 0 0 setrgbcolor} bind def /col5 {1 0 1 setrgbcolor} bind def /col6 {1 1 0 setrgbcolor} bind def /col7 {1 1 1 setrgbcolor} bind def /col8 {.68 .85 .9 setrgbcolor} bind def /col9 {0 .39 0 setrgbcolor} bind def /col10 {.65 .17 .17 setrgbcolor} bind def /col11 {1 .51 0 setrgbcolor} bind def /col12 {.63 .13 .94 setrgbcolor} bind def /col13 {1 .75 .8 setrgbcolor} bind def /col14 {.7 .13 .13 setrgbcolor} bind def /col15 {1 .84 0 setrgbcolor} bind def /drawellipse {

/endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y translate xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix } def end /$f2psbegin {$f2psdict begin /$f2psenteredstate save def} def /$f2psend {$f2psenteredstate restore end} def $f2psbegin 0 setlinecap 0 setlinejoin -153.0 315.0 translate 0.900 -0.900 scale 0.500 setlinewidth % ellipse n 303 190 34 34 0 360 drawellipse gs col-1 s gr % ellipse n 220 316 34 34 0 360 drawellipse gs col-1 s gr % ellipse n 450 316 34 34 0 360 drawellipse gs col-1 s gr % ellipse n 534 224 34 34 0 360 drawellipse gs col-1 s gr % ellipse n 505 138 34 34 0 360 drawellipse gs col-1 s gr % ellipse n 444 66 34 34 0 360 drawellipse gs col-1 s gr % polyline n 258 261 m 258 223 l 178 223 l 178 261 l clp gs col-1 s gr % polyline n 373 333 m 373 295 l 292 295 l 292 333 l clp gs col-1 s gr % polyline n 433 159 m 433 125 l 352 125 l 352 159 l clp gs col-1 s gr % polyline n 433 138 m 471 138 l gs col-1 s gr n 463.000 136.000 m 471.000 138.000 l 463.000 140.000 l gs 2 setlinejoin gr % polyline n 318 159 m 352 138 l gs col-1 s gr n 344.143 140.502 m 352.000 138.000 l 346.245 143.906 l gs 2 setlinejoin gr % polyline n 373 312 m 416 312 l gs col-1 s gr n 408.000 310.000 m 416.000 312.000 l 408.000 314.000 l gs 2 setlinejoin gr % polyline n 254 312 m 292 312 l gs col-1 s gr n 284.000 310.000 m 292.000 312.000 l 284.000 314.000 l gs 2 setlinejoin gr % polyline n 216 261 m 216 282 l gs col-1 s gr n 218.000 274.000 m 216.000 282.000 l 214.000 274.000 l gs 2 setlinejoin gr % polyline n 267 189 m 220 223 l gs col-1 s gr n 227.654 219.931 m 220.000 223.000 l 225.310 216.691 l gs 2 setlinejoin

col-1 s

col-1 s

col-1 s

col-1 s

col-1 s

col-1 s

gr polyline 463 227 m 463 185 l 390 185 l 390 227 l clp gs col-1 s gr polyline 390 202 m 335 185 l gs col-1 s gr 342.053 189.273 m 335.000 185.000 l 343.234 185.452 l gs 2 setlinejoin col-1 s gr [4.000000] 0 setdash % polyline n 463 269 m 463 231 l 390 231 l 390 269 l clp gs col-1 s gr [] 0 setdash % polyline n 501 214 m 463 210 l gs col-1 s gr n 470.747 212.826 m 463.000 210.000 l 471.165 208.848 l gs 2 setlinejoin col-1 s gr [4.000000] 0 setdash % polyline n 463 248 m 501 231 l gs col-1 s gr [] 0 setdash n 492.881 232.441 m 501.000 231.000 l 494.514 236.093 l gs 2 setlinejoin col-1 s gr [4.000000] 0 setdash % polyline n 339 248 m 390 248 l gs col-1 s gr [] 0 setdash n 382.000 246.000 m 390.000 248.000 l 382.000 250.000 l gs 2 setlinejoin col-1 s gr % polyline n 305 223 m 305 240 l gs col-1 s gr n 307.000 232.000 m 305.000 240.000 l 303.000 232.000 l gs 2 setlinejoin col-1 s gr [4.000000] 0 setdash % polyline n 305 261 m 305 295 l gs col-1 s gr [] 0 setdash n 307.000 287.000 m 305.000 295.000 l 303.000 287.000 l gs 2 setlinejoin col-1 s gr % polyline n 339 261 m 339 240 l 288 240 l 288 261 l clp gs col-1 s gr % polyline n 267 142 m 267 117 l 169 117 l 169 142 l clp gs col-1 s gr % polyline n 368 83 m 368 49 l 287 49 l 287 83 l clp gs col-1 s gr % polyline n 304 154 m 304 84 l gs col-1 s gr n 302.000 92.000 m 304.000 84.000 l 306.000 92.000 l gs 2 setlinejoin col-1 s gr % polyline n 369 64 m 409 64 l gs col-1 s gr n 401.000 62.000 m 409.000 64.000 l 401.000 66.000 l gs 2 setlinejoin col-1 s gr % interpolated spline n 271 176 m 236.661 175.147 221.767 171.966 212 163 curveto 207.711 160.150 205.584 154.848 203 142 curveto gs col-1 s gr n 202.617 150.237 m 203.000 142.000 l 206.538 149.449 l gs 2 setlinejoin col-1 s gr % interpolated spline n 267 129 m 278.537 126.364 283.856 126.364 288 129 curveto 293.579 133.349 295.707 139.711 297 155 curveto % n % n n

gs col-1 s gr n 298.319 146.860 m 297.000 155.000 l 294.333 147.197 l gs 2 setlinejoin col-1 s gr [4.000000] 0 setdash % interpolated spline n 288 240 m 249.538 210.261 233.581 196.476 224 185 curveto 219.102 177.889 213.783 167.286 203 142 curveto gs col-1 s gr [] 0 setdash n 204.298 150.143 m 203.000 142.000 l 207.978 148.574 l gs 2 setlinejoin col-1 s gr $f2psend %%enddocument @endspecial 1203 2127 a fy(hpf)1203 2067 y(progs.)644 1688 y fa(pei)1506 1733 y fy(dessin)1506 1793 y fa(pei)1424 1497 y(caml)1424 1434 y fy(prog.)340 2067 y(prog.)340 2116 y fa(pei)310 2180 y fy(norm.)12 b(hpf)644 1625 y(enonc)o(\023)-20 b(e)914 1449 y(in)o(terpr)o(\023)g(etation)914 1497 y(fonctionnelle)262 1831 y(f)m(orme)12 b(normale)310 1876 y(hpf)1060 1861 y(t)m(raduction)1060 1910 y(graphique)1060 1688 y(in)o(terpr)o(\023)-20 b(etation)1060 1733 y(graphique)693 2150 y(hpf)228 1415 y(t)m(ransformations)674 1876 y(t)o(yp)q(eur)693 2086 y(t)m(raduction)1188 1209 y(l)1199 1204 y fa(a)1218 1209 y fy(t)1241 1221 y(e)1264 1209 y(x)-613 b(l)693 1204 y fa(a)712 1209 y fy(t)735 1221 y(e)758 1209 y(x)682 1171 y(t)m(raduction)1188 1134 y(source)475 2387 y fn(fig.)15 b fq(5.7)f(-)30 b fj(envir)n(onnement)15 b(lo)n(giciel)g(autour)j(de)e fn(pei)146 2486 y fq(les)j(d)o(\023)-21 b(ev)o(elopp)q(emen)o(ts)19 b(en)h(cours)f(sur)g(le)g(traducteur)g fk(pei2hpf)f fq(on)o(t)h(p)q (our)g(ob)s(jectif)g(imm)o(\023)-21 b(ediat)75 2542 y(d'in)o(t)o(\023)g (egrer)13 b(les)j(informations)e(rendues)h(par)g(le)g(con)o(tr^)-23 b(oleur)14 b(de)h(t)o(yp)q(e.)f(ce)h(con)o(tr^)-23 b(oleur)14 b(de)h(t)o(yp)q(e)g(inf)o(\022)-21 b(ere)p eop %%page: 108 110 108 109 bop 75 269 a fq(108)381 b fl(chapitre)16 b(5.)30 b fn(pei)15 b fl(et)g(les)g(langa)o(ges)g(d)o(a)l(t)l(a-p)l(arall)1735 257 y(\022)1729 269 y(eles)75 397 y fq(les)h(domaines)h(de)f(v)m (aleurs)h(et)e(de)h(r)o(\023)-21 b(ef)o(\023)g(erence)15 b(des)h(c)o(hamps)f(\022)-23 b(a)16 b(partir)f(des)h(d)o(\023)-21 b(e\014nitions)17 b(de)f(l')o(\023)-21 b(enonc)o(\023)g(e)15 b(et)75 453 y(v)o(\023)-21 b(eri\014e)12 b(que)h(le)f(programme)f(est)h (bien)h(t)o(yp)o(\023)-21 b(e,)11 b(c'est-\022)-23 b(a-dire)13 b(qu'aucune)f(d)o(\023)-21 b(e\014nition)13 b(n'est)f(en)g(con)o (tradic-)75 510 y(tion)g(a)o(v)o(ec)f(une)i(autre.)d(les)j(calculs)g (ensem)o(blistes)g(n)o(\023)-21 b(ecessaires)12 b(p)q(our)f(ce)i(t)o (yp)q(e)e(de)h(calcul)i(son)o(t)d(r)o(\023)-21 b(ealis)o(\023)g(es)75 566 y(\022)e(a)17 b(l'aide)i(de)g(la)f(librairie)i fn(omega)p fq([30)o(].)e(les)g(informations)g(retourn)o(\023)-21 b(ees)17 b(par)g(ce)h(mo)q(dule)h(devraien)o(t)75 623 y(p)q(ermettre)14 b(la)h(traduction)f(de)g(programmes)f(don)o(t)h(les)h (domaines)g(son)o(t)e(moins)i(simplistes)g(que)g(ceux)75 679 y(actuellemen)o(t)h(accept)o(\023)-21 b(es.)75 825 y ft(5.10)66 b(t)-6 b(ra)n(v)l(aux)24 b(relatifs)75 929 y fw(5.10.1)55 b(con)n(texte)146 1016 y fq(de)21 b(nom)o(breux)h(pro)s (jets)f(de)i(rec)o(herc)o(he)f(visen)o(t)g(\022)-23 b(a)22 b(pro)q(duire)h(du)g(co)q(de)f(parall)o(\022)-21 b(ele)23 b(\022)-23 b(a)21 b(partir)h(de)75 1072 y(sp)o(\023)-21 b(eci\014cations)16 b(plus)g(faciles)g(\022)-23 b(a)15 b(appr)o(\023)-21 b(ehender)16 b(par)e(l'utilisateur.)146

1129 y(la)d(v)o(oie)g(fo)q(calisan)o(t)h(le)g(plus)g(d'e\013orts)e(et)h (la)h(plus)g(am)o(bitieuse)g(est)f(naturellemen)o(t)i(la)e(compilation) 75 1186 y(des)i(programmes)f(s)o(\023)-21 b(equen)o(tiels)13 b(existan)o(ts)g(en)g(programmes)e(parall)o(\022)-21 b(eles,)13 b(a)o(v)o(ec)g(de)g(nom)o(breux)g(pro)s(jets)75 1242 y(comme)e(suif[1],)f(pips[28],)g(p)l(af[18)o(],)g(lo)q(op)o(o[15)o (],)g fj(etc)p fq(.)h(cep)q(endan)o(t,)g(les)h(compilateurs)g(de)f(ce)h (t)o(yp)q(e)75 1299 y(on)o(t)18 b(mon)o(tr)o(\023)-21 b(e)17 b(jusqu'\022)-23 b(a)18 b(pr)o(\023)-21 b(esen)o(t)18 b(des)h(limitations)h(de)f(deux)g(sortes.)f(la)h(premi)o(\022)-21 b(ere)18 b(est)h(la)g(limite)h(du)75 1355 y fj(mo)n(d)o(\022)-22 b(ele)12 b(p)n(olytop)n(e)p fq([36])e(et)i(concerne)g(tous)f(les)h(tra) o(v)m(aux)e(men)o(\023)-21 b(es)11 b(sur)g(les)h(tec)o(hniques)h(de)f (parall)o(\023)-21 b(elisation.)75 1412 y(la)14 b(deuxi)o(\022)-21 b(eme)15 b(est)e(sp)o(\023)-21 b(eci\014que)15 b(au)f(c)o(hoix)g (d'accepter)g(en)h(en)o(tr)o(\023)-21 b(ee)13 b(des)h(sp)o(\023)-21 b(eci\014cations)14 b(form)o(ul)o(\023)-21 b(ees)13 b(dans)75 1468 y(un)j(langage)f(s)o(\023)-21 b(equen)o(tiel)16 b(\(souv)o(en)o(t)e(f)l(ortran)g(77\))g(don)o(t)h(la)h(s)o(\023)-21 b(eman)o(tique)14 b(est)h(tr)o(\022)-21 b(es)14 b(compliqu)o(\023)-21 b(ee.)146 1525 y(av)o(ec)13 b(l'apparition)h(du)f(mo)q(d)o(\022)-21 b(ele)13 b(data-parall)o(\022)-21 b(ele)13 b(est)g(apparue)g(l'id)o (\023)-21 b(ee)14 b(de)f(scinder)h(la)f(compilation)75 1582 y(en)20 b(deux)g(phases)8 b(:)19 b(transformer)f(le)i(co)q(de)g(s) o(\023)-21 b(equen)o(tiel)20 b(en)g(co)q(de)g(data-parall)o(\022)-21 b(ele,)19 b(puis)h(compiler)h(le)75 1638 y(co)q(de)12 b(data-parall)o(\022)-21 b(ele)12 b(en)f(co)q(de)h(\022)-23 b(a)11 b(parall)o(\023)-21 b(elisme)13 b(de)f(con)o(tr^)-23 b(ole,)11 b(pro)q(c)o(he)g(du)h(mo)q(d)o(\022)-21 b(ele)12 b(d'ex)o(\023)-21 b(ecution)11 b(actuel)75 1694 y(des)i(mac)o(hines.)f (le)h(compilateur)g fl(bouclettes)p fq([6)q(])f(appartien)o(t)g(par)g (exemple)i(\022)-23 b(a)12 b(la)g(premi)o(\022)-21 b(ere)12 b(cat)o(\023)-21 b(egorie.)75 1751 y(dans)10 b(la)i(deuxi)o(\022)-21 b(eme)11 b(cat)o(\023)-21 b(egorie,)9 b(de)i(nom)o(breux)g(outils)h(on) o(t)d(\023)-21 b(et)o(\023)g(e)9 b(d)o(\023)-21 b(ev)o(elopp)o(\023)g (es,)10 b(tan)o(t)g(par)g(des)h(univ)o(ersit)o(\023)-21 b(es)75 1807 y(que)15 b(par)g(des)g(en)o(treprises)h(commerciales,)f (parmi)g(lesquels)i(pghpf)e(\(p)o(ortland)f(group\),)g(hpf)o(c[13)n(],) 75 1864 y(adaptor[7)o(],)g fj(etc)p fq(.)146 1921 y(un)f(autre)g(c)o (hoix)h(consiste)g(\022)-23 b(a)13 b(utiliser)i(comme)e(mo)o(y)o(en)f (de)i(sp)o(\023)-21 b(eci\014cation)14 b(un)g(langage)f(dot)o(\023)-21 b(e)12 b(d'une)75 1977 y(s)o(\023)-21 b(eman)o(tique)13 b(claire.)i(le)g(formalisme)f(des)f(\023)-21 b(equations)14 b(r)o(\023)-21 b(ecurren)o(tes)13 b(fait)h(partie)g(de)g(ce)h(t)o(yp)q (e)f(de)g(sp)o(\023)-21 b(eci-)75 2034 y(\014cation,)14 b(et)g(a)f(\023)-21 b(et)o(\023)g(e)13 b(c)o(hoisi)i(p)q(our)g(l'en)o (vironnemen)o(t)g(op)q(era[37])f(par)g(exemple.)h(d'autres)e(pro)s (jets)g(on)o(t)75 2090 y(adopt)o(\023)-21 b(e)15 b(ou)h(in)o(v)o(en)o (t)o(\023)-21 b(e)15 b(des)i(formalismes)f(p)q(ouv)m(an)o(t)g(b)o(\023) -21 b(en)o(\023)g(e\014cier)16 b(des)h(tec)o(hniques)g(d)o(\023)-21 b(ev)o(elopp)o(\023)g(ees)16 b(dans)g(le)75 2147 y(domaine)f(du)g(g)o (\023)-21 b(enie)15 b(logiciel.)h(dans)e(cette)h(optique,)g(plusieurs)h (v)o(oies)f(on)o(t)e(\023)-21 b(et)o(\023)g(e)13 b(explor)o(\023)-21 b(ees.)14 b(p)o(armi)g(les)75 2203 y(id)o(\023)-21 b(ees)12 b(plus)g(r)o(\023)-21 b(epandues,)11 b(on)h(trouv)o(e)f(les)h(pro)s (jets)f(visan)o(t)g(\022)-23 b(a)11 b(extraire)h(le)g(parall)o(\023)-21 b(elisme)13 b(de)f(sp)o(\023)-21 b(eci\014cations)75 2260 y(donn)o(\023)g(ees)11 b(sous)h(forme)f(fonctionnelle,)i(comme)f (dans)g fn(sisal)p fq([41)n(])f(par)h(exemple,)g(ou)g(d'enric)o(hir)h (un)f(lan-)75 2316 y(gage)f(de)h(t)o(yp)q(e)g(fonctionnel)h(a)o(v)o(ec)

e(des)h(ob)s(jets)f(parall)o(\022)-21 b(eles)12 b(comme)g(dans)g fn(nesl)p fq([3])f(ou)h(dp-hask)o(ell[25)o(].)146 2429 y(une)k(v)o(oie)h(in)o(term)o(\023)-21 b(ediaire)17 b(consiste)g(\022) -23 b(a)16 b(consid)o(\023)-21 b(erer)16 b(d'ab)q(ord)g(les)h(asp)q (ects)g(g)o(\023)-21 b(eom)o(\023)g(etriques)14 b(relatifs)75 2486 y(au)19 b(mo)q(d)o(\022)-21 b(ele)19 b(de)h(programmation)e (parall)o(\022)-21 b(ele,)20 b(\022)-23 b(a)19 b(d)o(\023)-21 b(e\014nir)19 b(des)h(op)o(\023)-21 b(erations)18 b(sur)h(ces)g(ob)s (jets.)f(c'est)h(le)75 2542 y(c)o(hoix)13 b(fait)g(dans)g(les)h (langages)f fn(alpha)p fq(,)g fn(cr)m(yst)m(al)g fq(ou)g fn(pei)p fq(.)f(p)o(ar)g(exemple,)i fn(alpha)f fq(est)g(un)h(langage)p eop %%page: 109 111 109 110 bop 75 269 a fl(5.10.)29 b(tra)-5 b(v)g(a)o(ux)15 b(rela)l(tifs)1113 b fq(109)75 397 y(fonctionnel)22 b(p)q(ermettan)o(t) e(de)g(sp)o(\023)-21 b(eci\014er)21 b(un)g(probl)o(\022)-21 b(eme)20 b(sous)h(la)f(forme)g(d')o(\023)-21 b(equations)20 b(r)o(\023)-21 b(ecurren)o(tes,)75 453 y(p)q(ortan)o(t)14 b(sur)h(des)h(v)m(ariables)g(repr)o(\023)-21 b(esen)o(tan)o(t)14 b(des)i(domaines)f(p)q(oly)o(\023)-21 b(edriques.)146 510 y(ces)10 b(trois)h(pro)s(jets)f(on)o(t)h(en)g(comm)o(un)g(d'a)o(v)o (oir)f(d)o(\023)-21 b(e\014ni)12 b(un)f(formalisme)g(autorisan)o(t)f (les)i(transforma-)75 567 y(tions)k(de)h(programmes.)e(ces)h (transformations)f(p)q(euv)o(en)o(t)h(mo)q(di\014er)h(notammen)o(t)f (les)h(informations)75 623 y(g)o(\023)-21 b(eom)o(\023)g(etriques)13 b(du)j(programme.)75 746 y fw(5.10.2)55 b(comparaison)18 b(a)n(v)n(ec)h fv(alpha)146 832 y fq(les)h(tra)o(v)m(aux)g(men)o(\023) -21 b(es)20 b(\022)-23 b(a)20 b(l'irisa)i(sur)f(le)g(langage)f fn(alpha)h fq(son)o(t)f(pro)q(c)o(hes)g(de)h(ceux)g(en)o(trepris)75 888 y(autour)15 b(de)g fn(pei)p fq(.)75 1009 y fo(le)j(langage)h fn(alpha)146 1096 y(alpha)i fq(est)g(un)h(langage)f(con\030)-20 b(cu[39])21 b(\022)-23 b(a)21 b(l'origine)h(p)q(our)g(la)f (programmation)f(d'arc)o(hitectures)75 1152 y(parall)o(\022)-21 b(eles)16 b(sync)o(hrones,)f(en)h(p)q(ermettan)o(t)f(d'exprimer)h(un)g (probl)o(\022)-21 b(eme)15 b(sous)g(la)h(forme)f(d'un)h(syst)o(\022)-21 b(eme)75 1208 y(d')o(\023)g(equations)14 b(r)o(\023)-21 b(ecurren)o(tes)14 b(a\016nes)h(sur)g(des)h(domaines)f(p)q(oly)o(\023) -21 b(edriques.)16 b(un)f(programme)f fn(alpha)i fq(est)75 1265 y(constitu)o(\023)-21 b(e)21 b(de)h(v)m(ariables)h(en)f(en)o(tr)o (\023)-21 b(ee)20 b(et)i(en)g(sortie,)f(et)g(d'un)h(syst)o(\022)-21 b(eme)21 b(d')o(\023)-21 b(equations)20 b(de)i(la)g(forme)75 1321 y fm(x)f fq(=)d fm(exp)p fq(,)g(o)q(\022)-24 b(u)18 b fm(x)k fq(est)c(une)h(v)m(ariable)h(d)o(\023)-21 b(eclar)o(\023)g(ee) 17 b(sur)i(un)f(domaine)h(p)q(oly)o(\023)-21 b(edrique)20 b fm(d)q(om)p fq(\()p fm(x)t fq(\),)c(app)q(el)o(\023)-21 b(e)75 1378 y(domaine)16 b(spatial,)f(et)g fm(exp)g fq(est)g(une)h (fonction)g(d)o(\023)-21 b(e\014nie)16 b(sur)f fm(d)q(om)p fq(\()p fm(x)t fq(\).)146 1434 y(les)h(exp)q(essions)h(son)o(t)d(form)o (\023)-21 b(ees)15 b(de)h(v)m(ariables)h(et)e(d')p fj(op)o(\023)-22 b(er)n(ateurs)p fq(.)16 b(les)g(op)o(\023)-21 b(erateurs)14 b(son)o(t)h(de)h(deux)75 1491 y(sortes)7 b(:)143 1585 y({)23 b(les)17 b(op)o(\023)-21 b(erateurs)15 b(immmobiles)j(g)o(\023) -21 b(en)o(\023)g(eralisen)o(t)15 b(la)i(notion)g(usuelle)i(d'op)o (\023)-21 b(erateur)15 b(aux)h(domaines)189 1642 y(spatiaux.)g(ils)h(p) q(ermetten)o(t)g(l'application)h(d'op)o(\023)-21 b(erateurs)15 b(arithm)o(\023)-21 b(etiques)17 b(ou)f(logiques)i(\022)-23 b(a)16 b(une)189 1698 y(collection)g(de)e(v)m(aleurs.)h(l'op)o(\023)-21 b(erateur)13 b(immobile)j(est)e(sem)o(blable)h(\022)-23 b(a)14 b(l'op)o(\023)-21 b(eration)13 b(fonctionnelle)189 1755 y(de)i fn(pei)p fq(.)143 1849 y({)23 b(les)16 b(op)o(\023)-21

b(erateurs)13 b(spatiaux)8 b(:)243 1944 y({)23 b(l')p fo(op)o(\023)-25 b(erateur)24 b(de)f(restriction)f fq(p)q(ermet)f(de)g (restreindre)h(le)f(domaine)h(de)f(d)o(\023)-21 b(e\014nition)289 2000 y(d'une)16 b(expression.)g(le)g(domaine)g(de)g(l'expression)g fm(e)i fq(d)o(\023)-21 b(e\014nie)16 b(par)f fm(e)g fq(=)f fm(d)1610 1984 y fx(0)1634 2000 y fq(:)f fm(x)19 b fq(\()p fm(x)f fq(est)289 2057 y(restrein)o(te)d(au)g(domaine)h fm(d)774 2040 y fx(0)785 2057 y fq(\))f(est)g fm(d)q(om)p fq(\()p fm(e)s fq(\))c(=)i fm(d)1161 2040 y fx(0)1183 2057 y ff(\\)d fm(d)q(om)p fq(\()p fm(x)t fq(\).)243 2130 y({)23 b(l')p fo(op)o(\023)-25 b(erateur)17 b(case)p fq(,)e(g)o(\023)-21 b(en)o(\023)g(eralemen)o(t)13 b(utilis)o(\023)-21 b(e)16 b(en)f(conjonction)g(a)o(v)o(ec)g(l'op)o(\023)-21 b(erateur)13 b(de)j(res-)289 2187 y(triction,)j(p)q(ermet)h(de)g(d)o (\023)-21 b(e\014nir)19 b(di\013)o(\023)-21 b(eremmen)o(t)19 b(une)h(v)m(ariables)h(sur)e(des)h(sous-domaines)289 2243 y(disjoin)o(ts.)15 b(une)g(expression)g fm(e)i fq(d)o(\023)-21 b(e\014nie)15 b(par)g(cas)f(est)h(not)o(\023)-21 b(ee)13 b fm(e)k fq(=)e fo(case)g fm(exp)1613 2250 y fg(1)1639 2243 y fq(;)f fm(:)8 b(:)g(:)e fq(;)14 b fm(exp)1824 2250 y fw(n)289 2299 y fo(esac)p fq(;)h(et)g fm(d)q(om)p fq(\()p fm(e)s fq(\))c(=)i fm(d)q(om)p fq(\()p fm(exp)885 2306 y fg(1)903 2299 y fq(\))d ff([)g fm(:)e(:)g(:)g ff([)j fm(d)q(om)p fq(\()p fm(exp)1264 2306 y fw(n)1286 2299 y fq(\).)243 2373 y({)23 b(l')p fo(op)o(\023)-25 b(erateur)19 b(de)g(d)o(\023)-25 b(ep)q(endance)18 b fq(exprime)f(une)g(fonction)g(en)o(tre)g(domaines)g(spatiaux.)289 2429 y(l'expression)f fm(e)s(:)p fq(\()p fm(dep)p fq(\))c(d)o(\023)-21 b(enote)15 b(la)g(comp)q(osition)h(de)f fm(e)j fq(et)c fm(dep)p fq(,)h(o)q(\022)-24 b(u)15 b fm(dep)p fq(,)f(app)q(el)o(\023) -21 b(ee)16 b fj(fonc-)289 2486 y(tion)i(de)g(d)o(\023)-22 b(ep)n(endanc)n(e)p fq(,)16 b(est)h(une)h(fonction)g(a\016ne)f(don)o(t) g(l'image)h(est)f(le)h(domaine)g(de)g fm(e)s fq(.)289 2542 y(cette)d(d)o(\023)-21 b(ep)q(endance)16 b(p)q(eut)h(aussi)f (s'exprimer)f(\022)-23 b(a)16 b(l'aide)g(d'une)g(notation)f(\023)-21 b(equiv)m(alen)o(te)16 b(de)p eop %%page: 110 112 110 111 bop 75 269 a fq(110)381 b fl(chapitre)16 b(5.)30 b fn(pei)15 b fl(et)g(les)g(langa)o(ges)g(d)o(a)l(t)l(a-p)l(arall)1735 257 y(\022)1729 269 y(eles)289 397 y fq(t)o(yp)q(e)21 b(tableau)8 b(:)21 b(ainsi)i(les)f(expressions)h fm(e)1051 380 y fx(0)1085 397 y fq(=)g fm(e)s(:)p fq(\()p fm(z)h ff(!)g fm(f)5 b fq(\()p fm(z)r fq(\)\))21 b(et)g fm(e)1546 380 y fx(0)1557 397 y fq([)p fm(z)r fq(])h(=)i fm(e)s fq([)p fm(f)5 b fq(\()p fm(z)r fq(\)],)289 453 y fm(z)25 b ff(2)e fm(d)q(om)p fq(\()p fm(f)5 b fq(\),)20 b(son)o(t)f(\023)-21 b(equiv)m(alen)o(tes.)22 b(l'op)o(\023)-21 b(erateur)20 b(de)i(d)o(\023)-21 b(ep)q(endance)22 b(est)f(sem)o(blable)i(\022)-23 b(a)289 510 y(l'op)o(\023)i(eration)14 b(g)o(\023)-21 b(eom)o(\023)g(etrique)13 b(de)j fn(pei)p fq(.)243 585 y({)23 b(l')p fo(op)o(\023)-25 b(erateur)19 b(de)h(r)o(\023)-25 b(eduction)18 b fq(est)f(sem)o(blable)h(\022)-23 b(a)17 b(la)g(r)o(\023)-21 b(eduction)17 b(g)o(\023)-21 b(eom)o(\023)g (etrique)16 b(de)h fn(pei)p fq(.)289 641 y(etan)o(t)i(donn)o(\023)-21 b(e)19 b(une)i(expression)f fm(e)j fq(et)c fm(f)25 b fq(une)c(fonction)f(a\016ne)g(d)o(\023)-21 b(e\014nie)21 b(sur)f fm(d)q(om)p fq(\()p fm(e)s fq(\),)289 698 y(l'expression)f fo(reduce)p fq(\()p ff(\010)p fm(;)8 b(f)r(;)g(e)s fq(\))16 b(a)j(p)q(our)f(v)m(aleur)i(au)e(p)q(oin)o(t)h fm(z)r fq(,)g fm(z)h ff(2)e fm(img)r fq(\()p fm(f)5 b fq(\),)17

b(la)i(v)m(aleur)289 754 y ff(\010)324 761 y fw(z)341 753 y fm(0)352 761 y fx(2)p fw(d)q(om)p fg(\()p fw(e)r fg(\))p fx(j)p fw(f)s fg(\()p fw(z)558 753 y fm(0)571 761 y fg(\)=)p fw(z)629 754 y fm(e)663 761 y fw(z)680 753 y fm(0)692 754 y fq(,)c(o)q(\022)-24 b(u)15 b fm(e)817 761 y fw(z)834 753 y fm(0)862 754 y fq(d)o(\023)-21 b(enote)15 b(la)g(v)m(aleur)i(de)e fm(e)j fq(au)d(p)q(oin)o(t)g fm(z)1511 738 y fx(0)1523 754 y fq(.)143 852 y({)23 b(t)l (ransformations.)14 b(les)i(transformations)e(du)i(langage)f fn(alpha)h fq(s'exprimen)o(t)g(sous)f(la)h(forme)189 909 y(de)h(r)o(\022)-21 b(egles)17 b(de)g(r)o(\023)-21 b(e)o(\023)g(ecritures)16 b(du)i(programme.)d(p)o(armi)i(les)h(r)o (\022)-21 b(egles)16 b(de)i(transformation)e(les)i(plus)189 965 y(utilis)o(\023)-21 b(ees,)18 b(on)g(trouv)o(e)f(le)i(c)o(hangemen) o(t)f(de)g(base.)f(un)i(c)o(hangemen)o(t)e(de)i(base)f fm(f)24 b fq(sur)18 b(une)g(v)m(a-)189 1022 y(riable)d fm(a)g fq(d)o(\023)-21 b(e\014nie)15 b(sur)f fm(d)q(om)p fq(\()p fm(a)p fq(\))f(est)h(p)q(ossible)j(si)d(il)i(existe)f(une)g (fonction)f fm(g)g fq(in)o(v)o(erse)h(de)g fm(f)21 b fq(sur)189 1078 y fm(d)q(om)p fq(\()p fm(a)p fq(\).)14 b(la)h(r)o(\023)-21 b(e)o(\023)g(ecriture)14 b(du)i(programme)e(se)h (fait)g(de)h(la)f(mani)o(\022)-21 b(ere)15 b(suiv)m(an)o(te)8 b(:)p 189 1161 577 2 v 188 1218 2 57 v 214 1201 a fm(a)f fq(:)91 b fm(d)q(om)p fq(\()p fm(a)p fq(\))p 765 1218 v 188 1274 v 214 1257 a fk(let)p 765 1274 v 188 1330 v 359 1313 a(a)24 b(=)f(...)h(a)f(...;)p 765 1330 v 188 1387 v 359 1370 a(...)g(=)h(...)f(a)h(...;)p 765 1387 v 188 1443 v 214 1426 a(tel;)p 765 1443 v 189 1445 577 2 v 841 1314 a ff(!)p 963 1161 696 2 v 962 1218 2 57 v 987 1201 a fm(a)8 b fq(:)91 b fm(d)q(om)p fq(\()p fm(a)p fq(\))p fm(:f)p 1658 1218 v 962 1274 v 987 1257 a fk(let)p 1658 1274 v 962 1330 v 1133 1313 a(a)23 b(=)h(\(...)f(a.)p fm(f)31 b fk(...\).)p fm(g)p fk(;)p 1658 1330 v 962 1387 v 1133 1370 a(...)23 b(=)h(...)f(a.)p fm(f)30 b fk(...;)p 1658 1387 v 962 1443 v 987 1426 a(tel;)p 1658 1443 v 963 1445 696 2 v 75 1550 a fo(di\013)o(\023)-25 b(erences)17 b(en)o(tre)g fn(pei)g fo(et)h fn(alpha)146 1638 y fq(les)c(programmes)f fn(alpha)h fq(son)o(t)g(fortemen)o(t)f(t)o(yp)o(\023)-21 b(es,)12 b(c)o(haque)i(v)m(ariable)h(\023)-21 b(etan)o(t)12 b(explicitemen)o(t)k(d)o(\023)-21 b(e-)75 1694 y(clar)o(\023)g(ees)11 b(sur)h(un)h(domaine)f(\()o(\023)-21 b(ev)o(en)o(tuellemen)o(t)12 b(param)o(\023)-21 b(etr)o(\023)g(e\).)8 b(nous)k(a)o(v)o(ons)f(vu)h (qu'en)g fn(pei)g fq(les)g(domaines)75 1751 y(de)i(v)m(aleurs)g(ou)g (de)g(r)o(\023)-21 b(ef)o(\023)g(erence)12 b(des)i(c)o(hamps)f(de)h (donn)o(\023)-21 b(es)13 b(p)q(ouv)m(aien)o(t)h(^)-21 b(etre)12 b(non-b)q(orn)o(\023)-21 b(es.)13 b(nous)h(laissons)75 1807 y(au)j(con)o(tr^)-23 b(oleur)18 b(de)f(t)o(yp)q(e)h(la)f(c)o (harge)g(d'inf)o(\023)-21 b(erer)17 b(les)h(informations)g(manquan)o (tes)f(sur)g(ces)g(domaines,)75 1864 y(et)e(de)h(v)o(\023)-21 b(eri\014er)15 b(leurs)h(v)m(alidit)o(\023)-21 b(es.)146 1978 y(outre)17 b(les)g(limites)i(sur)e(la)g(forme)f(des)i(domaines)f (et)g(les)h(fonctions)f(de)g(d)o(\023)-21 b(ep)q(endances,)18 b(la)f(di\013)o(\023)-21 b(e-)75 2034 y(rence)14 b(ma)s(jeure)e(en)o (tre)h(ces)g(deux)h(langages)f(son)o(t)f(les)i(con)o(train)o(tes)e(imp) q(os)o(\023)-21 b(ees)13 b(p)q(our)g(sp)o(\023)-21 b(eci\014er)14 b(l')o(\023)-21 b(egalit)o(\023)g(e)75 2091 y(de)17 b(deux)h (expressions.)f(en)g fn(pei)p fq(,)g(les)h(con)o(train)o(tes)e(son)o(t) g(pro)q(c)o(hes)i(de)f(celles)i(des)e(langages)g(\022)-23 b(a)16 b(paral-)75 2147 y(l)o(\023)-21 b(elisme)16 b(de)g(donn)o(\023) -21 b(ees)14 b(don)o(t)h(la)g(s)o(\023)-21 b(eman)o(tique)15

b(des)g(indices)i(repr)o(\023)-21 b(esen)o(te)14 b(des)i(pro)q (cesseurs)f(virtuels.)h(on)75 2204 y(retrouv)o(e)h(par)f(exemple)j(la)e (notion)h(de)f(conformit)o(\023)-21 b(e)16 b(pr)o(\023)-21 b(esen)o(te)17 b(dans)g(ces)h(langages)7 b(:)17 b(une)h(op)o(\023)-21 b(eration)75 2260 y(fonctionnelle)15 b(o)q(\022)-24 b(u)14 b(g)o(\023)-21 b(eom)o(\023)g(etrique)11 b(en)j fn(pei)f fq(ne)g(p)q(eut)g(^)-21 b(etre)12 b(appliqu)o(\023)-21 b(ee)14 b(que)g(sur)f(des)h(c)o(hamps)f(d)o(\023)-21 b(e\014nis)14 b(sur)75 2316 y(m)o(^)-21 b(eme)11 b(espace)i(et)g(don)o (t)f(un)g(des)h(domaines)g(de)g(r)o(\023)-21 b(ef)o(\023)g(erence)11 b(inclut)j(ceux)f(des)g(autres.)e(cette)h(con)o(train)o(te)75 2373 y(oblige)i(le)g(programmeur)f(\022)-23 b(a)12 b(aligner)j(les)f(c) o(hamps)f(du)g(programme)g(\022)-23 b(a)12 b(l'aide)j(de)e(l'op)o(\023) -21 b(eration)13 b(de)g(c)o(han-)75 2429 y(gemen)o(t)19 b(de)h(base,)f(qui)h(est)f(une)h(op)o(\023)-21 b(eration)18 b(\022)-23 b(a)19 b(part)g(en)o(ti)o(\022)-21 b(ere)19 b(du)h(langage)f fn(pei)p fq(.)g(les)h(informations)75 2486 y(d'alignemen)o(ts)c(son)o(t)f(donc)h(donn)o(\023)-21 b(ees)16 b(d)o(\022)-21 b(es)15 b(la)h(phase)g(initiale)i(de)e (conception.)g(les)g(transformations)75 2542 y(donnan)o(t)c(des)g (programmes)f(fortemen)o(t)f(\023)-21 b(equiv)m(alen)o(ts)13 b(se)f(fon)o(t)f(\023)-21 b(egalemen)o(t)11 b(par)h(c)o(hangemen)o(t)f (de)i(base.)p eop %%page: 111 113 111 112 bop 75 269 a fl(5.10.)29 b(tra)-5 b(v)g(a)o(ux)15 b(rela)l(tifs)1113 b fq(111)75 397 y(cette)18 b(op)o(\023)-21 b(eration)17 b(\023)-21 b(etan)o(t)17 b(la)i(seule)g(\022)-23 b(a)19 b(mo)q(di\014er)g(la)g(fonction)g fm(\033)h fq(d'un)f(c)o(hamp)g (de)g(donn)o(\023)-21 b(ees,)18 b(qui)h(ex-)75 453 y(prime)14 b(la)f(fa\030)-20 b(con)13 b(don)o(t)g(les)h(v)m(aleurs)g(seron)o(t)f (plac)o(\023)-21 b(ees)13 b(en)h(\014n)f(de)h(compte)f(sur)g(les)h(pro) q(cesseurs)g(virtuels,)75 510 y(les)j(alignemen)o(ts)g(sp)o(\023)-21 b(eci\014)o(\023)g(es)16 b(dans)g(l')o(\023)-21 b(enonc)o(\023)g(e)15 b(original)j(son)o(t)d(conserv)o(\023)-21 b(es)16 b(tout)f(au)h(long)h (de)f(ce)h(t)o(yp)q(e)f(de)75 566 y(transformation.)e(en)j fn(alpha)p fq(,)f(par)g(con)o(tre)g(aucune)h(con)o(train)o(te)f(de)g (ce)h(t)o(yp)q(e)f(n'est)g(imp)q(os)o(\023)-21 b(ee)7 b(:)16 b(l'ali-)75 623 y(gnemen)o(t)i(est)h(l')o(\023)-21 b(etap)q(e)18 b(ultime)h(de)g(transformation,)e(et)i(consiste)g(\022) -23 b(a)18 b(d)o(\023)-21 b(ecider)19 b(que)g(certains)g(indices)75 679 y(repr)o(\023)-21 b(esen)o(ten)o(t)14 b(les)i(dimensions)h (spatiales)f(de)f(l'arc)o(hitecture)h(virtuelle.)75 866 y fo(d)o(\023)-25 b(ev)o(elopp)q(emen)o(ts)146 956 y fq(une)19 b(des)h(directions)g(de)g(rec)o(herc)o(he)f(comm)o(une)h (\022)-23 b(a)19 b(ces)g(deux)h(langages,)e(est)h(la)h(traduction)f(de) 75 1012 y(programmes)10 b(exprim)o(\023)-21 b(es)10 b(dans)h(ces)g (formalismes,)g(v)o(ers)f(les)h(principaux)i(mo)q(d)o(\022)-21 b(eles)11 b(de)g(programmation)75 1069 y(existan)o(ts.)146 1127 y(un)i(traducteur)h(quali\014)o(\023)-21 b(e)14 b(de)g(na)-5 b(\177)-18 b(\020f)14 b([61)o(])f(a)f(\023)-21 b(et)o(\023)g(e)12 b(con\030)-20 b(cu)14 b(p)q(our)f(\023)-21 b(ev)m(aluer)14 b(les)g(v)m(ariables)h(r)o(\023)-21 b(esultats)12 b(d'un)75 1184 y(programme)19 b fn(alpha)p fq(.)g(les)i(programmes)d fn(alpha)i fq(p)q(euv)o(en)o(t)g(^)-21 b(etre)18 b(vus)i(comme)g(des)g (programmes)75 1240 y(fonctionnels,)g(et)e(l')o(\023)-21 b(ev)m(aluation)19 b(des)g(di\013)o(\023)-21 b(eren)o(tes)18 b(v)m(aleurs)i(d'une)f(v)m(ariable)h(p)q(eut)g(se)f(faire)f(selon)i (les)75 1297 y(d)o(\023)-21 b(ep)q(endances)20 b(causales)f(en)o(tre)g (les)h(v)m(aleurs)g(des)f(v)m(ariables.)h(ce)f(princip)q(e)j(est)c(le)i (m)o(^)-21 b(eme)18 b(que)i(celui)75 1353 y(implan)o(t)o(\023)-21

b(e)21 b(dans)g(le)g(mo)q(dule)h(d'in)o(terpr)o(\023)-21 b(etation)20 b(fonctionnelle)j(de)e fn(pei)p fq(,)f(o)q(\022)-24 b(u)21 b(c)o(hacune)h(des)f(v)m(aleurs)75 1409 y(d'un)16 b(c)o(hamp)f(de)g(sortie)g(est)g(une)h(fonction)g(des)f(v)m(aleurs)h (de)g(c)o(hamps)f(en)g(en)o(tr)o(\023)-21 b(ee.)14 b(une)i (optimisation)75 1466 y(r)o(\023)-21 b(ealis)o(\023)g(ee)15 b(est)h(la)g(m)o(\023)-21 b(emorisation)16 b(des)g(v)m(aleurs)h(d)o (\023)-21 b(ej\022)e(a)15 b(calcul)o(\023)-21 b(ees)17 b(a\014n)f(d')o(\023)-21 b(eviter)16 b(les)g(r)o(\023)-21 b(e-)o(\023)g(ev)m(aluations.)15 b(un)75 1522 y(autre)e(probl)o(\022) -21 b(eme)12 b(rencon)o(tr)o(\023)-21 b(e)12 b(est)h(le)h(parcours,)e (au)h(mo)o(y)o(en)f(d'un)h(nid)h(de)g(b)q(oucles,)g(du)f(domaine)h(p)q (oly-)74 1579 y(\022)-21 b(edrique)16 b(d'une)g(v)m(ariable)h(r)o(\023) -21 b(esultat)15 b(p)q(our)g(demander)i(l')o(\023)-21 b(ev)m(aluation)16 b(des)g(v)m(aleurs)g(plac)o(\023)-21 b(ees)16 b(en)g(c)o(hacun)75 1635 y(des)i(p)q(oin)o(ts)h(en)o(tiers)f (du)g(p)q(oly)o(\022)-21 b(edre.)18 b(dans)f([50],)g(il)i(est)e(prop)q (os)o(\023)-21 b(e)17 b(un)i(autre)e(ordonnancemen)o(t)h(p)q(our)75 1692 y(l'ex)o(\023)-21 b(ecution)13 b(du)g(programme)f(s)o(\023)-21 b(equen)o(tiel,)13 b(que)g(celui)i(induit)f(par)e(les)i(d)o(\023)-21 b(ep)q(endances)13 b(causales.)g(l'id)o(\023)-21 b(ee)75 1748 y(est)15 b(d'utiliser)i(les)f(tec)o(hniques)h(d'ordonnancemen)o(t) e(et)g(de)h(placemen)o(t)g(utilis)o(\023)-21 b(ees)17 b(en)e(parall)o(\023)-21 b(elisation)75 1805 y(automatique.)16 b(l'ordonnancemen)o(t)g(fournit)g(un)h(ordre)f(d')o(\023)-21 b(ev)m(aluation)17 b(des)f(v)m(aleurs)h(coh)o(\023)-21 b(eren)o(t,)15 b(tout)75 1861 y(en)g(\023)-21 b(evitan)o(t)14 b(les)i(c)o(hangemen)o(ts)f(de)h(con)o(texte)f(co)q(^)-24 b(uteux)16 b(qu'implique)i(l')o(\023)-21 b(ev)m(aluation)16 b(fonctionnelle)h(du)75 1918 y(traducteur)d(na)-5 b(\177)-18 b(\020f.)14 b(notons)f(que)h(le)h(sc)o(h)o(\023)-21 b(ema)13 b(de)h(traduction)h(pro)q(c)o(\022)-21 b(ede,)13 b(de)h(mani)o(\022)-21 b(ere)14 b(analogue)g(\022)-23 b(a)14 b(celui)75 1974 y(exp)q(os)o(\023)-21 b(e)18 b(dans)g(le)h(c)o(hapitre)g(pr)o(\023)-21 b(ec)o(\023)g(eden)o(t,)17 b(par)h(des)g(mises)h(sous)f(formes)g (normales)g(des)h(programmes)75 2030 y fn(alpha)d fq(par)f (l'application)i(con\015uen)o(te)f(de)f(r)o(\022)-21 b(egles)15 b(de)g(r)o(\023)-21 b(e)o(\023)g(ecriture.)146 2145 y(la)23 b(pr)o(\023)-21 b(ec)o(\023)g(eden)o(te)23 b(m)o(\023)-21 b(etho)q(de)23 b(est)g(\023)-21 b(etendue)24 b([49)o(])f(p)q(our)h(la)g(g)o(\023)-21 b(en)o(\023)g(eration)22 b(de)i(programmes)f(data-)75 2202 y(parall)o(\022)-21 b(eles)21 b(imp)o(\023)-21 b(eratifs.)19 b(le)i(m)o(^)-21 b(eme)19 b(princip)q(e)k(d'ordonnancemen)o(t)d(est)g(conserv)o(\023)-21 b(e.)19 b(p)o(ar)h(comparai-)75 2258 y(son,)15 b(la)h(m)o(\023)-21 b(etho)q(de)15 b(exp)q(os)o(\023)-21 b(ee)16 b(p)q(our)g(notre)f (traducteur)h(utilise)h(un)g(ordonnancemen)o(t)e(h)o(ybride)9 b(:)15 b(nous)75 2315 y(utilisons)j(l'ordre)f(induit)h(des)f(d)o(\023) -21 b(ep)q(endances)18 b(causales)f(p)q(our)g(les)f(\023)-21 b(equations)16 b(simples,)i(et)e(nous)h(cal-)75 2371 y(culons)j(un)f(cadencemen)o(t)h(p)q(our)f(les)g(d)o(\023)-21 b(e\014nitions)20 b(r)o(\023)-21 b(ecursiv)o(es)18 b(quand)i(aucune)f (dimension)i(ne)e(p)q(eut)75 2427 y(repr)o(\023)-21 b(esen)o(ter)14 b(le)i(temps)f(de)h(mani)o(\022)-21 b(ere)14 b(\023)-21 b(eviden)o(te.)146 2486 y(un)16 b(probl)o(\022)-21 b(eme)16 b(suppl)o(\023)-21 b(emen)o(taire)17 b(est)f(l'alignemen)o(t)h(des)g (donn)o(\023)-21 b(ees)16 b(sur)g(la)h(grille)h(de)e(pro)q(cesseurs)75 2542 y(virtuels,)d(de)h(fa\030)-20 b(con)12 b(\022)-23 b(a)13 b(minimiser)h(le)g(co)q(^)-24 b(ut)12 b(des)i(comm)o (unications.)f(il)g(est)g(par)f(cons)o(\023)-21 b(equen)o(t)13

b(n)o(\023)-21 b(ecessaire)p eop %%page: 112 114 112 113 bop 75 269 a fq(112)381 b fl(chapitre)16 b(5.)30 b fn(pei)15 b fl(et)g(les)g(langa)o(ges)g(d)o(a)l(t)l(a-p)l(arall)1735 257 y(\022)1729 269 y(eles)75 397 y fq(de)23 b(trouv)o(er)f(un)h(\\b)q (on")f(c)o(hangemen)o(t)h(de)g(base)f(p)q(our)h(l'alignemen)o(t)h(des)f (v)m(ariables.)g(a)g(la)g(di\013)o(\023)-21 b(e-)75 453 y(rence)20 b(d'un)h(programme)d fn(alpha)p fq(,)i(un)g(programme)f fn(pei)h fq(comp)q(orte)f(les)i(informations)e(d'aligne-)75 510 y(men)o(t)d(des)g(c)o(hamps.)f(ce)h(son)o(t)f(ces)h(alignemen)o (ts,)g(rep)o(\023)-21 b(erables)16 b(par)g(l'application)i(d'un)e(c)o (hangemen)o(t)75 566 y(de)c(base,)f(don)o(t)f(nous)i(nous)f(serv)o(ons) g(dans)g(la)h(traduction)f(des)h(programmes)e fn(pei)h fq(en)g(hpf.)g(l'optique)75 623 y(d')p fn(alpha)k fq(p)q(eut)g(s'a)o(v) o(\023)-21 b(erer)12 b(tr)o(\022)-21 b(es)13 b(in)o(t)o(\023)-21 b(eressan)o(te)14 b(d)o(\022)-21 b(es)13 b(lors)i(que)g(des)g(outils)g (de)g(placemen)o(t)g(automatique)75 679 y(seraien)o(t)h(e\016caces.)g (dans)g(ces)g(conditions,)h(on)f(p)q(ourrait)g(cac)o(her)g(la)h(phase)f (d'alignemen)o(t)h(\022)-23 b(a)15 b(l'utili-)75 736 y(sateur.)i(cep)q(endan)o(t,)i(nous)f(a)o(v)o(ons)g(d)o(\023)-21 b(ej\022)e(a)17 b(soulign)o(\023)-21 b(e)18 b(la)h(di\016cult)o(\023) -21 b(e)19 b(du)g(probl)o(\022)-21 b(eme)7 b(:)18 b(darte)f(et)h(rob)q (ert)75 792 y([14)o(])d(on)o(t)g(notammen)o(t)f(mon)o(tr)o(\023)-21 b(e)14 b(que)h(le)i(probl)o(\022)-21 b(eme)15 b(de)h(l'alignemen)o(t)g (sur)f(une)h(grille)h(de)f(pro)q(cesseurs)75 849 y(virtuels,)i(des)g (calculs)h(et)e(des)h(comm)o(unications)g(de)g(mani)o(\022)-21 b(ere)18 b(\022)-23 b(a)17 b(minimiser)i(les)f(comm)o(unications,)75 905 y(est)f(np-complet.)i(ce)e(probl)o(\022)-21 b(eme)18 b(n)o(\023)-21 b(ecessite)18 b(donc)g(de)g(recourir)g(\022)-23 b(a)17 b(des)i(heuristiques,)g(qui)f(p)q(euv)o(en)o(t)74 962 y(^)-21 b(etre)14 b(fond)o(\023)-21 b(ees)15 b(sur)g(le)h(v)o (olume)f(des)h(comm)o(unications)g(induites)h(par)e(un)g(alignemen)o(t) h([51)o(].)p eop %%page: 113 115 113 114 bop 1778 269 a fq(113)75 716 y fi(chapitre)32 b(6)75 932 y fp(conclusion)146 1163 y fq(il)16 b(est)g(classique)h(de)f (consid)o(\023)-21 b(erer)16 b(qu'un)g(programme)f(est)g(une)i (fonction)f(sur)g(des)g(ob)s(jets)f(t)o(yp)o(\023)-21 b(es)6 b(:)75 1219 y(cette)13 b(fonction)f(d)o(\023)-21 b(e\014nit)13 b fj(c)n(e)h(que)g(c)n(alcule)e fq(le)h(programme.)e (d'un)i(p)q(oin)o(t)g(de)g(vue)g(plus)g(op)o(\023)-21 b(erationnel,)13 b(on)75 1276 y(doit)h(en)g(outre)f(d)o(\023)-21 b(e\014nir)14 b fj(c)n(omment)f fq(ces)h(calculs)h(son)o(t)e(organis)o (\023)-21 b(es;)12 b(et)h(lorsque)h(l'implan)o(tation)h(supp)q(ose)75 1332 y(l'utilisation)20 b(d'une)e(mac)o(hine)h(parall)o(\022)-21 b(ele,)18 b(on)f(d)o(\023)-21 b(e\014nit)18 b(seulemen)o(t)h(un)f (ordre)g(partiel,)g(qui)h(p)q(eut)f(\(ou)75 1389 y(doit,)e(selon)h(les) h(mo)q(d)o(\022)-21 b(eles)16 b(d')o(\023)-21 b(ex)o(\023)g(ecution\)) 14 b(^)-21 b(etre)15 b(compl)o(\023)-21 b(et)o(\023)g(e)15 b(en)i(disan)o(t)g fj(o)q(\022)-24 b(u)17 b fq(son)o(t)f(op)o(\023)-21 b(er)o(\023)g(es)14 b(ces)j(calculs)h(et)75 1445 y fj(o)q(\022)-24 b(u)16 b fq(son)o(t)e(plac)o(\023)-21 b(ees)16 b(les)f(donn)o(\023)-21 b(ees)15 b(impliqu)o(\023)-21 b(ees.)146 1566 y(cette)11 b(derni)o(\022)-21 b(ere)13 b(appro)q(c)o(he)g(conduit)g(naturellemen)o (t)h(\022)-23 b(a)12 b(l'in)o(tro)q(duction)h(d'une)g(certaine)g(\\g)o (\023)-21 b(eom)o(\023)g(e-)75 1623 y(trie")16 b(dans)f(l'expression)i (des)f(programmes,)e(compl)o(\023)-21 b(emen)o(taire)16 b(de)g(l'asp)q(ect)g(fonctionnel)h(habituel.)75 1679 y(c'est)d(ce)i(qui)g(est)f(\022)-23 b(a)15 b(la)g(base)h(des)f (concepts)h(de)f fn(pei)p fq(.)146 1744 y fn(pei)f fq(a)f(\023)-21

b(et)o(\023)g(e)12 b(con\030)-20 b(cu)15 b(\022)-23 b(a)14 b(une)g(\023)-21 b(ep)q(o)q(que)15 b(o)q(\022)-24 b(u)14 b(p)q(eu)h(de)g(langages)f(incluaien)o(t)j(cette)d(notion)h(de)g(g)o (\023)-21 b(eom)o(\023)g(etrie)75 1800 y(comme)20 b(caract)o(\023)-21 b(eristique)19 b(\022)-23 b(a)20 b(part)f(en)o(ti)o(\022)-21 b(ere)20 b(du)h(langage.)e(les)i(formalismes)f(comparables,)g(autori-) 75 1857 y(san)o(t)f(\023)-21 b(egalemen)o(t)19 b(le)i(ra\016nemen)o(t)f (et)g(la)g(transformation)f(de)i(programmes,)e(comme)h fn(alpha)p fq([39)o(],)75 1913 y fn(cr)m(yst)m(al)p fq([12)o(])d(ou)g fn(unity)p fq([10)n(])g(par)g(exemple,)h(n'in)o(t)o(\022)-21 b(egren)o(t)15 b(pas,)i(\022)-23 b(a)17 b(ce)g(p)q(oin)o(t,)g(les)h (con)o(train)o(tes)f(g)o(\023)-21 b(eo-)75 1970 y(m)o(\023)g(etriques) 17 b(sur)h(le)g(placemen)o(t)g(des)g(v)m(aleurs)h(pr)o(\023)-21 b(esen)o(tes)17 b(dans)g fn(pei)p fq(.)g(nous)h(a)o(v)o(ons)f(soulign)o (\023)-21 b(e)18 b(dans)f(la)75 2026 y(comparaison)11 b(a)o(v)o(ec)g(le)i(langage)e fn(alpha)p fq(,)g(que)h(cette)g(di\013)o (\023)-21 b(erence)11 b(mo)q(di\014ait)i(l'appro)q(c)o(he)f(de)g(la)g (concep-)75 2082 y(tion)h(d'un)g(programme)6 b(:)12 b(l')o(\023)-21 b(ecriture)13 b(d'un)f(programme)g fn(pei)g fq(imp)q(ose)h(en)g (e\013et)f(de)h(concev)o(oir)g fj(a)h(priori)75 2139 y fq(la)i(mani)o(\022)-21 b(ere)14 b(don)o(t)h(les)h(donn)o(\023)-21 b(ees)15 b(son)o(t)g(align)o(\023)-21 b(ees,)15 b(\022)-23 b(a)14 b(l'aide)j(de)e(l'op)o(\023)-21 b(eration)15 b(de)g(c)o (hangemen)o(t)g(de)h(base.)146 2260 y(notre)f(th)o(\022)-21 b(ese)15 b(est)h(que)g fn(pei)g fq(p)q(ermet)g(de)g(mo)q(d)o(\023)-21 b(eliser)17 b(les)f(concepts)h(des)f(langages)g(\022)-23 b(a)15 b(parall)o(\023)-21 b(elisme)75 2316 y(de)16 b(donn)o(\023)-21 b(ees)15 b(don)o(t)f(la)i(s)o(\023)-21 b(eman)o(tique)15 b(des)g(indices)j(des)d(v)m(ariables)i(est)e(celle)i(des)e(pro)q (cesseurs)h(virtuels.)75 2373 y(citons)22 b(par)g(exemple)i(c)530 2356 y fw(?)549 2373 y fq([54)o(],)e(mpl[38)o(],)f fn(hyperc)p fq([45],)h(et)g(dpce[53)n(].)g(le)h(langage)f ff(l)p fq([4])g(qui)75 2429 y(mo)q(d)o(\023)-21 b(elise)21 b(cette)e(appro)q (c)o(he)h(in)o(t)o(\022)-21 b(egre)19 b(une)i(certaine)f(forme)g(de)g (g)o(\023)-21 b(eom)o(\023)g(etrie,)17 b(limit)o(\023)-21 b(ee)21 b(au)f(minim)o(um,)75 2486 y(c'est-\022)-23 b(a-dire)17 b(\022)-23 b(a)16 b(la)g(d)o(\023)-21 b(e\014nition)18 b(de)e(v)o(ecteurs)g(et)h(\022)-23 b(a)16 b(la)g(r)o(\023)-21 b(ef)o(\023)g(erence)15 b(\022)-23 b(a)16 b(l'indice)j(couran)o(t)d (des)g(pro)q(cesseurs)75 2542 y(virtuels)i(asso)q(ci)o(\023)-21 b(es.)16 b(de)h(fait,)g(dans)g(ces)g(langages,)g(l'asp)q(ect)g(g)o (\023)-21 b(eom)o(\023)g(etrique)15 b(est)i(omnipr)o(\023)-21 b(esen)o(t)17 b(par)f(la)p eop %%page: 114 116 114 115 bop 75 269 a fq(114)1068 b fl(chapitre)15 b(6.)30 b(conclusion)75 397 y fq(notion)17 b(m)o(^)-21 b(eme)16 b(de)h(v)m(ariables)i(parall)o(\022)-21 b(eles)8 b(:)16 b(le)i(programmeur)e(doit)h(explicitemen)o(t)i(aligner,)f(par)e(des)75 453 y(comm)o(unications,)21 b(les)g(v)m(ariables)g(de)g(son)f (programme)g(de)h(fa\030)-20 b(con)20 b(\022)-23 b(a)20 b(ce)h(que)f(tous)g(les)h(calculs)h(ne)75 510 y(s'e\013ectuen)o(t)d (que)g(sur)g(des)h(v)m(aleurs)g(lo)q(cales)g(\022)-23 b(a)19 b(c)o(haque)h(pro)q(cesseur)f(virtuel.)h(nous)f(p)q(ensons)h (donc)75 566 y(que)d(b)q(eaucoup)g(de)g(tec)o(hniques)g(formelles)g(d)o (\023)-21 b(ev)o(elopp)o(\023)g(ees)16 b(dans)g fn(pei)h fq(p)q(euv)o(en)o(t)e(^)-21 b(etre)15 b(appliqu)o(\023)-21 b(ees)18 b(aux)75 623 y(langages)d(\022)-23 b(a)16 b(parall)o(\023)-21 b(elisme)17 b(de)f(donn)o(\023)-21 b(ees,)15 b(et)g(son)o(t)g(compl)o (\023)-21 b(emen)o(taires)15 b(d'autres)g(tra)o(v)m(aux)g(th)o(\023)-21 b(eoriques,)75 679 y(comme)15 b(ceux)h(sur)f(la)g(preuv)o(e)h(de)g

(programmes)e(data-parall)o(\022)-21 b(eles)15 b([5].)146 792 y(cep)q(endan)o(t,)d(pr)o(\023)-21 b(ealablemen)o(t)11 b(\022)-23 b(a)12 b(l'application)i(des)e(tec)o(hniques)h fn(pei)e fq(aux)h(langages)f(de)i(program-)75 849 y(mation)f(existan)o (ts,)g(il)g(\023)-21 b(etait)11 b(n)o(\023)-21 b(ecessaire)13 b(de)f(p)q(oursuivre)i(le)f(tra)o(v)m(ail)f(d'in)o(v)o(estigation)h (sur)f(la)h(d)o(\023)-21 b(e\014nition)75 905 y(du)19 b(formalisme)g(lui-m)o(^)-21 b(eme.)18 b(nous)h(a)o(v)o(ons)e(pr)o (\023)-21 b(esen)o(t)o(\023)g(e)17 b(dans)h(le)i(premier)f(c)o(hapitre) g(la)f(d)o(\023)-21 b(e\014nition)20 b(ac-)75 962 y(tuelle)h(du)e (formalisme.)g(nous)g(a)o(v)o(ons)f(ensuite)h(\023)-21 b(etendu)19 b(le)g(calcul)i(de)e(ra\016nemen)o(t)g(par)f(rapp)q(ort)h (\022)-23 b(a)75 1018 y(sa)18 b(d)o(\023)-21 b(e\014nition)19 b(originale,)g(de)g(fa\030)-20 b(con)18 b(\022)-23 b(a)18 b(p)q(ouv)o(oir)g(statuer)g(sur)g(des)h(relations)f(plus)i(\014nes)f (en)o(tre)f(pro-)75 1074 y(grammes,)13 b(que)j(nous)f(app)q(elons)f fj(\023)-22 b(e)n(quivalenc)n(e)15 b(faible)p fq(.)f(le)h(troisi)o (\022)-21 b(eme)14 b(c)o(hapitre)i(traite)e(des)h(strat)o(\023)-21 b(egies)75 1131 y(de)14 b(transformations)e(d')o(\023)-21 b(enonc)o(\023)g(es)13 b fn(pei)p fq(.)g(ces)g(strat)o(\023)-21 b(egies)12 b(son)o(t)h(une)i(application)g(directe)g(du)f(calcul)h(de) 75 1187 y(ra\016nemen)o(t,)i(et)g(mon)o(tren)o(t)f(commen)o(t)i (utiliser)h(les)f(r)o(\022)-21 b(egles)17 b(de)h(ra\016nemen)o(t)f(p)q (our)h(repr)o(\023)-21 b(esen)o(ter)16 b(des)75 1244 y(transformations)h(couran)o(tes.)h(notammen)o(t,)g(on)h(est)f(souv)o (en)o(t)h(amen)o(\023)-21 b(e)18 b(\022)-23 b(a)18 b(substituer)i(des)f (comm)o(u-)75 1300 y(nications)h(de)g(v)o(oisin)f(\022)-23 b(a)19 b(v)o(oisin)h(par)f(des)g(di\013usions)h(\(ou)f(vice-v)o (ersa\),)g(ou)g(par)g(des)g(op)o(\023)-21 b(erations)18 b(de)75 1357 y(r)o(\023)-21 b(eductions)15 b(lorsqu'un)h(op)o(\023)-21 b(erateur)14 b(est)h(appliqu)o(\023)-21 b(e)16 b(sur)f(les)h(v)m (aleurs)h(comm)o(uniqu)o(\023)-21 b(ees.)15 b(les)h(strat)o(\023)-21 b(egies,)75 1413 y(s'appuy)o(an)o(t)15 b(sur)g(le)h(calcul)h(de)f (ra\016nemen)o(t,)f(devraien)o(t)h(\022)-23 b(a)15 b(terme,)g(p)q (ermettre)g(de)h(passer)f(imm)o(\023)-21 b(edia-)75 1470 y(temen)o(t)14 b(d'une)h(v)o(ersion)f(\022)-23 b(a)14 b(l'autre,)f(et)i(mon)o(trer)e(la)h(relation)h(en)o(tre)f(les)h(deux)g (v)o(ersions.)f(deux)g(autres)75 1526 y(strat)o(\023)-21 b(egies)12 b(son)o(t)h(\023)-21 b(egalemen)o(t)13 b(d)o(\023)-21 b(ev)o(elopp)o(\023)g(ees)13 b(dans)h(ce)h(c)o(hapitre.)f(la)g(premi)o (\022)-21 b(ere)14 b(concerne)g(la)h(mo)q(di\014ca-)75 1583 y(tion)j(du)g(sc)o(h)o(\023)-21 b(ema)16 b(de)i(comm)o(unication)h (d'un)e(programme,)g(et)g(la)h(deuxi)o(\022)-21 b(eme,)18 b(la)g(mo)q(di\014cation)g(des)75 1639 y(alignemen)o(ts)d(de)g(donn)o (\023)-21 b(ees.)13 b(cette)h(derni)o(\022)-21 b(ere)15 b(transformation)e(illustre)j(un)e(cas)g(d')o(\023)-21 b(equiv)m(alence)16 b(faible)75 1695 y(en)o(tre)f(programmes.)f(il)i (est)f(probable)h(que)f(l')o(\023)-21 b(etude)15 b(de)h(cas)e (pratiques)i(plus)g(nom)o(breux)f(p)q(ourraien)o(t)75 1752 y(nous)j(inspirer)h(d'autres)e(id)o(\023)-21 b(ees)18 b(de)g(transformations,)e(que)j(nous)e(p)q(ourrons)h(ten)o(ter)f(de)i (g)o(\023)-21 b(en)o(\023)g(eraliser)75 1808 y(en)16 b(strat)o(\023)-21 b(egies.)146 1921 y(la)13 b(pratique)g(mon)o(tre)f (que)i(la)f(manipulation)i(d'un)e(formalisme)g(comme)g fn(pei)p fq(,)g(devien)o(t)h(tr)o(\022)-21 b(es)11 b(vite)75 1978 y(complexe)19 b(et)f(fastidieuse,)h(en)f(raison)g(des)g(nom)o (breuses)g(con)o(train)o(tes)g(qu'imp)q(ose)g(la)h(pr)o(\023)-21 b(ecision)18 b(du)75 2034 y(calcul)h(de)f(ra\016nemen)o(t.)f(p)o(our)g (aider)h(le)h(programmeur,)d(les)i(outils)h(de)f(d)o(\023)-21 b(ev)o(elopp)q(emen)o(ts)18 b(se)g(mon-)75 2091 y(tren)o(t)g(rapidemen)

o(t)h(indisp)q(ensabl)q(es.)i(en)e fn(pei)p fq(,)f(ces)h(outils)h(de)f (base)g(son)o(t)7 b(:)18 b(un)i(en)o(vironnemen)o(t)f(de)75 2147 y(transformations)e(p)q(ermettan)o(t)g(d'appliquer)j(les)f(r)o (\022)-21 b(egles)18 b(de)h(ra\016nemen)o(t,)e(un)i(traducteur)f(de)h (pro-)75 2204 y(grammes)14 b fn(pei)g fq(en)i(programmes)d fn(caml)i fq(bas)o(\023)-21 b(e)14 b(sur)h(l'in)o(terpr)o(\023)-21 b(etation)14 b(fonctionnelle,)j(et)d(un)i(outil)f(de)75 2260 y(conception)i(graphique)h(baptis)o(\023)-21 b(e)16 b fn(vpei)p fq(.)f(ce)i(dernier)g(outil)h(d)o(\023)-21 b(ev)o(elopp)o(\023)g(e)15 b(en)i(d)o(\023)-21 b(ebut)16 b(de)h(th)o(\022)-21 b(ese,)15 b(visait)75 2316 y(\022)-23 b(a)15 b(mon)o(trer)g(l'in)o(t)o(\023)-21 b(er)o(^)g(et)14 b(d'une)i(repr)o(\023)-21 b(esen)o(tation)15 b(graphique)h(des)g(v)m (ariables)h(parall)o(\022)-21 b(eles)17 b(et)e(de)h(leurs)h(ali-)75 2373 y(gnemen)o(ts,)e(lors)g(de)g(la)h(conception)g(du)g(programme.)146 2486 y(en\014n,)c(p)q(our)h(amorcer)f(l'application)i(des)f(tec)o (hniques)h fn(pei)e fq(aux)h(langages)f(data-parall)o(\022)-21 b(eles)13 b(exis-)75 2542 y(tan)o(ts,)j(il)i(nous)f(a)g(sem)o(bl)o (\023)-21 b(e)17 b(in)o(t)o(\023)-21 b(eressan)o(t)16 b(de)h(r)o(\023)-21 b(ealiser)17 b(un)h(traducteur)f(de)g fn(pei)g fq(v)o(ers)g(le)h(langage)f fj(high)p eop %%page: 115 117 115 116 bop 1778 269 a fq(115)75 397 y fj(performanc)n(e)16 b(f)m(ortr)n(an)p fq([27)n(].)f(ce)g(traducteur,)g(pr)o(\023)-21 b(esen)o(t)o(\023)g(e)13 b(dans)i(le)h(c)o(hapitre)g(5,)e(a)h(deux)h (ob)s(jectifs.)146 453 y(l'ob)s(jectif)h(premier)i(est)f(la)g(compr)o (\023)-21 b(ehension)18 b(des)g(probl)o(\022)-21 b(emes)18 b(que)h(p)q(ose)f(le)g(passage)g(d'un)g(for-)75 510 y(malisme)g(\023) -21 b(equationnel)18 b(comme)g fn(pei)g fq(\022)-23 b(a)17 b(un)i(langage)f(data-parall)o(\022)-21 b(ele)18 b(imp)o(\023)-21 b(eratif)18 b(comme)f(hpf.)h(ce)75 566 y(tra)o(v)m(ail)e(nous)f(a)g (amen)o(\023)-21 b(e)14 b(\022)-23 b(a)15 b(isoler)h(un)g(sous-ensem)o (ble)g(des)f(\023)-21 b(enonc)o(\023)g(es)14 b fn(pei)p fq(,)g(qui)i(son)o(t)f(les)h(programmes)75 623 y fn(pei)d fq(traduisibles.)i(nous)e(mon)o(trons)f(que)i(de)f(nom)o(breuses)h (transformations)d(s)o(\023)-21 b(eman)o(tiques)13 b(p)q(euv)o(en)o(t) 74 679 y(^)-21 b(etre)9 b(e\013ectu)o(\023)-21 b(ees)10 b(dans)h(l'en)o(vironnemen)o(t)h(de)f(transformation,)e(p)q(our)i(ne)g (laisser)g(au)g(traducteur)f(qu'un)75 736 y(tra)o(v)m(ail)16 b(de)g(transformation)e(syn)o(taxique.)i(nous)g(soulignons)g(ici)h(les) g(am)o(\023)-21 b(eliorations)15 b(\022)-23 b(a)15 b(app)q(orter)h(au) 75 792 y(traducteur,)k(notammen)o(t)g(dans)h(la)g(traduction)g(des)f (\023)-21 b(equations)20 b(r)o(\023)-21 b(ecurren)o(tes)7 b(:)20 b(la)h(g)o(\023)-21 b(en)o(\023)g(eralit)o(\023)g(e)19 b(des)75 849 y(domaines)d(p)q(oten)o(tiellemen)o(t)h(utilis)o(\023)-21 b(es)16 b(dans)f(une)h(d)o(\023)-21 b(e\014nition)16 b(r)o(\023)-21 b(ecursiv)o(e,)14 b(p)q(ose)i(encore)f(de)h(nom)o(breux) 75 905 y(probl)o(\022)-21 b(emes.)14 b(p)o(ar)h(con)o(tre,)f(il)i(est)f (remarquable)g(que,)g(dans)g(le)h(pro)q(cessus)f(de)g(traduction,)g (les)h(op)o(\023)-21 b(era-)75 962 y(tions)14 b(du)g(formalisme)g(son)o (t)e(traduites)i(de)g(mani)o(\022)-21 b(ere)13 b(tr)o(\022)-21 b(es)12 b(directe,)i(notammen)o(t)f(gr^)-23 b(ace)13 b(\022)-23 b(a)13 b(l'op)o(\023)-21 b(eration)75 1018 y(de)17 b(c)o(hangemen)o(t)g(de)g(base,)f(exprim)o(\023)-21 b(ee)17 b(par)g(un)g(alignemen)o(t)h(en)f(hpf.)f(le)h(deuxi)o(\022)-21 b(eme)18 b(ob)s(jectif,)e(une)75 1074 y(fois)f(le)g(traducteur)g (\014abilis)o(\023)-21 b(e,)15 b(est)g(de)g(faire)g(indirectemen)o(t)h (de)f(la)g(transformation)f(de)h(programmes)75 1131 y(hpf.)j(on)h(p)q (ourrait)f(en)h(e\013et)f(observ)o(er)h(pr)o(\023)-21 b(ecis)o(\023)g(emen)o(t)17 b(l'impact)i(des)g(transformations)e(d')o

(\023)-21 b(enonc)o(\023)g(es)75 1187 y fn(pei)15 b fq(sur)g(leurs)h (traductions)f(hpf.)146 1300 y(ces)21 b(tra)o(v)m(aux)g(sur)h (l'utilisation)h(du)f(formalisme)g fn(pei)g fq(fon)o(t)e(appara)-5 b(^)-18 b(\020tre)22 b(que)g(la)g(t^)-23 b(ac)o(he)21 b(\022)-23 b(a)22 b(ac-)75 1357 y(complir)e(p)q(our)g(in)o(t)o(\023)-21 b(egrer)18 b(ces)h(tec)o(hniques)i(dans)e(un)h(en)o(vironnemen)o(t)g(r) o(\023)-21 b(eel)19 b(de)g(d)o(\023)-21 b(ev)o(elopp)q(emen)o(t)20 b(est)75 1413 y(encore)e(immense.)h(d'une)f(part,)f(il)i(faut)f(in)o(t) o(\023)-21 b(egrer)17 b(et)h(adapter)f(aux)h(outils)h(d)o(\023)-21 b(ev)o(elopp)o(\023)g(es,)17 b(les)i(r)o(\023)-21 b(esul-)75 1470 y(tats)15 b(th)o(\023)-21 b(eoriques)17 b(existan)o(ts.)e(les)i (strat)o(\023)-21 b(egies)15 b(de)i(transformations)e(par)i(exemple,)g (doiv)o(en)o(t)g(dev)o(enir)75 1526 y(des)j(fonctionnalit)o(\023)-21 b(es)21 b(\022)-23 b(a)19 b(part)h(en)o(ti)o(\022)-21 b(ere)20 b(de)g(l'en)o(vironnemen)o(t)h(de)f(transformations.)f (d'autre)g(part,)75 1583 y(d'autres)f(id)o(\023)-21 b(ees,)18 b(comme)g(le)h(test)f(d')o(\023)-21 b(equiv)m(alence)20 b(forte)e(en)o(tre)g(programmes,)f(pr)o(\023)-21 b(esen)o(t)o(\023)g(e) 16 b(en)j(annexe)75 1639 y(b,)c(p)q(ourraien)o(t)f(\023)-21 b(egalemen)o(t)14 b(v)o(enir)h(enric)o(hir)i(l'aide)f(qu'app)q(orte)e (ce)h(t)o(yp)q(e)g(d'outil.)h(d'autres)d(tra)o(v)m(aux)75 1695 y(resten)o(t)18 b(\022)-23 b(a)18 b(mener)h(p)q(our)f(utiliser)i (la)f(p)q(ossibilit)o(\023)-21 b(e)20 b(qu'o\013re)e(hpf)g(d'exprimer)h (a)o(v)o(ec)f(les)h(indices)h(des)75 1752 y(v)m(ariables)13 b(parall)o(\022)-21 b(eles,)13 b(non)f(plus)h(des)f(pro)q(cesseurs)h (virtuels,)g(mais)f(des)f(\023)-21 b(el)o(\023)g(emen)o(ts)11 b(de)i(tableaux.)f(nous)75 1808 y(a)o(v)o(ons)f(ab)q(ord)o(\023)-21 b(e)11 b(cet)h(asp)q(ect)g(dans)g(le)h(dernier)g(c)o(hapitre,)f(et)g (nous)g(esp)o(\023)-21 b(erons)11 b(p)q(ouv)o(oir)i(am)o(\023)-21 b(eliorer)11 b(la)h(tra-)75 1865 y(duction)j(a\014n)g(de)g(pro)q(duire) g(des)g(textes)f(de)h(programmes)e(utilisan)o(t)j(cette)e(notation)g (plus)h(abstraite.)75 1921 y(d'un)20 b(programme)g fn(pei)g fq(don)o(t)g(les)h(v)m(ariables)h(son)o(t)e(align)o(\023)-21 b(ees)21 b(de)f(mani)o(\022)-21 b(ere)21 b(\022)-23 b(a)20 b(rendre)h(les)g(comm)o(u-)75 1978 y(nications)e(lo)q(cales,)f(nous)g (obtiendrions)h(alors)f(un)g(programme)f(hpf)g(don)o(t)g(les)i (alignemen)o(ts)f(son)o(t)75 2034 y(presque)c(cac)o(h)o(\023)-21 b(es)13 b(\022)-23 b(a)13 b(l'utilisateur,)h(n'apparaissan)o(t)f(que)h (sous)f(forme)g(de)g(directiv)o(es)i(\022)-23 b(a)13 b(l'ext)o(\023)-21 b(erieur)13 b(des)75 2091 y(instructions)j(de)g (traitemen)o(ts.)p eop %%page: 116 118 116 117 bop 75 269 a fq(116)1068 b fl(chapitre)15 b(6.)30 b(conclusion)p eop %%page: 117 119 117 118 bop 1778 269 a fq(117)75 729 y fp(bibliographie)98 952 y fq([1])21 b(saman)g(p)l(.)f(amarasinghe,)g(jennifer)i(m.)e (anderson,)g(monica)h(s.)f(lam,)g(and)h(c.w.)e(tseng.)168 1008 y(the)c(suif)h(compiler)g(for)e(scalable)i(parallel)g(mac)o (hines.)j(in)d fj(pr)n(o)n(c)n(e)n(e)n(dings)d(of)j(the)g(seventh)f (siam)168 1064 y(confer)n(enc)n(e)g(on)h(par)n(al)r(lel)f(pr)n(o)n(c)n (essing)f(for)j(scienti\014c)d(computing)p fq(,)h(f)l(ebruary)g(1995.) 98 1153 y([2])21 b(r.)f(j.)g(bac)o(k.)34 b(a)20 b(calculus)h(of)f (re\014nemen)o(ts)g(for)f(program)g(deriv)m(ations.)35 b fj(a)n(cta)20 b(informatic)n(a)p fq(,)168 1210 y(25\(6\):593{624,)11 b(august)16 b(1988.)98 1299 y([3])21 b(guy)e(e.)f(blello)q(c)o(h,)j (siddharta)e(chatterjee,)f(jonathan)g(c.)g(hardwic)o(k,)h(ja)o(y)f(sip) q(elstein,)j(and)168 1355 y(marco)16 b(zagha.)24 b(implemen)o(tation)18 b(of)e(a)h(p)q(ortable)g(nested)g(data-parallel)h(language.)25 b fj(journal)168 1412 y(of)17 b(par)n(al)r(lel)e(and)i(distribute)n(d)f

(computing)p fq(,)f(21\(1\):4{14,)d(1994.)98 1501 y([4])21 b(luc)16 b(boug)o(\023)-21 b(e.)18 b fj(the)e(data)h(par)n(al)r(lel)e (pr)n(o)n(gr)n(amming)g(mo)n(del)7 b(:)16 b(a)g(semantic)f(persp)n(e)n (ctive)p fq(,)e(v)o(olume)168 1557 y(lncs)j(1132,)e(pages)h(4{26.)k (springer)d(v)l(erlag,)f(ma)o(y)f(1996.)98 1646 y([5])21 b(luc)c(boug)o(\023)-21 b(e.)19 b(on)d(the)g(seman)o(tics)f(of)g (languages)h(for)f(massiv)o(ely)h(parallel)h(simd)f(arc)o(hitectures.) 168 1702 y(in)g fj(p)m(arle'91,)f(lncs)p fq(,)f(pages)h(166{183.)e (springer-v)l(erlag,)j(1991.)98 1791 y([6])21 b(pierre)15 b(boulet.)k fj(outils)c(p)n(our)h(la)f(p)n(ar)n(al)r(l)o(\023)-22 b(elisation)14 b(automatique)p fq(.)20 b(phd)13 b(thesis,)1562 1780 y(\023)1558 1791 y(ecole)i(normale)168 1848 y(sup)o(\023)-21 b(erieure)16 b(de)g(ly)o(on,)f(jan)o(vier)h(1996.)98 1937 y([7])21 b(thomas)13 b(brandes.)k(compiling)d(data-parallel)h (programs)d(to)g(message)h(passing)g(programs)f(for)168 1993 y(massiv)o(ely)h(parallel)g(mimd)g(systems.)h(in)f(k.)e(m.)h(dec)o (k)o(er)f(and)h(r.)g(m.)f(rehmann,)i(editors,)f fj(wor-)168 2050 y(king)j(confer)n(enc)n(e)f(on)i(massively)e(par)n(al)r(lel)h(pr)n (o)n(gr)n(amming)g(mo)n(dels)7 b(:)15 b(suitability,)h(r)n(e)n (alization,)168 2106 y(and)h(performanc)n(e)p fq(,)d(septem)o(b)q(er)i (1993.)98 2195 y([8])21 b(l.)f(cannon.)31 b fj(a)20 b(c)n(el)r(lular)f (c)n(omputer)i(to)f(implement)f(the)h(kalman)g(filter)f(a)o(lgorithm)p fq(.)32 b(phd)168 2252 y(thesis,)16 b(mon)o(tana)e(state)g(univ)o (ersit)o(y)l(,)i(bozeman,)f(1969.)98 2340 y([9])21 b(zbigniew)g (chamski.)30 b fj(envir)n(onnement)18 b(lo)n(giciel)h(de)g(pr)n(o)n(gr) n(ammation)h(d'un)g(ac)n(c)o(\023)-22 b(el)o(\023)g(er)n(ateur)20 b(de)168 2397 y(c)n(alcul)c(p)n(ar)n(al)r(l)o(\022)-22 b(ele)p fq(.)19 b(phd)c(thesis,)g(univ)o(ersit)o(\023)-21 b(e)16 b(de)f(rennes)i(i,)e(f)l(ebruary)g(1993.)75 2486 y([10])21 b(k.)14 b(mani)h(chandy)f(and)h(ja)o(y)o(adev)e(misra.)18 b fj(par)n(al)r(lel)d(pr)n(o)n(gr)n(am)g(design)7 b(:)15 b fq(a)f(foundation.)k(addi-)168 2542 y(son)d(w)l(esley)l(,)h(1988.)p eop %%page: 118 120 118 119 bop 75 269 a fq(118)1326 b fl(bibliographie)75 397 y fq([11])21 b(bruce)i(w.)e(char,)g(keith)h(o.)g(geddes,)g(gaston)e (h.)i(gonnet,)f(mic)o(hael)i(b.)e(monagan,)f(and)168 453 y(stephen)i(m.)f(w)l(att.)35 b fj(maple)20 b(r)n(efer)n(enc)n(e)g (manual)p fq(.)37 b(univ)o(ersit)o(y)21 b(of)g(w)l(aterlo)q(o,)f(w)l (aterlo)q(o)168 510 y(maple)c(soft)o(w)o(are,)d(1989.)75 604 y([12])21 b(marina)h(chen,)g(y)l(oung)g(il)h(cho)q(o,)e(and)h (jingk)o(e)g(li.)41 b fj(par)n(al)r(lel)21 b(f)m(unctional)g(l)n (anguages)h(and)168 660 y(compilers)p fq(,)15 b(c)o(hapter)g(chapter)f (7.)20 b(f)l(ron)o(tier)15 b(series.)h(a)o(cm)e(press,)h(1991.)75 755 y([13])21 b(f)l(abien)13 b(co)q(elho.)j fj(contributions)d(to)g (high)h(performanc)n(e)f(f)m(ortr)n(an)g(compilation)p fq(.)h(phd)e(thesis,)168 811 y(ecole)k(des)g(mines)g(de)f(p)o(aris,)g (octobre)g(1996.)75 905 y([14])21 b(alain)13 b(darte)e(and)h(yv)o(es)f (rob)q(ert.)k(a)c(graph)h(theoretic)g(approac)o(h)f(to)g(the)h (alignemen)o(t)g(problem.)168 962 y(t)l(ec)o(hnical)17 b(rep)q(ort,)e(ecole)h(normale)f(sup)o(\023)-21 b(erieure)16 b(de)g(ly)o(on,)f(lip)l(,)g(july)i(1993.)h(rr93-20.)75 1056 y([15])j(nills)f(ellmenreic)o(h,)g(p)o(eter)e(f)l(ab)q(er,)f (martin)h(griebl,)g(rob)q(ert)h(g)q(\177)-24 b(unz,)18 b(harald)g(keimer,)g(w)l(olf-)168 1112 y(gang)c(meisl,)g(sabine)i(w)l (etzel,)e(christian)h(wieninger,)g(and)f(alexander)h(w)q(\177)-24 b(ust.)17 b(lo)q(op)e(paralle-)168 1169 y(lization)i(in)f(the)f(p)q (olytop)q(e)h(mo)q(del.)21 b(t)l(ec)o(hnical)c(rep)q(ort,)e(univ)o (ersit)o(y)h(of)e(p)o(assau,)g(april)j(1996.)75 1263 y([16])k(p)o(aul)i(f)l(eautrier.)42 b(some)23 b(e\016cien)o(t)g

(solution)h(to)e(the)g(a\016ne)h(sc)o(heduling)i(problem,)e(part)f(ii,) 168 1319 y(m)o(ultidimensional)h(time.)33 b fj(international)19 b(journal)h(of)h(par)n(al)r(lel)e(pr)n(o)n(gr)n(amming)p fq(,)g(21\(6\):389{)168 1376 y(420,)14 b(1992.)75 1470 y([17])21 b(p)o(aul)14 b(f)l(eautrier.)j(t)l(o)o(w)o(ards)12 b(automatic)g(distribution.)19 b fj(par)n(al)r(lel)14 b(pr)n(o)n(c)n(essing)e(letters)p fq(,)g(4\(3\):233{)168 1526 y(244,)i(1994.)75 1620 y([18])21 b(p)o(aul)16 b(f)l(eautrier.)j (compiling)e(for)d(massiv)o(ely)i(parallel)g(arc)o(hitectures;)f(a)g(p) q(ersp)q(ectiv)o(e.)21 b fj(micr)n(o-)168 1677 y(pr)n(o)n(gr)n(amming) 16 b(and)h(micr)n(opr)n(o)n(c)n(essors)p fq(,)c(1995.)18 b(t)l(o)d(app)q(ear.)75 1771 y([19])21 b(m.)13 b(j.)f(flynn.)17 b(some)c(computer)g(organizations)f(and)h(their)h(e\013ectiv)o(eness.)i fj(ieee)d(t)m(r)n(ansaction)168 1827 y(on)j(computer)p fq(,)g(21\(9\):948{960)o(,)c(1972.)75 1921 y([20])21 b(a.)13 b(geist,)g(a.)g(beguelin,)i(j.)e(dongarra,)e(w.)i(jiang,)g(r.)g (manc)o(hek,)g(and)h(v.)e(sunderam.)18 b fj(pvm)7 b(:)168 1978 y(par)n(al)r(lel)16 b(virtual)g(machine,)g(a)g(user's)f(guide)i (and)f(t)m(utorial)p fq(.)k(the)15 b(mit)g(press.)75 2072 y([21])21 b(st)o(\023)-21 b(ephane)20 b(genaud.)36 b(t)l(ransformations)19 b(d')o(\023)-21 b(enonc)o(\023)g(es)18 b fn(pei)p fq(.)36 b fj(t)m(e)n(chnique)19 b(et)i(scienc)n(e)e (informa-)168 2128 y(tiques)p fq(,)c(15\(5\):601{618)o(,)d(1996.)75 2222 y([22])21 b(st)o(\023)-21 b(ephane)18 b(genaud,)f(eric)h(violard,) f(and)h(guy-ren)o(\023)-21 b(e)17 b(p)o(errin.)27 b(t)l(ransformations) 16 b(tec)o(hniques)168 2279 y(in)g fn(pei)p fq(.)i(in)d(p)o(eter)f (magn)o(usson,)f(seif)i(haridi,)g(and)g(ali)g(kha)o(yri,)g(editors,)f fj(lncs)p fq(,)e(v)o(olume)j(966,)168 2335 y(pages)f(131{142,)d(sto)q (c)o(kholm,)j(sw)o(eden,)g(august)f(1995.)f(eur)o(o-p)l(ar95)j(p)o (arallel)f(pro)q(cessing,)168 2392 y(springer-v)l(erlag.)75 2486 y([23])21 b(gene)16 b(h.)f(golub)h(and)g(charles)f(f.)g(v)l(an)h (loan.)k fj(matrix)d(computations)p fq(.)j(the)c(john)g(hopkins)168 2542 y(univ)o(ersit)o(y)g(press,)f(2nd)g(edition,)h(1989.)p eop %%page: 119 121 119 120 bop 75 269 a fl(bibliographie)1329 b fq(119)75 397 y([24])21 b(martin)16 b(griebl)h(and)f(jean-f)l(ran\030)-20 b(cois)17 b(collard.)22 b(generation)16 b(of)g(sync)o(hronous)f(co)q (de)i(for)e(auto-)168 453 y(matic)d(parallelization)j(of)c fk(while)g fq(lo)q(ops.)k(in)d(p)o(eter)g(magn)o(usson,)e(seif)j (haridi,)f(and)g(ali)i(kha)o(yri,)168 510 y(editors,)e fj(lncs)p fq(,)f(v)o(olume)h(966,)f(sto)q(c)o(kholm,)h(sw)o(eden,)h (august)f(1995.)f(eur)o(o-p)l(ar95)i(p)o(arallel)168 566 y(pro)q(cessing,)j(springer-v)l(erlag.)75 660 y([25])21 b(jonathan)16 b(m.)f(d.)f(hill.)23 b fj(data-p)n(ar)n(al)r(lel)17 b(lazy)f(functional)g(pr)n(o)n(gr)n(amming)p fq(.)k(phd)c(thesis,)f (queen)168 717 y(mary)e(and)i(w)l(est\014eld)f(college,)h(departmen)o (t)e(of)g(computer)h(science,)h(mile)g(end)f(road,)g(lon-)168 773 y(don,)h(e1)g(4ns,)g(uk,)g(septem)o(b)q(er)h(1994.)75 867 y([26])21 b(w.)14 b(daniel)i(hillis)h(and)d(guy)g(l.)h(steele)g (jr.)k(data)13 b(parallel)j(algorithms.)j fj(communic)n(ations)14 b(of)168 924 y(the)j(a)o(cm)p fq(,)d(29\(12\):1170)o({118)o(3,)e(1986.) 75 1018 y([27])21 b(hpf)d(f)l(orum.)26 b fj(high)18 b(performanc)n(e)g (f)m(ortr)n(an)g(l)n(anguage)f(sp)n(e)n(ci\014c)n(ation)p fq(,)e(1.0)i(edition,)h(ma)o(y)f(3)168 1074 y(1993.)75 1169 y([28])k(f)l(ran\030)-20 b(cois)13 b(irigoin,)g(pierre)f(jouv)o (elot,)g(and)h(r)o(\023)-21 b(emi)12 b(t)l(riolet.)k(seman)o(tical)d (in)o(terpro)q(cedural)g(paral-)168 1225 y(lelization)d(:)15 b(an)h(o)o(v)o(erview)g(of)f(the)h(pips)g(pro)s(ject.)21 b(in)16 b fj(international)f(workshop)j(on)e(c)n(ompilers)168

1281 y(for)h(par)n(al)r(lel)f(computers)p fq(,)f(pages)g(199{212,)d (decem)o(b)q(er)k(1990.)75 1376 y([29])21 b(kenneth)c(e.)d(iv)o(erson.) 20 b fj(a)c(pr)n(o)n(gr)n(amming)g(l)n(anguage)p fq(.)j(john)d(wiley)g (and)f(sons,)g(inc.,)h(1962.)75 1470 y([30])21 b(w)l(a)o(yne)d(kelly)l (,)i(v)l(adim)e(maslo)o(v,)f(william)j(pugh,)e(ev)m(an)g(rosser,)g(t)l (atiana)f(shp)q(eisman,)i(and)168 1526 y(da)o(vid)d(w)l(onnacott.)j fj(the)d(ome)n(ga)g(libr)n(ary)f(-)i(v)m(ersion)e(1.00)p fq(,)g(april)i(1996.)i(in)o(terface)c(guide.)75 1620 y([31])21 b(e.)14 b(knapp.)k(an)c(exercise)h(in)g(the)f(formal)f(deriv) m(ation)j(of)d(parallel)i(programs:)e(maxim)o(um)g(\015o)o(ws)168 1677 y(in)19 b(graphs.)25 b fj(a)o(cm)17 b(t)m(r)n(ansactions)f(on)i (pr)n(o)n(gr)n(amming)g(l)n(anguages)f(and)h(systems)p fq(,)e(12\(2\):203{)168 1733 y(223,)e(april)j(1990.)75 1827 y([32])k(charles)i(h.)e(ko)q(elb)q(el,)j(da)o(vid)e(b.)g(lo)o(v)o (eman,)f(rob)q(ert)h(s.)g(sc)o(hreib)q(er,)h(guy)f(l.)g(steele,)g(and) 168 1884 y(mary)15 b(e.)f(zosel.)21 b fj(the)15 b(high)i(performanc)n (e)f(f)m(ortr)n(an)f(handb)n(o)n(ok)p fq(.)k(the)d(mit)f(press,)f (1994.)75 1978 y([33])21 b(c.)c(p)l(.)g(krusk)m(al,)h(l.)f(rudolph,)h (and)g(m.)e(snir.)26 b(the)18 b(p)q(o)o(w)o(er)e(of)h(parallel)i (pre\014x.)26 b fj(ieee)17 b(t)m(r)n(an-)168 2034 y(sactions)f(on)g(c)n (omputers)p fq(,)f(34\(10\):965{96)o(8,)d(octob)q(er)j(1985.)75 2128 y([34])21 b(vipin)j(kumar,)e(anan)o(th)g(grama,)e(ansh)o(ul)k (gupta,)d(and)h(george)f(karypis.)41 b fj(intr)n(o)n(duction)168 2185 y(to)19 b(p)n(ar)n(al)r(lel)e(c)n(omputing,)h(design)g(and)g (analysis)f(of)h(algorithms)p fq(.)26 b(the)18 b(benjamin/cummings)168 2241 y(publishing)g(compan)o(y)l(,)c(1994.)75 2335 y([35])21 b(vincen)o(t)15 b(lefeb)o(vre.)i(gestion)d(de)g(la)f(m)o(\023)-21 b(emoire)13 b(dans)g(les)h(programmes)f(parall)o(\023)-21 b(elis)o(\023)g(es.)17 b(t)l(ec)o(hnical)168 2392 y(rep)q(ort)f(rr)g (96/17,)d(lab)j(prism)g(-)f(univ)o(ersit)o(\023)-21 b(e)16 b(de)f(v)l(ersailles,)i(august)e(1996.)75 2486 y([36])21 b(christian)d(lengauer.)24 b(lo)q(op)17 b(parallelization)i(in)e(the)f (p)q(olytop)q(e)i(mo)q(del.)25 b(in)17 b(e.)f(best,)g(editor,)168 2542 y fj(concur'93,)g(lncs)e(715)p fq(,)i(pages)f(398{416.)e (springer-v)l(erlag,)j(june)g(1993.)p eop %%page: 120 122 120 121 bop 75 269 a fq(120)1326 b fl(bibliographie)75 397 y fq([37])21 b(v.)e(lo)q(ec)o(hner)g(and)f(c.)g(mongenet.)29 b(a)19 b(to)q(olb)q(o)o(x)f(for)g(a\016ne)g(recurrence)i(equations)e (paralleli-)168 453 y(zation.)29 b(in)19 b(b.)f(hertzb)q(erger)g(and)g (g.)f(serazzi,)i(editors,)f fj(int.)g(conf.)g(on)h(high-performanc)n(e) 168 510 y(computing)d(and)f(networking)p fq(,)e(pages)h(263{268.)e (springer)j(v)l(erlag,)f(ma)o(y)f(1995.)k(milan,)d(italy)l(.)75 607 y([38])21 b(masp)o(ar)11 b(computer)g(corp)q(oration.)i fj(maspar)g(mp-1)g(mpl)f(pr)n(o)n(gr)n(aming)h(manuals)p fq(,)d(decem)o(b)q(er)168 664 y(1991.)75 761 y([39])21 b(christophe)g(mauras.)32 b fn(alpha)8 b fj(:)20 b(un)h(langage)d(\023) -22 b(e)n(quationnel)20 b(p)n(our)h(la)f(c)n(onc)n(eption)f(et)i(la)f (pr)n(o-)168 818 y(gr)n(ammation)e(d'ar)n(chite)n(ctur)n(es)f(p)n(ar)n (al)r(l)o(\022)-22 b(eles)17 b(synchr)n(ones)p fq(.)22 b(phd)16 b(thesis,)h(univ)o(ersit)o(\023)-21 b(e)16 b(de)h(rennes)168 874 y(i,)f(1989.)75 972 y([40])21 b(dror)h(e.)g(ma)o(ydan,)g(saman)g(p) l(.)g(amarasinghe,)g(and)h(monica)g(s.)f(lam.)42 b(arra)o(y)22 b(data-\015o)o(w)168 1028 y(analysis)16 b(and)g(its)f(use)g(in)h(arra)o (y)e(priv)m(atization.)21 b(in)16 b fj(principles)e(of)j(pr)n(o)n(gr)n (amming)e(l)n(anguages)p fq(,)168 1085 y(1993.)75 1182 y([41])21 b(james)12 b(mcgra)o(w,)e(stephen)j(sk)o(edzielewski,)h (stephen)f(allan,)g(ro)q(d)f(oldeho)q(eft,)h(john)f(glauert,)168 1239 y(chris)18 b(kirkham,)f(bill)i(no)o(yce,)e(and)g(rob)q(ert)g (thomas.)25 b fj(sisal:)16 b(str)n(e)n(ams)h(and)h(iter)n(ations)f(in)

168 1295 y(a)i(single)f(assignement)f(language:)i(r)n(efer)n(enc)n(e)e (manual)h(version)h(1.2)p fq(.)28 b(la)o(wrence)18 b(liv)o(ermore)168 1352 y(national)e(lab)q(oratory)l(,)e(liv)o(ermore,)h(ca,)g(marc)o(h)g (1985.)75 1449 y([42])21 b(message)13 b(p)o(assing)h(in)o(terface)f(f)l (orum.)k fj(mpi)7 b(:)14 b(a)h(message-p)n(assing)e(interfac)n(e)g (standar)n(d)p fq(,)h(june)168 1506 y(1995.)75 1603 y([43])21 b(catherine)16 b(mongenet.)k(mappings)15 b(for)g(comm)o(unications)h (minimization)h(using)f(distribution)168 1660 y(and)i(alignmen)o(t.)28 b(in)19 b(lub)q(omir)g(bic,)f(wim)g(b\177)-23 b(ohm,)17 b(p)o(arask)o(ev)m(as)g(evripidiou,)i(and)f(jean-luc)168 1716 y(gaudiot,)d(editors,)g fj(pr)n(o)n(c)n(e)n(e)n(dings)f(of)i(ifip) f(wg)i(10.3)g(working)f(confer)n(enc)n(e)e(on)i(par)n(al)r(lel)g(a)o (r-)168 1772 y(chite)n(ctur)n(es)e(and)g(compilation)f(t)m(e)n (chniques,)f(p)m(a)o(ct'95)p fq(,)e(pages)j(185{193,)d(limassol,)j (cyprus,)168 1829 y(june)k(1995.)c(a)o(cm)i(press.)75 1926 y([44])21 b(carroll)16 b(morgan.)k fj(pr)n(o)n(gr)n(amming)c(fr)n (om)g(sp)n(e)n(ci\014c)n(ations)p fq(.)j(c.a.r.)c(hoare.)f(pren)o(tice) j(hall)f(ed.,)168 1983 y(endlew)o(o)q(o)q(d)h(cli\013s,)e(n.j.,)f (1990.)75 2080 y([45])21 b(nicolas)c(p)o(aris.)i fj(hyp)n(erc)d(do)n (cumentation)p fq(.)k(hyp)q(erparallel)d(t)l(ec)o(hnologies,)f(june)g (1993.)75 2178 y([46])21 b(guy-ren)o(\023)-21 b(e)21 b(p)o(errin.)35 b(p)o(arallel)21 b(programming)e(with)i fn(pei)p fq(.)35 b(in)21 b(christian)f(lengauer,)h(editor,)168 2234 y fj(dagsthul)c(seminar)f(on)g(l)n(o)n(op)g(par)n(al)r(lelization) p fq(,)d(april)k(1996.)75 2332 y([47])k(serge)c(p)o(etiton)f(and)g (nahid)h(emad.)23 b fj(a)16 b(data)i(p)n(ar)n(al)r(lel)f(scienti\014c)e (c)n(omputation)j(intr)n(o)n(duction)p fq(,)168 2388 y(v)o(olume)e(lncs)g(1132,)d(pages)i(45{62.)k(springer)d(v)l(erlag,)f (ma)o(y)f(1996.)75 2486 y([48])21 b(p)o(atrice)11 b(quin)o(ton)g(and)f (vincen)o(t)h(v)l(an)g(dongen.)g(the)g(mapping)g(of)f(linear)h (recurrence)g(equations)168 2542 y(on)16 b(regular)f(arra)o(ys.)j fj(the)e(journal)h(of)f(vlsi)f(signal)g(pr)n(o)n(c)n(essing)p fq(,)d(1:95{113,)h(1989.)p eop %%page: 121 123 121 122 bop 75 269 a fl(bibliographie)1329 b fq(121)75 397 y([49])21 b(p)o(atrice)c(quin)o(ton,)g(sanja)o(y)g(radjopadh)o(y)o (e,)f(and)h(doran)f(wilde.)26 b(on)18 b(deriving)g(data)e(parallel)168 453 y(co)q(de)c(from)e(a)g(functional)i(program.)f(in)g fj(pr)n(o)n(c)n(e)n(e)n(dings)f(of)i(the)g(9th)h(international)e(symp)n (osium)h(on)168 510 y(par)n(al)r(lel)17 b(pr)n(o)n(c)n(essing,)e (ipps'95)p fq(,)h(pages)g(766{773,)e(san)o(ta)i(barbara,)f(ca,)h(april) i(1995.)d(ieee)168 566 y(computer)g(so)q(ciet)o(y)h(press.)75 656 y([50])21 b(p)o(atrice)e(quin)o(ton,)h(doran)e(wilde,)i(and)g (sanja)o(y)e(ra)s(jopadh)o(y)o(e.)31 b(deriving)20 b(imp)q(erativ)o(e)g (co)q(de)168 712 y(from)i(functional)i(programs.)41 b(in)23 b fj(f)m(unctional)f(pr)n(o)n(gr)n(amming)h(l)n(anguages)f(and)h (computer)168 769 y(a)o(r)n(chite)n(ctur)n(es,)16 b(f)o(cp)m(a'95)p fq(,)d(pages)i(36{44.)e(a)o(cm)i(press,)f(june)j(1995.)75 858 y([51])k(sanja)o(y)10 b(ra)s(jopadh)o(y)o(e.)h(analysis)h(of)d (a\016ne)i(comm)o(unications)f(sp)q(eci\014cations.)k(in)d fj(ieee)f(symp)n(o-)168 914 y(sium)15 b(on)g(par)n(al)r(lel)f(and)h (distribute)n(d)h(pr)n(o)n(c)n(essing)p fq(,)11 b(pages)i(530{537.)f (ieee)i(computer)f(so)q(ciet)o(y)168 971 y(press,)i(decem)o(b)q(er)h (1993.)75 1060 y([52])21 b(rob)q(ert)i(s.)f(sc)o(hreib)q(er.)41 b fj(a)o(n)22 b(intr)n(o)n(duction)g(to)h(hpf)p fq(,)e(v)o(olume)i (lncs)f(1132,)f(pages)g(27{44.)168 1117 y(springer)c(v)l(erlag,)e(ma)o (y)f(1996.)75 1206 y([53])21 b(dpce)c(sub)q(committe.)28 b(data-parallel)18 b(c)g(extensions.)g(tec)o(hnical)h(rep)q(ort)e(1.6)f (x3j11/94-080.)168 1263 y(t)l(ec)o(hnical)h(rep)q(ort,)e(numerical)i(c) e(extensions)g(group)g(of)g(x3j11,)f(1994.)75 1352 y([54])21

b(thinking)c(mac)o(hines)f(corp)q(oration.)j fj(c*)d(pr)n(o)n(gr)n (amming)g(guide)p fq(,)f(no)o(v)o(em)o(b)q(er)g(1990.)75 1441 y([55])21 b(thinking)c(mac)o(hines)f(corp)q(oration.)j fj(cm)d(f)m(ortr)n(an)f(r)n(efer)n(enc)n(e)g(manual)p fq(,)f(decem)o(b)q(er)i(1992.)75 1531 y([56])21 b(eric)c(violard.)22 b fj(une)17 b(th)o(\023)-22 b(eorie)17 b(uni\014c)n(atric)n(e)f(p)n (our)h(la)g(c)n(onstruction)f(de)h(pr)n(o)n(gr)n(ammes)g(p)n(ar)n(al)r (l)o(\022)-22 b(eles)168 1587 y(p)n(ar)22 b(des)f(te)n(chniques)g(de)g (tr)n(ansformations)p fq(.)36 b(phd)21 b(thesis,)g(univ)o(ersit)o(\023) -21 b(e)21 b(de)g(f)l(ranc)o(he-com)o(t)o(\023)-21 b(e,)168 1644 y(octobre)16 b(1992.)75 1733 y([57])21 b(eric)e(violard.)31 b(data-parallelism)19 b(v)o(ersus)g(functional)g(programming)7 b(:)18 b(the)h(con)o(tribution)g(of)168 1790 y fn(pei)p fq(.)i(t)l(ec)o(hnical)c(rep)q(ort,)d(icps,)h(jan)o(uary)g(1995.)k (publication)e(in)o(terne)f(95-03.)75 1879 y([58])21 b(eric)e(violard)f(and)g(guy-ren)o(\023)-21 b(e)18 b(p)o(errin.)27 b fn(pei)7 b fq(:)18 b(a)f(single)i(unifying)g(mo)q(del)g(to)d(design)j (parallel)168 1935 y(programs.)38 b(in)22 b(arndt)g(bo)q(de,)g(mik)o(e) g(reev)o(e,)g(and)g(gottfried)f(w)l(olf,)g(editors,)g fj(p)m(arle)g(93,)168 1992 y(lncs)p fq(,)14 b(v)o(olume)h(694,)f(pages) h(500{516.)e(springer-v)l(erlag,)j(june)g(1993.)75 2081 y([59])21 b(eric)15 b(violard)f(and)g(guy-ren)o(\023)-21 b(e)14 b(p)o(errin.)k(reduction)d(in)g fn(pei)p fq(.)i(in)e(bruno)f (buc)o(h)o(b)q(erger)g(and)g(jens)168 2138 y(v)l(olk)o(ert,)k(editors,) g fj(lncs)p fq(,)e(v)o(olume)j(854,)e(pages)h(112{123.)d(conp)l(ar)k (94,)f(springer-v)l(erlag,)168 2194 y(septem)o(b)q(er)e(1994.)75 2284 y([60])21 b(pierre)16 b(w)l(eis)g(and)f(xa)o(vier)h(lero)o(y)l(.)k fj(l)n(e)15 b(langage)h fn(caml)p fq(.)j(in)o(ter)o(\023)-21 b(editions)16 b(-)f(iia,)h(1993.)75 2373 y([61])21 b(doran)14 b(wilde)h(and)f(sanja)o(y)g(ra)s(jopadh)o(y)o(e.)k(the)c(naiv)o(e)g (execution)i(of)d(a\016ne)h(recurrence)h(equa-)168 2429 y(tions.)31 b(in)19 b(p)o(eter)f(capp)q(ello,)i(catherine)f(mongenet,)f (guy-ren)o(\023)-21 b(e)19 b(p)o(errin,)g(p)o(atrice)f(quin)o(ton,)168 2486 y(and)g(yv)o(es)e(rob)q(ert,)h(editors,)g fj(applic)n(ation)g(sp)n (e)n(ci\014c)g(a)o(rr)n(ay)g(pr)n(o)n(c)n(essors,asap'95)p fq(,)d(pages)j(1{)168 2542 y(12.)e(ieee)g(computer)g(so)q(ciet)o(y)h (press,)e(august)h(1995.)p eop %%page: 122 124 122 123 bop 75 269 a fq(122)1326 b fl(bibliographie)75 397 y fq([62])21 b(doran)10 b(wilde)i(and)f(sanja)o(y)f(ra)s(jopadh)o (y)o(e.)i(memory)e(reuse)h(analysis)h(in)f(the)g(p)q(olyhedral)h(mo)q (del.)168 453 y(in)18 b(luc)f(boug)o(\023)-21 b(e,)16 b(pierre)h(f)l(raignaud,)f(anne)i(mignotte,)d(and)i(yv)o(es)g(rob)q (ert,)f(editors,)h fj(eur)o(o-)168 510 y(p)m(ar'96)h(par)n(al)r(lel)g (pr)n(o)n(c)n(essing)p fq(,)c(v)o(olume)k(i,)f(pages)g(389{397.)e (springer-v)l(erlag,)j(lncs)g(1123,)168 566 y(1996.)75 660 y([63])j(doran)13 b(k.)h(wilde.)19 b(a)13 b(library)i(for)e(doing)h (p)q(olyhedral)h(op)q(erations.)j(t)l(ec)o(hnical)d(rep)q(ort,)e (irisa,)168 717 y(decem)o(b)q(er)j(1993.)j(pi)c(785.)p eop %%page: 123 125 123 124 bop 1778 269 a fq(123)75 709 y fi(annexe)33 b(a)75 918 y fp(preuv)m(es)39 b(des)f(propri)m(\023)-56 b(et)m(\023)g(es)75 1141 y fj(pr)n(euve.)16 b(\(pr)n(opri)o(\023)-22 b(et)o(\023)g(e)17 b(1,)g(p)n(age)g(23\))f fq(si)g fk(y)g fq(est)g(une)g(expression)h (fonction)f(de)h fk(x)p fq(,)e(d'apr)o(\022)-21 b(es)15 b(la)h(d)o(\023)-21 b(e\014nition)75 1197 y(des)16 b(op)o(\023)-21 b(erations,)13 b(il)k(existe)e(une)h(bijection)h fm(\014)g fq(telle)g(que)8 b(:)619 1302 y fm(\033)645 1309 y fr(y)675 1302 y fq(=)13 b fm(\033)749 1309 y fr(x)777 1302 y ff(\016)c

fm(\014)837 1284 y fx(\000)p fg(1)892 1302 y ff(^)i fm(dom)p fq(\()p fm(v)1059 1309 y fr(x)1075 1302 y fq(\))i ff(\022)g fm(dom)p fq(\()p fm(\014)r fq(\))75 1407 y(mon)o(trons)h(alors)h(qu'il) h(existe)f(une)h(bijection)h fm(g)f fq(telle)g(que)g(la)f(paire)h(de)f (bijections)i(\()p fm(g)11 b ff(\016)e fm(\014)r(;)f(g)r fq(\))14 b(v)o(\023)-21 b(eri\014e)75 1464 y(les)16 b(trois)f(prop)q (ositions)h(\()p fm(a)p fq(\),)e(\()p fm(b)p fq(\))g(et)h(\()p fm(c)p fq(\))7 b(:)107 1561 y(\()p fm(a)p fq(\))22 b(s')o(\023)-21 b(ecrit)14 b fm(\033)349 1568 y fr(x)376 1561 y ff(\016)c fm(\014)437 1544 y fx(\000)p fg(1)492 1561 y ff(\016)g fm(g)549 1544 y fx(\000)p fg(1)605 1561 y fq(=)j fm(\033)679 1568 y fr(y)707 1561 y ff(\016)d fm(g)764 1544 y fx(\000)p fg(1)808 1561 y fq(,)k(qui)i(est)f(v)o(\023)-21 b(eri\014)o(\023)g(ee) 15 b(quelquesoit)h fm(g)r fq(.)111 1658 y(\()p fm(b)p fq(\))22 b(s')o(\023)-21 b(ecrit)14 b fm(dom)p fq(\()p fm(v)449 1665 y fr(x)466 1658 y fq(\))g ff(\022)f fm(dom)p fq(\()p fm(g)e ff(\016)f fm(\014)r fq(\).)15 b(d'apr)o(\022)-21 b(es)14 b fm(dom)p fq(\()p fm(v)1083 1665 y fr(x)1100 1658 y fq(\))f ff(\022)h fm(dom)p fq(\()p fm(\014)r fq(\),)h(on)g(p)q (eut)i(conclure)g(que)f(\()p fm(b)p fq(\))189 1715 y(est)f(v)o(\023)-21 b(eri\014)o(\023)g(ee)14 b(p)q(our)h(toute)g(bijection)i fm(g)f fq(telle)h(que)e fm(img)r fq(\()p fm(\014)r fq(\))c ff(\022)i fm(dom)p fq(\()p fm(g)r fq(\).)111 1812 y(\()p fm(c)p fq(\))22 b(s')o(\023)-21 b(ecrit)14 b fm(dom)p fq(\()p fm(v)449 1819 y fr(y)466 1812 y fq(\))e ff(\022)h fm(dom)p fq(\()p fm(g)r fq(\).)75 1909 y(on)g(p)q(eut)h(donc)f (conclure)h(que)f(toute)f(bijection)i fm(g)g fq(telle)g(que)g fm(img)r fq(\()p fm(\014)r fq(\))5 b ff([)g fm(dom)p fq(\()p fm(v)1440 1916 y fr(y)1456 1909 y fq(\))12 b ff(\022)h fm(dom)p fq(\()p fm(g)r fq(\))e(satisfait)75 1966 y(les)16 b(conditions.)75 2022 y fa(\003)75 2195 y fj(pr)n(euve.\(pr)n(opri)o(\023)-22 b(et)o(\023)g(e)17 b(2,)g(p)n(age)g(31\))g fq(si)g fm(dom)p fq(\()p fm(\033)859 2202 y fr(x)875 2195 y fq(\))d ff(\022)h fm(img)r fq(\()p fk(h)p fq(\),)f(alors)i(le)h(c)o(hamp)f(de)g(donn)o(\023)-21 b(ees)16 b(\()p fk(h)1705 2179 y fq(-1)1750 2195 y fk(::)7 b(x)p fq(\))75 2252 y(est)k(correctemen)o(t)h(d)o(\023)-21 b(e\014ni,)11 b(car)h fm(dom)p fq(\()p fm(v)742 2259 y fr(x)759 2252 y fq(\))g ff(\022)h fm(dom)p fq(\()p fm(\033)967 2259 y fr(x)984 2252 y fq(\))f ff(\022)h fm(img)r fq(\()p fk(h)p fq(\).)c(en)j(le)g(renomman)o(t)f fk(x)1598 2235 y fx(0)1610 2252 y fq(,)g(nous)h(a)o(v)o(ons)75 2308 y(alors)7 b(:)100 2352 y fk(x)100 2408 y fq(=)15 b fk(h)10 b ff(\016)g fk(h)241 2392 y fq(-1)286 2408 y fk(::)d(x)118 b fq(\()p fm(dom)p fq(\()p fm(\033)631 2415 y fr(x)648 2408 y fq(\))12 b ff(\022)h fm(img)r fq(\()p fk(h)p fq(\)\))100 2465 y(=)i fk(h)8 b(::)f(\(h)285 2448 y fq(-1)330 2465 y fk(::)h(x\))100 2521 y fq(=)15 b fk(h)8 b(::)f(x)261 2505 y fx(0)p eop %%page: 124 126 124 125 bop 75 269 a fq(124)772 b fl(annexe)15 b(a.)31 b(preuves)15 b(des)g(pr)o(opri)1731 257 y(\023)1725 269 y(et)1795 257 y(\023)1789 269 y(es)75 397 y fq(les)h(c)o(hamps)f fk(x)g fq(et)g fk(x)436 380 y fx(0)463 397 y fq(son)o(t)f(fortemen)o(t) f(\023)-21 b(equiv)m(alen)o(ts)16 b(car)f fm(dom)p fq(\()p fm(\033)1207 414 y fr(x)1222 397 y fx(0)s fq(\))e(=)g fm(dom)p fq(\()p fm(\033)1444 404 y fr(x)1470 397 y ff(\016)d fk(h)p fq(\))i ff(\022)h fm(dom)p fq(\()p fk(h)p fq(\).)75 453 y fa(\003)75 629 y fj(pr)n(euve.\(pr)n(opri)o(\023)-22 b(et)o(\023)g(e)16 b(3,)h(32\))e fq(nous)g(utilisons)i(la)e(d)o(\023)

-21 b(e\014nition)16 b(10.)e(soit)i fk(x')f fq(=)g fk(h)10 b ff(\016)g fk(h)e(::)f(x)p fq(.)143 737 y({)23 b fk(x)213 721 y fx(0)234 737 y fq(est)10 b(correctemen)o(t)g(d)o(\023)-21 b(e\014ni.)10 b(en)g(e\013et,)g fk(x)896 721 y fx(0)917 737 y fq(est)g(correctemen)o(t)g(d)o(\023)-21 b(e\014ni)11 b(ssi)f fm(dom)p fq(\()p fm(v)1553 744 y fr(x)1570 737 y fq(\))i ff(\022)h fm(dom)p fq(\()p fk(h)d ff(\016)f fk(h)p fq(\).)189 794 y(p)o(ar)17 b(d)o(\023)-21 b(e\014nition)18 b(de)g(la)g(comp)q(osition)h(de)f(fonctions)g fm(dom)p fq(\()p fk(h)9 b ff(\016)h fk(h)p fq(\))17 b(=)g fm(dom)p fq(\()p fk(h)p fq(\))11 b ff(\\)h fk(h)1617 777 y fq(-1)1654 794 y fq(\()p fm(dom)p fq(\()p fk(h)p fq(\))n(\).)189 850 y(si)i fm(img)r fq(\()p fk(h)p fq(\))d ff(\022)i fm(dom)p fq(\()p fk(h)p fq(\))g(alors)h fm(dom)p fq(\()p fk(h)p fq(\))6 b ff(\\)i fk(h)920 834 y fq(-1)957 850 y fq(\()p fm(dom)p fq(\()p fk(h)p fq(\))o(\))14 b(=)g fm(dom)p fq(\()p fk(h)p fq(\))6 b ff(\\)i fk(h)1415 834 y fq(-1)1453 850 y fq(\()p fm(img)r fq(\()p fk(h)p fq(\))m(\))14 b(=)g fm(dom)p fq(\()p fk(h)p fq(\))o(.)189 906 y(nous)i(a)o(v)o(ons)g (bien)i fm(dom)p fq(\()p fm(v)658 913 y fr(x)675 906 y fq(\))d ff(\022)h fm(dom)p fq(\()p fk(h)p fq(\))f(car)i(nous)g(a)o(v) o(ons)e fm(dom)p fq(\()p fm(v)1358 913 y fr(x)1375 906 y fq(\))g ff(\022)h fm(dom)p fq(\()p fm(\033)1589 913 y fr(x)1606 906 y fq(\))g(\()p fk(x)g fq(est)h(cor-)189 963 y(rectemen)o(t)e(d)o(\023)-21 b(e\014ni\))15 b(et)g fm(dom)p fq(\()p fm(\033)724 970 y fr(x)741 963 y fq(\))d ff(\022)h fm(dom)p fq(\()p fk(h)p fq(\))h(\(h)o(yp)q(oth)o(\022)-21 b(ese\).)143 1071 y({)23 b fk(x)213 1055 y fx(0)240 1071 y fq(est)16 b(fortemen)o(t)d(\023)-21 b(equiv)m(alen)o(t)17 b(\022)-23 b(a)15 b fk(h)8 b(::)f(x)p fq(.)16 b(en)g(e\013et)f fk(x)1110 1055 y fx(0)1137 1071 y fq(est)h(fortemen)o(t)e(\023)-21 b(equiv)m(alen)o(t)16 b(\022)-23 b(a)16 b fk(h)7 b(::)h(x)15 b fq(ssi)189 1127 y fm(dom)p fq(\()p fm(\033)319 1134 y fr(x)346 1127 y ff(\016)9 b fk(h)402 1111 y fq(-1)440 1127 y fq(\))18 b ff(\022)h fm(dom)p fq(\()p fk(h)p fq(\))o(.)f(nous)h (a)o(v)o(ons)f(bien)i fm(dom)p fq(\()p fm(\033)1186 1134 y fr(x)1213 1127 y ff(\016)9 b fk(h)1269 1111 y fq(-1)1307 1127 y fq(\))18 b ff(\022)h fm(dom)p fq(\()p fk(h)1525 1111 y fq(-1)1561 1127 y fq(\))g(et)g fm(img)r fq(\()p fk(h)p fq(\))d ff(\022)189 1184 y fm(dom)p fq(\()p fk(h)p fq(\))e(\(h)o(yp)q(oth)o(\022)-21 b(ese\))14 b(impliquen)o(t)j fm(dom)p fq(\()p fm(\033)955 1191 y fr(x)982 1184 y ff(\016)10 b fk(h)1039 1167 y fq(-1)1076 1184 y fq(\))i ff(\022)h fm(dom)p fq(\()p fk(h)p fq(\))o(.)143 1292 y({)23 b(soit)f fm(e)p fq(\()p fk(x)352 1276 y fx(0)363 1292 y fq(\))i(=)g fk(h)488 1276 y fq(-1)533 1292 y fk(::)7 b(x')p fq(.)21 b(cette)h(expression)g(est)g(correctemen)o(t)f(d)o(\023)-21 b(e\014nie)23 b(car)f fm(dom)p fq(\()p fm(v)1742 1299 y fr(x)1757 1291 y fm(0)1770 1292 y fq(\))h ff(\022)189 1349 y fm(dom)p fq(\()p fk(h)317 1332 y fq(-1)353 1349 y fq(\),)15 b(c'est-\022)-23 b(a-dire)15 b fm(dom)p fq(\()p fm(v)757 1356 y fr(x)784 1349 y ff(\016)10 b fk(h)841 1332 y fq(-1)888 1349 y ff(\016)g fk(h)945 1332 y fq(-1)982 1349 y fq(\))j ff(\022)g fm(dom)p fq(\()p fk(h)1189 1332 y fq(-1)1225 1349 y fq(\))i(qui)h(est)f(vrai.)189 1431 y(nous)g(dev)o(ons)g(mon)o(trer)f fm(e)p fq(\()p fk(x)689 1414 y fx(0)701 1431 y fq(\))g(=)i fk(h)7 b(::)h(x)p fq(.)14 b(nous)h(a)o(v)o(ons)g(bien)214 1487 y fm(e)p fq(\()p fk(x)277 1471 y fx(0)288 1487 y fq(\))49 b(=)i fk(h)465 1471 y fq(-1)509 1487 y fk(::)8 b(x')355 1544

y fq(=)51 b fk(h)465 1527 y fq(-1)509 1544 y fk(::)8 b(\(h)h ff(\016)h fk(h)e(::)g(x\))49 b fq(\(d)o(\023)-21 b(ef.\))355 1600 y(=)51 b fk(h)465 1584 y fq(-1)512 1600 y ff(\016)10 b fk(h)g ff(\016)f fk(h)f(::)f(x)118 b fq(\(7a\),\(7b\)) 355 1657 y(=)51 b fk(h)7 b(::)g(x)189 1760 y fq(d'autre)14 b(part)214 1816 y fm(e)p fq(\()p fk(h)7 b(::)g(x)p fq(\))49 b(=)i fk(h)540 1800 y fq(-1)584 1816 y fk(::)8 b(\(h)f(::)h(x\))430 1873 y fq(=)51 b fk(h)540 1856 y fq(-1)587 1873 y ff(\016)10 b fk(h)d(::)h(x)430 1929 y fq(=)51 b fk(x)309 b fq(\(car)14 b fm(dom)p fq(\()p fm(v)1068 1936 y fr(x)1085 1929 y fq(\))e ff(\022)h fm(dom)p fq(\()p fk(h)p fq(\))h(et)h fm(dom)p fq(\()p fm(\033)1506 1936 y fr(x)1523 1929 y fq(\))d ff(\022)h fm(dom)p fq(\()p fk(h)p fq(\)\))146 2033 y fa(\003)75 2208 y fj(pr)n(euve.\(pr)n(opri)o(\023)-22 b(et)o(\023)g(e)16 b(4,)h(p)n(age)f(32\))106 2316 y(\(1\))22 b fq(soit)h fk(e)314 2300 y fx(0)348 2316 y fq(le)g(c)o(hamp)g fk(\(h)604 2300 y fq(-1)649 2316 y fk(::)8 b(e)o(\))15 b fa(c)h fk(g)p fq(.)22 b(supp)q(osons)i fk(h)p fq(\()p fm(dom)p fq(\()p fk(g)p fq(\)\))f ff(\022)i fm(dom)p fq(\()p fm(\033)1528 2323 y fr(e)1545 2316 y fq(\))g ff(\022)g fm(img)r fq(\()p fk(h)p fq(\))c(et)189 2373 y fm(dom)p fq(\()p fm(v)315 2380 y fr(e)331 2373 y fq(\))h(=)g fm(dom)p fq(\()p fk(g)p fq(\))f(=)h fk(h)p fq(\()p fm(img)r fq(\()p fk(g)p fq(\)\).)c(alors,)i fk(e)1045 2356 y fx(0)1078 2373 y fq(est)g(bien)i(d)o(\023)-21 b(e\014ni)21 b(car)g fm(dom)p fq(\()p fm(v)1595 2380 y fr(e)1612 2373 y fq(\))g ff(\022)i fm(img)r fq(\()p fk(h)p fq(\))189 2429 y(\(car)18 b fm(dom)p fq(\()p fm(v)412 2436 y fr(e)429 2429 y fq(\))h ff(\022)g fm(dom)p fq(\()p fm(\033)650 2436 y fr(e)667 2429 y fq(\)\),)f fm(dom)p fq(\()p fk(g)p fq(\))g ff(\022)h fk(h)976 2413 y fq(-1)1014 2429 y fq(\()p fm(dom)p fq(\()p fm(\033)1162 2436 y fr(e)1178 2429 y fq(\)\))f(\(car)h fk(h)p fq(\()p fm(dom)p fq(\()p fk(g)p fq(\)\))e ff(\022)j fm(dom)p fq(\()p fm(\033)1738 2436 y fr(e)1754 2429 y fq(\)\))f(et)189 2486 y fm(img)r fq(\()p fk(g)p fq(\))10 b ff(\022)j fk(h)411 2469 y fq(-1)449 2486 y fq(\()p fm(dom)p fq(\()p fm(v)593 2493 y fr(e)609 2486 y fq(\)\))i(\(car)f fm(dom)p fq(\()p fm(v)879 2493 y fr(e)896 2486 y fq(\))e(=)h fm(dom)p fq(\()p fk(g)p fq(\)\).)p eop %%page: 125 127 125 126 bop 1778 269 a fq(125)189 397 y(nous)15 b(a)o(v)o(ons)f(alors)7 b(:)217 441 y fk(e)214 497 y fq(=)15 b fk(h)10 b ff(\016)g fk(h)355 481 y fq(-1)400 497 y fk(::)d(e)465 b fq(\(car)14 b fm(dom)p fq(\()p fm(\033)1167 504 y fr(e)1184 497 y fq(\))e ff(\022)h fm(img)r fq(\()p fk(h)p fq(\)\))214 554 y(=)i fk(h)7 b(::)h(\(h)399 537 y fq(-1)444 554 y fk(::)g(e)o(\))214 610 y fq(=)15 b fk(h)7 b(::)h(\(\(h)423 594 y fq(-1)468 610 y fk(::)f(e\))24 b fa(c)g fk(g)10 b ff(\016)g fk(g)745 594 y fq(-1)782 610 y fk(\))138 b fq(\(car)14 b fm(dom)p fq(\()p fm(v)1163 617 y fr(e)1180 610 y fq(\))e(=)h fm(dom)p fq(\()p fk(g)p fq(\)\))214 666 y(=)i fk(h)7 b(::)h(\(\(\(h)447 650 y fq(-1)492 666 y fk(::)f(e\))24 b fa(c)g fk(g\))g fa(c)g fk(g)833 650 y fq(-1)870 666 y fk(\))50 b fq(\(car)14 b fk(h)p fq(\()p fm(dom)p fq(\()p fk(g)p fq(\)\))d ff(\022)i fm(dom)p fq(\()p fm(\033)1432 673 y fr(e)1449 666 y fq(\)\))214 723 y(=)i fk(h)7 b(::)h(\(e)399 706 y fx(0)434 723 y fa(c)24 b fk(g)517 706 y fq(-1)554 723 y fk(\))189 794 y fq(de)e(la)g(caract)o(\023)-21 b(erisation)21 b(de)i(l')o(\023)-21 b(equiv)m(alence)24 b(faible,)f fk(e)f fq(et)g fk(e')g

fq(son)o(t)g(faiblemen)o(t)g(\023)-21 b(equiv)m(alen)o(ts)189 851 y(car)17 b fm(dom)p fq(\()p fm(v)393 858 y fr(e)408 849 y fm(0)421 851 y fq(\))e(=)i fm(dom)p fq(\()p fk(g)p fq(\))d(=)j fm(img)r fq(\()p fk(g)840 834 y fq(-1)875 851 y fq(\).)g(donc,)f(d'apr)o(\022)-21 b(es)16 b(la)i(d)o(\023)-21 b(e\014nition)18 b(10,)e(nous)h(concluons)189 907 y fk(p)12 b ff(v)h fk(p)p ff(f)p fm(s)s fq([)p fk(e)p ff(n)p fk(h)6 b(::)h(\(e)24 b fa(c)g fk(g)651 891 y fq(-1)688 907 y fk(\))p fq(])p ff(g)p fq(.)106 1001 y fj(\(2\))e fq(soit)10 b fk(e)301 984 y fx(0)323 1001 y fq(le)h(c)o(hamp)f fk(h)530 984 y fq(-1)575 1001 y fk(::)d(\(e)23 b fa(c)i fk(g)o(\))p fq(.)10 b(supp)q(osons)h fm(dom)p fq(\()p fm(v)1176 1008 y fr(e)1193 1001 y fq(\))h(=)h fm(img)r fq(\()p fk(g)p fq(\))8 b(et)i fm(dom)p fq(\()p fk(g)p fq(\))i ff(\022)h fm(dom)p fq(\()p fm(\033)1803 1008 y fr(e)1819 1001 y fq(\))g ff(\022)189 1057 y fm(img)r fq(\()p fk(h)p fq(\).)k(alors,)i fk(e)520 1041 y fx(0)550 1057 y fq(est)g(correctemen)o(t)g(d)o(\023)-21 b(e\014ni)20 b(car)f fm(dom)p fq(\()p fk(g)p fq(\))f ff(\022)i fm(img)r fq(\()p fk(h)p fq(\))d(\()p fk(h)i fq(est)g(une)h(in)o(v)o(erse)189 1114 y(droite)15 b(de)h fk(g)p fq(\),)e fm(dom)p fq(\()p fk(g)p fq(\))d ff(\022)i fm(dom)p fq(\()p fm(\033)785 1121 y fr(e)802 1114 y fq(\))i(et)g fm(img)r fq(\()p fk(g)p fq(\))c ff(\022)i fm(dom)p fq(\()p fm(v)1213 1121 y fr(e)1230 1114 y fq(\).)189 1189 y(nous)i(a)o(v)o(ons) f(alors)7 b(:)217 1233 y fk(e)214 1289 y fq(=)15 b fk(e)g fa(c)h fk(g)10 b ff(\016)f fk(g)444 1273 y fq(-1)938 1289 y fq(\(car)14 b fm(dom)p fq(\()p fm(v)1157 1296 y fr(e)1174 1289 y fq(\))e(=)h fm(img)r fq(\()p fk(g)p fq(\)\))214 1346 y(=)i fk(\(e)24 b fa(c)g fk(g\))15 b fa(c)g fk(g)532 1329 y fq(-1)927 1346 y fq(\(car)g fm(dom)p fq(\()p fk(g)p fq(\))c ff(\022)i fm(dom)p fq(\()p fm(\033)1356 1353 y fr(e)1373 1346 y fq(\)\))214 1402 y(=)i fk(\(h)10 b ff(\016)g fk(h)379 1386 y fq(-1)424 1402 y fk(::)e(\(e)23 b fa(c)h fk(g\)\))15 b fa(c)h fk(g)772 1386 y fq(-1)934 1402 y fq(\(car)e fm(dom)p fq(\()p fm(\033)1157 1409 y fr(e)1174 1402 y fq(\))e ff(\022)h fm(img)r fq(\()p fk(h)p fq(\)\))214 1459 y(=)i fk(\(h)8 b(::)f(\(h)423 1442 y fq(-1)468 1459 y fk(::)h(\(e)24 b fa(c)g fk(g\)\)\))15 b fa(c)g fk(g)840 1442 y fq(-1)214 1515 y fq(=)g fk(\(h)8 b(::)f(e)399 1498 y fx(0)411 1515 y fk(\))15 b fa(c)g fk(g)524 1498 y fq(-1)189 1586 y fq(de)22 b(la)g(caract)o(\023)-21 b(erisation)21 b(de)i(l')o(\023)-21 b(equiv)m(alence)24 b(faible,)f fk(e)f fq(et)g fk(e')g fq(son)o(t)g(faiblemen)o(t)g(\023) -21 b(equiv)m(alen)o(ts)189 1643 y(puisque)16 b fk(h)p fq(\()p fm(dom)p fq(\()p fm(v)522 1650 y fr(e)537 1641 y fm(0)550 1643 y fq(\)\))c(=)h fk(h)p fq(\()p fk(h)712 1626 y fq(-1)749 1643 y fq(\()p fm(dom)p fq(\()p fk(g)p fq(\)\)\))d(=)j fm(dom)p fq(\()p fk(g)p fq(\))f(=)g fm(img)r fq(\()p fk(g)1334 1626 y fq(-1)1370 1643 y fq(\).)189 1699 y(donc,)i fk(p)f ff(v)g fk(p)p ff(f)p fm(s)s fq([)p fk(e)p ff(n)p fk(\(h)6 b(::)h(e\))15 b fa(c)h fk(g)789 1683 y fq(-1)826 1699 y fq(])p ff(g)f fq(d'apr)o(\022)-21 b(es)14 b(la)h(d)o(\023)-21 b(e\014nition)16 b(10.)146 1793 y fa(\003)p eop %%page: 126 128 126 127 bop 75 269 a fq(126)772 b fl(annexe)15 b(a.)31 b(preuves)15 b(des)g(pr)o(opri)1731 257 y(\023)1725 269 y(et)1795 257 y(\023)1789 269 y(es)p eop %%page: 127 129 127 128 bop 1778 269 a fq(127)75 715 y fi(annexe)33 b(b)75

930 y fp(t)-10 b(est)39 b(d')m(\023)-56 b(equiv)-6 b(alence)39 b(forte)146 1159 y fq(nous)14 b(a)o(v)o(ons)g(vu)h(que)g(la)h (transformation)d(de)i(programmes)f(est)h(souv)o(en)o(t)f(fond)o(\023) -21 b(ee)14 b(sur)h(l'applica-)75 1216 y(tion)j(de)h(c)o(hangemen)o(t)f (de)g(base.)g(sans)f(^)-21 b(etre)17 b(sp)o(\023)-21 b(eci\014que)19 b(\022)-23 b(a)17 b fn(pei)p fq(,)h(mais)g(au)g(con)o (traire)f(p)q(ouv)m(an)o(t)h(^)-21 b(etre)75 1272 y(fertile)21 b(plus)h(g)o(\023)-21 b(en)o(\023)g(eralemen)o(t)18 b(en)j (construction)g(de)f(programmes)g(\(par)f(exemple)j(de)f(programmes)75 1329 y(hpf)g(corresp)q(ondan)o(ts)h(\022)-23 b(a)21 b(des)h(programmes) e fn(pei)i fq(fortemen)o(t)d(\023)-21 b(equiv)m(alen)o(ts\),)22 b(cette)f(constatation)75 1385 y(p)q(eut)c(mener)f(\022)-23 b(a)16 b(des)h(pratiques)f(in)o(t)o(\023)-21 b(eressan)o(tes)16 b(par)f(\\analogies")i(en)o(tre)f(progammes,)f(p)q(our)h(d)o(\023)-21 b(ecider)75 1442 y(que)19 b(deux)h(programmes)e(son)o(t)f(\023)-21 b(equiv)m(alen)o(ts,)19 b(ou)g(bien)i(v)m(alider)f(une)g(in)o(tuition)g (qu'un)g(programme)75 1498 y(donn)o(\023)-21 b(e)15 b(calcule)i(bien)f (ce)g(qu'on)f(p)q(ense.)146 1562 y(nous)g(exp)q(osons)g(ici)i(une)e (solution)h(p)q(ermettan)o(t)f(de)g(d)o(\023)-21 b(eterminer,)14 b(\023)-21 b(etan)o(t)13 b(donn)o(\023)-21 b(e)15 b(deux)h(syst)o(\022) -21 b(emes)75 1618 y(d')o(\023)g(equations)20 b(r)o(\023)-21 b(ecurren)o(tes)20 b(a)o(y)o(an)o(t)f(une)j(structure)d(\023)-21 b(equiv)m(alen)o(te)22 b(\(seules)f(les)h(fonctions)f(de)g(d)o(\023)-21 b(ep)q(en-)75 1674 y(dances)15 b(di\013)o(\022)-21 b(eren)o(t\))13 b(si)i(l'un)g(p)q(eut)f(^)-21 b(etre)13 b(obten)o(u)i(de)f(l'autre)g (par)h(un)f(c)o(hangemen)o(t)h(de)f(base)h(global)g(sur)75 1731 y(le)i(programme.)d(nous)i(ne)h(consid)o(\023)-21 b(erons)15 b(ici)j(que)e(le)h(cas)f(d'un)g(c)o(hangemen)o(t)g(de)g (base)g(exprim)o(\023)-21 b(e)16 b(sous)75 1787 y(la)h(forme)f(d'une)i (fonction)f(a\016ne,)f(ainsi)i(que)f(des)g(d)o(\023)-21 b(ep)q(endances)18 b(a\016nes)f(dans)g(l')o(\023)-21 b(enonc)o(\023)g(e.)15 b(dans)h(ces)75 1844 y(conditions,)h(le)f(probl) o(\022)-21 b(eme)16 b(revien)o(t)g(\022)-23 b(a)16 b(r)o(\023)-21 b(esoudre)15 b(un)h(syst)o(\022)-21 b(eme)15 b(lin)o(\023)-21 b(eaire,)16 b(p)q(our)g(lequel)i(nous)e(utilisons)75 1900 y fn(maple)p fq([11].)146 1964 y(bien)e(que)g(cette)f(id)o(\023) -21 b(ee)14 b(ne)g(soit)f(qu'une)g(\023)-21 b(ebauc)o(he)13 b(de)h(r)o(\023)-21 b(e\015exion)14 b(sur)f(des)h(tests)f(d')o(\023)-21 b(equiv)m(alence)15 b(plus)75 2020 y(g)o(\023)-21 b(en)o(\023)g(eraux,) 15 b(cette)j(fonctionnalit)o(\023)-21 b(e)17 b(p)q(ourrait)g(^)-21 b(etre)16 b(implan)o(t)o(\023)-21 b(ee)18 b(assez)f(facilemen)o(t)i (dans)e(l'en)o(vironne-)75 2077 y(men)o(t)e(de)h(transformations)d fn(pei)p fq(.)146 2197 y(le)21 b(formalisme)f(utilis)o(\023)-21 b(e)22 b(p)q(our)f(repr)o(\023)-21 b(esen)o(ter)19 b(ces)h(\023)-21 b(equations)20 b(imp)q(orte)h(p)q(eu,)g(et)f(nous)h(utilisons)75 2253 y fn(alpha)f fq(dans)h(cet)f(exemple.)h(etan)o(t)e(donn)o(\023)-21 b(e)20 b(les)g(deux)h(programmes)e fk(cholesky1)g fq(et)h fk(cholesky2)75 2309 y fq(suiv)m(an)o(ts,)c(nous)f(c)o(herc)o(hons)h (\022)-23 b(a)15 b(sa)o(v)o(oir)g(si)h(ils)g(son)o(t)e(\023)-21 b(equiv)m(alen)o(ts.)16 b(une)g(condition)g(su\016san)o(te)f(est)h (qu'il)75 2366 y(existe)g(un)f(c)o(hangemen)o(t)g(de)h(base)f(p)q (ermettan)o(t)g(de)g(passer)g(de)h(l'un)g(\022)-23 b(a)15 b(l'autre.)146 2486 y(nous)i(dirons)h(que)f(l')o(\023)-21 b(enonc)o(\023)g(e)16 b fk(cholesky2)g fq(p)q(eut)h(^)-21 b(etre)16 b(obten)o(u)i(de)f fk(cholesky1)p fq(,)f(si)i(il)g(existe)g (une)75 2542 y(bijection)f fm(h)f fq(telle)h(que,)f(p)q(our)g(toute)f (d)o(\023)-21 b(ep)q(endance)17 b fm(f)996 2549 y fw(i)1025 2542 y fq(de)g fk(cholesky1)p fq(,)d fm(f)1352 2549 y fw(i)1379 2542 y fq(=)g fm(h)1454 2526 y fx(\000)p fg(1)1509 2542 y ff(\016)c fm(g)1564 2549 y fw(i)1588 2542 y ff(\016)h

fm(h)p fq(,)k(o)q(\022)-24 b(u)16 b fm(g)1762 2549 y fw(i)1791 2542 y fq(est)p eop %%page: 128 130 128 129 bop 75 269 a fq(128)720 b fl(annexe)16 b(b.)30 b(test)15 b(d')1344 257 y(\023)1338 269 y(equiv)-5 b(alence)15 b(f)o(or)l(te)75 397 y fq(la)h(d)o(\023)-21 b(ep)q(endance)16 b(corresp)q(ondan)o(te)f(dans)g fk(cholesky2)p fq(.)f(de)h(plus,)h(p)q (our)f(v)o(\023)-21 b(eri\014er)16 b(l')o(\023)-21 b(equiv)m(alence)17 b(forte,)75 453 y(une)f(m)o(^)-21 b(eme)14 b(relation)i(doit)f(exister) h(en)o(tre)f(les)h(domaines)g(des)f(v)m(ariables)i(\()p fm(v)d fq(=)f fm(v)1472 437 y fx(0)1493 453 y ff(\016)d fm(h)1552 437 y fx(\000)p fg(1)1597 453 y fq(\).)p 146 529 1704 2 v 145 1396 2 867 v 170 593 a fu(system)21 b(cholesky1)f(:)i({)f(n)h(|)f(n>=1)g(})497 643 y(\()h(a)g(:)f({)h(i,j)f (|)g(1<=i<=j;)g(1<=j<=n)f(})i(of)f(integer)f(\))323 693 y(returns)g(\()i(l)g(:)f({)h(i,j)f(|)g(1<=i<=n;)g(1<=j<=i)f(})i(of)f (integer)f(\);)170 792 y(var)236 842 y(l)43 b(:)22 b({)f(i,j,k)g(|)h (j<=i<=n;)e(-1<=k<=j-1;)f(1<=j)i(})h(of)f(integer;)170 942 y(let)236 992 y(l[i,j,k])42 b(=)21 b(case)497 1041 y({)h(|)g(i=j;)f(k=i-1;)f(1<=i<=n)g(})i(:)g(sqrt\(l[i,j,k-1])o(\);)497 1091 y({)g(|)g(2<=i<=n;)e(1<=j<=i-1;)f(k=j-1)i(})h(:)f(l[i,j,k-1])f(/)i (l[j,j,j-1])d(;)497 1141 y({)j(|)g(2<=i<=n;)e(2<=j<=i;)g(0<=k<=j-2)g(}) h(:)h(l[i,j,k-1])e(-)519 1191 y(l[i,k+1,k])g(*)h(l[j,k+1,k])f(;)497 1241 y({)i(|)g(1<=i<=n;)e(1<=j<=i;)g(k=-1)h(})g(:)h(a[j,i];)497 1290 y(esac;)236 1340 y(l[i,j])e(=)i(l[i,j,j-1];)170 1390 y(tel;)p 1848 1396 v 146 1398 1704 2 v 146 1421 v 145 2238 2 817 v 170 1485 a(system)f(cholesky2)f(:{n)h(|)h(1<=n})497 1535 y(\(a)g(:)f({i,j)g(|)h(1<=i<=j;)e(j<=n})h(of)g(integer\))323 1585 y(returns)f(\(l)i(:)f({i,j)g(|)h(j<=i<=n;)e(1<=j})h(of)g (integer\);)170 1634 y(var)214 1684 y(l)h(:)f({i,j,k)g(|)g (2j+k<=i<=j+k+n;)e(\(k+1,1\)<=j;)h(-1<=k})g(of)i(integer;)170 1734 y(let)214 1784 y(l[i,j,k])e(=)301 1834 y(case)345 1883 y({|)h(i=3k+2;)g(j=k+1;)f(0<=k<=n-1})g(:)h(sqrt\(l[i-1,j,k-1]\);) 345 1933 y({|)g(3k+3<=i<=2k+n+1;)e(j=k+1;)h(0<=k})h(:)h(l[i-1,j,k-1])d (/)i(l[3j-1,j,j-1];)345 1983 y({|)g(2j+k<=i<=j+k+n;)e(k+2<=j;)h(0<=k})h (:)410 2033 y(l[i-1,j,k-1])f(-)h(l[i-j+k+1,k+1,k])e(*)i (l[j+2k+1,k+1,k];)345 2083 y({|)g(2j-1<=i<=j+n-1;)e(1<=j;)i(k=-1})f(:)i (a[j,i-j-k];)301 2132 y(esac;)214 2182 y(l[i,j])f(=)g(l[i+2j-1,j,j-1];) 170 2232 y(tel;)p 1848 2238 v 146 2240 1704 2 v 75 2373 a fq(nous)11 b(p)q(ouv)o(ons)g(exprimer)h(le)g(probl)o(\022)-21 b(eme)11 b(sous)g(forme)g(lin)o(\023)-21 b(eaire.)11 b(nous)f(\023)-21 b(ecriv)o(ons)11 b(la)g(d)o(\023)-21 b(ep)q(endance)13 b(a\016ne)75 2429 y fm(f)21 b fq(d'un)c fm(n)p fq(-uplet)g fm(z)i fq(sous)c(la)i(forme)f fm(f)6 b(z)13 b fq(+)e fm(t)833 2436 y fw(f)855 2429 y fq(,)16 b(o)q(\022)-24 b(u)16 b fm(f)22 b fq(est)16 b(une)h(matrice)f(constan)o (te)g(et)g fm(t)1598 2436 y fw(f)1636 2429 y fq(un)h(v)o(ecteur)75 2486 y(constan)o(t.)j(la)h(bijection)i(que)e(nous)h(c)o(herc)o(hons)f (s')o(\023)-21 b(ecrit)21 b(alors)f fm(h)p fq(\()p fm(z)r fq(\))j(=)g fm(h)t(z)16 b fq(+)e fm(t)1522 2493 y fw(h)1565 2486 y fq(et)21 b(son)g(in)o(v)o(erse)75 2542 y fm(h)101 2526 y fx(\000)p fg(1)146 2542 y fq(\()p fm(z)r fq(\))12 b(=)h fm(h)307 2526 y fx(\000)p fg(1)351 2542 y fm(z)f ff(\000)f fm(h)472 2526 y fx(\000)p fg(1)516 2542 y fm(t)532 2549 y fw(h)554 2542 y fq(.)p eop %%page: 129 131 129 130 bop 1778 269 a fq(129)146 397 y(v)o(\023)-21 b(eri\014er)19 b(qu'il)h(existe)g(un)g(c)o(hangemen)o(t)f(de)g(base)h (en)o(tre)f(deux)h(d)o(\023)-21 b(ep)q(endances)20 b fm(f)k fq(et)c fm(g)g fq(consiste)75 453 y(alors)15 b(\022)-23

b(a)15 b(v)o(\023)-21 b(eri\014er)15 b(l')o(\023)-21 b(egalit)o(\023)g(e)6 b(:)446 552 y fm(f)g(z)13 b fq(+)e fm(t)577 559 y fw(f)640 552 y fq(=)42 b fm(h)759 535 y fx(\000)p fg(1)803 552 y fq(\()p fm(g)p fq(\()p fm(h)t(z)11 b fq(+)f fm(t)1010 559 y fw(h)1032 552 y fq(\))g(+)g fm(t)1121 559 y fw(g)1141 552 y fq(\))g ff(\000)g fm(h)1256 535 y fx(\000)p fg(1)1300 552 y fm(t)1316 559 y fw(h)640 608 y fq(=)42 b fm(h)759 592 y fx(\000)p fg(1)803 608 y fm(gh)t(z)11 b fq(+)g fm(h)1001 592 y fx(\000)p fg(1)1045 608 y fm(gt)1097 615 y fw(h)1129 608 y fq(+)f fm(h)1216 592 y fx(\000)p fg(1)1260 608 y fm(t)1276 615 y fw(g)1306 608 y ff(\000)g fm(h)1393 592 y fx(\000)p fg(1)1437 608 y fm(t)1453 615 y fw(h)75 706 y fq(c'est-\022)-23 b(a-dire,)15 b(v)o(\023)-21 b(eri\014er)15 b(d'une)h(part)7 b(:)802 808 y fm(f)48 b fq(=)42 b fm(h)998 792 y fx(\000)p fg(1)1042 808 y fm(gh)75 911 y fq(et)15 b(d'autre)g(part)7 b(:)624 967 y fm(t)640 974 y fw(f)704 967 y fq(=)42 b fm(h)823 950 y fx(\000)p fg(1)867 967 y fm(gt)919 974 y fw(h)951 967 y fq(+)10 b fm(h)1038 950 y fx(\000)p fg(1)1082 967 y fm(t)1098 974 y fw(g)1128 967 y ff(\000)g fm(h)1215 950 y fx(\000)p fg(1)1259 967 y fm(t)1275 974 y fw(h)75 1050 y fq(le)20 b(syst)o(\022)-21 b(eme)19 b(\022)-23 b(a)20 b(r)o(\023)-21 b(esoudre)19 b(est)g(consitu)o(\023)-21 b(e)20 b(d')o(\023)-21 b(equations)19 b(de)h(ce)g(t)o(yp)q(e)g(p)q(our) h(c)o(hacun)f(des)g(couples)h(de)75 1107 y(d)o(\023)-21 b(ep)q(endances)23 b fm(f)368 1114 y fw(i)382 1107 y fm(;)8 b(g)425 1114 y fw(i)437 1107 y fq(.)22 b(la)g(r)o(\023)-21 b(esolution)21 b(est)h(e\013ectu)o(\023)-21 b(ee)21 b(par)g fn(maple)i fq(qui)g(ten)o(te)e(de)h(d)o(\023)-21 b(eterminer)22 b(les)75 1163 y(v)m(aleurs)16 b(des)g(inconn)o(ues.)g(sur)f(cet)h (exemple)g(de)g(cholesky)l(,)f(le)h(syst)o(\022)-21 b(eme)14 b(a)h(une)h(solution)g(qui)g(est)7 b(:)612 1312 y fm(h)16 b fq(=)714 1215 y fx(0)714 1288 y(b)714 1315 y(@)771 1256 y fq(1)42 b(1)f(1)771 1312 y(0)h(1)f(0)771 1369 y(0)h(0)f(1)943 1215 y fx(1)943 1288 y(c)943 1315 y(a)995 1312 y fq(et)15 b fm(t)1064 1319 y fw(h)1098 1312 y fq(=)1146 1215 y fx(0)1146 1288 y(b)1146 1315 y(@)1204 1256 y fq(3)p fm(x)1215 1312 y(x)1215 1369 y(x)1273 1215 y fx(1)1273 1288 y(c)1273 1315 y(a)75 1461 y fq(le)j(fait)f(que)h(le)g(v)o(ecteur)f (de)h(translation)f fm(t)834 1468 y fw(h)874 1461 y fq(ne)g(soit)g(pas) h(compl)o(\022)-21 b(etemen)o(t)16 b(d)o(\023)-21 b(etermin)o(\023)g(e) 17 b(pro)o(vien)o(t)g(du)75 1518 y(fait)f(que)h(nous)g(ne)g(prenons)g (pas)f(en)h(compte)f(les)h(domaines)g(des)g(v)m(ariables.)h(on)f(p)q (eut)g(v)o(\023)-21 b(eri\014er)16 b(que)75 1574 y(ces)k(domaines)h(v)o (\023)-21 b(eri\014en)o(t)19 b(la)h(relation)h(et)f(conclure)h(que)f (ces)g(deux)h(programmes)d(son)o(t)i(fortemen)o(t)74 1631 y(\023)-21 b(equiv)m(alen)o(ts.)p eop %%page: 130 132 130 131 bop 75 269 a fq(130)720 b fl(annexe)16 b(b.)30 b(test)15 b(d')1344 257 y(\023)1338 269 y(equiv)-5 b(alence)15 b(f)o(or)l(te)p eop %%page: 131 133 131 132 bop 1778 269 a fq(131)75 729 y fp(t)-10 b(able)39 b(des)f(\014gures)143 952 y fq(2.1)46 b(deux)15 b(placemen)o(ts)h (di\013)o(\023)-21 b(eren)o(ts)14 b(d'un)i(m)o(ulti-ensem)o(ble)h(de)f (v)m(aleurs)h fm(:)22 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(10)143 1008 y(2.2)46 b(le)15 b(c)o(hamp)h fk(w)f fq(d)o(\023)-21 b(e\014ni)15 b(par)g(un)h(routage)e(des)i(v)m(aleurs)g (de)g fk(v)41 b fm(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)40 b fq(11)143 1064 y(2.3)46 b(le)15 b(c)o(hamp)h

fk(w)f fq(d)o(\023)-21 b(e\014ni)15 b(par)g(un)h(routage)e (\(di\013usion\))i(des)g(v)m(aleurs)g(de)f fk(v)35 b fm(:)23 b(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(12)143 1121 y(2.4)46 b(le)15 b(c)o(hamp)h fk(w)f fq(d)o(\023)-21 b(e\014ni)15 b(par)g(une)h(op)o(\023)-21 b(eration)14 b(fonctionnelle)k(sur)d fk(v)39 b fm(:)23 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)40 b fq(12)143 1177 y(2.5)46 b(le)15 b(c)o(hamp)h fk(y)f fq(d)o(\023)-21 b(e\014ni)15 b(par)g(une)h(r)o(\023)-21 b(eduction)15 b(g)o(\023)-21 b(eom)o(\023)g(etrique)14 b(des)h(v)m(aleurs)i(de)e fk(x)46 b fm(:)22 b(:)g(:)h(:)f(:)40 b fq(13)143 1234 y(2.6)46 b(le)15 b(c)o(hamp)h fk(z)f fq(d)o(\023)-21 b(e\014ni)15 b(par)g fk(z)g fq(=)h fk(x/&/)7 b(w)18 b fm(:)k(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(13)143 1290 y(2.7)46 b(le)15 b(c)o(hamp)h fk(r)f fq(con)o(tien)o(t)g(les)h(sommes)f (partielles)h(du)g(c)o(hamp)f fk(a)24 b fm(:)e(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)40 b fq(16)143 1347 y(2.8)46 b(relation)16 b(en)o(tre)f(deux)h(placemen)o(ts)f(\023)-21 b(equiv)m(alen)o(ts)40 b fm(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)40 b fq(19)143 1403 y(2.9)46 b(equiv)m(alences)17 b(forte)e(et)g(faible)h(en)o(tre)f(c)o(hamps)g(de)h(donn)o(\023)-21 b(ees)29 b fm(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(22)143 1460 y(2.10)23 b(deux)15 b(c)o(hamps)g(de)h(donn)o(\023)-21 b(ees)15 b(faiblemen)o(t)g(\023)-21 b(equiv)m(alen)o(ts)15 b fm(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) 40 b fq(25)143 1558 y(3.1)46 b(ra\016nemen)o(t)15 b(par)g(substitution) h(de)g(c)o(hamps)e(\023)-21 b(equiv)m(alen)o(ts)46 b fm(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(30)143 1614 y(3.2)46 b(construction)15 b(d'un)g(programme)g(a)o(v) o(ec)f fn(vpei)38 b fm(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(41)143 1712 y(4.1)46 b(t)l(ransformation)14 b(de)i fk(matvect1)e fq(en)h fk(matvect2)f fq(p)q(our)i fm(n)d fq(=)g(3)38 b fm(:)22 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)40 b fq(52)143 1768 y(4.2)46 b(pro)q(duit)18 b(de)g(matrices)g(de)g(cannon)f(\()p fm(n)p fq(=)q(4\))7 b(:)17 b(alignemen)o(t)h(initial)i(des)e(matrices)g(et)248 1825 y(comm)o(unications)c fm(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(55)143 1881 y(4.3)46 b(compactage)14 b(des)h(c)o(hamps)g fk(a)h fq(et)f fk(b)g fq(dans)g(un)h(carr)o(\023)-21 b(e)13 b(de)j fe(z)1260 1865 y fg(2)1288 1881 y fm(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)40 b fq(59)143 1938 y(4.4)46 b(routage)15 b(r)o(\023)-21 b(ecursif)15 b(des)g(pro)q(duits)32 b fm(:)22 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(64)143 1994 y(4.5)46 b(\(a\))14 b(algorithme)i(initial)47 b(\(b\))15 b(algorithme)h(am)o(\023)-21 b(elior)o(\023)g(e)14 b fm(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(69)143 2092 y(5.1)46 b(t)l(ransp)q(osition)16 b(de)f(matrice)h(en) f(c)852 2076 y fx(\003)886 2092 y fq(et)g(en)h(hpf)h fm(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)40 b fq(84)143 2149 y(5.2)46 b(pro)q(cessus)15 b(de)h(di\013usion)g(discr)o(\022)-21 b(ete)13 b fm(:)22 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(85)143 2205 y(5.3)46 b(t)l(ransformations)14 b(syn)o(taxiques)h(r)o(\023)-21 b(ealis)o(\023)g(ees)15 b(par)g fk(normhpf)29 b fm(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b fq(89)143 2262 y(5.4)46 b(t)l(ri)15 b(des)g(\023)-21

b(equations)14 b(selon)i(l'ordre)g(des)f(d)o(\023)-21 b(ep)q(endances)16 b(causales)30 b fm(:)23 b(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)40 b fq(90)143 2318 y(5.5)46 b(pro)q(duit)15 b(matriciel)i(sur)e(un)h(cub)q(e)g(de)g(pro)q(cesseur)f(virtuels)40 b fm(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)17 b fq(104)143 2375 y(5.6)46 b(programme)14 b fn(pei)h fq(de)g(pro)q(duit)h(matriciel)28 b fm(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)17 b fq(105)143 2431 y(5.7)46 b(en)o(vironnemen)o(t)15 b(logiciel)j (autour)d(de)g fn(pei)44 b fm(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:) g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)17 b fq(107)p eop %%trailer end userdict /end-hook known{end-hook}if %%eof