[PATCHES]
PATCH 1/1 [PATCHES]
Linus,
I've been busy working to improve the basic mechanisms of the
page cache, and finally what appears to be a stable set of patches, with no hacks against 2.3.3
Despite these being seperate patches I nearly always applied them in sequence, and tested them as a unit. The seperate patches each do one thing, to keep make them readable/maintainable.
If you could include the code below (baring the eb8 patch) in 2.3.4 I would appreciate it.
The patches included are:
eb1 --- Allow reuse of page->buffers if you aren't the buffer cache eb2 --- Allow old old a.out binaries to run even if we can't mmap them
properly because their data isn't page aligned.
eb3 --- Muck with page offset.
eb4 --- Allow registration and unregistration for functions needed by
swap off. This allows a modular filesystem to reside in swap...
eb5 --- Large file support, basically this removes unused bits from all
of the relevant interfaces. I also begin to handle PAGE_CACHE_SIZE != PAGE_SIZE
eb6 --- Introduction of struct vm_store, and associated cleanups.
In particular get_inode_page.
vm_store is a variation on the inode struct which is lighter weight.
vm_stores's seperates out the vm layer from the vfs layer more, making things like the swap_cache easier to build, and cleaner. This is potentially very useful and the cost is low.
eb7 --- Actuall patch for dirty buffers in the page cache.
I'm fairly well satisfied except for generic_file_write. Which I haven't touched.
It looks like I need 2 variations on generic_file_write at the moment.
1) for network filesystems that can get away without filling the page on a partial write.
2) for block based filesystems that must fill the page on a partial write because they can't write arbitrary chunks of data.
eb8 -- Misc things I use, Included simply for reference.
TODO:
1) document the new interfaces
4) Experimenting with heuristics so that programs that are writing data faster than the disk can handle are put to sleep (think floppies).
5) Playing with mapped memory, and removing the need for kpiod. This will either require either reverse page tables, or something equally effecting at finding page mappings from a struct page.
6) Removing the need for struct vm_operations in the vm_area_struct. A struct vm_store can probably handle everything.
7) Removing the swap lock map, by modify ipc/shm to use the page cache and vm_stores.
8) Putting the buffer cache on a vm_store.
Eric
begin 644 patches9.tar.gz M'XL((UU1S<"^P]:U<;.;+Y:GZ%)G.'M?&S_<1D8,<)9H:=`+F&3+(W,Z=/ M8\NXEW:WMQ\0=L+][;>JI'X_,(1DL_?@"6ZW5"I)5:52J532K#1WNN#.L/GL MRWU8MS7H]=@SQMB@WZ>GTNW24WY:C/4';07^>H,^Y"JM7N<9ZSW["A_/<36; ML6?<UJ?%<-QVGOV_^ZQ\_ANZZ7VLMQL=^(^?*XV9/I\_4AU*J]67_,[B_Z#3 M'DC^=WNM=@MSVUWE&6L]\?^+?Y#-K.X=V^^9D#]PK1L7I_K!G=81"B:1]HE MQU26D)0@8Z->KV>6*)UZ)CO2;IC29^WV3FNXT^HP93@<;E2KU5QTI3./BU+; MK*7L*,I.3Q&E?OJ)U97:@%7QZZ>?-MAOX\GIX<DQVV7M#?9F=/;JE]?CW\:O MX;VSP4[?OO3?VAOU\?NSR2BWZC&WY]#YYOLTVFKSZA>WLLO\J.PMN&,PS MM25G]27[Q!P^8W7.G*;>V.XW]0Y\B7?',[M>TUEI]K3?E6F:O6QLX;</HX%N MH_<*5+,^\>=.\]R;S[G=F*8(%LE+L2"2E\&%83X7H@6+&=%MM8@7^-PF=I1N MX<]=KNI[YZJ[T!UUI5UP(/_YX@5DS&W.54-WW^ZH_^+_R$SZJ4E7ZI+;?7A M:/1&/9Z4L5#ECX9HA2.AJJ4WD'S*W9>47-[,+%1!P&QT%]S$D:ZN5DT` MSJJ[(#T_C]73P_\98X[-7<\VF0*_;V5GV[*S;5_VV%9S@^FFRUS[1G4ME;HG M&UUV7-N;NHSZOT4/;!*P_D_HK\P4L.J":S.``;+5X'&^@.;Y\$!'@0^[=8]2 M85]?H$PC2X).SRQH@^A2=UMTJ3N4_(/LYA8;F3.&G6'N@LL>-&/4JL>H52^E MF@N5';]]_=KGVBN#:[;D6T*S,QJ<5"6E51!4X2*EDNP9_VQI)M3PYMQ,>,U ME\O&(B7]:9#4R$J#)?88*=;,,RRA>/L[9@$SUHE'FFWT$;618Y@6;&]J% M\P(9I[G64I^*A!IS+%!<*\MQ]'/CAGFKF>9"$<VY,:<+VS(MSX%DXNRUIKOJ M/SWN<1([email protected]?'6:F7S*W6A.31J,^4Q(J]7E@XI$5%DT,0STH,_A%& M7UJ0@2@G$1&I(!!4P!O4Q%LF![7JDD0#)BQ767GNLNN-,,#;@.L%.U:GR1; MDNS[&<PL)F=O?E9/#>V\5"JQ82S5N0;<4PTLHE)):<6S+O45%%"4C6HD5;0= MDMLQ8)N#M7#%9Z521Y$-Q6F-01.!>*ZK<YNY%G.YX]+PTLZM*]YH-(*6][9K M2@N:WAO6E':\[=#A_:.1($^I5$8<*O2]#-5">HUMBJSZ'@EI1(OBOW.+(L9 M=Q8&\KQ"ZD@,,00A[3+05*[email protected]#DO*L9$TG=+P^Y;-P)#K#W0@QR@Z_ M'RF@=)(:$13K$R.<R])8\LD1;\P9$$S9X!J7[?=&XGI=QBY/I,A5XT@GB%8 M!EZ2O4&+1LV@(T=-O"[2XE'"33'A/J03&.+$BV-9GWK).279GGM2D-!%:,B2 M-(PA+Z)B6T%KJ-I6NG)2!:U(UK,UGP,CX!'.JV73<IG)I]QQ-%L'=:RQI6>X M^HKPTFVTDTA&HD2BYAMEAH5Z$.U0S#FI*&!_6BNPUV:#(TP=A4<WAMHRZM MD'"*ABR-375[ZAFP#$*S3#;-\9$RU.E.@XV-;R[8J9N;%395J[^9D\62XR MQV=63GAR&Y!9PUR#K)X!Y9-=3GLG./<J,/TB.0PK1F'&=&G>WUO:GE@N&$3 M(<GTEN=0&30<6BNB_('X"O#<Y@"LU-(9)O'">UC;-S#"EDNFY@(DUF&21_- M3%D>T<RTS='KYML<L9)I:Z,=L3:&;;(VZ$'61JDTM4P7$')A3**E<>C@C*;Y M?$(2_!6GL'JI!.0JQ^2DO9F5:0G68A96'F23O",V?PO=3-,H[54KQV"?I= MEL4M$&X\>_I\EO^G_17]/]U>I__D__G6_3\QWTPBHYWKUK3HY-65NW<4NV= M[N"Q_4#"[Y-V!K6_16=0X)_1S?D2S!++<U-32#L%D,F9)%!L.@'V]':Z+D< M2I4NY%1708.RB@^EZ\\I<@D_GY%:)]':97/02-/+\GR&JWQ_,OD.,\'&4JT5 M^_2)15[K>TOT"(3S"Y14I9FUR?Z7S*>CT>FO%?;=+FM)N-+*UDWWLOSK>'*L MOAM-C@^/?V:4(;72\Q)&AHH9'%I1FTYFZP-V)@HD"T](5MW%99UW8VG*' M_>#\;CZO13'Y+9UQ$V:L^MY,1?EIX%<4C%PAI=N-JM^-NWJ,B7?TU9]9G1L' M3%?+X9*HD#2S5$121MNMQEHUQC\V--7E']TJ_9IIKE834^^;R<F9.AF/]C_1 MKW>3P[.Q^#E^/WY5(^[V.K36[G656KOK>Y%0M8)PS&8V<%540#2IK8^SO'3 M:K60QU7!MV/U[/W9R<%!F7^LY+,NCW,^XWPL:_'-T,]MS;Z)\FT]ML6XAG]Q M@D:ZOLF"?D2HS*HLH+/_^]QQA.0$%<5$]+<?Q%41SCT;1X<OA_O?V+X\\WD M\+?1V1C8&3;+1E<._\BGY7B':BQ*;5]@R],%S(9;E;#Y.4T.ZIB#>;Q0=5JM MJ;9F7O!R.>:9JD1H(:I!VN7#^+4D:\3J1(?<*\T@6I1_1<6&."@?M25Y\XQ MY5:X+X^M:P9S-J.1B#T6'"?X>BRM="=9-DWPKE4XK9MH:#ZC$1Z11F91PD:
M).MP['X:OF"!T"Y<(-S#U,_2ZD4E$W-O1T&7<96>@X1*KX\/CW\;D0/WEG%8 MGPE59*W0+;R)-:@PD*]@"474?N'K>5JEU?=TU'J;FRSR"DL)9.+F)H+BV"M? M+;7ZWM4R5(!A:>>\ON>HY[!(N\1=!E9G2@6=!Z*2=,%@D0W=DDN.C(['VGF M2#6DFD_5P]/)^.>P^B4\_R.6(3GV?^<KVO]*3TG;_YW>D_W_K=G_[3S[OU-D M_Z]CR:?U4">W5&>G,_P"]G\[R_[O?*/V?SNQ?80F#BKL18J*.7"9?,J!32\* MVMOY;,M#4LS%KMB"##S.,"A=?0K:WT/;7RGB_8<4+F3M8.J]Q=E=J;]#H8 M.:?C,YBT0RV_)=Q3,"_(+26R9C(+E9.0[,<?):9?#@_.*K3]2)L\_X%NIQS] MW_UZ^E\9#/I*2O_W!T_Z_UO3_[DQ0-TB_;^.)D\KDFZDU,*C4B9[=9.N[NC M?G_3R=+_W>_4?V?5+/.(AW%T,V"R>1/!ARQZH"?,S;$?070^?FNNFXV@B*N M#6AW;[[Q#?-64+12]2R&$F#W@IHKEHS\/K8JG/:DRL3#&=UF(R9VY<U!+S MPQ8"H%;.1CMS_56NQ)4/.G6-6!/PYW0YPT4AS3J4K,X<MG7NS0%-'9:&'.8/ MBGF3-4S06W$E[I,KK[3<QIYN]CWW1)P(@!5447Q_BUJM+Z]/,$Y#K#.NAF MJTC(M<94WIKN--97T8DAL*AW>[11C0\(#]/3@1K.+*4\MT7"DC>0Q%4#,& M22PENE<WJD#R4]S+[D3?-0,-H,E*F[Y3363OF(H\9DI<B6JB\*N&5-["8G M%4E>8L2*NL*0$T(SI9F7YU@@TO;Y$#AVP>5SL'3E?*<2A9%37@+C!\BP21 M11J]A4$].5DFD.R;LD!$Q5QFU_H#KRJ(;0Z]\RIJULF*V=@"G]CFZ*H//,S MD9']A3NWN*Q?2<\?1H.8TCJ<XNXOFULVC$S-!KI+YP]M&]]S;*VFI.6F:2GW M<[)'D9^;L6W;*1@Z0;'"\=)5<+C`MW2O2QO:(_DB8CG>%(,,N".\9W$(H"/& MB%SXF2C:E/TP;9809HDKS49$''G=A7IQ``7UH<N07*K^DX7?4B9%3:JJFSKI M9/&#Y)\6XQ&DCY[(<@T)$?U(/!840N@WQ_T&0:CEF/*_1(DE!N@4]CAFU?J MV^.WI^-]"HF#0BZ(V"Y5:#N._.7P?\*OI?91I?+P.TG7$K9.Q="Z,-:NO(EE MT5F%M,+(QORQ(&!CPN^'0LJ5",VP(JIS$/13C@Z!"S"4*V"\@'6RH"$!ZHU? M2\]S3!NB#TK8*;E$1ED;.%NM8?.+<]HC1%6%ICV.=[CM[E,M^.C>1ECN!( M?CC]M6'!B-1AEYL9X[A6,'B6:_6Q4E/FD;DZ+Q:4KA)PV*.H9W#XW>90=.H M!?D.3%#P@_2_;OF_@E(T^('^7+Y@,QH6CO&3]^K)R[^=HGDKH&Z6#N14,::9 M)FRP>L].WNP?3BK-B0?D;"RA&_>G>(A\FD6;2'8>W2,@I7<@&_M\RM#@V-YI MM>?4+_S"-]M&PA]5LUC+JL*43\ZO<^#7X45@N8#G/]HK'82V<MK1E0)S-K M[F276&8F"\MH3QHDXX\K0Y_J0F.N,)`);8[Q^S<GDS/U].]'+T]>E^UK-9C\
[email protected]!8;9/.NN!N42,<G7)U<VYEU%V@[-+0Q89"=J-7 M$RN><A^D.32>,D57)%;)+<"XGX&<Z)H1&JA:#LH2L&&@V%-&;(J/;L=H3AB M4T(UKG]GEJ3;RK:$1?@12QF:C%=NIISJ<K?6RNQ5T>F*\I2>1.S,<OF.1* M,.VH'*11Q:SRBO9F8HTJTSYWS6^++UD"JV?FX+V-]#5M;21ZC2>L]I>M18 MTNZ(/#>S@).)OL$,HWC?,O_B,EAK,IAJ;3[KV1+F"^W@*R9A9,Q):[X':P MQ+A>X#2E!>\8-V^*:.H101='KJ=.9!M2+:'Q"1,!8%C:Y!,8,V++0@ M0IH0J*;W$R5V?OC5Z]'D['Z;G1XIO[WV_';L?K+>+1?#HJ@[2)V8V-S>D#E M>Q@%?Y*<%!KW-;$$2_(__-K:LXT1MRK2+.MX!$Q4S+.)XXHO"EON<CH<V^ M$$-]3QA<,H(DE5&.2&J-1;/]11B&=Y1N!5,CB#&Z(2D^$7]T0JJ1?<E%H31V MHP-R36HB-G_G6VRI_QOIFUKK2E+[#2R"+=])\.\$FLU-=A?MQ?(;=WJIB&R& MW!UHB2B#:KSOT=K]M30,_7>X\/2,&2H!FCOD6K8<0",[F)+^$DCR8Y"YI MU);6$I<P_"G:DI17($-VDS#YA+R[Q[?A)@I1+B&ZH:)X%-G]-TKJXQ+VP2KA ML]TP@NPDZI'4J+S[;!4S43DV<4AQ^<$G%IFIPC$@-%2I+]^U%@P)7\#4 MK/0=X@G#S0)%-+R\_Q0N4+LM_L+$SK5MU""<R@4#MT0(*"^+)O-F@RFRM.> MM](;AV=%2/\M5P9W.1YL$?**-@D[OZ%9#-4=FH%".ZZ$PQ9LI2O-G,KS)GAV M!+2A&758D!H5/&6>@TCPML;&88XS"%/T]R0@534B!V"J=MV61(;_P%J^?8 M,1VIL".!8[5$V?Q^9/8AQ"ILI&A').9K+((&(:=3)R;4#*9=LJ2.)JB!YPKQ MI$MR@L'V:!>:;I(92(C39&)R]UQBU6;_\!QW"<B%[YN:?HX'CF"E*@Z8HJ=( M.H58Q#*1AS(2AB#EW*RX=-Y$1P@N"H.%W-T5Y!Q@<L]$?DG&ERF9$XG.J? M#WZ1.A\;L<U>^.ZCB/TCHEC6O@A*BYB3RN87CA9\I0":P+S(\$MH83IQ_' M*%6!(N-XT8=7*N$))QW$28N+&NH9E#*L#H_E(+]Q<8C!>8K"JMVN?Z"/Q:+; MCD^.QD<4$XPUEN19_5B01>34=;U4M*J#W-2R#M+66=?YB/,6=O52Z!,N)Y>$ M$?V4R!,'E38](*#V0P#7PYI4&*V!L2:P]B"$>H?XW+Y<F798D2D/T2<:_X7 M/'$'1IL8L#)\-#C:%#_:2'039P([TD/?5VI#/UK2M$._B5.M!GP(9"HE.%DK MM]*U=LE5;Y663A:Q6LD3L%[\1^^KQ7^TN[W!H).,_^@H_:?XCZ\<_]%<6$O> M1#HT8:3^@T]=1^[6WNDHZ^9YU'M%[O1(C,>IY@KW5ILI_*,Y48H]_)**?V@ MU*-&AG2S(D-Z_Y[(D,_B$1H>3<U8+;2FV-9JKEPT@U*>S5X!:"8?\\&3@23] M@D"2HFK3O(X>5VWWB=OB(32K5'O^)2+1J&\.LV2=T5F#/>8ZE_4]V]"7'R:O M#X\.S]33L]&K7_]H8)(Z]>Q*"EF]E@?K^\R/X5."TCDM.LNTV&^YA\1L)P% M66%[>Y&(0FQO'&Q7(@RT.60G;SUY!-$>5M/,-*!6*1!J;M[Q,PVLN43K( MS'8[;^NL5X"E2"24@;@O9;#])!(/%PG26VO)1!9DOE!D09>.8($]6L%DW,.= MN2[\Z]^A*C+1%(O%=I_$@AY/8O%L5CVMR_7$XLLR'RQR().AI]W=WK#.\0B M&TWA!*+0O5[B\206#Q4+?>6L*189D5BD0&=-"Q:!4>5"RJ]0UM0^$Q5B40+ M/8G%O<5BM9JN)Q49@/E"D0&</JF2?]%DKP!+H:9HT5D5\7@2B0>*!"U_UA.* M3-!\L<@$?X!ID8VG6%MTA^(8T_!)-#Y3-&!EO+YPI('O$(]T@0P!&:PC(!F8 MTB+2B=H90V%G/(G(PT1$!N0WZ61WT["L589H9%EBD068-*P&.ZT>_FBD(FA MV"_5&>"=CE7Y)"'03;>$Q]3%U5HHOZ)<L.J[QE6Y!**Y!%S](OC7?@6#ZL M/(O80T5%B3O7Q]\NI7>8%K]>&(0"A"3.K+P[-3E(#PT/_EC%^I+I2:T39A M@/Y*GXK[O.CF+^.2T'\X&OWM9%(FX,H?XBB^;%@VR(>CP^/PC=4WZNR.3ZSY M23+<5;@<+YWNN]AUP-Y'VWXT>J_N'Y[^&EPN_/ACL^T-.>NMN(@B-<&OP*U M1*_UJ6L4#),[RA6.G#O*E@YL'8:"C7&+.!3:TB+;+AQ,=R%-CZ^(BAV939D M57PHBAQ>>+D,:"(5PU3IED9\PRMFRK\=B9MMX$DW=E0J>*%A2VZXG4U&K\;J MZ.7)Y*PL[X&HL;FKNBJW[1I[_M84=TC.Z)J1<H5I=,#B>44PN/H]U-P*E3K5 M+^5&M."[]>N2Y9:>X^).;"NLA$Z,);N)<X>HH\[\-*&C*;7"?F'9^K+MP<' MXD#TVBTAH::+=J1D_V#@B;@%1CEAP^*75_XP>U[[,H*^Y,N[9)I[A9?HL) M57]':15<C]Z[JWQJWE>V.^)"7WS*RX@EVW!3KA[90$=)4@&E'VI"NRKB\M#@ MX"',MYK-M7#;'%D:"Q!\*)8:*,?YG)3U?"Z/TL<WTJ4<AJ:$2!S@X)MTJ#^ M;C=B9'O^94COU:/QT<GD[_*<?7P+/+AS16RN!U4B"A]=6:96D_92S"(!07]0 ME7%[:)>%VCYN_F!+LN[?BAAC]?'Q^\.3%_)@3E=XFKI*X%*08->V[KK<9'\- M?NUT8/1V]=G+W*DY%_<MAY!3!Z")I3:0/(0SD1XY7T+!%-.OI+Z/)>#]. M$TGMQU8-SH4N!N6%K:T6^M0IT!$9L(7*(@,^N9/1VVGU[Y[?,A$5+ANDS8A/ M>1;V%J6/_L\#(!<7NNJCHMN4@C@U,MS8%CT"?@H>%[)8"LJ7P.O?L98E/QZ% MII,AG-0E$453+4D5X_*APUP-5K(>+DL^ADB,?(X_$_%>@?7-EGG?5%13 M5"6(NK8>H0O.E8[Q8ND/9LY*S[5-8-)7K$KW<:3?-\F_E7RK=[;;%%&OQ? M.OQ&480)C#BD!%7\]G0\H8I*)5$5F#B'=KFK<3UOGY1L4+.],PNB9QPUPE M2E#_:D=XT.$/"4DW,(NPEWB<2NGQ-0-4-1/?4\V>%>F%)&2Q5DA")WP)G>V" M8SX%E19;N?TA.1+$(SJ-M#(F"\(J+K6[MPKX?"PY4P5@Q&7AU-<)QVN)Y0` MV?,=ZJEXB).LP1V0ST^Q33N^]8TQB7@C]S6L*X,H40=#,O:/1O*6ZM]-,)Q% MP%:H&$Z$*9TY6,DPCBL<D<1*?Q8U)FFO-S)K?MQ9<.XTM1E\D5[.D/!$?J9< M)V#2GK%>@4\]6;A0AI5MNB-?/(0S+.;=*('".%4/)^_>O_WYA'W"WP?[AY,7 M_]?>F[>UD63YPO6O_"FBZ+9+(B70AMB,Z\4V=C%M&U_`7=6WNQX]0DH@Q]I:
M*8'I*<]G?^,LL69D2MAX[IVYIJLM*3,B,C*6$V?]':<@($1]A))-]SHL(+A\
M^/+56??=T:^RHLY48TI=##\R%7=2V=@%$%0R*N#F13>B#%"60T^Z+PQ>_ M'!D]R]+6Y6'C-0\Y!U+W#4?S1*YL6=FYV@M>[:NK0!_(C-$B,T9+*R(S8P\S M*=N;ITVX4DXOJB*1LSK",Q^^P2)$K][5IT1@)ZR#=K2R5AQ5$5F5*$#9??9 MD0C!0MYCM$NY@_V0.U@[email protected]=SMW_YHB09U-Y]!]>L6GD-=+"A#_9F M+2G1Y0=B\_>OR"PX0MY)'QDWU8YXWW4Y9DY*$\GJ7AL+I%/;[#4$U4ZFN- M2D7K#_N2#Z2$#C4E09'R$-KQ;EB5?K0?\N2)^%%E()C.)YKJ7QQC3#*^,HM M=#.C#_7*YMW(@1K?<JK//-:<@%>7$-6-,"-Q7<TY3(OYA46\"(U>)/I7?=R M-AEUP2.U/*W*_E;[9AA^["O09YC)KNS=,,67V&>^@69M]_^=6=MNX*S1Q]?. MFOS1;-]KZKC&\W?MCPL09'$G]IZ&'%^^H[ANT<OIT)GGQB\55>>U02D1[ MD(IE#%E+B"X>@.8..BV_+"H?ZT)F_Q2=6@G)6K[FN8\Q&>_=9!JQI"A2(^D MMXY<;-_%!@Y/>K&1:DW#V2LI^)U5Q,]RP,4>E37I*0Q2^>AH\!]&!X$F^Y% M$E2XNMO[+VI-V#'_+)1M*5'/<BXFG@IZ']3GD0YQC^,]U+X48!5"PS@5@ MF$M^>@P1/+<T3.JFSDMC@A)^S#XR[L.NP<)="'=$6CJFMDWNUNX;_"#]PTV M<-N;C9/QE3TAU36U%M:J:R]Z8T!?G@GR"$HSY(U!IUW1^W&[7UXL&)Y*0 M-2(\:0<M>MF:^^,0Y&;),-K/<Y.NBI8+ERSL.^]:><.EEX>GA]V7YV>O#N' MG5M[!G1O7-_NH``J8NXU2S#8WZ&K2N7J],4MX/O<YE\ZF)&A'0Q,H2F:BA, M=8N+CWJSCYP)AY)3R:=7ZTPY=CJH*/>SHI?PY&W=@S&G^,[]B4);_)CLM_ ME9ATP;$GY2_8!V"0P.@HTTC1,-^G35$J6C],3[0"Y9@"@5"(Y50!:A%C5J<> M;ZP+$.MZ$.V'P[B-^EOZ((2>=0CB3N80*>-7,1]0&$@4U""T704?0=%-Y$N MK[@.0\7R%AWL!EF>R08JR%?='!7!>.>814.JX?F9HODT<L5Y-'+7'D4M"N= M8GGT<F5YM$V^P>V.S2CPVH$3KWO<?[B!A-*N>CX9#?6WJ+R*.TL6:+9'45W M>-5?4$@B[Z#EC2W96;EMN^P?)(\39^?=LY-7YV^.W_UESR7F(!"*/U!6?_7F MW5\>=/GD9#W>*LIZ[-?-1A<UFX5+)J>BOUP:#3P@^=.VZ>E,>'$@1RM"./= M[5W.,4$A)4M3*01K'-*(=U51G0&W]HQ5:2;V,:^@(N+YG4'R'^Z%G&4_^6[% MY$)NM78H^P-^XGZQ4DQ"1S-I]WDOELF]]%HVZB5$EL5&)Z7GH'EM?-P62/ MT@H5(_,HHU18J9[[0#@HGS[E;!+<$M@+Y*8J;E?&'(>CV<Z.;,<_/6I3?Y5 M!HPR6UTN.#+V7=;7PI/!:H'ZW;>GK.*9%4/6_5"U8-3MVCG[>+"VU7+3OU! M_>YT%D][LUB.5CR&MLIXE8<,OY.^NI\DM6?][N1F:CP:A'@":0:Y!'W7M@QA M_(I>O#QZ_N%U^67W^-W)RZ.J6(-V8:+VR!D"N6D(>I_0;PP;IL4()3Z!;1L M@-UO1U:R>J<O^1O_JSHC%ZK5D^A+>L*4Q0R_2NP)8=Q(+^S!5+1#_1W]=GS^ MH$L74AR%5RW=R5NP=#>0^&RW\(A0U8JLMBU*:]!J&%?QT70\#QO=7IR\_]N^ M4X2XM,TH(.K9_?5F\/79VX92J>CW#VMZ\JT24F2]'5EUZQ[CR+KG/)!M;HY MCW7I9)S&LWD7;9M@W"GW%[-9#4AFA^J5!YX1N?-(L[1OI\_NZ:,Y^$CV8"M MSI(YSJE,!*EM9GJKA5HU^F"=C*-Y/YB>ZL)<I\4_\JSWFW7+5#9M^N,EM49 M^746&]!99``'RRH/N'*M6/->LO*T@YPTF<IZO:$X/D'CG"@CE/*\-Z]4278" M62IEEI+D^4W$UUBJO'^0)XF,5:5@"*B$.^A@A06(GP,118B%&Q[><<SMT+YX MZ/6N)-"")6^*%*YZ4RSKVM9L+U_X.?6S:Q\R7$=;5IYKQ*OY"21J*=)RAF3( M=_3V+^&%'&I&"QF"JQ&GM2S'JK*309E9C[Y?'IT8OS+KK7*I'K'W+99F6D MPK1?4K3Y!TI>(K<<V'?OVZKD#O_!6?.*>3OS0L?OLJ]454[4\/QY)?3.-6,Y M-T-3U!3``Y<+2VRBGWX7@%&)C7S(A7S9FV^.0GGKMMR[><O7E@(^]N%*]>J M6G@TMU$7UM:J,%23<O8@;9Y76$$,@R.>')A,CD^0?=/0]PMP8(378L1&0N M&<CJE/.JP2F@[*^1*=U)MN0[!)*<.IDONI-,VJBFI!/(L7?[A;@&4?RH]E4 M6U216PG)P!P8M\DU44_K\DE0(*/TH'L+J)W0*53')94U$'U.OF(D*4]N<6O MY.Z]B1E%$F#VX;XDUHR'%P]Y,0$7$=6<E?\FNJ..ZMQ/@EXL;%SDIOQ$^_L M%_BU@G-4#S/$RB:3_AS@Q42K*>3&Q^;2NW2N8!Q1)S?4/FOE\J+5K)"]"#.Y M#E=W:+7JKNXXBUVFI?[V[.7)6??LN:TBK$@V_^:R*Q<#9%YY\H0AQI<6I>^8 M@M?:._>H1HDV8:Y-^$N^$RD,^60LQYFYYE\)4[<WJ.'5=#&=3F:@P1U/;D78 MVR;')V])\DC7!<C-3AMZRCU31=HM'+YX<72VSTJF)B9!:>QD?61ZS.F]^'!Z M>O3NO'M^_)8\(=.@,78#*#TCX+S"Z_HW6PY":J\G3T2Z#AGI^UU]H'2)). MBI7&3H&\8\0I%&#^BT^2_-H9#FBW@:<)?6C0_N2R+"ZZZ/-."2&&DE.43I6 M:Z["1040)31LR=9%Y_>!6W/'O&YLHVCDU?EQU*EU(\6E?I1M5*B;RDWANW MGM!)C#.V6+[QF;^92:8E2:ZD_&GK/>6WY%*R*)U$FBIHZ]CA6U??QI3SP> MR/_@(V,D-N]47/--?E75>6:H0"S%?-.MR\MJ]DUUSQ]P^8[[4_EO/@=DW\]; MO':9+/_>*-9?YU;.\D$=]":@C_]&G!S0K42N8AX[GOP#JI=.^GC,_,,.>UT M<CH-N'YZ@69L[7"F,;"4<&OV+8Z=C<G-E=-3WT*:J=L8P34)L7&,]ORKB7+8 MWFE"&!O^R^G4T:V7>C6$.G=(3,13\X;JD`K=-UW'F1W%(SD194R%MEZA%)=R MGJR*%4P+KY(MRS\K1[);<-]*B.X/4Z:H\!:5REC3@("]+4E6Y&=SA]\9'&Q7 M8E:%7//,%3+'*2]\F<OSEU?^UMPF,9SPIIKA_+^?WY3_O7Q_>OSN_"]ER&?7 MQ:-!K*D1WF.O;?2.UOS?CW"[/QF/NS>]83(HOWOQOGMV=/K7HU/EI,(;+N/# M_?61(;E<7FX=<7^F]/Z14I0<B+C!UE;6:S>/&\3T'RO'LWG\'DQ##K_W@$'] M<&3)_\.Y9R8^F[N>:E+9%-7MI><EJ9JELW;LD,N$$>7/F#P945M[.BF=^.^ MHA8<%K,^8"S:HJI@UOL4@ML?!;_LS3[9XIQ1Y1,#O--@ME:(=?C.V3OGD2 M)A;.@5)IG4S?<#!S+L4L$G!%^1F69JS0???JS-V=M6<S[?*&!>-T,9Q76Y7 M?KTFQ46-[@5.\"APQW7VQOO*0'(LG_[KX?M7QV^4I\7/V*73]R_H!MA-P"&0 MZ,ML9;OP(<Q.XF/I\0F\[N29T@33=WXP:<Q.=S>P]?T"*\ZO,_Y2CT M9-OI!KX(^;J;2O:QS>YI]ID,0V^8#S6\D"V3V&Z7-$9"MRFK1.?LQ.L_@#G M!->/42#1-&@XEW1JE=7K\N)^HGY+@7$^HYJ6X5^YZ6;,_BI6>H="I?5@@[O6 M.)DG&-0&8[LA3)24H!WWGB^(7Y-&-2<=]\L'O4D4X7G!W(-P^020]*Y]L\4 MRJ;F7U[M8H0;O$H5U\^K7\IL_76MKU6<K!(GV-2C:$T-SLB]6L[9F2C=Y3[* MFF"BS=8<*(V@?</"]MX'QHHV&'B6(IIU,N[+09/]DM3CXH[.Y1FYK&'(2!.- M7/2A'8]+G.>C>&<)N:M</W_E/"*TB[FR=&#EC5Q.T7,RRX9,QP+PJB70]$O M\Q+#E_4]4/*\5.B%V^C?0Q^\$%4FFEI#:WBRY<]T@$*_A*$]$$C1I9_/.H M)9`1AY-?J;#'UJO^.62MAW1-G4:\10TI)R1Z6>T9Q[65KB;S"61_W'_H(QX\
M^>/\,YYO%QWR7"2@S]E9>LJ'ZF:.>5"7UU%=SB)Q9F'C'PPPMF<='.GFXU0\
MMA:Y'$K#WH-;"EC+!UUB=Z?ZK"W#87,=@"5JN[(R25MK<&ER@7[P6[$KR) M.=\7.^'37=>``TL].<MG^'?R60O+H0F#-Y#H/!6W.G8CNX$JG-:.4)VW&V;_ M!69"$BUYE-!D=)FXTUR@KBQZ_-63$9R%JJ21<T[*4UIU%DPE/M5>'?_V]FA/ M'(WE"=4'+_^9Y-R240+>_6*\&%W(R9)GEA2%V-L"@V'B]&<Z_&YGF&^V;#&- M>$G.[$=*&EJ&89Y<EM?ANCQN7K]ZSWG%^;AM44102T<$.2N[R."2Q[JZ[&]& MU-U'!V@4(P*;2%$I3RQ66=7J_BG[U2VYA^AGTCDP5,<.077L%*X_>/1B"NP, M#IA-!>10R9X<//X6Y"!2*PH><1^2X%>DE4B.[.=ROB3IOZ3\(OV)7'+I=#+& M[#:*[email protected]:AQ>]_D>!>8PIV4B;'&':QA%&H*,];7;06HR(JYA?]T@#AX< M54$#BE,L&&J205D-Z]GD_%DD6+&F1(Q;D!+`J<C/2F@$UM6UCM(EZ\K9S6I M,=5<!FWO%TB;S'BI0=Q06KXV(<RV#<*L];J090F<]Q9#G[PA)VGFCT9OL,?# M@OS>[447:0W@664&(US"&X)5&'9!.@')9:MX/8XS))C4CH%)E:-QA@@2F&:E MEW[4L"&HT3/+"?A.HFZJER3H_4&")L)T=8_?O3\]>7UZ=':V;Q7LS:[2C<MK M05'&+J=-9,<J%Q2A412B0N:L"U=;3O/]EKR.TDFH9$4U&YEBYLA64DY>&J[ M3ZOL/ZQ1_QIPXP;W<GCV>BN[U_9U,"I.>R:JE:HD&E1-*Z'@*$$$E27(\S$ MI*LC%7,T-*[&=1B/K^;7KI>H;;2^G*UJ5O1MDK3+.!V6V(=?29F\VZ]V% M)\V^GS=U=IE[\]NYE;/8:/7M+13XZ9,]5-1?!'9YT%EBWC6@'?)AP'@B0#_ M"W.1+5W*FZ3^;5@A@<VRSJB^;7W\,10OE-O#]^?==\<OSOJOCHY?7MXWI:" MUMKC^L[P4PW_%7!\ZR_#Q5JHZMO#W]JE]BYT(%V,@$7;$:(AZ-^V_+\<'2'7 MJI!"1/U\?=[?*/SQCP_RGG^UG;^\^5&<SL@5ARMG3W'"<_O[@YUM]'!_L*' MZKU8&0FIOV)GUJ14QIBG'F*;-1E&>;2]K_/SIWX.3MB8B_;K2J[^,'?J#<U M!HRJ_AF/!\B[FBM*GQ.M7M4J6R8;2G=>4<5PI58\CRW[_0)%9BZ,F"5(@O! M9Z@\E<NJ%=C4H+%[:'(01DQT[A:2L8Y=*,ZMO>:G<*H#KMJ(<99G:"1ZP;G MQW95@P2ZDID:#D&S-TPP2^'%G608[\0H[HW3#=O;3#[N:[S-OK1Z&.DHE+EP MGF)DW?1J($NOI[,^..I4X41)Y_"505JDY-$!M&C-37L@2?/15,H,^*_L+@4/ MY?0/GB&[:'GY?Z59TC+F"\8)U\-A%R:+*0P^U-*;![D<02/+W"N-LK$%B3! MBYJM)C@GDJ0PFH#R$>)G>Y#,\'8RPSR<DP6UZKW1$S'NS>>8<7.^P,SH<HE M,[*>I&L)\=C"0XO,MPC^\8<*A'D:,EO"CU7,G.)H."C$?P?['.0)G,T#6%S MZJRR</^I=W_YBU):6V[:XHS=5LME]R5<.HBD<]F3V(RBVN47??($U[H<;[ZB MW2X(8EF/AWV;LM<J#15!DS?=BG'^/I6:9XZVZ1YTG;6SX3XMV3@4>SPQSZR M[A4.$(;^99IA($%X_.5PD5X35D-W!G[TNCF(P'$J5&U8PH>-RYE-1L7>>4Z! MO!/%*>2+!ZW"'#_9VD520@LTN2U0<.$GSJ84J4(Y3G$&G.#8?+G7+8<,?*90 M+=],N[IAUG)'>.KYK]%>Z=WTDJ'O%XS.Q_SJA+;-4K&92SN:]$*RGA&)E(? MP/!W<H&D&Q40*J23P'11NC(&2J+D4F]><_37?%CD=73W\D82FH*ZE75JIM MF?S0LGQJI)JHUJNZ0DU=Y(CY;+-9.^E*C9MJUB,TH-!JVI.293%F]\HV\4%M MS0?I8'(VP]*L6\WG+3[_+7!>,@K4PE+>Y'\VP0=++&@/2&_2T44A()I]/X_:
MV&7\H)+M97&3N5"6K.U!4P-_@LS)RO>RT$DHUG._UJ/AFY.-V%'B+B'H1( M\F;*XP/>#!#E\7<YC6<W\8Q0K>B5E-*-PPSG(L_+0Q0[>;#KP7YVW847/0$3 MD'MRJVG9J5D#;7I^N[SG=@^JPH"DU<GU]"%L8^PN??;V^:LS\HSK_O7H]/G) MV=$CH2P-T&-7!;U'$@G;N'$#Y3!X980N9D</@"<X-@*X(BT;?L*DVN&915 M=Z?AUZL@OR0;Y.O&2J8?5NM<,^U-VWJD?5H)Z/G($W7.@+=\/9GJQJD>(0 M[:+BFSY8Z6%PTW"B]["GW]AD)%:S&8FO,!KQVR\=]HQMY$$]!R$P..=@P#NY M1P+>];T%6WOMK>+#@*H5'@.-!L7L5!M*[_4GN>B'"RE@/^VEH\T%84-M7#\# M^51IVN1@O_@+X@"4#ZOB.81Q1FX%QAG"CBKD\OR845*^NE'\D!Q[CRG._&@ M>U$5%WSO0A9\OH]?U4U@\:"%)U#H'RP>ZYLK"@Y#IMU>+KB21*K]Z<_$H5 M/N._AP"HA1<^"Q;7"=9ZVU.8W2]4N8OXM6U+S<8LI(9^W/+>9_*^[=JS,! M[F+)Q6(>(VZ%%/]9K4/V6,B=$6WI%!H$ZDP"/J3T4CS*+62%*,V0)6""8<H M_Q!$@H]G)O*5'#[IB@9%A,M/QBW1Q9'E4J:,NZC8BW]GV\8!582-;*NBU_ M6C>OW)M7SLU9T2O,O'?@,\Z1!*S;RD78]1FV7],O,/(*]/T"?2H0E:S5:\:^ M6C#TE7M#.6Q9R&G'*,0.U%TX9(X%U5O;G+*RHFI.M.44^[**7>56VY6,BS M@E$@HW@6@3-;$J>PZDUIWIAY94<%9?M>60-3P50!@4SE*R&,*5!%$!R>@"Z2 ME?CR:P7.#F)"3O@JG"/#N[B:'M+;V;-EP+71<&7\/R!)!-]Y@!95,&GP&EN M/VG_^Z[_ONN_[_IOM.OY4$\5\B1ZZNO"I&6G*GH3>5!_BD9(8F&A=[<H>. M(!-8;W@UD2SB]4BM$8(7=0"<PZ)CR&]OKP#BP["IN3K)7.<2@FTH^X:,1 MFL#$C370SJ@3OFD@QI1RB]@@S_RF&B2F;-+WB4VQU6A69/?H[KY37L'7>$D3 MLX.H:%=!RY7<J@3N:CV$F!K!V10#+^"AVH0[[</P+.EZ%BFGN+M^\XH3^^K# MXJ$$!>:_-R7[7>L-I]>]39!--JXS+'Y>P:8D5?8-Y)V]MH%T'?YK10*&744 M,NK&3?E/R27D(Q3=[N'9V=';YV_^UNW:H8OU)6,[2%<2*Z^4JG<^/F*!(& MZT"DG*SSGV5?18H("L:MX.S\]/C%>??MV^[YW]X?X<HZ8]?+;S+EL]%*$ZZ+ M+9]N732+'5<$KY371J&C$\QTQYEHFF=RY/V_=Y9!T09;GI0H-YA"&#!%,0^G M5JY8+LFF*MXV=4F30V8FOC;U"$%H='AH&X;L]MI13Y>MS5(WV2Y):V=SBKK MS2JW=,%991VE16NO7IR3)Z^1XB@(6'*[:LD%%MS_!&*3NVY\\P^OFOHW7SBC MSL['51:.56[IPK'*!KSX=E=;.'F-K'8L_5].K1SE'(;JD6JN>%]D_E/INE* M\V_*+9]_4Q8)!QY5<NK:>XT=UG8NYTOL1HKG?QOG?_N_X6F52R8TJ7MS^.[U M!VC$HGG?8AE,I_U55H$IMG01F*(!=F5[-1I@MU&X!-JX!-K6Z1$X*OXG+NT MW?U7T89TVINMM"SL@DL7AEW8MXRO?CPXK10NCB:Y-.[\]Q1;OHQ3,-5!#,;:
M\TD5C,[80']Z9QJ83RK&DZ:,9=RVOMW:ZK177EVZZ&KK2Q?WS6T-QH1?<869 M=HH)$*ZQQG^S-0;YDF9C@5-OK3/774/9IIW">E6Y9>4:\P);<#GM?X,U1!4N MTX*U8XH4KAE3+!;O+5\K>34IS72*0)G7XVN3LOE9(>:_HA(?6KZ#R7I2N M]56V*/#-UY0:K6A?TF40(O*EUCY[EP;!:ZQBAV[VD:/,/J@KE(O2HG7K1+; M$42)E,]X!33.5D]+2::G^I+I02G)]K249'M:2NR>MCL=B.2A#XIF=/"SAEU* M&T9>]"E"6ZFTCP#MBW=?_A@DZMK:_$XX%Y'ZN(?0G+(*0E[)DR=&8\F2>7 M=Q7;S1^]5R3E15#RQ9@PQB$B$4,3M?OZ%GEY;&DO#W05*J^#M]<@F56$&SI0 MI8TJ/^7OH2S0)20*Q^157I].AL-L5>4<)F]VYQ#WH'WZM8]2>3V9].=677;J M]U*S6^0@9\/-SF0<M4JKR.8:UX__,""BO+DNF<].UC">A$(_%OV'E9Q=(GV MGVG=G\60*R]>H45,>5='US'ZH)-#[email protected]+//$R"?9=B:I%R?S).Y[1&UZLT MGEYMP1J](>3U*+.6!!S^]W%H&R?_Y2JV!9=!D)9F,@OB4+,SF.T:D4.7S+G M"=1I=T8P/:ZEP/D1/P#9[JP2[BOQ1MD!UWGHQWM06\]X&)V2\<5CIKC^ZBL M9CB8XN^_NR/K==-+-Y*S;;!=6-R!NAK:[!YK_0&:"0Q\BGCQ7I/P:GZ3:L51 M>;V)UI>UA1Y:F<;T(LZTN/X-^831:"F?$56X!.@V/W2>RVM[X6E;1&A;VO; M8LZ<KD.VE.E,+MY4#F=,1XTIJY,<I';$&,#L93UWG=B1S"V,'&'L<;")3H8# M*U;HIC=<(-#"<'*5P+EU!TY^ZQ!XDAN4(V_'G_KQE,.L5O3R5P2B@3)TGPR M$</>3&XE\->:9QY[F<3#P0:VM>F?^H)#&O<S\6N48$920G@7'+8!Q-YA&Y_9 MG;*^1?K$W7(7'E]/$&>N)P7EP>_?#Y8PV@E"E"E2RYYE?W$VZG7_X$,#L' M.?@((^8@=ULR%D_P"P2Z47Z,P8\JI0F<87POMP-96B=*<ER[JFXR+JCJ="Y[ ME.AY:))3==/@5-C/5+%6KB/[#!C/8*!AGKMZ=L5SUM',T[K7O?3:\BJ>*_0) M?_Z(L83!II)T08X9).F<3C!%YYU"T!]!VU$>1XV&W7@:YL-*T=]MZEY,DF MMQ"D.$C2_B+%!#*]Z7282!J(T)\4LSY"+T:L=DCO,)+TYB)F,0UR+>"P2#Y MKO^)/)SE83(%[T=Q#&@K<C="#L;JHQJ#HM2>T6ARQISI1*X40%69&%_+*OI) M.-@65!H;P:W)ER>4")5PVB#!SCB&O=";)9C.8+08SI,I%K<4$7*S?UE?P,.8 M.P(MJ*ZIZ'[L6'F0W"0#@J'S/;:#0WG=NXD%Q4FD5@[D^03C0-TQA*HSO8< MBS-\!O1HMHBM?JK3<XIHNSW13V;]A:2!\D0!$)Q+QL1KN9AXT*WA$)M(>8(3 M=XYE?S_&<KW))@>3!:P]X!9AM<IVL0'M3(&MR#V9JE0Y2&93[B#LJN_L-LV M1%DNRY32=7!A],P9IA,#GPSV4WR)46\LJV+0[>UU/!:64_[!07VC@BN%TD_# M$$C/8+O!8HAZA%*KSD,CR3T!I.\>HM0$XYISH-A]H4R:60;YG*_I([$+Q$ MRB>2;-YJ%^*'S8!A,V;0D'38(X?'-ERDM478?VW"_MO5$XNMO,(<1I,)3LGM M==*_YKF6O09:"]'*[[#-_J]F>QZCY;=:X#-E*,Q[L/B3B"\ML9*1XCM'L MZ&N'4=2$Y4P'4YSB9,P!-AQ7_5P2J<75-9;TQM^,VW2PDH,66#74>\*F4H_ M)E,-O2UI&^EY61<GEU;_6IZ=_?EB1B.P!N771#^>S7O)F(=])N>(28S"&Y4- M]!DQJDF2='-W-RLH(3GE%+E4;AK5IOEG[M9G1<Y*$VO(-F>/"7@PQ-XP$/@ MW@_*:5:+&2@HW8Q\V8L/04460V>@)62LUH@+.N"^FV0G!BB<="][DHZ7<\( MJD6@YO?@G>Q^YTC$M;E75O.MN2W3M'*@E5TG6JC+:)6LP&?UN)PZY#"J1$ M"J30_?(RIB:G(2DKAZ2XHM:J/B.SE*.*EI0/RN30,WQ%_]5(:*-WVJ1CG?). M/]HSX;<2Y.;F+/"V/*R81J#8X*;H7]WJHY;B>R5.,AL\2V9W=H):QU8DT MHY;)TV6LWD)F+.KA7*B.L,0[H!6/?CJ#[N%[/+"U=M!5*/6=EWI0B&N_YGP MB@L=P3(;)J._G[XY?GM\WCT\^WT#?G?E71<-_MW)VZ.W-E([I=@X,#DF:B4/ MW:%V(*YFDUO[#B7S"?SWK![@TG?X;Z/,^%#4M26%0LUNI^/=0\>KHQU;[= MX8,%_;)!Z'&@=U!$;.W6C?^OBW3"Y>5%]"F-'D66[*S1-CF7!Q9ZBVA3$^ M1+G6^/"FHML:]3XEH\6(J`9ZW7)Z#VP7\'3'L5IEH<8!_E0W7:;&07"7GV\\
MH1USHU@XX&!LKQ5B^6FW8@_X5P_DJI7*:+(%T[PPF/:-3KXBDF#02W::H, M@#VR*F0([-_NY@I-WI]5V*FZ[RC31#T#C0KV7J(5UN!1V1+AM0%.VNJBC* M:\2S*C71Z2&"CY:2!Y#92Y685_VKQ?CC\2WICW)[%T.XT_)13),YG>6=',R M$[,>I-($!;'HWB;#85=*%/(HP'5$ZAC5V9PAYO[1''/1%$%L+?\^LC"(S MI\@U<^J5%BQ#9DV=)@.>OPGF3%,8CQ!"+2%(VDK0!?3#V=%I)5@+RI4_V8Z? MGPBG90O=S#BL*Z&FWEOED*!RU=[&B0A*:=S@.%<L"2>;HE(0/Y8BF+?80, M'<230_).K+,&]#JY3.1FGJ\Q\EP-G-B3OGP:0)AY1PQQDL!27X[OP_@]BAZT M59"F$$=#6D"A,4[?@@+=5/!!-OM0MZL_Q3A.Y@2KV*0\28FYXI#7@RADR6H M0^I"*F=1=NA3)8)_GCW#6K\<GOW2?7Y\?H8I\52$<3F))M";LBG#EG.(H5^@ M:3\A5VF$E>JT&8&![Z6,!NFL+1A)/P>KOD&6ML@9<Z>L]69^:RC%KM(4%3* M[2TFA\\2W2Z@\89XE:*U%,24B![R.;+S^<5"""?R/)D1@=25][?!^@2-+.A MTF2[HY/84/FQE*0N)PNTTQ)0BZU>^ICR"5++2\(<ZZP:CJ+KX,!L*?LV MZ)[D/5J'<-A)8>&CE97K%3Q=:Q\VK%1<0&9V%*Z'[NA>()M5K7ZOV0NBR?N MWK.&4Z0AN.UIYQIJ!:W["UOUQP;>#M3'E9&MC*M=06R[+V1+*%@/3EP\R"X MM"MZDJ=S0,[L-\;C3I/3<E7Z0"RB0*##3Q4<LWTQ/FD^'E^%I][3=BW>)29 MR6XWIVEJ+(?8X23>L^J]IY#DM"5SV"9WK2WP'"=ZT.W>]I)Y=S)V3D^^_H5 MTMI+68$8A66R7,9F[\N7R]HCT3+<D-!H*-^&-0;MXE*^FJMP!13P2Q'W%K9 M=!ILP6.'&QVR&G6:OG(OP-](:0/:=(<^<[(,0?M_9DL^@)+$AP+9UI4FS# M\;C7V:#D)#+C#(3;Z&=%'[00N10F>]&Y'<G@A,;Y3&Z9HNY1U*JI=>$7\ZQ M!5Q5TP#Y!TLB;X'%S+->2;;X\'*N;!D5G8BR5K/>E)&6GL'+?)L5>CL#%=QL MZ2+5Y598I[HL>HZ^C/L(;-Q$WV3T!MQ>8:F:1HJ%-\IO9+(]*;O9M2##$Z< MZNJFFE3$#2M&&"'+8NR#2@ZRC>J)/XT#*@J11-OBM%OU"FL5M3!:E9%4?8S M)?%GMI0D5J:,_)$M@70<--NFG+[T<&MHVM],KT/(Q/I.>)VHN_<D8CG5P-^] M8;F'$GAU2Z/+@R!_/1JHP2J5;+/HV2]OWSP_=N!I:E$-CJ"J44[52_]F"U& M+B.9PFE\!;8Y-/SH\C3M)=MLJLI%=CG4V2$W)"S\=%74Z<)T'I=*0(E[8,@Q M]C3J"B.MD[S=P%&A#V;=Q1^@S'M[^+?3H\.7^L?1;T<OZ(>Y#-=4E7)9/OYR M>"6%.CEXW=.7)^_>_T"P.MBCYO1]4$[\25I?J-*K9E(JO5O+&AU#:HI([ M'(S=9A6F+)?R=U<YXZ#;SO44D"OA,F,]Z^C:%]8?W)WG\)>C$;(:#BL&- M<9!V\!B!#U;\HO@##X4<&4K=J\%C<2+H7PQDQ^P$!3,(__D.UE@6_==G)=1 MJ7L!/5>5(K50363&"S)"D49WJ*X6D#"E'7+F<IE;UA=[20A:8:))G+F#+< M=JO._K*[2-#2DQCI+:/DH^(AV5VW.PTZY@+HMFHAM!D$+=C\(GSR\(PG_WZ MGI6M97L?5'@]'K_4N:UE/3=/M3<<D3^6E:R&G-O(;:3B*V4C;R/O^[G5:R8 M60#Y/L\PP;RLD@P>$CA^F%QLWC!4?X^N[>#1-HMXL47M>M[]0*/?J]N,:/9 MVJ7$N!"RW';2@<C]R3P>G*KO)O-X#\QI0T#8Z:7I8@2F:["0>SED"4%QX]. M&],KPP4DL:!2]#A7H)4"'(WG.AUSBK<V6!VJ3E9\<')3'E?%!;HE_^-15":T M-5BG74@72B!K@=Z09]Z!&.>6&,:7<RFS4(%YO%H&KI.X(5=V:M&U?K1M'^T M](_19("-(/!<3(#@V"VY@%M-:M]J$9"R9:G-,KZM<UNVQ'<?6W>M=LM604EA MFNT*GAOZ<3NP6>N?7N%?Q7]T\P$?O8-/I@?3(S./:]WK<?PT-5U(&[+36;$' M4G8#4G#_0<A\2XHW3:^M+IK7!!13=ZW@RL-41,XTE\R*_Q!2DJO0:*O&%*& M.L:EI0099C7*F^0E"]-WQ1:##A,Q/T$_.7D0ZIP<(\Y",@!F;ZU?A!:OS MT?3OG<[O0$5MJ7N07,D]=K!6;S1;[:W.]LYN[Z(O-]G5=?+O'X>C\63ZSUDZ M7]S<?KK[UYJ*4$CVX160:,+3Y%R^.3Q]C4FQ2M2@'&KR</G+UX>O7K]R_&_ M_>7-VW<G[__7Z=GYA[_^^MO?_C<U:;5SQ<?_3X0__F_CTY/WA^^5.5@"(1< MQ(_C]_E=NE4+.$4V94^K1NDALGNBG^D^2*_I)_(0LC1P5Q=Y8/3@[?OV. MX:OAJAQ[^;BZK3F2C_5?B(4;+A](&KR8Y_O_RL&:5%^9Z@AJ^GW;SZ<^0U% M/ZU0\>S]X8LCOZ8(U+0RK^NJ1R^.#]]8;X2C)KF*!@T;U@>;-$G,^M&JV$[% M>PH^P!XX'/,>!HA8-+?DRCZ_4".-13]AC6$@K^Z!>$9$ZX9/ZN:;I<[KB] M?U=/2.0LZW6.M?4O$!II-NDM]U5]T<<B2=E7@81KK*-H+=*M.;/:->E=;E MWI-GJ!Y?9WEB.-=?1.N[*\RT<'.WZ[-"[N0!\<R-G@^<V4-%=XH%JMWS/3 M_:.S@\SK"7X_.8+^&_:MQ!.)7.1ZZ&HU]VVY(ZJHU9@N@K/YNYW)PGVJ/ZPV M3Q%])K13\F\A;R=@[@_W!#C.!ZPH^7Q>^WQAFQ,@CE;%I>7&QN4G1)(J=" M8AJ*\.LVI;L<2=985C!IB7=07]K:Z>A\!O;P07"/(.IHINU&EZ,',,)SP1. MPS\7O6%RF<!1)-_US4]J4D,\AB8:0Z(B-SW(4U>&7'75!/%N/NR>W#H\(%! M)P4>$'0XH*-F]S89S*\YYS6)6GIRJ\(&S3=OH5*29]]B^-/#>2F,1IO&M<IG M5.V;02[8+A!P0BAGR^HV91,\([A@-LM2KS)\H^5>&B:3+HZ8WK)\]0G'[=2 MB0(T/%^V4BG'*U\.-TLE_G5E!MO7]H%0+^#'92(/:);@JV(=KPU[>.F)OD_2 M':ST'1')CZ96QIRS*YAQ74>],3#B/4%>[2K%Q&ARHQRHT7F%0BAY"P6%_'= M!(U^/55'"GORGB%JO1#X,2:]-BMNZ(R3:WJDA:VWY#@]RBZ;ROL[<G5G8E& M7?DZVKM*66M+-K8"AEL*TO&TJMX0?X6",.*IRDZI."B2?I\%'9B<]$?J\#6- MP$F$M9^(__0\2:"PW1==5G(#GZ^9*'5*V&ZM>!.X&ZH$_-_;J9**9Q=.X M-P>[+=1XXKK:P[CQ.8"J=*"FTPJ<_;!(.?/(BED62KYQ@_1/M@T"R-8F)[F] MO9Y@G!6O]!_@+<+N/Y@MEL[#<PS'A/KS*;FY0T]'JP_TD:"-^A6QQ8"OE<* M6ME*RAY/8\7Q/XT6H6PVF\K7)DB&<52-JSV:Y_48*?V1R1M&[T^;2[U[E=`/ MP!48=*NT@OTQR$O=8@;CP%T0ZIV#SLPYR8!JV4PPPN0&X\*54%X!_9)\^F5:
ML3;#TI9,69X>[email protected]+:SWD@IEBIZ(CXS$;9WW;K6E\KB<$MA&/(^;TI\49 MA)Z8H1(HU?B*+Y<8Y:3H4>',SQYDF_8DENH4;'R[Q160AL7U<#%Z*RRTB> MQG,V+UOV0FOU&J,=Q6[)TP-2S37;57ER\O'Q@?--VT<'X&A4*1+F-OX)G,7P M.B)-0J>K:RIFP(K,1FSF(.KEGS3<>5->>8*+8LAT^(Z21U64'!F94XUDT= M'JNUS>?&\D9Q=L,^1<-XG)=!!F]6A=96TB$AG[;Z$2%*5F[E21HX'7!/PJT# M004"IX>FM/#H9\%,-I3H*F_+8AJV":O?Z>H4%L#FGFF1ZVD<IMR'&*-F"%, MJ>@YR,BN$5W(*T!!.8X;E*)?>23;PQ&RZ%0@=TF5)IU25E$ZQAV$8X=X)YU< M;*D10<TZ3IS:R!/3\FVN<!KRY&/B4C9ANC"!&-^:2ULH*$G4K0T62.>,/ M&G*9P0Q\*SO'84Z^U5S<,NP5N,,PWY6?T$;Y(9&[N\X5KKS?_[-<1HV>E1L, ME77J(B8W@F2(UC5#-&D7./YN5OBLY>FF@F=M'Q_;(\?*8(]]7N(-A&^.$X5+ M9FNWV@2ZNEVO-G54[)SS>T.=]N#C$JA]#@0$_/@%7>V3%9_%-DGN<5SE M%DC2:R2WX[O;WIU*\,SKP5-ESQ!,&CPPNKWK#$@")6JE+'%A4A4(<<&5Q;:K M.M65*<@WW=N-M4P@YYAY3G(V62;>G*0I7FREAS?_C7[G%*O*'\8*,/J>\B8 MZ5N*V7$\LDVB3.?-;!_)08PA9'M9;M1%K%=LF$F/[*5%MI&R)'U:EO/E]2 [email protected]&^4WJ$AN5-0>+P75G#UDBCX#4'X)V:R3CPA8C(M]'-]R M!"8%MT(#-=Q;Z0:Q7(KG4D^WIHCRDEGS0IQIEB[2-O7>W;SZLAK\=N;E2GIJ M)M/:,PVT0GF0K;/'65MUYD%5:Y(#9A[LZ%HQ*ELJ(;[%AB1N103]O!Z+?NG M(^WAX<*IH^*;.;1TS2(!:RC8S^T_3WTHI!"E6270;#8@T,X0;,]-T#Z"&"S M1>\2]@APA@4$B2@R09G"<:4HQ70;HI8#J<=K+.L'3O//?R9E]RPNCOJ?9+/ M8+\!+,.#IR*.8-_8%>"@WH-C^TH27>Z5JB[I+SZ%@*VLSE@-VVW)L<MMR^J* M+#:8W&Y8([-2KV'-D5+%KOJU_0^W>J\WL9OP9TEN>9Q.NU(O%19P!+0]SM3# M/]63_6FF6(3B/FY323A+D.S-B!%A35]\N"MBZ@M>;5FFUW57+Y)P3B!5P!T MTSDD'9:'V7TD8W:B%K!3_>A4__O;PW\[.76SN?QNNUT"@P_./H>_'('=2WN8 M+V_E[V^/WV4N9@4-V9"VCGQ)7TGB@(5YX'<V,ADV=)&OZ/=G8RJML)B2(#? M]2-5/2PHFL:$%VRO._E8S8#MR(]IC@-Y1JR;HC8<DO8I""W-']&L&S,C.Y M7=Z]^)$%<D%JJY#=G,F1DY5=[;2\B7DB0HWLV!38,?H=%!^#1>&INH,JRCD MJB#00THPW=[>-5%_FY9_;D#UAFO8/(HGES$4Y19#^A-]85(N6?TGVEA5$= MAK+[1B^#5Y\&6#-=00-)*7:-N36N&F+6GH:8-6=D3%=QMZ*V2E\BPD="8LE] MJ;"XF"G4V-=*S1_U8W5*:'=Z>4S\\:.&LV7I$,\4%J7,*T0'H4*?#=O3WFDC M#.;NCH$+$J#*98B<T00Q5X7G-VILXNY&Q>B$Z?7R7;D$B!:M@#?N)R,NL# MJ9@.%U="DIR$HDLGLP&A[M!]NQUJ__A$::2,$5?1$=##.5,'%VAHGF4U)4^> M0()1]8>#_%2M6EDON&K5LB8J?,\.-."1D7DDNQU:SPS.GO-0E<+J4++D)^^. M-#MN5J\]B#PQB"O4NP;$$*R0+BN9$&@?[!L$'O[+?8@K)SRLC>-2KKWE@2 M"$I[MP4+9JN^;1;,17PE.^0NCG]?@(?9G$6*3T1O-Q2]X9U="^RE6B%5J!5M M8MGMH";G2TE&M.1A#4O#YFSQ$"WQ]B'%!)/[;=-X;L/@V*1;&7GHVE/A4Q*Z MGJ/"TC>)%CFR3U8Q0<<QC4]$LUCE!&4E1Z)3*ONM5H,![=,_F"/#,IGZR-R M*6FJ^:3NP.U-SO0NJZ-FR9N][%+[5-2"Y;NW5@73T#M9L-W9I5NK"?JUW) M:%6(.0$/9_G,)KI$J-C(N\SO:(/7<YD_2:Z=']^0V,.XWDL6!7HB,=P#978 MZ^K0QGX4:K574:8/XK1?>X;*0_#N.GKU_/CU?M80NUQ#SJ3RV)62M,0LCS%) M$2&XU]7D!<0H;.<6Y'?0%>7(7$JBQYR"\=RF>+"J)T$8SP#+^/VZ#0:)BY# M2TP0S<\^O63/UX!R"D0+%0,IN"$@LJ6(QX2'1;*X,C0YLC?F3@!5S0%[N8 M/NW*/_)@,SYU"](D6=;:;#O94RRG'0Q-XY-3J5S\+>M?':KD]10GWT2FM=-J M:B\B+0)E,"O)IXEXZ1([.('/*KTU+3M2?6=7+X2KX?C@2BRN'%B-4-VXP-.Q MX!*=I]R]BG="D!3G=+V8XW@JI#QGSNN*SU2RY&B7T4=A4:MEITKP)2L^4TK/ M6J'F?GA0GKD4*SPV3A%S!'6:NZBUZXQ2(7D:@)T4*"P%3K<?AFIRJ=5B,]3 M6L6,Q[I6=9";@WTM;CG![UY#]@YUS?(V+8+%,M!"KQ,SQRL]%^C=K;A$VQ4 M*G7T=MK4T:=[:9F+1W;_@>V/[&141*AC,B:U?'F:":T5H*U$,6C8X686VKM M%22#9U^X3U=J^EMO5AC,HV79JN#L.D=[;#AF%?#1G%<$.-9H46;:9\LY=E; M@#A/4F.S888>"Y9#)6DUX.,"M[57$\/IX]MLMVSWDTW%-2\U<HBL9:&VU(B1 ML]C,3KR?$<0A,T=(K1!2,:&PG[G<!1_O-H!3NL5TEZ)'WL2MBJ-0A.V7K3= MMH0[!,,$G.^@H(#?"0P*'A:I0)P0?%!"$K3^U9#XH\WA,ZH"7<7\&20V0 M.3),*<X"VY<@43(HV1G,>TSLD&3?%O@\S=64OF"G?>V!>(\]]N5;C)W?))^I MCIA<6]94V[(P\:64OT"[OKO54>Y"60TKK$8FM21J/M9:4;8XDQ<),Z(7'DF MSP\'![=*$01!=:PI$#(T5]F-(:MCG0SI]*B"Q;*KO$9Q2-4%M1&-KXYRHGLB M-H8<&UZ@%2<I+Y@J%*!'1D63MD,LL$-//OE\/3H907NZ]LC#.6P8FLKEIRC M2RGVV@[$='OI!V(JT6M)1R@D*\_>K2S=/N>$I%0=W>K,CG)9!24V/!-E?]7+ M][#A9%V(M4":C$!TH2*+(\GZ.3188W$KTAK)F[G[$2D(85+._W,;SGEUW] MO6P6R.6"AB@W1T,#6[4Z]LF:-T'EU.+6Y&/K(>EVAG$I;!Q1UVT44;4-8@, MB=3+>4LA>XC+,><9YHZZCDZ8\FN@PLC]]TD^U)]K@JK;R+0=?OE[#?GW#C& MVY7?P-[ZWB7Q)6_UR)N9/6MUGEL*<+DH>V,!DOD,,NTM4@3PVQ.(M6ZQ)) MFQ"6SY.Z]LQ35>,*8O\W;LX4?OITA<*1];155ZFI!?T)MP</=^^>(HP1"B MABY?SGT!H63U?5&K)4S<^I)H'GW:B.*</-8E#VHP(SU>>)M$]R#^AH#<A%$ M1*/>UDP?:%9(_D)7#N4&@<ILN7$Y%P)@C%\NAL"@R8CU1K_-*?$()"O:O M?T+#MI@EZ!N>S5@RYO%D>=0:3EC?PM"Y-(AA(9S:%"CSNDSZB:'&W'">8RP MLV?]H_>^GC]+RM_GO2V^F#192QR$.'!2#TTO&2YFL<KMTI$\5@NSN[24*P.P M0Z1V'"3I1^"QY:(8;KCN@):;PV!"J8V*(/#"WH&.$W3(8FT@!)<6I1.?$:I0 MN3F7K'>6OZ(T>S6E(H8/QWG3O;Z"QU:IB7S0K@N@(OSX++E@*LE&J>:7H M5RI^OAGPYY4D?B:W8HK2!"!VC0<&U9@C%W'VS[K'9Z='K\TJ@+2)*CR(E#_ M%6<]_&HJ>M=CB+3LX,NQ5$4!J9B0HNSC7$9CDSF4)-?)N)Z,1K)=_A5OLWU M9#$<$&<TC],Y!VVB!VO<FPTACM(2=CF4Q]6DJ_6E7U*PW0?G[R"\[TF@[S M-1[F-$]L2;A,R0,SI>^<$?GE687QN^1:0B49M$H[9Y>H;$,#GKC>)'.%!!_8 M')G\10#RCY-"QM4\C^GP?1(XR(,Q<)N<L\U=3!K02RC,@*+FO5JHPGOTMZ! M+^K(8$GVXS29@%(/B,N&$/\&AP8Z3N)=%5$($S<&!S1%5_%HP@?1:J1D!"8& MD6F4(I4J*5-N09:KC-.CA1^'LXQ![?CL@DI2^,1<U4J0#BG4.JF#91\TXZ MP0J3&.O0^N(V3"3!8IKIFV06IPMZPXJ%%$</TW%?!(K7Z&S;]E1[B7%^JL+U M)4+HCS8.:6"]8CW;S[T:B&6HBKH-1UK<#"*3YK41<LAR7O-NW>,H#+EUI(O M,8^GN3G^<%/1"+:W$9NFH7,A_H=.T"7_13/@/)YF#XMPT*:V8VKEAL6,E95X M^E;2YG=_/7QS_/+P_*A2T9L-07<CN><4EFW)7<J:8BFU2=Z&@G:3400"3?[ M@-+S-BIV<(XM@3OUPS8@V)B122*P,K^"2Y+7L3:V=1+D9$.]:[GD5*CSD%V M35)S-IHMC6BL'EJW@XGHXA\'P155%<ZP1IHTJ;!W4GW2S0/W*,_<\.)S9/-1 MM&\'W:@*3U7"%>_5"%.IC@'74:/5VJZVE#X:TQU0D(?.*-4CBX\I3B)B2W MO:-6"ZCZNMD#"3"5D!'9$KX4':J0K#;*DCW79)R,G82`AQ]XWUR-G!*I!:
M*\!R[&5__$'J)<W&Z7U.&GN_JGDM>,$W$O>2!70(HFR0*6K0S*IBYC/8 M72UZL]YX'H.='\:$2#B41472)260Q)20%LY^CY.@R2_XYAN"DT-&MLY/:0Q( M99C?/TTW/(QYEQ%F(AC*-6+I#$.W%=J@<L]D7$!<7I27$E<9;L(O'ZA::;61 M,DRGE\CEB9/U`Q#XR0/4&S+7DF^_RW26W$"HJ'Z9I0\I>(8Z<PQ3<8&>V#E2 M@9/%YO#%BZ.S_4P+DRFV$)0J_30X@"8)+7QX#T=<]_#\^.V1Y83CGA4'YMC4 MKXOCPCO:00,F4.H6VDWEX:V<.#,>2Z7U/!6_\(A$*==E260P-SS/(/<F):LY M""<->@539O(&N:Y(IDTC9=ZK,<>04%HOM",$(H+<^VS/XH.FO;7+".FA0^[ M-."HJIUZTCU\__[H'>4,HG?R!$A!EP1(##N!E\Q&4NN.*;\[41_Z'JAAX(:
MG6""GJBA**=19;[1]Q>Q^".!!'D-^A(!&I/XXB$@BVK605&@'P'0<@^ZWF M%GPA?QPD:4Z8;B"I$!M"M;+@(%%V-VQX%@R/&B8/!8\MI"!1[8.=&-&?1P M\)HDVX$3+.?<E<_XE:P8ZHV^*X4V;W<#6XEMQ"%,5(4X$U(5UC0">%6=54R MV4)7D2L*Y"YV#:%I^2^,0/2C.!78Q]((4%R)6W5TL&MLM2USB0D"93_W!XM2 MY.'YFB#%8/0AZUVW)&6!;=61+'JC&4A<O"3PMI07PZ*Y/(YNY4XE@<WLRU? M7/=86_[24OI^R^E(ROUJX6R3G:W3V/7RNF9P*0'6!?C].+[>:RRG.X=\WK/ MU:28FER,?]!G-^G\=BVCZBKZQZ=GHHU+['@'EM7,9ONX\$_QFM5E1.!Q,7. M=IL'2IY8;R$I<,_$"6.<(^FVP"N6-%[)/*05(_DJA)R0T64Y4I(5)5^L]BL5 M:OU*8:5?)1^#;,HKIK-%1I'MND9M9DT:.'U`'P6S5K@+PF@'D!X(=IK-XLF+ M9*SD)<4NUXNY,QA31?*V&S0AVYVV6;F,51W0Z#&(=58-Q[VVQE1DE'+4,RSK M``0M+VYA@H1U>272YG$O,L2151G48F7_(:'Q*#US&!E/W<L#QE/W2V>+,:+; M-3JBV=C;:NYM[13BXIF*/C#TUI:!Q>O@,19US&F&FC-/4W/L@!'72D=57P@ MM3VNTA%4"X<91;TL,U,F=J:01]D4A9;V21_4YIW!FSG&[U4(_;OS<-;%# M\UMP'#/^[\S2F>SRK+>93N;L"@\QS9QKS\93:%'G5+?+@:W@%DC,D,?^> M&WU9FF-&+[IG>N-'R)T'G9Z@G8]='=;HTR3$MMW=#RN7F@T)99/E()P?-F# MV15>0:BN*)V.=QG$VB5Z'NW6'PK5*.(B-&">*1?DG:WAL<(=RURY\K-HB#WB MGV@;-F*U495"2P._+8@?\5CA][8Q%EW88(]:9<G%M;VI?.FQ:@0@8*3Z6# M]]'P?K9T(OHIQF],;4&-&<*K:PJAG:L$=(!9^A-P_XRF!I\-*H*3EB@=*>E MTK_<].%6&<)8,DW-AQ=%#641];+#LACW+B\ED3;C@K1<SWY->&.T3P#7;%-V M?7>\4M_Y+*)9ZV-A&.-[3Y#F*A*]A4V"0>%*\G.JZXK.W*)S08'O!1J"F@* MX;5J>+5BNQ8::NQ2%HJQ/SZOC"9:<4.6_D//D)0Q"95QP=GC66;U3ZY;(R M?]C=<;H=Y9>V'_LD!/!#2V&UQ;AL+>+.W"'/[-V&-@/AP9.,RY-7FB;&26O MK(*AJGO3&Y:1+:]4,XG?0RYS4\4?K9N6R#=1ZR=K)64((P'4L[5GD&/9(?N M:VYR>EHIP.)<P0A%R[Z$<V<>92+G5^N\,C'Y/5-A-7S='B;@$[SRBB+I)+AZ M?"E,@]:)&MF'9.\:R6'NZ-;N<P=W798M,Y>H[[7W"KF[0+UB+7+3]=56H== MOTY)OC/9T1G$8:SM)GPIDRP].O!66$V,S:^L9EF6+Q=4J&2SEX\MZP/$I]WB M5R5OC[5/.?GFZ9^@"$6.$DQY>Q)C:M@G@"P,$[*C>DC&R.4R0!`N#!T$ MY#C)*3KZ(548KTVKXNS-X?,N.:H87<'8T_*_/CQ^MY\W-30+/*QJ6-1\\>4:
M7S:3,W9&VAEYF)RQ-S4%Q;_AU%#RL$Y3);0,3HQ[48[&O>8*TG=4(7%U<G4] MIWF#2U\\=5Y.'MT7&$2T<EM/)WEYY$=VYYTV$7L[MQE:T'O;(GN&8U9FKY M#\C66V77NG4"69S,8TPCRQX=6&2N_3&[S/1]M=#L"WJIP=.;#RO%YZ+;CPJA M[4>,3N_*[UM[K7HQC0^!VGLDOL$ZQ>VZ[>7F21"3?^+-AS)D-!/[@(LTF MF?V)4Q209+.(26UC2CK[FY+DA(H2EF1+$42*U)4/NWZ3#<UJ>AM\S^.AE MZ;-2[''./GN!ZER/H$:3'S&FN0.-Q-]]&WK]4_WR]ZQU567G\S8Z2BHA(VW= MV1]VAC^K5W,-HX0@^1OWK)3$N9X8HHBWRKE1P5Q!4YU/UY]U;E=VTPPUTK M.;Y#T"#8HW&QT?("AQ2*+%U:#O4&1I&3?!(+LE#24^6^UZJ5*L+'L<42M33L MEF-%[KJ=KJS^UNJ$VFJT*9.C5GE"LTBVK8ID"F@;?L"!%3)C02OH@-JX8)3 M4>/3UZS*AF"7R7/%*TX*>R]8*Z]PEJZ6O(S??Y8WA!R[#^,E3C=$U*>CO?\
M0+6G^'Z+D1@.<[+JQR/Q'QN&>ZSI5G>]OHNOKBOE-6G0%N>)E;AK:2&<4I MP7SY>I#D1GHHG'VY/Q@E-P*U_QWB<G-M(:G;E30/[4<I#3"H63[+3JP'G MQZX!L+==:$;@$'P1$W;'U6*R2#,0]F[#)IT#Z.2\F6!GH;<:XSY#[Y$6QG8* MWDC_EN-5TS\TQZ+1<N')WJQ5EEVO(>HZ2S0;EL/PV"KIWGA>(7P\]7$0NE M@-*)AKZ-%&)'Q%A]JH;BPSHMGB?F?N<L507<#*6.@O[R1-A_ZX]ZP\G::Q& MWU_CD?M06].E&;W,T@824E@K1$M*;I'0VY8"'<<'J2P,#\F;\?F;PY_IN[D\
MFBZ!>;1?Q1="[$J>:V^KO==8(HN;JH6\VB[ZB>_N_L\1Q\=!+B@D#9(;,%DS MF\W"$?AO)?7><P1:.Y2$51^*MCR+OAZR-NC+Y,?]Q%N?QTZODTNVU3RU$O^ M"PC!U]AJ?Q=RO[&0FR=?A7@AZ2BL_P,;NI>+@7E^_>GG[-X%4FW10%=+4N, M68>X3SD8%A6A8%U_9<(UQ9.[)6B)JOL1?%&H@$XYS4/ZJY5Y>Y^(<!91JP7% M1GI+D)7LRS3L!M;5;E-K0-Q'951NH;K,7'B7:L\F4[!3/>"BPE6<3,*K2M_, M6U:Z0%9'7F\5KJMP3<J,O9U_+)<(L31!1T[(!+6'H'FS6(SE1@32>4MXZJ/> M.)DNABK%'LJ27!_<I4"``N%TB$A1&BM=XVNIL&CMM?,C4$0P9!@SK4E58M]$ MJQLZ5XGR&IA1Z)88)>FH-^]?KSEIGJQL`TWR)Z(/Q;&BD];:7]_N89XI]FE- M\663,5W#$^(?XS4[L&^?PZ"6O$;A6ZSP$O;#2(^S2WH<,U]V$9561GF3/X&6 MI_',X,5X:6$8<<;-"J-A:'+SUX"<_)[8/@%>*?*\E>_RD11M%1*M9K?DJX(6 MJ-EME9K%S$*7\4R%4O$C!G$F1<X#;D'L!_B_Q>%=:-_/VXAV&9_&[^XU&H5[ MT:E<N!VW2.WB:%W``^D\EM7'@[-X'DBV%O(V-'Y">Y"H;]CKPXX<3\:U>#2= MW_%R>US?&7X2:[@OZ6]M0HD-Z!9Z)=;TS67!ED3WG<(Y(97A(%FS72A0@\,2 MT>\N,MYWGU?*K?10FZHY9';-J_Q2E%.);^&'SNHLM+5\;RG#QU5BPY1.=Y@ MCH.R%3_+UB.*0_&S49NJMR3?THN!_&E./OU\#T[&QR_>W6"R834,^6V'<KW MF_>&<,H^X(:]&:7]WCB\6=6]O(VJ[OL&A_9>O=AAT%0LVJ#;Z/Z^W;#2\AI MKHI.=+<:-P#A2S1B[&0Q$]B\$X&>YUM(Z@U[7FQ?0E(I9VYR,B^:G\&"P./B MLEF2"!\P92A'Y;C1Q2O&Y6PFTSATMZC'^!O"H=1G.YNN@/6V8#9_N%A_AKU M>J?=%C](FK'=Z>!G@W_+;\U.O;XM1&>[V>BTM^K-.MQMU5L_B/H/_P5_"^!' MA?@!%G-QN7B6_O_[N]A-O76)OBOHW;56T?Z1F[FUJ!+=G,V\N=<*V=O<;N M7FO7DJA0GN)M_->CT[/CDW=R/S4?2;GC_,4O;X[^>O1&_FX]$F<?GJM?S4>U MH]_.3P]U^379S;5'4>9B9PUHZ.'IBU_$WH'X<SF]CH=#\,P;Q:(V$G\("(VN M26*QF6SL=#:3EOR'?J>+<7NQF4Y[LWZGS==ZL]'&.ORKRO0:C3K^ED3^T4/- MD7SB]>:HL_-QLR?7?+(I3Y3>*[email protected]];GH.1_C?P)S6ND<'YW23]- M'RI.2?*M[R:W-D04R"[Q)]F@27*+<-_L<P^WYY)CFLQZDMPR-!5$[B'PY@+ MY)6C8JF0I)/3_PJNW!&!_V-:\[email protected]<5EW+U+I6[7<O6R[_')_?*D^_[T MY45!N:3'HCI/Q[NO-[:O$PW!Q3^EUTJUKW@\K#N^^=U:V]K.W]).!6+E@&! M+D06]@(<V67]_F83$EL376V=XA;3$:C>)#(HQ.\46]ZR1.RHV*9S32#"K, M*\&H6A[1XQDE#"?/0.\V*CE@/)^E<ZNDTE)0Z6<$OXT_@GF.'7@ME"T((9ZO MD-WX&003/.!$QY_B?GB:Z4[>)-/=@(JK53C%@6J9"6XU.J!5AH^,J=7V,A! MFV8]:)VD\I%CXY&C$FS)>!M[*GD>;=&^6L4;:\-*K"6'ZLR[5GR#[+.N+> M5J@'G%9<->%YY5MY$\NWL]JI1J-P9D/UGNW@2Z,^-GTQ""*%L1VR@'#2MQ MG;\KD187A7@VH]&X:9'Z'1AV.3Q6?=_?3@Y/SQ^=WS.MW"3OH2KW9>G)^^] M"C8(J8CTC\E%0!<@]!%,!KJEZS0$BLJHI]9DZOW7^BN[;T;]<>E&@<,:\"I M6-H8:[^ET:CYH;+8,)'TBN(NYR,OB5Q5)%VX#P\T1?TJG@#ZFPIKQL1:7! M)2D_4P^3<5?RSQ6.X,X2R62@XFFSMQ762SJ?@K"O\^?:8V5O72<SH-FZ?%%^ MD1>C"**=X=[P^S0H,@/&I2O>,5P6=L56F8OB6HY!>A,:%I/\'AH+'(0' MI#6@$$[#M(9OY=$:ONW1FOIN021@)Z]>AM:TZVC?HP\+@)-W^]O#=R_?G+SX MBSKWGSR!$A"1Z<"8#H*X)N\/@8G.OGMM]>G[Z4\?W@U&6=',V+$-.(A\L M+!MO%=FM.M%-1BMUF"F[KY!HSJPW;1U@)=KAG-P<A!)Y^%XCF3<'RX&,5>X M3#>N,S.<+1)<0-EB:FRD[^0EM3'!=6N6_(E&;N5K?M/7%\\5>^>SC>NGV5O M,%L;N@7T&FY$_@TU@UC+KM=+1YND*?4:A!L7R5PR2'#^:@M!)&.6EO;U<96 MP"]=SGKW8OB1@51"]V"?!6_=Q+,TF8RS>#4EPRH;8W\*!M%K^3HE#%[.N<,* M8'1=]$&W+'"NTCK!-EM+$#[BIV%>T01\:Q'!6T7:'!W+A\U_9==/^NJG4) M7^!U@OL+2B@()1L4!Z[[+SOXYV(RQSOX[>]O#W]#SN+L=T2KL3T@<(K!<9>^ M_;WQ>W"P\50GWP=]+QG/X1:;V,EE'ST4MW>V.0CA$4*YSL889(#.I5V:.OV MKS%,[*,\'KJ;'0#9YA5-!E+&249:%8J+6<'6DI<Z07P)5P/&3B_(O,I+B]G M/<RO1(:D-+]G<I*FT[MNDG9OIY@5=R0;G?DM(L@>]]QIZMN0L-%H*0F#(BN0 M,"AV/XEJ2?TL"4/)JJ'".ESJ@;'?6:)B49M'D;=V?E$Y8Y[WT0'^4TQ$-Q MD\SF"T'5.'G8]GX3$QG(24W*@LVX.G@SBGKB(P9BE\V^*-6Y@#;SC&9$( M<W'>]N[(@E2'-^DT+:U]_*D?3RD%'&=!24VT.P073R9BV)M=Q8SZ&P-TLC"N M#YA>WJCSW?"[=H:^?L7SEXU&G[@#_N[E@R(W"&!!_P63FT[VS!J\C=VZ!$ MB7\:Q)>Z"&/7V!0CEZ6ZI^:]7K=N7-\8F40KW]JR_L(U?]6Q_M/Y;..-T\@ MKTPJ1WW8(W=R>=:85L[>'YZ>'77?'IV^/I)/V8%69"-GH*N$H<_I>(VF5^# MF9%-'Y-%2AJM=8QR["=R@S">^RB>02)&OKT):\-^UOGAB[]T7[TY?'TF'U5O M;&];*94;S8[G#;.)7K^0\X;]?2^3F?Q21KI(,TZ+4_%F2\RERG_4]>&-@.& MN!9"<PS.:\ZDLEDF\[RN@A#B@VRN,*7P,:8K[H\C"']'DF^%F&#D)8%N*F7 MG4=5!:6NK'#V:84C*IEM\+FPB1YK%PW==<V'%HT,!PMQE*2R:T';3=9(Q M!1GZ=#<H@+MCK0)B0"3ZDI/#J>3+P\6E%U-L_F;D6E>]CE6%C<?BOZ:?K=V! M_\FTZ$UE8,0H,9NP:F!D_YMCBQX&"RC9>>6+K?"X:7+?@T3'FXD>XPU"%]9 MITSSV6<X"0/L]F6Z"K/MXBH%MHOR>\A!N*:<Q)CG8*L!'X3XI!)[\P^P+#< MQK/:Y+(VOYV@>Y5\RT<@3U<&STAQ<_%<)%6*>?T>&"RC:63,1;&>A=WXN-X M<@OG)P+%R)/N>G(+Q/-13:>:FD[D\H/D*N.!@T4J&<+Y++E8!9^.<%\JI)% ME6<54L#[U().JN=#?P!XN"][EW"=-1C&Y#+I]\;SM0J#R10-=5=#FEV.5T*9 M;0=X%#NUZ0A]_32P59!EE='60)IL-V=2OVI;&)V@,FETUO,DB/"=Q#1M6). MY%#3V*DO;EH?P!-1QC?1KY&6/U7DXSY5(OCGV3-41/]R>/9+]_GQ^9G=JR4E M^6K9O;S>Q,<K)YBTG$23BH::Q6(`T5A#I[$_+<9@WTKTMXG^EI(B4W?;Q[E# MB*6RODI.$)$ST::@]5*F'9KU%=HQ!<%&ZZU=EQ;86'LK+ET/,)^H273/AZRP MF(//02400O<E8\CRC)D"(+'[email protected]?S4I/,N9L79=UU#:11^ M9$U5Q?4+I:[_>,!K/HLMXSI?'ASPYC306LQ.[TIVNL/Q8[HG>V8U,D3<Y\)) MO/<,%D_7E\R5FSA."(\[F>P7[$-6KE2'!7"C[+KVDN5W(R(]AL)M9#D[?E M0!<Z#NFTKA/4K3RP%=(MS>(4./*N0K#DQ]8"C\UQV0LE.OS2R?K"YZP^B]UN MH>-AB+#A'*Y<SZ)/!4.9F4';ES$TA=$JC9!70WXC.(Y23MRA4PX0RUEI4 M@J!47;=0%7ON6P<A[MNS&^)U("#4NYIE(^%;_#"2(Y4CJ6LUAJYZ1G]X5,0H M4^J6]RQ4X7OWG(?93K-PI:+@4NFGW#4SM/'P%IJ1D<?4@2LJ/*M!B7:,S%DR M98P);95=%U@EX9Q;2]>.W6I@V60WU++UQB^QDRFI]%:3G8A;_QI+?FK!AQJ M_!5FK5%OXJ&TOTJT^BTYA2G;*85T=HK.E2Y8,XU;#,AJ#>T5;?;#::9QME] M*$G8$:FS4+L9UJ*:JU<)L2:9Z3+)Y_X4CZ4L_(WD87"C6BH,4Z$5)&$J^#5B M<*"%CS<08591_G(6+J:\<S$::3[_BWM8F;=T@HK>;]'.6JH@%HWSA+QO.\C MMXR>9E5,;8-\]1.YGK,9RNHMV0-&:##B+&C;E%11F3A8JD8L9=(6,J6!**89 MYA&%ZW<H@=Y.9A\3@FN1_1IJ1%-[2:_LBN]I<O2H=J6L;-?,M)H99Y25>!T MPS(EM=ZW6>)&Q[%D[9F"*RQU4[CTJWS'EW%?M!JP6.MU^9]<K)U5EKO52N&2 MKU?KX."[A4=9]*?D$B7$[IOC=Q]^ZZ*&^>14RI9&RO=(E?*+@<&=[N/(KF( M(L$YCFBB%[.80VS0DY!T-I#C:,Q;()-->8.U)NX62"MH@\C?G4-ZW%^W1OK M1BB\((UO,(T2.:Z.L!E(,',1ZPP+P&Y9;@.F$C;,&&#)QY&TL&.X*M'[3 M">4VY/@%``>'&$#L4MQ+(=TA6ES&@R&\+]AT^9T8,*6*#6$WM>UB8C_CW03B M"N";/WS\3'B-L9!-CT6K21DIY*[$[]`3.71RGE(<"FI&E>ZT36GX;I7&QV]F M;%'H'I'C':'=(+P#QK``F7ASX\B9/<(L:S2V@0@M4?BHZRH6,G2/N#>.VD&' MH'VTXD#L@:!%/*<)DAEUBVG(%GM,SZTH&\8L"@):7G=8)=71);3\GBLH-: M.K!.#LWXH[QN\/T?HE7U.@$1VF(*49+%'^70S5F:@>)*!I(1_8\"P\F42XK MM@W;V!=:&5'?%PY'1VP?,.8FKM5UZ3J1Y(9C/42A.VL=&'\U,_^T4GC!&8% MRTD\AWO*@\1V+ZY;Y^MT/BLPNY@GICF/#)E?"FN%!>+AY-:_="W)H]]ZUEL^ M=9'^28JL#5/Y*J_(Y#%J\MI=]1+/^:;A>A1SGG_98.NHBF=',*2EZ&.J*!& MN=2)IX7]3H<1[G1S,7-Z/2AW,.UOIM>A8!!])WS^J[L>?]NL[[4*'(3#U3(G M_%:CA6Z9-K:;[email protected]NHY^F,MP354IE^7C+H=7XHDX^T46>GGR[LW?*N)G M41=[62P\R@6'5MWKT2#D.JZO^Y[C^H;C@JZO<C(V^;NKH+P>SJHG><?<,"SK M7GBK?O>5-9W"X.Q\BIFK70$Y5AG?6D>WYX^OKH',*G1J.-"5PY>?YO9R6\
M0(S%!--);DRTH5M>4&A$\BN"!,O/&=_[![MLWHR05Y)7TF'OF^01R8*4A/! M@:3H2`4^)NN9:*YZ0=RXQ-VR/RZ1F1?(NXD<[D3X/]/?L.7AW>GBG>C%.\\
MX-HPW@*!.=0W\U:'+N#O="G,[A0NCW#-G;UF8Z]A;W8,B-YJL2P74!4]6I+0 M)F-CSQK0:UI(/-:'G>;=4YNIK]*9@SB!G*'1"2/"1AC\M+$B/+\>I(2DD8* M+*_DI26[NYC6YI,:/J8WOKOM@<%E8J*(H2$4WQO5YI:4W^N9:/"5?"&$'1+A M9;+RO11USJL:*+1"6K*:RCE79F!S6Q5EDKM#)-P;'"#5#!4MBFK<*L.8:; M&F-KAO6RIA#Q9RE\S2*,&A+WJX$]9XU6TMFJ8!#*K>:#L$+6B^8H]!U?:VR MG5AG%DO&-[7KV&_[&9P\<U@KST%;FUK8#8I<.#N[O"7,HEC!M\;+GD(A1GD+ M)"\IFL>K0<P$I%;4^1SP5\@E*IYV45Y3Z>KKU984UG=,>D>[86ME9?03S\7 MI]NJ%X$56SWJY\9>G?:XE-7CWGSO*Y9W.%^A9]0XTRP%##J92L1-<J!*(54 M@X7#[email protected]"BJ_5*TETHA'2[>0+LJO2E=^4R-A7?5*MNJ<%_E;*R<G;7BULK; M6\6;*T!+,B2'PJ,*MEK57LTU3DY^::\G!E[!2:;T.FJ"JQ2;AO"P\L2@/>-- M](&[5%DXY7G&6[M7CF5]FV#N()&RJH0(8/%00"#A5$JXY&4/\IEDJTK]BO* M#<05*E51KP829EK#82>QL;-\J!;VM9%IMR6B74Q.H-!<T.@@B1IX()WBT@"? M)Q@,1!=RE6>H8>(-M%55)JI)4Z-;&/:-(^0YS9[+N'I#?+4"JZ"]EFZTCHN MM*'J4@5K^C/0DWL(K8]J1,:10W+70Q_=\5'L\%'-54+;\6+4G5[?I9H<!IF# MDI9.B=HI=&S.G/M,]XT9"5K9,((R<4BZ@BT@S%%>-[/30C^P)!0U!2",CXE M59]2ILI%A<'Z<H=AS#U$<U_$_=XBC:U,VN0&#%YS$+@(WL<]\OF^B*^2\3A! M9R1GL5M,AQR7?!/[LTDO:TB%!B"N>CV-JC0ICKGR?A7PE?B[PC"C6/-@=SR MK<<S1;:[email protected]I/0+Z;2_?EN&@?8M;R_4U&TYZSF7X(BC!X3Z:*?/ M)K(SL=V7[!,+=L)XH34O,B"<K//T6Y!^KR+9%Y^_[IKBE05J:4T%3R3P5/, M)]>:P5-+6<KCW>[K5^^[+]\>8G9V3,<G?Q0TL(E^DU+X^FEN<@VG<A\,@1!B M5N*?4IK1R3@FY:DASX69/1O!!VJX>'X\+Z'C%$YXIF,:7.YGR)&<3L)4MSV MQI"QD\L#\@YF3^8<RG+AX<:4W9-]E,-*RQ_N<@VYV,Y@A:KM8$V[$4:!J:H MV!R&-<5RF+W\A$YNPEK)/V.+4"TJ^W9^^:MJY*9:O/<O,E4XTCV/1Y$][V> MXZWL2U&5+O@&SKJC9%RN!+N/+FGSV1T<66B:4Z%%UB+SJKCOH_N:6'->H]/* M[Z^';Z:>/[TBVK^LK]E#+G>4L5>?A9T@7#S#X/::A;R6;W%?5[R2K>_V.!)+ M\XWLF59^6RIO9@I==3CR+EFE,#ZXKEFNSZ[TVQVJFUP4:GO5)L-3^@I=E3P MY!W,*EVD<J7S/:RJA:0@(B>/I"JCDLTJ9QO(1YZ;3CX#X[A".G2Q/-=YC5/= MY2<Z-\=OZ)"7[Q;4=V>X4B=I?)6&4FNN/U.6=!@%Z(Y.IPX+EOJGV(@\!MBD MIZZY_&ZM0*2!UE_>F?QM1JR-H!&R'VF!'A+)8S/FNJ+&B8VQ*NR!4!#5C^# M0X]W].32\8_O%D69O:HYOQROJ)?&G(ZS/&A"[K2U$*N-,1'YB,M*H<G!>)< MMG_*15LN-S!!Y.ON8CJ?P$JJ@*Y=7<0(\TK%N68=!Z9]0F0DP3H76-'%4USJ M0*E2@&>,:19E-;319OT-#<&&BDUH9$K,UQ?DI6QE^NQ9]_(V7L9NYU+-[59U M"\/EVM5F1V-AK6";LM*K.W#L]G!8:6V\S#+Y9TO@',G1,66T41PU!S=NDWG_ M6M@YX)$D8+G^IZKA'.3QQ,"O*$G/]HO6K/S.@_BR]YBB,HBXDS+98Y)XS2P MP3RISRPLE^1??ILEY<+L.V);5(X)8<")FR=*.;O9;T#G+>0/.O[M[9%:IL\
M@M34DQ<DA[F!_T,O`7Z(,EJY[R>*7O"I]X*.^B)CDK:7ZA-KJ'468XND1U;:
M[0],-?BF8O]]19@H*:X;F&)()RMW/DIKX_B6%LY\@K]AS&I(!=(-R2!'I@;P M^TZ5#4H34PJ(4+R("G'>1THF"7-1"?<Z5.NBK9*#M!\H!\X:I09RM.%Z;5< M-TE?\T\J8B6L(8JMJ_U+0(5+K_*Q2EQN,3&">=W'M"2T;#=Z.N!6N@2*X3 MZ\C-)$M@W"\FK(+?,[$&?D=2O%[3VILJ!9C%5%0>)Q":)FNN68?*FDO));1 M27LZ2,(5+V:B-YM[TX,%C,,_[X&"2J9;SA*(,^M-:!JEDZ[KF4,;7;SSS] M:%*KP:"_/'KQYO#TJ/OKX?'Y__IP].&H#&U7Q1P=VI\&!GL"'4^4JDG\'E MC+Y95@0&F%"7SB4?U_WP[OC=^='IZ8?WY\?/WR!_,%N,N]@O;G/^3P1BT!G% M<W3!*02&+H8QDS5/__LY^/33#^_D\U];2JJE+P,<"6#"RO_/WI"3*T8%L_ M_$7^8VZ]/'K^X;5UZ%V*!E=J[ZCK5DT09.Q=K,41:^*!$)ND"D<.K,><%I_ M_"&FR<?B%D/%*_J0B3<@D_IODUJ,BUI7;QN2F4KR&T+>=[E$Y!L?Y*K:XH M*MU?B9[2"0UZHQ[@D=9RT^65QF5:A>37[6;RBIHG=!T%(OU@<()5O4'&M@Z M?)9GSG2@L9769Y"SER.V'@.4E5TROZLA.)@5BM@W!"L#>H->=?%2_803P M&H\"'"W.-0O6S$AVG&25$#;VRT+-]R-5//E'J+4Q/WN6_!)YB[GHM<BW4%H MXJSPLL[6-L27M7<Z.J8"SBI"H3R?<P$2CM(S>19UPLXB]II$[X9Z^"=WQ87 MK!AKF%3_]/9Y#U%I?W:,P,>]>[D[=';?=>[#0_]^QWS=JR@'02/\X$!>_AS MCS&ZZ]7F+H#8-36XC5MMC^>AIADR';12T%G2,64'7X<4[H+.*W2\,E<C M-L%3L_WHLZ.K<:$6W,.QU\?_6$1WB0=QM,Y=@<.P!F\*_,SJL9-/+LS"FWJ MDF9<%'-EL[<9]5UPSERF];.GWKP'G^5JRU?AHGQFIW9/ODIUE?;9$;Z9@! M)=U\EO0_WFV+E;.L8Z4'UBS:J51Y!6RMQY[V[5&U0ZEWY8B$Y;%[!_6* MJMH;JY'YA/FL^J1[!O>0/GR/45$(!@<Q1RIF,5;&+&PK>,T?'(N;'H>%]%S MD4O015CR0Y(JQS%L\;&IXBJ^)+YZU(]@$E493@P8[>SC9%FV]L=;04LY8M6 M2JCR:2T2!443%#&HY9)(96)_QE'EU@$L:O:3*#D%KA[Y?B^1#-!.G(SB.6:V MR1!IT1O"-[]S(!M0(RO'I'#*V.<H2KC$:T"%7:U_2<S4[)N69/@UP9"][ MR7!!7L^:7MN$65-KEX@[4[.,7#?JS=UJ$])XMNL:>@Y/Z032[<(ZH%T_E")' M/-L7":BQ]T6MEO"RC2+*N,XOT8JTN;#76*A6*#B56Z_-K/5/^IK0#NLIL(4 M.UO%78E@9!6PA([email protected])+KT+L$SGK@80<2'3>VIGGL"S>(:Y?Q%=*MD MOD"W?2-X06-4C]D&Q,M2CT![E^RB0E]:I/'E8@CFI%M="TX_#-WTV8@I<- ME2X)%AC/-K#XPR]QDTRI0EJ,7U$9"C.&7G;(@8&BW09(7$!./>BM6D6(BT# M-5_OP.G</O!]>X[GE@!'R&3N#TOFD+,67<U>8'6EUBPXWNXSH/H,CCO?A[O M\4'70U\'-F6S>PI9M8<Q^)VN4P20Y#'F"#"2BOC3-.[/F05"KQ;]UA2/-*=Z MK..=PS!O<'@/A0JE?%JFY#\YG24WY.TX&=^-"!Z,3Q$4&JAS8[]W$,5C0[(N M59I@+(8UU8J.J=#'<S_L+.]:^!>3QNV+N+9VB?E?QNFEP,[]"&K+:M1?!I M'9[/>,'[)7Z,T1.<N\4'VC<M9IMRK,/3*7E&*\C!);;5;!'K4;GJL!/J5 MJY@?DU"3?,WOJ^-\A*%Z&@JEIF-('DVL3_^()[Y!FT4Q;ZV0(K>>TH.))& MBP)@&XU.1V>*9LU8[>CPQ8NC,WT6DL+",B/P:56<1IX=P+!!#K4.ZS>_O#^ MY>'Y4??P_/CMD19;(RN-J!<'[F=.U(*RG<+P0$V<,>CB^[9WR)V^N>///SZY ME"OO"T>21N]'E*CU5>4FI%'L9_+*WT_?'+\]/N^^B/7[QMPJ2L+^"HZP6L M9&D]R$D&])[N?8A5F\=CZB$@H(*&:R%I"40FJ^CWYA8ZF#9:S>UJLVYKQR+ M6\B[$[W;/!,G"K'!8NI^D9A/.08M*0+E$/3Y@!,7/52T',%1G?(<TKXL=O[R M%0S%RL189"F6+9''7Y&QF/4>5%";<5'AP779D"L>6E/Q!;H)X>DFM)]'5CY? M34/"]*>),V+SY>B+3&:_7"_C3DA9">(@KVR]#&<TYU\65_+Q11_DX[D?S5 M\0F+JTJP)Y4'K#W"AZVWJJT6[*O=+="X*-,BYW5VC88KV?5R%87!S9_GA.$R M5\+RE5#'3G3%B/9M7>0[WF+T`E,]#:0;Y$<EK[7V6I=%HQ$;9!C<HJ"^Z> MZTWE0"UTFVMB5S,I*CU$S#WFKJ#:P>.!2CU9RFU:CS%Z)+(?(AFL/!_$^SR? M!7FV?/U(>5]KF#NOZ!&N"V^.O[44"N54[3$/""NAR'":9^VWA?:H]%G$PS1> MU7]<K>-<P^NRB8Q*7S:3B/);-)7\_!7F\AY="$YF5%IA-J/2\NDT@ZAGA;2 M).9RIZK'/N@7P<'1F,XU/W\L+XU/TL/A6811?L&(6AJ:]2ZE<3?YBZQC" MV'C7\U2GME3>I\(Y35=*I[8LE1HX3$@Z>WZ-@*3$6*$328/-!.Q/+%APY.0 MD<O1>7H\N36'XC8HL>29R)^>Z.7@3&"&)SJ?BM(1T9FEJ9TEH5"B#RFD+!&G M3#)J73F0,&2U=C*^BBL=K2J@RY1[(CQ6=9^'X:,K\8#LQY4K/XN&V"-]"0Q= M*">*>SV8VD1E,>%I&(WTA(P@#9=.NS7"U!,9I^(1#OPDG/M/^C^S8W"'16& MX(Y"\;>P<SO%.S<4?.OMV^TVPI'#1RLO_%9M,\1^L;*@Y:>@<?E#AL[G2'J= M728/1E_)RX[\;!0,4(^7:TZRFI='[RBHGXA*CHX#UA;"H2!-(N"VSS9JGWZ( M?@8&6.P4,O9ZY0Z#N$L\;?U&M957'WK@1M6<=,FYXW>0:"WYHXV>KO:H5# MX"L7ZO9%#\SUU#X;9@<>3$_P+UA!/$$)JFBBYNM;!G6ZUV7IX^6![J9SA? MGRZA*4.9U$'Z1BA57B68Y4]742LLF^[/:I5U,G[B/UUB.C>8L\Z3:DXEV"5 MZ=6$NVL+<SIL=P*.'/ZV69\J#,?LMEE%\?8C)!V$+=_MW0Q5\GB.SWRB[G&W MMG?)3+>S9<QT.5;&@TA[[_IDOT7V&T84T,Y*U1\!:98E&\'F3L1?UA6^BDE MJP4FJ-.F^+)^IMDC_H'A1;@Z]P*;[DFVQ7TG5!WJX>:D^"E5W&LE<V9]MA2' MJHX&&W((342C$1P++)09BZA@+'P&0\&Z0SLFZN.1N175,,1Y0Y']H#^;-(1 M[F"K6BGV='E1Q.HK<4XZRJW8^42:L6TX&@I8BG1&&31&TZ,F_+N=8F$ M'_HJMG+?_RAQ)1E)4M4%#/$>73%+DL36R)MMUL8"(Q=5/X.%P3B:1>4O\,% M:>\Y745A!PKC6#<QR^%.:\=.E4N6(TZT@R\[F8ED+A=:S\5Y0V)H>4ZH%#:
M410T95>+R2(U'DT1SAD"YG%^F1><7P9-C3];"7>S(TX!^<"U>J^(Y.7LE[>5 M<$RT[)BP!D&=):2Z*I?U#3I:K+D*'BT/R/A9#%!]L^^G\<$VF6R65GKK4)6 M,+=RAB%L-[?0N:ZY9:540IP3W&D0[6B"M:]EVBTBEF5(F7<5N9'=I?9T*X4 MJTAY2X0\$/BG;$FM/ZJD+^[HX]XW)3I^R"9S>_*HX^Z:-7P951P(4JY!\B MA!&#/C_X(D@F!2L;A9./Q0(,IN+Y_[3,W,Q#=;VY1/>SO+JQ@W22?4^^WA M^^Z[4PC&M-PM;&B')T^$A_?_Q$&-K5BJ*@68K.MHHOK$@9!E>^E8"BGEM?-9 M0B9L7)@]R$]5X]+8REI%,:\<,"/E'."BZ9-((6F<9&-_?;N'3@D&-M=3-B5C M:P.PSLF3FFNA4-#,2RKV[#Y/-A;JO">[H!I/?'Q>#Y;ZB0_,Z\1D:>>SW"Q MH._O"9.+O"9L#/.Q36[-6]4GMU6J=DJ1_Q6!6;]4(\8Q+EQ:.J=ZMG70/G& M"5@WA"2C^WMHA9R%]17<U?;]O(UME[GWWLZMG$5A:X&[LOR7UWTF!:ELJ3\? M!O,E)>,DG-)4YVFZ;^K2Z162:IU-$'4.5O9OLVKN"2>JH42M$,0)"H^P/I] M@-L4&_0:'N=($S24@GAFC&JX2^0@2>I9)3OP%LAMX00:=AF5+"HUM"G4. M2-(G".-GO(R$)O@"#Y.9W!^HAM9+[7/62D-S,%!:G))3!H;EHF>X5D-L/XJ M9EKN,(A0X_4\9T827&A]S$>BT&L0S!3<L!Q@'H17T/TLU6@4X@B:S.T%2 M_%T(^2T.*%02QU;0O_4JD1]K!JK9(O%AQZ7#^(UG_TJCQS2+!Z_>W7RRMK M-%N_2^:N.2HFV7<"\M]"LL@=X['/B1,UY:N&8H@M4DODYHO(O&72,-W<8WSI MA$VB-?9*)F?@-:N+:Q,^`A[7=X:?P/*R<E>7Q_GFG1FUT)G@1NIFXF_=-ICD M5XH"?/T:VJR29[)TCRY]JAC;;K``C8Y!4M"B:&.[4VUO04KGEE:'&.OKL@PJ MRS'B*3!-&WE=CB'!SA5R(/6_B='1/%_5<\8\4(97Q;0]W&J@NC9MB%6F@% M![BS>_?P=D:V^R_N(L8B\%ZG"#/8\;.:0^MO8PO%E?$+@5''Y]!DKQ>%!A M6[.US=V'5D6A$9JS3=1*X&R*VD\-M"(R,%!YY\'0V%8JNA,@XP</#<00@ MD6/YBUB2[1O)G5PRDWNAO8O,Z#LQDBNG+2@^<PN@0P)152X)YKW(I[%5#YE MYU3RD?6RR7R)8NNRU<[email protected]+4EDS,Z[I*IXII51)?ZB26^9BU95%O MJ?"MI857D3?L+*J'046HK%9ZPJZO$(+8&ZAA:Z#S7K'$NV-_S"J=FYG!2 ME9QU\?&+J;_FQ"/;93<0(31`TE*I)N424Z@9S&N4*YI5\<^R_^Z)H6)ND<L M40,M6LWFMDJD;"\?]*#(K!_M+=C@_J$#N>-PD7>L186%G?/'^*YA#=*.F\.:
M595X+Y<FH^.J.^#4F,ZAQ_5SI.>"^L)R.NI>]:FNY;[/1<&QB9GMSZX>6( MR72%=XN%JZPR+W1K?/JAD2K-HI6Q#L<_?;^Y/2\>_:WM\]/WI33!!=X,KZ< MP)P;\[BJP0B7V@/8/KE[N5BW>..%MZ,5Y2ON8]VCG,Y5(-WU8(M\\<9S) M)F=@Z6[1M%&)+YJU0-6LGK.-ZB[Z4.&[$"!B!\9@-,6G^:QG\->4=G,>CZ:3 M66]V]T@$_CAZY*>;F$[Q!01:;UA*[RS-1(UF91GJFG%^6>K]XA-(VR^&M?DO M,.P((K)FTMA("TNK@Y7!R*P]UI/J@[L.33,J##[A,M(H@N$S,W;QE8DK< M+^V06W657$/-K38G&\I7<D3WT8Y09NIHQ<S4C&L?ND4YPG)NL$(GLN]ZZI<( M@5,AWK?G1/I:J@G$"TFG<1_2-ELLH4)570VS*C>CX^H9X$B1D"_.1M\8MBK* MPE9%I?P\AHSKRRS-BK!5GVE&,O2:PQ?-DBV*F@E408O@8XEYFT3P2\0E.Q M!K%>D&9\+GF0I#?DL">>:AW;F..20?]#Y"4$Y%*MA0E#5J91V+]L8<UZSB MZ&07*EB>.$F&YX20""K*LK!#JECEH>]4'=!>"ZOE7N&R<'D(>*%W1=S\>X MH&1/QA\]<CU+O2?#??E?QA$]X\;<$1W_81U](0*WL4:P'*[,1#1"N[GQNE) MMQ)L9+4.!7C8"U_(8#3)GD$YYB=?,2*7'61VU?3U5!$Q6?!(^)-GC-Z%HX; MKQQ[U]X3YSHRA'259$=%*:S\W+B6CPEBOVI_#/L\"](,FJE\<*Y*^<7L,E; MU=:?,DE6@O]T6C%IKY9":@<*V215ERH(PK1G(C?5AUH22S)]1^5Z2-"ARJ[ M,Z.*,_.K9N!2*=&S-S3.>30-1BQ8,+;:$E&A"@_24%4"J+OVW%3"@\F5Y:/ MW-*?W=D[9\_IS.[!0U$>C0J55,^BGF2LKV92SM'=!"/T>JJ.*,,6!'TJXH0O MYAKJ'ZN[<_/`"<[N/7<*9>PK)G%I6HN('7:PA7^!7.@ELU#>42:;Q>06M3Q\
MY>D!O5V%5D;1J@D"NT:9U!91B9=/X?H)++?JE0K2Z^M#U/:K_:ZZD^F<NO> M@MI+2FYR8@<38K36R).DLB;2.RE]CU!WB\V<Q<"3R=V^YF,45]8V-&OS?S+! M7BF%(%L8<:7@0A'Y%$?E7+)2A;\-_+!?T/12QF6QP]8RETC7P[^&Q6"_ZK% MXX+_1B[X;Y0+_ANYX+^1!O^E0"X/_=<L1H'+:'6@1I5P]4N!&J,O!VJ,"H$:
M+7JY'*C1IH!%0(W1$J#&B,6O9=B&%@E=:@Q*@!JC(HHFPW4&&6HV>?@TS50 M8[0J4",MGOLD#>'A+DX:$JV6-"1/<K*2AL"L%"0-L42F3-(00W#\I"'J@/J2 MI"'15R0-B59)&A)I844E#8FLI"%14=*0R$T:$@62AMBP>MFD(=']DH9$!4E# MHH*D(:H3Q,]]3=*0*)>K],]SS72LG#0DT,7)@V)5DL:$GB@#G#@Q_,26CUI M2'3OI"'1*DE#S"+-9@7)L>#AZY7#*4,.X/W5G161)U?_7/V67DSE)<)),K/ M!!(59*)2CYCN#032*"*\12AE^&^%F4"B4HA%R#]_)QA#F8("7:H@\.]#:8 M(22R,X1\?O3#][__-_^FO;E<<^GNIFL<V=X^\X#/:-1KW?:;?&#$&*[T\'/ M!O^6W^K->K,C1&>[V>BTM^0ON-O<WOY!U/\K!F!81]"_!JJN)RDDS\SYO_ MAS'C=?(23V\799WN%&2.;NWFF7>W\VHU6WOM7<L<C_A8;-7]Z]'IV?').WDL M-1])L>W\Q2]OCOYZ]$;^;CT29Q^>JU]-,)Z?GQ[J\FNRFVM@,O<N;J^!2\WA MZ8M?(&?SG\OI=0Q>OF,(0:N-Q!\"!*J:/.(WDXV=SF;2DO_0[W0Q;B\V)2,] MZW?:?*TW&VVLP[^J3*_1J./ORH-YJG<V+]--.NXRAM9M^UYPIJS[>_T5OYD MY57,SE>CWJHV6P(OG0L_TLXKWM7O61L938X71#'?SV9?+0<YICQ&0/ARH< MYK2.-T]XZ]EZL$&NS-G,^]<SI&/``:8,(8"9DS+ES/,^[B_JR+3?GH)N18 M9,<ZC&5)P#(C11XZAP7<V(S_I79D>Y6,DQ3<A(]/A':MG$K9Q&E06%[9=(. M58)N:UDP'J]GCM_:Y\+W9\<4',3@,"T.Q3*C+?%7>X7/@/YM]S&WYAE-N M\W^_FL64(51[<##;F<H%!!PV:C8FO(#0_YVD3H!K37F=V2H7.3OQ;+:8SE,Q M2%*PJP\V>&'OUC'HHF&0ZN4*/OE+E9!B881Y"BD\#N'CS%IE?Q%Z79P.Q;1> M7+,O,_&"^/9EU?DC%8NJ-$MY%1?3&TM[EI!R>F0BJ"S$4K6@[(Z3,+'N9 MWC%:99,BS*-&LV/AY#.,-K=&+U6N\.MJV*,,0@=VW8+#*GY!X8!*8-_8!QR M!@+J]V[\P17P\*1,W_)G)G=JBD8W/+S@[AA%&I1QU/MWV>@\@RYM4O(H%O; M"AD27!^A<^EB"GVK4\D7$&7,+H2T94I*:0;55'GF+FQ4N)((%-F1[L7&*? ME$WC$I,Y1;)%@J=4MEB^6T_HL%I:WS^SV@T<Z[;B,TI&;=<%/./N'#6CF>Q7 MA/+05:!XI,8VQM)]H71<BAXHV@1#[LO!!'B_B#GK$S\(``*P#V(X6V"8'D:_ M4G/80]QHGY5RITM!]A#.AP9KN5:%W#7BIC=<Q!KE0RXKR$G2V-I12-XZ28P= M<E<J->KNK8_)5!XOC89SE=Y*7FX^BJS+M_T[N;7ECKZ5MUJA6V!D*I6:;:<U M%895*K4:$$]&$-/]:X%U5*KN+J:P5N%9$)N%=ATT_QGS,(RD;EI>^?4%M$'C M#5#V^,7X%)7+3?84LCI8@2R7%%!NOU/%;?DLGEN-5ZFS%?$/.9/>8_XXD,^A M=X$GN@\#E&CG*?1PIU-P63X=)QF8:-!@R'4XGR?Q##TP8E9H(GKY!D$G"+NS MMJ*N%,9R<_H,_L1V?<S4P-7=^I28(5N=TH(B?DJSU5*'!_-ARC\Z(1#JZ00/ M8>5,PB[:<,88ARTJBBVPJ0;!-10.M2@/DIL$5*87=[Y]IX)<@')RZHTYPH6, M([WQ'+F"!>.'\6:V-]VH-P970$F_JV3P?T<^3A08#KN9.(IJKQ$6&!>H]E M-H0X2D!=Z341^%8-C"9T7*FTZ."CEJ&44%+!+JE*=![ET3R="!XS"B>B- MVB)=H(<8<B.X0Z[!%"R9Z87D#H%CQMMXA&DW,7Q#8+%[D$E(EI]-),<JC]HA M>:/AB!^J@;@C;EU1->4?ACU,YAOBF'DA@&FK8M4\HF=-KZ&?Y.W63V;]Q5R MO(B5,KG$=F1_4_5@`>0QW1!'DM.H!I^``9W$QK4@OK(IHE9;LS#Q)SD"8S2S M#";=T6(,)A@O#I4R)U44;84U1O!?(']PP'',G3J=B4/8!RL)WIF'[3VP&.X M"!XI0=0Y%^%'9;OTJUJN*/F5@6^PNZ1YBF!I#3%*AZ+_1'"P*'R44[HX&[!Z M*]<JKL9(];DH-VA>>YY7H=4M]XZ'5YEISULF@<F;+MP6G!JXH+X-Z;]E9>P M1[K<"JR8+OLU_%A>(SY3MK6%@1CRH[GEXS.Z86P!CV,1\CB&P<XL]*E*ECP' M+#1:UV#40_H;VAE3%;IV4_XH_^E"VI\;,H5Q49:^YR#"([G7SCWVP@!!93'M M3J^0DRE;^PE8GM$$@[BDL^-L'HUH7/..W*JVI7@>[I0S_"XO@(1!7P7&)Y M:(!!>=BC@(=9_,]%(EM7L2:20,SO6!0FTRO[N%V218W)\&1\F5PM9B`2ZZH" MK1S*\Q%K'8('S;%.AX)UB"V[GMQ2_K1X*"?]DL\X\LK!:;)E<GEB*C\$>]#\
MLS;KC["?5X'.UJ45;+&MJ#!:Y?FHPK7RU<&6[!;$P9;3G&<1Q;2[1]!RA)@5 M>@:\WU1"<:_6!<]NQYY%Q$<;&J5[W7&8LY"8P1G)#>Q'$GZ:3V9QX@<F8 MK6LZ7N_;T#\3S+&$'IF"*U!4_AK2&!N*QX-;&\#P]S>9E"U?+8ASULD][1= MQ6U-/)3;6H"(%KI@JA@V9\6Q%])*%85:6[2:GAZW)0/IB]\WQNP^_=0& M[/SD]*C["]Q_N(68S#='O60<T-!;]W*6F[Z?Q05KM(I66+AB9E%U<%%UU**R M0&*!KY%B''OC[3L+[F)QY2^:4^..L,R-XD#HKM=W;C7]$=0.S"C_TX32:! M6WB!ZG7E\EM,5;NDI]Q%A+Q&J][@+#*DJWW3D\?6M7H5<N;'+!XV+L&3@\' MX!T*I)<>'>LRR0@E>[\&M7JW(I".'GQYN3=4??5F?A#?3U^<V1^G1V__N7P MW4O4T)F>\,@X/2'(OOX0;!^R._P8EN*CDC.8V)S;+;Y_[V[A)TA:C*Z4/7Z M'Z\HB27L-3B^!STI<X[56-ACC]7=;N"\W;L3#[8!I_W-]'H4VG[J3GCSJ;OW M).XYU;R-M]5_0=\J%P_UZ-!%LK7NNYC^>H;%B!PM$)Q0NY](G]W-7OWI_6 MGBTVX/*X-Y_WKZ-HWPY\!1_R&;@F8]+U!:8O@<DE;1J-C\&X\*WO=O!.7.+ M9&EF<[email protected](SP4<G$!D^YF&&,U9;TS:?K>$\13,W+-7Y?@.;.! MWYZ(G*U],U(*@NP]]-(&#._,'9!L4=4QE9(I8((JZMG>0M5PNQU\3\QMBZT M77G8!U_4TCFP9JBP#%DOLN\=5EUDRX6T(X&!0+:#)#7OUC2>C9(T#4;I4YN2 MS,GM,7M"C4:Y?M:6/>"*]ZZ?S\ZE5\Q8\3')=!@%N&D>_+\W\Y*X"+!^2.D M!HB_$0KPN2%*<$'PE>0H.!SQO?^0@C\N^&0Y\G(AWV+JP;&/<\D??EF3N6 M7Q3*)7_3M0Q'OU;!HIL;M,U\-?I?N!<MH(.^*1[63W_"MX*4,-H2L%[Y. MU;F,))TJ/O/Y?.3]R^/3RN;IPLYSQLC.;X/N4B,HC$PF?IFWC+1!?SI;DC* M6+A.<FMZ1]H.GF@[S&8]5(2="$;8(7:=BODYP\)0S2IHM/3ISZ)6._KUN>RJ M^+>%9*5DEW=(GW/Q:A@7%.P7T,&C6!8GY?#@LGH3AM!FK<5F!]Z0'R,XVD7 ML[QF!P&:5&LFB)C549NX,R:)%=OJK22Q6F#N*TN/(>,T)L<CY*,40FOT(%4 MME8G2RCW!,G2S$M&2V&\]Y8\G[I\([]8=D%==7TPDO"?[[DA3XKST57Y0% MCF:'F)QL0(+BCB1)M^*.S,2(2-6O(&QA-I[*FD0^,1NX"QK-3K7)@'-A03LO M4Y22H5%L5B(S^DB!)O,'$M$F'AA"R;O32=]!,TMJ#?BK9CP41]@1:?XDK@ MITHP7]\O4&:MJV"\R\FLG)=-4VC8(F1(A2H'=7EM,$J\"8/4H:?4C3\.0OH" M5@_H8'=\\[I]'7]*>B0Z5%8%Z$ZA;WZ;%RSL9HD1T?')Y05!V-^"JT6X0RO MRGHA0LK###"IU1MU>OHL]-JFB3NP(E2GF:5#T1CVL4J7DO[+Q%!W^!M>Q] M"*%1_CCD7W5,ZU07G*1HF41?>]GG0:R"?&X225N0%H'C%*BEI9!1!=6A;)3, M?1.,8NQD*HBR1'^IG?\:<GGX"^^C9)0<?<AP?)^8+^81.ZN2'YUT$:^MZ M-AECH[KW3"2AYM6$'<A,_2J&*\,K6&V";S^L'(+<D&]J$&$!A4T!KQ8$G.F8 M@BP-U4!CR7*V3MF/0A<_.,/H>-W9STX+O252+A%GU(!12ZIM)6JEB-SRFQ# MI/O@<^!EB*K(EG1:##")DF&_U40OW9:%OO29?)T*UA6,[K*UI=:5L&8&V/< M;./R\"+K<N*N/+G.G7F7'59/1O3-O'HY*W8(6:^AO1JU9ZU98H;J"$*UU6KI MW,7H_$91,[U!KSOY"">EF1OHX#-1?GO\KGMZ=/CR\!?Y3R@S%^.YE=R:!ZO4 MY#2O.4=PSJ)3442A@.^<EC@W:=XJ-GAT)"*#4Q421LYALZOSA^B$<UY"<'Q" M+3?6+)A8/H<MT>G&L2^T"+O*P:OH#<(O\(#L_BB7UQ\5,OK+DH/E</FC%5C\
M;=S;V\HU3F%0,BX*:"EO1A;RM$9(43E_.-W.3$&FU1XH)YF#>?HMDYJ)E9.:
M4?ZL#N7/ZF3S9X536HD'2&FU8EJL>Z>]\NLPU(S]N_9L,HW'E8?<!04)5K97 M2+!RCQPI.?NBH+*O*6FVB?=OJ\1'FGZ<LA^CH44F7#=X,%OSD,I-H=](+J0 M)DLERP#/]P!T\YHA[!A.BU9R*RS2KVY$9LY"X:"L'8C_#(.G"2M[:BK/M;(; M8LQ^QP:DVG&S;>DD4594KCLJF,O*&93J!#&HB@M'Y64A\4;%VH@*JTR+B7L MT@KCX@T,J(7',RGDS0;QC$NH47GH/4/JK?P]P_<+]PR7N0\&8^8!Q7N&41BW M.JA?5@H=H;RUW:XJMQ+Q8C*]FR7@#5-^44%UCC@"S\SG22P'=M0;L[?(JB", MHWNC/-Y\"7"CRK:1K3&:(NOAW01QXMD#LD:LC=<I$?'BS_ZDQ#LH3NR*(N M`V:/J_(@N$HK(%7]![*B8X#WP4H5P=%(4$+L"PXQ+M?!MQE8UZ6M0CGTX2#\
MDW/TRE1>'QBZ+KL^N!OW1NQM.E^,8WP%MF>"GWH\ZTNN&T6E2QO"A[8@!._T MY\D-B'*7KJ^"5M6."[E+X]/S__6?75Z^.)<B'8=FW[;^Y2,%B.O;B(9]`\
MM7D!X^>1HPB!IA1L@"X9-70R7K#=1U7S6,BQ.Z+DP_OSL56G1XBR_06P[GH MC3#"K0TR0B5G:A8LUV'+^)+.)O9[2GS#.#=Z3GQHMRJ[[^R_^NX$,.W<:3 M\44\OP4L6NQMZK?TXF\OWAQUSX_?RE8:NI%W>A@*:ITQ7.8RQ_0*H=XL<V6C M=7$BWK\Y_)OX]?C\%]S-<%#(]3-A:S-Z]O+@<%HQ%KL!OE>^*K@H@V\Q>JK) M_FN:RZT-XIND#U;K\>V&<RO(7:K#\956@$-'8I^2REQ*!.DR$\8#&5D9* M_L]$0(2&:/6P.E:7AX,8PW^!.@&$%B6Q#<$KWD!OO9RZ<COD@3)2L;IB7/Q ML=>RK9LFY!Y0N7(9"EWF85&8[G\K?(D'Q]*[O1R0LV1IEQ<Q\.IE&KAL?QR M<Q#<=6X!/'*P13PV=#LP2?@PNYW^1J__?GPCM\9W?6T)W.*&A'R8]6^?FI( M/H"27Z33!%WG!/K_#0!F2=SWLK&[RB4<WYMZ^GI?5#4!UF+=0&_0A2NW/7D MP*X:FU\GXX^,GY'V+FF+#08J3H:A?:P#48U0KTHA_2)B\7<0@ED]X:WY ME&TJG\,<%T[)5A^>G[P]?M$]?G=\3A%7+(>HUP=_4%VAB^$[C,)R]EY*ZV]. M7@!*$7P<O32UWQR?G7=!B"][E?4>>C>9QWLJ:N%NLE!KAQ<KQL["5*-V2THL M8)L%;44Z&3,+$T(S6WOAM3\4D!C)WI807.8GPG$3*Z9+KFJ3TQ[+*85/. M58]";2:PU3Z*,GAS@@>+W',$(M=5%L!K&+H0CJ]@^NS-!Y>0F(D"@X#6<O M31>C&,$XR/<TQ5U%"U)--F^3B3(RL76Y"DV1YC_5@0QN$5R]1DMIK=TWH-2A M:!P^)8X1DD4\P0V*.A_<*Y*JB7^7_%H"QIMC(<<7&PDB,4&M+C5*>O3\4K/% M6&B8%37-X@SPF7M#.6DS"L=W'%*_22W%_5#C@>DR2,O'?#1!6]?61%LF#L MT51&WJ-Y!Q4J)&D:0@#*H=QCFA3P_IZ,IHLY)C*!#3U,4,D&?EQKX08^S,D M?1D-&%7M#6][=RF%'*EQ8A*7+4T]HQH0IGNKIB2@&\"4D+;</:AK^6EGK2W M4"R(EC>.\9X"N9(_<9IL+#!;9"*=%W2\%H*XM90&F"HU,O"4D;+'9G*^$ER M;E6!2.AGE]2#08FG2M;TBJALNH>X%NE,-;EDC,E"M\6,4+K'?6]9P?FA]4 M-*=_K>&"5)D6(%C-BZ&S^_S8M*\>$J,,PU&P;JV">4S84GG1/<S0C13)@- M<@(TEJSY9"*%T?$=.]UA)"93NR2E6:Q"%-,%VD45L<($LK0S@$D#3P*R:4PF MB(H)!X?#LJ*_G$5G*,)K@VK"6E#]4"#F;*9!??2ZQ[M6-AOUNEJ.?AB_=1)5 MY'RH=BN([>0Q874'FA!WW'-F/V-^1^@X9X<CM[TJ"00ZB!)KD:L?NH9*DI3\
M"S.\2?XM31%68:)M+J3UDQ1<W>/@MCL*+(!C>*@WD;)8$#!G+TQMB<2> M':P'*M#@-NI2&*EXQID&=E>;Z"8"42,@+"V5-&0+OI&0H1".<?]U%HB"0PU M>2V#<0F<@[6_GS*7_=$?6-+_'FM*M;E*;,>,^@W&DM2M!+.^M>SLJI9%3_M M_50!50^[GY1C4T@V\-.?Y5W4-Z115!4)9&&3.PB!^$C<DG?D1=,>%*$-J7$C MT$<3,\S1>PW$S>.-]13S<"55D>II=\5#R\DWPY[$XZOYM;UY,K''ZV3X6F?@ M<P\?D$V)3[R&L=L(M@T%#'ZK%8G.:+=E*/8CE6/:H560@,-'B-WSF8,!J^RK MJB,VL<")QV1;=UV[5YDWA3>AJ_().0.CD2*YH.QHT<94,.N<L(HJ[3T>0#WL MZQY#>3"XJKQ;+6[0@-XJJ9QEMMPW=1S>TP<FJG?-!?6,PC9(->'Y'61J^TF MLW\"KD+Y28CGK0H;)AOR^<KE>=PMJAFU@QE"K1R0GAC04WEOS?=Q_YQ((_L M(<,W+.UD9@796;W^3PR9AR_C#02-Z">6B/Z7S=SOLC=*;UN``QH8+R28OA MG(#KX)O<=41F,*F6+_QL@,7?"6JJ"GY)QB*D-@[L-OR7"-3'+>K2Q]+R_=' MB^>RLX!B"V)-[G!;QB?Q7C$>#2=W_VLMWQIZ5XO?3;;MV0&JNX1/CV6GPU% M0!0:QZ(2[-&1Z^4O+'%HX-;2])L6QZ+K'5RR/SF.)Z*244G?3J[TF2")@^ M<YUO=SR1+P<)LY2#);C]-F14:I[.3!<Z,:5GT9INQ\/R;T*&**>-@#^J.<R MF/@RW!>-?F3AV#+FH&6B@CMQA-[:(XR>D)Z8@YA-P;Z/)Z93A<%TP.[0M0E M)V7P>4&R5*H8D.%'HPDY$_ZH8'*S>R$SO&8XH3G.@ZXGTRF,2%!O_0F^*R! MDHT0L#RRTRRX''BO_.$OHOQZ3,VHA186]BKGS?&>?O/<))250"(%<'@S(># ME?^0,Q:L87@0S+5H%<RU+YF2(L2U:GB6I1%7(N^'G$M6HJX%BU'7'.6\M<@ MKC%U6(ZYMNQ)^;AK](@\II9BRM$2M-,:XW6N8DDGT[2-($H\FE/4M;AYIL M0^2>#(5(X#Z;C&)8BB^WBI$_9[EK(SBW\3DP$+D9$3W1B$W"P"H05FD.$E% M#UD=!CJF.<.%.R,C>O"BI*<TXOPJ>&51#@Y95``9YB2[&<1$<(W?KUQRD\4, M\KV#IH*4="I4#]5TZ/=!@"QQ/&8=FT)DN6@&37J:HAI!2QY-BJI^56*<1[ MV:[8&E-A_TX4M>30S[:(0Q@,A5/<;A'L97R;PWA,>/4O#U8ACZG$BB0M MZLB>8FNDQ5Y,,6X<;2)8#]68:#I#MVAVW:2;*7NVP\D;#[3RLV?Y>,H%,)=] MDI-^G?1U-=90J)HP5&I!*$0CR^*Q-/R]**?3?LC'&FR@LU@/2;I'J[-1`:QS M>"<%BZ]-HU2@64&G2=NA4I^LZ+:*@YAL3LS2S6&^[*/;O-M>AN7RF2UT:E:D MIB!IU8\!%BSOF5G&R^6YB@_+DAI9NV>J%W2/?1N#:MY#9:>%X5,6$6+^4IPA ML@6@TH*!VLD>I0;>K6EL2S,RGZ5QE:L!/21M'!"WQ7B>#"DO<R)9+=P9TUZ:
ML@X=B)W"A<^@G#$8O&X7>Y-.E%J,3)&@_2=T+64:0GH[N;2:M8QBRN0#KT:O M1.I!1&FBB%"PU6PX2/2DR@GQN4$BN=2AE!,4H!U?<N1F"P#SI.@\]9$''$(H M%(^$7"ZW8]G\YZ]BQ.ZR)6];A*KN&R=P$#?MD;]^\$N0X0[57H_JXY4Q(G M<3@>4'-@1![$$!B'(YZ2#47U42TWR5S%K)$.C+VU$.WQ]AE@-79*F%TY59S9 M?FI.U"[*+5@F4?9^>>,<AMFAT>GIV+MW<0BK!IBQM"<S-XF,X'@[4T)/XOR MG&$C8;!.J!"0=M5XYUU^)76#HTP2?N5EBPQFL.%4@24$0+*<YVK6,O?VD(* M6,]G,_QDXS2G^?@2T6&,,S-0V'<^!D\[7"7;!:;"Y57!CJUC@S[W]'A'2*S M-K<:S=_W+;4^?H7F]#)6[Y'.I_M+4L]:(Y_+*/,S58I#][]LP*D+B0.Z=+ MOD8'R?;0U7@!?L#<*XU<+7!^N"O+]=!87U*F`@Q2S,[P8ZDD:^.?WM[M"<N MP-EZ,(E3H&(Z82L[/-F82T1#UJ<F3BJ1F[SV[((@93#>"*OQ!L$D*"7JO-++ M.QFQRHE*2D$\C12NR,R$3[J8W=*^0A<J13+TDP>@BP(WR;RWKTI^*)/O@@3:
MEQ-F3%,ID$(V(6!5T9_$.M$4Z_;-893L51L"4C)V!ZW8LTPIOA;-HNGR35]0 M@KZQ)#'!,GO[+"!OGX78#7E!&E0(9@D<'($%I.$),+.!OC`:4*XSI$MIA_ M02$!Q``/$DP.Q.6&!ND/&PI):Q6<D=()-[#IEPD-O0GB>TRHR:S*5_98S M['*I.%9*%\/C9!T_A@71;9P3>;X+-12D^J&FW:/E+".59/4+U2\_!*3\;7G MGPX@4B'F#(6R"4O26&B+B\%LA6DJ2V=Z/-;,8!1+>.%6O!H@BVG(S)=X5! M;%/^Y6J[D(^,./F$J&1DMT*#T19^3Q8_@$BX-2J;2HTK.,?X)N3=]0!Y[V MG-'.%?OJJO:JL#O'+U)Y[#2EQ(SE/1<_1N:*=<:'Q#\5WZHQSNNL,VJ<&09 M>\8>#ZJ/!Q4TS>+$F2>Y>>QT(+1G12%#!\M4/Q?9#?;J^R)CTO#2,*[:;4=G M*3\&='X>/)YJ@\">,G;%^+NV:K):::"GT8J+6FET7$:LC(4-7>(Y:45LV$ MI(E*1@U[WW<L@XA;H=<D$[I6NFJ-'804[TOVL%;#P[SI.J-\]0&BQ0\D3J@ M.&1CTN#O0),![1I\*A5!\K(.ZFYH4>A7"W=7'J^4N``E!B"$<.!AZLE-)_?D MAI7.ZL<@FXL/]S.V<BQTT*94E/I-9<++)',ETH-<@][@L,D";D6:SEB^00K1 MX-AQ:6M:IG>3*Y@B@?3:?\P@2#(9.BF97Q&)2.62#8)_62]%(#P?D"98<ZU M(Q53DX+WY-7!?%+HW,K0D8:W6'\%.!6Y*C<?:R]&7*!C+>O2:%9LMDC=-%( MVW.^_OCQ4_O>^S8*J^'IWR939K=BZ65\ZQ_NWWVD-L,PKU_S%AC24$F;Y7E M)&E9GW,[&V8;C-DPBP6+.&>CT9YR]AN]M(%'R%GN+AY"7>PIKNNS%T82YJ5T M](=2"X?*:+]>;;H$(!,Y.<K1C5#L)<=H&G^?7+!FA:(!9E-#,>?*HI8@69 M/4F@IY+OMQP_>3=N"'%"*F]0JU/4AM+,5IE0'D@]18CC30E494#:&)2E.^@ M]F-//QJU'T#^X@8%S\1A'$\%YE#R'&;MS+I=3*U+SN3*]TU9'U8L#D9*I[- MZJO*4'9?\ELN#(Q)C\57V_F$EJIN9S8S?Q^NXC?13E]2WA4$FQP#2CWLFR MI^I%@LD2T,:M%QFM$[DXP%=]@S,[P8``C<FX",);NPWX/@+\05C-->RIJ< M)ATTQ(V-C8JU4/^[!IR7Z6PQ5*@YK>10VDI9^$UI70)#NK:P(9B4^G764$ M7,C]6;N0;YO:$T>ZVQE9E5BNNZ2<N+)VN;>R_A6P4Y+^I:"/+@VGTS7L"9$ M)?8WFYO_$7^*J[/)9%[MWPX^4VTY[%.=$[C45)+>V/5P@;8_O"9HB_[@"A' MB&@-T5]"B7L@-RB6*(T1ATUY,NOKTZO95%U,\<"\-'P4N"14Q=I'Y1!)ZD)W MG9HLU-:8'0)Y<!Q@K<RM<O!&&!,&Z#J<*IYW*M6&42'75;4U*Y=I!A.LKB M,$ZUK<_>OD=.60X,U9\A8)@HG\#8+\8)DQ(*II\(JH">AP0DV$T*T8^1@4F M]9L.2CS\]BLFV3*Q!GQX%+(9:FU5F&Y=07K9C3760O(Y\.*7HQ=_Z1Z]/3I] M??3NQ=^Z9W][]P($6WD+=0-R9Q[#B88(XPI>E>>VI.5-6S*J5X-!=95[='F/ MZ"'J>)D@J)8-5!('#(D1M$&=>PI+0?RD)%"S.W^V%<''I1%95AVPK2*"5 M<E^N!3ZPPZ'.TMSEMJ[G@='4E(XM-7Y7>B']C3H1KZ%GN-:CK#=#<M/S9+ MK@8NFL4>R4:M!8R16L=A7?\_P$"QJBZ&H5:05VY&Z6!FM2;AS\'SH$.@=( MU+U=&#-8*!?%/^\"IHAS^W,8^$Q9,,/OAD.4)2(;!6SE!SD71S#D!T`::
M_!D?DL1*G,,<7M9*%&#A043G(OD:4%F9<O]"]$="PID<B9GBP21U[+%?%"Q M;(DR)>.Q6-TQ,)!R84OC5:"+PWUM["$EW>E:&1RQL0%(=,ORXO(>UF_,CL6 M&KJ4;=^C63D%(%-'%\/<LP6Z75O;2SWT078=_7FV"<^2%Q@F8Q\,/<"RE08& MT+.3Y1<QYH>'!975VS=(LW=/IH2MP;-"6W:B;;'N(HMQ5(5B!1"V'SY-OG M:@Y*R8'*T:[2N/UG68-SJ)A/*2T+?9$LQ17GFH/B$16W#P?8:L^PK["VAG1M M>4\6)9/C[!2V<EV%NX9.4&(W)$7(UE?<>JW:Y=$C<2%22]#.?L7([%8; M=8-:L[*_#G60"<Y?P"Y?NX"`CD"X@#,VV(87PY%XN4@2YM=PO)^(*M*YD; MPU'8MR?7@/\94V_BL4*X(^#QZPT=)T;U"MDSH4M9-&X6@P.<OD<YC1J<U+/:
MYM7/QE,I'/NXGRA'8GZ_!OH"@8B"B=TL$%#P,D$;*RBB(&C7@PG=L-+<01'2 MT8!D@2XID-P:8"F35'N_Z1KCR=CVJ],5ZIG2MJYPA?0<<5A0&_H>,BQ*L^L M,I5/B=5^>%_#>F85?YOK*K29(I%!X29G!QP.A5QE(,$8?%S6LI#^A7EY;/(* MI+'>;>_.T@^S[H[6LH8*O9]6/'_5%NO45@,:C3;S5Q'-BX5)H72;,/<0N$# M,7)4BP7;>)^U97M0KI[.111#TYH5],4KQ<P>CWL!S'$^RG&1.TFQEYN>9<]* MO;]\?@F,#T$L?U5>TL>.3IIB^1D.@?P%D11M(TX=Y.1DG#HF<";UK>VZ+.FU M2O:GZ-.K!+QKT?FZ1][<[)K-[MB(6GV/7$4*D"^E-!GCQE.CMPDH,WFEL$; M):PQ=9#*HF&G=U,DFV$:8#+ST"5S%?9C#7A;'&-B5E6KRG9AV[W]:OWW9=O M#PUI?RA&GA09A#A]'-80;J7SPC2?8>7V]YK=/9:VTO8P$#%#!/8VL%<*/#1 M:.EDZH<$"3&?)2-Q]N;P.7D[IQ2/0JD'P+<%T#YN52(:,"ZKU<N,#OU%?$2 MOVJ/65MW$VR2/%B.P+U5Y4Z-[\A9E,0"7-^W!V$RQR@Z4']1?XUK@O+"D'" MH9A]V/*P;M0VD8NYZP%^GH)39SL765VE'Y]>,/W__^'_F;]N:P478WW0VY MLP'4Y(&>T:C7.^VV^$$(L=WIX&>#?\-?I]5IR'^WFXU.>ZO>K,/=9GOK!U'_ MKQB!;#!0OP`Q+*X7#Q+_^?-_\,<&MMY.6EVBA+2;*^05"9[5NSDUMK>J]O:
ME06\#G_UZ/3L^.3=Y(B-A^)]X?G+WYY<_37HS?R=^M1[>S#<_6K"3F"SD\/ M=?DUV<VU1Y%5I6:&:_(SAH<V(>G+WZ!["]_EB0V1LK?W">D93E1>J)MGF MS61CI[.9M.0_]#M=C-N+S73:F_4[;;[6FXTVUN%?5:;7:-3Q=^7!DOYNR_;Z MU]033F;%9J3,J;]34#0XJ_G%2V>+,<Y8HR.:C;VM]M[63OX\%[53-/.M7512 MP=S><0+SNK";ZIRF]-_:V%WXCA4E[X*G!_7Y__!*=VM"-QI@6$]:[<*FC MX_>R5+W]:>_O3Q_7=X:?GOV^5JU_NI1_DG>;Q5=I[=FG?EJE;W%">@M"(^![ MLEP+.4'5IC@Z4XUBD]D&4][email protected]:]AY(S0RC2HF6ARRQ9#[I<Z7P1BU?Q MA1"[0N[V>GVOU5EE(9@&"E=`LXXB2IWGGYWI7IR\>W7\NOO\S5^Z+X_^BD!\MIR_AKFO(N!@BM*I*,EMD&Q%V;<195:98:L&Y1Z9@N$'*3,K]TMYE=2:P:.CW M5$7^$+QLYY-Y;XC?9@P)S7DW2B0=H3\-NN,2OJ+MC*NE*^N:]M\-Z$KL]?\V M'M62\>5DCS8"I/N;W'(XP#EK56:HNT4I8Z4+:F\]5!568ZM7L5<J+X8NSC MI@0D$E_9XS-*E&LA=M$KRAC,IBB6U"Z"%A"VAM*V"Q.0,MW@\AKVS,.)MFKA M"W=:U493OO%VH]I0J1H0MMEJ!Z_QY$0>X@\W^/?D]PV2\46-H=<T^C<+BN;1 M1M;S7AMND-/LDF<<'(B&UC:HA<%CRODV]-P_'BAHVTMQ>O@62![.ED/J'F- M*U(+W%U!6_)"=,P0&!<O0MIY1&W\:B],TMJMP-0?-&N'JXS+$HU&&H8\]> M9#_*43R0;Z2ZY!4]<*%9L"AC/RS%8LF\6\**&&R%M/QZ;[%_""9$=:G5NZ-S M56@,H46FX$.1^F(,\)T5,,#O>,=(N]+*GML78LR]&K2'L:_%KGXU^#M#LGG ME7.U<%RMQ<.B80O"W7KJ<JUT^TLM=.M;&S+F:3\JM[INTU:MNUM3@1:8BY' M:]E8'>JE*4!Z!L2SC"@52+PL9I#QHB6SH[>7[55/(@[UF^8NV[R/_][_O? M][_O?]__OO]]__O^]_WO^]_WO^]_W_^^_WW_^_[W_>_[W_>_[W_?_[[_??_[ 1_O?][W_PW_\/(;HG^P#X@#W
`
end
--
To unsubscribe, send a message with 'unsubscribe linux-mm my@address' in the body to [email protected]. For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/
Quoted 4 lines · Eric W. Biederman
I've been busy working to improve the basic mechanisms of the
page cache, and finally what appears to be a stable set of patches, with no hacks against 2.3.3
I have three worries:
- this is large, with no input from anybody else that I have seen.
- I absolutely detest getting encoded patches. It makes it much harder for me to just quickly look them over for an immediate feel for what they look like.
- Ingo just did the page cache / buffer cache dirty stuff, this is going to clash quite badly with his changes I suspect.
So would you mind just sending the patches in plaintext, one by one, to avoid at least one of my worries (and as a reference to other people: this is basicall yhow I always prefer patches).
The other worries I'll see about later. The short descriptions sound fine, although I still want to look at the vm_store part closer..
Linus
--
To unsubscribe, send a message with 'unsubscribe linux-mm my@address' in the body to [email protected]. For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"LT" == Linus Torvalds <[email protected]> writes:
Quoted 4 lines · Eric W. Biederman
Quoted 4 lines
I've been busy working to improve the basic mechanisms of the page cache, and finally what appears to be a stable set of patches, with no hacks against 2.3.3
LT> I have three worries:
LT> - this is large, with no input from anybody else that I have seen.
Not much. I had aggreements in principal but no one else has looked at it real hard.
LT> - I absolutely detest getting encoded patches. It makes it much harder
LT> for me to just quickly look them over for an immediate feel for what
LT> they look like.
O.k. I do that for large patches because I'm paranoid about the mailers in between. . .
LT> - Ingo just did the page cache / buffer cache dirty stuff, this is going
LT> to clash quite badly with his changes I suspect.
Interesting. I have been telling folks I've been working on this for quite
a while. I wish I'd heard about him or vis versa.
Ingo can I get a pointer to your work?
Linus, I'll be resending the patches later today (church is in about 5 minutes).
LT> The other worries I'll see about later. The short descriptions sound fine,
Cool. If you agree with my work in principal, that makes life easier. Now I just need to worry about the details of my patches.
Eric
--
To unsubscribe, send a message with 'unsubscribe linux-mm my@address' in the body to [email protected]. For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/
Quoted 5 lines · Eric W. Biederman
LT> - Ingo just did the page cache / buffer cache dirty stuff, this is going
LT> to clash quite badly with his changes I suspect.Interesting. I have been telling folks I've been working on this for quite a while. I wish I'd heard about him or vis versa.
i'm mainly working on these two areas:
- merging ext2fs (well, this means basically any block-based filesystem, but ext2fs is the starting point) data buffers into the page cache.
- redesigning the page cache for SMP (mainly because i was touching things and introducing bugs anyway) [on my box the page cache is already completely parallel on SMP, we drop the kernel lock on entry into page-cache routines and re-lock it only if we call filesystem-specific code or buffer-cache code. (in this patch the ll_rw_block IO layer is being executed outside the kernel lock as well, and appears to work quite nicely.]
the design/implementation is this: we put dirty and clean block-device pages into the buffer-cache as well. bdflush automatically takes care of undirtying buffers (pages). I've modified ext2fs to to have block allocation/freeing separated from read/write/truncate activities, and now ext2fs uses (a modified version of) generic_file_write(). This brought some fuits already: whenever we write big enough to modify a full, uncached page, we can now overwrite the page-cache page without first having to read it. (security issues taken care of as well) [the old mechanizm was that we first allocated the data block which was memset to zero deep inside ext2fs's block allocation path, then we read the block if this was a partial write, then we overwrote it with data from user-space. yuck.]
the current state of the patch is that it's working and brings a nice performance jump on SMP boxes on disk-benchmarks and is stable even under heavy stress-testing. Also (naturally) dirty buffers show up only once, in the page cache. I've broken some things though (swapping and NFS side-effects are yet untested), i'm currently working on cleaning the impact on these things up, once it's cleaned up (today or tomorrow) i'll
Cc: you as well.
i didnt know about you working on this until Stephen Tweedie told me, then i quickly looked at archives and (maybe wrongly?) thought that while our work does collide patch-wise but is quite orthogonal conceptually. I've tried to sync activities with others working in this area (Andrea for example). I completely overlooked that you are working on the block-cache side as well, would you mind outlining the basic design?
one thing i saw in one of your earlier mails: an undirtification mechanizm in the page cache, although i've still got to see your patch (is it available somewhere?). Originally i thought about doing it that way too, but then i have avoided to have the page-writeout mechanizm in the page-cache according to Linus's suggestion. I'm now pretty much convinced that this is the right way: future optimizations will enable us to delay the filesystem block allocation part completely (apart from bumping free space estimation counters up and down and thus avoiding the async 'out of free space' problem).
I'd like the page cache end up in a design where we can almost completely avoid any filesystem overhead for quickly created/destroyed and/or fully cached files. I'd like to have a very simple unaliased pagecache and no filesystem overhead, on big RAM boxes. This was the orignal goal of the page cache as well, as far as i remember. Turning the page-cache into a buffer-cache again doesnt make much sense IMO... Right now (profiled on my patch) for cached midsize file-IO the main non-data-copying overhead is block allocation. Block allocation _has_ to be complex on a true block-device or otherwise the filesystem is simply not trying hard enough to avoid fragmentation. This is a fundamental conflict. And we will avoid the data copying overhead with better IO syscalls.
-- mingo
--
To unsubscribe, send a message with 'unsubscribe linux-mm my@address' in the body to [email protected]. For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"IM" == Ingo Molnar <[email protected]> writes:
My current patches can be found at:
http://www.ccr.net/ebiederm/files
in:
patches9.tar.gz
and soon in
shmfs-0.1.011.tar.gz (Which should go out later today).
shmfs is my filesystem that resides in swap & the page cache. Currently it doesn't work with swap-off, but that is in progress.
IM> On 23 May 1999, Eric W. Biederman wrote:
LT> - Ingo just did the page cache / buffer cache dirty stuff, this is going LT> to clash quite badly with his changes I suspect.
Quoted 3 lines
Quoted 3 lines
Interesting. I have been telling folks I've been working on this for quite a while. I wish I'd heard about him or vis versa.
IM> i'm mainly working on these two areas:
IM> - merging ext2fs (well, this means basically any block-based filesystem,
IM> but ext2fs is the starting point) data buffers into the page cache.
IM> - redesigning the page cache for SMP (mainly because i was touching
IM> things and introducing bugs anyway) [on my box the page cache is IM> already completely parallel on SMP, we drop the kernel lock on entry IM> into page-cache routines and re-lock it only if we call IM> filesystem-specific code or buffer-cache code. (in this patch the IM> ll_rw_block IO layer is being executed outside the kernel lock as well, IM> and appears to work quite nicely.]
- I added support for large files for much the same reason.
my summary of patches is:
The patches included are:
eb1 --- Allow reuse of page->buffers if you aren't the buffer cache eb2 --- Allow old old a.out binaries to run even if we can't mmap them
properly because their data isn't page aligned.
eb3 --- Muck with page offset.
eb4 --- Allow registration and unregistration for functions needed by
swap off. This allows a modular filesystem to reside in swap...
eb5 --- Large file support, basically this removes unused bits from all
of the relevant interfaces. I also begin to handle PAGE_CACHE_SIZE != PAGE_SIZE
eb6 --- Introduction of struct vm_store, and associated cleanups.
In particular get_inode_page.
vm_store is a variation on the inode struct which is lighter weight.
vm_stores's seperates out the vm layer from the vfs layer more, making things like the swap_cache easier to build, and cleaner. This is potentially very useful and the cost is low.
eb7 --- Actuall patch for dirty buffers in the page cache.
I'm fairly well satisfied except for generic_file_write. Which I haven't touched.
It looks like I need 2 variations on generic_file_write at the moment.
1) for network filesystems that can get away without filling the page on a partial write.
2) for block based filesystems that must fill the page on a partial write because they can't write arbitrary chunks of data.
eb8 -- Misc things I use, Included simply for reference.
IM> the design/implementation is this: we put dirty and clean block-device IM> pages into the buffer-cache as well. bdflush automatically takes care of IM> undirtying buffers (pages). I've modified ext2fs to to have block IM> allocation/freeing separated from read/write/truncate activities, and now IM> ext2fs uses (a modified version of) generic_file_write().
Yes the current version of generic_file_write() which doesn't read before writing is interesting. . .
IM> This brought
IM> some fuits already: whenever we write big enough to modify a full, IM> uncached page, we can now overwrite the page-cache page without first IM> having to read it. (security issues taken care of as well) [the old IM> mechanizm was that we first allocated the data block which was memset to IM> zero deep inside ext2fs's block allocation path, then we read the block if IM> this was a partial write, then we overwrote it with data from user-space. IM> yuck.]
I don't think I ever traced it deep enough to see the memset.
But I follow. It sounds like you have made some nice performance improvements. The first version of my stuff is just after unlocking potential.
IM> the current state of the patch is that it's working and brings a nice IM> performance jump on SMP boxes on disk-benchmarks and is stable even under IM> heavy stress-testing. Also (naturally) dirty buffers show up only once, in IM> the page cache. I've broken some things though (swapping and NFS IM> side-effects are yet untested), i'm currently working on cleaning the IM> impact on these things up, once it's cleaned up (today or tomorrow) i'll IM> Cc: you as well.
Cool. If you are really that close to done we can probably synchronise our work and submit the result to Linus. I think we are conceptually orthogonal except for handle dirty data in the page cache. And that _needs_ synchronizing.
My patches that don't depend on dirty data in the page cache, (large files, no need to support unaligned mappings, etc) I'm going to send in now.
IM> i didnt know about you working on this until Stephen Tweedie told me, then IM> i quickly looked at archives and (maybe wrongly?) thought that while our IM> work does collide patch-wise but is quite orthogonal conceptually.
Except that we both handle dirty data in the page cache... Hmm. You must not subscribe to [email protected] (It's a majordomo list) There isn't a linux-vfs list out there anywhere is there?
IM> I've
IM> tried to sync activities with others working in this area (Andrea for IM> example). I completely overlooked that you are working on the block-cache IM> side as well, would you mind outlining the basic design?
Well I'm trying to eliminate the buffer cache...
My work on dirty pages sets up a bdflush like mechanism on top of the page cache. So for anything that can fit in the page cache the buffer cache
simply isn't needed. Where the data goes when it is written simply doesn't
matter.
This means that everyone can reuse the same mechanism for keeping track of what is dirty and what isn't. As this a significant kernel tuning issue I thinks it's better (if possible) to share the code between all of the filesystems.
Further the mechanism for writing handling dirty buffers doesn't need to be tied to the disk buffers. As far as I can tell bdflush doesn't really care that data is going to disk except that:
(a) it calls ll_rw_block(instead of calling through a function) and
(b) it names all of the buffers by their destination on the disk.
Something as brilliant as that could happily sit at the page cache level and be reusable, by all filesystems.
This also allows allocation on write and other fun tricks.
I have recoverd the buffer pointer in struct page, and put it to use as a generic pointer. A block based filesystem will probably use is as a pointer to buffers, but NFS can use it for something else..
IM> one thing i saw in one of your earlier mails: an undirtification mechanizm IM> in the page cache, although i've still got to see your patch (is it IM> available somewhere?). Originally i thought about doing it that way too, IM> but then i have avoided to have the page-writeout mechanizm in the IM> page-cache according to Linus's suggestion.
I'm not familiar with that suggestion.
I do know the page writeout mechanism shouldn't be in shrink-mmap...
IM> I'm now pretty much convinced
IM> that this is the right way: future optimizations will enable us to delay IM> the filesystem block allocation part completely (apart from bumping free IM> space estimation counters up and down and thus avoiding the async 'out of IM> free space' problem).
I've played with things a couple of different ways, (so I'm not certain what you saw).
I can already delay the filesystem block allocation, though I currently don't do that in shmfs because last time I played with that it wasn't working too well. Mainly because I had a pretty stupid on demand allocator, instead of allocating for all dirty pages of a file at once.
What I do now is allocate blocks when they are written too, (which works great without contention). With contention a delayed strategy almost certainly will do better. The other limiting factor of my fs is I'm using swap pages so I'm not totally in control, of block allocation.
IM> I'd like the page cache end up in a design where we can almost completely IM> avoid any filesystem overhead for quickly created/destroyed and/or fully IM> cached files. I'd like to have a very simple unaliased pagecache and no IM> filesystem overhead, on big RAM boxes.
IM> This was the orignal goal of the
IM> page cache as well, as far as i remember. Turning the page-cache into a IM> buffer-cache again doesnt make much sense IMO...
An unaliased pagecache? I'm not quite certain what you mean by that.
I don't intend to turn it into a buffer-cache, but I was thinking of sitting what must remains of the buffer-cache in page-cache inode, like swap is now.
And the low over head sounds good to me too. Right now there are a couple of paths I would like to clean up. In particular dirtying mapped pages, in the swap out routines.
If/when all of the filesystems are converted over I can just about do it with a simple mark_page_dirty call, (except this doesn't handle fs that want to track on a finer granularity what is dirty...) So I'll probably wind up calling something like updatepage. Except right now updatepage has way too much overhead.
Eric
--
To unsubscribe, send a message with 'unsubscribe linux-mm my@address' in the body to [email protected]. For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/
Hi,
Quoted 4 lines · On 23 May 1999 13:34:11 -0500, [email protected] (Eric W. Biederman) said:
My work on dirty pages sets up a bdflush like mechanism on top of the page cache. So for anything that can fit in the page cache the buffer cache
simply isn't needed. Where the data goes when it is written simply doesn't
matter.
One good reason for using buffers aliased into the page cache is precisely to avoid a new bdflush mechanism. We have had enough deadlock and resource starvation issues with one bdflush that I get nervous about adding another one!
(IM == Ingo)
IM> I'd like the page cache end up in a design where we can almost IM> completely avoid any filesystem overhead for quickly
IM> created/destroyed and/or fully cached files. I'd like to have a very IM> simple unaliased pagecache and no filesystem overhead, on big RAM IM> boxes. This was the orignal goal of the page cache as well, as far IM> as i remember.
Actually the initial motivation of the page cache was to try to keep per-file dirty lists, to fix fsync. We just never got round to that!
However, this brings up another point:
ftp://ftp.uk.linux.org/pub/linux/sct/fs/misc/fsync-2.2.8-v5.diff
is a set of diffs to fix fsync performance on 2.2. It fully implements fsync and fdatasync, and applies the same optimisations to O_SYNC. It uses per-inode dirty buffer lists. Please bear in mind that we still need such functionality even with the dirty-page-cache mechanism, to keep track of the indirect blocks if nothing else.
--Stephen
--
To unsubscribe, send a message with 'unsubscribe linux-mm my@address' in the body to [email protected]. For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/
Quoted 7 lines · Stephen C. Tweedie
However, this brings up another point:
ftp://ftp.uk.linux.org/pub/linux/sct/fs/misc/fsync-2.2.8-v5.diffis a set of diffs to fix fsync performance on 2.2. It fully implements fsync and fdatasync, and applies the same optimisations to
O_SYNC. It uses per-inode dirty buffer lists.
stephen -
this patch appears to combine the "block allocation deadlock" patch with the original fsync reimplementation... correct?
have you experienced and/or fixed the 5-second self-destruct problem i mentioned to you?
- Chuck Lever
--
corporate: <[email protected]>
personal: <[email protected]> or <[email protected]>
The Linux Scalability project:
http://www.citi.umich.edu/projects/linux-scalability/
--
To unsubscribe, send a message with 'unsubscribe linux-mm my@address' in the body to [email protected]. For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/
Hi,
Quoted 2 lines · Chuck Lever
this patch appears to combine the "block allocation deadlock" patch with the original fsync reimplementation... correct?
Yep, and that was unintentional. Fixed.
Quoted 2 lines
have you experienced and/or fixed the 5-second self-destruct problem i mentioned to you?
No, and yes --- I needed to add an invalidate_inode_buffers() during inode invalidation. Unmounting with writes pending appears to work fine now.
Fixed patch for 2.2.9 is at
ftp://ftp.uk.linux.org/pub/linux/sct/fs/misc/fsync-2.2.9-a.diff
--Stephen
--
To unsubscribe, send a message with 'unsubscribe linux-mm my@address' in the body to [email protected]. For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/
Quoted 3 lines · Stephen C. Tweedie
Fixed patch for 2.2.9 is at
ftp://ftp.uk.linux.org/pub/linux/sct/fs/misc/fsync-2.2.9-a.diff
oops... one more thing. invalidate_buffers() and set_blocksize() both need to call remove_inode_queue() for each reclaimed buffer, and create_buffers() should set b_inode to NULL on all the new buffers on a page, for cleanliness. IMHO.
- Chuck Lever
--
corporate: <[email protected]>
personal: <[email protected]> or <[email protected]>
The Linux Scalability project:
http://www.citi.umich.edu/projects/linux-scalability/
--
To unsubscribe, send a message with 'unsubscribe linux-mm my@address' in the body to [email protected]. For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/
Hi,
Quoted 7 lines · Chuck Lever
Quoted 3 lines · Stephen C. Tweedie
Fixed patch for 2.2.9 is at
ftp://ftp.uk.linux.org/pub/linux/sct/fs/misc/fsync-2.2.9-a.diff
oops... one more thing.
invalidate_buffers()andset_blocksize()both need to callremove_inode_queue()for each reclaimed buffer,
Quite right --- done. I've now checked that there aren't any other places where we clear BH_Dirty. Updated patch in the usual place.
Quoted 2 lines
and
create_buffers()should setb_inodeto NULL on all the new buffers on a page, for cleanliness. IMHO.
New buffer_heads are preinitialised to all-zeros anyway (search buffer.c for "memset").
--Stephen
--
To unsubscribe, send a message with 'unsubscribe linux-mm my@address' in the body to [email protected]. For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"ST" == Stephen C Tweedie <[email protected]> writes:
ST> Hi,
Quoted 4 lines · ST> On 23 May 1999 13:34:11 -0500, [email protected] (Eric W. Biederman)…
Quoted 4 lines
My work on dirty pages sets up a bdflush like mechanism on top of the page cache. So for anything that can fit in the page cache the buffer cache
simply isn't needed. Where the data goes when it is written simply doesn't
matter.
ST> One good reason for using buffers aliased into the page cache is ST> precisely to avoid a new bdflush mechanism. We have had enough deadlock ST> and resource starvation issues with one bdflush that I get nervous about ST> adding another one!
I agree, multiple bdflushes are a problem. But this is precisely the
reason why we put bdflush into the page cache.
The buffer cache is not general purpose.
It has a maximum buffer size of 4k, and doesn't even attempt to work for non block based filesystems.
We need something in the page cache that can be used by everyone, otherwise we will eventually have coda-bdflush, smbfs-bdflush, nfs-bdflush, .... And all of an inferior quality because they don't share code.
Also using the current bdflush we can't implement allocate on write.
Eric
--
To unsubscribe, send a message with 'unsubscribe linux-mm my@address' in the body to [email protected]. For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/
Hi,
Quoted 1 line · On 23 May 1999 13:34:11 -0500, [email protected] (Eric W. Biederman) said:
There isn't a linux-vfs list out there anywhere is there?
--Stephen
--
To unsubscribe, send a message with 'unsubscribe linux-mm my@address' in the body to [email protected]. For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/
Quoted 4 lines · Ingo Molnar
on my box the page cache is already completely parallel on SMP, we drop the kernel lock on entry into page-cache routines and re-lock it only if we call filesystem-specific code or buffer-cache code.
How have you called the 'release_kernel_lock()' function?
I found several lengthy operations in the kernel which should also release the kernel lock.
(the slowest: clear_page() when called by get_free_page(GFP_WAIT))
--
Manfred
--
To unsubscribe, send a message with 'unsubscribe linux-mm my@address' in the body to [email protected]. For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/