From 7d0b413961beeb3c39705de35692400d003f16d2 Mon Sep 17 00:00:00 2001 From: pbsds Date: Thu, 30 Jan 2014 19:39:59 +0100 Subject: [PATCH] Moved the database to a separate file, getting ready for mondoDB support. Added a more welcoming flipnote --- DB.py | 11 ++ database/Channels/.placeholder | 0 .../74CC1F_0D376FC60C9DC_000.ppm | Bin 145772 -> 0 bytes .../74CC1F_0D3AA40F2B3A0_000.ppm | Bin 0 -> 4448 bytes .../Creators/913304C0CC74CC1F/flipnotes.dat | 2 +- database/__init__.py | 152 ++++++++++++++++++ database/new_flipnotes.dat | 2 +- hatena.py | 134 ++------------- hatenadir/ds/v2-xx/frontpage/hotmovies.ugo.py | 10 +- .../ds/v2-xx/frontpage/likedmovies.ugo.py | 10 +- hatenadir/ds/v2-xx/frontpage/newmovies.ugo.py | 10 +- hatenadir/ds/v2-xx/movie.py | 26 +-- hatenadir/ds/v2-xx/post/flipnote.post.py | 3 +- server.py | 19 ++- 14 files changed, 218 insertions(+), 161 deletions(-) create mode 100644 DB.py create mode 100644 database/Channels/.placeholder delete mode 100644 database/Creators/913304C0CC74CC1F/74CC1F_0D376FC60C9DC_000.ppm create mode 100644 database/Creators/913304C0CC74CC1F/74CC1F_0D3AA40F2B3A0_000.ppm create mode 100644 database/__init__.py diff --git a/DB.py b/DB.py new file mode 100644 index 0000000..86932bc --- /dev/null +++ b/DB.py @@ -0,0 +1,11 @@ +DB_type = "plaintext"#"plaintext" or "mondoDB" + + +if DB_type == "plaintext": + from database import Database +elif DB_type == "mondoDB":#not yet implemented + from database import Database#hue +else: + import sys + print "Unsupported database type \"%s\"" % DB_type + sys.exit() \ No newline at end of file diff --git a/database/Channels/.placeholder b/database/Channels/.placeholder new file mode 100644 index 0000000..e69de29 diff --git a/database/Creators/913304C0CC74CC1F/74CC1F_0D376FC60C9DC_000.ppm b/database/Creators/913304C0CC74CC1F/74CC1F_0D376FC60C9DC_000.ppm deleted file mode 100644 index 31a743bb66de191e4708d13dca279d7302dd8798..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 145772 zcmeFa4{#JmnkSl7El^gqgsNM@RJA0imhjNs61XMsxLXol0sf;u%r4-WT>-vWz3An{EkAOL+Dqfo*~3y%jJs27517z|5@e zxrhVd*~fS$-h0{DGdnZ4yAd1l?!{e%O6sbwGPANWvogQ@zTfv{)s8K@w!E_ofE|BF zffZma0A$|`4uE6e&&cn$w|`COn(x2<{pqZY+OLnVe}9epg^kaB{iSVRcW?8)unmC! zKIFI3=05kozn4?Y{-q6olK&aEN>Zp_|Nf^bU#37C$*(l?BPZlnnK}OM_9Qlw;;Y|R zvE;(a(vr%J_8ohj~Oqss?J?V0pGJaW35}vu~lSlVuzt8l6 z-)v9luM(3(X3JDCGd{>gPtJemfqohCn>|U9X^PAsc+wPKW%0Y${U-JQvczwO%|BU# z->LLJnc`m#ta&m8Z3F*h830d_dCI#TfLC7v;IC={h*kmc?j`^}*#Lmq3BZO@0CpCW zxn&gqLlyw0%wNu5!6%1r{r4O7`$5!~7yRq@wO|^6T7Z6cSDQKgy`7i|d$Qv))bH+i z4w*}hlTkj4fsmUfC#K8^f-nn;PtL|NXIV7l zYNzuuv16XhIVp|kap%#Z>Ev6FX#_d)TP|ja3vQbGDhSfGkP=C)r!ztC-KI#Uln4<= zd7z1eT)j<-2q{t*wIFNxZv|xSt6NL6(ByxT0_S9Lo2;}oYnlJu+o(1R(^)VFS*Q~F ztAH0sdzouF>Huky|3gP8>xF5W6j8(!MFP}JfJkT6W^q{h@|<4F(ODu5>$YUhYZ1LR zhsxrpth$P?&P!<0?v$x6H>>v#)moF)gtD@zX>9uHltNi1ie#Uq{PBZY%8KALMV`tu zwag&rh~}(_6Xk54c9W2Al8~$%D-u_~vF}%T)UwIu`C0^#$%>}0P{>3ri-$S#JZmk8 zs-c#}09RYP&&^QFJ|UEds1<}f2skAE-xQ%Bp*V8n$&vIo%0vh%>nmdUuL($sOVK3i z0Xc$9+JEstKS@IW=0I*@qCsX)IyB&(>>weCj0w2uy2pP7fMo%rJd~FqQ1jJ&4*+21 zDLA{233uwMY!(1|W`T0U1qz)%O)@N7pmNA)`qdtiBcW;7iuMsf8kN;j6h!DhnoxZ$ z$|HRh{e=nDO(QoUsc%0aMMBbpCIlDIG?hiKAXkxWv*;|66caM{tU576P}%f8Ld=Cp52D@E0ArE*RV|IcDa?`1u*O4Epr4Sn`?8);fU2D) z&tibE6cHinOQJSI5Kh90`_K~tisDy95g{&;C>olkYe8BC)EjVN4WSUA(BG|D0BS9u z9Hu7+nDylWetFU3IzQo*@nEMiQ z2mhL_7EEX4aP+&o+RW+i?ZiyjlO36WYKaW<+q)&neMxd(lH8Xh_a(`FNpfF;WtL!> zC0J$&mRW*jeji^a=S!IT66U^yxi4YvOPKo-<_`Y(Z3&jiS~93E8B~ciFk^FFGN>*Y zRF@2@OPKqTx6G2a%#ydvlDEu~x6G0&j#!zKd|)rfu(oLEMe|T@0NM6gt;$a?qpTdzl^N^^RY{q z`x559gt;$a?n^HYBX1M?{}pr3|L2+V|2HuNIRD)(^N!`;-mEKh;Qu) zVjj14%ZP`q=X}`7G@lzlENGkR(0NyD!sJK6<~#i=lG@_^VM%QZ$uSAEULL?Ibvzb~ zK+v8ZL;#bN3hz2T*}?LzHxj`xa2~(bp-6md!UqNJ`0aj`W7_6qEU2xMJ_SXZLoz8t zTe?#h%Z|_WBLTO?1CWVj?g(d^6XaUGIqlN}s5Rap2ukxclV5_ZlbwbJjvGGASN#XS z%z}pFp`Zf!pkzEXI zP+7YM=@XIV>oG=pb`ioT)>VcWkY2T((2;Di*CInM6;sMkwW>?$p(@M*^QC%hMA7>q zE|mBWDZ~iQzo#$;&L2^v$?Nah6#+FZQkZxCZ)u-Oik7Ao7i_=g!%%5H*P$b|d3b=N z+`mF1H`zuW6jC#LO(Vr2G${zgTIYJisA#YTyL2>G#gt=s$%)tq_o2wJ8u*ZcY*hRS z1sSdGF2yTS`!vnyRD0aV=v>>>AVxxKH+j;wqq&lzVUoQP)mIfGU1kfOfx5&Dx*#Jp zzRjyhYj~d{rK$RmVi>e%kzydKpATXNwWs?r#BIh1iESP}t4gE+H4K!M8%QZJX*5++ zyQ)dkDMO9As=-V3hNf~q;$i@Ke?po9@1FOO7Hy50{J`JRGm0tpXmJ!FebbrxC zg&g~>hMc=dt95mMKynYA!2S6q`WkxkXnB(MKx2u$Z}ehx-9!gbR)n@ASJc zbl3kE!dv85!MTg-h`)6C=?ej#DZN;nSF00t(Z6odSx8>v`PRE$7R!@eDNim; zjZ{9eDRYBP%Wd)0MT;OW!Z1fQjy#lvh}G5c5GfAnkmDh!QY!upb&X=Ydv~SjQt8Js;OlH0V2{ zM(P%_!Zqm;H`9N$TumLF?2J@(2en&+SE`tMCfCR#PiWK~8o1@uqt5}RdQLg&kI-w^(-uhdq^+~AVhKXOJIU47!o?f}Zb=S`4P-XaC(R)(TEjR4WccKB| zy*k$&8AACR%0(|Lb3Jd_i&e`1uEiOW_ui#lnsy{uWQicULjboOPuXseOf-S$m@bbdRKt=y>oK)%|Lfx`RXu=4A{?c z?GFM7da7oithFd}V1^HExG57xrd_3Oi&qNf z?bv_o%0!7HciwU%UvbUsidlTyT>iq>dt(#q_T7&hSit;S(?A3r(lP|822ov3L&61{#o%g*guLo8Y zt3a1uSQADnINB3XHP99dgk_=a9;bV|xiP{Ejnuk4K=|LjDIzAYt&3!S!+=bpPQNr% z6Lu!0b(!fF?dl;jq-)>2tnh{0C8uIbURgz$b67gsGeRb-ws~6N*rr8};T7)fD#e+k zvsWXS3LNW^Z~(T>(FSGP{fNgfCJmKiJ{f(MOeiX7P6Tm4Xv*YpXJo0V3R82?*^EX$6pIPUjR-W`)-Qk?U}T+jq{V zOC*{ilO+G16ANLfYrP61+|Csm)ZotRL_EU#$aMh1u|^ETQg$(dDn2?KR02%v0;N-| z=O+#wD2NC%OhkJzPa=11oirH~+xpO=@KAW$t2h-kyEs#g1E+&zhHAT=DUSC?4jn?h ztDH>4_}M<0h*3nW!=yNOEe2_yOAX|%>hjg(I_E1dTVoUZHY)veym(D zHgrXIthX+9vbOZVti8MXp}cLij+3U{MI#{~IL3z>`E#X@>Gn{d!@OlRj!N$2k)*@J z|Mhd%?TRzi>2K+!rfH$fJUCg|9oEMGNW2paSL~e|&C2E2@d4-a_d&!{ZQS2ART0uU z>T@=pp_Mv_)2s3*MWbBB!Cb1)IeB4^yhaOmIBeg(N2Lm2IY2$BcFT z0FhZO2-RGwMmCVTdiVyfVoS}nou613LE~<}&?|>6$a^`vnDfgw>F38?l2Kv)iFn@u z*#MVpc}U?Z$S+i$CcSLDt~V=}Fkc)f8ma-I4v1cT1T-hlKC;hqs<~BK)tztsw7SG-Z!5Hd}cXwQ~$2raO!O`pab2Mz2T9rd7k|yR36a@rl_-yt2UJNzrM*9sSlJUY~ zZNhHAz@Ee_r)7p$#gog6HB4cu_>vb3K!1Dp4C%5|^M4$zS6Px--H&*EtotZ-5;QEYcZ!s<&zDM5M4O};OWXg={E*~R9UNqd_UAcmk zS+}m~FO+n<|1IZxUaZLcje}$`@W}gM%T#{cqwYBW!YMf{#wz;?RsfPKRXkd*F%r7E z=e|P~B=5tfX;F8oj@x7eCM~$`^4I%hOmgk%B89Lhf$~dLs8GVB%aE}LTz3!7(HLm; ziPui~bP77&e2P>JsFvKfTpG3*XRCh5BTNf7+MblvduP{Wli@&zE`OaoTwb;268(kb z9;kWGi5O1#LET-BXnT%@Eq7>@NA*+3i0;Yh?vn*X2?9F3xn2ij_i55~6ppc+JW)iFD}nWIRU?IB9(l-w!btp$eb+L%dafTGHpOXFcd{T) ze$oO1<%sl&i6cKI^A6}9*RpD@o!!u3E;5Hk3^fAZyWe08^ru$dOEcDfD$;}15 z!PzoRZn|e2c+BaTSE5@!vzz*8g|Q-sDX(Lston2y*u+hVFP}tV2DsrB;q^PTu5z5& z^xaLLJF!6?CG}}t#TnXQXh)g+@rze#(42*{xj%Kjcv_0E7J+}4Il4fpy2$Ht{MdyW zWzxdUdOl-bzZ^v8I_i~vqhxG7in)=Gzv%o{pQMu4=qux~*B4~0h{9~A;#rm_>4HY2 zwAC$lB-PIex)g64$U(6>NZZw_e|L?>td-a8|7rgWlQL{va^vIrP6H^#)@YVo^|g5} ze44^n_!;k`IP)g7%~-j^CY5`Y?Fepi@5z_C&z@wGwoldda|S%m%nd=_lhwaf2y7c! zTaQ+`rn&Ps_3q0xi5tT?lYJ?!2Gx$QJP^xwm=3tJte&w32Fu~`zND`&p(k!S-&FWt z5E0r_AK^Bxs-`MiP5B%=mYfg^ZO#X$mCxCb!Y4ZVuqh8qC~&lp-V*QNK|z}i>9dVW zgb$CbR(8EJ4vVql7m9b0VaN!3+a(Z9&+3*}6;YL|B`En?L#pQi?$%woca_-a>KM`J z3W~UvP(NoW*%i)jy(uHWJAc4PkA#q+%tcNbzC0aA<&AmN{&a^_DK?FB?lBj`h~cpn z805vE60zsm4xSr9z|x{nwTm+3EuQ;88mwXC^o(f*I@l9I3OF)}4lc+73 zj5{}wNw>cwmv0UQVW8lU0oD(XBlh<@Me zx9O3$a*T~<)EG+b>Vx97e!!O;4x^1fvNKTRFEDEM8dX7IYaiZyDoTXeBXPj}oP6&> zM~G!TMOT%;TiY4LX<2?tOHmX6Yg-5$d@K{FK)4I_ zi!MJ4lU>~s!N(*n*lch+ul4h=qMm#O<);o-fOxbUXZ7h}oGLlPwUo_T3TAda;fHVqnNG$bCsYmI|C<9N*LYQs7wJ zy(w8yBE7r?8PBTD1UFal;4?lpWqhnw-3_~DQK6^R-UaGMJRsjA4tZJ7J9kZ)?CQpe zsh=UZHGlWUxu?jd47gFj^w3f^8G`yR8y{3DM$~y;s(4h$c7x5Twes;Ps=wJ2Gl?ZL zwQT1;Drna~*)B~Sit+CDq;aLOs_nWj9*Q+z9!Z?1THhIDv9xIg%>=|QFUOeL-sP}D z?S5bh0etYfWs+j|p9(6xd0j6NlJPfB1_;*jR8D|VrNL^Q2{#jIlqWJ<77Jj@aF(Bf z2YO_`#AN4chNPSzcpHXqRmC9M{jNjjVe=dv6P2UGK7%t}T$7o9SFY9=goer@OoTLQ zSWq25@)&}8kcgFl;DkgL#4YEtLbUQ)u58Ho**t>j;gzJHVr0sTGAhW*9T#+aR&m5O zz9V4Mx<^_@#O|5+fdS{_6$ct}#`}vSomFYID7Gpjbr%+7eZrZwc5S*O(SHOX$EVtE zja78KchqIjMWttV-`ww~eax+WtREumnTwzb{0 z#3+FXB09t>!F*f_LFY#FD174vrE^TfBS3^^$E60wX=vGGfFwtrCC~~6&6B=Z035$Z z=?;atL?9bIO!N*W!jr3Ulxw>y>k{<*G=qJ?F(-EFT6Q_XOVwk;Be7A`PNIR$`4djz z6?LduamL1pI+M{_5=3hO8C{90sv`0{!5@gY?=m9K0(To~7Ivmgg{P7#KVX@W!kic>ZAP^mowXfw# zjD`q!tYowgO5tq+(FS;fG=(bY+Mo3XNVaWhpF#=k_cwTh}5C%h(C=~u?29+bqPzM8q-HSvy`BMAPBdb_T@RRElK?xHCPS7LY>r zl|(RbnjqVU?{S8N9an`IQ1~wMxL3iehUxXHwsm+%&xE|iI5gSMyOpw^(2W4%tKOo1 zc#kgEee5FNE!B31tG}OhL}&cTRYdfR`CiN!Vl-#zR5m-aN76gHqsPaA{iIfZpJNQQ zeo^cW`*)l+T{h*eT|*frcE}~;Qnss66P{>mwwOG&J}IP2A62J?WXo-Ol8d#RI}xJb z+C15BVTN2%A?3ZaTVW*6`(84>D}GoX2kOpg&o$29l91DU;_H0@(p65BX@v-k)vMK! zgO5aA7~gk8)S=coXOB~`bt)@vv28gWj9bh^l~pKqtU+fq@h6TLuO6Hh(+<5kPN&`a z>%*Of1;4N&zyM}hZh%$cST)XxX0%c!dT`zz2U=^|I!QCFiH^9{{LPa=#o~XO$bdj! zUPKrSUb#ji45lJ4O7!T8lL1EaRGgO0(79@uGOF&aVxcNLdL;*`aOP;Yrt*5rWKeg6 zj?G!SLE+kmbs>pa7T%qZ{A-o!2f+NAS&OoIi~g3_9cb1^y{EL=$-%NosV=dsCnea= zJ@>Jx$Zov$kW=h_>rWhpnDC9{Apf;`PRBe(R(wg^uYYnDjJ7aI)_3y^Mt5Z^XK zrfa6|LymzMjWrlZRhMs2p^jR50tC!%PZJ)jhy)WLy8X*J8i9nG(<72#Ya=ipgURS( zp{{0cRJVAO9fvJ%MNk2ybHphvC;5xoY#x&#nkc?>tk2!Td zoZ$#qQ(Hp;EU`q%#wKvJk8GP$X*ttr(#|fO;69|C2~I({7)F3(t8jvgm<|Z<%FNO|*FkhpNcrt*^^bHOkx^(@<46?$WD<@2M4f@x1JJ@cb-B=3$0M#Av}zIVdvNtYnERP>xl>`M;p93eh%(`qoE=t1+E2aZ{Xlok^uKx= zD=Jl-+&yIlc%>J(Ytaih>+T_E2}{ct z>TVULa@FC_;Df?&x1q+5-*c#L4{drqwF#Lj9mdPOvR@7Rzw@41?KWmrf+0lQZm$36 z%vNl%IAX1jWdj=i&n$f?q^ecDSw*tL9em2uwTFB)3hmMaxOqUuHyQY=_ zH@yqLSZIn`soFfbSDjR*=2zfTXi{o4oCWN+c+;l*od>XqN0m9#;+a_JeClKZU7n*h zXdHN|&XKi+-q>WK`O&&_H;m!$pZX%KoQvbnxI(GKvixX$#! z&F9j?{e^qAl7g@8v&-A8I~|eEIzPI07oLjyf2o#Tjtob(uF*`?3$4gh;X4E)SvHyd z_(t6sEv_pyQ-M&)jtwIf;->x52{-vR*eq2PRzAJs`Ydi-R#qgbkmYN6LCR9OlRHsg znYNBQ*K709sppOBv1{g{c{^ikPWA7ATt2m`k$OwOxciE(yi=^5iOn&rS`}tre@W%`mnA<+(p>f^mC5j0+ht1cC5^Ua|F^X^IvOu01zuV z0wuU$-SYs0pmn#(ANxR_$I#ZD{>1%rK_|wvXkEZ1&#@nu3!%OcdxfLWyc{Lp&L=z;w0n)kIkCLMSLIm0MDliy0cEyKn0CdYz_;@ zJ|(7fhbW(J*BO=$JoQ3?^ zB33cq_Bl>DZSN~gh|G{8>OM9Dgoe1}T%wM6nlX&~MBfPb@hE^wY7#+H4WP7l9S>S*IS z@>lT=JjxyQYbq0SeEdmw;(Pk^N9+^<9tInA>+u$e_mv*9(^d*muRTPexRLuG4HWtezOi*phG(FloQawE!Hiec`X-QJ`(7D_0c{f%_QlQSoqF8GB;Z-%Il+??5$`WkmwyDLB-L--_tAq zM!haGdnRGU=Rn}SB?GYZxo60yFx9MKXWc`apH@3aM4|vZz9@uGY$o?h ztv!i$oQgt39iBw>k9YzcF>jOExe@bF%PNzOnxj&nvn@_FeL|!eN7+3UUvjcgNDi{h zD@0^Kfh|2`1`a?ZR^LVNeUiCTA7Ic^8;IFCxP?rEi2?)MT8Wcb{b&*Pp{{Tu&A++Zc5@*R|{+^R%oXH^;mF5u_ zoRR%K(vEBW7>Nx@AQHa~=+MUmT#&g=tLP=-?AYvisx(^|-PC;j~s}SxYnd3n1Fx5sZ zYLeJ6ji~n>nH#^wkQ)>KfasQ9(3Tj%$Z}*3@Sk%Eawr!C(wsz|B1j6@xq?WdQr$4u zc3Xy6blt_^Jt9|Z$|{~YCybnH0idgU?*1?Z#xbI0NVNupaLH;ztA z5P`O^UOx}~ny~jKth&$p1D>iOK^S#STO8)>Lc+@K*o*1|v9;$eNJ8Bk()9jo6xO&s zs@nRABRYjO;=mqC%zl7HA#y`w8iM)Bk)-6I1wX{5v!M?=H~@$$RH*` zMbpPzY0fy9kt>AL9_vt80(1n%kd-5fH-3|;_<0LEMd?T$A=80V05aV_C=VW%!GoDLMqxswkqVVq`>IlI&%8@bx ziQWP=$NL_geDd={(cqN21!5QT@9dQgDnZm}L*g%qafWFbhiRds<9Xb@{3F^6#L2|a zpBkNLHnLe~X0zGFq$4p64k8Q^zp!hxFC&*v0+D@!Z zMdszT3#6+SFw>fCkTOq;xnZAqC>eKq@ZYOiD}s#w#6iPR9Sc;=?A$&KzyRv*7M{M5 zo~g6ZEA+SN9@BPpoH$nPCh%E*zm4^}&Q3&pRcH2uF9uKXZ(vP{(Z|!W>k8$aJnA21 z0+mIlb$eHRNUBSXmBst3QUga~$P8BwPvm$@%N_@gN1EfBd$lSWgEqwPi)sGY+Qu?} z{1T!z>`6dr)LyK(#4!ug-Ns%CNOaYqm~=&mAGOWvspLzmG1lJ|U5w}Y*&uIU?S*f} zfZzQ_ic2L|{y_}jn_ypB?A283MD=!T8`FT&YLv25Z#QE3`DA3Ho}G)atwZxXtcvfz z;gUR1dFmo$qDRwFZpybiM=QKSy<~WPDRHxvE0__YXtBDR{h>8MmmQATr$HURArz6| zbHy+!+&7hl>bq}sDN+&ECLYOEN^3e05teZ-@wYr$Vcqpk_oq}L22FP@ zE?brBMk@VuaYa1#Iftz^{#zaTU>QtU2S+^T%R_4)Ns&FgC-I)d2(5l8VrXqP8=D&a zT92cbP7g`EfSDgj5h(77j!cJn!hBQuKo$8|aA>q3r?%VNu{O?qgV`6EOxc!gC#Jr$ z;Uj*><N*1Y)SXiF0@hj&w=_mT!-3~F908LqnM@g@*iF#fq!k*N+skFL!q&w$q$#t}WFF7}T!W}(g)3(I#ifGgyFWDWg z-h6iBdByd?73JJ2LDk<-d1H2;V6ovbVKh=TZM`<@Ggb*kXH_g#{+T^7xoNd!Z%#zJ zARWiY6`=bi=5UdJ(V5iSiP>tNHV-k?TAM1<-7D7{`DSG5>vzPW zJN=fvNRnN!)vH@3&Ci`Q8UC|&Ni1^@FpCZ)=<0cw?}#0o2B9P@i~T893+AZ$biujn z&zU>m+<+%0Z5C$HqU0p3?Z+O%Ux<_0EsNzgL2h9@)u#9uZm>RvT#=RC`Vo_j(??wo z3zf&M!xBhNY!4N5J3n_sEe_BHG~2Vimbi-#HeQ}?eyAz&NcB9$$GWO1ciEM}I*D6X zE~@&iVD+hMdp^<7q^Eo?Y9!aK1`H<`c!Y`;L%tah+ZpMu_yFP%p1f%?^G~hTfFM_v z1*N|XTXof<#vg>dKj#(2&}SOD{VV%u2b<;g4RZTqmYV^-4jV~*tZ2BmJU;7)RUGZ^ zuxY_&zQki6tKj@>clh!bC#AmdB)(=@9ZwPDl>(LSU>7LuZ$!Ejsmz)DYw>Twb4IsN z7+u(OV+-%~&|N0`(TYM4js?2^^X)|4uTYFJ;wfZ%HSh+cxss<2K~OPy0x8z=lzu+E zm>Xw@;hckO$X-uA@F1jjAjdSs*2M&u~YeD4} zx9i33;1vcQT9KYq9-2c5X7Zv(*>S+!X%TnUiB{^Vlo-w#zB?C7(a5= z0@1RqWT2GanDvZgGgAJ(bg%v$V=BZXty+KEkcXmHmM*K{tS|Ni{UIgyXW?Px3x7Ic zz5^h)Zs{3Emkb6+$oC7- zc`7@emh+p4EAAKZsXL+GsrdI(<~PZFG+Oz}w#tIet@btvPyysj=bf6mlR$mMoR%(0 zqOPr$qay{>PS5TOoXY#lKC~s6^YKe%aV0kM^fM62rWQSmAO=md#2|0@hjI;n{PN1a zu&(0f?w};swxv2b;BK2C_GHMuFR-@I^iZMBs^LE)qlvP#l72ur>)#{RFeN@zq_C4W z3i60#p*5RjC|O#QS&;G^zfa8gED>J}7@OJHrxFJw0w}>i-SL|==3D|1S)r2bDpwdi z`7{wM)j+dfhJo7lq!rm+UV?tR%-6D4V<8?k^&#PA>Xp?h713IhfHKatBKbDr529aa zOdaf)Bd!rl{{^}TFin+J)0g{#n;Pa)=knVk%!+AA>}Mw{+KlER7M7G-Zxd&Nc#9<` zRkJ{Ciz~MS4Tr+~lv@zHij%xE_9wXjhpFA^fTE#>>@s~`^KZ(P!hma^0CxdfdzFZR zmcY7`L@-Jn>yB}X?~NM(hY;U|se~dv#|XJbMcX*mEB0#d^N`HJ1JxR1C|@tXF)^Ie z5{pIzN2%$Z)AiCmd!OnEZ>>GwsZ8Uh2(3I~+#~MON@8tSbv)s-XZyoYTG4sUD!|@- z$^C|N*x6YXXOe5z^<3~n@XGg0-IYpP2KY9rhCFI~0zX%sJU6cVWr)_H!~F}+YzYZt zRR(<;W^a%TS8{D(j161=GA$v@S3Yb=TRL1D%jdN3>8lF!KbSVvn$J!lfBQwiP_}*X zy^PQ_e6~L9`6NYIul9CNiRDoJN)BsgiKETT&vpQ`cy4BYndZ9SfBa(O2y7?ebA=5%%3j9 zrcdp&8x!|g+fc2}IQcHyq{4%LdoD7b&szQ(XqIwaMIo)%}5#vr@U0 zvy1Id6QxwE_zn)Q)y}8;SGs3T`JB={#@NM+xy~B}<~LbuaO?T>vVCfNPTFZfm$B#T zRIiyEp+4|uwa!ngbbOSyaF){KX;fJ;_#HpDGkBhF=g_&HosO(`ikJf5Y>yy6dwViQZ5&yI zcJaqC&Efn(imPl3%qdQAHMH7cUmj;!{*~^Y^{|xp7V8~GjU)vg^ia#(sq3?Jb9gSw zTQ1B8>cC(O`TYz0UaFoqw>b)@zQb)nrUkGQ-AY4XsJ6c-k%eCfPKx>2#7ZPBz}H-p zH&}apY_iyGxBntd->Nv3E-e|n9ew2>lMD&=hUA_-7HX;|Z696znYNqbV?PAM$fw)6 z9}e)*t-8U+o^lt@d7N!kVeT7c#x=0rIibyuTCU&^Qpbgu)$V*FtZgrHJcx2mU%$ri z>A@U*UzH?ud)^Qhp&tmhg6zzwY}9)H)>p1J)e}cePfKbvH0=4tghS|0t~%#`Onfvb zL0enh^?WD{V+Gq&okHQV&=>)-wy62Vew3ZA=uJs-to_c2`!;93Wi3`6{*m&dtV!Kg z%#2#@I}@vH5-NNw=jhO%%q~JgazF`s5M28yUkV zE+X>Yl z(!7tOy6P1Fu7oLJJNA5&&C)M=VY;AuP?BQ0`2qVgMcGn_?s;tXGZW#~Q~~BJyQ0xN znfEY4uX~M3O?CLMT|DB~(qZ(v;?4oej*$Bci`ef(mL`7;WS=pWlj2e^A zd|@#J$#uzjy*Fm5=985Zf8yYiwc_&4h~J2oH>Cb&Prz z+qLD5Hbn;6g8AGa|FHX%PL(a%^mhV*XEqZu%d0}KS61fE8d5|47 zn^#CJMiBBHhvRajvVY@-0tQX)$rZcxo{QUsUXZvbB-5rtKbDCvQT=!T?10CHgW;0E zwl^i#bv>&O*~Eu*5Ay4Q_W`AJ)CMeR1-33`>Ac*YLX)xd(P5Cb>-Iio&eJ`%9l}~= z$b-4CI`D)ib|bR+AxtBo z>aL{MtlyC^#kQcQ3nTKjD1pNiORS@qtcBo-R9&POJ|sPBq>cC~Lv&otN63CG$9_tJ zmOKJr=Uyl`Y=PW&1w>rQ7R38jsv=Z*vsTag2GlFMvvVSffyazMA#z{zC;PP0HIz^_ zu+vNy0c@c!W6jZgZ|Rc`Oylv5fwW?Bs>+Ug#h8jRq$^xo<;W~MEPH3p&_)XzB{ zdLyf5Jq$%xP5hKBGpW~oGb~l4r#Fpl4%4M*-2!l7!Lk1_0YzN7C4a3cNIT^CTiK?I z+`f-Hh!@e`%J1Y0GI!YfanR%4uk1P_d4U>wyL)-VZ9z)?852%S4+mRD0yD%8`bdtS z6St{Z+vDoScaz=6eY-maA_5e&mh}(}Yh4aON%;Zue+9t)ippH>&V4#tlw9=9jM%i}v^M7FH+%4y z%IvMe6Z-AvokBmpVc%dI_sqI|--tyQ1_Bj1cwV|n{L7N22b~H!=VrT9RO8t&s>{W7 zg#m81fiFsdn_l_bG4_EyyvfFY!Qb`qj(Ep>r=N>&e6zy{2$uEHsnHGjn zu9x4tn+*(8w%69^I83jy=}e5zX2NE{o~_NXIZYGtHKzDD;&_6=`JK6l+Eu0WVrG>s zmg@(r1my3r4S^W|oo5|se4#n&%()}&R~;;4KI+FgPWVkhJLiwTY|~?Ld0kaB{tyf? zIs*ciq-zeQbz*#SN<1pd#FOrI7R0ZhU1hv^ai&v%3KJLtVPWdf*+>!y_DlWqNUw+t z%q5u?AV=53sy3oO2T`v!R}_HM`yjB@d2T{J8tzO<&r5x+&HXuPSfCQLQSk zB$q4(;#a<^m{YiG4<3$)gQDX9tYSvistPyH4q>sVX?TD*54^&tv3TyPa#$E<3ffs) z!aKIZU{uFj9G;9FoAZ%n1N$ShHzfZi_TptpeOUnh^YDZd*doQHM_7M+ue{|{5#BK( zB!^>vOi&cXe_-T9oV|RM8c8H;jtSyN({O7eSx}J5b{hIMZ#GhM1^bwE11no3ZZ2Ke zB6|{_sm+j2u+mY45}~?H>}tZFQrKG+P+ER zg_~WTKn0ffVT?CbyvL~y?$B*2RDoNsNd_Ob|4qQiS6=Cpu!Zehk43}}H4-a?_EU!< zVh4c;g!G}00*GVVP7!;yx^<0=IaK;gAV$YmZN^H9xE{m=UHCcB9Zc;a9V5#sV>H7H z$A*0&(f_U0nh}VR)qhGrA1c#vKqU5Xr|S6!3OjIH%wq6LOQOWjxmtVWxU3V*SdqfS zc+JY_QdLq2S}xVcz=ZEoy~3*$Su%)G_>z;@YOh{(DFD1XQe{}}qbrMno4c9SBdR;& z?vpT%&zJOZ26vi1<$?C{Wo(z5&)M3&$r9IYmFou+&Pd)!I1ztlvl>ato<=v2=%c1x zLgbfJzi(vZj68Sr8q{#0UtzdFa_kmo|3f@JmuT|VhNr^qImm!gGp@AVC+k*eFxPPKI%RtId{e)wz5XBu1?%hMW4{DSA0$1z8;Mr%QKTG9F7$| zV0dg|tjD1|{(PIuE=Fq`ysRgQUweQpMWOf=OOF0G)BV-NDKyg0JE}uhkHwd9ym(NJ z`0EZ<4HAfrNRFW!b915B&Wx+!XypeJ5#lqp;G=xCyHTm5i5ZPgG@H}M7YWAW*cbDSH=FA&)I*C?ir8nQ+m`>(8;PpY5wkv{;_@Gp1u0%je?9cz znLi=W3cg}01Z-li=|MP&ZH2_o4f*eMZFdTAWEoF`aZB6OTeKuL#4uRc+Yfg!qJoHdWI2V5oBYThv|b0fhchAjncO$USG8x zdRT49fy+X;`P3C@-d@uUCd0Oxe*iIl2OlKuzxLwS{xIyosRqU^z1!@+qs429`M!t9 z3Up`Rgs$=H@SvCV%b}9y$ceCVy?z{Uk7j^T!7re_+;F3QNF4|k`YTX2vxPW_E_0-~ z+~K$RiMsV~6RTx@_YlKV6m!46^cK@6Xwf0E?0~G#tp2vWD1~I24)h;bw)blze!(@Ssm|-sj{|?Ips*fjgAxeB z`VAv3$Qjo!R8;>#BC5yRjjK_t6d7+j>N$0Eym>d!Q)Wj^=lm#dGvXJwt_f?p)P|#3 zQ1mNfSwQtO(pK;4JF(={p~gim!m`>JsG=MfxjoH@_-hu~BNNQEnp0&LyULW_nATi) z!ROmyR^O8As>_mg>3Dp`@P3z0El|VpY57u%3mOxsnWv^TGW&W;Z~=V~+&cWri>HL&uYSMJ z!~5IG0VQUxpCX8y0>Xte@pxmf`t#EiKA^rgjiM$8L%)*x)YDTM{Q;%%yFyyGOAN;t z%|9u5b}pxyK-Ca%7f6t2B5^h}{Q7O1%QpkfY^xSy(+K%2j5wt6WOA{}>ZBIpmPkm8NE)=g? zb$czh1P@+U!b++zJpfO`HJEAt^OFEX5{J?hIIh9PgYxF)|g&+EYxoEdobfSyQaM7uEP?Mtonikbrz66QVs5Jb$>*y7*T01 zHviusSTz+_Y-hC9Zd%$kzQI+0FD4glR*Q^8R{f1oWH>hYhw3tIr=Rz{g~_G*kN!HL zF`A!9%COtArbYnX3WZH4Py|l+DQjnDvTu|1DHz;T9laD*g*a#&YY+myhLYWV;YzyD zEI%-snML8V21p3z;9YP)*V5X>#1G+ce1@CXxW@PL=b+0S_HtN`fWN7-vvZJT-`_H9 z@DAibLHn(9^P;Osk4&;9yWbyOC!*3p;4~m7qK0)E2R#%;tR8IajvDMYPIqb?5hP;S zxEWWa{m!!S>1A_)fL<3Qz9j6*qw*67$NiFv2<8H8u`dFDbPtXAvoF%DPv`UJscGd% zLd)0rkxLh;*26BJDtl`a(kO18|EZ@Q8i8 zL>*N%0=}KZS5T}1ZKKVN-DZykpA@;bORC&T1{wX&G?^fmtE*0lqHl~oB{1oXaXUr>$Ie1;A#F2BPoa4zPs938Q5 z4w5GTrpnGZ$aj;j?)6peyae;)c5^kCxF_*Pjj$LWAAY&E;95Gy9D{NY zYau1^pjRi*V(I}kx78AQgw1Nl>$~{JY8tfK5}oM{Fpaz+16X8Dr); z!FYoCfkl1tjHyq*=qd)ZAA2u|c9 z)it9L@L13?#r>@uF~F}73jDXq?jTrizaRyV7?^Z%0!o=*V&{~5jjb@Po25&tKzHPM z%v6XYeM<~N*Ge<986$wyY+M2mWB8=-Fs{+Vn=VRXk}T#~!)nB@eb2PU2wtTUABtVz z*>-3$mH^jr_JU;Joak}h^qGt0d<5ZihRlAdn=!adB{iFQl3~F&N5L9M*k&)_!qtk0 zy~30?u$+AhL00K^Z&S4vk-jA8>0VWwRJ;D>_ZZn%0^3}~?blLlgW)aF^pWBQE*fP$Z6oK*G^x6mhzt|F@$pT=dolb^|l7>p_&*D6BwW%5UzjC@eF z7>oJ2%5H1&mmC^vU1tt3czLKH^oC+SUmh$8gK&5|p?^tjShZJH4C4)QJ7MvRbKg}3 zce8$ed3Ux#8}zNVf{j+LqNz!hp4&}?}?FxnP84JH_Ir?7p7<74mY=ZRI0b^Bj`DEI>>)L_0y>_Wl6 z55i{2xw~6<2J%$qck>|Qt8CEwZW-yObh``@YD_7}-(qn458$N60c~U8C1zqjxnvt- zcf-AGNcmU;xz^5pqlJ9^VL{=Bf#PQoIZohxlQTruaDZI7HqdVc*JTt*`~qX4M9CAD z1qYWao-I~w94SW>K`?{&6XM?)dT+kEC-l0uv?k9 zuto&Ia#o11H*aTZ@wmIdT?XuMdHuq+fYJ5F>noGaF1ncklYC=-PH>44^`)BI2f){&ZhgR?l^RZ7Um(#GfmVss?2 z@2rG;$MYM5tfTBIhzECgduTSlVOb3@SJlTTxR5{NM6BNQ3xZY~uWkcVY~i?yMz!C* zp6;1)y}HY19?aIiXT}u_=&LO^ucD6~XnkXwaQ7JcD6v z1%hP0;Ik0bFEakvDe_A;an=gSlfB`(*iSZbi3MFBaU}aG!&f$*?&6}3qoS5Qk;TaPyN9DmJhES(N==_M2Q`IR zJa`0h#@n(s9QDEDwx4vuql>{MhCJsOT99Geug4{PavP300H3%u-yt-dONXJzdxg2A z531=xqLEDfo?qZ7u=Q+d7fkz3_a@=OXo4N74qdi<;)fb9^0MvS3tB1eVNPqn-nS-Y zD6V?yCBa!C%PZgfguYQJk2v8@-*ChbjA%DzFHhSC@>bcjA!=^E9m(9Wk}v!EB4)k# z>TEu2<_2SufTRj^ze`N>GTH8f0zR^wYG!+@M)%gt`_9Sw66T$A;XxkyHAJcrPTKWb zJdCSBaHg6`{7p*j%O}bQQ3$WvlH>Sew*8<(G`$a@t-L~pFZ%v17{$T42Dm4IptjnQ z0Mcu-c}RDrEpMbT72T79row2?Wyq|WaTRp>XNb*O8}qtGSfwOH4*&RhbT9?G?rW#2 z*H_?7;3NY%4zZX@i#mZy!w*7bJ%l_gm}?3lIdj8lX?Y3O;x6T=+ur*vKH#Q9e@Mts z4P=Q;v)wHx%>Zf!PB+&u zr$tP?abHuIqL3Z+I>Q!v-r5%s7)&>*O%f1|MsQ&aH8pCANdA4Ibvv(xH#SioV06L?d6ELdXO~*Wm~0eX2Rrt_=`gInJH*XODr!os4Th$)e&Ez=<~g9yaK{^ zK{m2+Jl3^q<~7d8%Fh$B+&77`whW8Or8}d4Lpz>_Sjt&)C=Ylyhlxs zVGuIku90jNrN#|7e*@y|?*Z|NPq;$WxK*TJ^a!QxQ#uK}@<^{njAF#hN`~7K9_YFi zUEv#etDh|b13=%0m3g*xnnZSN4yo6hk+lzkWxRc2tYbeA@Qj1bi?$7(^`NQ;hM29!%GwiQyb|2EL5(tYq~e#O$;;Ute>pqAS+3BjS9?$3 zEg-0|wqkTXJRF3-L5L5OJKUIsTR)K{LPtxD+fXaBTXV9*0ZA}47X6Mn!^7tkWi0#( zOqBZHL>-kUS3qIq7-oCK{^BEP9cnwi6o6p){-a-lJ(LC>26CrBSNT zAS8&Ha_$7`uVZ#P%wT<==190K`zSaizM|*uq$Vxqle}PKf9Z62(P43~=?Hs)Pbpog z^!fB1{-(QIajj~s`zv>JYKk$EiGU+NgOS9S>8WTC{_=&K0y4wXp7_pfI%lO4;J0CW zsl@z3DpU2(>Dc9LVoXU4cNKMdF{9DDQN7JLQJ^zZ^+$eDN(hS!mmfk5>mSt+$A3bW z`Wgh+p};#lo0A7tbGgCCNN$BmCJ62|_$PqLw$~HcD`}06qP6Td$!SaGy3Nx$U;UxR$wrm55pXBgc6E1x@Mf@$2V9s2TG*X$w_?$-IGp8 z&de8|!vtd8Q%a5~CsI@yeostRIB7WxA9YbAO>2*V9xjc)h8x;hkflluVE&cSr*OfdKOvUxs;B-6}HiTSuHFZexg;4d+X7}<*g zPtGM3B0Bw;e})BJydX;ZtcQ(7LWD1M{a>KjyX}F(3 zlVxeBbmEtmk|cfFN${_$N5oOn*k<{_RTg+;9><%R4X`=t4s6}azCFsaq5LS4YMo)Y z7kCgfa``f~-&Lx!jkm)rX6cwJ82$B($*Q`Qvlhx}@@2qYy+WV5Ed?E%X{}r-Wn3}moUf)LI>jZ6u8}phHcH{_JM*kZl zBayeHNppfOtyvf9H@ldl7~)U;!a$iv8N|Nf?c^fFR~{qK!3nqxbr^4wQ@;!n%txhX zs^nHBXpVZdR7c?i#c#-_)nta>1$4vS|u-d zp+n!xGVg}LC+=rz-rwtEb=*cfILm9N_i_hUlES1HVIIS`VmM=+h+W;<_ZBLO`4C3f z{yD*BccRqOGt&txY@1F;QX8wtr@)*BC3f7L(|nT$vn$Y33FJJ})3J0Xjj0etjRrk7 z7KT=DGWM$;9F>u{@S=Zj(f`5jvtB&J?Cme^PGm*z4L1CKC z7#%&13q^N80*ZT{&Py_Bdd9v0%@nBgjhDB&SZ%M;R;I#szEF4>$DT+p*lr3$S0Z}X zaT?;%#v@iu+XE&+6FYK=KY?o6QZ4^qj-49E#D#uJ>pz?pB){{oqRjePge8UQ|A;Eh z^8l2y*?!+|7VQlq+KAZL!&ZYv)ckr6hh=r;127)*RV(xbiESR~Gsoi2{mTvO|>A)Wk zbYTZw8UGr-9|zP3f*Ps=l<-qb&)C18%S`$kq=vN>2Bk__HUF~nl$DRqiobPgLe|Xekuv4md3HjZ}rB@1cvSO+V4p^iVc1#jdYymr6@FC%*EGBJi}_M z!T+4&Ou|N5pu2muoc0XA>JM<6Rl9jZn3pRIke{?2OkCBkW1J%x{GE3CBK`=98Xb%G zgc{VVQJAsA)f$JfH(m6pXEJ`86ULadGV^tXL^)=!CL2yUcEpBPTA3qo%&)YbgR=aH z;Qjy#rovCFs6D3Mi2Po|j-#>gj2o_3xap@BwT?VBlE4beVWw|l57cy!2uLX9^@hbK zWiS*oJW-Osb~WC0uhIZf1=?YXZTA4Wc?_<_jM8&{wjHu$9x~+&t|A1nTTXqwW6cNQ z&g$mxfSESjfjnn;vU#&8i3@cDwBxx>!uaa67{B%&RL}pQLerY<;RPkJ7ss1^jPOkf zdnUI*b_5ChFT-Z$Xn73J29H7eT;GNDm4I9G$6k?&A;FLR5B*g=VZ&9J40)|%{X{8n zoJ~#m4w6vpN?6Yv9ZhsAX=@5?xY=J87he*~E`f)@Lu%wVWZED{)IC~YCiUmDWci|R z{Pp-jg41e$?z7wKDsPxaOPs=p^0CJyXlV;{ZPPQYE`+ub2=w5rQgO9ZHK0a@{ z-co7T_@A4J3h>l2!%<*V=^d^qNH}JI}gU36>>ht@|Ce#L=w5X9x zKRtx2Vh{7o5QOd51-Q%kx>}3}?7y-ek^D@9oeulPI}6ox@JxL2WAZInnjSByr=7Wr z3HYQBvld@h*((nAk`Og+=b42i9>EU;my~ETRS5}SfDY>+Zg^d$6hEVW-3-iC4b7}1 zSW<-sT#9?aqd@O$yu%4Y^EW_F28X7zDgXs8>wYR)slDXHhZ|T5fX2U#ae}undn*wp zg1rSxq7|&8$NPFuJ0SwNk4>b*J*m}P2Cg=5ev!e#wI>A-&=q-6Jll)07t05p%jjhA zqu>WTC)rLxPR#Z*)OH-!Sc^s+1DBJr6>e;FC>6Y&fC|+2Zb#|yS~qy8Hd3iFlq8np z9}Z0-lWIAk2Uzduvf@?PkxI?h<|@qX%R^`BGlt-NV(@%=lfrRyA>ck3H=$)a_nV4p z!QglS#wJ3AFG9&2W4E? zGv5alS@Zbhn!<)j_^V7}IBt)9YI}lCls3#XqqL3|-fd zGXW<$Xd0(vYV;&EHM}JlbKg6sOj+MEl7mUhnVn>RT+SlU z)%c~h(X7@~+%F3pHjb+SU-NZ><0_TEK}ZyZv=;KBt3;Rk$k zwQH^ya*PpY8S#YJ3(kNX-BI^)3gYl$fO>2{6Ger}XMFZR9JW7KLBO6SZ2~jYR~|-h z+EUi~GU{K2T=SE9o4rn`v>z-iAiUBlGtnv4#SUUhz{@%W6 zgi&9(6bAf&N@X0Xg<{vYr#Qy6m7({K`TgS;s=xGmKdVi`Q?>w}`EQmiDu5fatmVhN zU@U88U&EG}Y`DNbTp#(?JZ=?yrT;Nfy%;AaVjWYbnXlc?BtoOJis^2%P1>mD0veQ; zIVlPTwXq-6u-2wPA1P0cVFP^K-|>N}T!$xN77Q=rYJG3b&ib%)&zMEW?Sl%Xs?mBV zp=@=aA1=y%>0Ivf-uppWF;frEOW+?2d=O_e%jWWP&_Slu(}=ez z#$jrgo|cRL9nu45AZdo+dervtSu2g#%f6z>9%GfU_6I~S>jmWpbQOy3RGIobW#-(X#gg{=Nohmt6;v${Y(L)@T@pIcjkwX>Q$jEH_#u7cuc0M zd*HFKksJLi+Q$aJ4GBTOpIKEUKfj6WYZ1A>O~*QFcsf1-PH&OYqCa_^kM)SflCL3c zFUrlCh~D?dud!d3L`Bqgl{7$GgkmA`eiTQqO2(Up{R}$!-^yT$s*{;lhzfkCXgWl(WYXKd+gpFb>n-L zVrQU*4T!q5^~!v3K@b*#=Vypic&Ccj9Ngy3cdILKyc2~WBzczWE$B`e?h1^>Jdil+ zx>#j5H}`3`>YFV#zqhl@JXQ7_h4kgon~CVRVW*!b}?G*pb01{|vrbmO=r3j7T~ zm@P>r)l$%TwRODFgT~r&D);Ue1c)+yc!=*=QR6W$4|2iF!z!TefZFrPZ-!Ca(g{P{ zZ#WD9T|>#>WIu$aewAhL;Ufqg1csYkM;b+y%z0u!vPb)^n5E*5Bo7}ffFbis1a02V z(=Ki8mXa#?G)j(Er#^suueR=op&5uT|2Yq#QXajY2#x!-n_fu)Sij9u&RfPi8P8jG z6>*>|G+Uw*qN(6L^@y5DP7jf~ko5i&?j zCmS$3YTbch-2hWC2i)i*Dt?r9d$nzk|iEcKIcJ}li*57KFFIzH^5 z{b6)IZVzko?ZeDj6!o>v#zCTKXJ%<87o(oh&td{tX=9$O%1$!~j~MfzH-gdmM7Z>5 z0!~~~$$_)>7xFCXMe8zs*#a6jKVe|^tNhVqDn~ct{udCwffO?<_JvlhP#HZ;)B_&} zqlHje{dCc!ryBuc>%jUHU3b9-RyA%{Yf#yr8q^J__lm)QsEJCsokwfa0oiRip<{Jy z15)PrQ5CDpw!mqSX&pl7tWK&Y+I6CK+)=j68Sa+}{jVT?;$MLC1R7+O{dgNL8*f>o z$DNK537>u6o@M5R_4=k1u!MZ?=E&xx7C+`ieYxg&8UTvMu1=w~TXKu(+{*>Lb)lE_ zI;-b$fy|qp4wi{c$$4kQlQB)U30)DzaIgF(7l9XPqiaA12`P`7gWlg(apGr1ZbypVu6bKcQiS2Wlt)?#M?3j4H#bmEvd!*LPN`#P2cHmq!oVc z6hu-vjRB=<649p;tt~;n@^8eiSf>iES`QoSWsL4?Wx_ zE|~`j&`;Ho3>QJP0GIMr0@Nmv!=GA{<-uGpBT`$I8Sw%Rykds(ae&$)5JJBL*(6Ci zLI7S*L&`;n*hB~$afbP+nlJgf6e&kiXI1{x>uMrv76dk{I65^jUcp0RehFbn7#<$-HaMmV}!B<|DaPtl&AVLUluGTTZzO?0I|HZ*3j_UIIG*LfBQP5K7D&+^ z`%>0-_At-PF-#X-XOF82d|QxW@3VvYBkuGxIM)V44@5?G{i19(!G)X6F5#}2qK-7= z(x#_P2(=WElGIC$=@l_f1uHKqGna$Msbm(rTZ^>h)M)X$wT;H`#8vv~?=8395Tm>*|5!JeFSBH|BmCt=p1SolwLr!KH5iLDp?U$cYR@Nq7pzwMPG zrnGtLlZ!iN#V$$lhby0Y)RXl(K&%e6Wi*;>Yd6HcG?DEpXY#Q9tHvIN2JwvBa6)ks zqv7-HNi?!J!xCZBsnN58@p`~DIm;YL+ss|*(DhPMGc=6>5ncUypgUd)*Kg(+>l0(J zs>^a)hqHwU2mxB^b<27|%Nn=K8mkJNBL*9V4mMVZU^uGD!motd`j`n?F2+9hCFgQJ zG9didkX-~sU2bN}io*xa;fZzFH8s^d)#+ryt7jUNNL)Lp-~5A-!Bw_=CmQDt7jP3> zVSN1{1^^5JlviEx|mxD{X(ux9dF`RI4i1qk^l@c~Aml_I`;)cQ;f!c!3OVRreLZ)w`GVxmHMe{b^Y#P$By0 zBmE*+0`APxci-c@Kp2~>-%Y+MEhb%c<@;Vp3v4;)T#~ajP!pAQeB+@0-T_7xhj-78 zRbnt!UGMxBd8YE!DTe=mB2IwXZpmY%whb@_k=o1luAk(p=A2W+pYU`Wr!^21ift1p zi#~AFZ!9^Npr2xrbQy|b@zVu7#TYlL4a7#<8^gL_LFmx5DI2>2WR2p7Q9Wxf+HjBM zs=;Hv2s^}CrJd8u0|EpT{U8M6kgg*)k!ZwT^~J7@K|2RFCch2>3BT^)92^6+MbE-% zihW4~f2QtA_PX2?Jr6i*&)p{!uu?lXK2IImO4U3;0IbHiY2JbxjGiqjWd?1+){BDM zy%B0%u@k5ZHGiNYHTD79r&M6p@mV6r?y3*Onr_mN%Q^vm1yNfxGkyaQVv9b+qihA) znKpfZ@{YJ>rHiw&+aC5BSO(P1uu-t4R5SV6dJbw~*vW3$=g!xESfetX>I6z|sMt|@ zez=eaS~J+kkO4*gJvXWtwBFB|6Q?xAjA4m}Bd3cD4@)sUoF!83Tcb^g+Y2d zp!lvD?0P$&uM8f6ZG^an0`NW|{DXR_FzK`3MnS|{2(GCmLmQsH@9P8Vd{t}7j4!Vo zk-qHZnd*~wMDS{*z3LoxT?5))p9cicw7nXcIt#(oe?Q4;Zrd!oM~$CrQ0MDWNkq54 zV%O(-DR@u&CA}#0YFp$SiL{_yV1dHvvxM~L9#qC*%Th;|bRd7BkVHLQRTvz)_8jd@4hFj%HRv2I4 zKl-OcoPmV~IYxp_%09^;UJMq66|;YHx9ggLU%Yjc+T ztHKjEV%?M3_Oue)pfHc0m{XwIpgMF1c zpf+4au(D4TeSCQI`HpFl5S6v6yYe zsbaba_?;}E{p{78k`<7LQ;>_i^^0dwtFg{s9`-lKH}YLlFs53F zL)k7UZK9vaw5e|AMK^3~!M4U)-`7KGaHwL`&IOmAXA!v8VtZQ8)i$E0SsQhdM6b?s zqi${-fAN<@kkfZ8TnIW3SiSRpV;krUPe)p1a)td)>Eg0X=uez1mcq3?M$BtGqN+6R z+Df2*Fj0ahhM7-;AJJnZvt6cKFSURcYr}C50CvSrmZ`AbNyEUdMIn2I1MqzNERA9B z+N|2_*2Y8J{`-6ob|rg%l=YH40e{iTp;$ocDR4krH2_u^y-;-*P@89y{xx}R69=Fd zSbCEO)(J*W4aIsNSY%H|jHvIT`D%vU-~1>p;|N4a|0g68NlRGIYHS&G-o*J9Pmq+ptn`T|uchQAv@}$|N zP-JxcQTiz_s}BKX7B?Pa0pTp_5KF_SXQNnX`m=>uSVb#5TFL-8hK2WDqA=_w>PB4H zXXkIFpF(=Qee&}e9xAdMArI0)+B3tEXZkJNvfTqf-& zfHUJnS-#r3?;JKVDSB}iIHsY9xB+!21r|5Xxw*1aGIy`Q}LTH zRJbGy@tp>P!mf*X9Mz{m4dB#|w?5OLY2R1VDd?#gMqEoH3R_geM0Tz#4eO0#`5fwV zt)-&Rp|qTevUfXURZ-BmW24{rlc+7@yxKX>yOxD#SuToSPJRe^BsX+A&Xyi%F7?La z!Z$~FHg7R@n-znGO&%GAImfeUZe|Co>yXmxN}d^K2ga4+bO zS^rNG6Q;w#{bu_QN_q@N*zT2>nW{a+g&E>_y%p1T&`|<^Haw+IN1qK%irq1+mCyz| zn%vqZsJJDpAy@fSl6cg6-xkrfw z(ZEHq@giI05yzW;&FS5EB{iX)E{t|3aQR+$bbws+C8%;wUFkN>Db7Kg_F;DUaxAzq z9a>?g{)?21l_6MvY2;VvUSB?d(pF7}Z-(oU6U>sZa#L;53ckcH`(AdP(fKP-bw~3- zLgr@|=4FF<^Ymz9@)f-|XAJj)h{#o`*h)v=Ee$r($loOHSLCO?)${ zGih5QC;b>3uq`5?(Py`$Rbn9caFvlARh7E4_2LoSsC5GKO%%GE&b@#_+1&HY0%Cxf z3Gea|%Cy5*%d{3(u>t3Ez>t)_iw_V3XONJQ!mfQ>E zFOXSIkLh3V@%<_iG+pcS zBx=oT=O|}Yb9jqDsfp+B4M7fuCZB9i>hDMh zj45#9Sh!_;xN$)J+5g+5^JWmNf&V~fY)umQ7#J{ic)%Gx_vSzqIix{&ViW#lecG$R z-^&Uj_!?b1Cg*Hy<%u3{(mT)w>77&R1?FS{#*q2;hDC|d9E6-hf*R*&g9==$FRAlI zOTre%H8(f}=X4;04oR@pTY6im`qv^r8_?gA-5(`;Tk!U24*z4tx%IF z-PegDFxYYx&umXBfMk7ohEUlp#*4dn&Y^viu@6FffeW|XW2$EbJPoCoVhH^`?^X_} z{04gt+zM&`on95?dzxI55BCf3V~*7xWh>LN`QnZu%|yu)ft&U}O2BF^)%C(Gf=+Jd zH!S6N!y3MBpANu+Z~87esyn0Hg;eb(b^H+kpf*bUujmAZN#YM_CY)EIJXRYRgxvgs zWmI;wb&a?NY6$wVsNvVGhjQwpx;k{?8x}yV2O95KM@Y|5Fi%89R3cz3l|x%AO7q>nKB2#Dh1;H(n7{T$Cky z1z56j$%AU7e21*Cf(Hyjl{$ZOs5{!qXoC6=G`NSVCwG^3RDkv5 z`-+`!s0OwtDb05~E{C#Yya3z~=tfbd=gU+tiwW~9%Ox}wvyqyD|hC}l~z!+Q`I3rcE!7nJ~BJYw|$&lxlKlWIPFcW;S3>3FWOsI}_ccZrz>YgMO|vDn`%ho%{5|F2@b6%LXtf@Jiotw1-3BhTvfBOXs0A4yet(1;?nf8Tv+=~62Pb9`+SH%%o z3`!oy_AGFgauT~!pIJw2TZkkW*)eI^emRM8>+J7O#m2q+@%;;G!)~L!Aq7w!2=SXm z5F}>ZhVxw5?u@Fl4hVSf;R8H`p_SdICbiba*<|Qk)meuas{ZsoihGczAVIWnn%_kk ztR5``hM>4JlWH0QG=!-~CCGy?&Zq%t&dfCjE#}T9D#`Y+==6pHTu+9ZxJB0$t(#V% zhJ{2%{X2p6JVvYw1`2S_k(uAyT?tU>$@r%YVTbV0)B~s)WlMhr4q2J|r9C9)0}>;l zlUF@TcJ2%+FnxSL)%{dT!Px>*bu^ZH2Tm%1h;-XtHSW3&&vmIIniEUfGbG1cWiF1M zV2XV4uOT|Fy`i}e*;!~L_3wIGAQYCka)kG3n8)hi*2)WkY1R&mkb_Tgnzdy3|B`Ai z3#(0mIX8MVRy%dg?$H#v9x`?fRMR-bxDO+0m6o%RX128O0j2twt{;7bQQYY(l&~tG zb!iI(V>Bae$(5m!&Dirb%JS=CYMJ*qux`9D2}5~Aydqg%*$pNvkLa?;4Jc;{1ROm|GL`{yT|w6 zrFj>0h+2-gDn5yJk0u|A%Lu$6bk>#y(FNA%<8F_fZJGBg^T|mIH_v2Ru$Wv%ceZ*dHCPdi6FF! zFJ+=9Y?@CoMAmC+?R{=^$FETsXmu9)N;rB43?HFV!Zo;i}7ex&yg?BB6 zBov*G46$Xn2yQdCp@%plOV|7Als&hCl6vj@mrOT9z;_|hj9LGV*Mc>gmyMbFCpZLI zmFeXI0g)d;N!|`@{n&K19l+@2opT-@uf5fqvBb*pHF1{G!_H6U(q;ANx?8?)NtGa^ zj4YAi1I)Z{9OY-4eq@$V%z7&k`x=F^YEb)YRMWsLgl`)y=u78%moR2)N)Y~xf}G#H zJnzFS%2!G-uLJ-?=`~87Uk0DOXT**EgX27imPd27&zzfr&QBR$9s=sjqeOVQS;UpQ%3Y8xmXq3Xo!>H_-1Znmc`e@& z?Ng;O#r-(Udcy_d->dv1*`fbRXJsM<(AY~Ns2!^u(g7U_MB>%?G34t3b>aY@v@8F> z@K(%f8WP##{xWguI8ZDPKQ?eAB1Y5e{X9DP!E&|l6qvQ1#jLPKIPoEYi7iQR4a}Nl z`s1ev1a2J!7LpOFvfZoF?@V5vctJ*R4gUH9sGMfjBcVhG3Gt_H|psgJjQ^xcJ%geP@4_hF# zbd9}dtwsU<+a-0-F){%>hG{*(J-vr>wfJ;oxws04nBhO8Ky5Icex@P1gu$=X5nT|q z622c$OBhuDEQZ&bGr}{LVTAH0(~Mx1KVa87)XE|cJivh35T`s`rw**KKb=>{PcZXr zCLd)$ef}*YuoqFJH53h|43E<+a9GNQ?{-oUz!|UFO5X`3*fnRDK2`BxTy>zNDe#{9 zIV!p>y#w7F;>af$8s)ak%rjhhVhWqz*Z@PJ;t7+Z&A`>(tAm5d@|g@M6mkQmwX*~V z1dC!u<1sVjedvQi@GHt1E0~#cV74DOvn6@)VxZXo8|MSYE`E=)EG8_WDD&(BWC!-x zdRg|+CaN@hW#EME>q8}!Q|`oqa8+Wsc9AQ9tuL<1!Sqjk zr*Q>*1#%{PK}*?B<2M4TRvMu``hsA^{f_&_>RLj&w>D*UsX&#T34nR9d4lcexm*Fw)h!KL0 zrScE6oDF3YYp))roLZaxgvCQW%~}%U>R8^rkRSe>AbIl1eHRKbEy4N#v(8((ZWt(h zT;CFkIyaa4uHlA)&39XHBA(x9wXUU$NRQ*6Iq6G@^nNYnW#nmMa#|V;Z`+SEYauyK zJfDP7v6<<}Mz0laTHf>|vAfR0ZIWcD)MuS&D0PCkm>Vo)(mm2zD42J5W)AO#f_T8# z*(?XAoMTBbI|*Ir3qp6(`Our3#Uibb_CXLbG``9!J15!Y&md7X(Z zcY`*p$Dg-g>>#LfWsHP`+*g!%ZC?ln_%acP29*(uzBD)>l?kM_! zujMUkE2}AS);#C@PXQ_C#Y-sx-qe~YFdH^Cw?M=d7Q#ub_BEyDPX*&BYRi(&GK=kq zw~d3_N1Apz?7`t#KovBO-4ej@GW@S;4DFzNG*VLE^a8@IYOq+2$r2jf**~iMPKgC= zeVUb*^g~>0rrxxng65@fG^Sb-Zu}={c+J$O%B&;M)sCEKbeaMHt9#*vepEhdlbI_)m-HH}tK9u{+}qx9PE33ILM5@) zOLbb0EF++1U${g*CZLiR%(5zQo8jTrP^@jfFUupT;P=DO{#b+`?meyOsC~cnFdDmq zB%`Gi#*cUl4iejEh-)RgayOi5iA};U%6s3*nFg(zMg1JiN&ZtzQGlW#s-TJ5ujDY48~if-wHyGh?d z3)%#CMy&T0-Y?`HzmyUZlI1D+4v)B)==&!jiDlXnEZ<1Ww+?0aEN6deF%@R~#nXM` z_?1@A-uVdJJB%;yGzwvuMLbHeR;4s;b7;k)p zTx@If=Ob#bDP_ETnuxlD8vQ)0gpxb{A**GCE^ty*gLeJk!HXOl*a7Kgu?hOv{rw9O z(Dc=LzRVMyj{R_kOS0c**)rCNo}vDGR?^Te3F6Jp#7B+apN?qBpTIgPbch$BUjmj# zQ>(!WVvmrOe-i=Fq&=E$UUZdBTmC`PGz37|5#H0Dt$1I9`T2b^%PY*fNcNCMU4!=x za=cXQRu;Ng9Le{{yr>b?H0# zfU3E%TW~63sST)(W||srRwKNIc+Jsiwa7W@EUOmwyn7~{2_w#Zj~Jdzc6Vv$t7@mc)bP9=b8TdGln+u%~} zSyh*TgZIl95+zg~sxQK=%3PBx-DT-qNZ5{0c20j~83%Z?&=I&|#Q-pNs^Dyu@o-IjZ@nu0d9Z_|h`o#w1IO?rLbl zTpxWtA3l^})Y>(OAw`E9(q)#Bmb;|^_Z8AKaZm@AJx91S3}Mc%&Y%K9YbDD^FgoWN z`3x_}p4=+sB>3c{E__TB7+gA>Izr-8bo4X(4Ix67V88{*`?WKi%2=h+*h#@ON=L4; zvtgVcc=}@y1acx5M?{O&d%WxjojgV(N$wIR`-flp1mWdI_eTktsql})O6xu{cK|lo z6O?pn)hBJ$OYIQ)nQpaqyNuE|<|#j5tUp1(V}@3(LokZ;4jKf}Wm_t>$qMnw9#mli z@H)A|{c@^$`iJ17^=e}oU)&K!WNX9g2AtbfLp2-tseJ#7gA(9DY%FUOD6^-k!3lA% zI#J?KqTyS8`X#}}iuYp5-qU3fsNxOUY_Zl-l?Q_vOa3@Dl*jYapBk(G44jI^*cS-9 zwumSpPe5caNFvqciNxPx@joa$NOg>t*#?S2O~eLVs>J&(d-x)LVT@Xo3)Ghx{g`Y4 zk}T6&Zo|bPT`AcwL`wT%h_Mw=mTBKn&Mx|5zrn^n}Mfej7_&3 zZ4R3v9$!SIJ)*!DC>kYq4QZ(9m>yC(&4!gM9FwWB{P9uxt-P$%WO>qsNH9>`}% z)m>5K>i%j(W4t{06efiNkwQfp7L3xjn}q_3PnwQ5O^L8ve%(gvd>F z;M8i^W6M-Mr5oI^Z*VfMV6KHNukiwOvDs}S>UY_arOyG^+y!s=n5GJ4WaZC=YV=Ai zzfoqI-Q1ClX20{KJv>-Ipy$xTTlKxze2E$K9){nOkGNxG-NmXh;D3<=V`Q5Hm^EKO+(MTXQz{9>bq+HmuPThi5v&fahb>J%> zZgl*m^R~<)Ou+aCY2^6f^-mv6@Z-+FIxPZYCFV8L>FudEV)(Sr^=5Q^yXs**Rb>k4 ztG=JgJ}s+kNPqdED3N~V+&+9C6b<>Y-U+Z@KDTihlZ}rjMd|bXDOZ-k_qd7l+pzEXDG`Pw49`ZctXQTBk2dt)@iD0)xII~~d((1A+eqMT#uUO5qk)oi_ z(bEsp4olZ*z^oSJN8*aHSU~5;+EyeK+S4c&o3?v!n#=qe1#1r@JE#}-oKodE^!F(H zECTo2Yv1KyhGDvnBP@?8mj(;fvy<%a5p zM9RM7b7B6aFMw>o=U)qQ=8#P>Az4e<+rXH?0sa#idadOlUsg-zM=?z23`q!Iq z#%FO*-A?)lzi1BM%*4b=^1(4sNYWV5)ABaWSe|J|sDaFuG6iftg|S2p0QlaLexBeX z{@uF|`$;D;1MdTeFg*>Ph%|3x4<8eNi29U1Im%aFC5yPe-uQmXz?O* zlV2j!%vbo400n;f<55#LZsAU_>k1DO9H|oz$_lZ|5wiUaZP?OF6AjV!SDd?C;IsVH z)}fDRcWUq+A1+HsGe1SiC_`*x&TV1pUBu)338hBE6AzSSB@aX$SDjUezn@_H_Yjr! zO&3^Y-OS);k%rt<>6a>4TJPI2W2~`H*|8=+%?bB82YYs`wGa0{w_}cuRC-)_ZJbN#>6ZN?r9A zbr%sF9Xw#&htoqQk*Y9laRW(q@@Ld?UuKjt@gtS@wzY>{1DtQd2l(kw9Fh+3-KjX5k->ft@PDzpq-Xomi0~(r_ZH7%s-t= zEl$b+N&qx_yP9|UwtE@7=Na#AT2k(Xr}dfzKdg~eaC zqCQb((etT4Dk)j4GeAqNn{ia(7N?`R-dlesJG!D4s=r-&tQwfE&s4*^t9*_FK_B^+ zrFq-|RJ_Vv>~2zBjvI>!l~cG~zS4^Qu$Q$|bXdHSk@};d-hkIErBXVgYwl|$O)V`= z12{*t5LJN%Ne2?q%OHk+{$?()Vo^+uJ! z99q+KslWDsqjnVy(-n9#e-6u^&3~hmA?tN-bub-+3wp^U%|8#x6qt=r?5Pg zUrAyAmIJ5)TnRP(6mGWGzfw#PxT6BlLMK08nN#ob%d_dY&O&zI+R84X#o=8mScncn zPR+&6Utcy-sV8YU?BqNLi1m(Vn(bawaXnU*!>1Gg|A?n^g_Znyl-H*>$7Mk<_E#stRvmLiXHYI^R!EeSa& z1|A$_hn6kTdSUrh%pyQR>$)gfY@56pd79leoeh;C<`aIQt<=rAIxfolM{${BV;9w@ zC{ijBorv}`vqz(+k!|@^3j5R|8(Bw8M-6xDKSR(SQ%GC)5Kp+ewJ7Kf`HMel|C&&O zJy0TXq7MAqxe4vl@r|}r`fTIIwlmJ89gp2oo;&^a^!nY`Ul5nZ&OY3moq)7Plk$-C)mq5>cs?0%!D z%?Tcf?M{=a&PlhO(~pd)g&41KW8oBEX?c%vww%QAsK;l=zlaV_4dvs~ihs&T4Mjcs zIQL9*A*ok+K+j=fdPJrs=f$2uIO=QOcEq4T2D6wPlX=Y%2nYXHTiUF* zxI4uV+v7rr3Y%$Y!%^S_iQ;PvF)GOMl4m)mma`v%>sOHobo^O_*RPt&rUXD0aXwhB z;Lc!G8wC4c3NC$zMx9?rg}C^L$I8C2r4*-j+AAHbAYc+en`nst*lE-~lxJ7p0tI)< zcmRhxSYJ`sxD~GNU`8qt&yYSvJw%KY6~3V@F-i;DJsq;te$T@WKs26QdgIGz&d81B zL0R-VWc1C4OvUS)_@YQH;f?eRjxR~Mr-o!c63d_MSPiqV^(~hbufUna>rZ7d?J|B$ z0SkY5$}|R(_yDm7VoCw=Y}Ga%RPa9oy30k3c;5(KeWznp#Sekf>pbWEy0R+PerySX55v3CuJ#_h0h zd;6FSBAJ#c{(56xx$bmU8C9wW@eQx4gHqoshj`GhI$I3dhLqC3nnx`W+BRBWwe<*J zWb;v90JQV4`g>uul=!V77@GA>g=A?<^=YiNd+`<3$&;rEA+<=Jeh*Q|@K>8gK^N!G zOo}3%9|W>PFgL%YP^30xLpLJI0jVe(xDWpv*kZ9844dkf03|sK@hmaZUrA1_IHrzhv?{1 zsbVv#$6@FgXERk3#T(x6M9+ojz)bPO_8L4&e~GM+KS5O??AeMuq{xG80@_gB@321) z2_XHk8mzo7qv!Po<;c7g*(>?7ul0!2@iMDt9af^%0IpY+e71=|x?hvYtB^yWR@juNGq^RxkertCcBTu`Cq7ayY{pzR6%MgXm| zhwK~JDh)hWiR9y)Dqq9YKZOSQexQzXvYXgoHWmoUwS~H4PFDA;2YFDE9ccEo_q%;MKKKlm98~*s3sk+Wy>bg3l z)pTG9O?JHjj~+~{ zqQ-XsZT6tP@rp>?OiZ=LSmHKIcqTe%DB54tMQS4li0GiIl}k~qY{&8v80rhbLzxk_ zsI()`d3O}qGp7GeXXE-gfM|L8d20d=sUt0!*}PG6sC zcsH;wY=)Yz$RjoWzrZ8% z*KF#GG8NlRZ^3q=6=E}R+Vx+NIdxXO&ZqTRM8o~RE?VCO@_N2ve=wlcQU8`n8R z?3>4AoXfY(Q3i+9mE(O)xD`H8A4t3^!YKcl{Zvj7W^EsWghx&Lbp1Ab_bNc=A)aY% zl0^QfV976FYxJx!x2%*r4;IqXJ$@f7Ljf;fL`ozZAAh=<@58)xOfLdF}xekByOq~mXq=7ZC8A%7e5(G8V^&P0e z`CfwD!AhLs(~-j)|6G3^aVsNKhBQ7%9-DcZg{)}RY;gp=1!l%=oQU3GF-ZQUxQ;EM zU1S}5m=a9NVVCu<#RXd|bBk93+NxC9eU}qzZ%@jOwY5P;ISo||(o-WmvD`7cM!AB5 zC?isY-(e-Tnf}KkQX|ex;0a2c!QOjJrx^7oi%S|M1Cz`dUo=r?ySV#w=zzS9j;<2e z8kIn=i+aAr_2lFd0+z&3a3>xb-?mbsSHi!Q`JjnG^{r1BK4Rv-wI}t>e-trw+%|Kd zljCNoZRG2XX|P#pY?J`{wkG%=ASvJ(5B)Z0B#?kPx_Mnaf0ZSx-y^QtkGggNFc;7m z_44ru=C4>gGyz-<&P*e@ekXrbcnWg$55JT#>WlYb2KQ6|x|Adv3F2XAT1~oL??pnz zPU`arS>ro?s$cXRx3h9O@e{C~t-(DGz3jUw86s`bBQD;3HxtBr$qNT{WWY&anxs|5 zbh!!g{eIT-yKvS-ckwJo4d35JZms-U8mRMf7A^PZtx!05F9h;y_cq>BBc#6_j?Qql zsYu04*9Taah)0LL;c^~|YmZvlM#Q)m8g(m{;`%S@CN+kWY;YYrZFcn%cFQ~b2{%uNHd@}G)?G^**vUGKjcXr}6*F%FtMctu ztgU$@$q$JD5-2^cMk{gK?IaF`PSuBL=72Z-2oVYHcUPeIk}!|7mu0(TT%&7y62iQb z_kW{btwFAr2(}Dm)GN&s8|rsK2vlu-`HTSM0Qm<(Jjb4em$(~#ev3dj;ls5ovxgY4 zLpJ?J?wGC*8k6W1VMUj5N3!MQ-jTO)i-QsDBX)Ci)zqYNM!Mov1n07!u`=zfexyCf_Gh!l^5)A8yl@gh z%jAVhG1^H-*3uIUr-R_gwOeeuRAhDM&`drO{%Nw_`!+s&&zWhGisYYP?|_*ZH^ z%|6;G1ig4}t+pQBPCLNTZk$RTKP6uw<48gfSN?`7%u{TnZy4uH!@Dlvd@tA=z%2A6 z->~vEDpt2&Od60)`iNLFL4&On9nDn7uutCLl6?YezLvly%6UFpe8j~%3s;k!H()u~ z6UGTzH^=grL!a)wN_nv`)((n8uMf@l}j|IMfW7%!|Iloe#q*P&i!)+-R10wq^lJB7c`I>XHUjAS+YLC!~*4o&H;E|X7nyy(&10tl zCFfmK!*HQq=>>A^5~eqoka4Q<8+$oSTsG2UoX+Mpy1wUzvmCUo49t@3H2g}QQ4;LCbCBM0xbmN z`+JraZh^(7ym+Bt&Z>`w#}*OR>V%H_)-&F4fA@$CV_xB;HeCH^&M-d!;4h-J7*H7WVsI~G)Sf!qo5~Q-}m?XDe`99!!(G}20Ya?z+p{d*dTba(Aq%KvMR$^nw z09sMT7Ojs3%i(daUfOPIusjZ@%HZ6?MaqKuMs$PEf}tl{bBC}+jt#fYt`+c4 zs0@Z>!F4lCOh04)EM~mddL_cS-%c-NsF{FKR`J$x*_85Sen(vO?&kduwSh1{2a}yw zf;!mMf7}F#iplrmBqzQ7t_-XIP%1IOT!<`-n(bcQX+9L~@?ROoiOw{)IcZuRZ|?mp zQs8;_gZTlBm#NSLI1le0gl{*2=bp19X43B39Se_pM06QwBNK4`d$G2M`$d-kt;Zpd zmklUi7uA^aOoh6*1dSXOF4c$KW_AOwJtUlsY5i3jSO%6*(sUian)=(SYL`qGv+}iw zw{2^(6mh5CF#)trle8{XIEgB9_2!k#V*++g1xvyCm$mZ5C!YD%yi!%ei*$)3YtAD` zUHoGRF>m$_Mspi-?S(h9K~!(`eW;~_(WeFvO>>gj(kn2^@WdYZw+Rjsn)is343s$R zix*j0AP%VzIU@(+2hRnavF)wpG8*M-(g%~l*%*CL1?JW2*4bal!0}qTubSm8{F{28 z0$fn=JAWvp4EGmLoM|>xX}jA%ej9Uc&_lCfD`wP_C)Cc^!+wOTMvvW<*9< z&vSrGu}F!%7@|8)H$9JWdck8oyW64?OH@GC1^m|^ypxhhhs6z>EMg~QW z6Jcx##}3UyIgWYAy0Bx$g5}U@KFfR2XLN|lJZh5Rg$daRl`JBJAHM<3Kg}XspRAB`)d~-u}V3rx&RJTOI+qPzY4N)l{pfcz05H{>a zb2u;>JU6|sn(m44#wVLLB8oWuP7Hk~ z2Usu+!mos<-;#+#7XU@2v;pF)r=630-wBplvXTj`ddYI7_WfxIN>#ZN%CmBCsr46< zju&=|)469^`-17vOtvw0!kOe>Oi$!n4^Bw%kPn+CHr5c*s=kB_KgaRY#@@2Tb< zGFYFoh&6~b7U>*8pQO^`6-0jI^Q1}Vp{_i=K*BBukHkL5_4(2 ziatA~Rm*MW57e5gzhGg8ENbQK`-6b?`Z6BRUSbD9*miO>eUa)EtipQVMQ`b#}d zBmGzwV^R2blcQJ2fDK{${f)I7fCzG}V~-2a=GAS&?UgeRm}r>Z(5mfp;P?=CfDNizbaiTJ zz3%>##!|V)#Q_0jH{f{KU+X)*EgN(VW?#_5W2sQhP0Sd^zl1A!|7vcnpLHgV;3)fw zj2zQBst}kwmn%1Z#G`4x)E_wr+LCpVUrC5!K2551xryY5$vzEunoHe$KpGe~N4ie} zz}SdO3DiU{3sT=1B!!HC%AyEept#<1&>bY|&iZ*|aqi5)h%8aZktk?jUsJB#bB*wBxr3kz zM|y&4>Ra>f*W&^?WF6e8dkm7=)RhMs#maT>O3*@s*#QpYrlZXNuTsT?O>f)QZ!-Rgu)gi8BSs@^d99+~FFy8H8 zA1Yzrs`lG#)?W0B5R~8vVWjUGdzDA(a9w_6uveR_UEf74t&Na24S9oGj@jk`psF?e z&9vJZNqkD*b4)mi>ggG%Xuj%E!#yPE1}XdxBaAc-A9?_DPR4baMch|D4hJ3)A|&it z8u8QW1oBGmnMDE$WF0y3Kd0mH_33<|8krcw1N_I6D!xyVTqv3DMxKBQ-~gDE&+qW7jo zl6z6Tv?CW?fK7)q?y^hKwcd2{iiv(!g0pW>&Veo|I8)?5BoAM4mtT_nv(vY5Vw;}5 z*b!(bZBn8M;y@>>Ww*JPwT|<|VgyIO`j@4`?6xr z}!l zm|AV5;|Mr@wQ+P=6baR##}j|5u$fm{5O) zv6HHKq~;b>*;#Xfwe8GVA(VI1?Dd z0CYzr{wAeJH+yl}Jh<)*;zTXU!^D2@&cwa+Z<1=3R5uO^S1|HZNg{t3HX@a8fmswx zwufJ*qE(>YH22V;1kgNhjj%FKRW_229;>ac|bhT|mvVABcNL!7NPtg&`5X z=CvNe)f}m8Lii0THF!r2i*@Kfh2w)cz0?-;w=lj<{f!&|dkzHtAc(Q*QE+r!IuE+M zxxQ)EYuVuCXj3KaJ43L&X5*G&Y>o3*#5;nbz(3`2c&D`oAlI!$9e(t$p%r0PyawIl z!g}3Mj<8iBKKOq`Of1|APXs0I<*!r5T}VJoQ`uN*u$b#H%?#LmyM+Nz1s=YZ932@= z%~I-Tx|P>6HN*6%FWn8Km2l)Qqt`VD^XH`Ai2w=cmV5b%Pv@})FS z4$j+$1~DPjw-~t=5uTDctqMc%eTgXR+|?O{pmy$qJ80enT}9)CYX!aB7TKfSP7KULQ~?PFwalPsSLY=YU(~rz?Qd=kSXNDW7jj6eln-3B6mtxFp)BT z)NI|*NHRpI1oWYj`NFB$=N>6J87?zKouuivU-5ufg}pfF3Gu}5lw*aP7w6=1+yG>0 zeyzK)x#g!YPEd{j8C|t4J!V|j@iEcxYwqcFP(v-V#oIGZa8!M9gL{y_w;Y~Idwz$; zticzRp<k#L|rp zL>z3*bzMI)DDWLhFt(Jh8`A9?_T#p!8g#zJJmcgOnb{j7m$;|eqpUHz8qgv;JUtNz zud~C@0cT02g5NRdqcKT1ZcZ)D=8?a2kZ%?7GmQZz_)Lipisq5I-&|K@!Ge7wPbr4v z+%0cGX}L1`Hr1Rgg>ArX_;t)sc8wZ0bAm9b+e5zwrNliDPHZmf0xSYFHL+Y?E&o1e z%!L;<(Z_x-$l$w6Ku)d2SH(+T2n}b&oS==a6w>CQJ7AJjMFuS`gmt^4=>*HG;?Q@o z0;b%RC$A&A;IXXgfr%o=Do@b9-UpT4QkI~zsXSm?E{mve4JLo;FCiMC3aHlG$PBB> zSl;~2N=gC0zF9>lu}!r<+R4E6>zU@DV|}ZbDVtlCKUIf}f^im;rFL{vmAA#i)LLI) z?7>ZW{(Snecw;5C7>+O71|^AT?zZd>F}~*dpF)l(XG?#YTHgAnl%d9F=XAbqBmC2f zinkC3cdW8I8X;Mk661FxV?x1LR6!_;W4h|U=UfFbL=SHA!gAyZNPxvNE5a!~tt+B= zyKRfd`Z^8Oc37KnhAhv|UKgfp9}1IVK@@9rulHBG2-8~J>)c)Iwzy2ch&QANwf-L?C?zRmt;aE3WRGi*k@8#jiQ z)5*E`lx(o9&9`MAVXdg&3|gq0t%RQYa55dg5s&5nMNd;HdzrI&)2iLH*RhuK`6@eP zEw`v1%dZIO%)iMh#&cSwf4jey*-meuym)OCjvFhB#^_W=9aB>VOY!8|^^LxgMsE{S zQ3RN~i}Kmg#dvzqxND@+F_vU{2AUf^yF;~he`OF@y!sgFBME$=0 z3WvAFzP17f>tvC-c_+UTE8H~F_jseI!B^E(w8>s!e>(~?Jr?xTm77XFHkZD1T|;>r z5NmaJ!*(CMp0HXD@`RyW59dC=ep56=8RWnqM^)_sc0Keq-pE-@eloRa`!Kh1GbLV1 z+(kuX+7b8dUSHA7c$xaH5vbn=g)iSo#YPLpoC zJ+F^~tb!qmy6?MQmMWoZ2~KkCw)hZeH1jxlc0MmD=1;HlG!g+N&C)&7F1xFe4DR4r zJaBXNUn55GB&mY0@TE@GangrlZ6|-uiBYVjW>LuoJnNc!o@*v(ozsW7HoV{WGs}2ke>J>EK7Np>=idArjL`Mi_4=*ftF0sq0 zQTDE5)Tvv*rEAz!?|Dbwg?Q`!na2ks>FJa|JbskCiQ#>{)4`;@mx>?_Tw(Uj*p->b zp)~@y=7*5Tub>K+&ZIX)az~^(0sVJHSVmiBV_Z_JfE9y9Lhg!=ZYX+z8 zx|2JqH#$G=ch`}}huN}E0@OzLonZuZP6S))K5;tt`ZGslGQ4mh<-XsL-(z0-C!Tdl zthMi)!{q6MPQ$bN0^IUI*S%wJKrT=#a$M0E#ah8_ICJi z^;5!-oI%ZHq69qiXPPVrXgKpW#WnRNoQWIb0&8tz}dv|+%lr$@Q2SmM&yidoeM&e%+omYik&>7Fk2gD zw0U{#Rz~1$)PtAO7!h61xJ~%3M!3Jzv-4Vo>ejKV*`e4stRa+Z!KUz$w8M08>zo<9z@XAuyBOlI{CjZL9EW8s;_qN-(niHCH(d4J=8K9g));s^5*6tPT5f!RvA=x@c0B|2Zkgh$OSq zU3+1b|Fj*Fdz6Xy%?8ZJ#|**G?Q~~<0Zu%1CH~_52|>0kI3CE47#UbExzM$~ z$!Ma!9)#8gqv3wFE7mWct`37)uI1@PpjrxsE1llP`6S!RdQ4?E|7?KgBppJE{v;<3 zu~sqI*H0AT^>0Xl4{?=Z9HQlD09N3P>6ms4SayWrVB|vu8Q#Nw?8oW8D9jhx|Z z7gBeGCh<7353LCH+M+b_i0g$daBtKyApy`+D~A|b`G-!i-*Chtuq zB6Z2<5A)fvmJw-rLDT!!!886}4Kw4m z0e|QuvxCL;Yw=|TJ}-aRFanf54eM>3-UT-|nRW-2cXg=YGstCLm^+V6@(Y8R^0i3V zH{}Su4Z_jQrp-}rVDiYU7=1n&Eo8<h7IH=`wqk(XrVC z-=(d}V82yBg4@wnBn>J!7OEkPd!?hDg|`bI3sXpJ0Gs4l1i$C(E^ znR;i(2vd7aor@uznYoqtZHkMtHj`uX3*Z3HbVPAp-eQY=9!D1Sp}A$r@G$OTSIeq> zMU6hsGql4dv#CpWFX?mWUDW^#GpWPWRJ8x~7E?3Sg+mtb-UHOLRPK-Ix%BMW)HJC% ze3ct^7j3ds!uIB3I{I{0$Z6;2zEpFfu@sZlkkj}zzPq*A&NzrpJI2X-FUPKz7u0(x zX;7VvFuo=d@@;yREJZw#TGIq8&t{j;Po-EjF?L%aHhRsle4w$u-omfv;Rj5-IwL68 zre<%7OXa9-6S98eVW>p{#NY@)uN@D5nO{~fzc#BXLokIZo^AWM`py@;wb};3nItE$ zx!4UnGx$VRW5UbV5dv9{+oScHx`Pby3_{;wmZ{9BFgXRj>R>c`Ov4#ugRqI*R7wPC zewwHrgLCZ7ALd145lLSyaAV1`5fk<_;a|JFDfGYZ_$tjIfdbHlW4 zb7S<^f}I4h0fZOXDGkb3e|rAs*+ujw8BQwXk6MTb%lk)Wx)<=MYu5oDgc#z_M)Ll| zyGE6P3D^}9f_j3*C=x3-vM+zEzv-YZfIs{}0Cn81vB~eJI9}k#`bs71VcH z&_udVf>NRC{HV-(~b>HL> z<^cGcc3-8%PTS?;`Mxi~bVZ$7xe1tNI=sodxyAY`gtpXH;V^i${M@C&f|9 z8z$0K+En7Lx39NYkrD7mf_Clm+4K3E1*1UOiqS3PD@_iEV`l|j3EnJRe)*5FCk1fr zSkAAgR92|+Z*u${0a{BI#sbt%r>GmL>xJ3#H&&E6fyXO+c4GZz`wO1k%mEfI!VvZP zHEeFQkW%j;YD~UnTi;phD{jG^_Wu2>#E0SdZ1ue{r4UDXRsV?SWDXMpI9Z7>_TA2$ z?RV-!Lg8-lQfd)|_q5J^smWCxJ!1Y{=^*$J)f z(7|@-On$Vt33TQX=-f%5vxm~zbLsRxdy~++LtxIXWG6(jokX$&k?a7n6F_o8u@jiu z4jq!v&g4fs4ba&ObnY_+=I%l}dzK&F=RkY+c^=(AIfs*zpVIgH`Mlq+7xs+k=mYwq z4oO%P=&RQ?Wtkaf-s2R#?Rhj+{Wj%`ncr~`Q;&)ePF=nw7ZwwI9ELpI5Y;_^TP=B}-(v$Y^PM_ZY~1kw zI^ZoZ96~|=#a%r90)!M!t&G7b;kkshMx_rm*j-)!X6A@#kG)aKDA1}wmC{XThz;o1YfXYm}DdudgVnnPa2xZ*oFVqPnn+ZDsr5bsz7zJ|dj zvhjDiQL$;)jBn&%HMV?ZC9ZObKZ^h%SN~P-<-LqgdkwE|#-d@KL^h2l0+M=W_F_83 z)o+~FBXDcpRymyRw=G%)x4E-gM-GM1b%P$)4_xBcGOCAYpX%F+xvkG91wK%r4XV4h zHPfhHS2W~q(x^4MZQKRAzW7biTd}v=X8KGC3)aiZDuUHzfBUC2 zM+OEQgl#WsE=5#B*9{?W*}mJfDyW=H$6l{D0EOAlb9%;BpQTONL*|PiiE0aZ%n{)%+ zdU@7lB5sFnb1->4G#4g_*UN+uA#bKlE%gM;J-@0(@Ta22!EFm*j)uMX&+6Z_dm7{O zT3GHDC$4B8Fki;M49Vb#3wzbJ2Rew`&3inckjQwt{v`b&y%bU<2H@?P(17pFmMt#a z?s63&U&RZN&`0rylkroF>QV^lt#I4*GLRiRj@dwWxsI;=ZSIVwO(oKz1x34?H|XFI z`(eAg+G92?eSP~%Vb=1eT-?76!7W+Pm>3O0{f;VB+x$` z`illnA-6l`U|Gf*50k*So;i4R2V1N^?c5hb@?KYdtO&E8 zSbV9{oBKbJ1r_#dUt|H=C-?q_BP5UaT)(9?<2Wmg8W{=Gk$*f2Ne>_N@fLj{u;n;| zp;~nD1qq8vhD+Dy9yoYp!ghHui(%q`MW})eYfKvdl%j%<*=$v9~^N$4vhD}(cat_Jl#7*&ULdjsN;mZ;-0L1ne6EL-5#>Rihsp2gg^tr$> zH^B5|IO+fo4e+dE8yrCH!4L_^+dqd@Q$f0L2?VJ|NywqKN8CqkKHzX1XNQ+S*dne0Q}H!u%ag_ZM+0J7JCwoy@REM?D98OSon!X&oGjONA_7>jH}eyzojo;7UOIpA*0uOYI-Y0M;5GY2bnA>s30jLZsRv zq9e~GOLpvk1V;%vlGINI$=9v>maw}vLhoVb!I{^sN7Kv%23XlJ2H$_7a{nazM;x#q zdZ`BiiHor(Z|ZCe zu3oIX!a~0RP4@AhlyuCp&lBzyNwsF||&W$kHN}2@9u{Ym$zli34qi-+=>d zuG^+oUAbAv>=F{=Q2aY{WTf@M`?Cyvdv*0@(>n9!$d}2doN+6)7+;V7AJCixS z7LiDn`ktlj`c7qF7X#SD`Y&KEojU_ut}W!lEcAa=41O7FdE(DBxov%mtSdQJPTzBg za%~#_a}of8F4Hs1LvuT5e=dU9jK%)Q5lWH#(w_u-D45v(JyS5X+fQg59hIhkmA46y zP5LHp*}PlL&JQZq5j!kh;KaBB{tAhO>tC%HTqNzyW@-F$2`vKgKj@pITT*&Mtv767 zkNb^|60<8mT7}knf+xlX(V%5DeBKGv+ST*Ug!_0C%YP^_watN1bP{E`dH?Svuy&7h zQw@1v7!gZ9W?;UBJE?c6v*In+IWmp@06xbL5%!vyLSPti)QI)jc*`~z0Lyp+`38|;9V9=!zFwnJ^z{!6pc@bN^c1a zPVr4~&jfuB4jF6Wt8x4&Ok4(ngN}|q@Wi0#N651QbPOHp3o)nJLm;+*Ml0Pd6X4t_ zv5Th#P_lk$$yjbhE*+8fgurZ7@*Nv4468QUggs%5%hC7)yb|cwrJt}Mdw)hU*$54E zut9?*{;6GC%1>?C52#Cu@)F(%viURFHw^B#bIFM8_Gd>LPX3aTY9Fh9al2JswrG0^ zpg~Fc{-tpvO&rp}eyTLtB8mVUPF^+*0seTQ$cn|1z?UE2hVi2`<{kO>Y|8qxEr-OqU}HpT@= z(7~ZcC{dqUciZxSPSQ+M6!rz*f>7d77egzRcjAbB_qv4i zIid4DsnBd=i_88JmU>@ZgODLBQ!j5B)>hb@xvnIe5Nn&y9@B&xv7$D=d83~8|Adkk zbnIxuqnY_Neqota_fD78A{HrDLY9Q2M7%`u-6UeLWr*#}R_E12!tDbEyJXV8ncZhV zp4)(iY*iQ+PeENLDzP!3SynEQStmSlj`|}%&Hr*jXe*djW0wyj25O zimy10ab%CGo#U9D#^ik04SYn71+hsT}Q;Kz9Ed^8|Tmo z{f5uDZ}v<_1A_XqN$+g^b0C3C9xi|icY8wwtUajW0JL+IfDzzm7GCu(IP;0ccXhd$ zl-o1an%K5LF>T1pwGfWywycd-xmQGOfjn8tsqogD@T#pJ1sz~d66Ba@504ME6qwtv z(LThe^2+(pbi)QC&IfG+7=TenXI$TT?!l^4ZeHTF$OCtR-MA-VQ|cYtYZ(F;w)meo ze!~lqr0<@TL^D5}hr`_}6m2DXEFc2`zlf)-1C`_$gPcR)h!j7`sog3V#Oz11LCNGe zdYKIumFu5XqPUcp1ZKPA*^aEIUg$qEZC4kG_=?iNym7j0Z|#qhcts86IPM2Yn|NvTE)j927gxP`@AU{{1nk)F zO!d|4=q(|0E&$p8t0c$6T4c$%uvMG_wE4rN4As2qCY!IDMal*iwm-L~kwWf@?Tl&4 znkRo`j@wOtXJhTZ@j}KTDBJZ(cup_Ws;EWLF zma@i2^qh_h%k^G@SkIe{QiWVCH!+6ApA8~$PJ<^GYNt0A^n&ntf}xx6iPoG=w2!oD z2PX&fLJk;)OIbak0=#jOiP3x9#gmidP!rlu?T3RaI z`UT>FUGB}En=W?GUT^m872#5)h8CnJ#=I5zfIEpc8Nix~ranJps|k$!WR)bZWG5fM z+?0|49y9hq`>VL8zP&l5Z*J@N4c?rbyT`}1cxuHm<%+I-TXG*XgX_TNtedk@>QnyD zob!~brJHm)1W*JYh|=rV>r4T>ua9;8>9D)&eT) z3=hp-%rQec2;#hxM?AL6C&6CI5G^9;n@9#Dq(@)s7#fvPrIx{Ic^lo>>x7Go0WV6P zutsZx`LDkF3PA)Uw_v}^7%8yZA@!Sk2vTL6M2p-Pn}4!#Q0KCZJ1R}J&tbf@IMnCp z7EH(-?7nRx0aY>eI`a0!@E&?cz}120QVu8JjTQE zx$GOd7E9#zJ<>(M`jFE-_hyKWfx^q>aGS*6N4SmIFsMh0{<-#s38t!doo!Tvbuf5D z)=%K7`QpqF_<>&MPn$0WFq+&994AJ|BT}Gs9wW2rzCQ(K1K-m*YPRN2t-9lB8{UMs zTioL#uHV#=tFrXO{}Fea%Y^WDW_`O&OY6eQ zx^h91pGgVH$bALhhp_-`DBf$RuNQxiiuP#9)@Py=&zCPtX;!H{QAPx4`wLC=)io3C z2LHahBA2QSe-rvF7hYkQ$(mu&&_uLT>nfT+f3s#9_YaZzsXLRO=7*Mbyye?*v7PL9 znd-Yu)zX@jSKOLrYVQ<2m>rwa)^fb#J_hu46IiuOY88n<#?|KCCLK zNc_x~+8K6?htd3+QW`Y()wDu;Ysh+-9Z6k8j2ZRH2g`-X1qtI#Yf8Zmn`eXDw40Lb zf!hA~(i45k8vaOIS_YAbSkz|garK*;ux&OsYvrHH@M-4uT>OK{S&M%D8EN*@CtD7+ zG&cru45%P=jB)<N> zcl7DK+-;s>muYqb3pEagrkJVF?ZTJn>;Srt_fD5^u&LVpGF=oDDi`kb5!9x+Wz`b5 z+~oOM;bp!Hu%CTLCr4M{?L3jw;Ah`ah=1rt2KLFp;}#w~^y_N4GvdGc(24+l zfJFOD`v^pMNVg8BLY%DJnA#!TG=V;Qdc(CN|IUZ%RP(IUpZk7gsf@S?hCxXP4EhZ( zZ`(^%3on1{6?Zdm{P8kZ;IuE(AMh1J5N|hCc;d(UZPlhmY!P@`DIm;b;n@{Fjj^FS z!meLfE7-lD$(8FgbyP4y_^+gHiLr=U?wN)O2S6N7^|pl8ajpOk{WcL;8{>@1RpkF6 z8JJ=y<$;aq*5~Pn^T4S9Lj)$ZKZiMD4G18M#E7r@?CUU=)F66yWwW z2YjRcClBDFX`6LB*v_DTkrUoB55TzrIF#e_=163gM+dCM{=9l*a+<`c8%ctJ)pK4svc`jIZNj zt5|t>DJ?eYEmIskNQth$fr|wqOh(br)lcQZvb=)cs1-};n;S5^XNxYslmd(sCm6TA!gqpb=lRH*G%?45EwEjpmh4Y##)9*HV%J_DwNxEBK{P_ zPE?SrI(gpN^1UO6n*TOCuh$WOJE(a? zm}u%H0mml*npk=}-#RJX@TyC(wM3W1at>?@X)49E*D}~|1oo&dkynpN@K-X{KxK}U z!qNcaLjQfZ86t0cqQHl`e>cw0NzUxGzbJ^s0Cj0akE-QXj$Pv*BrO9T<$s6A(<6}) z#PK8`NO9*$`;ky^i8$u~ggsUr!dvie967mj0i|alnEGR@r1*v*|L%OxG83$0L>KBU z&3{bE>&KNX8_6ulm~!{e@@R-t-b@^N%=sm_G23O)DHcqF>%3{3PL2@JuJ{a#PGMJq z9h=~roM0$5&-8MTB=*-vf77?83`Vc9jg#X>HNNY6im0N$<(OU`I7<@_UI^Af_n^IN zkwu6<6i+H*sO>h6Z}oi(Gi_1oavSW|^??=}^Yn#NjMg@%{}&bDUEkQFyXY@CfcSy_ z@?-#lKU+pc0tS6Xni!>#+OSl-Kht)ZdRx$Gaz}|9Gf|l2X0A9s&z`e{oS|adk9nA> z_9m#3Ue_F}LPqlwO*Lx1zl0h-2pBdowPLgGu)?^OW z6`+?J69UOjpzaG}YdA1I?PQLe2Lz;al;cEVy`fgVfGO|ruoN7O9#s;2^K(`~lwTyt zJghioV%K`#X|)EFwq2KXl}md=Kkz|(d1j(5&IcPmMprrURh>g|u*V(}v{vSj1Q?0D z_cZ+574{LqB}STpd`{}~zR<{cdWxlSu8pq0D#pWbQ^CN7o#!whBg@V|&v$-q@alCh0rxJror{X?(!nkrB2n z#;pThu1rQCWD990JzdwBf+bs(!e$fSA`8CTvnzWlgQ5q19i5YHXb;oJVZNt&lP#M>Is@Hnj(}OZ#M zYT?*cG|=BMZ_IhIwl$ua9?=FM^^T!!SEI>BjQ%Tkg$S!BKx5%}{#`(~L4DW-*93V_ z84%r2Tk6oJ-BllroI=JNg$hgZO(P;vqkFy57AuX(#VP01%yXpF8PaPxcO?byaHWDr zVDO}9-v`dUlYlMvGWekWOm&>HE;bYIo`)HlvaQFw)A9|8DHCt)J;SG2fzk>SL@({? zYcU@^tDhWceG3r&YEH|~UQn0TO|gpegu6BR1FvT@5v@MB|2!weos;vbw52 z2*<(pFnG>oe%s|)U%~Gkq;&Z2174ZTpUxHbZOS2+onC8^$^Ae`bLl zF1kWPPX%-kctp9-bqkZ^KBLG2Ew0V_+frKjdr}@j+&*i5F#cTc{WmSKt4?HBA3M?@ zI0J7M9h9J)_Qfj-d_coXHBg2v<@`+|x%1v0jx`}SyjG|Y>+7sk?t~V9JP{Hl4>#?O znD6&x-^E7AyRViKNq?4{zrfW3+q8#w8|IxKO4XKnZ#K}$7gay)sMHCDN9Pf}tF@FL zBfWjp7YK5yIK4gIDNr^z$XseJOO^>|h0M`K!9L7#@RDvEZtjQqIj{P@0-tCI!bEP@ zun22O-$kHTkvgB55GL)P*b5r!w2`fhM_Soju79)Co%z^~uL*C~HZ~fjF1@9L72?%Z z`UO=WuEc^r9P3pA<5CFK_qEwZ^m=V$G%9zO^(mTkj5T{6M?=?rm_r@>(5Ht&bVe5k z4uXKwbp7)DfkjA=laBkQbqZD{yg`TNn)z17&B{ z%5eIHs-*1xvKSFzTA&*qIXK(V%kE*=zBVc$a=Ttn9lOcT^@OiU_>E>>w7|hl$%Ugb zZJ9U_=3LADe2D7^c*s?WPyIS`ULStzSxrv#d>Uo8vUSq~`}IQYeasRMFvlH4%%V}7 z{znWUz35p{VcH%OuzW&}9@(KVLQy50gTcc@6dO~K>*rk&#&LZFL#W!bYsG8cw5^xF zEGv6T0i`PH6-Ih9EXo9q=q$z)6c%!>l%xgQOF0IZJE=G8^k-wfxvdE2K6b<#quwVC zX-^dxw>)iJvc8v&GUi}PjsC*`ugvKUB1Adfa0h0$!VzJQQlEzFe-tb8{&!r~2j^L2 zsrU|)-U`%$`mFHZ>-q!)pjf-F0?x!sgWehVj%FA%Ow$G~T)w*X)3;AX8Dd7Ec5EOAXJ zk2|=TWR>ZqG*N=uW~&e4C-henk$vKSP7KnDGH(g*ZulrgZ1A+gHt8%;BD87*mmFCe z;!cIMa#iJyhyj7@vsM2da(O(_6OdzZ7~2}jrA2?|kjy7J>|2aNx-V5QByNeB&yb91 z+<7&vooX8V3yT0=dV*#8T=c7(7}a(1Enb7uIyM0loQB35j%Vy1rCRT|+XOt#1cwXL zV{a_8XZ_mpw7K=IP;`w6EVjfu2X%gKdgntHB&Eo-q`eRc*#>7isrh3GsE*NLeV+fq z3mVbptgxid(}9MzNko2hurdzg)2371>wH+KCPKE zZJ128h2>+97+63o&ji_2>-ddPEcP+mHvtUGG}o%!HMTcrBo+DRPj!10#(o0GJ_h=m z^n`&6{ZoWtM8-e4I62~ncMnU^WZQ3?CVU%noaZ}Jf$86MO-FgFK8YLC9`efXH$MMH0#M6$D@Bs8P4~bHHsYYex30d~wOqUI zSu|B?!GM`(cf-~&Qs}#Vm~Eg6K~r;!{b)w2@ifEF(}Cx@wE+eNVTHaJhN0A}S9(42 z`i$P5_v!STf;X4eZ^8n?x^U8N00TS+s)QLQ~;fw`w z9QWc&PUz)M^%^WnN1p(+t~iQ4o0aP3q0kC-2z<4a1DMzm9MhAEyB?_t#P`ZS6Gj=3 zSnE|OA9%-?8nv3=nxZ6o7}?B-ZbxBDS(I}s7U#-Uam6@*4l+*G&@LxizHs4A+xBFa%If-z zH}XZpq{cBb7r{!Bt5<4{Ku*tUtUF1MSXe$hIzG}pNbQ|#=~Cos#{u%t_cJ2)ihDr_+w^r(e#ZtTsnkvk%^~9M01Z5$9x$yt^8l)KOyLx!f9^R={lijENqbwlGz? zXF+a$$1>YEUjqB8m_UG|HziW&(w0&(A|(U1hTe=`%C0WMDs3^d+!Ws7OvfcZ|*j5cZdh=`Jipott8FBRCNc)PKhXZ|>YBaPZh40I0*#4S4|I+-Z3y+|09b`UVF7* zz14~EtA^U07Wk2kDV5DH`LY{o{R!XYnz%0xRrw#Tb0S9cNsTbscEbk)MI@*;tUo!& zgfC%C#2jChCm$Exm7I?OCQyV*_q=xCiD9W7Bg$A3p4pSqXIQ+DhaD(|cQgq=6Dh*A6v~0e1uR zk3+Dko1!-DGbf;8TGtR6G3`mVJ?)*0MKSwCVO$vivFC(5EqF_`#cAU@ zWZz$#69JL#OlC~!QLJOxGbUu-Z8jaXHj3&UcDNl1-k3p^^Px+2v@ouKGYIIe8zbe2$|NI-&!k#seo;5rr%=s;(fm$Kr{D3gBU2yokqUH$I^vqXp;tQ1YjJ0-{CdI zHncIF2qOz~ha#bZdUk7^9OSr^xyMSi#x~GQn=QpoXS)X-L&=+Dm>io^74N!Q?1#|- zo9Js!nz;#+*0dJ>R+4$NAb&^d@b*`v(I^AFDM4cK3}AoBm0SpE$7Jg>U|LAlHRR4G z>0Tb@>MyZH#%?g0LEn-b5A`e8Cyvh0yapd(P~FSm+fdu(WL0)wv;pXX)1SZ{7UiLU z1S0g#hGJc0AYf-kSVrYaqwsleAI63!x}}(-cIlNb zbYX0GcGSk{b{X!MpV$NjBTrVRv2;b|Zx;wXns;X0E2)!{nID~RWC0{}&V!^7@ynyv zC{gkcO}JEKSWu77+x3hkGQN(d&z#^p=4=uNz9izDWs1{|UE9kkK)Q^%;6l^ZASr2h)$!7qp_~NNp8c`m4wA*{14ktNBw_xs)LiTTjJod47frTa zXqZYrS?6Mn@%)D5hLB7+&Be$lIhID0&CL&CiNP$vF0AGwb!4a8_qo1SDk85KHUS~- zEF4R1v;?F9q2ptKO}BEFwk`A7P!XkcuL^Tz|r zzvHls3%md8r2eP`c1qnzTvE}-QE<&*Nh!>O+)UN9+}ElhUmd+c zFa+RMdL>*1m1mQ^WP^=29X=%ymyQ!ELyoiqCf!o1A#xdZzAfzgOz z=#s=x^cv?4rQKIXWel#yKLPDJ%zx%Tx?fRdS*4dK<1@gda}F%lPNx7adP_W?{?+HA~H)w?Z)e3U%pL4x#Y@B9+2ZkC2ZMQ-p%oH}V7^ zY(}udA$DdZTRWU8W8$ud(%?Buhl+_6os5p_Jcvl$a}Y5rR4&_x85z?oXGW|*up#gR z9kWc3^jYA@bzGhfl`T2$usk`P_%0B!b-`i<(BlLdGvxny(s>gbE7cj5Z z1Tu9z7SoDt8PLS!FT71>7-%bJL$k((AxxidC)x-4(=FW;?2o>?r zu#_0}BLu(o2|7(<%zU-@iv>_{z^}&}RfrTm60RI96Bz}58ey!_zNim60{U=o-}@>x z(+aa6$zOV(vHI_8=Bi^kR!zQVYutc90M=gYOvCjsavsP+LhmJbObbZ{!_T!ft8 z=&p8ec|d9X1oi`D|AM#HY#Inbg9mfqt=JAWUt55FeBGq#@;Nmitz(?m?Z|5pTmI0; z7*89E)PzQIAGSuv4vpO-1lpvXpp|wxbqO43gK2GdZj~%$TI&o|-tUO;G}5B01!G|L zoG<*-(xe$>il)MY9O2wN3;%aS^;$b-#N%EHJc@AohP^Qp@IB0h7wOqG_eplGWRc;` z4tpmCy~pwgW?bkfEu|6{75NFy4&qmmvcR;D1dCkl@e+d^j$-GP3QW;Co<#JU{j6ji&X}u9JS)`wf#D z<1T7)ZK{lX1WOZ+Mrw0SfEw8i)s~=9IBU$EDLmJ4*oHgFk5T@h(a=}Z)J)dXo8@hJ z2mvojpDxL#X6KPxBphK{=j=7zc#G&3_r`jYfC4PmK9>{AUy?>K%%0(qfnB<0(lg*N z`OVG&7_elA<`a{-Plp6f#%A+kcc`Xlv*#DQORAWD%}B`L*Wf8Rpk>Mmh%HSk$-NH6!<1;;n(k|ux)d1ucR!^dIy;aVS{t&IeBR;$`jN@ zA=%9rV{Y?d#V$c3HAZ3?|6W}Qg~z_Z!j_I@5rmI-P^N8rCWxqG?>@c1j9w34xw0sK z>R1xMCkVl8wiKJ2%`c#kxCi2Zd|Lar*>A$~R62j1xU>o8Y_ScER7<0%4L4ph@A?WDO=)!x;l)0ry3{6q@;y> zjLTgN9(cL_XrM&^@ycW{oyNz3()hBR zLoXPS#JCOK76Z%0foV^F^ z`CvrH=+Onkf6)hx0_)s~4_Nq17W2eQb4k})fX~gm=le?kLRjzy);Sjw5dG9~zNl(0 z6~>B;A6LA^iHbn|(2#3-LzmyqJGOp{A%N3z&jcE;k4PT-*0V(2b-me$tPLU!FC{ID zDUux6t&bQ5u}7T0OqI4t+VuYwpONx%-PDGVPZ@xt&>`leSHQSr>gd8;a%Id;F zGIAbeZm)Bgh-zqyw;Ct{5AG%^W>0f*VYm>lD?86g6ipP92J^NfY&FwF9-EgkaklR3 zxlrPioDckil-q(*z(JD%&+NwQ$C-HK;eRNE1Ra~UB#glbWb49`_SaE2=Eb)W<2x6_ ztFzBZiT-X(XA(#^Txg4U7;6d`>ap@Z+in1#y*DO>lT$?4_|h{8fUBEa?&YGQy)j3& z$ZtKxe^1Ma#pG{IdnX9t1A7yHZ^FxgK_VIz*)d)Z|*X<3>COQ zBDb5;cZLfEIj>!n;$=Kue^{?O?XfpknDQ-N{AH)^o%;yEY116&@+Ejt2->HTUn9Z-bTdJXTURgl$<+mTeVY%>SK7tH}6tnrC z0KCW-a2ExBA>n3WRXqb-1TuUuIXU_3WjoPq0K3lglaxqH$@o92BN~{{sdiL3$7Eiv zgQJadqeTcD4J8ld0N`t|cJK~uBg&)c3IOhJ*ariB9!wpLA-mwh&FecJOe-+zo6BrM zPGoI2+k(2Qf)!GI-3=MTPc#@^wUrjmJK`ZOIpE-*j0jYlGYGvafl3lP3XC}GhPZqm zihf!B5*lZigAV0nvQ>P=z*RJS%ua`xN>lNVcH9ASn0q7FxDg2PNt-QjzO}41F%t7S zlgUf*P1aO5U3X9FtJ2Rx;MTUncoOV@{}qq4xBr~1SZk7jX={FxR62khHG7mxiokjh=e3T6!M1$G@K}GxEggb>OwzBUuK|IvINItsj$(}Vy2U!_{2e7IoO?^_ z13s-&IrI`xGhjcRR}Y7vxGB;+fQD2f+dN9@1nKSt>ym>JStRpMLGNd34iCJu6b#{> z(#HbY=N}+xXEpV>O0gP1xSS{0Lvw{iTjI4v_iYcx<>a;h-gO`?1QooPS~~-fMrqe^ z^0BG{KzGhv@PYkjnaOVBt9nVR8IE0K2Qk9iip6#bl_vm`MLv4nBj_)u6WE^^eP>5x79{HQx%yznf~D9Q ztBNKJy=7AFok$~(v0HfbCMxZtP7wSKSsCT?udKr72?GyE>Db}Q6gC|@=D2MNTgO19 z$XQlQwI$Gn7O&nuGaQ*C?^zteTvl_&V{`k5xYVH{9}|4v;nKhN2l)9Bt2ONU|AYi` z9h5X44z?Vb&>!K4F>~NQ!lX1OTgsM_k;qu?6HDAW6WivkZZ4_rg#v~^7sn{QGQSwQ z5-BX<8!hmIps^DvHhFLlu-4THAvCkOaa6YGfWz0?2{}6HYb)Iy@Mz#@VIy*wv zK4ZUT9ytnDcqj#HSSego-|h0goh{)FiW|VDZskzR_tIBgoleplwYh@fOeUXtkqDh&z&fnBv5DDp)6HSmC}3YgS3`%tV&n*ZF~&QjCa}2; z#O#}G+koER0XPp&E^>3VQ&aqy4zc^2a)4wFX2-UD$7xCiqTwU|3JWk{xy`51^f(x4 zUDaN%vhe|?9X9d(R@Y6Mi~RUG3&2=noQ@Em3an!Q<4$fO1RH}##$D7!I#g^D^tK^D znuu%Mg#Qtd2qh`*oj>cpFPu#+b^?Cl#$HN1(jRgQu3eHg#~$CBjHD-rR!*Q9*VweV zvu`((+9w8fx)_{& z;zJq7Z&OpT^pOmm9WYTGIK2iDH&_YKHvRXfFe5Wf#>w}RA?X>A_rkhRVH#`&a5A_v zlRrjQw@t{epQ7iOphfSDjdIkyMcSmqw@=xuJ{DJPXOhg(=|Hx~eC+p(K3|uUJlGCP zBjuc&d{SbxAn-|?*EgG*;|W;N3jX9{9#q|`DFQ&S^76%Osy181(ru3eKnSMKG2CNk+_n}6?r`=WntZa-CDFjjaa#bN zAkQE(J47O!8!!U&aGri-yFN|s=8Bmp@4dO7y$`~s{pL-%xcO9&N145O47oVXP5fG5 zdAM&khRMFOlcSjq#Kg5+jHbQmPEsH`a{fchEbonsY9p}60Z!cKz^^^d9XvGtpF_1d zbXwA{-|q|I;FGvU-Wz~lQM~|es*Ufft7~040a0D~yZT^QqzzTk>~b+yj-tT2h7XGT ztO%(zS@@70ts~&>xs);GcrO7-#k56k{HxxXFKNiv&U|QZkdf4M*RZM7ChmC(pgvCc z3(jE3(zN4S9TVOYNpY0nJp_PFx<#QmhjaP>B(D*V*hq~nEjqe?U5qsB=lBDp`0GNS!{h($eypMHoF2uWPV z63Xd4vt=2fPbb=|nEqn8YX<&*ir&S)X**GU@%Av6iHk~Q zk&Ydg??*tV*F7qt266XwHx`4v-8md06R#K$8rx^Zy_Vg%F6QsLo-1J>9 zg%t%;){P0MPG=z(MX z^nkE8nuF4&nm;VDp-zCc?C1eBs%DmPp9^`uL+RSd-xY1Y0Xpu73Bj$FFanJSbr3GB z;^?|c7L~Q8vjr}+OVJMy({$%U4FFm--%HU>c7>E;x2D~RAS%~(;s;(`=3}zUhvGbrKmJ8IL>F(icPz-w#i*={OKD$Jr z{*`y<^=_TvO3J<7-K9qC!p^;o{VD%e!;>-jAb7K?UTPHwHFxDQ4rCT&^M4PB&vBme zN;QS|AL0t3zA8VRf~akonZ)sMQ{6qS42HYI zdreGJ#pE@`v6>!TLz{8Q@!Vt4VG2!}N@`?vrBgGkSZ;|`l^R$LI^3sj zWoxm}o@_OB;0dINZYZMZClPC|P;OiJ(6L5H06JITH77bs115QwWO!Z%6W&H3IZ2U! zm7rxLqa07u|FO9K-PZ*g=xe?pw)pCL%5jsE-UJe>3@760^m4q$`XnW#Tc?=2We{2g zD4iFo_H<4xAGS9qoBlKxidLeLw{(>}0Sp+rI;TC%ALk2Z_lybD(De9lAgfEAX+g`*NtAsh(`-w~vsI zaY;MA2RH+rb7d<4U6p)hsh_g}Q4l$Kzr*G$PD7#?GbOqZ?JDy#Q`D zQ>AyPccA>pxr9qED<`urlY3Ng2WV(oot2!eKY)i&TZ3RFG^sCLu?Os-v}Zn?JQu+G z_fzrEJ0RqXSZp5p4_ndU?Ea`JgRrM!bZj31|GLE{OKlo;z@O>FR_C>8H+R@fUdSum zrgvVF5T}wVn(fKV0souIal{1JTnG6nH5>cW<;IkhYqxmdsVA1u-onZh=JR#AgUVcF z!uws7Nq&&%iPG`qi=$AgkE6vAzcuyLb!ikUt`9Pquv%rve|kPgOTNiLOgh6P6g=|P zpjq7vKwMvJB(+ict>~uLFusJG$qs6~_z8)4_){O4}(%{c_9gHq&7^1QPuF1e|g_1P*x`L}nT2u-UKF z-S7*iwkVaO^O#nJJ1k_3Qd)N3EL);NG~8jR0s<2B2xNJ2eqnEWXMh-`w0t6-t{%6n#8x4Ln zlcXKDG-q-;{-UPRx$JWg8CdrWV-sw{^iodSJj!XlttuO}tOW|=Et}&o`I6+a@H=qf zEA5*!1ZGy&jA%AGf}yP&1$*m4Eh2J<5dHL-)nOAQH?3g|Z?ZLlW<#?1)L0{*B|N6J z%H;;1+s0eXhQ_s_cez2+$lg;y4a?XGX#;l|>9OxYeCj#>-Fyc(%4%v(^=sm^jZ1Fv z`~Ye2t{PF)FwNqh+8(Ia$|L1!a1Kf=*}IBUC*hx5H!;`%m_S_`vGrz z45B$*bH0(dIDHN}5M|g2|3(Nvax>X2t$)z4kuW*0i%lrucRoaD_fn!9!s~M*&&s@? zYT(dkWa>B)hDY4T2z>R$5jzLGlaEYN+%VXX{R|5@8m@y0u*ao)Kb&NFSEW{ZVxF7y zHC&AQ07Nd!rJI6B9Y*HEL|^RIUT?PL&Sg zA3LJ1E5E!WCEXt8#n70&$9h12o5osB<50+QM9Nyqlf-ke881@bz$xoNPs;pS*XkhH z{2RF6xmNb%&XcC0fCA{_?{AFShOU!ThX9=+7_Tk16Q0t%IEm5y#^IWTl92HbLfpH+m*{!SO7wwZ4Ej^+3 zJG+-GONv8Ad#C+nK!Td7{ip2Kvko-KDvNEzkb1KcIH(*z~31l3&l3$yK?1Q5p)F%>@%TvY*Q1q0byB%tQ) z=^yLcrT||Tp-x}>(S|;LM@n9aQ!(NKxySRF=~Myqi7h7mc@}B_>7zwx&ZymyDhp`a zJJW~1CTS~RyWxnI0Mz112r8kVnyg+HPTocjorP)809PbrW19~?z@yNrS@My3$)e9o z-9u0&tnu8)1`+by!<~|wS&>A?EDfQRPiYnAnv7J%o@D~Gcl0*(6auzEnZ<<1_+jEU zJ;7>x<5!92 z68WfnV!JEO1;=U)J&wSdv0zdBay^s~uFe@PI)aODN2#+3(74K4F}GKe!YTeIGA%UVtHk~|Tvg|SQ2C+P z&Mu!2ZQQ@Z^$sV?UEqa=U6jJFAArhjG*oljl&u0fR{uN)pu8*fbdz42qcgv3$WD)xoghZqR57#? z*(>Y_0cGO5-4JpIug7iBosYxFv^Z#H42NRz`lxDt&5+ zrX=MrLSYN||AGo1A%xZkvq_iB7WWQ2*k3Yi#$rCr%gGL8)fz0&miMtGYr;!pH z;?JtoM#)WZCV{4*({sip`-q-71$e%qt?jaJwJY``6H@8BYN)r%)5vA$oYE7;-QUuF zzOl}BLNCv{jj3w})5j8%QDtzklGHEd1ZvUzRK`&Jz(N=Vs;OIOyCTNF7AkAghMA31 zta8U%!4O8x0ks%3a>AB($?NOe75kOi0T}*z6pw{Y-3D2PY5krAwBC_Rgm5N6XH1KR z7%RNy`pXKZpQ)b{%suX+Th$3XIet7&L$Tb)w**dlzf2NLef0pR;i{XBj`32Gn>le; z74_uW{sWX89shUmtWJ*!P274j#$$Wi(B#RRFr?6Bx8b;dIigUX?2c&!XXBY+o*PddK=!!eQ`0GPzM*|(6ut*-6t?N!Az*+p_KDMc zr6k0qWjREB%&~VEs2yz4I!@&K1OWHw$6w-;1X*rU&Vm6ihwKzQe`B;*Jx88_>I?$9 zbW}D)d7llgzox;ZzRXnZRn-+6!KCVU0S-^<-cOdt^ZQ{2dIWM(LP~#}_d(u8@+TPoXapLj7vnf5c1RV?dQf3vEkmrx@W|^M!H+n(4U0rStjj zSI(Ixyeqsd{4<0|Xe>R%{^9soUSY4?E~A@S&Hc8BN?S9MZ@8JnIO_EL27XbIiX+54 zG!~B*yxuq8u2HKn%x);c6J{rUhkZ7X&|5lna+Qi)r+a z%n&STGw{sXW){;_V_O(EzCr_mQ_n&?p56JHSm2TlxxRBC8xGYT!x*Db>M-!WZ=tf7 z+LC$|T||I-kvFPwST>%V#tI7cwy**Vv zs`Ki_7|XR4KP_I-OK1@tU7MpCkFQc0s=nP$2e<15ImF3rPvo&cKOGlf=Rnww?fQ|! z@6_$be2nw?o_SbiZ^o`%P*_wS^-c~djk`X=G-Qiy9S9QI%50G3H+_>Y=GC5c7X5*Y z;#-dm8gVDMoiWh6&xRJnxZ_3oMj!y+Q4733O##N;>%6peWYa2wX?+By5T*S=a58pF zWXfo;V$g&&{>Y$n7>+n0hJ0?jtC#eN*WX3w0Vso#H{R;ESl`;#f*Wl=N}}w={^TS# zHv8SRU_pHjOkHz3r!j1I?Ka;ww$ASsRt}>>ffT#uRa923kqO7QR8NPcvudlxGSc{- zJmUBrD}0wReK9wHjL`|uRI<8-(^}R$HsLGn)&%+fBA1BkKPmG6z|KJsk*PiF6hA;) zoSSq`z`Hfz`z^=8(&X>PhE&kJj1j*q0KM1&5_PV$I1R_>gm0MT=xFxK!r54WgW%4a zl0{r+-PBlZ)qs|XmLq94Js(YdJ@!f&i<;SyYEvuoma%C))zo7#y8D1Z{g#(k({F_yhCX}E^m zk|pFyaG9k!jp98&`j1kv<5t;1QB$eHZ8VnVw=!>S+OGpNcG6e} ztqP`Y^d~L=-?bOvIT?q;?5>vm#!bRuRPz=ka?1E&^Zc!Jv6B6FFiIuNS?*v+TUXn% zGPen@G|<}_)4~GWK*aCm`GMMHmsG!k@ZqhONq_+S=RMT#LcUP8>~)Gt8_?(@Vfj6^ z(vNRTYNf*Z9e_ZK;@QvcF)-a&yt2?XXl<|(LK|l1kX{c!ozAQ&WSNExY zDj{EN{%to1L1QcbizJT=RXaI-VLxk0uyADl*d!%kXz#D2VxQg0=Huk4&otKopi6?L zUB#A+oM5jUt*GZlXSL-7(g!*a8rE8_CyejdTu+B&dt5sU2l-EH*V>X*{oiaizHC4x= zArNIw-;&2z<-}y{YsE6M2eLJqevBC0yN&BZBH!QiNl1W;hi}LW5_Cv$O-W22WofLP zS+B);BBMy}zXg0MmO%YvLjEk_wZ@SI7Kh{gR`=@`fHBX11R#kr&NjHK0moD&rW z+cV-&^fQ+opCGB+`k<*m>zt;LApN=AGGYb(^909msQG)DH{TND@sr9EsshIi#!d*5 z{U;1wjHwPRT~HUY`OHw^yA;UTW9xyB<^;p8It!CUAfU?JXQw~y9aeuCRe)3cRAo?A zfmO`$crDx3R>h+8aDRLgu`;wC%uvi`;d6vR*6c? zG8}rNPR*Lqj@>M=3@DEJ4O6S3z~zx(hf>=|sijjjrHi@_V;|qnXJC_kW=RhGiuHMQ z8g0ulNMYA`KLo^RMuv&MDTk}74-}9nmyOL` zaJ;sDl1_8<0f1q>P?fRC@S~Pm?8yxhkj|%szs(4;P%UAjv5}6Wa8JBcefF?Irv&}q z5SX%kuYi@aNlQ5%?L%FoCL!M93(t?OHyhHKFLh%~ImcaAt>&2<=W*3%!1hrXGnLjJ z0pQ8h;lCBR~18Ui+aSmmk81Oa`w?b zReF3ykzb!UmR8%t{?_y>s(}tgm)a>$=>|0oV5&Ar-;=gDGU?y;*YWrqN1e*j)EXb0 zW!=c-RrWyCa%Ynu{4)elL&_-TO)M!qe#*zXKh?38_}+YSeM4HtW|BWeITNY6+B+>owQdcEKsu0?!!XoEK=F4;Wy&m&O4bK77qk3*7f4eKXQN^HWpt95i#1WfW% z1tH?q{m3Wyv=%i5O^!|#`jtF-E|K&>r+T0}LV*{M-*J;?%=x74w@%dUuo-`WR=0~` zN{?6M>vKcrCo}zpvN+sYIU#ABU9D9vAC8s)yYjo9w-s1UR)pUqhgFvjr5P}kS0NUp z>4eS_RzMhNdFlBhHAAq$7;)b)Da@mFPD^R=4UBD!P1mL zeG79dox83JyJbq81yEpRux^doAeD-hGl(YO`K^|kMpB77cd17?2IIh_tF_BG9FOhH zu9R*^BhkhMX39{-G#7?RYnWPiH+c$Gs}RPcsl*s;I{v*s)mu*9MN?Ef;w|H_l#xum z`-lUm!4j-$(pR+mk7S^!KS3N{;Bj{`^JV^kunowk-V`M?hyU4%#sqKyNYp-sUSe(& z9e4$yME?*%?CM47`rEKEjBES0huUNg#qLP2JXh*9g$eeLKtR#2L3NhC`mmu3pr|uV zci^2Saz`OrVE$I0kEJj9(fMKme>(!iLiKthfJE09E>JDoi{pN7RvE&LoC$Uwb|wMQM7sv?3*ANRT^ zZ-y@6&99=(zlW9uu`N*xeGcRDd-dl*tI=TjBOp8cYwzacG;UwGC7I!2+_j>%)QL#)gXQ0-86N-Ma2}h^tn-tB#ry;^}eHJy73muDOXwCvbw!+BYy}Rkvt!IUo{23h$fw^2xfg0IO!bX% z*aI5;pzeTXCx|ee9HrLp%dQNirV9AKg%(jxt(R@HC(hB0`z#LaX-7~*Gp6PIQh6#m zH!XQyV&77@DYR|7dWGf5gD6n4rsuzE(_+{8In!yZ`lPI$0pY}ms)qNtKP7!^6d=}i^40YHKsy5j_8NrBPsH}+j^SAgqA(_oW-X6^@N>H zv*vSbQ6DH(`+sBN?$so&6HmomOiK`)CXq7wU*H4_207FCs;KKV)R=30I|$or>q=A) z;tIiccRr-=dd9|iSUf^-3i}p@kInK&&ZA;$4eskn8-9hk3w?6jK72_9hu5$r%?LVe zY_U(N@%vLr66fsEQX(oX6ScA5hTy zXNmj$u>^4$(Lb~!@Pk|l#nVN)=jRW0LLQ3>A0r6)Vj4KQ9Ezl#`2sP+7mF0@+7I!~ zGhhPV{$`&I^x?QqRjpQ}cE!PD*~`{62R~-;1lgto)SNUDa{T`7X582iw*-f5SJBgP zmZqPyJ&=GbfQ;yzt5{hFBS_V=w@fxKKT4ZlQ}cj3r;!VPSO2+!G(m@E_i=Hl3@f9YTaup9 zueVhM@Vf@uoiwbV4ljM$!Xu5*uJje8(34P}7u?+DQrH1icXG}cXF@Q~B zD`1FZN9n*b+X!oY>Nl12Q}a?eSc6K&`s1otz5l6m33c)q_IVgiC)V`vPBn^hJZQ`F z>1{zD*U21>OYGEa>p1bAj6qd4evG)bGHvMS$RGO-l~WH%2^CTQ$#M9$@3j6LXNC6C z4o(R0&%2`(`~7U!Jdn%y-V{v$YDN3>Vq4i$U7!<3M#wA{RhE7#5Yjog<2jK~s0$i- z#7K#&qMx;jPWy08RoxtEnrQ#IO!{Uaw`=Wm z0-i!+SDWtkoC#ojtQYAc+yWW(j$J zml!cWSjR;s+Wd~W9&*BGe@%Xp%riGTY*)A$q4n<80BEqBu|nE|)2iIHRxiMF$;#MM z(;^c!S8cII9iJI?fNFw8!x}a!4D`@*E8oRiwiK#rRF}|suL*MG*Gno#D}`R0V9`YL zawtIeHD7L~M98w@h#+Rzt}Uqqv~;kLa*WZomm%8@OSj)jQ`&)5YZ#D)rtLF?e1(3c zz-puXI%G>iVBbL!x8!?m3~Kvk>##^CV6F_7 z9eK>KAnuH7`3PfK-vG)vtZxmQ4u486sG}Wz|C}!+E`4~11n5!~K~A&M*i$LqHKd$3 zrDUUg0D{i|F#czV@34BrcB8S2(oU#s0=fzv=6tRSn%B7BoQLt=)@;J_--J*uVzTE9 zqN*w5j+pK|V%%lYOn7sHJ|j%v=ytqXkh6VWP@0XC1jyXge?q5pU-D%#1)BSsNw;&n z&-$LxsO7j`c;|BPK@{dYzEFZmbICoR-e+9}{!FmaTO$JV<$K6*+?E$K13+6sLtUr#GZ;7MftniQm&+wbMWLi0 zM4|h{LdYI=9J)n=mr2jJI1p+LMDz)idQ>|MwdJ$N`cagL;B%ziAqj<)F zrw0mZ$St>atmC`Hc|B@pt>Ihrp{ka~MMG4#`b0`28WAY{Wgbu(@o#3>C9t;!hm)?+ zgl%uHt7mpklngo-flv$U)&F~3%?G<*_rSS&!zV6Ir;Q!{2nnhLQH!{K`pL>FDsco7jiNdTQkBz0Y8Nl{5D^mlXO}D7>CfzoLN!TXuXs>hjQ^X! z#Yreo3Qh0i1*^0UYRzqgG|r~{#(Dj3E)o>xxlao(Sp=Y*b1QlOX-1XFd>~Vn;jjU+ z+>1SnJ@k19D|eZ}o|t)n>Vb|y?l+fcKx|dFmA_$V%sQ>)zPR03Vfg^?v+NVS0Qk{4 zl|FIsdj&{oq8@30sq$&XwX!R=-fXLOI2iYmY4c{8;q2|$k z8u|P({H`Z8|^)I7cODr1IVqumppN}M)3V)S@6&ffV z!ug#knzMEE-BP>cjb|k5ND|(F8BY8iE)(MBIYZKorr|lYMEi<#6`*alAie@9c$&jM}LP2 z{LDc#tP;(v`qJ9Q9zwF5dR&}J;ISt`8N5M&6dX00Bkzd2w&8hd=2e|GpTHBh<{?6fO7SY?4Ko)u;uNryHxN6EH5GcF3h{W zc$HJr72VN@aj&!SznVhlILxy-?VnHcfw3>Q6pQ|=Cnf6{l%=fb+io9C?)H%B*GkZQ zBRGr*a?j==6*Q$g&UaGuIu#-0BF;*peYk3Mzr=|yQ*t;;t+SUp%y93Bbq}NuB{e%< zL|HlizX4u?GLhL694LQ4`)Dk1iq<85lFs09Xu>BRn4BEHw2QE$+4qtwwRFrhD)t2n zWx&q+p>$L(2cP^u7vUGYyGY*XHmu25{};7+?EWfUkopo)ZD0GL;|_4ECn&sw9e= zegXi2oU!_ps)Zb{GOp!0JxJ!>MTc=dr2W_i+EhWt4yN8n>qbn$Xv3^DQmG8kfbU{G zm-j66jhs{?KVa24ge#iz@A;18<+RB%A%Tlj=Bt~XQyM>`c?n9PMm%w|@y6tB*z|-2 zCb7!U^IelP;9QjzIq?`|d~Ur$6#+vcj9sO_gkP5MI7n8_`2?|UukD$7#s_S+S9BJh zT1ym5c^2x{Ec=v^y6(2AK?o-I;z}q7vIF+B*Fgko7N&ivkndo(>obO+kGNCN90u)q zXYE7v{^mB_(7-yAz3t~&1Iz61h7G(S+JXMhl*)Q<4H z_*f3bCD(=uQOZVb-KaF8@A-hWy_4g5$zV>bEalwdhx+=11`e!}jinl9?R0X(oE>aY|cMY|r~6u%YPc>S>D( zTK0j7T-2H11_M(A$!KH$Z~}v->;U!Op%JmI4VXyQO&t^jDX>gypnnunP5Kjjw0;k> zk~oC;u#%~6P6Xis5IVLtBPi18sHoXsX}9+1Wn}B;M_5%i6vxw=Z@9aMqh5Vnw8M^P zu6J#os@Yw3XwhJ^o6ZD?ve>JTnRnfb4-%0z@fL$&g)L|wR97s|AsOOsKeLsg@$rml z^2nUg9kDhAHQ=hvI`AREmSqQ@+D)cRs8G(e7FMWVthV~~BdhiTLL$-HuMMd6{vh$m zq#{B8lkltEa~oY)Jhqj(Jc4yr^_4#c$?}WutT4-4Cs|R@L z^OoTPn6-46d_Rw~g#V)rs3SCil!a^)V)RbvTD0x<2nXPQnPP1IO&#u&ViJyeU5SV) zxxL2Qrl%p!@y=Y90IN5s7RL6gy*wqmLr;A*clyF3;}QRbgtC6fCS$@vvBuRfbW&Y8nud-i45ELe zv`jS>=}mgTc`YdKPy0;7rtcKNHBu*5_l!p+^2cQo32a&uNOg@R?NZCDpwe{H6|L2U zqVEgqVZhUYt(Fz%a8CVs|0>7PiMF603~>bV7iPdk8f=wfi>&Za_3soO_^dSu0$F== zf3=D3>SADC+%^|R>dwt)<@&E|Wuj)XSY!HeSpsYELqX<)WDl%~e364a&)ds2_+3eF zE>(}0TAiIIPfVR7jiI3jQ0o#J0Eqia$|b&|SQu4=YdfJ_ri@g%LQyvXy<_jaX-Q2t zDhBZ@n75peM!jNfO#wfW(bfy^#}xSf#0I$qpW%4?h$-oam)cF1!-bw!?C_W(YbR{K z!;o(!X=>X>z@hY-5HFbyw;7J)*;wjte29O`GeHnT4bpzOCrIF(HryRL&c{vcS3aT7 z{)AR_IGt`|HNI*(uLQ9h?>yx4bNT>$fZ~Xm zH@xI70&RrX9gs(m@v%4O<^E|_nN%mVU5QqLayFKpR4e&RojdM3yF<;D3bKtGS`Gxn z(-A;*0=Rm&L!?TiJpuu-XCjj3Ce>6w&(DVsiYrW7vO~9<)7nwvsYND`dVek-)!%MK z`QYS32XQR1Q{&NWWxbru&sd`00KcJ@k?38DS4_(2N#Q_}dD})=5MQ{Jp_uzkx~HvI3s>2MGW5cH2~S8V z_bMXnHon)?D(zCAUE7nDa^XT$&|b;DIn9b`>~znFPwHyY>VB~3HB@Tk1TuGP5prL_ zV&`$bfCs8OO*rLO&#fm_Ykg+c^_&??2Tebi^6JYlvqSzxo2X&&ts9s_9L6NUH?!_f zrTWL68$&KCwDuv6@X7MX2{@Bfz>~0AXF;hDdE2l- z9+ha#+MebHj(Vl>NSTHO%aM`68Qctg&WyCFZlPx4h`et|{hoj3!bb-AOxeyQENP}) zD|SF`LHKL~;+FT#sv(K*YYee7MLO7-Y!cUS_9P|J$ECL_L}r}sQ@b%hs)_5Yfb-Oh z+j|y-NUPh-GIhzKR< zEftVBg#;00X8h%5)1IV5==OJm?HXx&PHXVZ>0hSXu5f=J!fl&}&eDpembSc&Iy2R@ zS~Z<`q8g|s$!QJK zYDb2$e{lRg9W)`$PgTlnTUiA4>6#+d>dsO`n_sdpZZCgSF~-ZBH7NcRiZp@-fGqt0 zBf|$_B{?Rnndj24CZkbkesE8X-~-QKb%sB~HMBNcA~t*iOE$jdSLF+wE#S644|$oR ztS0Q}Q!kppArZMPF)?VY_~leo%8%ife$HtqaQimA+9qPy^pD1vAdzbAUrh4@h?rt~ zYeE*Lr}1F&Xvpftz|(giAr)E^=VHo@yF#X-D~54S+Yz!ZRBa-0ZL&H_+gGPT=`W)H zDzn@p?;&jWrkd~8CK$&5=Kso>1tX3W`oHvI&)`l~v&Zn(6csrfn!|~Qw zqVOu^{zsYw;^|Fw&1?^;v+P4%xp| zQ(7iK!2E1ls+YgarECu5(kT7MJgI9RhKdY(4F1kdc zs)L$Qi{Y)Qt^#cTCRJ3mM%NMrpn5GqW7?`V23y4$0o}IjB=CQLLO-X+=cIJBqUA;e za=y{2F^b+S0iD?gO6y2|`a`s&2lKTy=?4k)f%CN(HNSvm7++pu zSc??AtXfXWYyOa} zXDop~pytN&<_2%4vDbs&+WIO&;I!+O%CCE#CJ;x}>iYN9vH?exR)M_BT=ErnAC;QE zZcD3Z7d3ES1>e(lnm@0fXx!xU*}sMgtJN+o@Pj>lFq)cjgJ48Uois$Dt!u)gCFX;? zB<4+V5c`>mO}BM?ue2XN6c`*Tn!odE}8esni27sfWd2`YAB&%PO&0yT%G zqC{&6y_iPmy3S7ox;ayg$UDtBLlmiN|KI@yQ5N>P49m8vMQ$LZ+L5?uo$*9oR*buM zvM5+z^}Qp0f-c}+r*L~CeYSWO-gcG+piPa9`Qcj6E{i#fZ~raA1}OZyi7Rjo2Vuyz z*3%cDwDb5bT!;zIPBtpNa9-5kOzkvF2bXaGwL~+n9lKQ4R7 zIAXSfQ@eJ=2F~K7&9rVk{*$tT2)ehmKdnhkNm++FZ^RbR(C8T$IAn$E`q3-9U>7jJ z3S?F_MTBCH?WWs(xD^hj2Q^NWKy`dK4c}D*K1+YJvD_KG^eH8w@=b<-egXToh72nA z?Bq(9M64*>i{{`@s~W|3^Tj%8R&Xoh4;7 ze9===ah@ER17nKa9&nuf)iP+^>YY>B2`fKf!agFPd&NnD^HecXjMyrYsWYeG>nDg>`#}#&vGCrR*`^?vxh$NLMn%wEE@{ad<4<6+lYQK>8V=#tF(RY03k*Hsp#OC? zXKAnxjm#Xq55#GpJ>>gIjT9b#tGWJmOPPJPBh=03X14^~@jIHp_>>Hk)kR9|=qoU> zAKN2vUC|_!_efXZH#d|C^f|XFdf9G2#Q`e=JyT)Yflr5)w#?DJQJ);**H_YtR-LU& zmsKN;O*xane{G8sI%G79Dc9M{FvVp~D$E1gcK}kGRngW5pz169oOUCSZ4rs{CLTpL^PYKhP6@2TM9N#ar(KRWx2rn1mpbLyji83LXdH-F-q$#_LUPpH3>lw zHDymdv-oXWh~0Em?MG@X$X6|#h2s;{*PDJLy5p+nC}ye&!Ad+r=Tx2Aw|q(=B|;s(2j{T>hm@^MOBw!$Bt1{f_(+PdJ2nACvU zOM}s8JRgBm~Ndc$GVc6T<{FgoO~2`y)y>+99=642#}U?Fve#{T#i zCt`$t?x8C8qwb-EKa-m%qwZ_1&4%;meP}t93Hiu?zX7?H7W1Bgc%Pf>wogYO0ZUrG zKM85`#Pjk*4A`fHgoHrMhnv@lf2G$l8u36t`ZBasFlS-8K=ux z^<$T6Vk{ZmJ0&OKlCre2PgR1EZ;)PL7qB(p?s#%V=8v6z%9oE7$fj1M=WyzHHF<5*h zs|etsDEr|7211peVLohgH@6?a_dF7nAtng0`^{0b{)+SJ#okT|R;D7Sq)Uu|HblR5 zl!l!_6AU!$ug&~v#mLv%QJ zi=3krU#-e17}V8{c=hWs;%-Y6l=aTsqnEPeKo*A+eD8?%EP$f953@!9uXfK8h{pNz zr)6qNADRp<`doAV{;X~F88RKG=u*!MQ)0g}I0J)P_gt?@(6MLGAzJOwAg{)>d}+Bl zbX5P`QEy0%U#^5*Z6^}@r2JN!#&b=506KktS6~7=nx!wZ z>J{tZG?#|GX=eCV?FmVRnl-gIwh0l6D6t9k8OPtK6iz)z#Nz`g+d%=7!;a$s+$UMs zF3F!CFhKBkWyLn8=9jP%#vNPmq;Fjxl|zS)Lzx~m6jYhS%Azq(9OG~7?Ca8;6Aj)& zEHfQ zAP_ei_esL;e)_N?Jz^2WG#n*p<3os?txIf*yRltwsE*#>wU|wT3v?yRj4rVKl%OdH zhEl6_L)X%Ov>DDSKuc5RUTUu?^GGIx5oJ5y^4bq!HgmDMl}ytU?Vbh0fWSij9zHQV z>SIjZFa6lASwdkQ_!1m#SJ6?fB zuDXFkiOU+9^)TmI!Tql9j^$fI=DdL%J?37q5jAJqaq86K2!K^@<}#s(CXkmN=je^+ z_3?B|5=Ww^>NM~ZLo-00oE{HlKT;b=DaJFGiaxWot=?7U&bv)~+qvg~WcD1|?zxX-Cm_iQNKOFBNgCM+ zMRpRf9hkM9Q1YX*lOJ@;kJ)n}bhnhw-G?8uX9CPT4}tF4tNGWqte@ZS_oL6}{dv75 z815>Kz*V0U5#FhF36W!bujSL5U?j9xj)+>@{ux%0g;gVUiU}uvT*`1v-@X{@60rl~ zd52_jo-moO?~^R00@O1{H-)h*e?-l}(~Z{OGuDy)Twh?c@ucb*Oc7S&5q?g)9`Q9! zLrI?5;1u`|635MA)96g2m4Kc}$CA9sRNU}eh9m0oJCguinEquL40F+sWl*JU8<0W@z*ZdoIZ#5{441l5%ze25{`mz$+Y6#LJ!je>-s(C4TvrN zz`n{ch&;0F4CcYDW^oqu?K95L;dRKF#0^-J&e)t|DfLyX48mJT)yQl|+C@pyow<)* z&%pEGjC!Hl)YGZQO@}#W^$p72aAepH9tLawr^v)}ObPs=ri257(;5`*m;w7pBiU+% zim65&&lbX_&lZF=F2dTL4QR4|W+K+;Yy1a)Q{`dUfXyNVQ8V^A@7&RRGM$cwBF{eP zXBlevKr96Pvd`%a`*`|6P61%0SDL~czb3}%8n!(|;Tg@ypt8i*A3mRMi8*kkw(L7t z_8uboME`)>hGf#WXUv|>X{ znw>V{*0=Z6pz6GCWyfb{%^RO^Fjo~< z%|K1{|7*`D8w{3efq5+gZhJ;_zgjym3k%FfA-XkGT@Y#VuJw{lx1VAdLPtRn1(o_K)7ML?I=NL*$5v!frum$$niG$xVclB z27br8t}>$8Q(odYMn*B4KB6|$pbAR zK;=&ih@+2Fx8t1o925ark3@x#we- zv$GEbMDlJ=EGcJ}KFd5Lo)d&unvG=yUl|{{#VJH*!{@Gj&|WE*Yzp%aD8i}C zKauDXdMU|NmQwv^U>9sXd%{uY6i?$-E^VP$}>da}PXYSIa zs19@izDz*?yn2atvZ3jYDm2*zeXPf<2Hw$c*X=AN;f(SDz9JeL#*kiprcNH z#<=9J&p8NAj7U!Cx0n5Lju?PmX}P2mmZS71Hd;A-TMUYZY1;kEvgPB;l3 zRZmD_ZRv7=z?FYvyh7mmm$XSc!=O8Ot)0MTE+Jck2H3K*f5AQ0l}tfZrx2x=yMN0a zJ0S(U8~a0SE-uPP%sC5}K*!`|#=5mzIO;?-$?>)ssRXfnQ^!`rOfSB($Ir`9_Wt&K z!*nWAH`L1*2-Ee~tNb&ULS9=h$TXi6+6gp$pK}%hFzd|r@7V;3m)T|kgC$B>d8@>( zT#CS_dbJTK+~2WLFOfui1ptG%c6|1uEhHbMZDlwC9vD!HH-fQQ72E{DI!mZ@`x_va z3=x}HAOvc6HdNtO9@xK$<3gORr+6nKOozlx5aY-5^UL2RO`1Q|!d4nKmIm`$XksCy zya~Y)IRF>`s;-Iy9dGcE-af(S9YZS3$s2Vh9Y*LZG_=&(;-T4HR?|eEWVA5P{d0AD1>ss(FR$P3Wqd_`me*JA)NTkF! z2~#SR9y?J-mg@PzHyQ47uZXPONtzQOZWCUAlUaruH|Z9fIxdohSZ`MQ=}u6KkXts1 zOfREB9h-1DMcK-9VRCbvU0Z2T{*5K7^lWtf-Q|A$j+by z41cJ}4MOMaZ^`;@KZI|LNbm4{-$m={7mq_gRfhRMJDu#S-5U49#$9Rgpmrt_ayXa! z0CdM~4ZU$(Vt3dcggCM?75I4OjL0-w=L1mfMwR(h;vBlEN}gDFW{^fo*^bkzD4YsEhl%>XP<&jnwT(rdO5(CYz*I` z9CZGSZR;(Jtg4Ltnbb|dBFqQRP`s+1|2+r+a&mOnbgsc^emaA|4p~Beb;-zWDUmO` z2?u|J|JAKNy)RRF0&swIi#c#Vz{0laTL#9ZryYLvhfY6UnRx~<`s)Svi)27jb}7?t z9)~8g|KswR5KyOF_lr2jaQ}}wF(TvojDkDl)fumJA|zT%!hJdiDWe?2htJPYw*29g z<<*60x2+;|*;3HMaOelZ?6!JVeByWNUcXU#DD&0Abk(RO>ipMF`UQB@Pkb2F~Gf*%Jq9O-auDX{sXk29mI0vN{lz}RW40}}8EQ2ZsICwH zJHpTjd6ml#6x;Dl`dn{N%ZQ@X3^Jt^|7tIs0P^+TyWe|kE!MvnfVvX(zQN&e65&w$ zyU32H6PrE}2<2rmmEb41$t_lYwMi^JK^S^rMi zvG19mah6!Gp9XMi8YX{d0G#H;GtB8y^w{b*P2OF>ln%GRXHurpk$tuG=G3z$6QT9; z#EIG+yG+qpp9#qfn_JHN99y!tW}8ev(jVONI}F)UqRuvO$c>Ot_XiBDx2@bX5V*`J zf1l`+=qho>B7>UR^T|w?1lGk?LJ>oB`nEl>W_AL~%4d5q)3xi>)|&Y*S>Dz++sDYa zi|V~Ab1YB_NCu+&VbM;Si%3uz7YP{#((4WoP-3`tQzSY9l!bGfaVY)$@GcnA0Z_3M z4UWqGB>OiU8}XOH6OG6L^UQtP1ocX$vSD=F7IR|mFip%vyQ?l$v-GL?8+3*YM{IAL zwP0{dlpNPOu#g^&7 zoNleO(#J5wtn{(k74j1Wcl;a%PcM8hABae`m8%BXZTd2DEV@S0-w&^M5;#9I|FII7 zm7Jy*#-PJAF?&orKHOWEKh_0M@O0t`=f80YffxNjx^yAg4jU7{#p?!)qNOQwyzn7hww zOOLQS2&cGhW6yEgRW*8FcH%m+;??eRP2L@FG;#pa)wR1y&SK;n-I1iu;gFKAAOG4Ej{Ql-D`39?^+!<)!CChMKnR-7YA-bS=>+kzQ zP!;zbtCIW(xBs6zLu{pRuQx>UbIOiqfnn?oVMU67(2R6AnVV$m2k!eNkhreuB-~V} z#WX(`F*v_hKS&;rCW-KLj)>J?PaOWPGwN>&UJr>NbR%^v(l;9=Y9{_7EZG^Aoh2)JnI2NF@0;%Q>s5pmgN#Cvk&kBrNv6uC1N?C~bMx4=?ycgq zKEXMcIFtP3H#s6?$KMAStG?#whOKI3{?qSKeFcg? z!#Oe%i5>d~BT!`%pP@V{MjkjWyIot%)6Z}jANDKz{?Ub31yj#x*^xrV$ba|%uNP+S zH*}O=kIYsiE>-S z+N7aGUAK#<45#2t5;+6(KqvO$PE$nxZm(nZ!6FdGwaCieO4J;rHzSFP5PA^?#&UPc!uNM-6A2kfd#zVj_``H--Sbq2R0&3_; zq$Yeo++~({AnpHN3d;Gu~Fu5UzI?UKprvB!!&)#>YfO`Nb(0BJgTv> zKhU6EUlI))s!Tj<*=8O6f;s#pB$Hn1I5*X8I-2lnAbLbi-r@0eHh@QgHfwrFbe+{z zS9;S1b30$rxx@@$)EQdW1fr;ghMTOOf&PooUfnYr1YEy~WCpljn{aK!qPLCR)mvN5 z!~r_6E*KtSsA$MfS2sM3J=D2Tda{PeIV8ug@H)!I4ADhJvB%xq(Zn!>xZl5&e4%mM ztcW~OygQh=0PX8^LU0|H2QQvvd?`Q$Q2Y6r2QXI?1T-M8jf;IFqeb-);Uo71$4_yd zOZx2w+PakGINh%K6M*|jH1Z8hthM23kb1px^b3wYivutXo|SK#@!hk%5rRGvNv*)} zK{LQH?si_jA|b`E5isI23d@7|hqEl}aFBXGEiAsT`O_@*4ma}%;?|cyJd5UW@+leV zs)wyeLnr?*$bCHFmk6$HPJG0Rzf{;X=x*f`-*Cj*dRRbR>naDvn5NTCo_McGl9%)0 z)>*%dAlnnMZy4q$VMYg*ZtG8f!8q30U;%5(wG9l2?+xqHV$b_g?TdnOWBK7-y@du5TTQIc0>==Bng2OG+X zfvdVZJPyNTd7tT84}2`8*RIH-xtYa$xI<=DuDp%sztO;TmAnFO#)vC}{N53qC)~xu z>XiZ0(NsWWs5bS<9T|GZ6j3F2qbYV#LDp4qoT0*Co%)Pxy2MHjy8L|PaW{WZ?PWMi zO>*H2+3-`7-e_ar#>cLTugkP-nVP_JL1iV8}bOLr?_|dY6Y|a;9 zhT7&0UR7Or^>8J%xl?{TU^jKsmNHdVgJqnpE`0={JzvKJZjbY&QEuLVbc2*NtF zfpOHXlVV@+*andeBUH`8;sx1lA7Jk1G_kSFH=;YI1r|?OYHvJ@5vbdcK)yb~0{x~~ z=Sc5F>6uPLn7b0~1IRy~AxWP2O3x&@#x0I^9(u_T4)NxGm`O@~zF@Rc(xD4XJHgvl*qjX5bvSF4bJ@jBdS__<=jo33@@sLD^x%I?d510fh6 zs8i@;s{tGXx2%Q)Wv+}Nku*~#i5+++$ znh^<3j+=s(m(4Cqxc4erVtI+VEmrj+#1#+r*;!5*67kNBe)}vCFN=6CZKd5wN5qzT1qD$!IQql3uLHblFgAA-4GWgvvH*N@ylu?MEyB%add_qtpo>}3@ z=CMvcTBm#Y_(PlM0HTeJ0=ZK;MOdBs#dXa8CXkaNyGwZFnb(KL=f?DAvse9ODm-5( z`)?k`4VpUNBCqW~?uMD}$Jt*wZU_R^wpfHnw#RWE zI^RN}(fG9j$e!NdM)*fD-Zy&~!A$dGrmBj8sw=;7F1rkl4`q6B1j@}E%qr}->H+Jh6HVW_AMm9^j}Mm z&-RlboF3pcX~(o3-U&?|w? z5Hu(-;Gap|x@J1Vn{vziz>wlO@WYsS{`jh)*S||34oN^6H|sGVcw*F3SV?@Sf2VNEC`M zstwO5+-}X>RqzvA5lT(hLGdxU z?Fr~MI2IN)`pixolXaPesrnUTb(Fitazo{`d+MyV(H02t??<1*z2w@XmsZ$fMS@@Q?UCL zV}qX=8`F*?ER>PHdpCxB`GM|ztt|!}d&&@0GW4G`Q7<}C10H{zcK_b%ZG&gBK~v6~ zs0WOU_n3FbyReX9bVx;?f~39n_8pDv+XZ0|o6Qe47W#|){;?^!^|lc;db3}oiO)Ym z?0E9AfVaI8GDIx{-Lcjc1L8;Gcl8$a4;>VpSPbS@Yyv4JG!)%EEY2w=ua zgzaN}sGrPUn{|KZBFf?9mD(-GUu94P955@JANT1Lh0NWQ`_Huw3P@eE)mIeyEg{38 z-eB__q>beBOk{WDZQZ7k>8`9V8tKE?t|K8Z9mHTnu<5^s{iJ<~f2G9rL$E zS8o|m9toW)fy=LSQ6YL@F?oz(`2Lq{({o9i3SuJ7YQg?{0 ze*K79U@Skj_JRH#F>_n=-h3M}aH3XUQZeMGBrx1PUHycv#gy4qpl-Mfumix-MsvmE zP6~vyF}2}o9gXVYx48WeFt(5`k{=`T8w5HdP7Tk+IK zVt6RVv|?p+gUp`nHlr{7bOc|_UdNs_({@KRZ2QQw3Dt@6-N9hf54}`~Sk5Gnr?q6c z^;S&y(7p+Di&T$bI=CFry`&ajNaTGlQBKUJ`>TreM~5?X4+LFTJE>v%aXO9sfz-E~ zRfxKEn-Dh;>h3YMPIi$Jel4EZ{S?thX=Et|3M+Jn!`3-ES*wE4yU9{$K}KMIngFE!wDE#axXnHe2jUxrq*Bf?3OUg59@$ngc) z`xg+w9JezHm-8C#;UWV)-lhUWg8^My5`5nokQ`+G&H|8hQ8ixe!UAl6)7=P0CSR$v z=Ub}tz`Na9>N^&*AP*-s@^iYW!9BMeH&wp|xH~OZP6i$E;~3@|eHjC0iyCuW(+e8X z_bFrtrSWbXRR|&=IusV{D+Us4n_ftx!~1B9@7&~=+5ZOOF%^&Xbd&Miazpv@vTC2h z+H$FX1)`uKJH$8K)2|ODzDxtB58ygM;7-uI=aqm(@-Gz1)Dr`O zLdr`S8GaKd32~vMvif2t>DT{UZhQg)7^%IK9erB?ie?w}S+lzf^n>xq8+%rC6FNNo zh;#J42_YQYT>@{L>LUHf{bjY$~e~HM5t{(_2|{ zW!`HdDzm|!#OBBP{*dsZF!46vfz+iEYt02c!UC3-QrqrRbp|56$~7C`gfLDVE#!+9 zb-Wp*Ezh`SKEOd-%b2$4)(X|4IG8W5y<{pk%4 zKtNw{v)cZVow|RJG+A0&KA201&{8bX@f}JUOw(EBaPJ#{Tb8Cutu<3;P|1;9oNc@3 zh3#>dm|jRWJZ;h?$;mi=pm-C5M*P8i?#Flg5DCv@XMNA= ztaj_{qP0HnHHKoq{$S?+$Q}oxbZjx{`!h+PCUwD4``7PeHeAZ>Svsw+RpF(`dn*Wm zIdo}^}WcN)Cp(TfQBzg)XqN8L5^o>mj`+kd9I3mcx~S|BC93T#rmjdH!*oZmA8$?AMDZKQVt-bKKH<#KFk_ zR;<1I8(2tu91fQ6GFD6U^cR_iY+jKc$c!x__bsFcR{j{bo%xVN;puqTym?~)n?RNa zN4G7kp;#mve@x$}$O>z6;Sn5t7xhHuCc}kpYnOclAMfw4xxN-bg*%yyYp#_p;@PRi z%C0vMcP}##9I^-XAJN%?W$Io9QUu?Lr<;14?KOgWvENj@1#63NQ{nEmOefk!XC@b1 zf1r@{ro?2wdEFL!o5)-n&=I3+t4HL!1By>9uPC=IPldt0Jw6Y&_>C@xYbGsH>gxd* zYO?&274M9i+>X3zKlgAc%;;`x<>KAP3c?-)Foe4@07)NX9!dQwZZ6;0WeFhJuSdbe zk9`(+esT&=wcEF;(v?vm@GFaFnEj{zd@8n%G&t@|W~iqgcMW%Ac@)MzvQ&$PtE1g$ z@JF65X!2SZo2w|tDxXef@W9{L8%1@z$4Z6Qm-}7cEXT+jo^3hs^w_BG=U45)rLW^~ zLrG3~gnc~8H$Ju4LE_F*1|4~KH_Az4V+0!9;PwMccVpB&dkqFXoD6%ojDXrl~D{6oir(pc}7SzrpzZ&JL zPp&cOYx{+S`>F1AiqAh1oT*<>9wvRITPRj??U1y*D7$VPBn{B=0_^D9f|Zl%SA#NU z&a1}N$**KzrqPq*U%JNE2M*eE*s-O4I;XC<5lDYA26>?l4l2jHlIttSp2fsMTEqq_0fjOtWEg&hUlFZq~bw zGC+Mb`1qRc6|>!K0UwNqiBM~G zBbfPN)B(~pjec=?te*jDHdhc2mlOnPvX_^?xZ4lo?^V|@>8q0v*3eL4kgi?PZAcmq z`IXESfh64>n15kx9AMW|6>|EYM)e-VhH6&(I%@{oEbsgI<>eshwz!Kk_hRunUopFu z=LfTRMH@>d!xz#5*g>`Sh98agyY^JWYm{kWP$sPDp#I&i?3m4T@2j!Nm@RW58?UP+e{{rB zZ8>DvUu4lilaQ!nUhUUj3<&-6VS*3f*<)+bfUmX9!a}=U=p#{a0!!n|1F^7K32^ME zwxnT0%~1p_62ZFRqDaqkh#8N;y*Tn2&YiRFM_)%6d@mRqO6y*o%h|_ieo$f7U`?zk zvaRCa9u_l%)U5{P^m8jey0pYduLAwr@mDlro1r-9JH$p9v%B4|;txUdR7E0dDnaIc$&cY0d_4jxx>0n)2=v>E+wI?uWI3Qu^OlMi4L&X zXPjHflv1j9))$IJ)!tUl5BO$Z z=RFGkL^1I_vsu#>F1fqK>d#iUWB%;=<9h|Jfs($v3s?HJ{+R34u|;Kl3yC4%&0|I% zIf4z(`)s!(3)aayGx$k57FnRGJwGs*Z$xQmNBd$WLaUf0JgE8GgcB!n#+m0VT8|C; z43DuvDzGmYnVUIa<@}R<;f_FdhTYejEvs95+TU$*6x_h>xY2Z?vSmzZ4-6wF? zJT%8`$>{P_t)!d*RyRV$kX7eH>)54Y48JnkeVl}i&0b6 z=nm9ndYS3Afw4a_d%ej!Ph1XOZFc>rPb}m^cD32(n0TR(rIuTmY!>pNT+4cq|B9G* zN;^|>7J7`_V>0i%(d3GRx&}Du^){~mA&%j^Pbgkh;M(1N*k!^R&h-B15O^BqbU$|b z6N$N}6G4@~KuGO%No(PO+YH_T#g%T)twzTuz$FHL1x1Uh1$-+%cbF14y(UMT(ceXU_@-duR)YgpHSFmy*IK$vlb3kIm#TsI(B?pE)sXaE8C@lUPlS{Tl8}4VUo!$0NY#{m8?O6l0xflUB_n0m~Yecmc4 zrS3ArAY*g>ZasZ~PfR!29207=>{+jIpOE+t#G%x*ayXS2z-{vn{16hE=9@DoCM@;Z zYJ{V#v$MxcovA+DymVT$o6_I4RwA>XgVq8`L`xQD)*o=mmzZD~z+mury7*lhP6bS5 zIAHMO?TSba(_%oS zOyA8P(`&1zaqCz}!hi>vqk?7lbHp?dN}|fD`b(#MW=?{8LZY90G<#?Vt=$SiuQH5; z#M3{07w3{JT*g3tx;wsR7fy&FeiH}znF8TNGwt9L;+rrea-}6_NbgRwG}~g<)n=s! zF6Cec^404IL5oq_rtdp@=_+N#z|nG&`_;_p5K<}V#ao0+PJgPN9`@H-Ukr=1Y5v9` zzB3wau}yw1q0a36#`@}+^N=pv)hRidmFjm%@q55j$}+vRql-VA)nohKp z6+Y@ZD?SY`TY<5n_p39NcWk`QNnMpu-R zhm;IgwZAfM+UIy34-_c;>B34UO4pR~O5f4jjOxW3X2dZk`?DvE&Rw7qiE+aJ>zQGR zWUE(h#2{w#-KYu%DzdBH9Jba5nYt=GmDy9EtLrr$21tL&#UQ*d#l`FEHlJh1yzZY* z>s2+qOg6g+@S6w31xd1xt&Fnhx+<9P=M*_7^TDI%aK09IC53N!?(jWUh8TA=@D(Ti z*aRw_#&=+K32>}?Rj11XhWfD{;DZqyw&LzH)RYZ6`ddkZaQF1=Hyl)*4=Fk5dQU0fVH!a`_a~d@CZtfNM@%H8DqZZxbx=4j);J24RN(gJWD&s1iR|hz0&pPMQN&UF|A^}wYUVF(g?SDNktWlG`032(qcnR&! zGmQ>0O}YXXqS`~T7Xp5iXGPRdG_QTe;dulu;K(|YHZJZ?g;G%KLBIAw;1BV-eTAV- z(<^z7b(MgEqZ=x-7e$}`MjY1vQGO_J9ULcf6>a((7zY>EIXN0zXB)V{xz2?cVLx?R zT>k3?7*;vY`>I~SMQX}m7%XLsd4}K6TP z7EeM=6M;~$Y43>mf@j``;h0#|E<N zRqYCdtgAE$P1HMrHo)(lV?)q;)Nt&jS?Cb`Draf@PP+?1>ndRltUhXvEirq~;gGqB z>avcVly@inoXPW6Qu`+u+U{gzp!!fI{Tbjrfx|)EbAn$S<=#vB6UsaK!+TeEz9ksb z-s1Ab#R14Qg0sX?Ff{d;KpGe@;mB(c`=|5~N9Tu+~l*V*=BJz0agafCow&vEyrxD%C zc`T}Vo_zwN0JPvV*U>|#F%XJeh;o*d=DG$LxI_0-x8CGk5*B+^#REeV;CYbkW}t0X zPXh)klMS&)S9^6EI6z;l8ea5*q$!l(%)4I>>+Pe-#}T;wt3Hq=*w~!&;P^R^bx5&3 z2R0-chJ9Q?#(4g1-AlzE+aGLL@gv^u=saR;AJvt3PAGec{rqhLS3#~`(4FQ0pE-0J z(b=$p;m#^+9I*eJx0Z_}@8I|}f;PTV#Y zxtrq;637aP_;9^VA|Ks^p@Hc9DH+T!w}4&YlVjjQuF;POkLStjZnxbjf2Enu@9=?A zdxr3j22;bU=*ty6H&T7}|NxDY)v#@I{&#qS{ z2A9!$_GSa9WuIGTKce+SmtLa4N-aeQF*T4q8tcM3iG^_1{iNF4#;bRAO`*XPV#fy3di{gMYBQ4$iOak6G;wsw zR#HB6+QR{hF}{5s^9G=Yi;Uy*I!6(gjGZ)9ob0UzfvNaH`*puwQ_Vh7y|W*AjrfzW zsj?`)vzpg4I7)lwuU&UzcT>B+uXSKJ`wb7bFBwA?5x%0572{Z_7>rMGGavs}Z|85~ zlFSv?`%{;gKoR+fQ#_Y831Hy3SfV)XPk63zpI?*Xj`FX2x%GBvc~YvvTfMUX zA(*DBqeGbz;0F~pG#WC@!nPYF{6Tk-L?{m9w;Weqja*2KQZIXCdxO5s0_87+T@^KK zK2+k-1x;8D`a+I@-xmmf{i8CTD8HcMMQe=;({F!zlBXLewSNJ}zLgRCI#2+t)C$jS zYXzryy(Doe4B5-YQ(>$9g+8~wW!F8gYeouT+EdIFWUSEFGLM!A9&zFFC;7am-7Wzt z<+&Qci;IzNIj9>i#wefvI=_fYLp)irU1z*Ix4qCqiFeSnyhz?I6aY7-4W#QEzZUWG z%?6Eu_dJ0)cN>;4Em@6!(i})Rcv2JWPx1xNA$tNy+YML4u088@epom7zhvH6ofDU{ z;N?>$Ut4*|sqLixDB)NIx~yigC;Iuia?-X*dd-Chy{7^TM);biVZq&DxXvvwz>orA z6+nS%rJnOp#df0##@)k10=cJJ?}Qc5A2b-O0q?N=)R+3R+2#=|wc6r;5(#@n@02=* ztn?^U1E~Y*5z9rBPw_Zb6g9`po|mKKuRU0X4ZClh;?bINtuQ7VuF7zE4LT*6-A{VB#ywaB zPJ1N%{#Ms;0}BNFuNr5sFl3Zq&U3-^{vk@_WK=yF^R{Db{}eZSGA3Bo8kE}(;L17J z(?O{bxcY@-jB2pYa8vY3X$(e-P;0Ct_lsW6@|Ig1jvc)14CAeqq~j|hbTuM?#Ri+w zQ@&~ndphhQ7;Bp?;~}iPw=^9r`c{-tHZ9`kY#(DVIGM2k~%xMu}Cz>>e~KQ<*+?yTnc)g zy#l*@mXtH@E&opuN7n=WX@PoH$df*QQizepZ)L!;0XK_W-AA(UyqDQCTisr zPrLm$VVMqGsJP|F?#ZZ9^Jf!}ZnNAl z#|Xop^ea;hekStn=V5r;`&0r@sNt(|s-v9kiNUV_P&w3YxXpw;|19vXb}VA$ebpCb zxOzP>E{82Eg9=$)@qmlbp;LTwW3|Bslve+s2gfyrWhP8L?H&L~DpjhHjYFcfs0iz4 z@%2wd#okD*>IN0kP|V@8L<%&U=LeOsY$#X3ShapHnp!C}7_UXYjtl-`?4%4=tS~a! z=$Z$(*3MEzA4;j7j2Zhn!CBUmOIo(=J1E%D)*wNO%P^!ki*pP;qF{fK$&iQ1c`4JH z+$zx9$|tsj>wg}O%7OLBXIj7KxzfMag+1kBj?PzksC)xzmCZRXB+k=jxFcp=Pb>Rj zchPL+0I_B;1=-h9-7LKAuZPh<-QzNj)F}b?R7i#Tdi^rQpf#R(Hr9H*($v&go-7$H zF@CFZV6}Zvja5I_6)f94(@^+W-$ofHsZgP!6nz!p&?3WfV)Wn*f_JrTldNHD*C~#! zt}yhZOVyoY#S9zDw}_A70A8i)21w4{hvCuu7VxZrwe_h z)3f{uanvWCf_1334vEV*{JY4Y~(L8aHD&BPsxD2B4mC9S^hPm8$Y3w z4}$jR4wLH;72zgZZj>ku>n)w8WnLW8=ks!RHhB{Gfiw9$_7pfsjTFj+rPx!TWDTy1 zL8)jn5c@&lXm^RB0dpDqhfc-l4u6rThM9ZPR2uHct>wdEt6I0b1v$KD#;B>VKeA>y zs`&DDaIvt zv~krs`QgthSvhV+T5cCA#GyG0ljhJw^an|B|Fi|+x@E{ZU*ALgjOk>u3MaBd5xl+2 z%gJFJ;#N%Yy&bq;9kp@L!o?WTamK(TG&T}hRpGXu)PZu)9OIWt%(eebGDa5SA}rsH z)c%*_2+Ic%nO`+=$bW}HF2+NGGNcggr;R`?#w6wCjJWydG$MwBTIPXSXzZZMwE-c& zzq{Mq)Y0W6QuvVNQ@s_5*ZAev6u9R5BK@N2vCXw%t+nDq-A~<`&c9~P zI^LPfVPoNBdS<*A`1RUm1mYpanyDHj-q$+S$1yRUJe5f7DQcz|hnEI#d{RR1VRC_( zrYvQKuIoxl7mygm6U_et>JDzF?T`>-ZE|6n|M5Ti#cT#jEB~QSU+?TdAXsnI<6dQe zpGPcgW?q`tE~??i+!lcEre$W85L&kbo%(@DvDhgM-hP(kV{u3W|DDy^Dh`00Ldvxd zwrKRvQeD8j%*42h3C+Duzk9mRxaqlx_x^VPV`D1BDW^21?Q>Mk#)Gl@4@KGaGlyFd zSc(?QoZx>OwlKG4E}>r4Vq{(|5Gyc=&~un?{yRXA?;*e;jEm6rJW$P!^J(ctP{Dt; z1JHMY9him*_umCh`!$FW6BpCGKd*&Q1{j!GRr2W$J7&p{P~H4c8hQV$5uT4TG4UIX zM>_UFOg{wF-m{upkMkQ#tT{hd&2MaIF5!-+<6FG@l;iBJc}t)b(qJj>q@fo4HeRUHcg$ zqs6&9>LZNCL6q)_vCt2Puiw*&EgfErGNBbdzD&V8 zPGdkO&1Y`E)bzOSU4SpJijICg!2B;j4lC=eC-OxN_MAn;r2!?KSmnaxuN{~UW2$fq zrE<%!M~WCtleOtX`%lhW3Km4h+R(3}|xJKz7@z+}g`g~VMs zhW*@$aQb<_r@;K)jzF$oQ$*pxcqV2)Q47U%CbGCH!0+j&2g(3g7rq#`zIEEbEbGCy zu8Yy^KW)K9o<>_02>-ZU(oato!?(v{ar+7S|L5r4gPS<>w9#()*4;9pC12DnnPB-U z$&mO0!Lmt$F`3wgWDI0?Y{={anLW#8XV-?=b9~9{>6Q(C-7$&PF?RW@Y5&%k_jfXtqgWcE}gnXOtN^PNgITXoKx!(UXXB)49@zw7h+Jr8|5 zMg#O;Na*?nXD2Am=8av5(?44*lCwE*bM+HlZE5V~kmj-Mk8#9Xe}iw1DGSzz@5X}7 zQy!E}&~fEI5Ni2_-zHLCu}9qy@%?PJjQBbu#~<8Ds;w^^66BDVYFYE}!>^D9HeC+H z^1oe+xu=@xM=?4p{5J%f|B4Iy=dxe6TLu+f-GqIXRKLMt({PjZ*f94Ep z!6GI0(%V-eaR05dayBMCPUhn1m7*4`Yuqx!|GN%`S_f@Fio|~V$(#hbsmU-BeZl`! zl{0Tx3Q3}!QyzScLPQH?S^ZL)Q&)p=WNWN!c6-8j|Eqofxo||hJN1{IiHn2D~)|AL)!*Z0nPoOhJ1BEDXyJpZ@RMv zbeH^pnN|$3-WAkj5c2k)w6NPTVog-Hn#*^+z7l!?{C72zgPc!GwAAhh|7n-rSXXdx zH!DX%GNwDSKH-HBTtl%novZ1Wl7D-swK`zbbSgX1Nw@Xms&91z%xzhh*F~bWT==B= zLQA;9*5+e>g)=*f`PIjpSejUiZcv}4$XX)&;-4|`0>^)BSthLQ1rv|`|EFS5z?+GF zEBFqQ#JANO$!MXyixNK3X)*wB*8Y}ImXp1B6X*t>7j`pKf9LU1R736GbAK^lI#k>2eVmXCi{R#VL}k5(RXzGiWG4S)B{GSTHE z{&bbCBdF__wqPx>Li;A%z9Cpe-uVq<>*a;J!uK3(>89`Qx?L2o1MbuLucJ(x#ryTy z3lx^Fb9WN&L~Z3FdgkAH*>-#28kf5e$HSrd!S6_=xr(}LtXDU=?a`;*o7~1M$3FwI zQGYog-ub;%@X5A`lR}lzpC+RRwX_d>kNQZQql-P+E6 zrX)AOPVvA2E*bovHcvA(u`K>dP{~#)NBxH)Px38Xbnd=3(E=}=-CR>w%LdNho|EXZ zBEh*#RXZQ9#mG`ykdnU>gcw_?37czYvrt8TN&{*Nu{V@baE|tKB(Jqi7E+UuGhiRKZVa zQjR7*I`}e2Dzm#fMbU6>%KgGcq;93D3wTpUy8UoinlP@}{H|iEjMX0wnuvWn9``$~>#2@u%9KlC@i@=S>GBxCTI^na{>NS)SWNx3?pDDCIPp_Jo9XcD zKoEfo?HI=cFZ1M!0uiOA(-l9aU}}-tNYRL8l4o9`Cp2k3Gz*BX5mS@$^^`qHKQIX&9K&0?Y zpYRKFHbwiJ*3aSjZ6!PKcvboL#)Qo z-`$&0TsyUI?7U65i$+rwB;Tq1TMeXi9gg1%;QiIxPqAn_o+UZCc#!PanZ%Tjc)(Qq zt8_V4RdxHx4=by3uLTUnc#MV18@u_;pujX_a}m7m-Rq zm2Ya7r^$COeFS2{gJ<|(5BL~nd8IEV$ok%W=LRs!pO;SwHi30jmmK1)T6Fa}WRpAI ziCsQ~mrYlM!!jFgeuu!IE6}6zOM0~qZ)=S|<)Dd|O=Xg-4pNTSC_$g0@ak#UnN7U9 zkBb?G>v^3BFbQ+VOC-84@*BfMfTuIBRt5BxK+^?MxiH zEa|#;dWLqZpP~K1vnx?<>%y#H)6~=%88c0=n{wv_8?|PfMzgxXH+^5g*tG}Qk>#^t zf^dFkp;^&nM{b-`1Sj(?NpUgV9Q$KH#&QpjZ9GdXgAt=Z^!w>)5$N9xIiM z?liqxeuGrGCX#20|nxA61m|5aQ z!4?=)W3TMBC;u2N-5_HH(@&NDO+@O3#fOPJ3cO(Ee}xn2TLI_B03V9GR}#-&-E47 z6v#Ye$5t@gah3JUGN(;Swv1jYBKRulZY#52mE(Qi2u$a5@Lml=;GWg%7u(uTI?=sq z$&SKX+keA$Zj{VauM6F=SM^=q7G952R<_ zgd9fncTXL5O0mV6mralrr#Z(sP3wj{POt(I1df+@lsZeim;@Q$LSV-@hf-1aoIu#U zs^NH^OWq66FD40vk1RLtY|mW1>U|!Q0Z~@9!RfRK2w;}i?Y6!X%u#n$ZM ze&;ne&<0)gwbPs?2ClYTrTust>HTJ>H}!^6hY2fPu5Z7jVw!M*BZA7UUZVI%gIC&xroR|Ua;$yTU#mpRyg^H&tg7Vt;gwuJ(p zAiB@HVlHnMgxQwX4I=BSz4x6^T3u7?D!gD)y~KaUV^(EP%Ufsu#1=lqOiJw!|3Z2Y6^;8Z2$39DVA_rCHkA;j#TuM8OII+zzS?H@HXa6Oi_t;s7$fvFY#4lWlgTL@P1V!FJD`bKA(u|`?454oY z58>1PQ)4cjz@r@|*-Uhlejps3Z56kuiLVQY(Av%TkW!+MR!O@yVS|ZtFLV|@h@#Ry za#o1H8=pAU?v+#Y7)J^5jlI!5Ha`>lj`Yy+Z{s}~N0_DK-^~C{To1qDD!3ozt&z(X zmj3so{bg2;PI#Zi__gy_sN@jKqcr`TOakcwEE;EdV8|~Dw2ht<9OE2J8uUvftK>e2 zm;adMWD(yKDh%WB7bgkhmdrdS2x03|?#$kT=&Tqp6$0+&z9~WZcEbVCki`g2hyH?69`%3A@Bfuyu@kgblc0Ouvk@Ub&Rtx zCG*b%IoweND|WKE-zn`c3B*iKP}%buC1b{*t%e-kdp>4=9vF)gz0b>Xz;9jIao7fK zi2jW-rFbKswQd$-_r#8kn9#?o>O1yUqYrI^TSOtyIcL^A&&9tG`OPxao2v~6n9V5HmgPH*Cy z>`-v>^DysAoCD3S<(0R5?v+afA54R4*UfKhwpQnFC{@pxg3U|muO9N?5axYR77KSV zYk}AN&U_kfMnJJ{S}Gd#P;y#+8{sV0TQxO+)5cV4pXOXuHaV|#QG2hXj6rG;Q{7bE z=qCplIdz2Qv}9=Cy;`DggN&i<4vkzI|6MK7yg|NOjjHK+>FsaqqSqRGjCb&XvG(SZ zK!EFjPbYZVOqn>=g>63gT^Kb>#+N5jlZ&G7nFlj~WR`D@pn~Y4ckAu5ij6Tp?>En; z7P-z(FX}VF*yAIpP+26JKAOlBd!_tosvz|-+Z0(eXZ#CapOFgnZ$vsWBNueWzdGY9 z(BH=_Dz}mrl~eq)l5Wexese{&H(IzSQ201g|)QH-E8{ zRSgn{Gpsgdz4NzwIiQR9!t)djV>@1ArM$>IOL_yI$k+9F$_y#Qi(-esJiAu1mt){9 z`B~fhY)KNUvO*i7&O&Z95-aY#-t4pLsHylL;$2xgF$@A8xr z$QN9*{oIymJ;})(Fx~Vv9trEf!MjJW2xir5zj4#9s_Y**M40)xHy7(!e^c@)2Q1M= z_g~*ARQRg36+$JJKC&>Ql2Hw8 zk7#_U`nlhe0@fx;(*Nuc?t7g_fRa{!)xoX2=sZT&iq3bd#F-bp0|f;$8*Wa^;zr6- zgatvbCrI~3mMn3zOd?`yy%4aKv{Rw%_ZEHu5hc|gbM-$-HaFW`*&ImUTF}_<4fl4t z?MZBjV!twMb!`RfUue+%UAW*F#jdAf?c~!{Vi#)(qd&RC$ACS}+GX&m6+S`ikXxLO z-P{0HsPutYbH0v&y(WTEzK2{vQA9+5PJsyw}za) znE>1~K6it=Mq7H9r8fC@SJp-E7KH`NZB71PR%`k6zTfUE>?$frY{wpYb zCfmAN>}m8bwC#b=zHNIsQ2$vKRuz7jt$Bbx#p-#WeSb@(2os^eW5D&-l#BZJ615iO zx(?I^@IaTISN*5=mkIC_hRAg6?5eI*n424@ywyM4WeLRYY+^H3SAYLDk+?ah<)=Hl z4whNqM^<*VbZhnQN|KtpA{(x~19tnYbS1>fuIH-DD=c*615(+@bA`3l()A?+{+6-T zH`wUx0s%H!Ylp}31H_eiD?lmjX*pOpMeZztz`IgSWp}mqr-VRkgtp37o4WKV zYr6ug8{2Bp_c?)jM`bIztK*M8mDxG7%+Xq-ug8Vzn|I6pqK3^p%+b|<$Ph&bs`Ups zz)i20Z97mRAgnly@ zabCaDvb(;`vvBi*$$I4BI=7O0w8`^ef;;J{zLyf4|NAxMf&0yw!19YIHV<0f?Adkq zB;@5};BasI<7#V%HTHz!TjwwlvE*HtsQKM#j#H$26d`QZ#ffF%9ohEohl0SiGqbxN z7tmh54;AgY*W+@*;A4VY9Cxa6e#PsW{0ICFd44a&z79wwJhM?yeyYm4T<{zSza-G; zu4Sja;O_yUM#G!LnV(Z!#)v*krGLp&vN6-te(!BecQYgIrGMYs)D$yrjCoVlJNLRk zdSB0S5$7+Z?{S{*CMjH!J|R4ht|@F2m!CNjd0!EE|7v0Lrp4%@7R1GxFcS}_lpitAb zbuo?NTVeghenv$R<7gK%1+l!3?6}%OGYgLi?@@Zv(3{Rv6Yn)UnN`CWtG2$cpg5!) zMr%ZkM;;ElJKk3^KqYqQ-Br#|+&EbKS~{Q9xW2lT`cicXrT((IS2oun-`j;sXryVW zH;56au0qgXOqg{KN3qf zgok8c=Hw$S<`gumO69`nFoRZO#7H~+o`4uhaFAU%^@@o{o40%j)Fp;%Tsff0!Jzy% z>`56btMYyI%Ox}&45qeK{~XDAaX`_N12OtT#lQrrT1TjXhT*M!avC5NO z%zJ{VQcT_Njxm&^Egos!yQqHw8E^T=bycoN;^Wrlzmk(Fbl7M4T@me!m{;3c{~E|T z?AY7<(Rin@{4&;0cjyHqL0!Bj9#o-|uB8C`fsk(vIk#A?s(?ZBc5~=#ue*!3l zzjSr71W=_?x|ke=x~x$rSnGNL0@ zp>n}&biXmGsQCdOe>kgP*ezIYd#;wJ8Cr5Z#!k6Bw*Wj_~V_#z(~Y>(vq!g^I3K%*w_A&2mrWw*p)2n;N1O|Saz-2lK$ob#BJUKEgA(1HbeM1fW?qSoAUZ?I zr^(($b(w}8j@T3wBspHUzF+cXsl_uBKL=_G5TkZ@8KNLZH<(2lortAgP)1~!N5Y7G z?@TNo@%nb45);iquq|~4V!d1a*v#9w9;DdbveNfVpn0`dSIbp80hKc|qXINF>O|S$ zD4v{#%{$CsUR92%0DF-k%PED{HM*(chZ`KCK}Eh!yppA-7JYyAywa&I<0a!nH-sT)8LmO&o{sy4j`h} zFYl44+eq%Wye-p7Xd5hZU6zoQ7I)+;BKRqdGvQHu6%c>8Y~QRF4RN3$QxfCmpxhlE z()paKjM&E&kd~ZPZMPjNk$`$b{+LF^fq1N7T#-HlgukuoGIrD0YCbF1xDZedDC0j| zJ9@CK?=nm!_|kg4QR1(lWScUo&<|vG(AM#xddtQ0jtt(%i>T(dyZEl)cF`z#$^a?a z(^sA?Q9%d@+s!=@=S_%)EaM_fNpxp1U1Ex*G_26~Xug|B9wtYz(yB`JmSHyUa4D^o z@17VEhuOTByI2}qc&ZMB(Z48O@ z1Jyjqc3wnLD{XDe7eg*0=#BD_%408og55iBE(d9sBju2Y5Re=6A?REcsN-bE3bst( zub@g)aZZTUEuRKlMmLX>;|fY@W^W-^q6+5`QK1}^TuTB!96pYm8A(2FD}8U(Qp(cB zW?h24F3<L2&FX`2NKp# zRrxr!R7`ov9R8TsEPv!?3 z0G0CYIE}}vj)*4=s7u0NUDK2)geaok*tW#{0nptuV=3tYqz216rc`+Y;Ob+Qkc&gK z#~9L?hY0jowp=sy5O6k_4wci8_=bWri44~Fwsqc!FH4dKyF+Xo6sS{%5uXLrP+%|$ z(xu2(iAo{@_IA6`Y1O%Aq9e9LVUTk1eN*BOrVHflnbR8c5a>sUzLdIbC3+nESyjLe zv{60)eUC8Tx!~91pGkVp1U(fqLK58w>Lo5G#{PylF4Gw(j|QCAV#aw2A8lQPzRkin z@I&C6EDsd;r=T(i_+nI%;I9L7n?8h?2N3PI_0CFZ2@O^PY#ehOtkp$tPN zLkUAlUn;&F(NAD!7MCOKPMn~`_$A8t(Zs02tg6ZhOVhO+!jJDzi(+7bfG-$l5N+aZ zr9h9OWrNgMS#T;2uK=M^Z(9m}N|C<^9|v>>;kf3%XyQIJU5N_spaenxNN>HZeMEyZ zle;i8X@nT4^Pc;`wquQ%x*Yn1(N0JEW$SH8I950)GMR{Qybcy+V8l!OWwPZ@Fvk(Y zvxBlVn+T7V`!3@6P5JAEikOBk(VpmjQ(DrvGljk4TqXz)Z-+ROnTD_y)1LDWW%d}^ zYlb4K?M$0%=3g@jzU39UFbi+;>DExQ!&A8QU{2-gm2EQfNEHth z4k$1Ksa=)MnP15{h1zab+{S}*TqC&~xYne=>B1gmPRAvEU2O6X>K#FNMcJL9{{*OR z`$zz064HsX_9;9(1*vUD-EHX+ExZx#mxF7N=r7xQR#PHuuzs~9MrnX-Fh+FgHUz`v z9rK9?3j|v!6l-7!@-Ia3p=VWL*y6vTu19FkcGMU_AK;Wg{~7j|NIp_63PVi{F{9t8eI3R`M~q8gH|cY=3<;_1Re2DTpFUkOS8n^2Q`l4l^1 zL$LvQEDDz;s<$4NXhM)e4aQsWhg)`B8BC%34Cg%u&PhT92s?zM-u90CR-!UPY<%kS`=FRq6^r_0eH`Hwa^d;BT4BPTGIYJQrlH$jCt+ zm#I~NPS`xxz%rwD6ocXjbp>yhiN{qT3z#9B=ORdkRK616NEkucHeM#9v$GVYLdUe2Vf&YlvZM5Xa!RfE_SvwkWFN6Eb_ z=8BUU#QN?kRSKv|<1N*BN0$%QjLPb&1PARuB$TBpS0UHs=qm>C7Qn7(6~LpU|7v{M ziUx|QLJ2L1z86sUZRe*1buc=ZOne2Y{k82Ev#ImI+W;y6y}($vMbGHgn`*w>GNz~x zpwLrKO=iI~!By(DTGLJQ?m=S=NqH0)vH9k+t8-LOqfiusbC9T4cB`S=Dz(4xB&M#A zh@mq6GJ+vUG|2Ta^^UGOgnpS`!->~K``L(D>a1y$&SvR3N!gJ)s0AMa>ZrX}fp;Rl zf#Tk9Ha3U4D#hCD?N0!ACeWgXK82v=?B1(dDg?PkrpUy~^Sx)H2N1s$qlP9<$cfvD zIQfS4Y%Uq}^zD%AGoA=};EnJRMCY{Fk(#~HPu3%lXpQa25qBu+mGH3O&4{+61&7nx zdK`MoVM$JZR|PGppCL}u$z$b*L?(%P+a2_j2IhcJZ|u$mKLN`Ag7GMQ4^qy;ghLWT zz--9uk9(I)@pR=NCN5HOpo5N>5RyRK(+M@R|VrD4f<)bY1d|nD-9K z`^~@8A^xc9LaihyS}E}-a)a4;=&aOUXV|##41Y+Sv-q;W}0yo z(^E7^WIwHe!-!a=s4;<^1v;LFEDzL2%(8mh!V{8qvt z)-+Y+R_2G>_omkMB@Od`G@1xAN!HC{Ew)r`ELf@@Z#(?w~3BA=k_WVnduTiN4)pIc4GCQiEWkjAJo!8Xl9K%$m zDxq&7manVEnf@}t^p-iNu=ps=ys+w!aJG{_Ee^_XRRisn-btj)L6<|p5p7NmpBDO6 zv<73xE!Ya~PBXAVE~dRW%V`vG9hn5eNqgVont}HaYR$$7bsg#lm1BTgL*{<_cod`n zd#DiN{3w(m>e0avyh*7;_-|p~Lk$%0Q&5y3+@aS;_z!UK$6*zI1<(NLzX;P-)VE!A zsB9?P+ z1kfAC0iDlE#?WMMREt_|eT~7QI9kF_o9fO5{~*g}tQSi%lsf(QnN3qv@<9v{arFH6sF!wyF5CmrCBZ zjQUvBf=c23hM=vPa95qTNY&?<_Mge+CVzz@w#|vs^e*B+j^vl?Xl4p3|o3o^Mq zdKx%$LhOuXOjh$Q=&w+xR5XV`z48_onnCo?HU=w0assH^ zmD4iF#o%yZ&n$0hh-n1d=I8|>_7)s5g$xrJn6P2u=*X(j$nOW3e1;ho+rI%>tJH-x z1UE2qd9k}^6!()*$Drrx6eWcurLf?LReNMo11~vf%5r=7z%`)x%>?I=;IZu== zo`GHs*+z+-_Z0#!vdOmr{TZTsxZ4Aj5EL9nJ;P&%`-Wvq zrB)Hu-d6Qq+?Ip33& zCdiazimcQXLEj_bbUCZbBeuRp`5ptC9JohGgecUujPFHOKqKNw1^+GNti+uOC8(Jd z>FtvLiY%X2#&jylQHRQ`@2f@?jVe|vf}T0qJQy7n_`EC(+V@^VsZ!)Ekv@l@bc>@|Qw!^V@P9x?Bv|S%I zsWn_D;DS$GX3SoEt#QYUfNiVWH2#htp9zm4h)a({g({0AM0Po7gDRSfnPct($j zrv{{J0-$|Z(d&rQm(^1v?OU!HhP1^x`HkD<3?)+sJ+GydwC#ka?3-FA-MMh1%>Hun z?z--(64uZ1-bn05dD$<4A_~nX-N`9|wgxfr$w{l3&k|exxhav;nDs)-h>efpG`3y3 zjO+g@ZSr381{lj`IyzpvEMiR}@7a|-9qm^AR$a}Hb@MLr`p732X=hMfo^+3iLSCo) zJZOrfg44QXc7#TmtnH`m+$9ktrcuSrb|XaMc%rHbJi&Ae{ai(p)W!6-Tjc}^uTTjH@Oht8}$mrC13^@P{o(tTC&4eYO90t<#stebL_YQab%d=&K^16!KmPr3-8RT2@ku z?@e2Bies!Q9!Ywe##%7Un;!VSNHdaoZf1z0OkFtA-t@jGYu3_hAGU3ACcc!t13TxV zQS_Y4_PZjEm$VNHx?h(KBh$I1XMKudG$~aWc$)^gi9sHEN>&)F=}5ofq;t8{X!YT! zeqVFB>b@wU@s&x{S;n!Ziph>Ot5ZPNBC(3}j~E!rqFwCU3X#`&e>W--0EUdAIYS5;~qJ#RlP$see)Qv23VRFT+?kkU#K!7{>C8_-k9l5Ra*8CWWrqHyvMr%am zG%fGYD>e0sP93$4K$wHfU`_Ar57$v}|-od*;U_4Npl7R~*8P;0S2nLpv~#C^_4nRv_jbB-a#-5|UxE`*$Cn#5y*S zs@kt{BOnXzkY9GGo`_8C5Jwa>r4l0*+^m+J!%L|0>>X)=Azrw*A9s@|;b7q@5$H?8 z;oVIoNWLCnYVTHvO>uR(_R^TZX9)Kw*>QDATwt3jS23m&fzT1&%~a*IiMPtem0T*` zKD--Vi^n3ocSj0?2JyI37ap~ES2H0G`#N?rm<(on(vjg3rh5l&rZ|_NaB$+svbI9= zHsaA`l~xIRW9op~6i3AAij#QrXNm8t0aGzFt)b!+4y-X07%IdtgA((4+k%Z*<%3|h zVYOTJM$GwP%g+&|3%lBD=H6E+iH{cF?U$ICDjv6;ic%@$+}dXD2zoBSaQXa*q-C<~ zSdI5RWJ*riA#dAY(@=7kFeZz66ZR3=DIc+sl8XvPA`zWnFvjH1T1F{KT@y~WW0aOcUiI?gAcNuB<$+yIH-zOx)3cV}wK+SknCbEZ zugh{u@NBg|nWXt3SeXp`y(;Jm*XL2E2*gKLi_*h1p=FH0<`-`XnPg{G@!bjxgJxIS zZ2vp{0*LBlA52jK)bbPhD8ZRB9INhpU(tmv@a(N}$UmEny19SC0G#eSTx~j#!h{SQ z`7uhC!AHM08heVIzS`ugIA_qpwc#-ltfsg(1>bw%E?p|urW$Dsp)0!!MguT!`Va5k zbP@Me8C3UK5p+hhvf7ey8p_Bs)>3s**3~Ahc)bW?#xbQe`nD{uBKx=<=SvFTL>JvH zp=c?doHRxyI*U+3Cy+k0L=GAS>2O=<+P{-ugRcTd+?FU>_Mu72iuNoy3 zuc_(s@HntOP+^B${m>UY&K?Uv9=xS zMLGuPiDR=E1&kr7ru(Id+#eCcZO@eGRLB%6W`>|If~X^wpUUbAg6-Y064SH>$sMVB z)i)gjyC?ohpfkF&qb*dT>Oqa&{!N?2hhp;w3x7#rGSoo;z zb@_*x#=f>yoG+9zMx`+%(Kyf^XSXb(yQsrgv0NfylzpZlFp5yp^o+4MoG0N zj8n=5dYM=A$N->_XS6AvdeEqW;Gftw*AgMx7tnZ<*naT(4KeRnj(_jI8 z*%YT$d2;1|;3w|23=l(CgI?X#gNnbKS-hj9=);nnc4IEIj+ zdEN{#m!RyziI`DtrPVuyM~M?ZWNO|+Wg9MOLe3|=kSW&aIaO&CMj)-LWPi=R`CK~I z>3Y?~NYX>E+?qda`tTy{P~emflmyu`Nl#@h(?9f9>X*FB&xp;&5amir$)omD^Fi_7 zDYk|=hp9VwZ?WE;=n&qWXh{!y&I_^dF8jXu+rpPVqDFEoGZ`n?V{A8_^smUS^e`1S z5~=>O*8-1Z<5|wmObKw62HojKBS?KOmKBVGn3@w#6ud^5I+|{GqedbN9|;Zec1kN< zb(M>wRB|rE?6(bynTKF)w1%EkGFHjcU{sj7cZ5Wv+{Ih}B&$c+9x<7NXuO1&(bW(| zJ5n{)g{Am|?cxwnb1`$MyM01=Bt;Ha5XA^ZtlExzO{r@^PVEs-QQ37scJ1M3fvQao$r}>%nn!|I07>Z_{LfWfW9h;FI(ga#BP8}cd8$@zl$=> z7^+V`K>TJ)xCRiVN&9JXoKutGi{or4t>2|-XJxElj=I3%Vx=EDa2XCY8%1gysT2Ll zapn)EzI?>bFBi$2v0hAvlozyqBH9n$W>{j-xsubHg*+3}+BajSsaCWx*YsUMb7xuAH$Y-YdB=-j)j&r(__RpA zD^PD_&H=!5!ue|$6;2HP7b%}a?B{~uRrHC`EtwnQ?*69qvJpEBUx*c$O$*kAvO072 zQ%&4BVHX^|dCtn!$=lqU6Q4zUnx7NVvRWz?;u?t(kZ_XnU!B=2zRZMg74n-@U@e0q zSGQPiitff|@p823ubQHI_^M??==V0Qm^yjEGhg7KTnjN_SZ@6d4>m~RY)jt!g-(%#%PZ-bLa3S|J0^q|VIA ztHP0;GKqHv!_YVGHnV8MG`%!aJKtI0O>N0Hh`2M17SJIaNyT@9tToV#@t7S60^<4?twMH-T z1(o1mn<&3b(Ggj9Q2jx99b!K=kWXhAjJIn6+`^Ibh+e!(syx-U(t7oId4niU9(G^AGh*yvYUZgRS^0^}ZS;#-J#dUW z#l&}pLZX~NHbKl6aC_Q$UNnGgD?_e8gIvuUvQ zu0hLmI415Q`AbhoxQP%HGQBy*C=ITD{?5k&vCFFzKd27U?1b!gy(>OxW;;Rt-#86R zCVD{d`(>7$?9t(u5PItNPN<%D(rv>;OGXdBQ%zhN(3i|ltj#lnQFva?9Vr725?~;w~oX!qYFCo@ctpPd!^vcHXiKyzJ(uy$k1W`DuCf?Y-^)qkM#MmA~st%WWB zAz&cPPYeXo(M?;Lem!Mzd-=}=qDuF?QQy>oJLdGvqLdCwcOsTw#nsQ*W&5B zEYgqpvc$jO4acU@oaMgQvM;7g^zC8_cCFb|)zR@T7Q>DDb`H%c6BjHzG1&~MeAz!f ztE33=I3r7dy&&5zh=j-DU$DPx6Kf|e+2`(W;K8rKoE&T2Yh%>phBMn{|ha(%qLwXhsw-Vy(gpixSkDub<<2GyC!2Ryr_W z(X$0og_05xj-wEY>au$_&sgASvz(9OnL&kqA~-m)*Y^ttGM zmQM(&Bzc~p{%j+MXFz6Du!IF#{+9JOm$reoY4ty)Z8dq;#RI06L z6^vxQz+>7+r7*3oR}(v$H!6Izwq>K~GQ3Y1@S8qbkRM$2@{=6W_XSG!Vpi9QlFc%9 z65Jg6AH36hE0A_sTcVbFs{j8OWGIok;}?@rb*a#An8nj^an|XAlW35Yy*-Z8`SD7(#BaY)?dj&1Bs?skV{raSUMjEH6 z$XP5I{HYVKyANc>{dp1(x&?}^Lf;Te3^X|>EYL0`DE=C+ReM#SPiz!#>fQ4;g8=`J zDvc0uUP+I_EuiE8k#9K~7cye}FvmnMse!C(o_n|}S{Z7y8B^!>c1dx*>di1B&z%O1 zXTA;?*=CY2*{18vyZ7Sp`&43!0g(EIhX{p0=`d5n8sv>$)4isrtiZ6KY9s#{3qYl{ zg|2Fu&ahQwc>_N4)JO4;iKhr8tP&|K$;Ad5;r7^3lnsgpZQ_C_p;W~SuDy4QQamzO z(7FmMcpG^F?^R?8)W6`x-SP4jBrE2I$~^j%RQax7f-SG2rOAPH9APl=AuF00+0gk? z@|*!;lE!}E`Mh$NttyGR|3>MKAXn&hMuyZp`>88^%RZHz?8)(nUm$&!4tSdhvPDX1 zd)Rxsp=0juXIQ$v627;X9l7M0`nRgKTI&xdxu^&1<0U#07&;|Q#_xDBOc>0spUXGy zYqNwc18G}IT-iQbZ$Pvs(pfcLT4okUJ^E_X z#^J|-g;gl4xUidst{XF(b?}xbeH~Yf6EB>P0AI#$`aH(qlyJdNum5NSMuiIvDAc^l zgRuR7VxN0s9yU31`i20t*Va}l7x8L4lpD??ZHvO6vHOfpjx4VtY*SnUbgmv2pmKO5 zItUJKO&9wl|BajA))VGg{nnuu7Q7Tt}#)}7ydXupD zt6)3xb`V)f=vKXH$b|`J+*iMef&j^7@`?|V`OFNn#Lk`ht$ny$MqqQrq?RD??=)5^!S~yroBc4-aSIk8VKPT@?j&{ecY~6E zb=-#uzSfhPGOESS;ci0X2oRV`NCKe$D(}r5dC9|hwLOw71!)pps`T`FHocaDRF< zOfX2Augpi~=l(rwGD}8?r^KUXg-9Z<#o{3-$e1<3wm4z6VdssBCtfj=r&-fF5#|Y8!GMLX6X&x@}v)p_8VzWLVDM zog5bGPIHn0azzTTS<5dlE-7Dr4WXiZbPK5ow>X>+^sd1YiJ8YcNK%@K)kN5F2jUoY za7DT{WF@e3O6OAxphJ~>X|{6G5KAXMXdH23w|U1aNu5WJ%!ZL8Y4i?CLKhIteI16X z9r5q|hgk^9J8yhqX+~(_mQ-C(#HsYtylRNxR^cMhce_%tU?FX{xfKY7qq6aUoIrDi zHhQj%uefsM=+#Z`i*B$aqvIacVfnbgDl0uV`21L%p!a=O#_tiVY+uH=R^WGKDIm#V}Bi+l!Q~XhStycmTvacgLHS zZEWWi<#IP(&)(vyqct4Ks^cKaNu&nt6UNGa*o0`SWN29qS|eR*S~_;4Bh%DO>ukIi zpwaZdHO+R?#&mM2MKx>Wmmba2mmSrF7W+a7dgKPym66o230GL@ts9U=w^>usEB)(` zXM~2+S3ZDd+a2JOC4XE|UVC$iZQsveX$}Gyn7Va> z?QqcZpbKn=2Jb!<^~6U@vX_~pT?@YhqS?^xjez&bsxE* zHw6!vWS*gn$>DV6I)c~}vGFd7ROJs13VC=W77MpJbS^e-W4&17`3VBlT9e@zP3`e> zPtB`Ga=elPG6x?=th$I}S5Iw$1Cd*X0TTr;t7SCpJ)=J{z!a!ahYe5+}u;wjf=3PnHQnTeTD zearO2()$KQ5{S=2(6~caj>g9&n}|Q=(S{_X_vvG4)?PhVh`~ro?az(MoY#JDP{56Y ziJsgj2RX2N1!6@&mkzItN;E}0DZvOfJKwW-f};@Zz5#J7vFU*?eJt&8JeQ?LV^nK; zP{L|E07q8X7zmXedQcj`%UEBl82#*Aed~1tx4&9l*}H6s*~@l5^1)r0ej6f~72ec5 z70Z9ENJ`0UXVhYEU4xZFo1^IpZ6L!@?#r%Jw<)>^!JQytpbj4dfAC?fNnj*B>v;7L zL75h`y+wrJykWWSrT0&qhqlMzDA&9?P9t99=KwQMq4Qb2@Hk;aR%5Lar^U{og~w@3 zS!DMhu*?Ol8;-M#x+K?tfO3Vp9gGnIto$`B&A}tWa0_iz({POh%4H^H8z?i2Q^YRC zEaQ=@o8AQ}J5GCD1AvVY|E8ZYq9p0Br_39}5JiAXQgdpMi)Os9i;`FYUfInM@`ADrLobPIE7qHAnU}2(rvCpBJvW#>ufkUzWso-MCQCNm(A9lA2G)aPULFL`AQ%&vCmxC z0YR#0A)bGv3!R1n+y$e5OzNQ1DYIJ=dVMkCjCD%AsBrrQsE}BIH*49i({#H_c?j7l zJa}g+G2)e6`?ww_`bpNzTtd00U4eNm-fFXzy1!TuHro@k8*GO}#ehds zKJB&VGUsW(lzP+`;TLA;iMdU@uUuCvKD0D+Q^^$=b30}p8C*5>>g>F9K!DS7hB@jO zeUwI!vd~m`KgQsH=LJ&aa)l^vRHlXDeuj*sGkv5j8JZLSX&0?5M)6%LoFe?Dx25JJwACAN%blhdmRFQriyLDXivtqs219d-aoj@zL}YZ66tD zIZBQ6tcPWY#B!qu3lgVoUxj3ZqSitXglQSe?}s>sQrCE}Sfv)2uR@&1sI8kRI&(*3 zJ}H5^t@#E2Tw z=B6#lD>m6u24qX>1o=5XKDLy*v6S>&e(z0 zH?Qeu&NR%UtqmIngji^A5NVhw;UT8-C*x*L72KUG5~@{C93m3~OT8 z;yV4wOXkks{6{^_vD+=YxEic#VGmzX!0OgynIu*Q9$D@>`a4KdYP;)ILK@xTB zKq-B}WLa_mJFK$Gsc{To;;x0H4n7zfaKgs~W&k6xMmk_srABcz)49`Orn{9UbYyfQ z0g7Ne(V={eC=bj;s0ENnAI9!3YgpCN8jJLyuL}vtsU7ol*UPE*BVePf(770oygBOq z%%-`Kh4gcAAokyu^MZN{HcgG}N-wL#X{z37e77WRc1-?M`leE(R_<+o4dej}Qv5}D zNjI}%JUtC=+FDbH1>wPBa2cNxba5Zsq?iYl zj`D`F&(6{8zmD*#EQe{@PlLoZV435Bgk>&6m8paqT2Q)=m6?-iC1gc*yJeM&u;(0Q zWjL?g@1f8+Xl}?k2$K-io$&F*8O3BW9FkM`KBk#=RXY{ws#AVgrS%o|d@rQ+8(9Uu zXB_a9@1?Y2ily?5wzO)B`;aM^!ZlzC`WDCnH!BTEPT?|osaXUzCb`7OWZ~2c(q=eHj5HEdxFHZIUon zwpq}Fhe=u(9!dHLXvBaI^Y8xG-kJMT0Kww!F6cBA6(x7he@gNSB_l zysEn(b);>*kdY~wAXyL^0qkcIS!otyRN{r&&s8Q>o1U00RHz$a;HAoVejTS&Qggvv z;B_&y7w|Nwb84uNh498fU6J$1SNo5sKQ`QC9(LQ=f6$wkERE+45N$n};5mE#rX1UzwgtB5H^R)zFaNaK8;l3~S8&tMrzJ7~rVsU_{| z09c7sMw1=pT=<5n8#(i2N`q6JNRatLGr;6j#ur%2`4Z z(%J!Jo)F+Lr5uJ-=2844xl=BKkixgi|(9hEqSZmIjzAc}0WI zy8@wU@G!JUB6{pF498x4+El}Z#GWQ=u1l+H0B6-_aDEkH!SKy>5F>m-oV!)raLPkP zfyV*?H^!`-N?n-2sZb0j_N6OL$N&(D6PXh+;h<6{awiHWx>TVdQ+F~8AdSIga>_~? zA(JNv!4Zn{r0Z>`*!J34lBk_nrY8?1)kOaNJP9%It8hF)cJS%qdD6d#CK6napg~vP zCVe{MFDA}J}wu_q*q;=&8{5wndIDurb>8?i(x$)jJum ziv2=XiJoO_S)zW>YKF!EuZBZBi@Y{yMd>yCw1B?^h3>Zm)g=T6PFht;aXki8kZ~z2 z#T3__JX%LdT2Dun550qqu?$?6+vP%!Q9Egp*jkZ*VT(+Mz$4C6s!nk#)6ml3S(_n2 zWRVqg*I5fcvp|`1FPyqtXEc*MOIBbO#Mu;3U+1D9Zz*zIWr!@IZiq^eIwP003M%x{ zcH+km%rCt8+u7r<@?(>`*1h_}`)9k~`snK8E4K!pKECtn^!I-GyY1h`h`}W+o_TbNd^2$?h{bBEKUa!Bf=gr?wpLqJv!<8?1 zAOG`gwsMnw>cXGixv=^lo4 5000: + self.Newest = self.Newest[:5000] + + #write to file: + f = open("database/new_flipnotes.dat", "wb") + f.write("\n".join(("\t".join(i) for i in self.Newest))) + f.close() + self.new = False + + #write creator changes to file: + for ID in self.Creator.keys(): + f = open("database/Creators/%s/flipnotes.dat" % ID, "wb") + f.write("\n".join(("\t".join(map(str, i)) for i in self.Creator[ID]))) + f.close() + del self.Creator[ID] + #interface: + def CreatorExists(self, CreatorID): + return os.path.exists("database/Creators/" + CreatorID) or (CreatorID in self.Creator) + def FlipnoteExists(self, CreatorID, filename): + return os.path.exists(self.FlipnotePath(CreatorID, filename)) + def GetCreator(self, CreatorID, Store=False):#Returns a list of all the self.GetFlipnote(). "Store" holds it in memory for a while, use this when making changes or reading it often + if CreatorID in self.Creator: + return self.Creator[CreatorID] + else: + if not os.path.exists("database/Creators/" + CreatorID): + return None + + f = open("database/Creators/%s/flipnotes.dat" % CreatorID, "rb") + ret = [i.split("\t") for i in f.read().split("\n")] + f.close() + + #update to newer format: + #current format = [filename, views, stars, green stars, red stars, blue stars, purple stars, Channel, Downloads] + for i in xrange(len(ret)): + if len(ret[i]) < 9: + filename = ret[i][0]#take this as a give for now + for n, default in enumerate((filename, 0, 0, 0, 0, 0, 0, "", 0)): + if len(ret[i]) <= n: + ret[i].append(default) + + if Store: + self.Creator[CreatorID] = ret + + return ret + def GetFlipnote(self, CreatorID, filename, Store=False):#returns: [filename, views, stars, green stars, red stars, blue stars, purple stars, Channel, Downloads] + for i in (self.GetCreator(CreatorID, Store) or []): + if i[0] == filename: + return i + return False + def GetFlipnotePPM(self, CreatorID, filename):#the ppm binary data + f = open(self.FlipnotePath(CreatorID, filename), "rb") + ret = f.read() + f.close() + return ret + def GetFlipnoteTMB(self, CreatorID, filename):#the tmb binary data + f = open(self.FlipnotePath(CreatorID, filename), "rb") + ret = f.read(0x6a0) + f.close() + return ret + def AddFlipnote(self, content, Channel=""):#content = ppm binary data + tmb = TMB().Read(content) + if not tmb: + return False + + #CreatorID = tmb.Username + CreatorID = tmb.EditorAuthorID + filename = tmb.CurrentFilename[:-4] + del tmb + + if self.FlipnoteExists(CreatorID, filename):#already exists + return False + + #add to database: + self.new = True + self.Newest.insert(0, (CreatorID, filename)) + + if not self.GetCreator(CreatorID, True): + self.Creator[CreatorID] = [[filename, 0, 0, 0, 0, 0, 0, Channel, 0]] + else: + self.Creator[CreatorID].append([filename, 0, 0, 0, 0, 0, 0, Channel, 0]) + + #write flipnote to file: + if not os.path.isdir("database/Creators/" + CreatorID): + os.mkdir("database/Creators/" + CreatorID) + f = open(self.FlipnotePath(CreatorID, filename), "wb") + f.write(content) + f.close() + + return CreatorID, filename + def AddView(self, CreatorID, filename): + for i, flipnote in enumerate(self.GetCreator(CreatorID, True) or []): + if flipnote[0] == filename: + self.Creator[CreatorID][i][1] = int(flipnote[1]) + 1 + self.Views += 1 + return True + return False + def AddStar(self, CreatorID, filename, amount=1):#todo: add support for other colored stars + for i, flipnote in enumerate(self.GetCreator(CreatorID, True) or []): + if flipnote[0] == filename: + self.Creator[CreatorID][i][2] = int(flipnote[2]) + amount + self.Stars += 1 + return True + return False + def AddDownload(self, CreatorID, filename): + for i, flipnote in enumerate(self.GetCreator(CreatorID, True) or []): + if flipnote[0] == filename: + self.Creator[CreatorID][i][8] = int(flipnote[8]) + 1 + self.Downloads += 1 + return True + return False + #internal helpers: + def FlipnotePath(self, CreatorID, filename):#use self.GetFlipnotePPM() instead + return "database/Creators/%s/%s.ppm" % (CreatorID, filename) +Database = Database()#is loaded, yesth! \ No newline at end of file diff --git a/database/new_flipnotes.dat b/database/new_flipnotes.dat index 18715a2..20df4ab 100644 --- a/database/new_flipnotes.dat +++ b/database/new_flipnotes.dat @@ -1 +1 @@ -913304C0CC74CC1F 74CC1F_0D376FC60C9DC_000 \ No newline at end of file +913304C0CC74CC1F 74CC1F_0D3AA40F2B3A0_000 \ No newline at end of file diff --git a/hatena.py b/hatena.py index da189a8..f217fb8 100644 --- a/hatena.py +++ b/hatena.py @@ -1,8 +1,9 @@ from twisted.web import static, resource -from twisted.internet import reactor -import sys, os, atexit, glob, imp +import sys, os, glob, imp from Hatenatools import *#UGO, PPM, TMB and NTFT +#from DB import Database#flipnote handler +#from DB import Database#flipnote handler ServerLog = None#Is set to the log class by server.py Silent = False @@ -16,9 +17,10 @@ class AccessDenied(resource.Resource): isLeaf = True def render(self, request): ServerLog.write("%s got 403 when requesting \"%s\"" % (request.getClientIP(), request.path), Silent) + print "debug:",request.getAllHeaders() request.setResponseCode(403) - return "403 - Access denied\nThis proxy is only for Flipnote Hatena for the DSi." + return "403 - Access denied\nThis proxy is only allowed to use for Flipnote Hatena for the DSi." AccessDenied = AccessDenied() class NotFound(resource.Resource): isLeaf = True @@ -28,7 +30,7 @@ class NotFound(resource.Resource): ServerLog.write("%s got 404 when requesting \"%s\"" % (request.getClientIP(), path), Silent) request.setResponseCode(404) - return "404 - Not Found\nThis proxy is only for Flipnote Hatena for the DSi." + return "404 - Not Found\nThis proxy is only allowed to use for Flipnote Hatena for the DSi." NotFound = NotFound() class ConnectionTest(resource.Resource):#used for people setting up the proxy in their DSi. It's nice to see it's actually working. #http://conntest.nintendowifi.net/ @@ -39,7 +41,6 @@ class ConnectionTest(resource.Resource):#used for people setting up the proxy in return 'HTML PageThis is test.html page' ConnectionTest = ConnectionTest() - #Root structure: class Root(resource.Resource):#filters out non-hantena clients isLeaf = False @@ -71,7 +72,7 @@ class Root(resource.Resource):#filters out non-hantena clients if request.getHost() == "conntest.nintendowifi.net": return ConnectionTest Log(request, "root") - return "Welcome to hatena.pbsds.net!\nThis is in early stages, so please don't expect too much." + return "Welcome to hatena.pbsds.net!\nThis is still in early stages, so please don't expect too much." class ds(resource.Resource):#child of Root isLeaf = False def __init__(self): @@ -93,7 +94,7 @@ class UgoRoot(resource.Resource):#child of ds. (v2-xx) def __init__(self): resource.Resource.__init__(self) - LoadHatenaStructure(self) + LoadHatenadirStructure(self) def getChild(self, name, request): if name == "": return self @@ -161,8 +162,8 @@ class FolderResource(resource.Resource): def render(self, request): path = "/".join(request.path.split("/")[3:]) Log(request, path) - return "This is a folder, but I'm to lazy to list the contents..." -def LoadHatenaStructure(Resource, path="hatenadir/ds/v2-xx", root = True): + return "I am a folder, but I'm to lazy to list my contents..." +def LoadHatenadirStructure(Resource, path="hatenadir/ds/v2-xx", root = True): for i in glob.glob("%s\*" % path): if os.path.isfile(i): filename = os.path.basename(i) @@ -194,125 +195,12 @@ def LoadHatenaStructure(Resource, path="hatenadir/ds/v2-xx", root = True): elif os.path.isdir(i): if os.path.basename(i)[:2] <> "__": folder = FolderResource() - LoadHatenaStructure(folder, os.path.join(path, os.path.basename(i)), False) + LoadHatenadirStructure(folder, os.path.join(path, os.path.basename(i)), False) Resource.putChild(os.path.basename(i), folder) -#Flipnote handler: -class Database: - def __init__(self): - #read: - f = open("database/new_flipnotes.dat", "rb")#contains the newest 5000 flipnotes - self.Newest = [tuple(i.split("\t")) for i in f.read().split("\n")]#[i] = [creatorID, filename] - self.new = False#True when new flipnotes has been uploaded - f.close() - - self.Creator = {}#to store creator info updates before writing to disk. Creator[id][n] = [filename, views, stars, green stars, red stars, blue stars, purple stars, Channel] - - reactor.callLater(60*3, self.flusher) - atexit.register(self.write) - - #to check if an update is neccesary: - self.Views = 0 - self.Stars = 0 - def flusher(self):#Automatically flushes the files every 3 minutes and trims down memory usage - reactor.callLater(60*3, self.flusher) - - #trim newest: - if len(self.Newest) > 5000: - self.Newest = self.Newest[:5000] - - self.write() - def write(self): - if self.new: - f = open("database/new_flipnotes.dat", "wb") - f.write("\n".join(("\t".join(i) for i in self.Newest))) - f.close() - self.new = False - - for ID in self.Creator.keys(): - f = open("database/Creators/%s/flipnotes.dat" % ID, "wb") - f.write("\n".join(("\t".join(map(str, i)) for i in self.Creator[ID]))) - f.close() - del self.Creator[ID] - #helpers: - def FlipnotePath(self, CreatorID, filename): - return "database/Creators/%s/%s" % (CreatorID, filename) - def CreatorExists(self, CreatorID): - return os.path.exists("database/Creators/" + CreatorID) or (CreatorID in self.Creator) - def FlipnoteExists(self, CreatorID, filename): - return os.path.exists("database/Creators/%s/%s.ppm" % (CreatorID, filename)) - #interface: - def GetCreator(self, CreatorID, Store=False):#"Store" holds it in memory, use this when making changes or reading it often - if CreatorID in self.Creator: - return self.Creator[CreatorID] - else: - if not os.path.exists("database/Creators/" + CreatorID): - return None - - f = open("database/Creators/%s/flipnotes.dat" % CreatorID, "rb") - ret = [i.split("\t") for i in f.read().split("\n")] - f.close() - - if Store: - self.Creator[CreatorID] = ret - - return ret - def GetFlipnote(self, CreatorID, filename):#[filename, views, stars, green stars, red stars, blue stars, purple stars, Channel] - for i in (self.GetCreator(CreatorID) or []): - if i[0] == filename: - return i - return False - def AddFlipnote(self, content, Channel=""): - tmb = TMB().Read(content) - if not tmb: - return False - - #CreatorID = tmb.Username - CreatorID = tmb.EditorAuthorID - filename = tmb.CurrentFilename[:-4] - del tmb - - if os.path.exists("database/Creators/%s/%s.ppm" % (CreatorID, filename)):#already exists - return False - - #add to database: - self.new = True - self.Newest.insert(0, (CreatorID, filename)) - - if not self.GetCreator(CreatorID, True): - self.Creator[CreatorID] = [[filename, 0, 0, 0, 0, 0, 0, Channel]] - else: - self.Creator[CreatorID].append([filename, 0, 0, 0, 0, 0, 0, Channel]) - - #write flipnote to file: - if not os.path.isdir("database/Creators/" + CreatorID): - os.mkdir("database/Creators/" + CreatorID) - f = open("database/Creators/%s/%s.ppm" % (CreatorID, filename), "wb") - f.write(content) - f.close() - - return CreatorID, filename - def AddView(self, CreatorID, filename): - for i, flipnote in enumerate(self.GetCreator(CreatorID, True) or []): - if flipnote[0] == filename: - self.Creator[CreatorID][i][1] = int(flipnote[1]) + 1 - self.Views += 1 - return True - return False - def AddStar(self, CreatorID, filename, amount=1): - for i, flipnote in enumerate(self.GetCreator(CreatorID, True) or []): - if flipnote[0] == filename: - self.Creator[CreatorID][i][2] = int(flipnote[2]) + amount - self.Stars += 1 - return True - return False -Database = Database() - #when loading: def Setup(): - print "Setting up hatena...", root = Root() - print "Done!" return root diff --git a/hatenadir/ds/v2-xx/frontpage/hotmovies.ugo.py b/hatenadir/ds/v2-xx/frontpage/hotmovies.ugo.py index 613832b..fd5532f 100644 --- a/hatenadir/ds/v2-xx/frontpage/hotmovies.ugo.py +++ b/hatenadir/ds/v2-xx/frontpage/hotmovies.ugo.py @@ -2,7 +2,8 @@ from twisted.web import resource from twisted.internet import reactor import time -from hatena import Database, Log, NotFound +from hatena import Log, NotFound +from DB import Database from Hatenatools import UGO #makes a flipnote list of the most seen ones among the recently uploaded @@ -77,12 +78,9 @@ class PyResource(resource.Resource): ugo.Items.append(("button", 115, "Previous", "http://flipnote.hatena.com/ds/v2-xx/frontpage/hotmovies.uls?page=%i" % (page-1), ("", ""), None)) #Flipnotes - for creatorid, filename in flipnotes:#[i*50 : i*50+50]: + for creatorid, filename in flipnotes: stars = str(Database.GetFlipnote(creatorid, filename)[2]) - - f = open(Database.FlipnotePath(creatorid, filename+".ppm"), "rb") - ugo.Items.append(("button", 3, "", "http://flipnote.hatena.com/ds/v2-xx/movie/%s/%s.ppm" % (creatorid, filename), (stars, "765", "573", "0"), ("bleh", f.read(0x6a0)))) - f.close() + ugo.Items.append(("button", 3, "", "http://flipnote.hatena.com/ds/v2-xx/movie/%s/%s.ppm" % (creatorid, filename), (stars, "765", "573", "0"), (filename+".ppm", Database.GetFlipnoteTMB(creatorid, filename)))) #next page if next: diff --git a/hatenadir/ds/v2-xx/frontpage/likedmovies.ugo.py b/hatenadir/ds/v2-xx/frontpage/likedmovies.ugo.py index 1756859..15f21c9 100644 --- a/hatenadir/ds/v2-xx/frontpage/likedmovies.ugo.py +++ b/hatenadir/ds/v2-xx/frontpage/likedmovies.ugo.py @@ -2,7 +2,8 @@ from twisted.web import resource from twisted.internet import reactor import time -from hatena import Database, Log, NotFound +from hatena import Log, NotFound +from DB import Database from Hatenatools import UGO #makes a flipnote list of the most seen ones among the recently uploaded @@ -14,7 +15,7 @@ class PyResource(resource.Resource): self.pages = []#10 first pages self.neweststar = None self.newestflip = None - reactor.callLater(2, self.Update)#or it'll clash with hotmovies.ugo + reactor.callLater(2, self.Update)#or it'll clash with the others in the terminal def render(self, request): page = int(request.args["page"][0]) if "page" in request.args else 1 @@ -79,10 +80,7 @@ class PyResource(resource.Resource): #Flipnotes for creatorid, filename in flipnotes:#[i*50 : i*50+50]: stars = str(Database.GetFlipnote(creatorid, filename)[2]) - - f = open(Database.FlipnotePath(creatorid, filename+".ppm"), "rb") - ugo.Items.append(("button", 3, "", "http://flipnote.hatena.com/ds/v2-xx/movie/%s/%s.ppm" % (creatorid, filename), (stars, "765", "573", "0"), ("bleh", f.read(0x6a0)))) - f.close() + ugo.Items.append(("button", 3, "", "http://flipnote.hatena.com/ds/v2-xx/movie/%s/%s.ppm" % (creatorid, filename), (stars, "765", "573", "0"), (filename+".ppm", Database.GetFlipnoteTMB(creatorid, filename)))) #next page if next: diff --git a/hatenadir/ds/v2-xx/frontpage/newmovies.ugo.py b/hatenadir/ds/v2-xx/frontpage/newmovies.ugo.py index 3e95eaa..44ce8b0 100644 --- a/hatenadir/ds/v2-xx/frontpage/newmovies.ugo.py +++ b/hatenadir/ds/v2-xx/frontpage/newmovies.ugo.py @@ -2,7 +2,8 @@ from twisted.web import resource from twisted.internet import reactor import time -from hatena import Database, Log, NotFound +from hatena import Log, NotFound +from DB import Database from Hatenatools import UGO #makes a flipnote list of the newest flipnotes @@ -13,7 +14,7 @@ class PyResource(resource.Resource): self.pages = []#10 first pages self.newestflip = None - self.Update() + reactor.callLater(4, self.Update)#or it'll clash with the others in the terminal def render(self, request): page = int(request.args["page"][0]) if "page" in request.args else 1 @@ -73,10 +74,7 @@ class PyResource(resource.Resource): #Flipnotes for creatorid, filename in flipnotes:#[i*50 : i*50+50]: stars = str(Database.GetFlipnote(creatorid, filename)[2]) - - f = open(Database.FlipnotePath(creatorid, filename+".ppm"), "rb") - ugo.Items.append(("button", 3, "", "http://flipnote.hatena.com/ds/v2-xx/movie/%s/%s.ppm" % (creatorid, filename), (stars, "765", "573", "0"), ("bleh", f.read(0x6a0)))) - f.close() + ugo.Items.append(("button", 3, "", "http://flipnote.hatena.com/ds/v2-xx/movie/%s/%s.ppm" % (creatorid, filename), (stars, "765", "573", "0"), (filename+".ppm", Database.GetFlipnoteTMB(creatorid, filename)))) #next page if next: diff --git a/hatenadir/ds/v2-xx/movie.py b/hatenadir/ds/v2-xx/movie.py index 4188174..04006cb 100644 --- a/hatenadir/ds/v2-xx/movie.py +++ b/hatenadir/ds/v2-xx/movie.py @@ -1,7 +1,8 @@ from twisted.web import resource import os -from hatena import Database, Log, ServerLog, Silent, NotFound +from hatena import Log, ServerLog, Silent, NotFound +from DB import Database from Hatenatools import TMB #The movie folder: @@ -58,14 +59,12 @@ class CreatorIDFileResource(resource.Resource): Log(request, path) #add a view: - Database.AddView(creator, file[:4]) + Database.AddView(creator, file[:-4]) #read ppm file: - f = open(Database.FlipnotePath(creator, file), "rb") - data = f.read() - f.close() + data = Database.GetFlipnotePPM(creator, file[:-4]) - #send file to client: + #send file to the client: request.responseHeaders.setRawHeaders('content-type', ['text/plain']) return data elif filetype == "info": @@ -74,7 +73,8 @@ class CreatorIDFileResource(resource.Resource): request.responseHeaders.setRawHeaders('content-type', ['text/plain']) return "0\n0\n"#undocumented what it means elif filetype == "htm": - #maybe cache the details page of Database.Newest + #maybe cache the details page of Database.Newest? + if "mode" in request.args: if request.args["mode"][0] == "commentshalfsize": pass @@ -104,9 +104,11 @@ class CreatorIDFileResource(resource.Resource): elif filetype == "dl": path = "/".join(request.path.split("/")[3:]) Log(request, path, True) - #this is POSTed to when it've been downloaded. - #todo: keep count - return "Noted ;)"#muhahaha! + #this is POSTed to when it've been stored to memory. + + Database.AddDownload(creator, file[:-3]) + + return "Noted ;)" else: path = "/".join(request.path.split("/")[3:]) ServerLog.write("%s got 403 when requesting %s" % (request.getClientIP(), path), Silent) @@ -118,7 +120,7 @@ class CreatorIDFileResource(resource.Resource): flipnote = Database.GetFlipnote(CreatorID, filename)#flipnote = [filename, views, stars, green stars, red stars, blue stars, purple stars, Channel], all probably strings if not flipnote: return "This flipnote doesn't exist!" - tmb = TMB().ReadFile(Database.FlipnotePath(CreatorID, filename+".ppm")) + tmb = TMB().Read(Database.GetFlipnoteTMB(CreatorID, filename)) if not tmb: return "This flipnote is corrupt!" @@ -159,6 +161,8 @@ class CreatorIDFileResource(resource.Resource): #Comments: Comments = "0" + #doto: add original author info too + #add the entries to page: return DetailsPageTemplate.replace("%%CreatorID%%", CreatorID).replace("%%Filename%%", filename).replace("%%CommentCount%%", Comments).replace("%%Spinoff%%", Spinnoff).replace("%%PageEntries%%", PageEntrySeparator.join(Entries)) diff --git a/hatenadir/ds/v2-xx/post/flipnote.post.py b/hatenadir/ds/v2-xx/post/flipnote.post.py index 106213b..e2108d6 100644 --- a/hatenadir/ds/v2-xx/post/flipnote.post.py +++ b/hatenadir/ds/v2-xx/post/flipnote.post.py @@ -2,7 +2,8 @@ from twisted.web import resource from twisted.internet import reactor import time -from hatena import Database, ServerLog, Silent +from hatena import ServerLog, Silent +from DB import Database from Hatenatools import TMB #Handle flipnote uploads diff --git a/server.py b/server.py index e193824..e5ce188 100644 --- a/server.py +++ b/server.py @@ -1,15 +1,15 @@ #Settings: -useWSGI = False#not fully tested and WILL NOT support multible instances/workers +useWSGI = False#not fully tested and WILL NOT support multible instances/workers with the plaintext database port = 8080 #import: -print "Importing modules..." +print "Importing modules...", from twisted.web import server#filehost from twisted.internet import reactor if useWSGI: from twisted.application import internet, service import sys, time, os, atexit - +print "Done!" #Logging class Log: @@ -83,15 +83,21 @@ class Log: Print = write Log = Log() +#init database: +print "Initializing flipnote database...", +import DB +print "Done!" + #Setup hatena server: -print "Setting up flipnote database..." +print "Setting up hatena site...", import hatena hatena.ServerLog = Log -print "Setting up hatena site structure..." site = server.Site(hatena.Setup()) +print "Done!" + #make the hatena server accept proxy connections: -print "Setting up proxy hack..." +print "Setting up proxy hack...", silent = True old_lineReceived = site.protocol.lineReceived def lineReceived(self, line): @@ -104,6 +110,7 @@ def lineReceived(self, line): if not silent: print line old_lineReceived(self, line) site.protocol.lineReceived = lineReceived +print "Done!" #run! print "Server start!\n"