EnF PACKyz  %M %MM}G.>0v#JjO&P/M1{!VvMyuW0s?h+'ϕGzSltk('/=ꎝ"6I=l(%~,!dMR* g;YAoE7>sO&3yyJE),+) &9[osӻ->Q5ӲcEC3R/0u-H8X 3 \˒w:)+1AVeɖs/dc><1zc(?Q^V$ ߤ$$@%h{Gʶ#iU>xWDKJ]O{_IwF uNǪ،4$L#ø(C,(,?H_w$q uܽL%GKO̡naU{8`1ힼ|Y -(94^oa$];{dB Q֏`Րr:BĀm LD p'~lNL8a,\!VxJ:|t((Y'l=Ŏ>j@eh懚t[{C9mʌ]B@z+kܔM+d)`Hbzs $A]=ck3nmxρjVڷgVRZ+pB\G:FP޶{,9bPk0bofg3;0G?XPye n ]hS$7`wޏ9Zؔ?"y#.C궔eCRn%U%=5z75&%{늓~>2h0ΘaC<@h<1g͆;hMDګXBRJƽٮw>_#sU> #r?3مI<&թ{#Uz81P7 bto:Y >Yb"E[[@zL|׳и$SmR<0M&9V 54- C絎,E6ġUiO wf؁g='S98'$Y<ƥշrlg7tj&&Hd֖rJrsIӓ # Mz KEr$koԩ_\V !iLrޟx^m|g*#]'_=0S~j3-'*Qc}״ vCawRQ,/#hjv> 5?'u-GTz6H alȑeyX,{.#:U+5Ȯ'2 ,Fl-UUk%l~!)q4 cԕn/r Cޫt>gq,GՀ"'J"e47d3ᬥ۪-TJ#_邇U8mbp)Whť='IPsddkVǣMB)MV&=vYEB ur<]0Jc "\ZJ N3(zJ><1oEdmxSb ۀ]v;hj/S"SSw)^ 2-XJj|V6[axX+lj-JDrfI̮kQENr5 iˉ >M\)[)^b*v/3h\HM* w!6.Z9WsN1@3eUƴ#*g$ .Oes͗9રB83NuB&ApLi(?mcp.4qFBj"A}z [lû"|@_uMqX9)Am^iV}FM?[m3 *GF_ŕu|jF LEs IE.Q{[9mz; ;xz/+umתJ{ :J^x5#:$jS*aqX< L~P$QeD-׊>2$J kv+Ͳ.׍%h&Tr ` ]\Z+d=[|5C;KzCۢ:48LlT}ϼ6;wKi?΂R/#\j^cx4@GeyG@%i2 ^dv?Z=cdu,xp=AALF_A{i|X,PZד! /ިH_lc6nX٢8I}juǼUz+;gӶ}&ۂ#KcTh5 Izaq /z8YEk܌ا5N!VaEuA9=H ȡ18˦Hr!)^[]:_@GezX96j Ξ[leA8-SkLk,&x|ᆭȳ. boRZA>|O #W9)c4]{$gޕ^q1NZ'eL T\BHa.7XW$ϦQiټX;""4*PXtbF 8BeIb31t8w_2RVzcl3{"yRī ^J 9r[JXί%ƽU%nF/s!OU}-2 H%PO캧_ DoͧQ#>rO* E9h]m!휩,/F*70S&, tJ`.VyY [x[{NuǵmUC P^9)D| 0l1Ε@b 8fuicMpJj)4=+ř /` tRf!sߴɋU;qN@m$9bqMeoA"# otzmZfψ<>兗rB ":a!}ώpF߂җHӻРTkA V{2Nj ,nb"X.BMwc}iܐ%B~GYͫ!3A胗Ą6c,0;ߌ;Ӑ"M3vEYh `an{"?p/ ,cS$I%]ag™ݞTI<<H)cH w#JVIԹvƁ !UUODji97{ZֈPgVڎҡ)%5Gu1φʦtHgWp8VŇ4sҁ.%0+(lGH.q`d?N4lרs|w 5 ~AOY qK-U5PWZYbɷ<o 02ct*F.^PBS-ө铩iݑ{-(J~gQ|Pm[1 l`lePTύo~ kiIZ1lQGPF Zk x1<9pV8FU:z뇉Ij S7t e>{N3j=b^k y1#2So|,n\! 넲!oNwR/FR/[oZ]ˆ,F1Dń"DcNwRޜebz&\{Ӥ}5=rY fFL% ќdoN>6`3"T$*DŽ 3R26ʨۢ(c-ݲ,jYy3WSG)7,K^? ݺ/pm o0VX XIn-e/#n4 4H|J#7WlI6ςgLl:٩6?˅r$ N6 >D#cx.=*}Pm!k AkC؈Sy%: [us.'M8ްLD{XZ t X)VFbdEpɯM˂ґ^3xgWtdm`B((+vDcAyzfIR?X";A:%sOboٗ-*1vLtKs}Zw@cMhR)HXIٹ>p m{T}j+^Ϧ/_&٣Ҋ,7m ElΕhyb3jWC u%%ZQvsB! _ K$?]teߠqQWȺk3^~E4Ѯuqd^xA#Hœj0Qސsa, ~|52 t#|+:*]Z~ -6jn It tɒ Y8h-E'jC=?O.cpzZ0:$!2e ˷h oq:r;C&AoE"Zu_GR(4 92KpBټ(rrVxN@s@!rUh/vLAq(R A- bv ф`_؟EF].I |f/h?^}YG}tE D`8JS `x z~g Iї2;`A҃[?G._Y{pYJ4S*/G(KhUV8TF=4ݏgֆUhmf5U+HDjgՈ:@vsJA;jq1w-hs/!1E 44JM3FR~c0||f{cM fOY`JEhx6LJ/EZ$D1À?d(u4ߞ{2zALj~*$UeF-՝YU/!W!]YV"aeOB[4 "Gn fVVT+yM,L)v=6j.EHwmQTiEALM09="LLyPTY4c+b =<ꋖdƖH@rKh)Qj* nت.\ Gc5 qbwe'"uz_4"C3d+ ڶj'`~'P`G6w ޹4f ,rPP_ ЄY(SL\&kߵuͶ7XhSRUBrYURtHy[a%T*lRW8{hZxyX=FhWoNZ.DtT.@ΰ5x5te5~~~cu,eV\)t6ρ q70vMDg;g>l ؅6Մ Ĉ4R5gfجNℸ0awͼn 1JZ̶d襰ш(Jl򶆶&L# >7P6$s|݆W\uzj:,aP#$CvE? ŝG%D fTGH|F k }ѪF,Qb\Q{vPOjb/aş}j3{;zk7HNf~l|f8Yz9\trR|ݽ҉wRŷS'ڿEslN|Bs \U^!X\2(}mHlHc*3USGX`pYt,KgQ&-# FQ5Uαp:|X98(t<нhyzG78GPֻ"S^V=qSEcrkP`q +0#JF9vyiCM"meGsC4)4W3ؓ0Q&ů~>[`dیkѣO-Dz͸W}W.5p5ymI<5vӏ|<:Nh?Ky"NP&U,Z8^b4؜M* B}%F6^#UQ du}:/D =~3aa'r=Ǜ-Uoޙ BpXdn-v?A,5Ce٪q+E]xu֐em;?g߿Om ff:%5B^֫Y3T|4UķD!sqLXx p4l7)72}%3f#sm?3t IF?'~C]8Wje2C;VX (Ҥge:EOP)$_ ":Onx .zw2/pc%\HES;4>`ECPJDz'J y y-'rnEM`w#z.K0it"9FKpdCLS!,Fq#nNSwk#)Ӟ!=)1(5!I@>'$Ї|"Xɷ@Y,K AJ 7|X3S :*-jwOܑ 񓙉9l|+hlZ{<V7j$E-mA']enW_&%Ģ~'N񎖼EL:1%h:1p"w!|w:; h rhOu7 gp ot_ Y֭]<]IYn N#BTԭg^@<vM(8\ҤhkD;|aL^kŮB3).3DdUY\z, XW)(4z%"ul luok.R_0Qᬀlfu|Ȓ(} '(t%k["($S'<#=Ndm%ƌ{%KLga=%>tF=nԱ: KAMXv}vc d_Pm ք-n}\fHRJI* yD&Oy2sGbIE(1Gf+րtE>G !h=9Hߪ-?̮صgA+xҘKTas<<-;.&VɋBV1f0 & G*Πxbݖ6 r4F3I-%V@B6rcQy(]WJ6Ov5}&| r?Tkb*䬎%ザfQv!)JAD&p391)/!J+|$ acXuѴ5Y5Y U T8[rN)8VMSւe% 㥖ЕJ> H˪MA>Fg`JTc(w{lS]@t*Չ$[zM^L46+FC%J2lO9._8@ ;..S>f:xanGKnKOVP3 sHaIAFŒҏ`o^hDARh%fk,k0v{?S&a!j)}>VNfKUBIn>I9\QLsV c1MT.cYNVn"DeV6>: DBS-1v_ ]TQØ*͘d >}Qo #E:gyVqW9$/2#fT/E8nt ao ~~lE*rLQک_GH<:d hώ_nB˯ k?PǪj.74?B:ORWi̽ν,o~ZPDcϖpY1uDeihsstK( nB4':UHxw3BAXiS X'>Sh]5wG;ƚ0̯$jKv;kw2®Sa NU4FC z' #te7>+!}EZȞ 67e=/+}p9cKב4>㦆:1WQxz= Y@4tPcW\9[|9M=uu7v{~PC T4nk nP|U0zPSL;Txe ,Eo){]Lĩ]8{&7 Z@!bݨ [H14`Ñ.y4ARNQS5_U*,q*W%.:OђZ[wިDZ*>4- ׼)RnUF@tĚ\x֯t:;;\N7!v_3L3  X+U]<'tjS΁;9 J64R]Ih.936#:\_,ِ6oץ23kY kL3s)TbI1*fȆݔ9g<3EJS9x|Fqݞ!iP*ۃ"2ko$xfEy>!\T߲Yg&/Wi`α1+GhPڥq=!2!n3&^8(R\=TID J~Mz6n>\0.o zHV.uc Bz]R,gK0wYװTF.̹}ko^ِM 8 ^34q[Dkg脔g9zN C~pQxҗfaԗKlVqݦ$Zg- ?qU{$8떂P;qG zśG]xY[$빀 -/}ʬsq9%-b, vḞGΓ@4v?&WY C$3ɧ-h˜Y܅,rTe~-R@Qߝ53w0l8To>u+Ds6{YF]oҒE*&:3R<.W$&Vgeb^+|xcWsP]N>g֢|G<+N[ J:4KTU@þ$ NN b_+"נV4K*wf(c+ {QK֥xiy"RS4JEs=J=oHscE%`ٔLye~/>$!eM^L#X:( YDpV ZIaZf \rcc9ܿ\d"'5HENRDS~fD2CKEG9Ş y)C.BaF {s iPXb3.˞_ ƺCJ$Z4JsȌEo;A0u~Ph+mM 7 Q0x}a\XГ[j Y`Đ[L߷8RRDR1P('o3=zU}wx&[{ B(u "J3(yܹauG$¢92WH0ȽlN] +t>oHҢR7 &BL CAxM BŚ45U7m\ZC 7%6a+ ,cr$UN.@ԝor Prq7# m)Ujk~iJ(+b ,} g~IbN|:.MXThQiLDp&UZT/y 4-f׽.`BQ3G<_k?Y.2EE8VoaGkI7s[ ixF:v}0.54N '~&7nP /C+&h oMeǍe_XP|XsQʷ#O_$8"b'ws>򡅻J"j' *㬾hZ dAm.nŎÞERfn 4 2#5f$6Do2 R pGo_]w?o[@&sQqP\4B v3>SKVh3GsZᯕƄFw_}|HzAg{Hc3QFE1${ ys\;cx!E=4w&wϼ:ڂEQ.n]zqO`s9٣D1ek=&<ߏP['=w吩2r䐷0S5jIro}J Vq4-"g=!e#@^=O?0LF-zB|*Kb>+GJ(Գ3RU' UY} *b\;"A*I{"|PfLj]Uۙ 5BeyS|ȵZۇE h @-^n1*d 6Uz{ Tq\? kE#{סAɡhYj2 Oy_P1!V5~@?px#]WL>bm#ay%iTbṊ(P#̒Mx@_tHCv\b08ylfEfW ދ,to=[ `IΖHGAeʐx3i^8L}!LtU[ Mf [|bXri̓ % !fx!SL1;ho6#EZd,P \X;(X}I&'5`լɍiZma,#>"6-n~jiGwJ~AB;⠿+ޖ0"z,@@hô ),{^ _LUOwGw쿴xKѝ7x[yS>~XSBU4G+O Pȕ>yB}*ۉӯrDàxN{ֶAɫBGP[yg\r lٲZ_NsvBK(QC#)7 ,ؼA~NuRjM&7s߶/"^S.ÒxIȇٳsGѹuO5@ob"qh-}𨨜{׬ʝB l5kйrpW>mCp"@RAxP%K%k`-{ % eՖ &ksrХȮm=w2qd+u|O'O| JQQH?"o͎e n0zƗ|媗%<[׻/cF߳]A:C[F~3EPa5,~r厒>Iy$605Ksc1H!9wGHEb; )6 !H@'')BT{8*U-UU)&LCF=q!l):kds@!pНM\× h%WoƱF ,|@\= 1V:`* -[vur-d7v˩࢒t4<)PPZ_RFtke j/5Yrceb]2zvKvmQBh?HZ蕩L ׹P}VDI@!ҬNw d3Z?"SO|̏{ePZkl¾y>vLYWa/8}U& uNTL9 KS!4o\siׯ͞k*mڤmڞ0k,r5lYb=?z:mC'YAQ Y/.!Y#'T>g0=:uS/L!Wn˔VB6A1{:"_Wo V'Q 4OL:: R)Xm}cF 0X4fc:sAsT`Ti󖽩,qBLeݦCTʌK,i"OcDA@Xeae=&QoxJG|,`k ,Yx Hפ'uļ`h:Fёn{Wa3xӚj˹~_@[\[JXI,==N2 ˱y9m8+`r;$ӹă̎0jwB e㙁 :u6fZa,2A+o'pPcA YMtA;!N -, Ehjho_V5HQ3LQB;L:%ڻJ[Lrm"D"<&F*EfgIT7n=^Y 95¢q@!&#D-U2~1PT71E([Q$}MV2S A)uz9{|y@n,ߥ>&g&&+J&|ќ0ÅݵE+T`\!D5ᆳz y!p!dªǷF/#W78kןR-Jc&/M7]|r<p%3l\F!Lzj#uz*^9'%B> )Ot }dH8>.n -2 c30yTL+,F;bP ّ5-5Fr_b7>bJ%HfߊY+ S2ljEϒgN'5YTnRWrpcAyc~vu`Z`?rvV\^V&{O/Bg^l^ UOm\A@| DDo40Fњ./ ^_$Ρ[Hnz52(,' 9a(z•q ^ Sg?C T';Π. klމ Ԇ^^oނx"yDK#%=:Ue+6[K RwC=ޮ?MTd` "MƾjtCXe#n"1G 1v_.7>NS{U3Cun˚ܓGj Eiu[WН\i5l/%}qX}bæU"i1h,. $/ 왾uNqŭ;81$˧I+x1 jYʦFi P@ADH&+k.caڱUn㟟'dz$̭pyMHÂn尫8L(uv2eP _jJq_VP2+b9m>@fN [YHL}*H !JR<ȝ&[=5܃[ps Yjm; umq)iYd 5օ0pgro跩G컖мkb36 ^΢^n4j&2pd*N& j7`Y9%ſ8ӞD 2?}V$^ńtNf<֤`O4mNS^鱫w|Fָ ) heoڶOȧO;D V^(+(翁C-E(RFD"wn1[$rT.~%ә"7pI~Oz_WS.xN_7(ꯤ}ыF %g4"^W< rNd#d?޷*D DcV,EcM[Fwʄ#p=wMC43p'W'N&Ch,. ° lQ()@9rE<6GX+Jsvcd[}9A$(]ܸzV8DݸGB/y͌/MpN,9Ts [a幐* 3|2rL\i M5ᙦ/Hd}'2X)uBcQ H/c[LoD-j}a2);pO73|.q]{jqI]}ar&$rg4 ]v-"Qe33lY`/Y#n L/?{@w+v8elv8Yھ^\C=Ix׿Xpr6:4 @S8GvuZCI*z奕TfSejʊ5a#O)~C_x&扺iw7-Ob] (],VsS )̬ȇuԥt>Vp^ ]YMnLe"T!+ ̭!qX &6oJE.H,+󻡹dfl;*mKbS35hh$)<>D4wM.rN.TAqv~Ո&(؍W ?iq%J4tc7SsT)gbz(;zJV KupdnS{uO-U6y p"}R0#3N姫mO絇VDhP.!pWJi&t$Ц&Sp,0!M'SW@OX!'{/%<.=3(;߸];C}2LcJ1/9vZ,=šUmou S^dW%yk'2`* ąF@JeGl`"Q2e^x7 k) ;S^!(0z7NŅE|7m^td6])#A!Bz*+@kwO:@7 E:RDV>t:QOCQ˷ny}7 ؾC|6,׹ ?%B3}o.l4u #Bx\?6|9) ĽN93liLEkN8?CW@+M2;ӳvP\QIYU-j9pXhMBGJ | N;9N^.(0;_9g.`)X\ 6_[C\īvFRc  !LwtV'v;z#1s ]*w5mSΘ`ީc^DWN3>z-ȌKV2; ?HpDdV!#B^ZD {4C(s(5KPkFߧB& s(c_AI{H b~!+8y,دɑc]\:W@k`'IܯcXAark HHMYZ'^ˤb47?6UU''{^> 7 E60iy3528vZ6OTO VSi-~^RԔ`8Wʔ)}pOi]1 xϸ N,>?`DKH"I'uXu'N7 %[$EwUI/`-1>]R: b$3_m-ڣ *%`:d%+ wa_񥒹C-\5y}+{N}`_"YLnjwϕBk )TT<Np%3q=k)RV߹Ft){oWB9@ere8_dIʡpte`;77 +b1el@#/+u6&{|N `*Q4zCrW`=׻>B71%,1%ܻ55@Nķ?FDUy3a@:OX"b \o|uСrl8I;wECm bAJqh.1fQ-t; GX,fSuUIy{sŵnҷՊ+VA"~!X(:( 8VM>\鼢5w s2r =U'7%-}-g>$Oquz-=|6:(ENHaFI dhYE'q ]!k; "V }-'9([n滓D(P@;G.,;5 'qut}=㬋Ì CU,_o-3Z0^|"<|mjqH+3Cg)]RpP$)o:Mt]rͼ/^XH:Ipv[lf A2=bmxN=X^M('0gLCHgr.!NϤÐ[>:3 s?*أT#|VHGOed;aS' I Lv6GV*bښe*bOv^^<퉻ӒȠqrOp$Llϗo %3qu|_6S=n&X`*s^q0is~F^(E d4`T+t ^,&wJ(#w#q촵_G;ǦEM7ŠIYVк D- 401A B`I%-*\ ?jKC[J_p>Ř'usqAO49"8H\YqHb 9z8#w-Jd ?^k 5;ߩ{Ԅ?49T3ϟ[%pFbQЀROcX}踛Tq#}XàIYqWnjW}iw ~W(VqsjnrOwmx >gLCD2e8̚.5nTN{gd8u&ܩUԄ?ަ^f;vS{?C R*]lIbZ(^8!D~gx7殜o4}L㓿:WӱoCP*mTޠ[)P T'|FuLVc,6ߴ3^ܶ6rf>qrփOPNE)vDӵ3] =!<qIJ|"U`\6m`%m*feIq p|hc=RN(KxR''8!l/ 2I0!>0w+q #K̒kfJ|;(spw/y;Lp[PEDWltG[1@{w+RHC. nX[} Ԥ>.܍_gy zu]1ҡ';&khQh[v3z8.f N y_-J!WMH$_ fݶHN|Fw6K%[Mhٜ $"WL&ςW/D"OUSϝ=o!m=ó7_ZM١?qEH:Q)é"jqvT g~C ßpjC2gav)N57@ DӐI"fO7jx/כ VT.Vy42nMH1MłzεDqIP$ɑsMaBdlg2n7MW̩mj؆G[llll>P0ֳm=`;θh֕ӽ{;}$rRJoe3#WDd ;{N7tEQEUUUUF RHN)xF*I2H:Φ4oIӢ՗\Ѵ0}e˕]۷s6PWMj鲒b3vgH#a$#FWwGĩݭtp.TcLu#ǣq)tx440Ϛp*LѳDMa\o)e\|(=ӾmK^宼[*+N.Eᣭ;ځ^rJD(I[O;|Z0i"R&7SґX@Z3{نϭmQm@`JDӭ_;ȑ7ypMBTٟDD#g=^kF !r%b+=iR$j݊cv~ỨC7ؑBڛV.̄;b" t<][z}7-­|p{*QvuaIBVYN+"B8Xpvo&'*2J6sDH-ȣhuH}OVqgcccAŸ~j=%_V<[7[|/-dU0|3wErz6h&7\6A@) )knr]3R77"cggM4Tp8,Z M\,qzZzZc8!QRH H)Ù6$'H|fK̲4j3/وmlLqΏä'}.$|N1r,S_/+r]0y,O\?kN3&%~ll_<@Ƣُ]yd}mV+J#UUQcEda"(%II(QsL$`0j PH uUjP"2*<]u~/xtin 3bQ+J. M{&E 4Ew7| ϰ5֙| ׶lxQf$ϺUy3|h=eP18o9Tme, qY}}9eN$(opS_Y(pQ)@˩VH@ htowt,Re:(I !"UP*QF[XU2W:X"f5 Ƽw$W`-O^ `$Qg${D[ƉA|필0-۪j\SNUAM(+1&Pez2s[?J|oSieuCFoMyfQ$MԜg}oPeu?@`c#b0Ĉ$$uDD)e.H]J!a"O$}}EsytZr'(Q V< k@t3G˫k`Lul_ZǷW-ܿ7Ϟ~frQuYɜ[$$ڽU'^ =v]BΝW?|;}Ŏ˼%S5Er_SuχXPČ2ш{O%zNho/8EḁhW^t: ȑ#/mAÌO~#6ɕ\9c$Mc@ -# J$)BpD`$rYisOZ+*+ )M)Ln~k7/Z5X#yzRߦK[P^ٰҫ-679YϜӻz[׋}{\7zzʌu\~b@Iw5W%[zw?9F4(bpSC T_zyk+*1᧿ #+0o(Ü\ey'э #7*.aZr%L37fƍ\㵍̥͟9˫L=hkl3L}甛Gk0_^/_Z:(ZbgĎ;s.C!ؿ8XN K cjTyb3\?i\ƈi{+=2Q0" $BB RR& C Уh,(ud $IAQXD$IҔ\bG*6 &AHD=/{ gM׫Q3课o+~~rccNӿrnA"C/H`;IxQQ4Di&DZd"2ۑ !#S O)w7N+w)u@@2qtkI@ #դ$I VZ+"clJFJ::PB`bNI)d_&ݗM+!Uۉ7%0y]p`W| oj﯍š8n([C<@ӽçV.*.3LPR;KroI "ˆ$_H\1׭5MTʀJAR9 E= ci=c<@!d"Y%GT/aoH"jS I+fl`@B),lk Fo;bZ)Ye&)sGK(>'|@Fh666Ţ3աI:_]R>_/;%gMGN͕W، ӌF]=}RS՚@q')knkxR&I" zNNgHU|EQP_߹s U+X<"fйsg4TUU@ǘ^\%yFE5pBITUQ"rB8a׉sBI$eSlRW|ą$V E2úuJih2>:?o(\c^ #QJ;o=?k&5U 4,,HtLP^L[#+) f9/X#QΜH=ꈊw_7B 3Γs` 毙W)KV]~?ӑ7j-o..AÉn*[LJyĉ_˿wqkPTcZS GΝ;ӧ?JSkFF_(wT*n޳n޽7󓆞mzZϜ&W_`wq7zZ3ϼuG0cY\gÌիk 4I̢V?$D"Ad@ ЅaG \0pSZ@KIK<1a)6%QR89hǢ =T*oD, ֭c1zv߾(2XxSX޷t$zGT:}9r_pd2O^Xbpԁ{( `\cP+a+DV ($)@Bb.&5az2Цz^aL Ddb f|GAb4#"LM T$ LK+G?م n  F\y| bSǫF ]U]Yivߌ?h9jbӽ.yQV)`D_zj̙wy;lڴ?ɤ(/ri;sĉnKn[]i aHrPJBAhyL)LB2"FX5R̔d8]htn R dAȐ *<3jUt§ξRۜĊV/fEvݻdDͿ ֆ͌;kV-,ADvN@#ΪŮ|kdNrI`z:oV- 4qAaSI `׮ة46䯿fjP9 Sܥ΂J-.S.Y4S=ʫǚin=}lllgܚʫ^?f]8%njf즒!m}'7B Ew}O|/UURá_>=|:4tc~UCF@/Y6aS.CH(p8WZiS9c}]o!\{EEh"ڿ}4J߿b}qI1cswއᡖl"3z?ʣy iUЊC I(HpBr&Hx Dx ̌q't&w.*N֊@" nXTQҜOe]SSlÇTWܰtwNk};ttY|Ƙ”ꮵ֎9rvZyWTO=Ӯ`+>pCD(_Q6~#r,*ҿ8y~Qc/N}S\*t( \O=ݹv>lIJZGQ\t@Rۻ\7uTDXeʭײ mpOk6[/}e3h}_+-|\Dñ=u_7jz"ȹiw}[Tx^}.]ZVVv= ]]r9ߴŮ.wÆ .W.v\Oo~[I)`fԉgggL= F 4I0`D "DVbFTDA81D0TˆUS lP >xg)%H>֚wVP$(1*h)Ss׎}f̿򖩃Tʿ0}]C=,1vcl^*oSu "XSjLHB3kymϮZL _|=ɳV;^AD/~˹V0G^PSg?}5*`puoh̯[oKʢnMQh伻=‹ )0{}o |,Y9)souA\hGl!"2iے#'~-x`C\|YY6݌n;0AsmW5\]8+{"hmmaff644!7 \X f $C6rMEum|8vStգu,^ (TWFD( H@%ҊA HU4M4d^bK0 b `ey U(r䍖*jwV$isϱLD-%hs($ c"VFС]ᣇQ%7I ~ۂ@.-T\y7-ܻ A/ hk^S6?fiD"a L]K&phqy]%%ͷn[UG8u렬xx Q]yl8nյl C h DH#$DH&T@csi&E GYzmczw$l-GT\d}t{ E(ADm|sTwџq1mll;7T]]t[& ccrKP6)a;.r'b)2eh@" p<33D KA͆ IDATTH˝?>ƒ__M%SVzcSL}X;F#)o$uDѪDH&$%W&@D U¹ U0(@1 U ؈ uKg.pj(:# S H0P1B-;??_}g,f^AToy@UԟtD:$ n)Yxxk׬ўjښ-wNH?FS>1 F'o pؐk dUKT?rZ HZu8D " B(,R5p(((L?+c@QۗP[Z5vIbߥ΂>PE'C>DԧGuɗzF f}Mf tV[ll>\7];"MW[̊΄nr)*+ w"@OOq!\XSt=LLN *i+e5L\–VjDPhz^e t= "&嶭VHPDQJ. 4$\.édVjl,:C Wz?s,UF{"ǷJ=\w?eSdVԅӷFtGk_٧Gfzow; @OoaJI&hnVx<ΎnDqmDqxu 9hTVZq0^s 3 }CWuv5KL\8GDI8UI $sy#% |#w9]. 㷾rvcw<, 98Qƕ:7ɾs UȲ JbR )kV6,Kz{,9U6w|+/FMs/"R";;o z5Ϫ+L?8LTfc۷jnaC/"Ӗڗ8u vf}ݍM]5lt AͿ <WLһ穳1'. PZsӧ[ V.lۺ} _WDWO̩ןXpI&{_'D((t 4m;FBw;:nfcÇ8_tx"G 6 `PmUU[nݺckDw[\m۶˹`Ug ^]i?˾œ\ @"p , *{SLzD ,4EY0+V> :偦kJ.Գ"$̈[wK5zgFd\]:k<$kƿq업׫p]G8zc d2t:f̘yɌičhvU^gwxq@$*$&P ipVp]I^_@OqgD֮hcFa W.LvD,LN{~:mP Rt8B}ሑ̞5[}gڵk}ߘ@*E*LxBܼC>`AA%nfD㺺zhk@%Hgp$ 1iXvG>9.q]##7@ijѮxЫOi  dR).9IYрr87̹^qmUq趲dgRk¦ d{M`P 4׍6ñ m׎IDN&x+q^^6=1?LiP9|Ys MgS< Lkʫ XժNQ\Myu~AűؙgҝHU]Myה-_#~2نDEWrmll&.h׊=0c"b2|ؾ+HH!NW^nZf;je5?Cp"`ѻVXzyC;ovϞ=O)]}~'?yɓ?{T _}|ǐL^ݶwnƢT(.+-_lǞz)Ыk7|yCmJ`\ɘ#-N|ͺnX*DȫiyN!e0nk~[v՜+gNw;]cu.Yq8UdȅCeŌ !LRա8daIRݽD,&=1҇zx4ʘR\\ZQU{3PJJJJ FؔdDƗ+ $LXhǙ'<}[{421ID~/_:kʢRۧ?ͨLT,HH1&cmpo(׹u:jJʧUtk6-W66666Fs@qllllll&bn~,IENDB`//Export to Intella Hash and Signature Check EnScript class MainClass { DirRootClass Lister; MainClass(): Lister(LocalMachine) { } //Scriptstatus void ScriptStatus(const String &CaseName, uint opts) { StorageClass st("Export to Intella_ScriptStat_" + CaseName, opts); st.Value("Status", ScriptStat); } int ScriptStat; //End ScriptStatus //Options get Storage void OptionsGetStorage(uint opts, const String & CaseName) { StorageClass st("Export to Intella_Options_" + CaseName, opts); st.Value("OutPutPath", FullExportPath); st.Value("HashCheck", pUseHash); st.Value("SigCheck", pUseSig); } //Global Vars String FullExportPath; bool pUseSig, pUseHash; void Main () { CaseClass WorkingCase(); //Seach the Case Header foreach (CaseClass c in GlobalDataClass::CaseRoot()) { OptionsGetStorage(0,c.Name()); if (FullExportPath.GetLength() > 1) { WorkingCase = c; break; } } if (LocalMachine.PathExists(FullExportPath) && FullExportPath.GetLength() > 1) { //Go threw all entries SearchClass sc(); SearchClass::SigClass sig(); sc.Create(GlobalDataClass::FileSignatureRoot(), GlobalDataClass::FileTypeRoot()); uint EntrieCounter; forall (EntryClass e in WorkingCase.EntryRoot()){ EntrieCounter++; SystemClass::StatusMessage("signature and hash check " + EntrieCounter); if (pUseSig && pUseHash) { sc.CheckSignature (e, sig, SearchClass::CHECKADDCASE | SearchClass::CHECKSIG | SearchClass::CHECKHASH | SearchClass::CHECKCODEPAGE); } else if (pUseSig) { sc.CheckSignature (e, sig, SearchClass::CHECKADDCASE | SearchClass::CHECKSIG | SearchClass::CHECKCODEPAGE); } else { sc.CheckSignature (e, sig, SearchClass::CHECKADDCASE | SearchClass::CHECKHASH | SearchClass::CHECKCODEPAGE); } } //Set Scriptstaus for Exit ScriptStat = 1; ScriptStatus(WorkingCase.Name(),StorageClass::WRITE); //End Scriptstatus for Exit } } } class MainClass { typedef int[] IntArray; typedef EntryClass[] EntryArray; EntryArray listArr; IntArray ThreadRunArr; uint hashCount; //Global Vars String FullExportPath; bool pUseSig, pUseHash, pExpDocs, pExpPic, pExpMail, pExpOthers, pFilterKnown, pFilterDouble, pAddPhysicInfo; DateClass date; double ExportedEntries, ExportedEntriesLFileName; //Scriptstatus void ScriptStatus(const String &CaseName, uint opts) { StorageClass st("Export to Intella_ScriptStat_" + CaseName, opts); st.Value("Status", ScriptStat); } int ScriptStat; //End ScriptStatus //Options get Storage void OptionsGetStorage(uint opts, const String & Case) { StorageClass st("Export to Intella_Options_" + Case, opts); st.Value("OutPutPath", FullExportPath); st.Value("HashCheck", pUseHash); st.Value("SigCheck", pUseSig); st.Value("ExpDocs", pExpDocs); st.Value("ExpPic", pExpPic); st.Value("ExpMail", pExpMail); st.Value("ExpOthers", pExpOthers); st.Value("StartDate", date); st.Value("FilterKnwon", pFilterKnown); st.Value("FilterDouble", pFilterDouble); st.Value("AddPhysicInfo", pAddPhysicInfo); } //Conditions Storage operator void ConditionGetStorage(ConditionClass &cc_Doc,ConditionClass &cc_Pic,ConditionClass &cc_Mail,ConditionClass &cc_Others,uint opts) { StorageClass st("Export to Intella_Conditions", opts); st.Value("Condition_Docs", cc_Doc); st.Value("Condition_Pic", cc_Pic); st.Value("Condition_Mail", cc_Mail); st.Value("Condition_Others", cc_Others); } //Prefilter bool PreFilter(const EntryClass &entry) { if (entry.IsUnallocated() || entry.Name().Compare("Unused Disk Area") == 0 || entry.IsFolder() || entry.IsVolume() || entry.IsDisk() || entry.IsSparse() || entry.IsInternal() || entry.LogicalSize() == 0 || entry.PhysicalSize() == 0 ) return true; else return false; } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// class ConsumerClass: ThreadClass { EntryArray List; MainClass Main; int CountName; bool pAddPhysicInfo; String FullExportPath; CaseClass WorkingCase; ConsumerClass(int name, EntryArray list, MainClass main, bool ImppAddPhysicInfo, const String &ImpFullExportPath, CaseClass ImpWorkingCase): List = list, Main = main, CountName = name, pAddPhysicInfo = ImppAddPhysicInfo, FullExportPath = ImpFullExportPath, WorkingCase = ImpWorkingCase { } //Get Export name String GetExportName(const String &ExportPath, String EntrieFullPath, String EntrieName, const String &CaseName, const EntryClass &e) { String ExportNameTemp; int FileExistCounter = 1; //delete file name from full path EntrieFullPath = EntrieFullPath.SubString(0,EntrieFullPath.GetLength() - EntrieName.GetLength() - 1); //delete bab signs \/:*"<>| EntrieName.Replace("/", " ", 0, -1, 0); EntrieName.Replace("\\", " ", 0, -1, 0); EntrieName.Replace(":", "-", 0, -1, 0); EntrieName.Replace("*", "-", 0, -1, 0); EntrieName.Replace("\"", "-", 0, -1, 0); EntrieName.Replace("<", "-", 0, -1, 0); EntrieName.Replace(">", "-", 0, -1, 0); EntrieName.Replace("|", "-", 0, -1, 0); EntrieFullPath.Replace(":", "-", 0, -1, 0); EntrieFullPath.Replace("*", "-", 0, -1, 0); EntrieFullPath.Replace("\"", "-", 0, -1, 0); EntrieFullPath.Replace("<", "-", 0, -1, 0); EntrieFullPath.Replace(">", "-", 0, -1, 0); EntrieFullPath.Replace("|", "-", 0, -1, 0); //Add Physical Information to Entriename if (pAddPhysicInfo) { if (e.Extension().GetLength() > 0) { EntrieName = EntrieName.GetFilename() + " - " + e.StartingExtent() + "." + e.Extension(); } else { EntrieName = EntrieName + " - " + e.StartingExtent(); } } //Building export Name ExportNameTemp = ExportPath + "\\" + EntrieFullPath.SubString(CaseName.GetLength()+1,-1) + "\\" + EntrieName; //search for not existing export name while (LocalMachine.PathExists(ExportNameTemp)) { ExportNameTemp = ExportPath + "\\" + EntrieFullPath.SubString(CaseName.GetLength()+1,-1) + "\\" + FileExistCounter + "_" + EntrieName; FileExistCounter++; } return ExportNameTemp; } //Create outputfolder void CreateFolder(const String &FolderPath) { ExecuteClass creFolder(); if (!LocalMachine.PathExists(FolderPath)) { creFolder.SetApplication("cmd.exe"); creFolder.SetCommandLine("/C mkdir \"" + FolderPath + "\""); creFolder.Start(LocalMachine, 100); } } virtual void Run() { //////////////////// Create Objects for the hole runntime //////////////////////// EntryFileClass ef(); LocalFileClass lf(); String ExportName; ////////////////////////////////////////////////////////////////////////////////// while (IsRunning()) { EntryClass n; bool tester=false; synchronized { if (List.Count() > 0) { tester=true; n = List[0]; List.Delete(0,1); Main.hashCount++; } } if (tester) { //////////////////////// Do Things with the Entry n //////////////////////////// //Open entrie for export if (ef.Open(n, 0)) { //Check if export name exist ExportName = GetExportName(FullExportPath ,n.FullPath(),n.Name(),WorkingCase.Name(),n); //Check if exportpath is to long if (ExportName.GetLength() < 255) { //Create Export folder CreateFolder(ExportName.SubString(0,ExportName.GetLength()-ExportName.GetFilename().GetLength()-1)); //Export entrie if (lf.Open(ExportName, FileClass::WRITE)) { //Export Data lf.WriteBuffer(ef); //Adjust MAC Times lf.SetTimeStamps(n); lf.Close(); synchronized { Main.ExportedEntries++; } } else { Console.WriteLine("Could not export entrie:" + n.FullPath()); } } else { //Create to long file names folder if not exists CreateFolder(FullExportPath + "\\_to long paths"); //Get exportname ExportName = GetExportName(FullExportPath ,"\\_to long paths\\" + n.Name(),n.Name(),"",n); //Check if export path is still to long if (ExportName.GetLength() < 255) { //Export entrie to to long file names if (lf.Open(ExportName, FileClass::WRITE)) { lf.WriteBuffer(ef); //Adjust MAC Times lf.SetTimeStamps(n); lf.Close(); synchronized { Main.ExportedEntries++; Main.ExportedEntriesLFileName++; } } else { Console.WriteLine("Could not export entrie:" + n.FullPath()); } } else { //If exportname is still to long output to console. Console.WriteLine("Could not export entrie:" + n.FullPath()); } } //Close entrie ef.Close(); } else { Console.WriteLine("Could not export entrie:" + n.FullPath()); } /////////////////////////////////////////////////////////////////////////////// } else { break; } } synchronized { Main.ThreadRunArr[CountName]=0; } } ~ConsumerClass() {//see if there was an error in this thread String s = SystemClass::LastError(); if (s) Console.WriteLine(s); } } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////// Define WorkerThreadCount ////////////// typedef ConsumerClass[10] ThreadArray; //////////////////////////////////////////////////// MainClass(): listArr { }, ThreadRunArr { } { } void Main() { ThreadArray threads(); int i; CaseClass WorkingCase(); NameListClass HashList(); //Seach the Case Header foreach (CaseClass c in GlobalDataClass::CaseRoot()) { OptionsGetStorage(0,c.Name()); if (FullExportPath.GetLength() > 1) { WorkingCase = c; break; } } //Check if exportdirectorie is set if (LocalMachine.PathExists(FullExportPath) && FullExportPath.GetLength() > 1) { //Export Files uint opts; LocalMachine.DeleteFile(SystemClass::StoragePath() + "\\Export to Intella_Options_" + WorkingCase.Name() + ".ini", opts); //Exporting Vars String ConditionCodeString_Doc, ConditionCodeString_Pic, ConditionCodeString_Mail, ConditionCodeString_Others; ProgramClass FilterProg_Doc(), FilterProg_Pic(), FilterProg_Mail(), FilterProg_Others(); //Get Conditions and compile it ConditionClass cc_Doc(), cc_Pic(), cc_Mail(), cc_Others(); cc_Doc.SetClassName("EntryClass"); cc_Pic.SetClassName("EntryClass"); cc_Mail.SetClassName("EntryClass"); cc_Others.SetClassName("EntryClass"); ConditionGetStorage(cc_Doc, cc_Pic, cc_Mail, cc_Others, 0); //Compile Document condition cc_Doc.GetSourceCode(ConditionCodeString_Doc); FilterProg_Doc.Compile(typeof(EntryClass), ConditionCodeString_Doc); FilterProg_Doc.Constructor(); //Compile Images condition cc_Pic.GetSourceCode(ConditionCodeString_Pic); FilterProg_Pic.Compile(typeof(EntryClass), ConditionCodeString_Pic); FilterProg_Pic.Constructor(); //Compile E-mail condition cc_Mail.GetSourceCode(ConditionCodeString_Mail); FilterProg_Mail.Compile(typeof(EntryClass), ConditionCodeString_Mail); FilterProg_Mail.Constructor(); //Compile Others condition cc_Others.GetSourceCode(ConditionCodeString_Others); FilterProg_Others.Compile(typeof(EntryClass), ConditionCodeString_Others); FilterProg_Others.Constructor(); //Clear Console SystemClass::ClearConsole(); ///////////////// Get Entries to work with //////////////// uint CheckedEntries, EntriesToExport; forall (EntryClass e in WorkingCase.EntryRoot()) { //Statusbar Message SystemClass::StatusMessage("Checked entries " + CheckedEntries); //Check Prefilter if(!PreFilter(e)) { //Known Hash Check if (!(e.HashCategory().Compare("Known") == 0 && pFilterKnown) || !pFilterKnown) { //Double Hash Check HashClass hash = e.HashValue(); if (hash && !HashList.Find(hash) && pFilterDouble || !pFilterDouble || hash.GetString().GetLength() == 0) { //Add hash to list if (pFilterDouble) { new NameListClass(HashList, hash); } //Check entry in conditions if ((FilterProg_Doc.Filter(e) && pExpDocs) || (FilterProg_Pic.Filter(e) && pExpPic) || (FilterProg_Mail.Filter(e) && pExpMail) || (FilterProg_Others.Filter(e) && pExpOthers)) { EntriesToExport++; listArr.Add(e); } } } } CheckedEntries++; } //Decontrusct Filters FilterProg_Doc.Destructor(); FilterProg_Pic.Destructor(); FilterProg_Mail.Destructor(); FilterProg_Others.Destructor(); /////////////////////////////////////////////////////////// forall (ConsumerClass t in threads) { t = new ConsumerClass(i++, listArr, this,pAddPhysicInfo,FullExportPath,WorkingCase); ThreadRunArr.Add(1); } forall (ConsumerClass t in threads) t.Start(); //Wait until all Threads did close int ThreadStatusTester = 1; while (ThreadStatusTester == 1) { ThreadStatusTester = 0; synchronized { SystemClass::StatusMessage("Exported entries " + hashCount + "/" + EntriesToExport); } for (int z=0;zV .v:Cxdw.ž 뾉X"i:^hW~Z=%8z+*,̒+ldno0(75ȏҦfu^m&µ5Ab%Є P{50?-)?Wc9iVsj33+w\-߅WB`څdvQ%m?_îu+ նKi[|-NM$UW]t =&H#г/]W'l.Ha/Hm:RCAai߷rQ)[E)N{Y VoO tt>$9ŀ1*u4` -_ڕ5^Y}la!R䔯8t`n;Jj PS1d@i#&(\`xS&c)|ڢԼ"S}%KL Y~Y'?Pu+XG~]n P1Y HnWVI)gٽ;Y_$-1gY5cd,™{&sJ z)Ԟ>Cfb $KBt-bdT /ǂݶɲ`)Ǧ]BnvTK vu74b+ GR[ԁ,&_Ml4`!K^`|Cls+8)nh3 ̲+4)7,v U-G͘%M7Aȧ钍E ?"ٜ @-c7 @!M~}i{>5a!SPw@ rn9䕛| ښT/h(!ׁ˒_oFkqyxg~WVhĈg_\QA>FWh:X!10俤vl4TbAŀk &]3;%MmI~ۺI@)m9I[r֭ Uk<غXBE("v@Ja3&!U5-ͷsQ{]UY1B$Ɓ 3VH.N= :/Al2ɚ UQsU1.Lur"Ot'<pȄIIQQS>^sKYƹ ׉>7|#08Zw4`E{`D3?^>óÚg^V)MLd 2_Xyb#$3N":Vv:-\`[-M?ya"xb}%dIX܀esoQD  #I- =m;`fc0e/<Nn 7wNǸl-*sidNycB1kt.E!qrrm'=Y `x9κ*d 38h H&7պ- v/"P8L?Pz;ly}OظgB?Ѥ35[YA*(zZO`rSs # ?6uV8znpߩ/ySz+ABe6p`k l~8AHB bjx_]oKg!!Z:\W [{w|0 *?4#Mwm2&U vyp)pƪޙG^m "ff .i%Uzoz{)3W 8C qn#􎮍foaPXO)Tc2|_/߳%qabIQءbj'v+C㛪ERaYH7ʹ Y"" W`:#1F!E݀折Yy\GHۢn߮#u2W@GǁXn֤OX~|_eqFPWVڇen߱|K+'Lϯ4X4eCOWQחa֚Cj\s=hc/AcwzYLoE  6Մoi,8#}`71t଩(CkYk'xfѝBYa% Q0'&fl58=8TYFe#_a]XZ# gwy{Rۭ5TVyjT(y{;5%MR?#~4Ǹpq:.-AdU[+L k(km[mY/F |'9\Kjy'A2N/8sih R) 1Cͽ ޭTބ6oϨy*lio[fFн Qur_DPr㢃7^{ؗp ϶Iz;~Mہj6(//0|'NN°j5 @Q6I-󽋩RNNi l[FSMfre+=Q J\iqCK'b*Qgp( W .%‷*P'XF=!#Rt\=~ߍާrTd.y"HxhXWt4ٰ#BR_tGYyKs֌ !!qrV]FJY6k/pЊ_BL؋hy&飠lݡl֔o.*T`^{̪#.DB]`۶Xhtvnb RJ<kXdYAr*SO\*n冼1jH<^ʃ,4)_ncG0|7Zc˓Dt¯fTJˍq ?E Ք(3A&  sSAW vXC ć=-! 5$!@ГqԹYO3S)&rEPj$T Sqc^V,\'aCA\kDGRfh`Jyk iVxe)_b#ˣtb8nE͌p1J oIdI6sL9+gNZ t7x Z˼$>xZ,'JYBGjP83͐dF`9Qlײ/:~s9'H@0b6c[94*>_t>{M+q~!qO͎ƹu$ߦ} fjPc1Pja$}V {')&>s#"~ ̉lY<})dR `ְLv[DߠhrYbnj$k.\/4D_a1+p[?؟,(E￀ʁ@Y/lAc {nzH şV3ة!^)Pz;rhCカ aPvކkVEO6/o