From dfd78d0e90b9995872b00f6f33afc180f2b7cba1 Mon Sep 17 00:00:00 2001 From: Robert Stupp Date: Wed, 21 Jan 2015 20:50:35 +0100 Subject: [PATCH] Serializing Row cache alternative, fully off heap Patch by Robert Stupp, reviewed by Ariel Weisberg for CASSANDRA-7438 --- CHANGES.txt | 1 + NOTICE.txt | 5 + build.xml | 3 +- conf/cassandra.yaml | 22 +- lib/licenses/ohc-0.2.1.txt | 201 +++++++++++++ lib/ohc-core-0.3.1.jar | Bin 0 -> 143623 bytes lib/ohc-core-j8-0.3.1.jar | Bin 0 -> 5026 bytes .../cassandra/cache/AutoSavingCache.java | 42 ++- .../apache/cassandra/cache/CacheProvider.java | 23 ++ .../cache/ConcurrentLinkedHashCache.java | 12 +- .../org/apache/cassandra/cache/ICache.java | 6 +- .../cassandra/cache/InstrumentingCache.java | 24 +- .../cassandra/cache/NopCacheProvider.java | 93 ++++++ .../apache/cassandra/cache/OHCProvider.java | 274 ++++++++++++++++++ .../apache/cassandra/cache/RowCacheKey.java | 6 + .../cassandra/cache/SerializingCache.java | 10 +- .../cache/SerializingCacheProvider.java | 7 +- .../org/apache/cassandra/config/Config.java | 1 + .../cassandra/config/DatabaseDescriptor.java | 15 +- .../config/YamlConfigurationLoader.java | 2 +- .../cassandra/db/ColumnFamilyStore.java | 12 +- .../cassandra/service/CacheService.java | 23 +- test/conf/cassandra.yaml | 2 + .../org/apache/cassandra/db/KeyCacheTest.java | 9 +- .../org/apache/cassandra/db/RowCacheTest.java | 14 +- 25 files changed, 731 insertions(+), 76 deletions(-) create mode 100644 lib/licenses/ohc-0.2.1.txt create mode 100644 lib/ohc-core-0.3.1.jar create mode 100644 lib/ohc-core-j8-0.3.1.jar create mode 100644 src/java/org/apache/cassandra/cache/CacheProvider.java create mode 100644 src/java/org/apache/cassandra/cache/NopCacheProvider.java create mode 100644 src/java/org/apache/cassandra/cache/OHCProvider.java diff --git a/CHANGES.txt b/CHANGES.txt index cc6478e3f1..99a5d51f84 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.0 + * Serializing Row cache alternative, fully off heap (CASSANDRA-7438) * Duplicate rows returned when in clause has repeated values (CASSANDRA-6707) * Make CassandraException unchecked, extend RuntimeException (CASSANDRA-8560) * Support direct buffer decompression for reads (CASSANDRA-8464) diff --git a/NOTICE.txt b/NOTICE.txt index 2fe15f5f61..43d45141be 100644 --- a/NOTICE.txt +++ b/NOTICE.txt @@ -66,3 +66,8 @@ Javassist SIGAR http://sigar.hyperic.com/ + +OHC +(https://github.com/snazy/ohc) +Java Off-Heap-Cache, licensed under APLv2 +Copyright 2014-2015 Robert Stupp, Germany. diff --git a/build.xml b/build.xml index baf6a77e70..fccd009299 100644 --- a/build.xml +++ b/build.xml @@ -375,6 +375,7 @@ + @@ -424,10 +425,10 @@ + - J-yz%TzN9jS|=hS z_Fi9n=i7V7NqH$?5Ga7ZUh=ifqW^L7_YcTF-!dY~0yGk`qIB|qZw3J%_otb)EC9LH zpUeJ#4&;AqCLQE0T80wpt znA?~;={x>Ikj%>R<{4x?SD@Df9Yms?&xIu zZ$`uX*P~gP+gKVK{ongJ=^I!X|F=6J{=>T)m}%X4f5w^pb5Q*2@&0C=guq`$>O0vw z&>C9lJ35L)G5ql7hZp$uxg>tCeEv4MN4Mf;NX<7d;^EPq(=g>(%DI+H+!av9F}*P)^<#;17jp zQzX$iQPXtk>8tDs*Xj&Bz8-Jz+Cb9+^8Idt1rqhrq#FP@DL0S}!7agoewYDqJ&-0= zp{2)%IHbo!$I`%tWhLDU%OxZ7VI9758qHMWT`b8lI}&&WVxnMowGf;Uq|4@-4|U<_ zE01Uhpi7R73av4dHF$*c+GexbY^)(PnDZyQ;w-%ytnLwQJs`$P5yv7R8JhBxprJytZ`1|3& z^49WBezESe!cuI<)Z^ArhG>OE_TfEs^pO!C{SzEKOT67TbmT6qvL-wWd&!Dawil36WN+Oj4x)Q zL~0d39{Z*-V`PHs_%@Xn^0n3zxSZsuo{rY|BU{5doJMHqwfU>HS+ju5ikjzq@x^x7 z$BDb7J5V@}VM`bsftFKw1gdXAUt_}dLFNc4fF?@etFkfW_Mu`gV2BG^!YfLCc@`?= zCb97nusvf0)u6xH{kSytUlxD#DX`Zbcod#y2*L`Zi_T~j0X(wj>T4A$^SfZb+C#h~ z4IPQ&9dddF{bytnq?{C!{Xu5&{~u&B{vDZ08#W94@H`nAWtQo&#em~Q{J`usm`ZLi zf`SUr0kPx__w{_HwvK|;41tuidOC>+$l^gTi1NuKEO8+ zPndVDRiijKpciMQd)2|7m{*qc7uPt6#9D#__sKhPQ$(9CbVKOfcFU#L3(fh&gk-;c7fqI#pyO61c0I`_U5&Zl zB;(6UoAw`XKDA-5(Y+(>4Oi_j=b^t9)^`x%f(I<08y~;bhcDmI!ffZ1mn%gEnF9^i zeqIYNV!??mZkR|)f_)OF2351)Eh3jo$*`(G$lS`e`@p+9H1f0j)Svkk9RWuBbE+2% z6Y~kyDo^5E&pH&Qs0Z3`RmY}OD4-Z$^Tv@Dyc+@ov%<)rG*URz|8Dr>039d6nHIYS z@9yS-kE*gHHF?&2P(vweL~>oCC@#aCEH6aMi2?fOY%E36VkF=`vt4^9#v7|Vv1M2x z>!)cLT2&VleT98+OxOWQJ`~tVu5@EM2wGhjRIE5u{9K1fGw9D4FNZADBv?L7Z>$n2&Y?vVw147GSK&T0d$+hu#$m9jx<8)A00Iw9^5XN!6KGU;|_ z>g*5yPmq5Go&Zk_^70?xv4a5sF#aDY@jnUiT=6eLM5UxK?}aLIP(q+;2F0Y+jV1IS zouXL6z&3IEXpm_kVUeMi!SF`L>-~NavU3^+ze&R$X@DeB(Hvo2*qT~%oOZp-vVDG^ zq1yqNG_1hl5idItQ53;UptRAK9AakFKcO_CulOk|f_|^RscI)C0&)*^McG>N(@$Wd z*?O;9qf-@$C79NBr;@}3z1SgIYZ+FTGOhXaHvQ@Xi?fA#WHzVr`Xxez!*0gD0l9^E zD;eX#h|8~xCwMkp2^j{>v6$xW(L$hg#=VbFN-w&zlIJS@?sE}69+c5&onK;7(XX!l zrukCHoB_u(Vnal#6{aShW1#G;sl7_gs`}XcS^jX+e`3pZO*;tBVQb$-!&PJqF}UO! z!ghzkL`kN3+L&xnc7mEd@&h=)PX!}bODIk#jNnTwJgVJV9Dn^{?XmUNBLwf|gS>Sn z_lnbb1s<#Tkjf`IIx>*3d&PRd!J=5_$1h}RixV-`0g?v__4yls2~1oAk-qX^G4%pk zwNGUzTub#4u%^5$T4EEDUed?fL#R2M8*KCXEP&t>j1oC$l>9{f#<-z|U<7Y)Mc6tM zVy41xycEss#C%+4DIpP^EwkSM{ zGS*-SKQ=G*g+!V})X$Bi2mI~DHjxqgTm}Vx7uLsk{f4ZKU(@D}7mK*VC&}laWvJAc zNl---H346rp>fW?R3{#2X)HYMkksEmaPYiy*rRj~fsO3bhTV391YiKaBuxsGg7qUa zkKTU4^Yrc?E;4ZP5jjOdzjo8UI>7wq@#rS}Ams7(zbfEun!~)UT1Vi@Kas`rOr14$ zz9WY<06kb02GdgSW$MXx`t{I}EfTpOu6IpXy^pC<5%-N=t<-H_?^198K8&)7jxW^z zJ(!W2%OT9>i>QECpKt=@6Su&DE#329^7C)PA@9U3^brsM;1T%$yh{FyoONs$=#hDJ zr51wtC&&%0fT0rOToxjC>&y_-HO;yh6c!0QjKn4^UHA zgVpm_pLKT}uhc$1M^_PQfrm2tT3Zf5(4f(1Fl);S5&9M-}>PN zdh{ox?HiJ~sTIzJ!Q^Kn9O*EjMxb=?#K0p22;Go_x%B5byBe&v)WQ>)d!1MG9`Oj1vT$Mxd^oL@L{{V^W|3Ir~pdimq83n=ViGO25zx2QBG0q z{E|VOzx|^~*@xs{6H-*d{x(*M(~DSL>J-LZkREuEZ6wJ`!Twvb)^WWI`kFjD+iiXvHA?+UA3n z>z(U;q+g!cT#4Q@_=BVsU?7HD$OgJ%Nl51e*DBfMT)F7#L~zbOyVKiDUQ+}d06^Y-i5B=lav; z_^?OM%Llj@@PjOx2t7rAc#e1&64caK-JZE1^B1g`fXJ|t{h)&C?)c6AjY8BOJSj?M zgd;bdZZWd9`0l%#W*-xjPwuV;=nTb6o*Qb3fs^H8f4?H4nqcN%=2JBUC@R1Z7cDC zn*9f6Pu#5*2A+7RsVBI@QEEkp65^uI2J0rS)HC-$!fYm&`-j^#5n^NJK{8{u3O9S) z7)Me3o{L0mRgkrq|L;y+>h$K*bKPN#8B?bThdYdX@C3vCy!U8NIUPKP^q6p*op^YO zrXNzFPwb#V{lS^$SOH6Sse9SWBh*Cn_%&Js?Uv!s^5~BvGMa1MV3++?CHooCmyj$- zZ-v=qZ^cO%vsBua7hAPDzn)Bvxtks+S)rq8oDk z&}&3{vniBF7%3_r2)>H9GP9OY_bvDSdz_TGL$%?w*h#Z3xy0rkWA zg$@L3amY*YjWAuiB;I5alp-TE=Puj3o69si%-k5hs<&ufgN29y)e5b&$^qa>|zt73ws}%i(25I2~rmoY2GSO~eEnp%c_)sX*tMr!iy!bmUa%EfHA|bwO+- z+>M-0yH}cyZ8}yQmGl^D${#4cNI@sg;lcO^<>4`LO7^fhp=Xcr$0}aoGwQ5J!)bPS z3k&zoJLlR~2$bCs*L9PY26GggSnDCpoi8Ho$10P%kjp<0?(i+m=0`bPB!Z$tR3`V^ z!y{6aZaI!rK5)L}?S-g6kmSnIfsweq-yvxaio<>Pb`V*YJI2TAAc?M}T0K=VzeE67 z`?c0v0;Mfz$ox(u;v|#SuPm*sSdiM2r8H9_lGz)N7)&C6p9BpBFSZD7SjB>bSg*t< zn2G3MrDXR>M>w`y*374c*xp*nj5mzBm6vO6$MZlVi`i~5{eBfq^KxU(a=a&uU@iJSJeXQMF?NqhHMX@topSz4EdZ1l}g#TV} zp~ujC_3eTCJ|;U7!HXc?Q)$8>-}$u&+S3h`8>pDtwt!3c{Fp=q=@>{X$N@Lm3m3T1 zTYbd#m(;0-_`Mlsnh5bqaaD%cJ%q>|b|M6><$}R|D6~L6skmkN^1KVqxo!S$CM$7E zEYmu3Oq!Kk^Ni!#B1m&Yd8_TvIv*J{4D3WEWZ;&OmqRZoUPT-V|`%> znW4{CXrYrq^0F)eyzD`Wr(A?Nqn8;$zy$gm>hMmAlpC<&TVCl0czvxX=I$unXiDAV zs{^Mo$ZqT5_HTqz39xH64bEu3hjpRRC9hycwunoK%jyRh7a7Bj=6B9`rd6RCZ)Y%9 zxdM%jV~e-5{I!h}SP*kW&VQw93%wB@2jENwHOD<+G|uE3f@Ph`)#X)n358D) z5FOY#Sw8SsnZ-=)o-f1}q##6jH4Y-s%^}bkQt9^Tc8)81)70Mnlrc3cNX>%LMl@{a z6+M#KwEs2dov9vzUZlV+a4rWDnbFOk6M22pGidoUfqhGmmQ9Fu4GhY%PzbYbLL5T! zdHUyf5{cEe!OixtODEA+xq)u?MlWf{C@EIGf<_<<>qZ@)ks}^aL*P_h?9?s!bEdw@ z$|`qnjR-MP|M-?8JG=nT&6L2GwuSi3VE!8jv=E3kRCoc{as$Z4PvX)>Om%L6mtO}V z6#%F}{6Q$FtVqo`6zUP?A=L*rWV0Zdi$Ar(@rU?DAa{0K1KzaIC*Ly+m6hMkt6{&v z|M`|&a$U-M@JHRq{E^8F|Mr$FDl#HF+dnA`?~QePi%mE|3VBH^ za_a=uMet}ZaTH2Kg>+oa$8LMJGNlbI4q1{HISxA@`(5yxf?q9I6~ei=wMAK3Yizbh zQ&%xLJKex;VLEs!i{9KrOn<~Rud8oTP6!R$2CfSTWz7LK?KadTYq}}WG?#ZZ26UGjRe_+Q=|nfUG?N9H?%i^EMpO+BpU-2h5`g@;LFF!s;2elM#Ym z1@OVR;BgH|xx+qsuxQ1afqj*dU(*x6?gV|D1|K&r%19Sc(%Hv>e)a~lDY~ygIKIzU zVeH)RxX$`0c|1AKHcH5-XsRLyzYcGe%rik!V|Qnpp!hz%xdLv*Yr}$rz8>qV3{{|) z)`L8R+_3cCv&&0Rw?GxYu5a|f-g#s_*W7%;pZBW%a7tlK;w5`_i9rFeZ|TK)%+P1=j^adqnA|&#dNK|maQsf($F!Jp7~iAAOr_@Y9DUg#Wu-^ zL3_^OoBn9-XN|gD2dY|my*=CRW@Y}Gep6VuPBzTi0pt3Sa?wSxHXU{09I^fa``?K9 zD?z^LVL62G2Q4+A006ZA4lyb=j`}A56E0EznTv%brrGo9A%bXDf$(PoNgNlU1;ynz zSu7#3lA^axC3arq+m*Ww19t*5brSV{5-T%J07wEHnRarWd3>Md=y-iSpI`$>SQXDl zXhAaT6-LA)RoRSt-zwjklN;iJeNJ%uRYr_!ph?R_X`;d{ng1h3WwLCv+^t_;ht{2& z4jt1`x6KHdW`;Q%wA`F=TAgIVcMx8#$Q3=&-86>#+)-7+Dlwv?f9t4&)jZuHdh8PC zN>ed9F}%mt9VRXF02L#YdJIuY{eHr4|1f1IJX*)iJ{FIx~^dYOC(?tj3q9zHaseJr=ltE?UeVj7QUZE9ufSYalDNLXO3k)pN>c-UTvI+ zv}m*n`G7aeOYj8PWT~g{oXM&6{mE`&#%58_{eYmf1{tNkq}YWsSdl?_Nsv7-c+&_L zWs=$_6Yo)K+Cnc`(w93@mqIy=n79g28uJbK&x@<`G{{r@2DvzW%gWBAi$6X>Bx?)W5YFxSz9qIl298xyxlHo<+);o>Ox(z z?xvdnSwfJ!e&co3Db+czum6CTZ1$Cb7!Eeo6(x63CD&wgkG*%O)-B)&lo!NFPIQ5v zV6IlIZSfm|e_41~5RtDTI2(;(jDNH&aVq#Kk{B5=Nq78VnpA5q}M}2s^F^sgatn2%v z8Qx6yM_p;3Z(lDUc0pl5NYF%rHSleRVP0q;EAE!;`)m;o>qGk&~-DYMXRR z<;qIWX+QZoMGT6Jl2K8IHOXS_$5qlSvzW+WzO6522I(fCkKtydEZ48l0~b__SqWiS z{Tp&svl^-QJwO^TD}knE+`6RNtnZrwDkq6<$&qNdyAS3BK`c8y>MigyP2DF6d2=R| zDRpbD5b9`1^;>CV(W}_*KBipLK?K25^&z}Xkm zNO4a#a*1HhpI`n#1pGzmu`4V{O@G`;{KvJF|BG9#Y#ojNDnv>+89V%UHPJX)2CAPP zK4?eT`UBK?4^lfLh)b(I4$6Nwzl)!`PE-(>;n9wk`&S5J(--vx%w+F~XQyk2UNyiG zI=vHmI}A@SZ(c%aCwz5dd~EQofg`eMUlX}Q_ZE)vk$-9QwlGHb;t}zX>;xQT*1Xqc zA)Sjx7K$uHWL4< z{%h)>Z~b=#qz3Jzz2v;5c5kvhY4#!T6iH325zuodeh1=9Og+(GKP47U-2owOl@ec) zR&u*L7s<#}@5fF6DQhmRiT_~?6t*EMVNnFnuWDc=#LGN8&&r2y?PDEZTzF}rs(vY1 zTGuh-Z7W(&txl!+l<|JW^PK5D&3nB0uFLzpv;eTY&*yJ86d+L9FU07<-aA4>iVNEx z0sh-q8COh(8&#O!sPm=qdYo2reOFHuP z_7%VU7L?&$WbIYW2RmiQ9!W2LtmlV8os~DXT)G=&D2dx>4Bf=_!kyc2jOlOJ{=qPO zR0GAq9>uVl{X)E%Fn=YV%%_7$yqSniXdkbsn40%nSfriA-)NwxJEJFB0-b>=0WVq~ zS^b%Qaf3b`t%i2BKhdC}P&_@6rA^~&Xu4X|!7E?H8M4C29M%TKd2LN2>?=~SB+2%5 z-b&a~WSoEBFI!`wpi(zLfpY0dAJ+$2pZc@J)+In$#Q4_`Wyzp%p>Ri4xKN;LIZ9~h z>)LW!K1ad8uD+g&sOOclrPMNZRC;M{Z%Gui(pAkJ-j%uaV`3xgs1jsvq=Y&arAFwf zkQawk=4W-P>MFTghMGkV+tjI?wl=V^#nT{4v*B26ZZx!rEl+BX-RBZDO;KvXNcql5 zUhLSwS^~i2g~=d~t%Fa*-6^(#OpLC#glqm#Nv{cdxD>va*a(V)IgW}{*`4`F)Y){< zFO3rI+A$QIzdXv<^0_zfnER+8AGLlCa5RlVIOT%whbXEx+BVR_1 zK9Tl<{pT?_Q(Hhk3(XY*ep{kos{)ehC`@$+$##ZR(Zz@8En{p`u$7v|(h%Vy4Nzm} z&zb~Z462OqXSDlMtMCfPKbd+^k4vla)|fLeM|TH3@*|Ng5iDtJgQ&RzgXuH{_0?7j z)*+N2z@YR9)#k`TCW(Cm9mX_}_2|Cy*2z&7rnq*~B^7g6xQ(?!s+HN7XiX77!~F(6 zdIMu9PBW!^E-;%qq@gH8#iWi|E>{V(5R$;l2B`PUazb!v2VXJ5gJtbnJ~qMjnq@0B zJ#DHA5o-voS(=zC0_~75cuwNu44)V%bcw_}=&5w>+C@{m-}M{hJgx1_An+=_k`h7l}#wS*Vv4HZrRN2EXiV zMpPelQXJkv9AeDIqsPAL6)tCU0o#1ruerhOPHNQ9phYe1P!5 z?&;mskoutZ&)i}*h+RVj-#}vLHFtgZaxfJXadDAz`u1(=cBO~)xzcV8vVY=cF$eOj zV)bvmw7?^Zr@t6OJn!$wbRzWE*zvE&E=ZT$Hf_a^KOAWsj>W@qhB@WaPYD5^RwngS z?KIy(O1_omi`Bd6a%PO4PcJ0N=n_?pr%)_$XyK8)8^>?8hddb?~38z`Vb0wDx>Ksrn@itlE)-n=Z{J7A*IPO9#rd#orEm2&hkJ##J zSp2lgGX9zjmgtFp>J^vVee9&-K3+9s(wO{+E^%m69yZZ{gZ*893s~{9!$m@_(4LjO ze`fJQ6_=bay%GAfGmAQMI*bUd~?Kui^#f4ow{vZ@)FYAeJcD(vHSgM5Lu+-(J5VeO9f#5qCL(3G_ttcM42>w2-ruBAlEyC?pq+7=iEQ^be3K_ZN+iFpgoQ$%D z2x+UlqAK;?q#@zXO!17+M+e5b==)2U_?Nn9UfSZ4l>@NoBlu6+UOW47PeJG6es*hjNuLRlhRw_KA&5F4@Qn%a(lZb2(#6HadrhmQ;OgId$^e1kGq zN5Bu_^owIh!4i|_mA)`vZ~1W-hmjh5ey`UVV+%5!-`@y4wdjw;0XA|6Wz~~PIL0=) zNdQESOrQ5=dZB03AhGIES%Hw$Yn7PZhtV-5&*Sbm?b#=KEYb*hMa%sV zUNBnWZH!TNf-yIvlRmuRelU3R30H=Qzv5szlHF4G7SS$QQfLu&)m(_-0k4XD_*|hM zT7VwX%Q8^Qj`rVV4*-dLEoqgOu}46C(e4L(i+9-g&R0D?W=CtT+#9N^K$-6PjUbfa z1Yw{LWah%_SP~yBzvzoxcO#+a2wdwFJ|PWy1yXpRG5FSFe?pNy(&9Lt%Kz{YU7rh2gT^$`@%peEdab+fNe#A# zJOJSq$Hm=eI~SeDo7bk3-PL!(rS=~5Kf#fH& zRxYt$7-#ypAxf#cN>wDw{A_bNK~bUNNar`~P%D8?a*~nCtF=XTBrL|iiQ20##;kcp zR=s>`4D_~qb7g8GML5q9UQnCW2F%hjEuL<#aK8fj9<%zU1AFU{xU5N&=-C53m02G8 zrbqpjBHTXIctahy@g;t@-mF5#RYgHp!IgHnYP>sx_z|B7cGe}sR`AG88z@M}N2Hlb z8}Hr16k2q_rBpq}wCKeJjBPmJ_%!_5bSr>MkGub(gv;uXie2~+;=b#~!X~w+=YUG8 z#Avop6mDL-Z@rlDLO#*d=LY>KTXp9-ZhVzEu_<*utv!P5h|^?b(@~;?mrlJwGW9ll z7y+*~!;3C%wWw+lp+{;c(C4;Hi> zQ6Hrrkp+!`1P?MPfDQT#XTYC$R!Hi4f7^-n@ zFm2qFtN{lkU+#eMTrcGglJ1PRLI!F(;I1wW+OLX?tz353@;1W!^gT72)CnbtrQg$Lx|L;m_sEmhTCjK+jaTRLg%< zs$_^8lCf4$%@wrUWvvTRw#eR_#fZZ3oZ0bVJ(=xfRy0A{dgn44IPBTzI$=Nao{QQG zRh~L>Z$-0p{Zh@|$UcynDRAbBd0+)=v_@3p4nIpZ1;R@IowsA!JU4VVmscI6=DZN_ z%(&f^TJx3~%T=p=nHlUP)ONyFTl*a;-_IR>y_Xrl3^MSLGX&+cdot}wcjdU}a_RwA zp0y9}Mg0Rda%j%yqkp1tou#TotwZ$lMfr8XF-vz(O-$t+gf+UImIwA*35{}p><|}} z0QSVE>!bG@_@7e;Z{ze|)_=C@VMF|{Vcy?2=n5D(IyvYYItlAL=}XwyIXnG5%v0V_ z!g5CbVnt(>7%1AKBq&n09stAiRHzUp*3K8eSD_8BTbHSaq|j%xVa0L3D`WZs>^}XI zyu2xzUd52Y-~zVgePQF+f8Nj$1o65d=$UxUy3e}yI=1@ycz*^4XtCo96qp2M_~l+l z9ZG_XqtuH`#8(V&+VwoQDvcJF24(#P9Dv>bTrM%RXbR;Xl zw6Z7|l{^}+plpd%u7TpZa?;RT4hxwe6|5nFy5ykITNYJVry{*v{?@E2Squ$3p&YT? zX;G%pwcS`u9N4lryzFn2*1_8Hqd?onEE&XBW`X2oDa4{_Sj#K3kghZ;*hJHOe51on;BbFILT>64}vU@j<@^aS6Kp! zN)53ZO+&ewdMh>e@(SZ&n+5Y!esUR<0kElXJFWjf=w1T7ZoeJ6LS1C&Z zi>J*St{Hnq1;o+)Q+DV!$aoFs1ga6{gs%v`3|fV26tZDn2psX0vxO8zbNUJ*c>>fh zux=`5c0I?*;AkCje!a-Gg5VAKH#+G@HdAQ>2B`|(Jk@8}!Pn3y8Rh8y9<$7;z9Xh* zr?k1-h(yvQ_|5k6a&OVoc;~!Ir)K?8d$81h+&U|Tf7s^P`b_0{Bj)=H`x6&UH`nl< z<4{Oo+cLm;4H*$6oga_XdKQqZ7Ib~)8Im;pa1C5eec1V(m|zUgbcZCXWa_*aW-{`L z;Nj8`gm5os5AX9xg35R_xTi1NHalTD26sJV%L&l!OK>pdXoMPUr|ME{J*c{D5bp%% z^~V-b-FsL-4*tjmCYOfcN*>~d5L?kb#493Eo!I+{0;_v8kHL2*86u35!mdoRZ%Dum zD@T#~B3Ej^lNOv34Tqu|j_qoD2|9~@gIpaR(x4;B*?Wty>rL_m_W&e9oKX06YF4fj z9WnXk!G3~j3Qm$q*@%}`Nr*P;o!FxQzcjul%V z1tNW7PFucJe`@6qlq9LY3Wu$9Q+61N2CWt@Oh$oTC8{$VlH)f3JnA^8J0ONg8p`yX zZaell-n?(UU)b5<1Evoxf+s|W$^#yV&s?EL^e1FNvr~vy;FB*iLtmiB6@(BHkRE-E zCr%L1PCie9PmfImP$O|y8b}Pb#H@xc9Z+3%5C!?DGrR{HZ_Q!_)hwy3bnj|ywmLG6 z`VGTkt>iL3I*H{jHJ+_#uUh5b+nboBCs7#5sJK z4}C#|OwB161nByhCgd2nZiwMjg&O(=bp%8(g;zX{W2C+T6m|iq-ICp817l%yUhksW z(kExf+V2QsM0~5m>A35E?Zqup|o4H1K=BRWh$@<<5krZPn z=god=jE7&*A`j=G6S*fe< zPimPeEhQRWEJNc_oJ+yzC02(HCag4e`#YHWDdQ6e@3|qz--cW#t4->h1|6{HQOphF z4wMQ%3_yV1*^e>#ngNPr9U!ayE%CpQ_q7;#o#M)?9q`&E9?JneW+#%8MhG;=1`51z zytFg+Kfk_AjbEAp1g}KV`~y#1^0bBEgdG$*g=YWvfwARndW84h^qCeV&Htg0N zc<>g?8b@?}Ov%fBj(L#-CG^X#v8(4pBp2c;5=Qx8@D9C>ge|gD_z$7 zgkdR3<1mpV#wG1lP4#cF4eE`G+Y^-rMAXh$umjIqtmlVEyYqmM&HRtp`gYvzS#q@? z#Qa3x(ks06uIu)lRf|67X}}jbm|a3K3m|=Ihf>-GzUtbH_{ndT%pv4+WU{c5w3_!DCP z$_qrX6Mzh_SnrZrzL{NE2f%$7k9M+A4{R#Ua{vdjtsfAf5VH0w;8Cq5W3O=oY`Edr znS|+7AgUa+n9~r?S*3QnXHey{7w<@Z-94#53V9*co+uYUhrdJTlk)ejI@YkSgUsAIgua2L_J7$Q*P> z;Z@o5AE-4lTS09PHL@ejv)8)Na` zUtiZWSL*#BT)zVuUjCeYukTp7+4rnRuseS6SWN6Ij`U7?W}7k^xrV5$6uWh4qtK#R zl64uMlWo9$*{g0*sb=Mrpw55{v-Pa^Rw8vM$Y|^sL-D(azPP9imguZuDK1d0I3NKk z>xBlD-Ig(Oe2%uVWRxYQC*;DRlP%wo=E=Rsm$4kB9TyhSc9(UOdU$L3pwZLZc!RFPXF|7qk?<3v10bNYwr|zBu z{=lUJ4@9RmhVsGXRW=$aFoj0so-*onshws}%uQWyAnilJ-Pv$eUO@x9;eiF}iXBe` zRw)$qC!8hd^q1?>&F!rr%VU%ux;2&zWoOsYXDr^1x#;C5*S0S5HMCJ;%V&jAgR`|B zN41SwRikPb>XlENVyDW#8pK^S~ zMxL7IJOW*5DYk`CXTv#mG>mlS6bW7Peu)&4StW`7PZQ`(6dDA51i3a!J5|PA;Or0h zRbDqfh9+j&jXsXD&ofW5kMGd+Xz%sDM>)c4@)~YIw;xE6zoGSLI$uCt^j9zX5i*0g zA*DqW-9E61u7IP=Iv!1$u{HdlKhmX`ZGx1v2i>*%QM7UEI~h|O`d@Xbs{BD^t;`b1 zBynbV8Mr$XeXL$c8Q;97Sz;Oii<2Kl72=D1-J&lR{Lpx2YVL$|$?l^FW*mWOIJ`Lq zdse5r~L$#KhRa*htY>-{`M8qM*Bzv5=X* zjg7I@-{Pw*l|S*73i@}Jk)v^2A~Ov>g7huFtTayDSO)Iv}^Zg_s%PA56|mmO^z?1 z9RilZAOmWjd8C*4ST?I5^K$%KOzSSuRKBo<&#I^ zI&4rUa{m;(O;9a0JZljRTVy*jy1Lg-FAJk_RT8C5=5b^56~>8q`Y3;z626KFj2U*) zS z83bbgMU#FCt}6ekm-P}*;LRj4O+@1|J4qb3#i{HW`Bj`hOPfEZR{ zY@ns4PO&w0dY5EM?q)4*_YWUzQY4a6^*4wWb-tjbq>dDg+&auTCMPQltNS^gh#lLs z&p^6Iq8S{6mn5g|e#()dMGxZ++b zLXsP0;5X284%!nxMQIO)?j+lX@04eDq8z@FJySN?J5y4&SCh@L{3VC?*5;eEjt0>; z!;+M zVje}sP?OH2M~7KbhK*jk;}cz08V(tDO)&=&?^JBG{Fhuk5|<0k}Y?+jRP$rU1} zEYedmNZtDwz*eLi%U0}`dnaQUULy-C17c>EqAwgk`yA^-Ip|0RlDlwDnQvJ)V#oFf z*YcFn(vB)hmMSXW;jzu&Q{ROe&a>WWj!a8DBcfnLv|C;@36$AvvcR@kVdO1WjW?l7 zeW#T5JOgEo%`wp>G8as=Iw|C~i0`Nd7xrkX(V0u$htzz+k+1ifmbIRhaqh(4zhoJ? zpZq(mX*uqldIIRLa0Mcn;o&mugJx9NY##nWSN!!9`AA38>tB2&^(T`0|HfBp4u2j- z|JQt_ql9FN?6Yl@z^~3L`AZWNs>*kmni-$H<4`PN&+8MW<3Oc{k{B{((f zczsPw+inNa0>x-u5BcAvOtKrtTTuv{efl1C*PhdB_u2QE$KLg?_t!h$0Q8ZU_?&iC z2n5=220#h(>G8{rjVAu7Lz&u$0+R>9jW*-P0FUk23&eiK?#GTPV1w^6L6iWn1gW=CxrprkIqK+*m$qL& zSd@=OMA?304scG%YNs}Y;Z&j>W}i|Nr23048FU@{NV+OErluJ0JgvSrNJ&Bv|L~B(+P=w!;krP! zFUopj-FfVi17mv&NCk0TIsudNe8hrc&nR%;W(t!vuFa8Jy|bfX&xjF&L*OirQ{PWi zYiDk?E7tWYab4b_Si#8S#Vqex#Dfp0)ynQIm#8}^+?*FFmE-cdv|FAHr|lF||BYNd zAZ1p*Q8IW!P|U3kSJ1Yuzq1di(HDqKa(dZ0WmN{|wqp^{hbcE#=PW_5+l4~r3YS9K zv}CsR{pDfb@y)xD8f5qPHl8;yLe%8|(&g80_-$|Uxf5G?%%bCsknbj?{2a>^rTmzx zx4BTd)e|X?WAm|6rO3GZUxpI&{dKfIf1%LMtD-~RhvA>~!!vOoA7>nIm#qQWj5GvYiS2j(+9ZoLT^vMy%^Fgg+#~yH6ZbFXF!47W5f6?@qN?QS&DQw<(#|gu zN3?k0F^zE~9uLS_Q=4Zy+^oFD;oisb_v$zJper3Q>k_o;Z`%TKmGEiEyr%&gmm=R* zYa;lZp3wS1za&%HjO!4%Z=RlX9KxWeGC}K_#;Sfz3!);}VGSoxmMP?gsPZ)T)V^Gu zat}0NhOb1hSG+Ag{vzz8nq2&`C2R3Lq%oa@ zk^@C|!Sr@ou>}Yd8vpJW`c#KsbvEi!>xXH?6 z3g&GWnZc|1636+S46^feH0%~Ii!4oC8U3)C-OH&K@>7O zuar0R2G3TV)XH%f6?0DQlW$~f*2{2H8;)zxRv48a^g3=K{anDW^|%-BoG3vzJ0;)f z^Bo*2gWakX#W|^QFRPD~NCJLqq8WbZwuQy%fdtuDuF5m%9xRWH^E>t1n2Ry-u`P^8QIMT0uM7TX@v(3jz;1dEIQkL z1dg`{?X&lV5AeAtO{_dgs0~PYYefBt<5|&(Bu36%dH`)+T`7^!6H@y-!&)F^8I(bQ zf=H)&#oem$GNoZv&q)i={wvMI(%`2d1v&D(gU;^y2R@yP#k&7VtHoKjCkX?9d$mvf zoSK8@&SH>G!4SiJE-x>STT>dpEa3@w#rdVepW@Bj(2E|>1?um#D7e~kMc(&?cs1{QulE?8B{>o5q>SEhWCzwJh za-5TTWPv}Y*n8>A1(;GrGzl`5Dg|d~6grgve3cDaWS<8YU{2+najM;B$IZj#G`3k= z+rMgh_%U+z0VAHDFET9LA$MFBdn0k1h7PdN#Fh84mr~NSMC=K#Kv4<~cyICp2<}jT zfkYF2GF9!;hld*xg}nsU!qS;J_SW>aglh^7aK*_saBv@DYF5e zA}_CuS5v?o;`y%*DGTV}J<3?>X*?;qwKVD#0NNYNU6t>Q&+VN5C6gT6O)WK z^pzm5w+%njKvxrXa9PHCK!+WNo4_?Q-GhLpKV&Ff|@+ za$1G|Sbz8V42H9OZEw2`7`&uwFrNDECG9uI?s%@+UeCI`zC?cvU7Mq#=ZftFAiQ_s z%C`q68Mv@RfmIbZWBA|+gU-qC>kj_`XGn>$MGg2FDsR!}@W+EVF60j>u%wlanFu`1 z*q<@ESk6coLvsFYpn4Q*8R;6{h zn?m1U-BlxbXKApYL7I~~x7C`_llSmTwnA;mEM`Z+tj38P*QN32UNY44@g&KFQuVTw z!ED{(FknNao=C?RxehtHGN|1%3E?2x!q8-0&leju>!gFDC z4at*d0lv>UOS1!dNr)Cd|mj_lc@_> z(q_*;@y*%7hnR5qHTsrpl=`A<6#K}YYXXN1U15GN(S?==W(^O5l9B|AgRPxLva9Cc z7smX;!txA-SALi3o2tqF`=a;XQ;08rzTzXLEiR$zP-z$b%f6_Ry>o@_SfF%|A zSbb!{T29G*2Y^X3&1Yoi;8?8_-nt>@)oQwM1(W5r&|hiqRl~Rm1gFh~Y?1)|pi!y@ zBx-5eXeKZk+p~9*O(~^q>d-GUaH^;u#^xhQJ@c{m3i{f3xE-VKbb#2%qaHy8_I zrCqk>A#)H|_6u#R7pnFdnsasQ2F4ng$e(@kH_qRBg_kmzkMVY<*#4wD zW$mr0*Vh^j(TVd-5%^Hx5Pvhx56!Lp+4f(iQC22mCN_$~0&=Aa80T`f( z)n30Aq~)I~z|W9--M$8W($m#@h@fG4yo8_Ee;FJ>b-L9inL)HZeS#0YV?(_8;=cdx z&D%gvvLRohx*A#M5ao6it$cH;>XJEpWNBx#suK1}WCtsRbj(CVZ>G%6SYM7B%lDDq zOdKhPVs`;EmKy+@zk!M~k7gwq-^2Q{-d6UI>hu)o^c+pdX62)~BtxExRtL)D>W{~J zh}O~4KOj`}h^G^I{_w~=N-cKv#~XT?Gf}*H9aYkijot7X2?-GGp)k(v0m_4s=B z^7SvAjeitkd+s_-sqaEe@hv1l^&iI~FBzN)Q+rMxd+Q6g|_#gAuf zR_fjU7Q!_-sxObnTfuF?d{Z8vGd}9!`Hfwq2EA@)a^uIN9o-{A=4HKs28q!QP{?Ur zPpZxh9?C~USmII3R6cG3*yT9uGX5NMoIc!G0c)LYXR+>QEet zqdU|dQjapN48+SG=7)gYXqd z)!{M`NQJ{#ydClxtmxl~`L6y%X$)zgIVf@jN8 z`oTw~705aT5PHe>;!=J8vIbQF+1LBAHmMr5$x_a_kpnIHo&EtWej_0Ys`l&J*L1Za zgSv{4Ti-O)H)uNz%`>B$&$&s=p}{8GE}!{|plz21IVRi5LDzPRJ(S2*7qF^Smx;l% z=0AIckt;4B)~nAXo`!pX_tin`YJSsI8UfA2>}F&h`4`cFgn7^QJL|MR83O)k5g@ zo;e&UG}88L2kE0$BE?uS`ozqk!<(FHsI!v+HfV-lZ~F?vF*ng`4fR`qDOg$+;laAF zd|9}t;gs;}7O3LD_`UibMW*_ry<(i6lv>TZWV&g2MdtgI>)IH%3&Nzuv?n6-Gh+_< zp{!Q5oOs6vg#o+XBvf!?>UigXZkbLK=VEjl&M$UVx@p;xELFdy>qlAL^=Mk_RA9t{ z^KNIC)l49~?WTaNA6))dW=Cc9VK*Gn!SzJR8X|0nApjym>j^x^wMaF>`~tQBQVJ$# zA&LqS$)5cc@$$AAUz+s*>1GJ=!gRfItAqi;=-<&mpWw=vATG%YeBxVqC+bsZ_8fQ}%WYd1~}h`t^m`=PAqN3r@ouC5kb?EcxeErKQ;E3aKiouzhE6O! zkcwHy7epns$)jUp6b&ZTr0T->+3Uq79X zK9+?EtlHG8mdq!9_MWFS{Bde71)Pjusi%^v@_d!qY!zi5a)|hsh$Cd{!P#uc%Sr#c zL+0(7n*;9pmy*+Kqnx})m#$$CctQfU657CA=NHh$)*y4cKWVN7=_s?mUeACH#&!%UA?r+WsbISp6kS-7IH&|)~RV2%cf$vE8hKKu;S@v$6F?*TV}^u z4<8WqT@z6+DxX_z;g)Cgo0WalF>@Hcid|@ehX}t#+&%)e4)t_QlZTj$m|X!Zt`fZ!)uH$svk~`QnE#EG z#6NGr|9??-l{9qy7ldtwlBDyR62hkeRZPWjNO~hdbTecQJXwLVPQDMR>E5!{c`I#t z;*f6~wq}EHL_85yx=SAobYt}{x`X1j0|-0yGtfKvpUa1c^3-XZY4%i3M(4w~!%5te zC|<8O+-@XFEHv=xzbcN@dg7u`V;nFZ-2+hQtd8Zof|Y;s_s|xZ%FUPM=$a3kW%xo< z0aH8$hGS)GP$HC(=DcjrW>b&O%Q|6Pd8k!`8nP)@Hkup@*(dd=T2(HdeWf+VQ*0RK znmTnx4LDCN+D(n>ZR$24UG`I#@#`Oc+ljz=uDk2yZ&2~Iz64uF59vn@7KfC<#>Tv= z(WT(!kMBHdNfvH9)kaqkkw=Zp>neY4)5)yXOq-p!mmn=-)D)uku@?%DAbJ%^)XixS z5`%n#=kYhE6 zS%TCh&&e^!4RV7mefCYX)4SPM;Xaq6?W=bi+_US{AGoNT=(;dM(PT{=FEcTX1mYst z4>+~;iDux8Cywbs2}ku|Pt0&Zm7>{WC!XI|?}4+EnOwQd<`_w~KN->9?t_n`ZK$w5 z_76bbB^ON*kaS{aZ0d%4`-)TX38pX3ug|;o7e?lMhWe=P2NM8%^@+(S*!|>Z2mLd8 z+0)VgP-y+akHFsSWxKE)POoO)r^R>&N__=3dnaMv1-6s3&_S~iVU_FckiPn%C+LjQ zE?6p&hI~KUAh}PX;VKYIRCKe%O4}#UR&0+rpDz?4pxqzu{~E92c`5HZyV$IjMTZ;| z*S7UU7bNU2%sin;ga-QPz$&Q+FLyELk`(PoOed&u&fNLbJIfp6apKwO*@_C>0r?4i zHd7$TL6koylhY<-$-U>Y^>9~#dGbE&uY2YIk%9P}6n%^i)Kc+ogot#pg98PWIA9zV=YCDQ4oXGUh0DSWG z3)+MK#e))~>Udb|;yNK}I);5qmzxOt8}2jcGL@Z&^AIl7&!)#4D4Ld&3G`%&fIm%- zKTF4z%kL(I`<3jeri>MmG2C3MIQW3InRGxqYE8*66rxY;b&CByMJN`c7+tw15{v>J zbFUBcu^x0kfGL(3ob`qMKTi}_?9OU2-%lRpyBGh@;M9M8_WuK;rE;ODrHbo$8E|l^ zZPkl43?4>7XPRb6&nGZGOA70Q07FZGr865p_*i>h3q3~D;+{h=A*ooOD=isU*!e)h z!cn-VW?T;YCpY4i-?$Y2eV>f?xq|T(f-Q1x@F=~_`AI-ZbYo}zjdP0qh`np;itEVv z2nEXCdE!Hvl5!MGyi zFgZo+Ckx|Jy7XY`T*qNcEgUfCxpl}(X1IFh{EOB!-G3I@F8QgY(9IN6}wIQHcrZJ7) z1{hLCfHd=?<7!YiQfZF;Bq!NHr=467qRZJ!hsAoZMF97)Q8Loi=p=_Ytn-Ku4GqTl zq(+U4v&6RMrHtWRKD#kx^VjAHexsr(2*h=)&xZ-?bPyg0ZJu^ttdFYANH;8K^cU3=TI zNQx@S!3vkSzZE?ee zE%zQo(Ho}LR3~=GngZhs;n9{x|?oM|!=s|b0Ysm;#In<7;DYf>IXs*z{11XgletWYRvF@#L zZCGwIy{Wh4=CDOS4MXgPoPOX6ahSpi`W1_!#;j5nKTwfJ%x`&L8Rus1WRoY8@7Pm0 ztjo5cX`e5Mmjee)1EAHxI>pR{HT00_-7vUc0I4IygB~%4@g17KXyUe6#7)?cq5L}n z2H=m5l!Z2fMBra;D|)*!NzZdAUKfsL*mG%7mMH&dd<4?psfL zfvWOojyc4aSk`+Z_tH{Traji|-v@{uA;H9l>6ug!Uxa^~F zX~%@`^&v%VFr#*=o*9%G#2R1}nTLuq_mpPH7aRoGgNovXxhmR&=?}056Mk3ce?f{L z5J^#H{i;wQ%(D_y`TLV>0d4t|C|SA9MuXeecmXk8S#~>}Bl2jTLQ4)nU3{k&|8yy? zjvITQo1sD^aw5q&T9dy%te=$dbc=EI=hHK>wCK317`rvK&$}Euki(C5<~Bzl!-)8T zT2_?32~pWOnJ_D`N8!`kOZQSAhZX=k^1FcGw{qIOS8i;85B`|P$8$3J@A;-OSMGC% zs7}kyx=*VQZE|nC2UPy3$Ixt1SK;YAPW1cY$p9Sh4n1!7;1ysUJq+5qQh+>A6&*+t zUC$hMU)2{<<+c4sY7yLTz!$)EkTJb?SZu+Z|N9=dGu( z3KwtYE?jASW}$Me5p5kpk9=gXdXAX%wAUeHv%MAO@8J3Uh=;9m{2LwZA*01%J*Ax9 zOM>tXROR!p^%Ju76Yb0Uxi7b(n_d|e&mz)GCGB+zjQi!RLw>Q*H*U9Ud!@avn z)MI$EsZg0r9}u$7*4mqKX$D9$#Don!jdjY)_MY+<>ev=HPQ9Bl8BK~87oZ)uT}68u z13z&Fw)UT1&@TIEYjC^twBNiRE?FMl&E4Lx-Ci_hg+c^`AVuaoX>uV|2+49I+jk#^ z8%3?(j7_zZS*QHAJ~WN`P%cq!RE}IzvShYn-`n@WtMT+>wfw5M{>} zQoQ~b`-FNTCV1|}ZR{74_3S zP0==;+I08qETj6kyZY?~(hRBE^TFo3WI>B z5PTv}=D3Yx<3XLDn~djtpR8u-pyH?3Kv8Io;!(EE8Q7nDp!SI*Xt9_~HD|a`kphE{ z1{hj5>8ecLWT{%t&kwUoSTnp-*TW5^?=o$`xX(RfzNf5O3c$2Jv8pRwORO_qym#C* zt7PwVmOFG>qh@=v{G#z&JRcroj`G2T5zHJhr>ZnhTi0b{<$Ma~*M6%pyL?MLt4Fb* zhY3rLovX!)RM%v`mc~^3BNiG_QF!*EkRwNGagur}4M~Jy2m|%EVT3!ST7nQ(I2ddQ zzA3D7E_zKwY)%b`BKtQR9JWbUIN=VCz9+M`=ovKbKQ4;&|7tHCx}o=aI@S zK(nVY5NQ-EGx)@vUV6JE(D<3Z&tA%Wxu@P29n0xP0Yp?-5S1C0^b`xr#H{*Sq7Tmk zwu=AA?Zb@VBJV8C}S6aB(I98y=3c;pXN@mx4pk|{O^-p^FnkNJEkhBT6jGb8u z;|m0Bk|(RTfe|gHY(k+GV+Hk`!Cxd6L==`_{QP9%0k7ozq2K>de513|^7TM@bUDQ- z@aMNqNJ1a?TUM ze4yB738laLx1sF^Tr%$7364@nup0ZIL_76e+xpb{Awp?Hm zlQ1&K=`X1J(UVIYvE9xW(dCyv0veAuqeALmV3YZH1i28l&=#O9a6W&s ze1E-0{(@$>N%}<_;!zaDwLnr7>_H^(iSs*M-sbe)7oFk)Pn{O=(R0h!TBN$E6|Ad| z@=A9O_dEc(hFwCF=#EPl|8YR1tV6m8`Oj~K&g1uy^XqN*^%)3)r`&BL&q$jvv1!e? zLGTufM;kIhD-F9MqIFI+w!HNkE$bFl&yYV&6cs|k2_@@ff5$#3eLt|ArzoHD9yaZa zJtJ(g6k9kQzI?Tu-V)m|b~fW^B>z>n>>msHlgs6e((fF>{hcHJjZMq{p8fwTNBrv; zkP!c6wOnVr!5UihJ2Q#cK$OVXDLJ z(|eQY7J3Kqy8OTkJ-HlF;Kp0?=H|Hi+t8M^w#NDOG4+l6R^#XP;j{(KQig?EWYX%@ zhP~3|7VqQ6>zuFlk;c2_Lh1FU&$PUegDJq6>Vz_;oN9C>Cy|rc?)1H39;N7n?~>)qt{5RExAv6U^e&g zK25fTBBWZNZAaL$%TdLqRO?rrdjXZzkSnFCL`U%8y9U=ts2NQQg(By;rqf5QQ9cE? z>RoWvUm_Qc)oJP8X?W)HO^7n0FVcr#b?}G?j}#pyzE%@OZR2>9o4bL{JYF91i7av{ z++%<1>XyXa^8F?GRmBRW5(r^2uh~h4^*K2+(?}r$)r+n>4@N^_+|n{DGY`88HD$>e zn1m@8$vZR0JN-jkJ_>} zKX(3t#e88JV8S8knm8yP+hJUQ!T~1gt?0lxWo>vBmmi>Q9P=7!*qWTQ512d7iJUpe zAUnfEx(6!^zZVWS8}m?9;|r{+%YBA>pPw!0?JHS%y7kC%iAxCGT{0Y9e-0Na_$_C zT@^$3_*?LAWyn_cq;s?fGzTp*?JNV#YWNuv3o@u^wYrvI;*YTRC!sEI?j_qi=rTuL zdk|e-$LxnWJ0Z=&a#nW}dqm4f6a1%{M8Z|cP{Xf!M0iusw66j`$dHbo87VUAkVE+wbJ(SOFU(?iqAXpNvlIy`9H;iXyq_Ydr=@9L&L~ zMa96IJ!ptw-1AC8(y-Z^{bcerd$qEr`VtpCg`CNkdbBXTi4^BNE2t7*e@tppc+R1C zaMjNj;5KoU&xu0aqy|(%nmOy2HUG}9IUtFkxmWn5$Pe)3RR67oC;yns8K`{JxC$m1wcG(9_$su@n@92EcwZna@nxDjaYDaUA(@txi}3xwvVq zW~OOA>NyMa$>~ka?CvjN!j^cjr^FV{7*lV5@SofGgPg;>^+n!hZlAcD^Ey%Ggkp&A& z)h`lu&g>osqO$;ecJ?WETZACunGWHbGoA3AYX8f-T~C~tygVH)ZwO|byIq2Cb2gf7 z2B|p=WSjF)$YA+K8la=-7~I`z&2JwjGvb6bKI(bY%}H5zBRT@QA~NRK<=8FWXu7v> zAEuboOsRD-Yu54jbaXyrEAj+XwZ%C4CzhcI1BF=3mBVqlcJ>S`Oc@v!Yl-lI+Yy6a zt)YXJd0h%rC`t46yc7${q|xx7O8&jtrAcVwNTxda)hQg#N23a!G{8bt=obmMbT29fV zRM~%rvjv*4oFn!_ZRGiz@@s@R=P-%LYGgt}WLk5sBc(Q1L*#;9bNqm$aE7r>t;XJ? zQ3LAfYnxopx;urqnrPN(n{IjknBmcY$AgbdtA%V|Ozcm%ZD6Q~Y$HH(V>I)13 zOy&^<)I>q$aj~Z<{1?R5ZgB*FvkEGoW<7llB z=u2|o3Si`D92uG8=nOY@xX+dCQ*}rmr~{Vd6)H4!kr|>%M^^LPTd)LKNjL4c#}%1e zPMwN4w5P0TVNH0M;TJ3n38NqcVujtZ%D?mXWhGs=Fr*rIEV|sNA034z)lsJ4Qt5P= zkcxcg4l$59Jytm>@lPI2Xpy2X(?iOlXU&fhhbnJT?pA$mai&g_JU0$4)Nz+yOgwPFIQo$t0II)@JE)U3md0mztcRcfhto*OoAYgVv*ab09!QjB-su1 zfR0SEXq5nCp~TwI_%r7LYHoy3*-ZCMfe-HmG+vMT+7!%tIJVxGGMq?ga`>ufHuR}n zw6jUOOoW#%?dE~)G{7XjPhf{g^*TaMijCM;L9KE$+iGHlEg8KeTMDGE%Xp%9_>N{I zHJx}|*EC+)-Py&D&{)RzmtZTKwos}5# zaMcr)TCB>=YuN@$)rn!3sL4XKH@WI%s;K%+Im5XVJ|xkXDRa`SFAn#~PghCv<41x0 zeNarsg?`l*p=N_uE^)oar0*KLN)dQ)DI2@G1snpi|HP_oTAa7>SikvvIh$fmM=j#2 zNG)2Jy9S0u@~hQP>yxEj!?mDVMyodM|LT2oZ~R@|G5AQhHfKS$EY-MSvEdm7quEhq zCOd|5_@)vW(c~7oYyl0Opx+t*Hd>>OrlJ|?3K&<7bfq5Gj%-0C1(FW1XjkTpnoBSK zO(m&f3O26IQ2Nu9BrR0Va3r5_pHf}PKb^!cG};i>GWi4QowLlkHGK67#ksm(mA~Z% z8L0+bXunZ|6Fpr3H|QMN<~o;>i2=H*1ZJ&2{M089FkV#=t*XrYDi_q29J8j*<5Vql zu2;D+G1r;K?gf9huzkwrg-M*s7s`MMLlE}Y0|0mDnml+Wz#Z&Ke5;cT zlk9hES&Ct15N5mYJ%qSF63!sgs*m^)aT{;Bze;|nZ5*tH#Svh0+y4au@+Fitr=Iue z;U?Yie&_lb*pk1)nJ4#alLjRik}3g8yw<54KnH00j(^U&Q11*?;qJ*&!aqk!h}Ddx zKZj2sPNxCi+Vnom$7k)-G}Xkv^P6bxuDX1Pb$SWf!)-n4%4wvR7p!v;nDK9q6&%Hf zS!H{6q#e{$O0i1VYU7dwzOO|jO7mHlR2xbvJ{{x!X_RdRW)`T-`H*F8IcaI8h(%B_ z6Hy}$)}IrDTMgdPc7)_G{E38BFx7G=eGp(4sHr`75g9XOUdVw=#KmR^mv zG+uY2YNVH0VP~Rb^7tjRFokCx5#qPpD(6dM>$hthAJ0NP6|$dM@4Uah;77bJysoY5 zUM7IOkYCIt-+6woJa?TmSe4@|UddvNW$hZhhp+R}&TSc-S=TDZw8W_}A zU&OeYxNPSu)h{>IdLU6|fsT?j93cOG>DOkVh?H>B#Qc;TAFQhOMlC_?+VMMT8sA`T z9<#2k{fI<8uVCPfZNwLUMO5}&A1Kv(nNe|Zb0w54sy0CiD>A;rcQNeJ7CEXp;mTjj zIpzt-V9^eM3L~3k3+N{Hojchi*l1(TKT~yRQ+uIq&C?<}>5VyF+P2dP_QY3iM@hWK ztlf8Qrlb+-3M)uEXi=YJ2}q+|PU3Iiz__Xr`;5VUC!_Aq8jJk9tb$!Q;jFkJP}pmw z2d9kD(xQ=2e~?)#n$hPu&n_$DHUHrlD4NlY*D(6b`ajPgn0B&#q~Ef{M&DBq;6H9j zq^zxs`R(jvO93*+fY`Y^-0wY|i{b1^e$??hdyYbhjtgE9Rc)jyA-lv32 zuZNO(YC2ddEE3yCJw$fCMzCv(Hb5WVD60vkYC-7}HisSpB`Ag1S_@k3Hr*5{@AO(>GzZ)6*2v8gxZ;nMYFS1WP6pw>zIN> zyisK*Y+*7Xu?cZJQ_1$?wJbxa8Q;86?ZOGN_=F$QE7U8Kytx(IbEoa<-lhNAuI`P!$Air$km)$JW&4hsCg3bf%ZvJ%h5PhiY|jZvGeE zBARu(8)aTULP-LqS_XlR{khMOWz~p#Ck50QOpSS>rRx%AB&wuzpvlBa?yUGm?F6T1 zmtpIZYniBohBM5jx!n?yE4fIArFpm9G;UKKX8Q&jHP3XqrQn&m)6)8^)tl9pGnMK{ z$wm{NPK%V{fLq9-t~Pi`zO)AIEFfs4RjgkpGmq0r)In9ash(3KRT(oraIY=UbqJd#YiKXCB+ar^V&Jtx z0r#8yF$E-KgJw(27lmfPa4-_0`qxm|7pv+0cEBZ3#e=Ocmz$EubJ|9|OPItqt|G3L%=sVm`OB%`f5qPe%KP2FI2< z;=1Rz$7DFnzjf>S=Un$s?G0&N8)Bt@aAp5H(i)UCzX`G!o{wWziNun@2#X-U21^5q z`-xnBppv7IhoZ^;s-PJWP!aHL1De4rXJnYe-jpvBL2wyLtClAX~+3jM8d7bd)R0Z_{{o=f-(@Y}2C zBXQ=4YbY#C&sA(}m!im;KuO;X&ln4rl7?MgTsJkh3Ib)5DRh@)2QI~Q3Vlp@SrK1* z$T1I+R4=ocvBS-L3tMm<8ymYRwof~ZvD*Y};9#`8q^sUCx9xi0Igp8!V)s~dxKxyqmErxT;izHlOEMEI;FTw%PZtD;8Gu+4}8XQ z{*uRt6F_skSef;ehEjm(10}l=Nc2y!zX)JfYA~T?NNKl}7t^ogR;{l6l+LgoEn^mb zJM5;iAdE-d*z|5MaGO<)^|4r*nmQmSawBd78lp-n)HY9K+>zcreBmpcqT;M`pg>RO zrGZ30CoD)2{MujJd}@^?3{O1VDBrlUNu4hbsJduv_(QS$`Y89CoD&R}6{b16IELfI zSr!_^a`<{L+o!^WWjdG?1j6MNG7xrLzo%Q88f!T)-lwnK7FZPaTk#0wclJ=Xc>3&3 zflrmo%TM0Oyt(eB<9XYmZdNs==s#o(U}bC>m?`a6#vuk9tFx|^J`#VKK7!JOC0;1Y zJ84E;JX5-D*5`^|sv%gI&P>VkDNp1dGZT?<) zabl!ZoY+C@#V|IAJ>49exqK1>OL=BL&vRPhyI}AK9r71}ghS{63-aBxRnp~j66m2x z-3a*BzFtF8*1Xk@kc6c|;4T^dxRSf063{OJ$Y#?BDtpEzA16bR!LjG&G1YdOuOdi&(>BlhC0M)7kEsR$RqEK8=vOY&q;_*=42aePp%|WR+_$MqRqKLwA>=?^okeh;D*S-Sn1*Kj8yGs(%0_(E0 z*|m=LtFb?kxX`ei#Rz0Yw;CgQ0jm(RnXpzW9i=KTau9HHoI~tWDW+9`&M8s*P zkUZ^GxoLiD%2qxw=~F_}qO`1EHNLRC;PrjsB&j5oBO0I%t`6f#Nux_aoRX|;CA&ac zW?&6fXDuKLdPl9%10drr-k73EQdm73MAK>sNBZGfO+xhcIz_9kk!IB15iixg?osfI z2Y$k-A!VHoM{D>xerB2wsF2x&Kz&yCO4%qh`DPlJM8F6J#Qe|K)<=Rpn!HiUw&{MjKzfvrevB#an$c2-+ z(ePhglzsDvlX9XMJtDSn6!f8Jwm@$KBsgeEGZdB4gviI}`fRk7yP?&<%5YVRhJdEyNUsadgC?0_x*S#B~+&`!ynzPFD+CGjkDS^JMmy z8deSXXfdZHU+>w3K6toaG2T?3-X?^OxKyh;G7keBr3K-;W%t6pK3EyXtQ`DXv08*Z zqoj_7T5UtP<)jlp5}MH!q!RM-XsSLt+Qd6V+B7dA4P76m8h%+81wz|`$nVHQQ|IxI zE1o7&h(Rxlo?Yn4E3gZ_$K4MB$%ib%g%2MBOpeOm^AS?KO&})a+m!O3vH5zTUj;1X z=8KBog7y*OJI=3MeRm!O@g=neA(roH|7R_uD~t|YM*lV}`fkntjl;$NRm=XniWO); zdT1Foe0e!Hj_(^?Nu?HKD8^KT! z5D+MUHOlxY#AayJs)M0=^$}4~wm=Y35IiVv`HFK~zwS0Ts0WsK4wd z0kU{sJ@7!|N=Km8NVLz_XFp)tw}bGzVs;09c!qt&FM5fek>Kk*+HfD0`4c~9xTC@h4jt9+0_!*9`@V=bn(`kS!#~tRzY=$872cIYyTorI zQM{6NH-3CVT#Yn7ft-H|hQb3sBMjv~7dgBYJjnkj+JU8rlyvSc$__c$qDCr15l!eh z7$pf7ni3Ijfe@UnT3^<-%(89VUFyt3bi_|Mj0=3S(l(b z4t~5>D(%d1-Fcx(W1&`(lZIl4Zr$Y`G2v<8?`l>oo{X)nx(GbYnmoBk zi)9F?xKp=em$7ClT{{oDxurWfIa}9uHY}VR)HL;;UIsU+mAv>btTX@??#R}VRb<^& zAwr-X9E3H|g*9WfAr)GKS&7RZO=R0Viy8onvGp40gK;6rFv*sXV;Tq-k&XSaYcKJU zm5CKlF^7N|%bAmo5w)TF#7Y-QYeLajT5K&PxGfNwlbqmU7pV zG0s!U$x6&fWQnXa!HxBrupKp#Dpc}KF1J`ZZP{fB>0{=R1K*NS8ENJIM1=yIh!<+e z(*5~YFs*SH^sziQ{?Agtf78y}P-HlOd{MM6#PO^h>gB;yNb>-iuHl`jiKmKWH{JdV zy29>ap=D;bSXo$A*z+M=P(2cMvJ8uH;SJaEy_=VdCbJq$@ng!5Wt#ey?L_8v2`H{M zdbhzi_M7$ntDDnniy}y@!`g+zN>^pp2Xk7Q06e-K|3^h5$S_!{&0bam`KI(Y5aqC! zCf%Fek@&n&TdTBU&pK2xD(c!IvXx=YhX7Zl#z6w&gdEza zD~P0Gbl%znUbXWJ0|Zbh_ZEfEOReBS9P0}sCUz7SLd3VG?EMAO{zmQa8U)vq6fwojTo zNtoM{JycL^nrRbT*uQd5LMxsQcz#|Jp$G`_o4PwgB@e=Cat>WO3+<&fd@f9&&S_$< z;Y5+TBPaga9}>gSjY7ycGm+;qCE1m?<Hrsfu=KBG*klH(eTLveJd6*XMvqLp!Cp5-=Xtz)BODiOC) z=He0uLn+KGEV6t%Kvfkgt+pbeayMqb;4x1qk?rv#TP|Dda^cYH>gFMQVj?Hi z$jucvW`=A35>^V8R;U-7p%iXIp?5t1MP}WBQq0JeVV((UljaJ-C5=a46!sgE9RZS7%nK#Vk9)s@&m#ov-$*4t_^Bi(^g+dVw&DBh0u&M3H$1 zGtLL0i8>}=!tQg9p-~CIxL}94xk4!bjTOIkE3H|Mmg>CUPedFr`ZZ@vg#x=-Baw^f zek4xzqa5@}ZK|~AXJD|1*aTT76I?*6FQ{O};=)E*>*QtYv;?(v+RhIS`q{PE>S9}8 z7inys5$FhnFR(HOYEP0rhSm0Eb2xF6$>9C=4qHyPI2T=cY63b6AJD3->nd6)c1hgx zmuCAEC##iJ^FqQO>_&dvfKwt6X*(+x2=EQ-UlZQyT5Gcl;$4I~LT?0rz00f6&+2gF z`ve8>G%1=;Y*@^;&`UHtb|nSbTSSLw$NoRc-ZCb$ zDA*EhXrQ6d#@*fBp>cP2cXxOBaCdii8t22^-QC^YA9wCda%WyL@7?4i=g-bLKX%os z+PkXO!Z1d;iR#N^X(WK{>?_o-u*}lJt-VPBIbFQZGPMMQyY~X_(XW6QdM51EEG>^J z(ISJ*f4G=(AI@uLx*N1shiz9|q4bBKfiSL`5$#Yr$TqxjDy8wY5=FTzhs?Qaj<5%pM%H`fL zM*#34_$5TnE>RSD@)p^%dhBBq=Nbid;#Me}=NCOCAr(BK8_Svel6A-D4}mxFXlSV9 z2ytdPST-4BIPF0B)F_8}ee6R$#K~@@apQWh+h&A>aC&^Uf>wR?E{FZfYL&BznI$W*s7lW2xZdq#~l3p$I z6EufGKFH{q`89R!VPo!okxDl-mx1I>Ijo%dRsg%wLU@h|8OPC?kM$$LKZAvM+{xa0 z6l4G5A{^P9(_jAqs8sHHEFXxZr0tUKAPFXa?Q!GLKK*mYt+oqIlTk3r3t39qta#wJ zxjyZQ!XR^>J#W$LpD^xY)1}`%JPyqm3$bkySqGZ;PZ$DhHyL*ilmD>A;B>ZH_D@t1 z*}%bXWn$akC7I9I=KV0X@#^>efuf)!Ax|pYifmYjP9^N-`+9CaY|yHGruHL6ZiucZ zS{Hzr&6RxWgcybeboF}OeEbtujV^OP`6ulA>n2mz6FGSHccyiHE5N`4n?)qW(a!9U zpn_lb=F#PJj_GsQ%5;3{8Viyv=U#CIY!2_Jk%K85p3tP*D&CG_8MFQO6G$(aQQQOa z&r#96Ln2<%2iHsMyt|ezJCwg5`mj;dy*T@vpw#!^b_)R#UlYxFE)oa&kzKHxyi(yx zxV=HQYukI%Lhi2Wepj>=mEt@+`>iR837D@CxCti?X|zvl?EjLU7GE<>!mh|yc8DU? zfxtN2o>|s<^(EGVLj@YY8v6yd&|jWq*xvou?PYLp^cYY2n4OYt>#}NIewH!UiMEJ5 zaI<6ByY8a*eMHF0e?aam>ZeJjr2cKsJ!1=3Ih{e@!vjq0c!3|}4o4YzhSybu6$A+G zRTI=xLX=btV`|4WBg&00aAWT*;GgNa^wsfN6%@Zwptf}2Q~}(1`F*9cz&H76U#!FS z@(9Ju(Inwdxl4U19nJVJbV}`og1`dFTX@3yUj-7kfd%je;Zm2_Rj&}6FsN71;6@Q7 zrZQC&a3~?;8LoG^`SR=>`y7#q`C15!@O$$c4)P;pT1uGI6D_68&hllQrAE5MO31%) zdn4uKrD=V^y~*`Z5+leKkRM=`!dHU4*nCmej=4>L)A+lC<&~@l$|p3l6WWw9dAuGsz+l=7qX$n4ZNY zxr0b|aA-K3!J9SCu!w2#<7&9D=^W`X`PUfJV{*x3^4Mm4eL({ddmh7JykoiIEJaz! zVxc@cY4sXw#X}1V>|ZB|)mLbTsQJdfB74|;sH0zeKn@^NL}63?}*Nn z(6FO1q$u4ENi;c?f0Q|n^)@1o!dkls(mO(H_L`T+8lUVgerkE9TH+n1leIp&FVgLi z04Hy0fB{|G%D}*{?jN7S3$~@)z%l_h$*7(+3&hWHAVtJVUJi$WpSe2g9Q{bK!@S61 z)pJDnP7S4hSJ{P|sCKyP0vxcUdg$$x)GPP0`|rZWv)D!mh_fHXSHY;9EJd?NvT0{G zlkRR>&CNKQ`=TdhNU15NPm(b*WtV(DsEC>|)*goo<e9M|naNQ=KAIC{ZnrG6o#@Ts@KlL%Op_+*;{NHB6k z?E^{F@@(4(1a6a!$ykAAbM3)g)%R86dz&-W5NO*2N|RJeB*gll3N3Ju` zqW34V3)~(9+ZVDguU8TY!ntVLX^1S2;0XizN9yjSC^^e5L1b^HkJKpkUU{aWlE#;t z@8I!|I(qthFLHsM9|4eXSh8Q{rA~0$pIoz>;_F5DSIC&7=P&woLNQ;PVs6M5Pz-@; z1XU6Y!xA`wMnS>lkhmM5tLQxvf;J&);XWZooSyM6XUn>(3M z>PlI#Q8HewM)!o@k8rxrf2I=gOO$o>C|^K%WFC9LmlvVjpCg(*0e}Vvh5|Z-JMR)@ zlcB6)Ebi7VgKKQpr!w$SZ)BMMlv%NUL*vq-5bllY6!577%iY^=O%`pQ7%@)feLb zvo~K}r`Ou)OiU*t!J;}ASKOS-&Y3t9g%@Yh3GY@Sq1xbAKT_PuUHN*ye308?@^;a= ze+sj8=Rc|DO$ITmaGsO1nUF(lqUZ2tTxWsqH%Cf8D+y>h&e%f0FZO*zv-r+n3 z8FNxmXKvu#F4)Or#?;tuLw&`P?A^!nCN94I?flm-iz}JR5SR>mC{p3v5p2Gb%v`f1 zSCw}dw**VS0J>ksB%hC(FTfJNB^_E?l$xhv$jV}xtr78^^iUI9R4N_mu?$TeJd;M- z>bHknTv+LrEtb6K1ZYfH<5jhd^aOGrnz60A#U3^_*hpI1;M7MK1gRwJ1{e-wAh4jV zIa1d_`fOk|@YHD#@ic|-=|}7u=n$TEj_Kw^tFB|n>qwNH6^G)k`Qx&*^CCKg00VDJ zr?skT4|b~TEs+qCzQhj$>`^Gpjl8{b7TwUo%JictIXh*RvZUlVL&W#E(N7hxE67Re z!)DF$m{-kiG8mMt2b>oCF&6?`DaFn2XS)XKQa6oph9-|v2kK;+n(MqN*0>geF=kVb zjyuClXnrn#`!3^`1&&j`Hk3{BtyVs=X8~416WbxRNOs`=&LZKrNuvm`Sg$P zH|)##Ir>y9#onJl^Wp)pDRMe)N4oX5F`kP_(H!GBT+=P(3s{e_C%whQTvt_y-l%{6 zV-uVD)S09m?gU%>)W2K7Cv;X%iu#__jWA<6B|5>ZTOWT2lwFa{?Y}`S6bQ^07+l{? z|At_ZYo4a@!2oflQZ{1S=*J;fbybjZ%~QA_u<{P9HlWiM#yeeTwoh*RMK#Y>m+g4O z)E{1PH7mRx6S3ffIs7x-KWcv019MwDU7ZO>_0&*LeaOo)OGeAJ2?9}tQvjFYtPT&QsVI8EbKBPXS zt>1Q%;A*{h|4tK(w(<$h+K&fRPD6+CGV=(hTJcq%(5O&UIdBcu7`Mp0TY=9;p zq9~pQw!^3^=1UTTbD23^~o!Et;Flba$Jx?jpMR%+-TRdyecI&)iJw zmeYD#5u|&Znbux^ETgcdE!ImhSX2eWlT2a`o)OJAO1;BU>>LulwZiM9ekR16$PzJ4 zM+uqe%dxHxF(h?zu#tsqlqggWx}`{hla-VySq)E<;a5UMET$4D>O6PEs+))8Hj7dU z`o|u{4&uMP4RU^X6RF0(ZKR%*Ps*A{>5@Hz_XHqzC2YS1f|r4H@%ds8Z>jE1JqPU2 z-Gn$iphb3Ep04K|?StPjPL4=sC6r8!Y@jh(g5K(zDnzZYO`n&uhFnfU9U7faieF65 zv`=_91`DR3fk!YVqZK8iozx%(iSS7YMcj5_Jq$L_n5_qr3dgK7eBV{w)h8C$eYX5kJ)Ql(W{1XPAC z?UZp*_JKI{p7Z5V4=y|AJ(A%lhKYDcrXy#N365Op#)ctG2lhAb_wz#Sj$mr3c5SIP zY;q_Zp*u*K0muPC%+AB#`4cPF7a+<I7+QF<=Hx^e=J1=^V@_}8%rCgX zioq>SX}xejF2Iq+>KP-Za;7$p2NKH>dzpU!i_s37U@Modd~Sp?&mb;ZfLs4#Fm~v3 zlI%(g6E!z72!|F*#7NxsaeK`F2N)gKi3p79Yd{8~OW(cuSz_ z#^u$sk=VD4ZLw%eEky>WWcTPbD*Ebth~1Sz_gahdO=n!(9zvV|n5R&9w25bu=nJRI zAFpbrovOVD|6*LtPB=V8&$UigEBbnZFFaXxv}_9(GiG%XGJ_rB|okupFr68+IO zbx?PQVUwS=XPNnv|Hju(;q;r>UY55jXZiY%cb|Qx@CuD1MWqV{`_h2`bV6w=6|{W{ z9#1tNphm1%J;6zBFR#=$PhByn6tywLrItTpb;!yX#V73%r3AkMuh`Qs&U&=|TXk#X z2RtVBjC%ta7n$hi)V{8{>l+Xb8dR$(+_Y-&_zV1huMcRL2uO>3*SaUZYu*3%?j2dN z{~^FGZf$2p%C#swriNtLkmAZ3nK z+7FH~E*XUsqBA7XJyrMJ=F;znO&p1+JeP z+4nHhXu{CUs5Kf`ycmbU%Sn%FsVuUwoy0uRH*IE!~Qri?Ob&1hxE5YSKR%Cb}Ch1KkfSr?NJv4)PJ<Gg5w3zgf5#Ym!477K1sI^p0t7561M_ykHjP?r82osQ+jzk{ z5tsylxphM(t^iF7Mj2Jkp$_@EF;zc9PxDz;bQjSI=2c~UGL;Ub zx3T=-GVrqkP>u2hi!hY7deC#IunIRh6tI9c{cA*!OVWV#JdK-wl$;|M%w)**rEmR~ z4s#1d=$MjsQl!#9`2|_FenBA`L970tOqUvrkJz+D-5j!f^a(q>_>xV?HT(FzB>Y2m zKzbvgC1ITkP7_sr)e(x!Lx?26-4!EN1a!E(iCNbe6~&_dg4WsJFK7%`T}u#bV~^YZ_j4xuW1-kN)b?*W$R)!8WT_+wouaY&Z`h!)H~%Y`C+-=SZ%~b6)0yOGF<#0w z&Fa1v#u9%VhpRo$!I}7cT}f_j$&M+62D&KM7(vgYAs&`!GKyU&$_<30Js|0tDB4o&KqFdLMn!YbsBSuDXKfKpaz$N6fk9v&y)v*asTI zAo=HMX=fO@81Ep@P(5hJ>C89@D|dZO)YB>kjlu5$su3=km7( zT#V|P`PaAnDmK6`GPwR-ooDZttm!K{9a2ayMO)cNbZbx;S|KO6OmLL7Ok(U}2ya71 zDK?8`l(1*}zXznh5;5Dz->e$TaQ~fv#P~l0lB%X1mMX^QXXANeVdEaVivgQUA-b+n zV|6Aove_)ckiA8_!>o#pR)&Lmjmqp`g?61rt21<>rsAclV^}K>rkf;LlOp3aT;DW? zo1UKDaW_mKG}CxD40lkkuM3H!Ig04aIESar*T>tJ<9!61?=900_?=(;FnjsO*$5j6 z`JNI^We6hlc)fEi$i3L80&Wly`I^6PF5ir}u>uI;VD>&3c@cVf$H$&?BjJOm!(LQM zciX8srJYU?9tGhE0xR{>k)&WTQUs6tB+yB34OZgyBeDdT-gU`C;rpNpAXP=g2g@Um zAoG+Lu*VbE;|q|Y$ym5@hF4t{=aIO_*HrTNF-c=+s`lC24oDT+&dSG%eKrd?#E<`A zhXak(+Bm9E9Tk($Dy0i?KqnA;KV4X-$RPW~*G5R0SrQni`;;S~xJpQ*`ZQ+d!Xnbf z8>&$c=RqBR%T?z4|q$F3v*w|=%}bJ1eIy5^m|R# z!IZ zbX=v_?v`Hn&(cUV6fZD50Z3d}-hG)+YP#Yr^sBie@6(?m! zEFIgJO+|XYkIs$)xPCaq2h^*jeAMt& zTY18a>k7=-bPQr~lxNi6NzoB$hu2H;_=v_<;&rRM*dh7=& z6SaCwGzOQDy>QNcclz5R!p(fcH&6rJPL)*-y+u$_~ccqA0S-^6>H=jL7HgR|)Gkn?!F} zg6wcwAd@Le&T+(=)9oaqZA$hj-cg7%ewkO1; z&uD}}9pk|}Wrf9Zm}7Z`2Zg6*&?v7_VqKK$wQZC(S&;S=vyJM;yjap1TMDN(Rclk< zYYk?)Sn_8Z*qw-uZ#s!R@u5llNZS1T{s8omLXem@NYdT7-FY^%UXT)9im9cyJOw?O z=@sFv4Qt97X#P7GHV6UWFdEMOUcZ601(`UNicM1CZr zPm#SRTmM~nEBIpO zOfqiV&PUN!oE?{dwP8}yy&jyPnt?#JJnG9_>t7d}MtHKElnEaZY%?R!zc|~QX1v|7 zel^>h{o>jDbZ)xmO#iudoD~YO#5PUAOy#&d=nXBO2UGLQTYjcohb{$gOrQqDM)II( zl!mJ1IT@!jtaIQP?p3$%57b&HwNP*ziXmIwvlu?^1#B&6M(W+uvzr@|>F!Lqb_P3X zG0GS#1AejR%AkyAU_hZAKB&$!D>`GYZhnMMFs}#B$Gs)YjICX?PsGr%tJv%ngQ#ye z;m04zdorVASfi7v76IQLs(aPSxvg4$-=UaeJh!CJFq~I3o9V6_#aDRAS2~-S459nK zza>Bvi1S^_!rF>VPUAGnbbrtKA?Fi_=NT$sWyLraC+T4z&)jfKF?JPDOxjCGTOag&RnKT(66Pz(<22bZ&G6LY>}e|-n(_20 zefX1le1l0syB|aY&QxbG%V5JoH&R1CSm@f|Jp(|P-WQ&WZ;+lXwoX6H z>NJNAwv)k$m{s(#oIKf@U+Sm`0dG<~$;?XYc$#$0adf?(`g(u3`ti8;4-!{6JftDI zLk^fe!w>;eLybFmmKs$3aH>ZW`Amy1I%!88=Ys#T3nD?h>3yGRp*T+)0mR$fI zT6en6PZ)=k_O=Pl%}u^flGBCn#0{f{{wf}Db!;|NG4V{>S+Y|PSaRYHSYq+g6@`)L zgLmq8|I7ohF#{ZUVDu+bH`N`m_=Pe#`K)JTbwtyh_eY&g~Rd41GUaH*_Je=-lj~B zB$-Iqhm5jF2@}VjMZ~5Digsfedo}+-Qa#Lv(ot;{{W( z>5XR^y1^NEB=N=5t2I-O>iw#EjylfUNE(f6AMGLKbQHzfgk!ydl}c)^)LNSun71B5 zkwfPJr#q}Ilo9)%Li5_0ao z8cHV{dDR%`jM|X~2?;kPHzV^R#=K%eN&O|aKaK_sP=)VxSph8~3ZKAHA{Ud#v=6;(QUHJ@V+3h&f<4B$lI6H=R(FxT1mgkM=k%*fpzlB;0F7 zlK}5*r=3t@Gfz@=ntVo=CqBuI9yq;#aYnJT9q4WMBy9|X&Q3#eBX_B;am=cIy-q<+ z6D$Upa1X$ev5sH(r3W%{;MZvYf2;Hpp+P`5b&y{hbA!w$1BX&`@h)eQk+esd(_}Rp|Vqn^;d3QlH=6DBpbCbgptck^d z&{BZsl)S)cfpYXd@x;YVHA(1mfuva|o#3EmpD#2W0dmY2cpf2U%Cu8LA@QsE`Y@Lf zDAs|GRU8kyNCQofAUS%sVh?x)&on8$kY(T@O7=FX?xIh4Y-+RryqR#&UL1+p6Xj_z zDSU5i2&gbgEv#{Eo^m3BFYhoq0FMOjj__vcL>=HmcP}4ggx6c&1;JVWyG;NCYFqe+ zC#az@9&K_`Lmd3XRe`)tLGTSYv%;_s#+M&zn?QIq_}W{b-pqv}udoj+0bzn!QeWuk z9*amr6=S{t2Sy=1^2`H~6UBav;RxIf>B>mTs%GK86Gtnr^g{?8w3%CwRy+-XJ878` z>ih>Wi4ph`G2{lCf7a9s!KxS}{=omj z)c6V8TxV#3!F46%BBJK!bP=A?)U+Y;hCG*ilcafU){PiRwM_4T6(i+LV>p$S!4GBK z=X^fsq6K@X0F)t;xZ#uz!z>BN=x23@SUW&=8T)q}Kb0%W8=>=p9W91bvd^rbpwBhO%gorq`n{CWktuRgdj6xZ5fLw&(6xcVwF#7-=DN%Gi z_FGlXuZ_0?RXX#tj1QH(_|7a2T8TcwO|FyA-|dg}t?}Lx&m;(M;2F(?@i9c9@;D(1bi~*K*VHu#?+|bVj(E z-#RTGQj*JCz5jaNu{&|(q@@h$YX#)4pnbmn4=xCQXE~IG@1eA*Z_TRz|M#fO|9NbU zQaY1C;z#~0rlw9ju%RN<5QSdNnejwB3ilm8cz%0&dd zk7k`T@=mY3O^qavjnjP#>NkTJ42n5qU(XY+$Z^HYMP@EKpB4e7-ocVYyKCe0f6<@( zkGylt!8h9L+dl;VTmHfFzx=~mc1{l2=d!YbN}2SQ6jTs=B|^cAU%UxH-`~nm0(6+{ zW7^r(vaX@9gK5PS$v4JFE)4G-j3C!+q+rH3WR`nnE*&;=e60UU1npj zJK%AlsG|kyJaFSCYBRxbSUY}@WNPO#riscX>E9E3KV7pA@D=Q}OjzT(X!X!%R~?+b z9sZiT#@$us;M)l6git$Q78r0Zn*ph*sxcOU;hq* zWAGEHJy9>gqb`)@GLeEA94gvGeoZu z=kpHr$(_Qx&!9{`piI(RiTZbpy`W`}sZ1p)q*Vt?I%5k)q!gF;x7ii4Dq7PjE^wU4 z5V*%m6w|f}#Rx!T$ndqDC^r*8XACb|pdBMH-EUglQ~q<(fD5mrx}R>~lQQZk>bO6C z=~b=u(!b?G)Fo6(UnI`U_3D?dH}znL(Pw{U7Ya-{YKYcDhKdwsPayxgaN{FC#24 zpbUVMs%R-N0OV~{VA>dj>r>luB}Gm?J;ID#w`9~+cnmUE{*<4zsxoQSL22zvZ{?$n zm^BC^NP;g>xk`fk@hp2SLCuEa|YQrss=Aoh0GJUWDPg&Fz!Ls?G^L1U`kJCeTc z3|_a_b4zkqI{N%lE81vsY*uEIdSJb?C>=wPtc5job$7&V=ui>ALU{qbLF6iuTnFf_ zWooTTN@*)~2Uy3+R5&!Z8Msf*IIIxNu>h(Ah8_Z8b?y?TGch=!MFw_tHuA(S5{p`7 zsz1g^mK<9yt0D?A$*?b1ko8&AbR&@STmIEDuMmdL)5r&i^;C1UxmgUWcuum*j_R0w zQYG80R_iOX2B|iVQC?bn>&HUCYGcxFcLLnG^~Ao~3l~h@7`v1!JZEkB2l4?S_*(bP z=vaN*TNJiSG*j%zB@!oJq4?<6P8f%Q>P^^>X85|jBR%RhM)f4m^~{n4F+g*1L$`4` z$TkcR5T1(~xuCN)yN&*HY)L8wA>+&9>pjrLmCJ6Vm) z@woT$ToM`N9VoyOPl-h+5BU&?9zCI6pO-MexVM5-mWT=@mm+-7=3)i8<~RL$B+;P! zz@Sbt8G`gC=8e?xXih*$WIHC}+^iM+Yv3n4;^yS|%*<8N9t2XKe4|?sb*ZRF{s46j z-Ag9t5)wW0h;l*Twam>wblK0q>H7>q8{aN**x?hVFY$rOaDcNr>e&^fA3rb?Hin+4 z0h2|F{Vkr(qbjB7S~WAsgt8<~x`tN_18V`s_F)TJaIbs}uNP_IhsP5zh(vM%OA_P> z`}kitA^yWn64^c|yuaO~`oD$tZ2t@GwH4?1ka;vM4FzLwDe~q1@~!5By@M9R6gcVS zDy4z!_cU9#S)=s=#1%|mZ8LA+j{`@ax8bivIW~#G!J!kzi9Me#TTQPvd0M-CzMi4B zF_LG+_VVCx5-^Lai9Ar9xqBO;v2Qu6(3r=~+{R;XGiEa~4O6SxZTcGAI%t#bTTMBo z#~O+_ky#u)3;L^ym$^BcB9QB`@m0`&x27_@cms?^%Af$9;Yz#KXQhi`7=;6RR+J>`@e@3<)696bT_fP54*T5JZ_kNsC9Cl+)}n4SYo_QENq0#< zKm9W#I1eq>&?>4tv|IZ1m|K^$6g$^^v>h?j()6EUtQ{BVn=5|x-a@5sCczGTBul;r z)>LF)IgD)~UP$Yg^v*|3D< zW|k6-xw4g_*m`X_Szu*h#(SBkfA;aw9b%BuPF-cuS;NZ0A}%??(!l`x1N{H26E5@v z5dcMQ!_@;B;V5I%zT~U&>Ysy$4%*6!`5vKs2qnY$0AavJOMG-$|BKw4>VDVEOe)NM zmQCpPHcH+xJbqc+?qE#|sxW~!%Sk*$fnv?CU$|pQV<{G#hu#x=xGYdvuMlHKpmDLz zQJXsJU>D+xa1%((n89f^dchcvIAL@Il!9Bxd9m-IKJ}u6*bwx{F8Oj!4ZPT^=j)i} zr;&eAF3pU-Q863e8T8@~{8KjNI%d~}?Q@)}H`@7GHH>0g7Nvg6ZjaD0(H%MKlpg-; zNPHL08wq_#h~1>j!vBdES1-1bVOPrawMJ&MeFW?<|K$J3T6UFD$-BR4CS1R7%mn_g zR1^QTJA&W9(aAyI&`HeJ=|6NHoQxgxoopTc)3}S2B^9wm5k5s`B^E7U8J7ve@YtIm zXX9)2Lc?f;S>x~!Lq+`vQ5;9iSmGBeU6k7^5?}B-_mf9SRNE;LRN=54hv`OY#Ab<5 zhrp5~mE$Z*JWbl(-r7n`pJKXvxFBl%s)$9dTf^nomFt4&_V2T?FDuA%OXDAlGL!eO z`DE}Utko@a%gFcSL1U2I;=2_AZmMpUz_IRf7&K0xrZeU)xM2MSM8=Mak!|qfyAIE~ zEGjyyZMz*#5 z)st0l2MUP@#6Bq-u^bDZ6ap0&tN{H66Apupr7~#SkR@vkjEYv$X4h8J5%(7K1Ry%& znDgK377V3zJ!NdApF20*B$pZs_Ccz}gBp|x;~+Lkdk&h%o6cb=mDP`{nmlbul&;xKF%2L|l4kpq#Q%#A1Hj+J z0V;+`R1kC#j~@ja}DI=O_-S*(Ta0|)<@ z7fa!nX^D!o`j7DP72wbK znn?(e(|O{M7-oon#o8~ok))RJC>G<+r)t_HknB<{@s6&0{M-*#F7jWKcMOytd@szDm)6EZi zYWx2OKHzmO8Jm2kg0!$de*FD!&HA|H^&i|O(rAHKo(_)K7jrg(X% zUxW9Sds80qD=P#N8iTRzBQi z*bYL(R^QPtHx}}}+DK31buxZ&OdfBM_1^gTjn@Mca0;T^jQ4n-_ zce#i`7gw55FXKvU6b_MXHtynkeg}?K_`tGl1B_&$FzPnTWjIB=`*= z`7U;<&N8xWteU|9sQczC!FE&xZd&wN=Yr!QaLUJEgLVk67r6?A{?slrqpqJ2D>mrQR9s-KvY?w0FN=I5337zB zh}NlTEV#l{n-r`HI?X(Ql>BH~P`qK4B9Sinm*zc*n~e?Y%O1z*Z0Mbsm6K!ah;gP| zi`Y!j0^WREp5|Z&6v~iN#MYN7|pO`*3kOq;)l zfx9R-)7p9v6ry6be~&%?+`zM9HUK!u`(%77xQ3{PgW4Z zq$~*!XdkMjB4@S+e=$H#k)cT*&9rSlWU0TDUMW3ki<3&O(UL)_XE};)<62T3^NBl` zL29xU>=>RVrv-PyE0GnFBAOFFamgEjS8*;OFCuF~MzrDkK`X=Hajl){^Qd)lp0eyn zfCiqWY^?$7Es4Xc9L%GrA9-VWqPcUN#|e6S*LrLAH;`N@)X4$m!eu%qDB`fyLK>6y z0cQQwJv0j()O1_C?+xN+T}`?mXDV!I2T8EBpyPXN8t$Pb>u?Y%k@TAugkxxwzrGh3 ze3}vKO@}vxt&=$rc~MRWtDZD_T}Ps?NeKu^J{p-_BS%1!qoy_RZ%H(E-a)Q_#;G{7 z0?vXGHtBU3enRpe38EM+_+sNenQMS;3i1^}Q<oKL9gBh78X88*iOu01AiTjC?LR6-)Ws+76sme29n{QZINhcx@UFzsUIxRNm^{QoBx7{oLtQ-f>#ZZH75m&Aw^5;1eXzrKbHS=jR)9c>--8?t6L1acm)20b)j;Smnp0jX|W5bg8l;i z-}|jFU8o*~zokT#P5!?WMgL2R`=7aNl@^qj(!j^p1hDz-(TxLgCHP>}L424$mMG3{ zm_Q64AyJY~GsOr=CEhAMux|~ua&gh45oId5ye^zZ0g9j6tV$HVu}P(>@$vOZS5vd1 zstFhJ>&kX>t+{;!0`>3La#kAK6&usm%fwZBny9bC`AnY>vohC^WKBeu!!4W4=I;Jg z=6hg5GsjCw%qGIsbAS7;F5tO2Wb-ag7C23DNDqi|D4 z5dBJy&&$xyFd0*zfVe8r6DFithN18@BX$!l+7>IxMg~EK>vO?UI7Rfqi%GV*XF5mZ z$Ub!dcl*w$3wJvVnuARZ?ahcEsKpdiwsqsLR~o}QhL8f#_u^QOCGuj{j=mq0uOBAs zb7&wKdNvEi9%J5X@!&S(o**L|Hi*eQjw5lS*<>;*i#Z%)EGB2$Cl*wp_ZwM1cOuR1 zEh+K^H5gol9bKhi( z(q51J+ZPa|y`2HSwesmo^{n1GB>`xi7DT1yS0;_Yw62TFe`}ylMLvz9++y3{Z_TgKAxq147&bF!Y6M)WVUXx=AIt|elJ2m0e=OFEG!GeU zrVxkueqmUGbY?$$YiPnmCNoo@hL=;C)d4Tt(mqepqWLdl`B+bwJDy>m?&19rkJ9)H+`-nP2lHRwB?i^&QW|C;s)px^G-pqo) zk_8%_+G(PiU9U1xpG~4Jy*;+1DbSAYk*OSo=&GHdskV)STE^gtv zfQp+3DXwF-4!1OdmydJMw`-Z}ecBsmDNiHqFe?`YDf=IQ_vjd%!*>w84oW=ceO$bb z!52Z^7ws1w!Aq9?KEOH|IlHZ)sHtaRr=va4(cH;X+O&aZ7Q+_JXtAM5WDSj3l#??b z2k_pR+XFSr%;{>qv0_Tctt!WF4eTh(FKD%26-H^iDK0j9lj7&dC|FY!Su>0~Tpo~@ zi%}GMh#MSKv#eyAmH)G)q+5rt@GTNqD8O_zs-|dJ_^*P8(#!x=+N4T@(-Cg{JUmjD;@LwJ~5>dkgz2 zlr?w3W1P5+Mq>*c?&o2$8V{z*ybkiW*3a>2B#Y|&kmgzY>KcRGfP_?0UIoW$Eqw=w zW1XX-rpxg z=aKWafXdRFTyKCEn2+3aAvJ2xNeG&tWw=XuqohNN&7Sbg>tq_zn<~_AwWK;XVQKAC zL^C;2oo*OuU}f1&wF_$F4cRtyqOXstVSzzYE5&S`_{bv=qB0hu|C;T(Vq}f|jXZZg*l@I;Ececo{cns7LZI!V+^YpNQr^(N11)%lsG>^ub>{pzN%Sk&)RF%`ZHIp zS$mH;#^eitMuuFpHP*L3oV$?FSQfo|#_SFx*PJn&NF+x$6Z|+Gq%e5ZcAR`F-y@!LJ`{WWi`5_~pBs8YiWj9wHkB zq8SwI@ktH1rfN#=O*_VaO=h4>o3W|MsKv%ksQ9*@eT9-dNjEs!mRs(WWgI2VUYgwJ+=t$F=%jF4<|?R(jE!VLCB7mXH;9IglTmV#VE+^S?z62 zhUp<$T`zwHaE-5$aAN`qH@h}@xVNR-T`xBbytj&egp(7mF5py!VYKty`g_|rj^eBj zK)0R#X|Ld)>=nxJNni6sLUL1yJnL^fE|`5TbnDq;$$w5VSFT=S@X|ISAaK*fIXb#@ zE(({y;XM)<1r#`oj0$b4^nT(#23>Scv9fFu-ZZn+%UL&^D`0qe02Mn{{#8 zF}`2zJ)dRZjLRJ92dEfabBpj|I+zdrRHivz%G9>$rXwFkJ_XloZUwhhI@J!F=YuZR zox%N;hQ4+J3;BYzotvuWr!=M0;yGlB>CT1M^=h-pa-w^BvFx2(y0!;wxHntC@{XCh zgsCROMIrsQ?vyzO;v2B8BGgg&~e6Ep-26dyTn@Fv|{YEIVcsW)%)utEAeR_AV zx5xVNf?ULDN;`J(<-^?AHgGYB8T}B zRdN;&;W8guj2+HJGQ)@;%$iN>=toq5p|slT7? z<#I$E&H9ook%5|tUyM@=XTNuIv#l}zTc3niuOELMlPKk}n&}Rq$%Z0iIZkX(b?maT z@%LQ_3&<|eQpvRCxLZ;$lIY9ij8;1YJ(Nc95eFxYRC-(VcMiygOiV8p3-O>KzZOCm*;Hq+!VG9$Qe|auQ=hG>dwwt z7e2-{>yFy5T})6EWuAIKc>~d zZc!5#+GaF{*L&3Ha4^mGm7!oMXUm4}#C+BF2!Z2ni6r{Wz^ePTQ16(Bz4UumkhU`9 zh?uernzn3%nvTUJ=h2NpUnAGJ;=ZaZtv3ZizZu|jH`y=VkL@T=1|)bt7YJ?6HE=ZY zs;{gPK2iD}<-L^bmm-gMZ(r&y{YgNt*4Ai>;66H(aD42+ZxFU0Gjz^|kTe>MJB9Y6 z|4@DstH5=A`0#Tm*?!7zkehPN%J4UD*5&{Xa)yi-krL@~6jZ6VxDCgM3^T$7-)()B zp{xw3_C1aIAN?Mn-a^Q1R84ejB22}o$h;BvvreW!Icr|%AY%XD)OPJ zb;ePMFdH?KY@&+I(OdOIQikIFtpAA=`aYaIcH}rbpo#OV_s!nQ zY>m3i26fFs^I$do%g_&!ZjtQc&3l|J!t@4KLJPrvLO!@J<+xO9G+F%&jLM>SyVhke zb4=dsBcn6}8267@*+e0v9tj2YCMU4uS{)k+A~=Hge5;YzM=%ehlo2AP&;;@Z zp*NO8Er(=nA;lKOtcnn8#+L^-EdY4NR>m!k+bc8Xtz+7+KiC8WA{wQU88sSs@Ga~1g4}nsv zcpH9^t-<}UWNpzb<hT^Sa zO`)KVGWir4S+UmxHotR-6^;A=XlJrVl`=9;uN{-u+>&?`mf;I%Rg5 zfYDqe(r4O9(dP;K<)lA#Lu>fH1(SU>1b>&UC~LKJ7f~xNd#?V}7^^(O>{6??8<<}d zNNGk9f_aLfN8<>Z^n}GI(~DhS39o@EVpyH_S8pEkoI|w_Bgb8iwZl_utBI@&w~uLE zW0ylaqG@I5r!aBusFTZ&dA4w78$6lvCet^i^I;Ks_EIIaI}rEh z;Wa@2H_xFO=B2r#pRmARh}4oZqS$PXe&5!;*+dkdwZ{+mU|Q_wkNktj1LeI5;LFFT zsDfSfVfE=~ZD|P2tBr)V{qtVrxB|16Zc#ol5#3|aAM0!rQ`_teR<4{FoeA+aBtDHi zTI4L}joq~0=>)6X%fsllzmnGQE;Ktwv%SId(WzmgC$bzY_B9h`!{Pt3>O!_dRdDHV%$Y9@{Qn? z1b8Q=vVbBW2)}Jz*4H(ztZ{fN2hx?+3h|%XP9);CsO8tMO_o`$F=`t5&@~L>F7$>s zSVlH!%iD3iL#o^Rs4i)iT8`wM7q-18V<0KVxK?j3uWX?1MFP`3?hzyr*i$J`tt}%s zhU+<^mi0)Pb4nm2B(TzQTEaDpYAoH0c^mm#xi?%LL+eNyc~2Syj80EC*9Y%e%D5g1 z>HPCIANcNCn)N;DFK}^si6=y|e4<$O%6(~eWd&9)Og~xV2!!h&O<67aXs_Oy^lFu_ z`KExATGZmX3LTIcQ&v{i)@lqo3T^MzDeoOwHNt_jjB+TXS~YRHjZ3TG>`VIvdezej zS?2wFsIudi@vJ)0*e)&X^;9LgP$y-UKMy#2>+NF2wjhD)#NVIJQpYQSbKOP}Gt4>+ z!|s@S6EjUn&Jg-T{lDxq65o}vZ!BLXnXs{1ecOhUSf!@@+j_QLd!4s*(%Sz%ajSY0 z>38ex$emE)2-NlP4`xZb`*hp#!oY~#L2G=Fr2x0v0Ac>mSgV<}GMqw0$dZVK86t>Hs^hLatL4xX1lD2?Tn?e3g9oW^eM>2>Tk=AH)b)zJaD zbBBn6Z36?OvH25|ngLBclg6o?%~|t+f&-)nm`p2@(UW#-#oyf_`sGl@dtHXUF`Z!! zMt7{$8YXbOmmcENMmCa;H0bh9AAHMjh;RC9oMXuuj53st?Iu24uw2>=0};6vmMpqv zW_q}0^AxTx=QOP%i`Jq*8sU4&LYt@Lq}DSSgk|nMsZSGE1+Dm)$_&e+$k9%9mA6_0 zT+hjzbnp>f!ky8)vF6HY+k%F`4fa*>45$yrA1ftxZiPiIP$c=ZBC8+Laz z4MIQiDyzt$$vGu$4d2?e6=ODpH{ijceR|OzZ#fjA;h?!vIP5xJNSoaah_ZD)P zapg_GuBYJ*y}QyZ$$bs&EfMj9grtWcF!_(_wXYM&RMj#B50w{nUl?=;$KBzqFwJSn zpf$}?qW>oZ{3T_9YUj6F|K6-hX+jb-2ZF->&P65(ZDa)pQ_h%bHy9mWoiY0|?&)ChChn0iV}lVXe_Xy6zQlCPJ2`cuS+ChDum0z2KJwprSghM zikFyg-#K`YEa`Jo1NNq<PUfk!A~>zfqgRC~W{WbKV`s&-Fq^^8%ooIedPOL} ztSpf)|5{T>t{v*aJ0tDP;aK8dmU*L+>sc0)54?9@M%Fy{FLn{8X*I}cgO}V2mfR90 z(WMJrA~)jGrI(YEQUm2e-=0{juIpiKt50iTZCJ#ul|Y%@~l9f zH=$bw=kd{$)I^cx{-r$iNSMjt*Zh*YHBSC~UrAVab|FTTKN+M#Ua`sEnKr9|=X6yQ znvSfA?L?4&{&U5yYSky0jb?O_E+2=cZpZ+k-XmLkiZ|k2qHbg3d86o_KEqkbxOnjWiQ(i7*;i5yGhr8U}!AhG_;BFrY#| zp(1+YdAV57eV!bkT-dWX(rb%)-{1>O4)(?iddpRUms4W*tvj1bYo0>h8Vy^U{ditw+cy^ z72j*KLpC%%x=2IJAk1`->u>`BLOmnzUKP zFWiqLVZPk}K|*8AdMWTK#B-YgtA-5-4b#qXu!~>t=1PV!t_Dv)8JhG4eF?yN0z$Z0Ok199GhozNi zV7#635v23&<#`FW>SumliwAy{<=}GOM5zEwX|Dl;)a33QuaT=m_;DS=YY;b##efix zbdeoR^(+FApkh|pD|gHbS?X_S7Zv3xkhEK*facEQL>+kN@Kbt~U)cPO^zF>%87!)0 zQb@>;aRn0k3cL)*kEt#!RRswixskA0uaX`PIS>o#K_$nXZ0NMWw2Ml;4&SDQu$wYH zOh;Nk9lKJg{1#Sb6SE$_Z7@UwB%HD*8D$XSOIaH960XMVXL0;20*ooM*hffbmv2E(KfiS z1HD1v$Rp)WYduzCZWy|e3oJ+jx}EuC(w644g@=qe@|aVIpqDtNj^?vr21J)iRg3b( zU>FaxHMM$GvaJ{wfQk09tL^r;w3FK*fDi@!7}LYt`8fonXC(PX2} zfgu*nKd}vH_ST*E52~zsrWt|rOnIm2Q53d~Mjn)|sV~{Aeh%@j7Ci~>=6AUUq=&%O zx$qQ^B!((Ziuy)x8na@S<$eif~Xs=_5J@NgK!u0%Mnj=S4;;}k~Dqt*HplWcu^Qxr z$Qsmqt|IJoVra+s{_ljDmv0g_hD0b@N4HJm2W8*N(O9B1%?qpwG=gbHH_Q&%4C}ot zR)nucM8uAd!j9F$J*fem>@TMcfE;*{os6tedSL#dZhO^L%w7@U0;4NSe zpjJZyHN(ZibYLuFc2SnOD7C&-K+w#Arl2sjw5&)zHv~%vCV;Jo`B6rgP((A z`bRq3l%IS%mui@Fvx*z6XwW@pkaf4%T*5fIB(A|^auG;=((TsgveyN-Sk(@!?=If{ z9&E*5oaRiW1%&Thuj5NO$B4<_SGBtxMwVo!J3oxqm_*>{zj;~&{Z6^_$1}RvZ>tX5 zYd|*}N9CppL7#LMLdHRN(2D*})mI!$)8(f3G zP7A$O7x!$-BT-_j;esCu-O>+s|GZ!8n$e=GPb{C5Alj7P!3$426XPjQp~O)Xj7iw9iq?fX$3?fvp?Af@&fv7j zN(~j&2X38xNm3nB*2g{1du3#TSyF%5NuRMPiY1{fsF3DnAbivXRB3{rI0mE(DKaP3 zh6r_PPM2tpcz3GP75kv}48@;P5{t+S_xh2ZpNhiHUHo{+JK%e5)1Y)3rZ4=pO)h+3 zm){P<^$a%RV-(Y_uM>W6cE^9m-Jq^R^Bh$*4Bnv3M|+)MDs|~TQtip{l8HQZilP16);DXd- z_uV=`XKY)rh%OJ|+^I(+Y$u1L_FLF$6w(nIuVwV$fvjW6PAu(}990HxK+3e0r+`*t zMx#%t;;|!5+c4$)DKiV-8{1T8u9TTySWwq^*`BhIGd2g9IaeC9WeDsWh1M4l0y;-Lt4Epi68C+xmK5XJBPp_$co)#-xTmLU==u4y zvsj&m?QnH?oZz*G2(5MsBCZeZDL;xfbtg;GRp>+Fu_sJpwHbn$?34y02x}&aZ~1Hn zREeD>2oKk3DTZMzD27FinxG^-=J{aAtfRWywg-;4VGz*GopY5J0k*u_$7vW>W!a<` z0kTi07MMg(5mxr&zuOnfR9_)J{p~rC;5;EdsV9qZ`5!w7e5a3Qj%1{`A``17=+_i# zb)q)1#fy%3GKtreJGOtZ-+OBXc*k`AnsGqp(?c?eFdui;xS(6pa{WVUpnMW;20Wzb zmuV?4ufk`xr_Bn)kgJy67YT3PK2#~ikX5IF%tiI_=aL9-Z&LWzfNkX((VOQo)rQ1S z{H%9=Nuh7cXnR&rV=&PgfaO%)5cvR6VXF(5i#+Kx2w58V4bJSLh29(j*OOhB1sG!+OZ<-K0g! zu{U83?-9kV0GCarixKEpz~7kNj%Yhi(7x0Tw-JF7p@VFN8+OPxzl)_wEsvnj1FG(5 z!VU1RZa_%a_r9vzH$GqeetU5=z02Vnt4DW^d&cKQ_FV{S9s@P#UfkgMZn4-_6js z?aPe+GrF4$>zo_pQnfw~=wu=t+m^+GI>DL!5YpWt9@+vtIhppHm8Q1@kdCjuW~LyF zK9QLO!KP8ZJwWt#pA@IJ`Qc7u=kXlZA%=qt4R&Fs_h62F`rpSTnf2c-ne?5`)9Z*( zAA}5iG15`MABy_l*S}`I-a`4&+ZpGE$+hF;odfwqEVnp8!MHo;Yb$eqJ1$`Xx9%rp zlYw=}eO4?K7^_%MnI(eDkzvZYk^rWSHD9LECG5@q@kGGW-y5>XnVMq7??M}_ zWp6OpWnt*~tM1Q5wG^9!?z(hWYQgAC2+&ju$HFDqo_1~0_2R?UG}B#_+jr+^r-0~2 z;4>Y!5fKqLm|?c=R#d(GZr9Ah6bN(rOqMh&`d928g6Ryvbo!I&6hMJebY;Q2Al0~K`jovjy`iGBWpod`>WT1tBBSaGlRMRWI88|?5*)K3Oj|m-1{MZM z#;Ay@h7cZ^XFkGp#P?eSlt|8F4k#{u$ybjEHwbmK#$VURR$XUeKOYpNUDvKk1H2f0 zoaw_B_LR=-TG^rYJ}L6jW;E0t=D<5&U}>(URa~|(U-oR(y~Ai#r1=$}z|=#2SA@p3 zZtK8y#NijhtlbT4<@Ti4=N&Xd<+sjrq-akyg~vTKqk>w{Fy_S;VQn#D79uSQu}UX4 zEh<+>4I)Mtm2B~Is$#~z=ZGoVej8~~I-j4cmnm@x;h5Mkg|X;q*W3==rCcPvW52l0 zu65;bSc|NSvM>L51|F#O^2!_jYoWemB)gQWH2iRjcz;K!FhI+5Er*aIXlA{nf3`Jv zyE;IALx`n#b689fd}N+$Y}E6z@U-OC@WJb7<~P-1^l6h~oO*G%W|*2g*+w5ed3X8=~5fFNFTPR-~v($I>h5biRe1ic0N(ys^7PIQM zR48P4Uh=U55+Zt0#hkn;$ZZiKI)QOBYO@W!Jax&~R5;OY(GfMVIxoKGxQB8Ek=n-Pc9-l1BB5LAkAQK; z%XcNfH)oYAbcKXk>lZa_u2raXrIcECS+u(GiZ=6FCb@C8SnUXFo@{t zAGHue7x5LGleN4sN}d$=Iissf+49!|s;EAy-{J6TX%Y--#pEejxk~9|xsvT_>6^xG z#JldW&VqaaA=pBYQJfEgdxhvjK-B95N z7S@%kM)TgnNz2|+TC?Ch(pQ^#K*jXxm6>^nom=%5d#Y>E+!FB}YF7~kueoULV^FG1&62>-OE`BZMXzQN`xdIZ>uiifzMr#Xljt61 zehGc0R4oI294-Ua2`gm!mz=1oodS-ZJEtm`upEx|rnupSPvzrKi_8eK5`#`4P3V2x zCDU*$zJ!hac=aqC5WjYMh34U#XTbIj8%r|!cvbl%%5jt7E%XB@)m)q~{NK9lQWe6y zk%PtU{-kgXi+`W69Wxhdc{x0EkXlr}71|%Hg211=-c%~k(fkJa6#|O~aZOm2@5o;1 zgrc8R{H6D_XPzy=WA%h%_%j_5qlVz0fYN6Yqy>ROqbuXe`Pe~jZ(&wfA!k=fgm}gv zQ$Bh31?Zjpn$EP^W!X--xst3$zRi-8B?2!JA7zwzh*wlE4I(+1N3=((`?5#HM>>nV zwXwylSFYDGf!tkjknsl_Pib6;C@!Vg#o-8KG9`eV<|#s|y*A7hU-)qN=R6;$g4*Ww z5kj*{h!^)G1+cu+n|Yc6ig~QZNbnn9QtP4+CdI2}HNH9PPm)3^&DCUS{_`Msy9yt+1CBTVT1wJZ1%p zR3!Y_mrUF@#mPgjlD2SDwm&<{SIQ;vH{njQBjLkvebhAaAbg=b8HNv+`wL~}B`Msx zJfV?Sx-o*zKaN@N0 zz+eMj!=29I0E5absLR=z2)03z~f?P;y%o&x{mCa1Wxsyq^y%t-!|3!S-}|YD+1IMxGAN*|Ol0cR#sUmlu(TX&t8;9#c*nczT;lS4 zzVM~08tuchH~F#ALiy!Qt!vEH-rbB4eJR;AW<3zGvdEaN{gprPV`0P6WE0!|Ykm^w z)a(@mr1R)W^L_K7F+3zz;wg6#K>XCd!%pdw^ds9P_D$nyc-fao^}5**k6d2yr4 z>$fqh-}nG?#bM0oK)J9f?!7Fx3q4nsj7MMt;4RbIe-^Xt0IM+EJU%&^OkJ0?7~G~x5a#? zB~rN^K)Ed%o}k%9O{iy0%HVdEOZ4&e^!`>KJA#<_W5xjS(DKn>FkKR13Crxq_X5A4 zKi0tk@|1rFM~1Gs`wn7{DuLO}5I!>(N-94R@p|uhRYQ&Lq{FIItL|wFRf_JqI)#2V z)z%FgzBDofqAMGZcWoXvjza8R?j=RYZK2>S@+w)`>$9^5_0%Q9x{;#*gh~>tf>ICf z%$6+n3yQXKfBLwR;LcXSV++O?bG|5(1CBM^A>=PXq4c8us!K*i*iBgQ9LG%dL&B3{ zxHt$1h|>R#es;>Y7QJ@d@*v(7b_9Liu$+1)>cmXdhHIUkm;Eyt!0pjU++_*PRuos9 zg(aIiy$F%*jVojwwgd;=Luhz{2pf2Zr)b?Jw#80;l>vd56dN@AtxW#5Ce+FvfW;#r z;z&9~(T4{#_2^XxHq&61e8dmtbkg@>+W$9tw zww-T|LQrx&BEzwws_v<$ZSNQK`Y$|#ylv?INVgaHbKaSO{+5rX0i7xB8=AxqYri!% zsS9}H;(^!_x(K$1dXS$V)Ic3GLQP!xj(Isj$TUasCL4_8I(q$SPJQo)Q)(iI<)h3o zZM@~l?(3dq-YDZ^nD>q)L1qtQY`v4S>b%7NaAD}vk02g-Ny&Qa|8`f%eveQ7S8u~lsvT$bo}PoU z={YYXfILwP!1db^@_jgTl;kEeCvv+*6QI$S=kiF;OQv;}IV{8H8yquz;bimOoSj<- zWi77mIo&qBXXoUl0rpxS5E>suL3ac(`cCug@47Mitq(8wkCMKkPTr~lq)Nb>Ef9>8 zp|8aW(FSM?_a7M%^1ZSoh&9HKVXuz+uj^-s&4-eJFYu5410L?b(OG+}TYHc@a%YI2 z{fXdsoZu!%KJlGCX3uTj_l(M~^+EsgU7h#e%&gzqUn1mAb+>=Yhko3rw2h$H(SL69 z>L6X-f0TLu5YFOnD@SiOKz_&q12?>1SyKVM7;ZIqUIba$*OeIco&&NAAmasKvIw?@ z$dwolX9BXf=(#BF@KBg5Q*A3_!nx!%wNz3sFBu1?8M0wTdvqd|Qp+Z2)K|_C-Ko{6 z>;9O2k*LkJpqg&}HS_G%+4Ujhw~Sr^|KwG*?4b&9%|>*V;^kFeS*h+TZ))l7b#~Q# z+MGS^JYIDr$XRJ=akaIT372vTEH9|(EUl<*YN+k#tf**7t;lauZmHbTPHENV-{MyV zm#;6Yq{n@R`Q5LB@KnpvX~Zw{Fte|*OjLd!8n~;$Wdm8H+7e;bRHjdA@$dr4zo790 z_Uo%_@*bl?mSlW7l;;nM9jo`E%mccae(SeIc;TKW!=ZYW>}1lfLYMBx+=ao!y{n%6 zd1QI@euZe~=p4n;CAnIeomnc0D4);z{g_omk(f*k_ck=WE4bHh{(_VtU4rfW%`@dz z9ECk3d6NDW!--SL{xkBVE;1J&Eqlg8CvA~uZ0a> zi9wzpw@+~}ZCC*W0JuX$Y+6P>x?=6RgG$$@PmmlQgT5eJ*G+x_{q`9@sLT%60SgcR z3aTB82h}#nOaZ@q!C7P5R=9tCAvyC{PabUn8Q%-w@D>HxE=P^tz!r9>60FXfcrq2Z zjY$sgOvEfVsA<7w7iq*G2c~1b1j+-bOHMlRQarv`W+spe^w{XEms|YceJDHOt_n1Z z-3spR!|~D>@x`7~CGfOhWSbXp67t*?R!$?oqsyC(e7Ke=bBcNJpAjX%v#fC^aY?p~ z-NI+s=Q{!{X(-qri!{%eb%OU>cNMsJ!4pRzQB`1ktc|5?@FSBUJ(vxaUJn78C0V98 z^GAk=gEN{)lVGJhSa2BiK_b)!-&-U}Lv?=ZFh@1dB$KJKQCnk}#!#MZR*Ld7gwqBSZ0#dGp|Iikkl@6CoJ8q3CkJQ_ z;mi|1Vq%;`o==9_4jwags7#CTt1%$GhIU8Hjk^NAUlo*7D&#zxkVT7Se5)p8t;bDC z%sS!~q%p2&Y3V>l#w@e4sM$JWe=Yh%y*!g>-XG<_i5urr6ISu8(X%sUO@2sc#(fN{ zOzikxOW)b~9h}c9enl(;@w(GN!`7?uM>kw0;|p}P!sHz^=~=TCAax*`fEpv!LwQL= z_|BB2ZhV-gNWv&uyldJ445-?5mrZx}15c9-H`a5;XFW%_VYc{}nEe&!AR#q{>aJ&o z7K1+5r(BZ}P9(MLQQ@fQT~P#|tVL$MG18`RL;YI$OO-eBxzvPiS($}MnfYl}=J;9& z0OM2`8=Z|=5j$zvq*z5)CLu?TSrt7*;}4yr4!US371omfEHKi5>W>szPYDC9q+Wf$ z`hKJVf{-z|w~^C#9qToT-A8rJpylHJ1z(MZ0_z z36(S%5<@r*CD2Bd6z8N%hk>coA!->}9G*b~-riX+EjC10x36^+sh1xmRl6*j!i63S zR)U10CW&r-_JxjV-1Cb!@~LB=NJdKH7>0~kB0Y)sQ`e?p6~4#9|yGy_%|e^b|S^3v7O&SxFftYZP5-5?n`2@TCvhC?P_Cj59HYzhT=Ji!sNL)5YC~DOyQBoTH)ap zjhPiKR6DUWN||L9$(d~u>6vvN7VXra$92hN#C2sb4x7bHJWFyxT&Q^q zmFp|oEA#AG+@5}2y_XFs*)Lu^c6_XFzP^Vk*};0k&GpT}e$aGG6K<51Jm%?<>zfDZ z@SXAo%QT5$%NA;u-7HQ?@OE0D)hzm~8ac}24rjJ&U|)!2$%&s*Ep5{c*Hl^a@9GUj zB4)e(QqCx@fRrtfUu~_~*{LdM?Pz6D{QV6LfPH1uL&0%sRMZa1kZjv1NGiLau~tS` zu;hqqn3)p7;&_m#!|U=2%|GMv$_10Qk}JWOSj+|!86k-S!`eT460XpOYZggq^kC)Ut8Z186^!qjbmWy!8W z>!fqc2-jV)#$yYB+>M)thtQpMnWHJ9yu1Vd;Wl)w&_0JQGI~FfTs5l8np;oQvm6IgTW8^gp27l{#2_v3=3UI1UC1}#Ia_curw zGNVvCR~dFhg-eXl5Ium!vNl_(P{v(QuZA}%YO%Mfu+B)kK-E+OZ{UA}sWJR+n-*Z; zoD5_k8_^h+VDYc1*A`9CN;12j9G7G#Q~qrf2z;58$$0*C5H0mIih^y5k*uN}bUPDb ztX)vD$=6z%Zm1Wj+^o{2wRI3KJF99IaY~p}b_SqE#HPR@ou)BOSJjH;m^4f;Ej#)v z0a#Tu>|Sy#?fQ@!+Jnst)*yPYBjcu{BdJ=l_YNfxE^Iw8^s0jrND`b#=c6Vj}QHIeB`NS-M*v zI%_ny(K4F4#aOIUHN=0z0vBDx=LYzQfeSsx-}G$GEV--)OC}*7dKL^8KZJW zR|84NL}>h8n@x2WzBn1MmOkrq@?dGl*z34?T3_az|K7{AzgvX0%RxuN)Ijec+4QZZ z1k8C=3n(v!5jP8NTuQ=}nRqGPzx2kxAD-}cI+K;tw0JyeqP`<#O+Ga(B$V?H9G-x6 z8X=>$*(VvL?2>+z1E4&{<`x>{@# zXgJNZIg=vH^w`!qO1xB)-sTZzc~$wcwr0kP5D8c-*=>ODJbd%2 z?N+@=Gv3^EjzigAL`RvDqZgA#``&R_QQ>W)o~HI#Ys54+#Zqiny^}D?v9iCDFpUPL zvM)tv9P4hZ8sp2RE@WVoej|Ms1ndIx*#UYNmse z#m66Yb8-qAerdb=_(}_>y#U6F7xy#M?m1#!pEx~mV3o)vMU2z@?=|8(y-i+;11ccX zRgvCGGqcO2sg|;D@_qXAqNs%hqUxn=Q1Xq-5n)kaY<7saq`B2aeF3vjtlT?~ERS%~ zR;b0~XtKZwsx1HQ{yY<=8&?#v@?H3MmKe+UQlgUYr4TCH*&FK2PNJB^Y4T{`<~|$eZ|nud`jG;I09!*=7rjXX+N15TA8t zNPnRpOZVopJpRde=5h%=;eI^xJ3$=XoW5X;%5&7Dv5p!x0hglkh(E>J{N-hUU zDw$IFWuju0OkW z$8n`%_TR%0$EWVuki^#r7Lq4wWMX0wXnbXVO*>!0_;sOreZ!6-HorLmnjfVj3jeYb zhVOH#Qtd7EBzK*g`HaEStSV?da$5ptAC%WBM3Sn`Cij~3N%a=@-^UHLc$93U-RP1C zYK^kW$WYK4Pwc9GcU;Qh8dJ*-JM%_2pmRZ&$JgdVxsYQ$&}c#TJukN0KI&o=TrfHD z@A&(*E!uS^*(r_kz*wXivI7UL(>rwOyV-6(gEyX+wkB;FpUj(WCjHT=+ioFS`U8_F z`e4$~?$^Mkh_DW4JWf)HN)eDN>3*iTQc*Al4ZM8cha!EY{gC~1MEl73G-O_f$0WOY z&u~u^aBlRG1}VQxsA_;G>4mFmXbMQIbeUg2BPz}e!5Pb_fX-lG{}L&oeMn4Dae(Fp z&-CG^z5PAM;C1mL;Bb#VvvymKUg~?AB z#CRimwO4ECphWAUQNF}OeZvd)c}O1V75~>XTsxLHRg$Z9PE*|Z(`A9Uh9P7MNpWZh zC+b;T#+w#RFFo-#wgT=ZU5fJS2g%uo2OG)JeR6nVad?W(`Mm^5jN}|s!@Df#7fClU zbvYHuf7vO->-_g-Xd|05jb!2}A*F_QJoG(T<~0jCw|2%d;_;ZD8c8NPkdQMOuyRzl zA@kPWkT(*LbX=5pf$SBq$#o^f1{H?0T(CCTSx7?CJb^7ZuX>f>#*Awj!2-8D-H$KEF$!%K+mz zhZZ+S6=i?;FIb=I`j4U{@BRq@WsB!9G)GD+_Dj`r$-pT zmHI-$rsjSN{2pQetz*~?+k2FN2uaIyH|U5ueXwz8vT*imJ|V&Yvvd_)=!2S=N)`6F z|7LWmFpF^J*L-+{^{5aN=YBRb!oYTOjTqv>@y^Lsq%AUrX66;xh7-#(ryc?aHpEOP z2AeZ_;jvaByrUf#y<+CNsV(PNYa+9|UZI37K@1X2e_)n4_kfs8H>BY@GjcDeyWgl6 z0<*pv*WCDxZk82^()}t!+pUT2Ao3yfv?#-f0V-O5w~J z5rh>l?Sf=_%}5|M`F4hs0s5RYgI)wuBnHrKBS#gE5!q6J%CMLwp`V9$pP|&KHQ1=b zQYzW8qa--Me&%t-D61lP^CpV;eNkrL7j`dlWv4VajrMuN=V=b>np7{mn_g6n>^$AA zD%O!gM9XyA6h~VyjJQs4BqB{7rcWyS8^gMqmOE5%3Smhteq}~hpE)Du z^a%CPZ~xi!mb7D}Bu2+!rUUV4JGSMHN^=vtMmjYZir!FsZ+h8dUACOMAuoOTDNrbe za&O*tEm%98Da$vKn)Gp>a_#e9}H1khPRtuQ)K{hoX3z&Qx2 zqtOKmkz)Tk3H5_Apq(AFQ27;lFEHkcwfMojBG6toKrO>x%~EJ;D1j0VX)`w;UOUt7 zghK8%ZG2LbyLoxi4K=EMMknJJGP%6b$akBvQvm(! z$sH&)`7oVfsMIL_Ri)cIJB+HG%|2e3+|vR0nb`eBO>;J}%}p5T>9i=*l>o0q9n zvd5O|p*HtrN*@ku*cP{-5DcjINz{4A$Qd0=QKI$#{k^&c@=cdem^&=(o~2nXsEBUN zQ9(>alvIG``<-Hf6Re1e?dsn^RoqwsHyf)}@OiQ0R9g7#{ht`zB8n$&C$T@9A7GL2 zzpkK!_x43l!%vqLl1?pxHcFHwb^>L!MZ-?4EN~*ygr47>&S?*wB%Qvp+%nDp?)Yl~ zxh~`dDU&RcPRGU%0ViqJk)0C?j~H$?5hC|p{Fj0Qv|EtKF7vC2cx+RC4MfDfvMoW! zJ-0~S?rFDaxBx5YeL_0)v`PGQ^%y=&vIC*0ZDZLLEB)ZmdCXFNiCDq+lWK?I6in8N zuvD9e$s@gYzWEllMvaL=B9S+CQBP=_PeNUg_F-ZLhH9;&ZluG00d=P%O$+*L(x=%d z{TXoAl?jaQqA!g~6YjIXU*rc<{Pu`B%b4kau?JBa&sc$Sk|vugI^@E5yj|A5Q`fG_ zNBO%ia2KNT1-$76)irP^)9}>_CiWU7ma7kXyVNJyGQS_dglYqYKy@g1={*dhQaeBm z`BUk{9y@Og1i0LyK4nzHlUGfNBM*}Ih5H-|HiI#&jn6o&N_)f;jlID3q0Hen?}k;s ztkt|6uFCFKkwGlS(A%LIReX=t3ZXy5uPk*&D{foBdc}9k<6oA~E2BMgljur{CCTa) zaX;kqLNVEcIny7kc++cL_~2^A@8>=OUyeX2Ec}O?wg8YoK`Datj#gh3QsDy3-=nrI z9wAki*f|Q+aFVQ+&MX?mvV2ajz%m*CTuVEd{ zQN1dVBV78)_GZ_j zf@fP}h*nb^fCUz6%2Plj0e~2^0Ts>|`9hS(E{${>*i_hWxJgVHcyAmim%Y-U@Z*+x z5}$1d$A%w!HT~1iHh+S{PZ(4*CnwsEXHmh7+B?G*bGsLgs>O0U$Q4uov;=OW!o$WIU7?OCPey89}0 zGeay`-eE7+#r}4~>(T46eY5j<_pgpOXe_{llJv?NPNcTvriFOIV^%Y^=-0&StY+dt zJo6X~Z8^I?6=iq}r3;CfGD-!dDsrfH6YeSvOh;U$b6a$miHqcW_8db~<-VrWua3nE z4Up@yb5*u>4-Mtls@jDdlR6-Cl<dl%<@VZtzk!=~!^75#twv(neDtcp$dNT=gPcp?lq_T*@S*cSZcGxd}xs+_}-jIZo&r&f46} zl}v@O!iJ@#ALe}JT&VrH8SeGMs@3o5+HZQFX8zrK#m?)=zG{5g-WKqqsPwmQdtR^d`$a#ZuW!I*;7?iXi~8QUcrJDZYjZZ z*7Bk;vPo!x4Ih&Re``S2S3DY3IBe_Qm>vFs9(dy7OdeHNz;F@Jq04a12z&V~i?m-y zj5sQuIR6QAY|-?xOyU{Hl&q2DuvvyZi#X}dEsQC5TbvS$nt8bC0dj-9pRx<`!PQEo z9~iL_#5DCQ+n&uItn$RI7_m1))IQ}d-xi1Lg*=m0-}lkxz7}r=d)LN%n=CSPrC~;( zBnR&2h$#Ga!Hq$zJ`Mp;EmAM~%PedH2^r~^Xu?kV^=ttK$8M)6gLkl<0X4-$7XRjm z?*OuV3NfRk+Ks~_0_LDa0wxY7xGlF*^0yorkBjKs=T#A3AxQ`plGf4@DPF&=fhu^PzE}b3ch0 z;sodg99j@J^j2vXXB#EUUBi&Oza;vDi2wOsnB$9N!vDY)3_`X`EqANps>2nCa)eYrbJzG3bTr~_f4XOCG5;?S|$Ja=3dPnYCyvrb6VG;AtbSIMJN zzos-{>9~B9giPh;mNa9#G)w`!$mh9mny1F8%+@K!iVCEs#t}T`x+*qlSK(a({f*FL7$~CqWDH_-yhfh68=|tQll<+`_2J zwoW}j%x?{>D?GOl8>>l3YBN@AYfaG%04>hsvv(>r%RFzhJN3+0p373p_NsA;oOxy| z@UQq`mpwBO)-X+uuY9Mq)KdvJOPl{kWT~t=ArtVCA=U*LK2(%Z_CSJFv1mE6sE1Vh zBIX?Mcrx58hs*q&lAC76yXDL@WH?WkEi*iu)zt;UO@;0@6|qgK#lLn5{&(PoEU73w z;T}TxmT<|R*FT)0(*!>FLPr{-x|2d^MaEX73sE$kAV#}=fgN?`#gSGPHY|dAF3eCh ztb@!%?G85cf|02hM8XPT38$Wn3(%;-T5c}a1hY~?wXHe1ZMAAkkD3d!hd)xPw(7kw z*lhiaOaq1Oo@K7NqzroG;D3ITalInGN`&kNXFl&`>S2KQ#(u(u_eOu>f#-$v+z1Hh z2}{}0$%(-Agnsh+ie;YaAj$lyU9UoVRCu1Su0-(O7_P|h-YBk|;6LD=9N@FTyS97T z{A}E=a2S8_Ce(}@Bn@P2ue)5c>B|H~1e$cyXBUBU6G=hFQ%rRGJ(o27wCSPqeKe#N z@4}bA?hWCS!#Mq|xpbf}^CVKCi;b+U)58Vd1cIfCGM*4R^j8ff5r9)D^!936TDrv{ z1R7dAZBMm<}-ggxUG7?g#hxmj)oiBTDBbiJx!o zYEYtEVOhiiK=mu|E z?+U?Yl64)9y%$t?Iu~=3ZvN26^KIv{XIFZQX*i@LyoY7{lT=(;L>Kh7gG6v(o6UdS ztV3I-{qnAUF|OV=cHqhB+{pu z9?>wZG~e$}XE|tqLYQf}&zt=Qy1nbsujlMtE?2OS(JTn_N{H;JL44jk-M3Uy{oD|8 zZ|VZb=TH8wp5wVC>jrB_SNyLXCIu^LgFnK_l3fj^P`0N0gltjSnhqrCm; z6Y0%^9;{5;?y+I?B!hS*gz6)3u2?Wsl}TQIxmJ=cNanY>Afr)N7fpH7@u0?7v+J^F zy^V%dHG9UvCAE|-EzSZNZr!7p6z>o6)ugVe!SvqdBjQ*1ljo--1^H8>Z#QDyS?%SU2bly5mfEMA4mk1NULa0`J7| z%Vpt3mGE>9T(Io*ag~o3VCm$7R`4EAI@SlnWZ28L1!}NTAvG%krmZ|G%H!fTx^Xe} z5@Vakz-)$)_ayd0_PUV#0~JV58Rn3V+C5WTn!Pp#G&XP8bs})*SglJKnHJJ|8yK?% z@TovYq8z~+ot)}N_Fr#aep5srk=~bi3RnzAh2%$dCFpD5x!~0pT|*3q>y6WtwBHf)(Yj zc;dbSZ^PJy_obT&5yarj8>@Xc*rK`wCG$(J#B!@P28^Q)fnbHK2ftsHjIc)lBE z3vv?GA-LJ_bMfm6O}hZ0i$~n`=+Pm4)A_zB^VALT5!?lye3pRG9kB1=jq5iLSc_2Eu+NZ3O?HN!vd-;de5#G&K5WOF^TmTc(B* z>c<7~TuM>(SOFDNLl*6CQY(`jp{C?nXHK)Z$yw)M3f$zIbT=lk46&g-Bj8SzZ#Y#r z6(ynR3>tM`L)<9gFBt1k@^JE&Z!okizA!M}kDZbSByMSL`;WIVE-4OQazw7fY>z21 zJoo$P_HPvk-}xqodc&Z0VlAy7vYR1d^EFUBl^#OgTTpcpzE&gA_R0Xy?e&&ph}bDb zIPlX+o=$(+?E^qWQ&MqHzCD-z|GGH$5^YI|P zT4Wv`U$1CZ_;R*Zy)z>($z7*oLawyv|J zyx-vXQYLooUtmkma{S2(x^yU?lJI4AD8RdwuduXjH?%uQ9 zIjcy9GtpGn(#0RyguWzju8h{EX+?_E!1)RxgBS88alf#v>yH9s!#Tz2E&Z{wstGC; zhs}8cnz)5?nDz4uR+m>~ib}Q$p(qr#aC$53>4!$*s5|d5#p+t0SS_hjYb#L;anq5H zqJzNX5!=(!!UiRYOcWPOW+e^PdoOop2`w;2lo)y21QKG40c5EeMaFcg;^WsM>5HQY z(z}i1ogcF@!qi#7)tQ+^{vIBXdQKNd=f;NfwYo|JiLs_CT%3kLB6KJ)%O}n#NA8uW z^@I$Ck;q(-WUE9v`q&PJB(`PF*R_PYkRGkI0YGLklymzY~_ zxhoCTlc0x0MB^g_H${Brol@e)aIdeSMOR_n84Oy@M7XPx*0SYb+!>L_dhrHTle#^nyiQDdc zDraES3~JSg9oCdkzCj`eayzspBHZrKbnFF983BKc%PlXJJ#(Z-;VQkg$1u2ZNA=z| zW7GvQ7x3ffWzUWM$rD{KW-p`I#ha(y%FuNp?%(F(8DP}l6wlw_&^wg@+&*EINY*5U zQhO~q;WR;U2ZB=BPtsDK1dVrV3<=2%&CGgAFcG&!^__4#Vih5O>w-3>`qe0EiRF1r0!Z_5c#zB5mD(%GY&zU_+(-U*l0RNvo_$R+sIEl81VK| z9-MM)(RtRyC&H*c06x`1X0&Z@L^|ksU>#YtvgdC)(>U$t;vRoH8S&okf(9QdSG7T^ z*~rhWZowT{M(7GC3+|8&cOoUel0qhTuc3;*6Ua(NOP@}nkBF->|D}>3WhjC&l|9EymHfrf|#?Y<(K)l=g;(=M$7kGJh#b zprHeATSR2NzrV|@mfe7OE%i@Vo03ZUG&RMmy^#*hIk5;b!}T71bzp{geQY-4D6nW` z?*cPaA!0T~yg38)R_v!xr9u|VA8efY1ZuF9sQTO^EZh7k(I|F3;ptlTY=acjF5}to zq#N`&8uz}pN>kC>{%HO)UN+E`GJ_jFN>#wq1Ua3k9ld`V6|-}g4&3Cy>SAJpO;Lpx zPK^|^Qp^>*>4u`?MO;Dd;~1G?QN=#a-m|1zoFRz-q0r7^p**yfg!l%Yh+P@QIj8KHq&>_yp*NWnZV>lkBPs{#}!Jj6;RqovPLPJRI8-^X){VQ4j}3et%7@u9o9yxCs=I` z0R@K9%?HnEE-PuyTH7qUQ{xznAgcBU&v=`$qt8UFSWSGnzF{__W z{Utv#$?a2Do9@16Vymb3bN6xj?w{uxlx*6ez=FWW=+4M{`wdz~ZxtXWmma#tZ13Tc zxyI}yw%Zh5huD7gQGRf62Lo0-Y7>4Q<>&jdo1hyYX(rIN~iFB z=VLy(iZ4f$i{`$;D3LSi#&|@WamSmLVuyd{?x7qQze04YVt-wK z1!F?Ltx3!)KrT)th(R_x`xTYL­gFJdNKM?aDJ%`S}JMLab4 zM_x0?z%vJP8iGt`YbVHnk-_hd?ltV|Lv-NFZgO}sAw+G-rhDwB9);v3&H#paK z&dsxp0TrehL)7;K4ik)Av~MOm_S%4Lr@8aEJ(22{QK|B$=l2(5+dm+;?(uf&j1o5u zJJILtx~2Z$(%rc${K4HYylpVqnP-u#>^QI?*d!?eEtBNkWB@Z8!bEDS>Gh`n6z)!{ zZ@xCGabE8M{JyZ*QYd!497yBh_R~E?%pAO4;o>IvIn@eD1>Zahs!oW{a4SEaU#+tL z>Tvsh;_0LPAyqGZtS660&>{jWynx&k?2?*;bwf9KbULf+p#|kx+_y9a@TR zcIOHHMq}(66|NG#cIQ3IyA=vl2!8=jDe0dq;V~-F*(*w+%=sA;@e&{jO;l12Q&PO9 z>HmV7Qo^>?4?d5_G>|mysV173b5LbYK$)|l+jW{Gt0M&zN$nXW@{$rOh=2wl9xuhB zZAY9T99xV|%MiLZg1DCpI!50?ZO+AsezJ@FwQVr4D#c|1=mE&YEF78)tkQ7nO#x>x z&J9s|BG?h@h+MpbGsU-nA z1lN1(3Q_I})!0(^Dz-Mk zPFx-P@KYe;yp`a(_V;_|dhPPSmv4L)j>r;!Vw zK*3SZ@t>KZN|jd^WB}@ia<$f&#R`#V6(zQe!??0k!`sek$z z0jb74u%m|-Q}aX{A@WX)XK>9PLH6c~BtxOP4VYsu(M|GSfLWwaEzc47qu5J;IrYQ< z`S?l^Yog{6J*bB!qKad5bPK~u$zHStjtO{w!qeWH>7GhWQGNX$f&X&NDE(xIR84*) zKRq#=&!~NW(XIZn>+~Ty6!Xp=w4~ZW`v+6{AU}}Jte55Ydr~TI86f_-6Ny_utv`oSWCE$IeyAoJn>BYKKgd&r+giQR z(27A=!F@axC!HJn&d|KhV-aH{Qi>JgCaoj;M6{5RfyZWGByJQfFAXt0H9ue0vpoLT z&^sznx23q)B*)~W+6`L>WnzFL54d3nTvo)uWUkY=??rL*?_}0D&&Zalv*P4=-X{LR z(an}1C8+;0jR0SHNSL;*YUrS%81n=B-Hqq3hL|2{r02YPH`khE;PBq+uTZGirb2%( zdq*|Pa>IM6I4zNb7x6BOkp-PUtz>K5x|1_>ss|hw)Wxi-_KI~H8urPEn&Fj^yAbw{ zk(g>cdWljLXbTj2>7guIGlZTm*%qD}RvCj`+N<6a&yqg88Iokg^C1}?F2@G$#D&Gk zaq%f7_t8fltnhNUct?8bg(!o0CiMk!rMbAF=NEG#gV`f30pCX&z8x7r!;0ogD0&Wc zg7XO7vIdSF0J&SnLibfzFAJnGdEu6r!}@a$kB6>!5V0}o>}I6`jH5IO2A6{2e0+*x zqcE}KJ^hQ4@Dm2P%fj(8m1{w$lq&RV(+9EEa`ka7EYuupLhFtUYqJL-(6H4UYmbcM zdP~BYgO!Nssdpp8*{+Hr^TO>i3t48BU{0@Hi8VMu;|PEc#?WlbYT7EIMLWXEL4MGv zHrqH6x76N4T?BZSR?zjMHeOFfP}exQ6JZEb%;pn)t^;p6Ytju%D`JUue+Ic)O85b2 zi{4fGv5nPRc$k-Uhdh{<$0noPw)6NqGKx-2~gl>^j{Z=jRKjADB6$9;yerIYO~>;dFY} z_j@W#xNwX=d~Ue{=P}lgJK}Wl_8EAT=-F8U`_}jWr13zpb~38-`cY9uJDL>z>O%an zJ$VyN;$pNk@^*kdYAE6;jy#6D$hp;^8gef8B+w6tHK4vE$Xpx<@?=Ck9yY%3oR=#C z6Q!^%PJ?N;qv}NLyW4{PHJldO@QaK{uA0?CTr5x90*GteIa!f!yl%F5I^iCmX2X0+ zTYrIe4=0-VjZdZyJ@L!F(elQ6X_9|7J>1spHp13|zy=Y|sz@_X1(rhSsUfx-N)5JD zh+LgqRxk;zjH<6X$X`g&BKL(*kp_h_PZ)NBoG>Q{E26|JAlNxKW{-0|&e9LEvVWh}f}?cvc(G%;n!5ii@UN*R#RIdbJ+Cl@-nOdd74bz4cwBX7eZB*9Xs` zs+s~^zTVq|Qa<036S+#k?PYPc?M0NN14CZ3_D41L0QuTi^yFpaI@ou*xX1d&{QCBa zdmZpM7#?^HiF3^W7=%3A3c*FkcL7@h_Qr7eAKx33uF?r`lE&dHl;SC&3;_j%cpKQpkdLR?;T--o*@{;5aT+Tc8VB>nH-Inw=*1dJW+wa(?4II_icpT<|FGG@tSqWCJmM%Zk@1pnU78A|9T5k z|I+H0sbI$*+p%QXz0<@tiBibCV;YRS-6GELqt!_KQAmy+RE)@e1k48z?f6BXHk0|l_q}?FT;TWjpX)}DIn#`Z9uSQ#^nY>RrW~Js`_m*53 zU#PCkqPCE%B%mB+^gMi{mfWngmuDoh@{n1Fp+TfgbvX^YM@Vz4HQxJr2l3*&!IW}D za!ugnPN!h}68hB2?{;ax9jr5p`;3}3se|0zU7Je6S%E&~wnrf%!Mtb}88>Cbh#d<$ z+l`oby^ucAt$xx3=}~#Nn?KoOR1_$&-tmg(YO16)SD{xF6mhl2bbMo5>NrD~q7gh^ zSeKPhCx3inSL*oOs@PWc^(fLNRbkN8#5sKk%s<6T4{V+&KBV_P1!S=)ul3}ybMiajb%>fYpV}~9c~2%rMEmAkn+n4T$?!S+*WR2{t^sJ4n9VKn_424_`jBFjvY^?ujZ^!9K^vPlj z{mq|CN=yD^q+ukV#yroH=+7XB5(W!@1aLUzYFO64sB1xM-F<(Noq3(q(}OtgaoFhO zp1SNXd42NqfVB1NM~PoHpr}8qS5#C~!hs^DvjY4Cf?T`jljUf(f=c|dSdMmL%Xpxv zrg}v_*@Ih3Ovt{o^o~gvr*HD|E82D^T2JgJs4u8)H&Ezq?kIJnCZpHnXz^yK1oSv( zCI4=<<{l<1l__AFZ8w(-u#JCVEtKLEgqM~*d z7&1q*RJ&7NL8QO%p}QaZ<)Ikr6v0mOdm-J#fxNs1873>Z2H4jWSc(`)g~uT5#2}f{ z_3huID#H?+d{t=NSDXuDDJE45A zqO*$i7j9D$6e?QvLtuHxl?xJU=7sqwwvrE-v*{tr_gSw|KZ`^=Vc0g`AlYa+QJ$Q>fX%g- z7*cNS|}ee8ml-~ zLZgL^SxAC&qs8VjRvViKtMy|d)I#so8@Lj~pwnZIEKwC6xWTeU*o3IY90}qtQnJHX zLP)W_Cbm;!G8qxpvUH-sU8j+poZz%F{k(My+zXKHlX0+#&s1$kJGp{Y}x57iLV zeoBjuDz;lPJEJ#R^&55vWI8#o;kmSysY!>tH-zKCXNyf-n4PdXg&t0INM+3#ZyI^W z1;o;W(RJ%I$#@Rs1!xlGg{=v^4cdlj=W}CT2^{d2aEBB`@&<@tdO%b&vTmvT?R`v? z!P7k8{C54<7MeF0-0Zjy!%C$E1g0`@>)eQI`W5VGbULF z|ESH?_2GiI+5TybP8IM;4^SR7WtW@so811<_EP0xE9T=H#|sZ_$8W%k!*Gay#}dS8 z9R)EIvmdV{Fb7mx7q;Q=C9)**NIiUZP2}l=7=Jw9WS2ynXvUHhW-8{nz|krIO0bWw zpYLTNL3uRxhfe_NCO26YK2HOD`!UGXTTm$7M2s3-m&R&L1FV)p7~eG44Q`u={v$FZ z-=F9e7U#O5DglzF5Nq*6#2XS}{g{WD{EAx~kAV+28Dfm0yq*l|&!3RnR`%kxB`)+q z$4z)e>h=X!oEtSxG7RQ@#((wsNJ9_B=O1mtF1Bb=+=7t_2}4je8Myu&Ym3SP0fS_f zv|N-E@-fd%((tX+z!{sk`haY-)>g=*KsLLYkl{H6TQ!&z3uK;UO3EX&g`eDmbvRoj zvj`uEB$TGGqjDO9N6>mE@qs3OG##tSB(tMPxfRI8b&|VUY-3UvdBZ)hcXdHtA;rSp zl~SQS9Q@-Au>(@B&q-c)pYAY4%MiPKkfc_xQy-xJPA*D&yXxF8a^-!Ii}8O=E*U4s z|3H_LgbntW(6Wjr+ip#4htzJB8;Ai!STZyC#q3oel_4_MRv<+nm7d}o#w1qMf;WbT zULsp6xLC2=6D~rma;CZ^Drl}&>&t`0rThj)jHcVgg~uiBFRM1*dYI{P;WEh+!^QXh z{;u#1R27E6KNkULD;F<;6)YfIaKKn4%D4kLYV;!?Ylt68k37__RXfR$Fx0}n6OSJ> z9%(C>xY{Ch-d3TX=KFnKQf;Q*cb~Jp3SUO!>Qs=gAIeaNQcJhx!3D;cnYlXYd172P zi+yq;PvK65hMV7q7*}($C}w#%(%3NB*}Y<49O?7Gu>HmeCWXnGZDgr`0u8$Wh~J}q za{sO0@=nPeWiq&DL_SDv`DO8Vg~3W%M=-_rbrzh)^9D1+Bf6%obiS?TU(@X87^N;Y zSZZuI+TuC6_FJG~RRi%=PVp@)Ed5afq?efRk%GYC3X-C%%p^5z`yaPA>90*?#el^q z92);BdIuAKNclJFqG%OEQn5MGd_~wvO3WY4ZjM0OJ^6z`k~t?=AI6tLF5D11K>$Ms zf!N>Qm(mDKX`TcbjSkVRj7cmG!Q)aiVvf1HQj(`F0hoRU7Yt+4^qj}~eUs~KndvN` z%O0&W{z=*ln4axvVzoC^GacnIoK3h=t7(m}a=7&^R3kVxXj;h>^9(WIn2z1iLU+fZ zV>vSKe@PLbE(aJJJ*On)7UZM4H>w)TB&8SDi8~%iL9j9?j+Hfy9+onlnv2yuSq4X= z*pq@W@+}SPjg5u2?z&m}c#~3y9{!+DeFB`PYs+gJ1|P5&vCQ1F_7(GR2B5%x+D)=} zTYeWm-$T*_U;6C{yQ9I#>lj;Bb%Veub|3z|%{GyWD#luUq@TzW*HaUF$Lpi3nB>X% z8~=qcq<`R%W3HwEyr8{Y$L|{S5h~4?TP{C5_~k9i^NgLWzkd|MW#34iNZPu8c49{f zuKckn%VpapxkF+Q<^|D_?;ojyiz>e|?KEggJak=ls2Jkn3Atb5=%v1!=TNlxsl>_M zc*t2ibD67sCmXOTd(e#F+C(;W%{i|7gK2oDqXY6b>2L_g)p}f|JhdyPR6%Vgx(jJu z;zRFK_ZQO93yjGNp&wGiACf$B9YP$rK76mJ;2+)Oc{F)A^P?H^H|V+6PhQyH<)}YB z8%SEhc2`YPH-$s5aZP6=Ou5zh6(pF_koq*(pQxpUBo-ttY3a^q$4KW1({~XI1C`Mq zRhDl0wUR57T<^lw5FNBdL9YXzqC8&uZEy1dYk6;}buaXut=d&kLV^^ZvMZMx-Ir~f z%VxbHnV?sHF?vv==h^#Gw`8>pd^AniNYXyB*<-{O&2aKl^B!0ipS?E#aClp^czQqo zURk{+-W;m-p}WG$T(NfbbGeRwe?p{q^GALAiR{yZM0pXWOdaM-I6O*g7Z_bL0=eu0 z^LmS;O@#i-y1m%LKN3)zxA60q%h0*6Z>Vl;JFn>gkHlmQb=S4*-WJNVDrwEA-Hfet z%cWo%sEUGYknrYTsJpj8lu$;VGa%J&&&C|UMI-Z^a&Cn-L#xtl!|DX~^S^{@yOc30 z(qD4&tS=EM$Nvg=GRDTDMtZjYirD@$_p%hF{>42W8}8jwGHdztSYHD&si!(JE6w!4 zrup|80@P^vIXGI4IMUBe^8q47w+H{XwM1(vdEy-2ksg0nCM&H#UW@XW`v7GpVr z+SJ!cF9*I!9tRemkNZ`JZ&ar27=XH{GEmSlj?5t;qYagVc!7F-gN0rSYATb7UdWb; zaa3#-D^K!RD{%Nzu3F#aBQA|BY5a;1E-)6pyE$yI{ivv@(I($#xrSY6Nz0eqM>Cu5 z{lUK@$~_tN8FCsBtBemxd@am#JbZ|%tC2hF<{HkNWtoy?GurLxWw8b7HY8@$s}$Hi zJ0lkW#w3l-hE<7b=)Fh7x@NqhYrlikD9)?_32;U~bePPpjM0aFuDbFJJ3>E(G-B<{ z#qMP9o{RmWyv(r9YIa?P9<|S=b0-Bp7-Z}Un-Oo_BF*imMYh_%@eNvCo2Dm{Gf4Co zY#0a>YMJeFbk-itUM#>hsxUgAkvccYJkpvHTb9^u>qbnljVid4YipZL*g1kEZc z94i~`ub4YXHS)XU=0WQLZ&2zKu6GO*Y->Njwy1J#8y@2occ`;?xWo1^Mz;-Cq(<{m zMRhKjoBtuqnpujgI09v*A`sIZ1=GghJ1Vt4s?GIJ+vnt{D~Js+X3E&uY13r#e7U$` zebg)F592&DgGuHzb0(by7UpZnJGgA73x=~5kpjyp^RD7yw#OZkMmw!1o@}ERR4Jpj zznle(0%Z{e^0V%kyQ~yc#Oz@6tUu<}7hHS=e$p=!d(Y=|=|0~0 zKE%8wkYk!l_~_O>VIU9AqDxHq_-kRIwmZU^lnz4_najK1!5LieM3J}O+c$xc)DDSbsH zmtQjs;rl;6qN*vQ_;K;0JRGJ=&(|Bs;Z03=c^dF@i(d=>1CJQN#$3ua#(|8j%)Vz68@3IzHk z_Ft^yIxR7D)+qZG%7xjnWIe3sc$Rmy_4Mn=U6{(}bNw0nBFVX0a~AL|8H&5cow$+9O3M_OeV zVY3Na%N4drb+0*NXLNL`N#QnKlnDDGISCb3*yFaA`B`n}WH-kwx#}X+SBJb(a4chd z)C%+UszeKdiYu@XI~c7nA`5B8zQe1|ZbKV6mK9u`>^_^t6R?W91S+TetF3f7s{)(` z3kjui$rQnOE0`7@2bT)oaga!)1Zcga)(XX@EPoagiM1Xd6h^|<<0BDafSF^Etpote zp0jNxf0y;*$Q8VkU~S==U{T1kVAlZg?^bp+O0XkF-oD(l-YBfX+l#GmNKjrhEQl8( zW)SRW`2q~C^{2S78&PLsw+-rYc0Ju7Y*6Z{NOMr(f#c5#+O3l!1-GNd=F6u$>m;$H zR5{8xQKwTKRdvD);{H{sRXt;ETnE(2TC%ta;{?DJk8@xeQ-!kmSNVvs)|UO@S9Cq8 z4PkVn5&hUr@EFLLt|hfyVz)B&ieY?r+eFb1{Qdz0d$`zCXDxc1u^SkzevS=fJ92Gu zEY2W?js(siYE3VGRG0m`R*0uN1K(GbQZGM*H%*07{9JhfkE=rWZcm6$yavS+NK?cW z@CSrF(&hFT*^APMdn_Y(|3nj4V?IK`Gvb|Zo5a_gJ~E9JRdyt7QeN9?pMJwrk&p5%VhuM_6#B-aF6WsQf+R%N-1n{8BM{ z1;c_)gnvF@ zD7s?#1b3znxMVnGwa*s7GPtXWcu)P|HMWpP&%FD}~$!;gwYX z%nn`oXV!w(5jCG;j6iu?o*hV+7>X#4lk@Q6UTR0QJFMJd{4( zUy0LXO|-q6AWiErBRN_zw;c&LXE8LbpSmQz3*RoFm<^>?$FWHiwr*yTce#kPYcgGp zSIJQ%+c9KXl}AKZjd#>WGONMJz|!aTH76Yp>(rL0(ZB`edvwB}9lNNAWJnZKL*6h~ zDbm%9ZD!IMV3f_&f1&XjEDa79`LbRbe(eq)p-iRP&uTcf9_IFYAR#kY&Iq;;>&BWF zUqzdVqT#US&1SIYSeYXq$~u?ST%a4GIvTfp=LkqjTdcfPlcHv{JvAFzqfwL2#pu!c zzKJ(=z20iOo=e2N(^!f7T_$eabyl-Oh)uvD#`xBKWZ1La@=W>qrE=$_N=;Xqoj=+$ zoPOW#4kC}uk`P)q>i1$+T?PX>wOiFCkAh}Wi{qWXpa?oIoURrC;^LS+B*xK_uyB`~ z7R*)$0BU*c8Y=SLvvAkKGk=!>@0i|@odz8g6IU&Dws0W|50_)lNfQv-bN@M5_d7#> zk`?Cp$^0cOjRIPeGl3Y4pEAZQqP#J}4O*iEEADmoYsZ|sbgYK?T@W|sU zfmRGpc}IsKaCecM#^xISAhRtz z)>@=S;EXKrM(gCe31@1W^0JpwttFn&E&`))j)LWa|5w{nvO6X@;9JMqYkoCBUM;9= z-Z~#{ug5nUtanuP{5wy`t8RIcmsaOeBrnT_7-7#o;lH!(q7uSN48pV^qw%_db+mfE zsI+s77|^$2ztsH*j9n+E*rqxaY6ZZGJRY`By~VzHyXUJHH^pp(FU9U$#62KlQRV8E z6)U`g=X0+xpG4TraWw)$Op{B!+h`~-Eja}(C>M_t=-Sfg??J2@126DiKHnsvv|0AB zp27aOBM=D$nD(JE?@|K75+*Egu9)2WG4^Aekqkt2aj07SP^@nbdHuNaS&N1*sk8Ne z@?A{{Au&%dAmeZeGkR8N8lQiEINL$rf}xR$m(9QA@X-7vhxazz72ieRRNuvR70L#6 z108YQo%1*69;+7GsU7+v{>_-<5Fg5vF2_x0G5D@Lr5TmJGhWq-ryy|0EIsKkgh5_u z49_KvRrQhz0wC?aVVEegloFLWL6cjkD z67K)Y%p4j74OLwnG-#ebHaS`5*tuRR#hTTwK9?qxmm`{PlD*@3D}kxwsSl230TSP7 z$Y%uceLdq2wAjg(k>hdgOPsCK?QrpNeUqZ|J+mi;^TzJ1{~6<9haacE1p`2Wvga&l zk1t`Z7(bS~Q^=iEokKpdU?sYXJff9QY#{HZnchZggd8s^ZZ8m@5x*9HU?XuMjRWH1 zN0Avbnr&%1!+b8|!g5(ek`s2xcb=X6r!>>;(hN7`1DZ)pDk$IXPMY1UQAl57h5MY8ds($ z*DFHhw%I^8Ea2C9-ih(<%tx>|B_139*)>=QwprqTOCRMp`;)I6zyyn-4%|z9>a#dcV`MTLb z{q2J9;#;fqpkBw!0=h_!%Wd3>ee{DNjK%?$iUIqYtyZ4ngA;!4gqGA6#^#Zir_&r1 z5dmb#ln?)8xH<>1=IY)+Nm4-X*H9RuVap}yBT`#D*b2Jo*aI~|qP8Dvj*Ha2*-GNW z0!*JosA2sSVpwTqSD-0tWlAzaK7D#9oxy6sUV{>8=cr>P;}|`u2k|WvaCI8VNs?DV z&PWV$S}fgfC{;hvF$YqtV=U5LEaoP`8SdRRMkjrj+};J0jA8KlYtZHJ6{Yb{*l55@ zr|*s-PvDLr3DDFjxalXM;3}#89y1WUG{>szTLZPC66Jg{8~m`WPsjr`l_79y=9y=w z4vlI#dm(w6LIJ82<)J>d$844nEgk0cRs_v_4 z(JK8hwhDWu>OxxWyD)7Rr>3>jRnz;&J|F-=5TG9K^>&+O>5g>hhOs@8kZnZ#A{MXW zF6vTLoE(=f`ROZS#u@Woq94i=lx!@~kdshOyWsBOMpSq`ik;9Y-{!C7r8g2Nzio7; zoK8?$T2;^|p5R$h+F`Q(&8w(E{&TLoTl%vh`Iz20R-3d*XuuAY0?ibDDD7M-`3x<> zE8}@H_m0-*G4u+>Gw&4xt?Li;<_*&g?r0e&sAO}<4Ls`2lItUpeVs*ih0_EwziX%w z%A()MIT5V_DGKZiFDcm`2-)5R6nXVyQNf5UU zo8Ds6R}I5z6=MJ0!Tfjd$M=6{aYjD4Amdk#`}4>DUolG1$lyO{{C^sU{|4hMWeW%7 zB~0&VYpO8|T1Lj@p_&4cVa7jF6Vr&ihGzMtW}xHMh;q7m11fK16;T;{ZE_ zhidT=i#j(gR-562WPdi)j>0V~zZN~9vD%}gpMZhNz1sgn**kt${w?j^-Elg$ZQHh; ztf-T8$F^ZvTv)ZZ<2a}zg#`0;TU36MQ*4;y4@~1s(`?l9##YMK1-(qorRys0 zlkvC3jO-$8bN0aelqzDl!?M1NI?S0mre?qt`n|H$OWtzBg)GzQsKfnP8rvaVNv2CV zoDE)Pvf!avfH}&%w;{@s9JUJe%TMbGN3b<=-cHwZx6YIH9g{sP@NLB_Ieac2b=HdP zzub33C!oZL^5ZMJccRT@qpLy#ctZ=9GztJgbhh+u8@*8S|P!}qMm)qs2qE#ErTdpwYm-S#KN!AD!| zTrV{lZ_j}E%sU;L#f@-dE+++-@M7ow8)Me~c-yq-lE1nwrN@oCk$=;~YLr+Si39Ry z%~Tq6v`CiD-L%moI%gqY-a{RiDi_U^2OqEF!uwsN2aycbJijYcJbkyWcp~yH+{NPJ z3uh?D6w@7y`P&CZZiJWsvW^|irCvl(oQDL5CeR!5!@GRfL<4ap%f)yUR7AUmaB_xE zXK?x&2CaLbrZ8@O4wr7TcNj$C6M?=V+l$s}lgebcq-GA!FCa!Oyu!>iF|k5fZ)ab2 zvJ*-5_w*-WWTn6JW|L+|_Oqlk$?>f27S}plh4?fGOh0{;W6{?Gxkq!0i{}^uhoy(^ zpVr|{4fYyFbn)`C-Wb!q3Z&jY=+vv|GSz&Yvr%do`bP8PJlT3b>!oGb=3)DGMoX>K zXsZV+tT%svYz~fXh{BPS9f?j*y*>t(vE1k80`7no~{eOj$%ZBY~bMwb6`h0bqDZA5o}^NeyNf-0qH z;OUxBKd};GSoHkPGMTM5#6PsngnRfVN*Rr^VtozW=GqD68 z16ljXGTWgHjpu;8v*cD7bY6658FGf7wtb7ow*A3PVvYIDgStjic?d1O+Rua zJ<4DE;Y=rd9y2av@+MS#$*-KI%8J%{1E19z6D@n-a%3tc#uc?WY(4e1jr>5H*YKyt zo(T|5Q37g_=>q|= z^f$;ouL7zqi26)Sg)91UD|3j7D_lw0H7dg;Zp{{pMvvxOG6jIqznd_o`xd|>L_-qD zHOLU{y%wru6U_}lNpi&*CiEF`j3VIY-}MGJ%@jnWm6mt$-JKIMD;Xm7faszyTH)AO zR!F`#4XX5r_6m_tU*blE(X9eTxc90X5d%bThiU3Lj_gP_o30^76C3F)C(-u^^_nWtGq)n82Q|1CVEG)(yA=;>IB)NRhWg46i?ipbZD)5W&6i zf*N#b_-jPK7)t?4u=Y8=%luG{BYOj7n+Bn02*qIcaRUK*jsqJ=)Kn$*s`fFI+TnX@ zL_an?Kj@3kNAXDi$5UK$s0&7J@=sV0d5!?Z z^9HHm@(+HW`WSOakB1Kki2xMHSCXtZy}krK^<>-98H(ZKK5hvwHZ0)4SvRHoAiZOU5(Gu3ifLWuf|uOCinEDr~h!ol`{ zglp2}4vr`0_T4NFDaK<$*x^VeqYJ)1cg{nc?oWfi#JahWkBr;Xw;LGw2T1Ou3b4;< zVf>;YuA$bm?+QTvfv_k;n9=5rw4>$KkQD;>a*l5e+WCD#)Pl(_a;zQcVN=47+z>h+ zgZK3Bt_VDuHm}$G@K+vG0SIpz+#s74-UQ@ukVhg3D3JJNzEtQAir+=f$b!}iCk2GU zXo-<^o3U>(Y;68$twU6cA(``$P5VrC>oL4T{`W=v4^~7xa=LQ*t0~g`+F7Ofk4=%} zZwFH`Ye#!CqyG}SN2zVA{PX^u{I+J9?2kx16R&J))ibxCY!;*iP8%;MLkFG&IE}ZI zl$NwbF|X@>Q_7qzSLj$E*o)-96Y@Oz0!`aFa(8jT7cg-1KgV!ZZFjaqCx&IkueKj% zzj_^JJ9M?D=v{7oKnrqg&Cdj@@XNaX`dlv=}u-y-1N}aTyIYb;VLCN~0Dm z8MGCLtqI*(oYPNA%|h$9&}U>l>j7dSW0%LG@~gm7F-<(hJ`ff3cyK0+qsCC$igA;p zwLsoVsR&J)lAGY`rDm{KsSG(LXSdCI_KnD61H>orO4?JWP*KnDC$(8-1LLH_G{lM0 z6)5t>zEg>YLl4251_lBS1K0? z%%tT2OuRI#dJ0c@iZh#~flD7Z%Qp2)kje5uaX^ty%E&uZh(I|aoIHOcfSCyL}8$ppuOQ{R3i!Vz+u$AnBiFat0CJSzb4jS1P zihF=8RG#-DcAG-}Z#&ICTpyZlkObxyU|3Pa+U)sxE|BC;eqEOo%dsHJ8}OtSZT-nY z0_K5`mg6E&8|<({#&|2J)3dw~?XN-2#U9C=E6D3PFcE?C(cxTvrTYzpWi9Kro3 zUl-qYL9x2k72P>h{?gA6T%LZSY3h^oBWR4#6RoRRG{oE z4St`~I$@L_R~aP;s}@DIIW}l2%;6WZ8(6MrvJd8FnT*qa4K`PcV@!R<*u4hDH;MPO z*8~#Cw7f*6?IhSy=1zvbub%LTIx>|%}G(EjD>(-Wwf{2tB~$^tyR#--n*HW3N2!(n=peC5br9@M0XXc$U;aH$;{`RC)R18?n{Jhtf*$84sYi5-5+P@ZV( z1>+;f1_o;{^UAX|jYyn{ZJe+=k|g)o69)I_ds3Lkd`%RxJ*~2{yUy^me(^fQhUMyi zC51&wdiY^a=e^_>%Ae#kOkLQIQ*e*NBKPwrbt6< z*)3!Tm_5<8tIApCcC)9Ca|*Jn)`$5_su`|y(tnWZs1KS-V2--}ceTJjqy2?c8vo)i zwLrpGllGs5o&W#6;3i|__HV+@FO`7$Ismb=9=tvXmRX9DjuUZ?G?*1hkIW2|6mz{d z`qnI-UGwgWF}!LiiL?HwH{(LXalQHlre11&Uao&MUm#bYe6r&(q>>YuDSl|WHPMmg zaX5){T+^-h3H|Fk8k~dI5w9lRt;S4TUp_o&j(y$0ARFHDHP$l!vK{C+Hh{H~`bf|D zCk3I{WO7N)O#Q|A%8y{`Xp8OjSLgKyj#cLb-hQ;2p>&1ROIvO3#oQer>d!J)@6GbM z!)Y!|3r*buV{qO=Bdc0K!5;|k*XT|9)^?9xIB@a3k=CX?8pW|65S|(5`@A(~Eb2nM zJnynX<=C}r94@QXhVwA5Y#to8yv;>B#UKfXyw2M4n~g5^=RN3QWZ+U=N>;AkguH6; zjYGIdNrCJ&gm`jEanKjqHjH|tRWvg#1^W=hWye49_F+MjN z1y#9f-q!N1Y`umEc$cV-`NRsnhRam{hR?0xVZZqW+wmT3dkBa+Yr+_RKRZL%pQ7R- zvprUpn5jdN!SQ~~7nCh;0@eot1f#v4GSOa+3l4w%VJ%4UjN?joMh+`Y?3W6lwCirZ(#vtW{2 ziLOv(_L+T8?!&s7ZP@{hoWl>9fX)#4@cYQgD`UtV(u*gdCwv_|0RL{{2tu|Ia`!;Q zZY$F(QCJS-5@*n97uC&8q9En6$Nu#EWTpiMaH9yxNiR??Xv#{KGMN26#3!e;N{dKh zVyP48x>vz)P!!crou_5fm;a^UTuVH!bDf1C^C^5&Z!+q~`78SbtHZk+YoZRJ$)$=-$z@oFj}lazlGf#YF?z$>ss+4X<6(ZjbMrhg_Ez zCVF0X(7su&{XK@?g7jDe;SFVZL#e=nL>B6$VS;1(9idGAP*V~H8Th<+s7?GWYASi$ zm)jXs5w{Rd?X6_wtjNVC(~vF&2ung2BbO&CmIeMGJA#-3XTs=1=OqGpQz8`|C8^V4ZB12CMgL6ki-%gVxb($fE68a%T0@w0C#a>ZKfNUU~Frsx)X?Zx53)uT_IJcxs5J6ncq zjqi87jezB$N=SV+kIO(BPUdy7Ne4U}KsqnWfPNE7O+*ZsM0K37K4=7qGGS+{r2tJT zR%krZfRX_E0F0atXT{u$Ud|bho|geC@YWb(dk!$2v6?djEonfBF8V zWu8M``Kp%!|Pe%f#-yof}p96&#~5OMs!Bvjw<^7i9QZAF}mN^l&-O^*!_r3rZlo~ zL-Y^dZ2An9I{~%p<~Ni_Wou!KM&q!>UBWgah4Mk7wxvQ+|Ik%@&o7_PT>_~5;EMyS zKZ0kVU~LnwJ&`zc_oZzQ+#4G6$o_T-*K)6dLS^)nae@Os#qWiA5upQdQhq}d>96bp zV$vP?%!4dN%Tw&8g*QSmcgTN>5h2$OR{d&Rq8D{&+v@Ua9qf2WeyGFZm~?d--)*n| zc3%FII8Fcsn zP-_5Neo~?9e|-M>WW1Lp?*M$tf51PZsO3t>mo0im(orl~>-4?nyfk%p41Vt=ghm4s zVajj$>t_UnmfMha@Wa{7qIrJ9a=vOqN_t}F>V!sTcUU&ih^aDsdKX=PqPHG)_WtSk zhsW^A8dnGxVeh+h2fS?Tj>*XNt>=N}%`3CQ09tln1@H}r>l564G?~P3^4ltlBsv~h zMlcYDvzks{v^`J)sQ0Jvfe3%`BXYQL+D_~BM}a%u&|Q@6ogC(J^KW4v!~}Pa;`{HJ zvl6k(1OX*6zX3S|nwx`}{KM1V?9d64C|H8}Cq@kqN@irru+@PXVrS(K-bi~`wAriD z@3=4fX>9krrzj>%b0xD1RK8kXKR^>nbj^PCgti&OQ|G&KFN4%&s5Zenj2XRO z7=TI4Mi>dMxSeL`)!0LBN@=%{%x7>&tCp&X^H&?SK*PC%;^U)zhrf8CYKu4w*pomZ}=Ru0GS-E&dB5BOx6W57CAkGwnm>OH=7&Ep)4(ZqI08zavL>eEcVYs90;o3KnvmiaN~kM?m~HM zqCM7C`u`T&s47nt)g2txkeO3OoCifar3^14Ee_dS$Ybf5jf)-AcVAdE&~Kd8fs0ry zPVG{t#+h*Ld-eDXUPtW6It=4K0?nF8C z)^yBtWHfAb?6hV1gXQ8_zPH;%cXm)Dq0En$o+u_QMH+rfydiF9}47WDXAMT05wg)gX%tCLYK?4_P-FwjMoKmZa2xM}PwV+F_T|E37Mn?t z7TosNaidL%F^Jc00*SU`--fe)u=fyfEhp346#Szc8$aUMgGp{DEV$%JsGnuRe5JS2 z{}9{xS{PJ9P6Q7Q4k8^}%hZDLTDhM_16wy>>i*=@T^Uv#Vwho>cl)oCz_b^>cn*ru zad80#hlfJ+&is5@v5-}wCDwJGdEtl((1aiwMxiL*P9J9aU5Ne;dr#| zG|Nw)XE+YJI1N<&eB;jeDl%*K47p$!ip)ki$D|F9a|{ZHS>JF(qZ}!tAnbs|+NeSx z8W?yMDcVT^7*%~#p(3oXzjeGc)fM!*lyp$;hc$x~U5v%ul){*cdJ$6)%$;3}q)SY$ zudZ9t8$J{Mh!7Mc=q%0JUBaBedj7;StE}r9>*zA z&KYyms;Wt2Uc9v%HN-15c85TF0j*00my2bnN35iFk;my#BbQ&T5l9z0$MtvrLx9J& zA{|xwbwcocoe-@54=2RGm+VQ2pZ4pbh{N5|=NbT3IY}8)Wb@&~rf99*#2IAM^!OE~ zx>I(bylle9?ipocX&iGs?ufxRg+AHua-T<_SBkLh6f*a&mY@$u9gm9_-qtpkZ_C>@ zTOb-je17Y8U^$f#;1<~Qf1-mCYO@P>=n?eHR(i-0-0*+=?!laHa-|Gbjx^B=VM#Js z=S@VWq_9=!eM&dd-r~kuwQudvP(d8$2`Tm;4L8a_;1*brb5UQ=E|gWz3^rX1w7Bk| z8R{rr1l0bt+em2*=H%XW%+GR2kIEdTKi_CFxRf(Z-sY*p*?(8g!Ki=4 z`#qKo%SU&tup>q-47OR%HfeO+7zV{_NS&_>IOXmV5+4>ZM0PDK z2-m^$C_R2ck8wKN6C6h2UA&Hb&)Ex#z7&it`dr2Vr|Ab}Ke3udgR?n2GF?X<2Hy!| zJi$##Y{>j+MsWgR6?E!&*5A3OW5TwgaB>@H+AO!c&WQwwXw$XnjF<3*8>{%U8>&-x z3^W^vkOv|7>4uJ6ITqaj9F3P&ZeFic6KT#prv0mlO(FG=ouqt(iu+xD_MEpnsZ${y z-8oC_geUn}UpKZ{wjhLCJjEruvP5zQBb9mXkSX~Z35Dfa0O>P|ftEk?lAl?{b zlo`>$r!Y48xwzIB*2v(Lq<%{B6j{?w>ZL`78YKj6QIdiM6bj~!p9C6)IRqPNAvAZa z!(^l@k_L6q?J+j-xRX&e=E1om@-wg^5B zDDC1}4?}gz_xHR(yus>+-`%mAU2p&6-Nt8%AqC+p>q`;7eWUu1ng2DG``50(zn12+)U9k) z7qPsjCao_n?4f0l0mA;IH;wH=$OG8alB39RfnbTEltOeIqx9{yqi`;l{z9TmxvCXO zSUg$BK)^YqN{ALWNvzPY)~TbGww1}+)SZPT&%2V(U5LO-$vN+qt}BO`d}cq-Fj z+U??%|I%aYHv4hI>o7-s`&%vkp}y%LML`SFt04z%`#Y2KaYgbDkeHH#UZ4@NC9COyxYmLK4)Zp;E+M8FPTIF6RuxX z0ct=%eRKiH@A;-ls_#}l;)1gE_dfz}jH#x7=Lnt`_lfqd%F?c8to08AENE$JbGsSi zHZ}1HM%P3RB;zE#y4lRpA5)!$rf7bRjABTG(7e*U{u(Y#8<%2kSor-{f(MsM`D7(7 zYb?>BwX!pAx2VsqEJ;?%#yp=uK@-=3xxz#@?!d~+;%~u757y? z`C>3};MZ0?UN}>e61e4L1}mo0-WK$503WDV{E*rv04OV=zfMZt1U;eR8l&c1kaniT z;Eox17FVxXSQ8Qd9x_p2EHRtOxl(7bujst6nu?vgeoeqgNATb;9I}t!o`Hn}9D6Wz z))vApy9I3qFk@;&89=PrCiwl;`2C9vfTa;359;!(AsP}+cBdse1U9p$A3}b&#ZTg@ zv}d;*bhAi#DcQrd#7Y~O^(%I4ux=^rY_@W9%(VHS!P&VA=rq=25O1^AW0uKO3oeBh zgX0Qf0%w_$pn&tmox(a2%ZZ-Gbj6;AqWy#l%iU{$xae&Fv8ZO)ZH+ANTOElyFPK~td(cVZ-OUpNX>RWK&cfmsERK>MLetcO{6Vjt5W9v>`|q~v;O zOO>oH$3gDH#9834u5rn<+-L-3sNp4zcKKW8%1Q*O@slCTcmFugS5U9$Q41fk1^2|x zP7Sv=5o-ldcia6=cJ>f#Us~2Zw1AXbp7?@y&)-RJ?9y0t*&k&zBnq&X+_-O?P%n3g zI^wHwo3j@&ka$Y4qMZL|9@t~p6>NL{Vcvc>PrMtQkK0Ighjlcc*5rB%OPtmux-tP| zBi1q<;AKgGqR3}S71%_R58NB4B!sjoKGR9#j#jWB$nJg+9>3ikHBG@k4{z#_4H-y1 zTS32K8fglO>Ix^bFEeaNYE~X9*qVDJgEx z$7kOjj2D`)ty>~wpB_YqtV@j;4A58@Bo?C0XM{eYHk{Xaam(Bj?X0SDFH*0ST%JKgFAT z|67sE&E)2piva_Koj|Z+ZuFog^s6mue}~V*o|W|}!}I-}$(8$1s;Q_vX&gp|tt4zN z<%9lD*nVUbPGb4%XdieZJN)4RHQ6wi>)0na`Orr@Wlvv~T@haLk6;Q`I1{!lwl!hi zqA##|BRX#Z-Ee~za?ZT<(BYz8YfOb{AO1^QxP_K{jm;kA7(>N8nq~OI&q#?9`%2am zm$LHw1S?Pp?EE!q&rEwZM$^B}(S4B#v`|sYn8mfxa>9YaJ=;t-2(UrIa3>fX*e8D( z@ZV`yC}j{W{5fu@XRv6fe>H|ke)Ijtn+Q4@MYz5OQ8%iE*CfN+&C4*Irm^Ns6o zi6O^PH5p*zFbzfT0KVJTx~;05Kj%7PHcfhAmvRrqFn-Z8 zLhsbYwzuAyL$d$at1_lP4>Uz_-qX5N>&8HOA4j$=1@v!MFUM@pzE+<38M-0$K#(+P z#+o)NTUyH0uQ=v9RjpL7f{wn!=2}dQq%dH`S%ztTScWRJh5kW}BK*jko{&y2%bzL} zj>8)r;z@TqeWL2D4%*?QUdxOcW-0pLNc51&Nmo|nuGJexoA*99dSss#`#$eJS2mB& z=RZERZWyX>hWGrgeHt=+-xzMm&%IOXJR{z=3mTh2AC@7i)u;IdU}zp{l=a-RWf&rC zTw9Phck&xJr`48j_NeoS(z+OUN#Gn@KjQrtZ(M>GTGpXOIHqsay8jPw?@E;;#ag|Z!ev;cC<~t3H+1`QX^6w>dgIh%Pw#Nh3ytd_dXW@*?r+E1KWqwYeQU9vipP z@jj}(bsa+3xY~%O>94yynT9|L51A=PJ&27c+PwD8I6wU&Y;-k!eT~K&ji0f8-MR|H z-9-O==PQKM7B`{fP^C$MPL6rAj^wh{xxc5Hq5&nh^WH^kAys=uL@*eirgdi}0FV0^ zB-wjFZi#m#Voe-Fh7vI&hslU#&TJ9W!U0SeD_(Yq;kH}A;=MPhA>bFV->@U~R1jGd zg>wo%@u?nAe4^Mo#%r0PMU&8H&62Q5ba=bAGZ92kJZ(z9w}yE<(xaO}n3$0$4U+&m zmjAK`tsh6_E9Na=vB~n&1b;7K5;|a|Vu;o87k=PoODb~%$Dm{`fur0d&Vo&`{g+f{D? zn;C*-9sF5VilpR!;Ne;$el#6Tp10CrH_%}Nho#$sKmbIK;=&%c|6?ITal|1D=PTOG zzM_rdKSrCJlf9LbJ+Pe zMIwt70*rq-1-ni*LC`mEkYBn5Q&ut!RA(d~Z~fv_qGiL%XM6pgB!60Lv~mAJ*WWs< z&8Ixqwt3J=?jjopslTwv4hajs>D;E3;lk}d2$|lwx%6|EdFH}Ze%pb1d8BNfgFv@a zSY^;XZ0UD9EV2|1P}i^-m(+q7$)mN&T3csU2W@k1%hU{Dq=?;g2#nG$UJ-)B1-Lxn ztH%ka6Mb%b8Pb+(^f8MlPnhvpJ2g%&MbA28Asd(h19n&FUEns46xFDgY*J2IA~C(- z3H@(FNxr+Y3M5b|1lxlni)lq9vN+CDGKbIYYS(gjkAr0~>B*9alyIB(Xl53;#`|LU z|CToo)F(=jIUo@D+9n~?uZ~GL;>5zwYXE~JGHe@Ul3EjMlOu}xIZ`dC)z_TCTfZ*2 z&^(T)Meb<-f+r76FbIoNSSI&PKb0(i3p)$JkHwG!L;(*5z0#2X+xW0=3RH*eA2e*8 zcbH6=p7~Vh9;0+rHm;1morL!tflF=ZsPVgRDU@@cr!JHKE;9dTemYk*#j^FKYimRM z_KopB#@Bz54&;8@lB)i*O#QDwOH#LRR9*ZsWoUIdn3A=|M`X?m{Ee&|JWet&APNeG z0!xZ0xlaYf-ajG7%$O!+Lf%2$*eKPwgb}WG6$HfA77~M&YFw;ts_shms;>Sxt=D<~ z{aO%1(3li{ymh$Miq!y=`9fq|aJ}ApdE~GNyk0eOd|TL&!_$NPBh#WXZ2OH`97Myv z=E=+vgTuw)Rt@3Ihm5y9B%|hf%cHe5CgZi$%{K$Gm8(}9e|NT@_SNuP%!+nbcEbMN zy+o^9kDfHPk%69|9nHoGtP!5i?7LbX0#IcnjoozqTgJe zV9bEN8BIdosyH|qfH@;tJI$JAlN*)K)Clcq4$v2FSc!SQQqYqliQshqVEm+l6y;L1 zr)l9qx|yPFDl52?5#=`lP?lfjoy67!j+jf69;6F1i%ypsu{kusYa5bxeO&NCFl9Q1J>gB z8d%VxNS(#!?6P?xg5Kj~yK!wI2nt#S)^p_XE>6}qiUsjTa0~F(>*J1u<_KMo>J1;v zn+nq)zPMW4$!DZRs~?=J?Pn*laK%-A3q%%P+-!s?&Vvo_K)JC^%D?4t8tEYG3UR+h z)+yg4v|Xj-uKC&U3n;OhFnQ{M8l8c;$h@k%V2U=pai$7J&9y7qR&_t5zFb7<$)r9D zxSNo_+$;agPF3-sE~x57;m}T}NJ(V*zJxNat0+eUI_;p9ga-^Z6kS1Na|))^6&kH% zc2p5JRA}Q{c56i|E`G)EDiLdGy+~|3g}BW18j=#t!T|BYv;tOLsnce!c_)jQqKyg_ z*9z=Nsmx!=0vrsD8Ve1JJE_@f6pGgW0zSlBbBzj-=M)m^^LjCrmgNH;T*)&|WF#O^ zE8kZB+}{SLH_5W|3x?=lcw_MyDfZq}aR1fXHY0njH_S_~g&GAJtEUQoG6a(4{9t}2 zFeKy*1a3MjPVbBRS(W8EE@%-PhN3C>b?yr8D~k4ZD3A|DTk_`ZX+v~HVK`>0{PK23 z#%e*L+ZceQ?Y9RdPsY~hm7`Or`Ky%Jjo<6*x8BMXJdMLSHEA+ypm?8@@%V*N!Eov@ zB8pqLO!`fA?xKv0`MkTF+QbpDguvO4HPAu}FpDqhsTTxqHJFTU|sp8^WK zGzLf&8P+NOm~(NwmvdR{gwEaQ;d<5_(qZ~o>AD0N!jYjbiw}#@?-xqVp&Lu@r!cfu zqpTEdG7AWSa`zHBhA|xqowOhomMRV_yX&Z82nZ6h2-$6CPG(b>SYac1`pzE@wB z(rpdNGv_4*fyaFu)D9spX%o07;GoopjrKZ>F@|~+ul7%hG2)ah*~SVzGCn;w@$p>m zXz!DGTx4Az*#|Qt8_=QRbfwP<*?p1Ac^B~J4%9<=QNk*^#h}#IvC^#ZKVfth@+5zT z%tKH*{dwpt~9K*CXThM z@q!p;m`5{V=Q?qP*1VNe1+mJ<6{yYq!ms1$xFiR1J-mlh z!YFpvOc>|}Uea1OL28}Ro=j3RGuT6mMQv@=w#=FUz&rOS^QJhWv4m^fVpECvC*6As^IN^q)_kfBz<%K_7k`10+q=pSL>2Q3frKMIYXvv}sW=QCjQR-w`Nt$J zNhnL?Csv{B)Sn)J{V%KUq~)#}O8c$Jv!fpVYi=Ig86_EShnuDpNGxW$u$e^g#qz_@J`ud1o`cP(eP{V`2H^`!Qz3pIQ z!uDLHJ-<(f^IY*}by8joaE^ZDVa8Efk%_iJ;fPB~q$4&<3`2tsjVmO3eb1oE=tvDw zL1rl4*M<+q_ax9ZTtZXKGl2~ft^VOhL#YU)DV(jPe1f}g4qiB_0~3X zPN*d<{0^MUV`quhs_eB$MzS(tJ2BD~f5xgbGz@qFJ2#^XWdu8f_L zn#(;*X7wnteIb8oMrqF+P>6>hf|*wihnP=u4>&<^+A5+J3-34J1`Rkl9RZ^*{*j;~ zLJ*?BD`#y6SXqDxw7Y*K&pqCi9(xpvboVf$*%%{h4?Pn-gaB=i&R4mu>&30p9iff@25Qwr1FLtv`Zm+ znInBlW5h(~WJT{JV^wCr^5k?_>b9VyqA*uM8k@&LX&5SFbPcPnR}gNk@1OjyB;x;>H1?`yltmAF}{n9Su?<>POHPUE8Vp*JHm4X2%6F>lXy4HM9fR$mOQEXfcC zKHuw+qRZjqNA!_SQ8|NDeBGbstjBQLNEi8B`-jyij>G{Mro^^3;oXMx=JM{>3#8p{ zj+?$irfKpk)sUBRh`;yA9_OD_xoJE%ZI0`V+>Y4-_9LSHu9nlf= zd}m1(&Qelt$Yrbe^wIw1LfIWK?3#i3h_7w&Lr%zpU~!kZlWeQNWdQQRf?n`GByY~> z??g~NG$h^$yHtJYU8g*G+OXSXnL6T3;+2ti^;HbYa8Skwow0V9)B~OI`m4l9#}n&P zsWiTY^v_1JXszCE0B)ECZrBH-)V#z+%j*WK(iX3hw|e6Cy{|VlSH3wODOYjZ5{r(a z5WapJ4P{iM!&|MvD6iAx&-NLJlynD)A-kw07JKN$eqpREPZw;81!S-VEXor8!YRjF zrI~&b8V1&2>Jkfl9cz)oN$*f3Y2nsLF5q!2PBexTrGc8npkBRbL32_^Z5Y|_@~b=J z-FSiVvYT|$5O(h8kQr9{QdH(fTyH1#v4!be<*Wd3)@n5odM?=V`UkXeCpHtKtO#Yg z!NAjyoa(pew~~(##?l4dA>njl)Gl&y4}BPO^z<9!<*(+g*!= zX|sW89L>dEWR+N+yH$3bSoH+)@(S^=hER`UExVZ{NOt-)!tn7z} zVGfqG4i>#z(+sJcQC2fwbN}N2@**qcIf(R`<{r}Lc-f4Jfix+i@R0&B4Z$U}UUa0& zL~0-{_&ho_>a`#0pqP-35&&SNqgU~yF(CYw^XheLirK!I1Ks-QeYoXt(R%1*!}UCc zqJT6@Z2hRj(OEk0;#oKwp?fpyQsg!&!7%@5c;|)nE|~7Kd>legIBWm*TpFhv_e}6y z8sbe`pzid7fbc#bF?g3=`KfRSu2D9xz<0+&fOVHn`_fA5qa*%F#`7V}|EVqBjk;1( z_}s|a9e2+X> zQ)X&g4dRm>VYBc;s^sE<;i8|(!{6D#tkQeNippkMl@F=O)fHM?Rt#@kL<@{P2W>gy z7*S-wEwnjww&vHCT5oPHqUmVTS^}ti#Awqcg9}FCc6ONlpr*|l^6Hb*v+r3Mc=1e- zCa@qq6B@h1QBu&2-DlN3{W8#V{eloik@klTttjdhq|2~6!@&YGc4ixQX1T&+24%PQ z6*pvI2ZLXUns+o>eAHSPup$BusB7793ADcq6Tm4!bW?dn;`YN=G*GoYB#6TT`KEC2 zWSSlx*Y$#)v}~f`LtZBqJU4K|&Skyab`KOenF^<@E+X&9CO?vvMhR2=TFk1U42C7` zaSw5#@6UhzaI!|Ygyo1PBk7Owsx#fz;Dy&@9W%_g>!h;xOXa>c%b|2OQeW0W+C%@^ zr$-uKE`Dxo6`fz~BHrLIY>E;Kew}>UWpl!*JrCCq5Y=443QIp75_g|$scJ$#L&D!e zjF#A6hu}^SL8|4ytOP@VxYxB{C|)(`MNBZDguc03k3Ft~c ziz&GnUux+%mEdbAM%vf^4+{FnHR9|q1{zJrl6U3;((%_*hpF-qk1S$_2LPBm)e`21 zbC?UlnSKA!7{iyyQD(WY~e68((09EOWTEYYcyix^R4?foPN zVh5`gYGJDxjC&ZXASmhRi1l)ybceyN68(0Pz2CWa6NIa@!D$cx+7HyvR-cSVfj znvVVIdwDYw^Y^tRygX7g9Sne$G2_Hqerb)y z4}oBIalzMJ=AUQ63ZyfJO2A&hY3!)BJoab5}S; z^X5rZ6Q~9nqyBsh9=o$BdMyfKZLc{aPMccJL`XE?bnw=U(`ymeC|f zj8x2(fAbdch$JjqcG3R|LY+p~)=Yr!0u974h-YA}m-MZcGdjKeb8a?!Ww4HB(sjAV zt*M4Muks%u_V){wlhXTvHe|n`za;j{1K6vJAKCX9~ zJ%Tz5m_CX)6V$z)v-6QcEt1gX)(q)IiucY!hCU&-j)0D^U(}1f+Ul z7z`~CUjF6qd#Lc?1$enXfR`i`ogqKUg2qgtIL!&nYQ11+g%r++<>W;m z%`oJJnDKdGt;zjLao#v2;**|BZDSS?;W?Hb0f-a(z_o8ls0;1MpE-d>8SMATE1lJb zZRGm!dqKS{9h(>7Jd&}tNjJ`bye-!Rlj=6dUogwALv~u`(s`R!KT98gM5WS^P4NVADq_6k9BqiO2tXA zhg-JFSI|hA^6D?Q-pP;yt==!zg`euCd9WL5gv!U1Jgw-nllh0zk>!k(P7XBp&zYlt zx#De#Nk*JVGPvR`(DjGDn?@NemKE-++zhsEWChOCg=80F89d zdGMmLc=KdHLs1&()aSq%{BgWSyi;GNZzC>(6Di(dfkRq`AtJ|uZK^5#R>F{=UV1=Y z=H^V+_}?q8ww-L$H8%9On9R|R-m(z7Or9e=>WUpWlBGRpv8m=a*XP>4<~QSV=?x$9 zXX16R(-M%L*zvQ5)UMcLlH9Rr;C-3rS=NaV|AydD^Ji7_k%UvW`S#)hZ`=c*i!1&_ zLClYe@?Ij3iq>rh){=neqXG1Xu;mqUxs5a63`DR0iXR8bV+t9DtphIQC8q0;U+}_i z6;umRaRGF|HR}9jRF}%MHAZ>hk?#Qwcb4&nK)bG&~l*kYtVx22iBkq`DD~sJ~Ud8MoJRtIzND7xt= zGz;K9ouPAa5OzwFNxY!>7(xSr=1C4cVMEsUCFJ~uTVkEi6*2SCotF1)zA$#?y)b=JM#wVK$S%&QkRpc{%tpwQ|O=6)_#sj^FY z>JjyiRZZURJ9d8Wj8a`^O#fR-SWyp2qK#GR1yum-Hz#ARO>4IO9%MV}->yeo(Y+nw zn9uC&B92qC+%OSLsXU$)B%BLnyk>s5`7(6&&f7pmhJqid;NdE;xdOx8RyJVDcPVWkdeuJ5PE zQdrg;K~+F$JR3TzqwAg(jX9)8N>_E}NBSObV%F+6MIVx`bRqmHUA{Ze+bks8W_ zvJystLb)wX0Z$cH)SMoT@WiPK)|qu96!U6@xHrf{+1wV^+gM&#;AR&*dWFsh$W~B& zr{vIi&itlS;R|T6A*CNux{}0>%weO5+t(Q?jT2^8KFbMpxv*!|gO2JOhSh^YeEicJ z##Cl7^KnlkjlF6K)oEt?JMVyZM0tZCYnPS`MZAWOilkI|YOwlvvAxlEsjTtA!9%wy z`Y4BpCBGC)nQ5SO&3fd|pp8^tfprOGSoA#t3aQ~M%X@HMbv1_=m`-~s7CX0?G$lP! z=3k!C_m+sb_UJ)dP!v5)6A<70mdJYX1&1`Ycf~ASm|`iA#Uo1PQfO3n0s_` zhbIq?O;&l>ox$fG)Lkizxk;Uw>uu5P9uQAImLuPY_2rnaf1A`4*?8h_{r+;hmM(cc zYBk!blr76n|I_9b_q2FGqZ=&556Cc=N!VwR|k@*N6NtvtlN>EH|rA*9i z{N{r|kfAMOF)-2Js!7cnp51EEp<}exb4kf8_Sf=l$nh-^gYH{p==DFIy5$3juA| zLc5%ypIN0P0a-rQ(dLV|0nZ*B52>W$D%Trgya?mWRng0(Y&tcjTMjQ}@CiMBpgl|s{`9ps`3u^R?Gj-V{KylxDbSNheWfR`)CO4m7W$e%5=(>*XwNO)w~L{mRnv>3se$YAy>INp4ELUelx7!ki3Th8og_OJWYx`<5_D?W@t$Vuznk3g^d?B zRfK@1=Rg@1cHN;q}mk`n+vM|e4P}M zKCQZ@5cM_WCJgtJ(4|B&Q!Cu!$S?Gsl=#)&pw^IIfrmk*j|gDqX=Bp&opM9md=bXQ zXj|05QBpJw_*Y8FJy8~3^||9bC4C$_${2sK*qdZ82ECSU<6x-f?J+I@e z)N2@3AtKvfPklwuJC+D5s9Th^T=s8-Z`>CCgb=L9k@jPp$ zcIKrnTU2_kcVw#)lgU#dM6%L8QYKRn&7$j}P2lT>IpD+ZU5vw?j}ZUkVV-9xUI%F} zY-ce3JEEW)EG4VZ8BnY)R{+ZfrB}&yrri6^L^$UIC_hpH{VM_Re>Z?j7DQ6t%!sW^ zLOhv;IP>wa(>7e0XB}@feMCR{!}3n!3lH<^rCkT=x$L&!98W=6rp-k(u-qMgC&dS$ zjPOP=<>Fd;{={X*N_qFf>$}h#NzC&XT=hu1$~bSrkxA9}4}+U|zHc}I(YTvDCBV0SKI$WIsxr4JJJ}2yvtd=|8rOX<^fi-PT}I)pimSw5rNvt!5~5kUqcPJKY=(1VQaka?s4l%p6}(ONt=YMewev$n~}t6_Y^!Dbse;bn%d z4`tnhMXPrHYwH#&=&|;`6L_I%7%66NU;5e!>>9Ot1??`~gWpuWBZpV=X@fQB(@^Uy z+P8!EeNB(3vElrk8Q~5XZ1dL`@}}v|BeI-;Q0R+!R5RI@)B^IQj8Ez(Y5fuu@|e$T zfUnt?h6pHg2B5~t%Lm-Ej8%^fH8zIQctY%tBe69!zz~%6trjQZXg`ukJ|9CF%ZDmpMP7t3XA4>GF2g=XP}Sn8}d9=%CB zs<*3D4lB9V16|h~N{%~nA zyU~g&0?oE_q3ukGX=Sp{Rz;hC(I~=-zjfw#C>PnlCAm?Ul+Y(gvc;@`Q^T)aZqU%Zn06&&=S$9GPYtfq!`L~x=kDzV9VO5Vx~@=Bd+@rM zQFTiRZGBLG){iY2ZYSy57$4|Dmoi8OfuYz8*%*fCt@m3F)nlM%+PX*Lz7G|V{p)FL zG?|HRmyZ`K(On_hm0zFK%q;(QTPa&@JDdOG+}FmiCHqB{5_IR7Y^Nu)8oY;I%8eck z;j~dpSMHJR^SidQ#Zf--429a7Aj)ao9eMrLJmBNcCC7C1*c0cd6V0EfqY*{cdM&Nu znQ5cn)vUff;5d(3ExtpAm?v9Mek{uQDBG07kL>CJs zhX`@12VE?yF9Z+8sYF;n8i@c2oZGXQ<5`A zRj>_ZD4qs;iqWNwXRpdUUXm<);Ku zh9mqYVfv(VIxX?G(f%ZX68Xry+Cv9wm)b(XQb=XS923^5G#MIoBca#Nc{fHklQh|_ zgxi?a0aqrhMG=2rkh1p5)E++}a?mvcx`XM@yiYTvs`s5=Qhd)Zi)YLkpLb(+R`y+> zks}s}$WPIb?XWtAtS*r)W+|shsD~Y83z>;1n5bAS9q*@0G(Pw#$GtvWDcvjz@u_IA!Iss}xZ#7USz*)4W^$8^`8fxxk6@R1WLIrD`? zi?FOBfl@Z|{GxWNB#sb`7P0|DV{)z4gI^x&`)=f2O6#aVRX{MFEvGDH){dr^MOZoj zKf}i>$$N=hryVNNEG3r~ZcA(|dc~&mI8w0>yI-uq*jdXxyev_*S^Z!2OY^>P0>15X zRLwCirT=K2IAQ5IIh8!Q>T0rI)`s9npD0aouB-#-VP6jMk{ywwM4P{*Sr0#PC)-g^ zVY)Mp?iPp(yge*0|2k1vXE<2*-z(R-J}L|0R^QGr-VymK2l6dwFJMXzTG$ONKI{aFvda;oM~A7t%1k_Rj+l1cp8q;obm})@B7gZU9(j0 z?FM1Y%9ff3skc2G%u+i@ThmhGAcg3;pzMB1>0QV$pZ|qu{U3Qyv`ZJb{ga2t|B*cY zXG?pus*cKnAlg^+;xLd3y)9f&NXSbmaNn*NU;MOpR@n?Pj?#Cvc!NS#GS&1z_B)Bc zGz#(ShyS00wZ>B2lB}`k%e8+iZ!`G}?k`?qbAG7baz_I&Tuwa-jqV`ZdopA2?zv&8 z&RxDV2T@j5JapU9TCV?~vpgy-(xGodw3 zy`(t!g^ZgL@Tmdo8XmI_7SMvCM;$XdNTPJdnBpsrE&vUEF1RK>S)+utkG$-)%iO_t9;GN5>k=(&W>@Q6OmWIPhE zHSva-J)_2$q#RN$MwPB&dA6>q!>7k7opIKzSau%hl0xPgCtY0ACK@XYOqUmIKT~fh zgUOg&ver07YIxi}f23)U6^DuC_0T4(lquzyH3bO& zaPbQecmTeZczs@U$t#Cka%}R>Y+mKzW}P#~8r+gG%h`ZxovZ(y*%P|-4fEV2w@LLm z+a6J(ypd(O`)?D)w21xZ8~-ja_rDj?|GvKi{-?jI>HNpvzknFY$wv%f9@Hd~I>8Wq zuoz0p%xExVXi^@T_E7D$m+T!X=%@x!cS8aN;gCt9JAajiS#=`g7F*@k`JAU;vNkds z{=Qvoxc^|)j3SOP#j}$fazwR)KX4Rvtbj*NT{N^zjVM50z_GVUHL{F1n;=Xx#+vBZ z&NjN=(wnFwdx3AU#Yw=l+r!13(6Ub!yRJ312xF=F=kI5xlJeFW#ObawfqAUIxQx5J zG|{$`L0KLT^%6HWHX9b-Vp+=Pjc1)>NINU1d<|xq(HXW!>CD#rx383nuG_0Ln=a>z zZ!4NjPi3kL?>|1dIBc&kv2lldjimEgg`bz;l5Gyzll9Z{N$6LIGxU%BJjdd<=Zwcl zPhmv7g`6G?qcsAF7A=69ee2Gxm0pKsA^EmdC{6Blr!uh_PHK2Zg}1FPV*^gD?Z;z7 z%WmdI^#Q16I=MgY0(G8b?-rGd+_H!j%C$?sWn!#4x{ofaptam&aLipd`}FX+*Iiw9 zyJNU`4Y9u6r6->5)qF~nlOj^)m}(A)Eg8IU8>5YGf2D9##55udl_}j3&iw>->H*sv zMuAfV@IyshT$~fq6u1Zm$zIfGZ83%HyyjHFTTyXfeE5}$nHj~mRyrk?1}nmh1_PZ* zZA6w_wiijamJa!Vd^D5SZ$oQ2sn;h`J)L_Og=~khpzu+EZh62V_LcgYvq7m#(7N#U zUjQ&y-~PwNxiYDYGO91nEOfei0y{D^z{~5CRnsdIzu=5Ci}bX32Sb?n9*2+YWyRrC zj1Wn3oUn@vG%c$^Z}3N6()WvH@e6gFq(A6K;3#xHPq+!dUrYv-zcMG+)nXs3jxZny zR&?d(Hhv*i-t4bgOwY)#(GH>z;`t|1pbVC(I+;8eg#)(6G`UKPURBba>;T(**?lOL zupG{C^e$JRl9%`yqG6Pi;4WXxdP#KSN`YLf2G7@jWAd16=*9T_Q%Uvzk?A%FjqA#U>$0w`K%cp7%bI1{iwltz&Hn$bk|3? z8|&051p|XYktX$g{jUpbyUW|j|L@lwYOhLVVf-){I*mEnq`t`GDGh@pEB!)Tr#bA->IQ>T1G!sF%oS)`C1e;Iu#;ec zQo~FVW2@Z|i%uuTV}ZXMx(4M3HgKYP?26{4(r{Z(7Sf8@lINd7^8cd{04C%1B#RlB zUv{&zkMx#-jgFhI!K{6*yoAEdf5 z7LUlrrWKBNlZcUYU@>B4@qpO|=~w(yIwPO`xZd1aeE-2b`HlOXvO(1)2F+6cx-eqG zQnqKclE+i8opI|630L1K2gE3m5_$&EI)>gy}#KI%Zje>>VAe zHJEHmvT6&MWH#OrSonihsq%17VmR8nIKD^@+=&#U)2>rdv$uUv3guokt0vi!as}NSZ6eaR=PLfqs|Byiz(;VEP}U8&P(A z;trzSmfWxXYW0if8t1*2cTF4l(vjL{_eD+Zci}WIv+g_R+Z_3+l{lDo{cMn=enW<; z8CC56-v&L;?L42_|Bce?n#uY>R(zce02Q(j%!ypBTkWkKtS>jRBg$IWzp^)k5*Xk9AF*b_-o5q+bH5XU? z6mZ%Tcic-?HA>vyC57^X?g90nj}?hhqgEqcdi37<^|rmt>i_w)!Tft;HO2&mkdi4x z0p%4fr|e3vX;UUQOgXT1W~sR{nQ`&CdtV*x#S9dkH*C)cF4p)pf_OdUy8V>37H1$N z`*h{9*k>5&hVx6E2|Q^U4>QX#tYYgUj@GJ3KY|)rm3%SDbb-ID^l48DVDelbmw*wq6A^YD#bAmtQ*J zgE6cQa&M&-C<et ztyXlpFpIu}Gjev3Us0`DPp!9>Kf=EBw=mCJ)|u++*!&{kcIdQo1|)&JtB`$hcgg9a z;uEH8r&w@H0*$r2OR;C|x3WPf0ROV=L6D{hGRQ6SlEEZ<`NfJ7xme)r^i726uSW3W z+b3;sEdAFO@v96<$Q?*kqI9$b@(F;|2NYK1_w4LnbY0lrEa2GvBzHIy}LGeJi{p$34~ zf??t*DfiDkiZobWkr5~7nBlIMWLj>Q!Vq#Cf&UWi)L^oS|a)q-N zF{wm-_kMj8oq4BGkOySK&A%$Q{D465jR=-tvid53eCvpi2P^?DaTA_u=^tr30b{P}k= zWeL^AZgy$rz|-XBTb@J+-v3(~sJlR?Y56Y&WcXJk7x+JRhX0Q(WT|V}s+ysFU4JgL zO-|C=X<1V*skhJS$K|;SS(eck%~G4ysZ5kRczbUk$XbkN@vP?WN5Edo81ITLLZJi| zQ^-#w{IDmYzOpP_oU=Dk3`F}w z#6t#+ZpYlfk!!=pw`aLJzaOBPLr~jT9fpi(dwpib+!zqOE?51RjuC&4;`ToVwz zUpjrgus|`B^7ghT%xpY1){G;vL8s{`@m(AUV z7(=UYEQhSUwOO&J)agUeI#dK^IKtMXQ$bNmH_ic?h^tl1@s$k?i0wD=5AY=hatl z$fPlq8OC?DD6UEVOR|*<7Kn{V4 zm#;3|Vt-F`nA6Q=km@gr5iYgZ+s-~2rm9c4?UdsUPy@WbW_n=j-@#a0)x<$2h~V27 zv>Blk#hZuQOxM-tR5H~_`a;#e6cwb-M5?4VsXb8;S16K8XXTL&wL;Z>Z`ArLfKL?vnl5+a5?Z6DKv zDFtlT+vNG~q3L9xROhgxKHJ^$x)LT=!}l;Awh(25c6fskZ#{;0#_|5y%AHe`L|j1( zk-N2n0P$=N%ISN-3ka=?UbsO<6F30E{1ioOV2 z&C-?V=H7Oq=(g3Q>mKNFw4q;+bf*tYrS>GYCU2k(FkD%1Cs1QfP=(mHT1C_2n$xG8 z2Ra8($xWuNWm!R2DMhlQ&K8(YhEe*579vp*uV+3-+d!sC>SXn266S)q1HR4v6#)k6 zS|_T;`H1h*zv;v~a`GdMRLbt+-+n>p`#Ou^H?`tEvC;cbmnZ_lr~*Qm0tdOT5TQdg zoFsk&%y&HcnEpi6UxOX{HFsn`4H?*#MGSlNvyaavtg@ebuk`hlnK9frUZwDUG3hu7 z*%fX{1hpdD1&IQ* zz6L}TB7<}vJB4%Q!Zz58hW$n+2QN91R7v0oqN zPljaLU&B-G2NhiJSOolsqXkZkdUp3yc%L=eUz<___v3Ur`)3ApJI9A?HcvP_FL?-(T@P!Rd; zd8X@_>HT<~;6nXFP#P`~hg$|}C6kC+FIDQi-NoA~n=?jfeqg8b^Bu(h;jUsYQHv!b z5>M~g%PNhtaDult=}i~SVMN%RyGG>wjjgvyxCJkeZ9H!i<SyBD${Z+-m>+B#f;u% zvP!2aefAv2Ocvh=eaXFZw~oB?#92GI|)Z?v#=W{b7ojF5SPatf|`&oe4#o%~3B-T$r>d&Tw+7PN+%7Il9!i zKKH_HLvRk93+~?brk?H`=+I(^!Lgt0?DkeKlNBW-T18Uq z0%1_}J|3OvHGRI`oReY34UnR%DlRRp_#YC+A?92!`s=6z>)C@j7-2_9@{&i7j2;Op zxY>Z|8Kidc9;F2=?cH@wZl#XCoNKTHyb~lB>%w=_nwqo0a6nl-e*bZosEIW!>od3# z`P8-3BrJ)FHkUChjxG>Izp=y|xp{%mVa?B@-` zuj;cAqKT&{yAp8P0GvH}>rySnyH>CvQ9;i^j*`geB;F8XbzYmq^su`eS?F`s@0n zjKE}O0U)rU;sEiD{X9vX5g+j@g%*!wTectQ@Hju_q!;L?1aDPq)9p;*c+*M-4>|mq zh2`WTO=JeH=!wloxUl18W91{80nkn~Dxm$#WW0#{@4s8Sv6B_=m_!aMRB98dwj3{xyv@PAYoU<3^o(OGT*GiC@!CF$~Z78%|fKrAFHws zy5e{YDETd~xvHV_>dcK&+`xdN)6b)sK8JHWmB9hR?z9gL{>xr?kw_qt=fDunbSi5T zA~JXm4>r`InXQZ*7ACpSY=9R7PJ?a}XA6r!6ib657&(cK%2tG|+fN8kSgE1cE(U)r zHz{nuG#@!`78koQ0h&7?bx(7DT1Oh(T>!SfJ?fB-NyVvii(@2j7*wXP>&{1KuwCX{g`Sm~By z#Z$@g@-E4XT;3$k&0X1EFE-|C7Rn)xbFfFzY>b>u(?Pz>#j_r9BdxY%`xCay7VUf% zi;YVyG&@Ru2p^BejVYF*Qb;3!z)7x)K^SiSSV6kPbJHk$8W~^arE+>0e(zP+fx4Xm zLzq)7EnDECP2vcTseuiA^!dk;;4Mk%K3eG6+_CwkQfLGyHn^+`wjxJ}T@HxUnc)`G zQ9V3}!ofSzG!8v}lFUFJh5i>^YtfpyiC1366lfnG>IqVF{l!3W(i0^$YhIydGjLff z_q?5raHKKK=yz)RATdjvP$e|2=GS*e;2<&uM~K=uDn-}Dm_?v-GJffqCI)(Oi^C@?qq5MOU zlLz@(xDYI~)4qx*i)oaRLB(xO;MZ-}zMZ|VQoREx8$Ct2+m9tEs#}0M8ZN;ZtIsbJ zJ+f3~Gpmnsla0SX)$_PAsA+0PG|J7;y*42gWeZJyis%JDk#a!XiBee3)|{?D{{5rReoD_Qk)rf(&@366n_i4s zTf6^4n4Z<-f}5+fZU%rw%z^#Ljn95)?%5{vYc>PeDO@>slmzUQ*0&qA8N?CMr>#K+ zu%jL`4P8LMU?QIFO3%utl_sSRT~`?#=EEU*tMDwl^t9dOWD)yP9}75=F#M z;hK36jae-v7UwbECo1xWR9)Iwb8dNVZJQw4XaS?8!58d6S=34v(tw z%eD))T?Z_yPPL>=Z2h_T-r!wVOQFl&hIrJ0JCF3_4B@AQxsVToFX*>#c4=utUes(CdRxlv~^pXBj zOi{qS$9|(*@SBdCnZSg5BYn#!_NOxtcK9`#Gn#{QZ)sX|iZoa6J;?H`xa};_z{#TDjcX#(Z zLPghH60(DX_hb?Hg3a?@$U*1pQ!<`6!o9(@kpS>GSU8?LwuRwvduEM3fSke*=Q*JM z3o|boX|+T;b;fMh11O>8tR_n*lkmAvb~g7_UNy(ck3sI19JxQ-%2Urzc*L?IkEj$? z+y31Pb%*P<#`u-6I9Rn5MO5>{E*=B2lMLf%mklR~d^|G1b|K>VXpVetqQ7ovN{#b0 zDfR8`E^Sk@{4<9Dwk233bL$}3uq)i#CPoU#K zsR8=A!PHP=7Sg3NfxX%H#_8sl#v$jc822=6&6O^P1O%&`Z*w?= zuIs#7V@s=+;_p~XFfYUIOVfius+zLgoAb8#L_;}Vt)9->rd`=zdz+f+uK76*`Czgv zl%44z`;CbY@cEeuKOVOn1R+d627VLX&)Vkt)@f?2b@_f}dxF`x)+%qR=Oj!vCqf|z^tp=pht#{DO(rO~x*qVn-(4;QL&wCwgx$H$t%>f1vtj4)9N(CL024hsz!L*2jLWc&MM>zht7WLDfRPTxaBTtY3uqGIvdTu6;FK$N)PdRYOaPQxL4 zyY8#2FGGM@oXRX7WBS(^j}ci@&_+H#O~K&WKB&rYTbGT$4UuN9!6FCVkgtbv0A^Ne zI#t=1tR42Yw!XY4*-N6nq{9?INY zjh&Y@O{rZu-SG<{EA-L*>-cKNJW(Uu!%(-px;$q`>uiX>r?P+)Psg~ z9(jDe`MCK637k;FAEaO6)tAL$(uT5mZVD>F4t0}m)+M|YtnT!kQuY%q7(MT9)p$M; z9#1I>BI`3R-dt^n&D>S4r+}^YNM&!%seKUi1Jb&M-C!rVET=0(@ zG)Iarw|`F4Pj7ouuUslFiG_4{#e(bc>0}yf+%%l7%lS#DG&KO+fjeuBDWF8%OSs}M zy~kYua82NHD=355<8+M@vI)OnpW26|=GQF)4zh#m+$aOiP{q$y4=w$rmSHs*D&q zs@J&^eQQgL;wj1?T&IY;Pa2k)>mX25kU292c_(;64( zzlqwXsMhES>%l@wN|IN`oO(3FN};Kuj?5X{XR(4!Xdl}`B4>8*sBM??YjHG#)D-=UNieca`7)EyRxb6(iG)BBR1}WD@ zcepGV`#6)8YO4Ohep?C5wNa?L_<>#tBfM|pW$jv_bwdpA4FKyC}r}Z=b|J0+Yx* zV%A3<4Jz3QogC44sD*wZU_A*KVv8)Ca&lftI%!Aq8pmEXab8h|I%Y<=XetonVV((3 zuY{PhsBlXDEOAJiEQAu0A82rKFi*BIEIOISFXVBH7um356d+W{zoK$Ce0$md%iq*# zoS5HLs_d;KQYA)?sc6lZ3orxWpN}#D;K8OEt?^2R?#jkO@IYekN_7^Q9i^{ISa9%0 zaLD!D)AaM?IU6Vh95n5DglP2br6aPT%Ga+TcWC^|$8?d>=B)oss&lBxSq+9@9$3;? zDNG9$v&9aVg3~D@M8(FlhQx~@p@`ZB1G;jrxPX>w`c3Ngy)EhwA^s#mUsv(=TkVG{ zhf$OEB}k=Hs3e$;JB)?0;acV$+^#GPRt9S}f9Bl*BM~qasd0fC*GbaYYt6YZr33~O zjzRXAE1`LrQ;UA03X^Xa?sQ94=iqMfm6uIRXvBGO7(Wo9LPDJg_Ga5YUHJg^RkLBF zexG9UOO^dYi|ONSK~bgI-z!#X_eWL-%`U9zRRQ*gRWZx#S6Az_Il9;1;wHCGbP}WaSXz zelo>AT?c102nE7PHPM2s;57do|Ibw^0}~YH<#CLw_I+2g;!AaS~wB64RV{m~XO{MB=iwNr_dz!N))!=(2&B+m}6oQiYM$CN(Qppda6~7-e zP)4x`eS~}v8_y!|bUx#3VPe<9opo9Ix!$K@lg}tyv0;ZgVZ46%BrzJu8lRBaC%%$H zxV2L~L7bmL;AgSM;9ZQv^ErdyUJ`!}J_wV-M?vtTw}IcIAmlY_-XO-~81zu87}`y- zr@FITvYvE2&5Y^Uak7iDV~6WZgMjq%IutI;LM-@S?pUfaV#INHkS`P>;u87CdDg43 zN~Le7cv!t8i}eZP#mC&nGfNq%6RPalAZ(#5^01>P%iep%U6*5`%wGz-GkxD-48cWw zi2mK5njG14LVSno0*GWq+@|f^lq5@|*#)skf<79!^e`%uW^(v~UgUlnI8hjpJq^mhUlzR$ z^1y(y5G(mX$i%rDyO5x7(yCzJRHKbh>~KB7Xs+tA^`ArD1dh6Q+qtY~CXzvvLot)J zSEFzn|BlzmO?;tx%s7_}gWW$duOVqi&8@E7w)Y-NfpxZ*3}AZ2ywyKxRNm3hF9k=v z!eG1XSEs4p<%flh;U`OGJj_L*{S+?s&wR5%9(SI3=rs<-?IIe-ndD zs}V8W1F4$muGwKl=b%3=G3oslmnVMzTN9AFEdkjn&F?c#HR?FefVt+wSpS-h82-04 z2aLY{P0RG|;l?`Luym}FWtR>U-O@Po3PT?3xjZuYvgH4&>@47_*tP}^NOwz@NOw2V z-5t{14N}q_QUcPcba$74(jXlY(%q$e!}qS&Yh0gi3 z`zR7i1dkh_e?ucAjh^6@>aXw5U?tbnLZ<(P8T~0`VYd<7Xfo`m24;3jJ2Il5gS2pt z|Ip{^2}TfQd0#H2ezhnBs$R$hL*Et6n#VDm*`leDC=!{RY$JHMX0ovI?B?*wsfGe2 z5EGOJg*E-OZcG>#pqfDlI*a2-t8dWXHdsg4;O2OMtj@C$)J67MuT&sQ3+-VQ$5HO= zbkHCoz=rFA1!;G^&MLA=A2NLtqaqPi01Z7!3fGt@tZep(N*NP#!@fIsgCvaIA5myf z$Ba1k_6Edq!OA%KATF-eV-{4i!lIi`vq8K@MIDmj^<)-ap}$H=b~w(tj~Q{mDGNsm zIvV)JM}H&Cuu$Z=ekUAE9#!R0;XYA=lwM6xCVJOO1h2}Zf~2i32`kJ@DUq}UK`Di> zem1R!=Yo_$<>s7`c=_hO0>rgcW2W}*Z0FZJjJ+$Ts>my>51Abw#^a~v%MfxJkYmJ0 z78g2$+c(zRg$KoL$K;9@*p+Oqm zr4@1#c!|{&kVL&LBi7|!SjpzvU=F@7Ea3tzy^bN6!wKprC4xtV4kz4)- z1XkmoIP{qEf$HLC1}L;0j(O@<8K&FBQq6*VD6G?SA2Ma5zx1=?_yr!*cANCL${?$;C?yvI z_GjD=XWDJ+sx9XAGWkvY=+21dcMmuw1qW~{7%hoSWJc2LG!<~!LFVhxLT3#sx>0Mi zyF>9P19+LS7P72`I-Yn?dbhE3E;I7`(N*N0GXh0jomsdx1 zh|hPz4~hNSq@F~d$lx{>Kka9cT+63&FH{Lah?Y7GS4P zh_Q#9FJ=BRL?LZ6^C~+IGdyyFh;7uOBAJhxt}b%X4ohhr;wG`Y2Tme#1?+LWL}`Fh z{fa4djEwBdM)a7t+Z;^G4FX8*b=jHzdNdik*PAikH?9cKI^nE3!L0ZHXJ9%eM?UjY zpG9)iAWKTj;95TyU|a(CV}Ee6;d^C5bloYzNDu63QcLApmxAi?go5@)NooTh&;`%7 zChuup8Q0T!ww+|?Z_tVhUiaVxQEw4Z_#zek?NI10gAN^tfZ354!};&6#6&UQ$yl4S5Z^*v<`WWsoerVc-`cE1BZ zh-f|EC2mSMx?6ObkAw?pRO>?mjE`Kt4$>$7d6kf?h9Io~@D`VTbFa<=N=uzgBS`%|AHLxjI3AwFt`6!ZtV@Hmt$os@|}1 z1iOm12r*lYQrH-GYh1_%hGwnPEW#xB{`_=xi~8fdJ{58q2{@PZYPThuT+7F8?rl4e z6-;z?_op<1UT$1`fv+L^@9Y_>Rq<5jmO{#@Xr*=ClW-H^!A@k_J>eLhLxI?Wt{*V_ zVDnK9n82-bRV>2J?04~%BYUlaJdJYfz<|S=={)uyXKl^Jg(?5!Ev8b!yh*c@O z0PB=4A@sst@)BfuQP({G5_b@daE$2)sZsnkZZh<_g0!bFZcp2m!x3R4td|XP#)$O_ z)g%i_3A{CXv8imDYdP`M?uJ1Bhl`dO2Al;n+yA%-gWe+qZo< z6tR(igddtuZ?9y}{=wdFq$eS>XamGrtLLhK{-DFadG-n8ie*B*d%p0hBKgz8J27Dv zWgHeslTnUjnNLi?g~oI;anGDu2VRR*`q0G(qQ`pA68WPibWsFtU^oPLWe*E^E=Kh& z_$rCxXS+Hthxog!l-H{`g>Yb%jDHB(LedIFjXTp)Qr8tPT~$VSU#GCP{w48vhlBOa z7(3!=No~|gqVJ~^I|7EX#uR<}E34%`{ObS@{b%e84R4CUid%zIXZIaSQuYh&<2M?w zwy1^&KfUJmnJNR<&cd;6*AjOPwuo56@YUBv!8*qfVADm>Ry;@Fn-<7Ng~ zYw!Tc3Sr94^{my$RjeJ~4x+Nj+(v^4_Ye%E0;9!sq+GG}Q!09&su%p=>Q?r(N8kIj zo$7_CHH1Y`yc2O95!q*~&pxrn)0Y7c$>T*xWFNt52z<8|>GZN0rs?+C?k;V$&Z4OG zu}h=sq5ylJwNv;llXaZysLK_GyZE9^bl={@V^{gQ=HT?Wi&3~^(CfTgt`=&-Y`L{A zzco7IPjv~xRvlL-Bs*Y4DYF#1+H|Fv+KqwvA=Jc=8=AGwA$+=G5y;QNin>2ctI*?P zOl1-_jqn!*y!3xNa-f1b3*mb8N>aLMi^d(Bytr$VKQg`d*$xBgHUt*9qmEYRgfAf@ToHQ1KHa8hEJfT?7SR(Dn+*h4Qn~^)Py;ip7TS^KE)-12`;4- zsPIiFRt}@!&Rd1PSt8qHGXetj`Kwe=ani{uvy@fu;=`w{WKopWANDhMgFJ46dEbl; zC3v!E5NABK-#1aZw`)7KFV5o0tG_Axp|s=d@WZ?i_w>V#4bQdUW+ap4_>-6${pEC@ zKo3;ReIgodB$|0*_4?O(%ihp4&v7vKvDNEMfxr6`@F2lm7^>GN0)K&ryHIM>Y?Wqz zmoZv$ym4NeTj%0Bt>qkSy=PNfyzn7DnEA|d5~9ugVt+FZ*%7JQV^_EGI%I)%MU~pt zBMYOUUMe`Ti^MZW7mGqyBBKnm4m2P+l+Bm|ruUuNMe@OU^@+Lpy2s}`eZKxX-caXW zPu@+$o~bJ7XG;7R<)lLxPLcBh`?qs0D7l5<1UAr(c^5tV!l_hFX9s;?=B~Iym!i8H@I_X{#%oe0X{#u$591q?-0=7#0WG zW!o=^zo?RoI}^{>@}UZtpekp|0+jwmOW}D56?WTbgW^N6)*@Ov1 z6{4!CL^=rZ_3sGnN4AqBXFaMed_v#i+e!h;jW+m%0|K| zNd(mLL6Z9`&8o<^2F!QDHdh1~ef;CQ?X)$K{gQ%A=_fPmE*Z z(YedjT5Xha3(#Ww=;@#*!X{eW52W8X&s_ zhY*djBRvgt*JQk6;3|aX4T+Z?;B4cRSn>0cnehX6c61(pKIK>nK+maE8zJ5n)UM1p zhY_5i&Aht-`stWv*FKY~k`GETY|(|)SGAP%eryZj5E`cSu*iU4(~T-Ba1eftZ1(WSsUu;W39H*YKu5o!`4y1oPj>)egdVMfVd$P^}nAMFK zu=v)Y&J&i+&LB3AGxqaMTjf?YCPiR6Tg-1y({06q4yEwJOg_ zAtd15o-WagM)25UfNSA#rLUSzj7(hB;T{knyf~xW+(`HF1MX2T&>KMv#H!R!T0-&O z-RK479_aOlMVvmQ;)ZFSMGQ~g`E;poa)JVJHylJ*BUCUdVa0C}3=4mx*B&%AeYgti z-5E4Bs}JFB?G}QfZQ8Z7_ac%Q!nV8%2cEGVx9X$CZEhMt#!ByNU_nZn;Y-y_=n5HG z(+nc}GA)lAHNQ=`qWa}d)hK<3Zt&F+r}z9&^zg|lqBq`hZ`y5rIHA~;Jv;xt{`!T( z4xjh@Fc@LqTl$ZTFYiQbc>78K;r&6nwaaR|b`b6jJ4LX3Mo@J}M+{1QomGT2tA=iV zTK+CPq0uMVJiycuez1K&lNiSBD}-LFOVX4JN^WobUTe3o;Pl#M_WF~Q+oK4-;aPo< z45h9?3s_7)`S*$97wV zaA(lfMs@iLe}B26jq=i!8%TICg>f52Cgyy)?InQ^1OoCLYPELu&#znbX_YZHoz?n}3L(|vBi7MfU2F=AX1wi9 zExo)p)`8XBq4mb~No)MH(%IR@S~l=7MmuB$p_HQhg3_vrQeZt{LNolu!VINW>A7mC zOIfXM(XsiL^uk)Zk(~qLb;(TExJ8UD0d)g-u}&S`1n!TnVtxV(gr$X%tSL3#lbM5a zt5cmZMCR(xF_k7Ci(A9K7??Of=w{&_(IT91M(ZyIuMHZ3i}T1|nOVez#~W$%Y&1&E zB7}cLBWt?FfEMUxzKs|Z%CfYIu)S|L_(Z)d)X8Lc2RWOf(V7f|P0DueFz z>>nAS%`61etQ5mB&-bU2B`imB#;G2X4j^tX@S!TG9DML1c*WkkH(o zXR?vRJVD52BNOa24X4tJt;LR2$MCNdRh+~!h_sOq=XD{22dAL8h1{dduVH>#trok_ zd!CdR)xvhO-b`KH08u0B1%vBc39$?0A793Z<~LoU(aPY`Tc>vW4?$${bXA2rgfO zcnL#Qy3GvEV6RD@l16{}@>Y~!`3p^U1Z><64Q;Bx{u2*mVq2sD)(mQbhw(Z%occ+; zqEFZ)2VIW1sRtORXJ@s=7IE?{%u2X7CvUnIL1_JWC&}tDqYU3EnOw(fl&4?RU5znE zW}bOGP&pcqw13ptXyD7QkNjyLJNmp)PkuiDD<3r~v&`{kfMd|^MzFt{Y02Iq)0zs| z$O~;;3jPv!BwA_^r?5t^+5Sgxamj{Hm@N!4$N3Ai=!l~8Z`ZY7J*gPX%)DKiErVjk zjH5W{RF2PQERy4~ENnZ%^f;AN7`EN2=q&M~KZObVgCVwi2fI?U(xOXZ&crjvhF?z)z{JVSOXw8MykC9CT z?DdEEwkC&kXxDbfoZFOau)~!vC!a;0+(nkvc$r&g&DrcvqPG@$HJljI;uox|BgLa|qN zF;A`vrr8WVy=lJPi?ELBIclIq$*{F--$B~x00$SLt4pCsTYkdzltP%4j4GEbX#it4 z)NV{lkF6*Wk^?q%bdYsXsL4vMUJYZz;4!TaB`Y#aa5KR|G8OP7O**-Ke+2Jn?{Zeb ztqL;aBM(8w0;<%2UKIt{vZBLM3Z-Q)g;Ikc_599*j~7&)Xz2>e2yRM&cOkGCizx3^ zI37`{ND8Y^nS`AvSBGLy&GuYT6&mD)G51hmICeu&t%tz@W-C%jC7*nwPQjNOW>KLk z@>>110jH*l8(0tpi;A|aWspj}AK^y9A?~Gh?6B0DXd&AaL*jtUP+w5Ah1|Monhrm% z?X$Adv!Z%bHQ}ehOvZv_s>|euN*MH+P&{zMlz#Ij{`KO4#d zo1-ffg#i;lfoKdNg?PhLOFE{GUcMwQ76ey={;$cAQRXwCWFqV+{- zn7e%i30qONzzAj)$AXb<$PvrrnS|6E2G~c?aAWdshvWyG!(ny(83P>iIm4_b1zX~m zr}1RgVkpI!8+NutwJ-*=MKDSXim2#Noa|od+YB--^!Mdwzuh`jDi0+2{8@SD#e2j} zeN*!cmyw3Ilski!>II@zk=qukl3&zBxNVesTq+*5^vAjQeJGr!#8fy}>&eR&!f5KY zQPC!&Q|rbk+(h?)9(AJWduWc47K3ceWco;7W0i%)1sLfl1eHV{eo|pVwhp?m8T0Ua z6^x!!Qp}CKJANCV%!9I3s4x|=Zt5sdPhdBe+*g2YzkoLCH;`r7PRZM~m5&ywlt^%3 zzkgvdH1dR^_=5AsA2b$~z%D&OuH^MXB4+=iWAoLyqLh6SCzs-5iRcL@s+S0Aw;<_y zkrcS0g%v%4@~At>UL0_*4yEsMC5KR0jbv1fx5pS^2`P%Q zTVb1#WW8%#u`7cao>*!DY8W1YawuMfhv82YVMb8R!s|UE{k=L()}=!=3Kh1W9gW8c zvx{uKh9T`Ka9Bfl0_OWDy#=RJo4XQbLzaebCo;BXjm9P_R+1^lGt{Ktyy(NGEdQrL z#Hs15#?~)~K0HbzSp)fwSJQ8`yk*TbI?q6zk7}MMLdAF(7Os=Wh{?1Y^L+58Jx1+a zNi5@3co(3^oLm?1@=a3&c`Mw?N!&9WBDEPwGMG4hrxM!|`}T!wBrK>d{I?2R>acdUPIuc|^80iO{p6L?X28ugB%d~wg(2y5tj7HC2>@*L*OP;h5FH6NT zBaY2$N8M|2$&lO2H*V7Klv2Wy3j3wv)>+jRqO9vpb>=>!Ysc2H+P3ozye5R9 z<@q}}5UBzdkJ@LlY&OH@Gx8K%Kbp!buFf%B!g{AIy>GG)JaSdy6-kQgI7D0h6c!O)WKyXm*UCJ{k{hq|@e| z>Dw9^doe%O@7lMP%FF%1zJFKexvP(BB1~IxKcO_DnLumESXsnKOqGDn-3JR|-X4Xq zKIx~6%}%G>vGZw65p;|ga>?|YAXaA(U^gV6Z>zFqD5Pfb#|JeHUZBS3nTm+BgMDZ4iw8f>Xx5n-y(v{w!>mic$gs{LTfWa8=x~G z?+27rnhV6f3N6p`L@$OG%M8PTjit~UCoMn zAJtKe*t@IWhn+ZpCl0$F)rl9d`eG?{R*liy?}^4TY<=wW?%;#5Dn*k>cFFg-a6OkV7#Iw+lje z-_jMoo6T>3k639Sp7jB$WeD#i&fKR#LF<*Nwn=9l)Is?DGnA+axjsHTl+yI*L?~-7+x#4RN@EYX zjd6L_RDJ5w%EFw`9Im{^AFKW-LED&WD_$}!r6WvL3zlZMBZ84)&n_N8=*mrc%a{aZ z*V7NiE?K)taFbNe13C$^s006jruY+Vf)wXSm}spsMX7Gzmr|Kjpr7$?7f(mwVDclO zqkzB$-4wqSt+F@M55B>Zr6CK27j0CnD>7q=IzNZI5*&{UqF}+dMDlr9P&0cOjB<~o(|Cv27Mqm3ezih>0d)?2Q=66eU(S|NK@7oMvZCoMt*!H$pz~*8*PIkUL6KpYRK=<8kD> z4Y?3-Vp*qS3p=2A5?qW@bsnG>gPLSMPJ=`U#jz3}1)(g+amGPl3hmUJ*SB~QvDbf@ zqIhV?mOw?Ng2|j8ji^lOjcbx@fFpg&DPa(l$%)~G2xCv0IUEYp7n)Uv7QZ!8mz$j- z6|sSG?N=4DhZ3suSmw3p(yOr6kN|W!e{ZrOF1Ul4S7B`d`EzIpi<8kQt_R*G(jag))#=zOz}*`ciCX7cEcLm>qn*|{w; z@EuV?MYLC#+$zptpE%T+6xo!Ulcuf6tZ`7QHPF#&`p{W}WeIvJH2dE6tO>ps&24}) zd~CZTyZ{ZRVb?pPj8;3+tqR*!GQPRdEkbr;X_itm-W0%Qg?qG)pu#5ofW+18s+L$B zd0mfZTGq61j{(=U-C!QO2rLwXjt$rxq>XKXiw0W8%*{T1M(_emM2lsWMjZP?7~Q) zi@+6L!unYmM5bi73qCn!y1h!u5s(dH;|~RJg|wz zPX@DrZimPNCC!G8A8~_@1MIP(oyac81U4_oURDs#bBopR6_F;Mp=HqWRe|Gv(4=6s zQ44K^ox?5|l===~L0X;+7ZQP?Hc1>RA<@iE6prD}xeiH1WohMVYL!t-GODm5pB@d;kr(#VX&oWmK{5lCIDA5>d|D9aJM zTJ1wE`O~8(j$V_wC;`e8%5A=>7gJb5LWlOfC);#8s9hAK}_SxLlBRhCm zHgx*;`1(s$SS}XjT9En{>9JbKv-~-%u>B43KXo1U*!TM9*69{o`RWo}m>zAmVpk@f(s>uhAlomkX|AEG&#`YGxVa-c<^-Ch29RiyHGv`hoM~K|W z1xKq``dRsvcef|MMJpjQJ<@Y%yiCufhE#)sSiG7r)N3lc4hZzz3?JTjQ6~=Y&vy9Q z2vc#@a$QPxXq-2LhdA?smHc93wmCVI`dmx%QEc@OOgm8uhYqp}w z+y?hNNbCrs8CSQ*l5M!`Jna3|l*Elz!8QSD-OLQR$1WbZ&8P3VYJhcZNO7kVKgpe>Yj2OH?ltD?z5 zbHgTegPq*>;)9;fxOMRS87_v^z-lkHnX=vcxpJkBeC8J=dXD?pNm+W~QXP{>dNAr{ zN$v%~TpYnI%`BGQi%?7&L^AK(aYKeDX<|KK4j}6hTIo-ir&JTWE{ZiS*;*f;3v}E) z`2HF1)2X(%VxS-(r@#w%0KjkZcmfL}B5qFqSsMwImyzpyg6stsC`oxtoZTMimi=Pd zUn~-aF?NK-BHKZCR#8$f<+SUvjt2|v|DU{RU;9{_Cuwkhp!s5b(5US>UmJ*aW|@G% zYd;cM<Q&{WIU<*V4fsaVV=80;hrtnoFZz+3{tjr36Pk4omKXBo z0w3}o^#r|miO=Q9yrDp}ga3xKh{%Mas;iG3zg1h(ksxLH9U~fLXx_!1rC^+8Yoc_( z%?mOY3eQ<1GmV$}d!eB_>jA9~hlFEyOx{{W$I*4w^fE-^+2Ztx6ka8rus&brQa*Kx zmp8$>tpi%@c@i$2=ZSa4Ii6pbkYOqOrX0q#A&^D)ourcr9HX?EsR)ot`SGtitlCd;x?QQ$MC`2Bb z4i5m2%4-20l}G*uMZx}`vPg*AlLa0n8MNfEAv@g z-uv*qeiLm^<(yO9M-jURi~e627+H^kAAa<5!`)7v*@K-97?F`19!Nh)H(iu?{^iS; z2klJh!kNqGAf+p^;MhhYeW48GoljBrLmBA(=sNwvL@=b_-)SxsHsQkOBv+2to^~}F zZraiYs|^ae1QVZ5lqSKCIxH~h)*@XDOyagqWu~dmu(=rq*KHf@*#^yjZtP;vs?}m$ z`1qj^c_Yf^0Jo7^5-;oXu73*s$Yw2G7sK(AQBcRLEgOx5DeF2bEmo?bc*#7gP=QYg zlJA|&U~>`-)QY0Em;$2Ra%41%F-~n%sC4MLvsgpk)KHsuELJg|}vUMZq)!M-rP9oiVC43<$ljw-C) zbPU<{t!IhhEPm#a(LVL{^aT7tCV!dB!%#b@tbl7yEXDwD1!;!3`Y1|H6Oon2{)`fW zNiPgzm6?}a=QC-fy}IfplBq5lk;wz-h{jkP##0sq>ceB?w_wncj*o`vk@9sryOFcq z!VQ9qD#eLiVJYxI@*ZS5fyAHtX0P?+g1?GwloppYT#x77*6^56$!iLU<5gRE_uBEC zW`yyf`Pf+At^~w+t{DXb?vqqxKljCSUpi6kEb`k@f9RRjj?`Lmxr!%DmZVMIlpcz{ zykHdN!7-~V&09Y-2+-)`i#Bi&5Dgd*5Ypc_2q$x^zgBHkmXy%c(7)KALX$2BBfkjC zH-9~uSyC}sTl)s96U;YhQhC0bK5OB$8sF2cHPvs8t#*<~2+(w~vHRpoAfPPj2 z68jY?-7KWYRLZ{vH922ANOf#GNpsvcxx2l%;0N)9rS=ghKFd7Yu(iFutzTH|1>5X# z2XVDy53#kQ54oX$I0R`V#0Bd}u%c2LamcHFiGob&>uc0CTjBg(=fh4@klGkbgjuqn zO-p=Q2K}e%E2G*ZN(T3WG;k=AhlU@Y&M2Hu$V6yg#?S|Bh4AvcbxvBSo6dBze$Y>Nx&oVlayZkD0Tq*|zY=kwP=9 z?mk%}8M%u_&$$jW?RYEk$4HqH*vr^R8UO9^d}AY*I<^QCfu%R&OtCicXV-;`ERS6x z_?k@ip@qjIO;~j%sWJNV4uB~*hxwPp+(+5gldmDb2H%#}Xw1{Glpd>FnOlTn6Ye6G_notX6lxmWqt0|%2k9$?HB zr$V1A2K zEbiEsI5n@04d>XNoqeW&J7q`kIgs}QfrA8e>KX=fjk8kieR z9+F%Q9UV}mV;)mnHSK%(C0=C>w`s7F(e~Ze>H7kmcut|)ym}JkXEzYg%hb|071(~h zVT8aAP=?QLSe=g=#@Zmla8*?%oQrUVZFpGTDYF$y7gHzfRaaQ^P9uDnrcDDYE^Hhu z-rubV>Z8stjcFI&-Q**baTX4qQR95tTD_n+hCpeSX`*WRHY%+qLSy{x<1Y?~@0K1( z>xIY-`SkgttSAI&H$)l;^vh4?|b!JVP(h9=1wD99udDz8tO(cf`>47`lT!QVjGQGA(0D z?|$eRqzPIdM*j&)Sci7w5OUR1yZ4d4TdS1tO~z**qKnoyS;N9QBdaP_kEkqSMky<4 zE9Q-Rc!sQwpG9IOJ7P^WoO~3O>aYy(8esQNk!{637SGqi`qD>zx})&9hq#}bZiNUn zOnu)3!=5lUX_cyfvfwc|{ zWS1CvaMZf^`Wh9Dznyy|A%tQzXtSj!UxG6(K2E`b?5Tr07VA1^Ci#2Jnnv>xva^7e zsYebD4^Wosn3p`dzoa~ubq$OV@(!VvR{XSuv!P~8F0Dr1Idr@B{z-Z>5gkOF!NZo` ztRTQI#j9W@y!`Ob6ax3VRzA^H`#A%S*)8A|(EqvvR5rG@vvtsScqVPDZzSSoXl&N;6HCMc5qWMB|Xm4=e;cw>eUL-%}eTpE{VjW5T zE@8hY%jn>|rN&SF(Ts&TGS3HIUnb6DSjVfgoS zvM70XU2@=l(L@X9cR865!j_I9>{Nmwac|9`9E^qxgA2Pmg>UHg;Kd<*$T(+ki#}{X zm!O8lQ(gt!c48pcOX?5vr`j|`VdxmAAs03KCIHEGjUP<%c2buj)L1PvkrX#IN1{+t(hrezC0 z2nf^v2C}oYrgO8l8dR5ZoMS_7y-~B{;S~+oTN^oIkUp^>s9BXxHJN=R?2D?5tOqLp za;*RP0T>Y_-;=Pg1zFFE`WyX=E`tgSiGg^rB$^kCE1pv$4^@~xik*Ebuw zru-Rv;d0s9VXP8PAZDfM>7~^}^eFERgAS25I5cA9`yOArIYy=jn7$1Y(XqiO8Fh7a zU0yH@Z{pzQ7JII(yU^JVKTM&9a}v-_Awr*kp%V&jDYczhr3YQ10!N;zp$)zC`bYxg zxdItxfS3JAR0*3P?M!IbCw0`)1tMy7NrkloOvY&>wAB1~rAQSDRfzzq1%k-Dd`j7B z>~cwyAq}0(rV4wBo8uWW3JT_0GyeG-#IfQ|ie*J$0On?o@I7`E8P6LWnk)&dZ#S2r<~} zO=7;)v&l@ecB9!gGU%~A#@j4vsHo(EqH3bmavu--n4XcwtR47K6^2@H)N*3;Bhr&3 zrk~B$9LY-R8&133N|Z;?4-I7qzo9L{G!#ne)87L!&n@e$N9(Y2U_#8jsGJTwN<0^S zv=;B7_GYz+m;zhm1&-#}Gf?ai(i!ACBo>cF&1|mS2(o~p$;t#0!rqPAP4I_0-jP;} ztmO)sROFl63-6~0ZFGm}GEuimY}S^%DGMA(WpE^8;h^o5CPc|e-s`~?hRr0LpvQlr zt!IEJgJkU-e`WMpBRFsC7{{@hRHKQHD$212^%{*KfCtlIN?$Y!o$|5Ti=J@bCzK)R zdV-HRCY$Da-qE1e3sy2o6Wb)Pe+X3%cGdLU5FoDgk<;R3SaJ%b|zLfROrAw7@cM@H~F-ESXb_7q3N| zZwcaBM?a%-8|A2&?ZAjC7x-O{TfS!LUtyobgtyOF+A813FU)P&Qsv2VUab4HP;8zK zgD#a(%qs>8XXT_5p0b>Zm;p1%BsZIx2@;!FKJp1VDzh8Fc;CBPdfkl(h zK3UCB)iQ7ptgn8~K=v|!B>65bc5x*r?hCSU5&2vIMt*QXZFb4-j;13+lQ0I4HhpCq zq}$D9Syc(9UxEHLUF9Q|sMkr>(S{Ua+1!$4S@QgX>6f52m`p8hQW=J8)iYX8#S`bM3>;69qE)NM1tWY# zdXB!PPz&na($kJoY6N{D@M_l1HQIU4tRpa?y8#_W!Qv%D@y9i|DJE(Hf?D(>ghMO+ z6<&lJPAiniB$gQ5R1cvoIO^0p#YP%Zf+%ex0z;#i2=Jv&o%+7T{mKR(sZJ=zy{)#; zfEzWaB_IFwqN${eFO<5OoyYboTGoeB7iqcp(Ou)A=-M=a6Glg)SC{awuPX{}4v%o8 zrU&>2V}i8b@kNwq8}(ux8+wHXh%&*jMZDg|Qwf`w($N@;qLL_lL7L}apzx}aa315q z3aBfdj2K#1+?`!cm!s%n+Yp2Qd;QeTRxN@Nx z2J`K6Hrg6@2z|L-YnL`H>qNhTgjcq2bTS-}R|Go)7L4nS*IFgiBno@Um0bqnAWb(9 zkj4ekDu}4H-!PzAGBWC;-RMD7B{xi@#aE;>61{BeOus2-yB$0U<6%^fyySo>Hj~uY z;Vni#%aE^klhelZSX9t6abhlCPK|AzZXuzhOQMUbr{0q`=`*;9s3zan+Kh53UV8q# zV^;1|C$NakaWi!SDr%MHydBoPSDNENP5GxS*IPX0Xe@4|8Xq)RciVweuq9lstO%sU z<$^Qs*r~hBFBiA6yHG9m7rRI|(meBzu2ZA?LPq0ipjf8ap|l{6>#!zT2C`JmOZW#r z4SOd|_mJO#eH|5{|9=RbyIR<`00tpj;KljB4@Pzlwsyu2PUgmr82ufvoec0GBOa|J zZAHV|2 z{yeY)vFu+5GRU65{l~w3f^VlmgWS7+*0LZJR=^khfEW7xH~%_veeb7-{yt4cKvqIj zL`j)WM)Vs21mr%+&et>U-+@5-uj5{D5AYdqD1d?go2oyaaqqDF=eR#(1NeA<#y1z_ zyOZw~{`&R%ceKBMxjz{l@M3>B`9J>4H|akDu)hO{{2HKdWo3Ks27SZ)coE-YJb#Tb zGk0{d{SNb^HaOpDQ}t_%mAQ?jvC;p)+4(icN#DTA*zq46=>IRxIh^FyEI^MD;6?ej zJ|G~uzK?(a;TPupk98yj?v3;<^T0Q2{im8?e{M7o2LJ~^4Pp5X3-{nRSV<9?|L6Zr zCuRJa`}0Q$#EF~v7_x9mXy&}Bfaq5BS>2He~6uT}z9F7!?Q8@qWc!)O6uJ_FRh zpKSbk(<%N%0j2yyyC2198vs%atbyi_2Q67!^=54{VSgYiY!6_sCj8X&AWF( zz8<;0V89(k|D7*qVj^y=Z+CwczZ1i97Gdb{!e?|4{g0oHCOk7qyT$;FGv$eV)5_S^Hq?V126~iCxRME zW+*uTqfG;T564%l0q?oKu)@C+BxGxC=V0vUXl`TrAA|k&a+YWd>6ieUAp#Zn`{GHG z_?;ACW5aK9{=a(tR*WNWm6kLhh7#yJ?Qm z{dAxXdNR{vVg`;S~* zf2FPeXGeK&5Pr$%kLW@Ef|X?oZKw?YH<*>lGDDigut4eoYPc4gI3=Ptjk! zoL?o1`%xZY>y)txP}#pGocboOy!C&T_fz_*ABEw#P@jtcL!FArk0YLA&mRi=xj^oR zB=pGV>-WL91yCs8w=2-2-+=*Np7j5t1PL1x+h3zqd{{?6172*zU-x={Gf?00e?k8m zc(9ziuL$T04(Lkul?J@$`a;5k{$_0W=Z>j=8utGBADw^d?+0p)4$uLRf5%Kk`0vbr zsfubMK@^yPvn2&gJ&}F~Ed&CQe;>qD{@y6; zr0?_#ckEtIY&Y8Gf3CZJrRMs2GyD=MZ|q>LZ)0rZ^ov#4A5D5rPMd8BnDpmJ=n2y= z;eX8reeEOuOC&_)U|*I6;D3&UuG#(+|2s!%l`1+>7O1#CM?yQ?f5QKRNa((O!1Xt= zs{ohrb0qYF|94`(1}J|V2@&K&58eyZYIt^Ft9 z{}Kr~W8|Up16{5H;B$Q+2_fqJDgJk@qu2+%WE4>U=SV2c^pE)eEfQj#mW;fQ6n~C{ z+ARNE!0#^M`4D{~5)cW!0fNQvXPFype<$HLk0ITAv0`yKWVA|d%c z$2433{c|Mb<^DVLZzG|xk|E|rpmsN6{1^!>0Dj9a#?rsK=|78vytt|HQvtFH5C(l8 z3BiQ^8U5EIY+;BS_zB<~jv)N#R_&$#miyl$p^qWP`4fPZe~u}rfm!R{7~~)5e~E<1 z8YOdF0QAo>g=E2>qW>ilqDJc6o&(T7#}shIe~SK>Na)AZ=HI*o#HKEuqg5G zH5BmEe+J(7SwG$!@eMe7`(J>6-zxE=`}gB6|8Gp~FaMqSFOL6@JEgxttwF(lcjdoy z{O@h~tIo5`VW5@tX~PUJnOGnZFKXkh?nuXs~Y!+h6y{eOui9aZ4S^*K zEh9BC9bM=j`d`dw0cXf&SY3b+hWvLB`2u}!hE&tlfoh#H5=TOpk&ikNa53>-M!1+r z*Q4%oLy3MV(sR5htgB5FE~ZXPGo5off#c{y0q^Qmn3NmLJx!zt6uHb=AmUS<8fC}^ zH$3%F{W4WVJ2;QNE&`qBL*L>H^(C+{3fEW&6Avkht^g-v5I)u3)qtd?)I z7KbR(<0v_?NsIf!79s~=`f4xz%ZajQWle_#gEF4$ERtx}3?@hW3rH6v?t|^9pAN0I zLN37(hQQJc(xLif7R!{DJ8~h?9-qsjn;Mhes4HMt$Uvh^6&|IJu2S*2= zBRkLDI^-EurtPD%FO*&<1sdbPrXoI$H5I*Qdk@}(`$W4HdQn2sN_vTAEj!xFZr)lX zu+8QDi>@@qnN$U-g>K7Q@|-O1(N_5iH`5 zzLzf}a^2?b`2tSQ)yIO3Mnum!C*y(v`Km#qh0XjCi6S{dS83%$O@U9=drC%)H!6>S zX&#N^cUET7&)zLME@Kb75oc)qr?k0Ov|yPW9} zOHpv5dTeBf=grmLP#3UHjzD3D_azzdl+tvm_~952!Y2mT^|CNlSzDzB8*s{SoWVmj z!b+m&F@(i{M%b{O8)>k(7w;o6^`SM~Q)~3ND?QNvX5rpi5L?#qAX;eeNz;xu>MGP`Lhk7y6hP}+p~ji{ zO}*uoJ@tZ5%tY{!J-GlWkqro?1qUi~irHd6AtELMlTh|&TT95E9*^pT!(&~N{*0GX za$cn#-jF*PC(nOyR6b#AG8x44vQr^zfyZr#RK@Q7E-)45dSimGR#^jso zNiUW&N%y?Xk)*6j`?u34y1TFlx?4PxD_5^Ku?GHOLw!`ei@;J$iBC|y%-UukaRd_+ zf6H-9kk7__)9w~Wc9&uhWSRS)N5E+IYU?DqSb)gY@fSznOQHGa5s1S%_vwRLGDc)$0 z5pF3y2xLZib$#5e?e>Jq#Xa7aA>uDeYXLNh;#|W6D7~<-<4X9&;d znaL%#F=&Du-C{4ibR-FjwO6dpUzyXo+7ntYA-bhyXTqc7kr2`v`nJzjbJFg?1nwP} zXCL9(qlkvtPTg#wtC96JEK}-9A1*hzmR-53T&s!1_!b?&zD{(`k#T;lV`dxZ$2PCK zwvwvX-4sePxzu@{yOZfUkJudrS$BEWFdGJ5LQ4g&)T?v3nF`&AEX=H?E=}pvm3OiC zOSPd-?>)N)H1awIwh%!oZh;Knctf|ElvdEa8fk&gIM89YdKiZng5OwK3Kd*B<&N|S z?oTnv!CgTZ{vR#aX$E%xRgUn#D5kkxRP+xqbap}PAy{ENUX;aIjVaJ~;{vjvU5Kq&Q)X-r4EyF9Xz zwp>^uF@N1AyLZWNWB`luM7#W^dGV9W>JP@`9xT4oVa0#nG{ygwKN&;J28TzBImv&E zg%+SirYGE3e=jL=dG9216Pf>v<%+|Kdt))pCP=qYS(e%lXI!OEm|YT`AuaVF*oHh( zH=M2I`VR2XCXo2(H~{GOYoAud0df3V`bkRZMiBf`$%m4A!{#C%s}S*4^*NLLirhSz zy@#y8?5ENncToo@e^OQg`$aP~oQs4&Jpi+aG{zTZGr63(w)Mv}@#-@`I)%nnFS)h7 zTwpN{pBkh4P!$!G>=~OV?kmufYqwM8X@-;I__`AW!RQkB(kXQ4P!KCtr`AbyRzq~4 zpDv6ejO5S4OS#B!N)p}f<@LI)m{4^@(X}d7JIS%Ko!-t6v_2rcXEQub{snkQlTR|2 zuXu3KfnVkd-GE(VDpT5B7P%&83^>#wRm=3td&V_Yf5)iHxG zJukZZb>#?=c7YGMq)6wRTm)<}wAF#9=1!5#NQ*I zagK1Rgrt@sDjH5l`thg`twGVXAGwIuPBz)D#?Zxg1MAHTjm@q=cGw>thqneZr#oV$ z9feHAAJ!ucxRF}d8`zE5%bo3og*q)HWJ61+WyboB+isfOyW#kjU~Aj*#B59c_qgZvir$>-;B<#Jcfu*3sN-V~6>@gmZa8>wV5Qq~Y1{0*1R) zLvmcNlJi6yU22S>K547ib-Te=GDnAb(=RS$aER8-J$dj^XhzBi_UT;=b5*;W-h24y zmDp;fbtjs)O!9s~3MhsEEj~5=S;rAdqS6EAv)Pg<3##RN>ew0y4r%<)a!5LEU7hiJ z@>QjRxhC&!cC~jLcqTY*Xwa=7*F8s#(%wjgAehEqe99hOn5R6Np?{EW+W1XpqnQFI zExDUsrv~e^5MZF)k#(3-%6a`2jT65;LeXk{tRlQJIYhVs_;703H;b35_nytm_$+Ma-n1pDzNGl%FU9J|3U z7Ii?wyl`vUyD~fM#pw))W<6+`yDEKz5XDkVkGpnqm_+EO(0DaIfFsol7Fj-s>(6g2 zMr@ESHcLhqpIIvM4&hB~9VyGm_#g>i!{1KL01>5$l2b%hJEc=6^QUAfm8G*iPtP&< zGY-cUOUxz$pB2Qm-lf7Y1z>UY_F_?gv89ZigG95f;!^0U&Th`j2%7bk+}`9`;z(?9 ztF_08Zj9ByiIM@&+k#xq*M<6fru&=RV57)jt$Z=n<~B3GCCZ^c=zqbYV$r`d{0_y- zrJ;EUJ-c5ZeI9Y;DbYJ*DPZ)a|JrPXwvc&U;tBTZLjQy2)!M5D)2(&2JXl!13eZ*I z6mRktv@mU!^aIgO`~a%Jk*hDBd@223RoE4eb4BCb9no&=?e+8x5n#yq9^*^qh;dilwJauo z4SBEt7Sy(%-&);{+wL-X+jx8A1a7mgZ*Jd-<{gBeTky7&{XDiOZYIBe7Ph|*bz9ng z9@`!>0INyZv zSDf9Y@z;oQ0xNdM`K?giN!RXDatD2iEHHOT*KWe{N6;V1`3~p{GNsuCbT_KL1N!qm z`hHhzZ86e*w-dh-yRS+7*?F7VeI6`;t*zrfJCg(andto*Z=34v;Q9V5ynhnEuh_d& zzpv;yfi3?T`wJ1=$>rx&|FN#^Oo3qfDVMvX extends InstrumentingCache saveTask; protected final CacheService.CacheType cacheType; - private CacheSerializer cacheLoader; + private final CacheSerializer cacheLoader; private static final String CURRENT_VERSION = "b"; private static volatile IStreamFactory streamFactory = new IStreamFactory() @@ -177,16 +177,24 @@ public class AutoSavingCache extends InstrumentingCache keys; + private final Iterator keyIterator; private final CompactionInfo info; private long keysWritten; + private final long keysEstimate; protected Writer(int keysToSave) { - if (keysToSave >= getKeySet().size()) - keys = getKeySet(); + int size = size(); + if (keysToSave >= size || keysToSave == 0) + { + keyIterator = keyIterator(); + keysEstimate = size; + } else - keys = hotKeySet(keysToSave); + { + keyIterator = hotKeyIterator(keysToSave); + keysEstimate = keysToSave; + } OperationType type; if (cacheType == CacheService.CacheType.KEY_CACHE) @@ -201,7 +209,7 @@ public class AutoSavingCache extends InstrumentingCache extends InstrumentingCache extends InstrumentingCache extends InstrumentingCache extends InstrumentingCache= keysEstimate) + break; } } finally { + if (keyIterator instanceof Closeable) + try + { + ((Closeable)keyIterator).close(); + } + catch (IOException ignored) + { + // not thrown (by OHC) + } + for (OutputStream writer : streams.values()) FileUtils.closeQuietly(writer); } @@ -290,7 +312,7 @@ public class AutoSavingCache extends InstrumentingCache +{ + ICache create(); +} diff --git a/src/java/org/apache/cassandra/cache/ConcurrentLinkedHashCache.java b/src/java/org/apache/cassandra/cache/ConcurrentLinkedHashCache.java index 81824477b7..bb14055fca 100644 --- a/src/java/org/apache/cassandra/cache/ConcurrentLinkedHashCache.java +++ b/src/java/org/apache/cassandra/cache/ConcurrentLinkedHashCache.java @@ -17,7 +17,7 @@ */ package org.apache.cassandra.cache; -import java.util.Set; +import java.util.Iterator; import com.googlecode.concurrentlinkedhashmap.ConcurrentLinkedHashMap; import com.googlecode.concurrentlinkedhashmap.EntryWeigher; @@ -45,7 +45,7 @@ public class ConcurrentLinkedHashCache(map); + return new ConcurrentLinkedHashCache<>(map); } public static ConcurrentLinkedHashCache create(long weightedCapacity) @@ -116,14 +116,14 @@ public class ConcurrentLinkedHashCache keySet() + public Iterator keyIterator() { - return map.keySet(); + return map.keySet().iterator(); } - public Set hotKeySet(int n) + public Iterator hotKeyIterator(int n) { - return map.descendingKeySetWithLimit(n); + return map.descendingKeySetWithLimit(n).iterator(); } public boolean containsKey(K key) diff --git a/src/java/org/apache/cassandra/cache/ICache.java b/src/java/org/apache/cassandra/cache/ICache.java index 22dbb16a1e..37b55cd0e7 100644 --- a/src/java/org/apache/cassandra/cache/ICache.java +++ b/src/java/org/apache/cassandra/cache/ICache.java @@ -17,7 +17,7 @@ */ package org.apache.cassandra.cache; -import java.util.Set; +import java.util.Iterator; /** * This is similar to the Map interface, but requires maintaining a given capacity @@ -46,9 +46,9 @@ public interface ICache public void clear(); - public Set keySet(); + public Iterator keyIterator(); - public Set hotKeySet(int n); + public Iterator hotKeyIterator(int n); public boolean containsKey(K key); } diff --git a/src/java/org/apache/cassandra/cache/InstrumentingCache.java b/src/java/org/apache/cassandra/cache/InstrumentingCache.java index 311b373379..c8728fd243 100644 --- a/src/java/org/apache/cassandra/cache/InstrumentingCache.java +++ b/src/java/org/apache/cassandra/cache/InstrumentingCache.java @@ -17,7 +17,7 @@ */ package org.apache.cassandra.cache; -import java.util.Set; +import java.util.Iterator; import org.apache.cassandra.metrics.CacheMetrics; @@ -26,7 +26,6 @@ import org.apache.cassandra.metrics.CacheMetrics; */ public class InstrumentingCache { - private volatile boolean capacitySetManually; private final ICache map; private final String type; @@ -78,20 +77,9 @@ public class InstrumentingCache return map.capacity(); } - public boolean isCapacitySetManually() - { - return capacitySetManually; - } - - public void updateCapacity(long capacity) - { - map.setCapacity(capacity); - } - public void setCapacity(long capacity) { - updateCapacity(capacity); - capacitySetManually = true; + map.setCapacity(capacity); } public int size() @@ -110,14 +98,14 @@ public class InstrumentingCache metrics = new CacheMetrics(type, map); } - public Set getKeySet() + public Iterator keyIterator() { - return map.keySet(); + return map.keyIterator(); } - public Set hotKeySet(int n) + public Iterator hotKeyIterator(int n) { - return map.hotKeySet(n); + return map.hotKeyIterator(n); } public boolean containsKey(K key) diff --git a/src/java/org/apache/cassandra/cache/NopCacheProvider.java b/src/java/org/apache/cassandra/cache/NopCacheProvider.java new file mode 100644 index 0000000000..20f837a506 --- /dev/null +++ b/src/java/org/apache/cassandra/cache/NopCacheProvider.java @@ -0,0 +1,93 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.cassandra.cache; + +import java.util.Collections; +import java.util.Iterator; + +public class NopCacheProvider implements CacheProvider +{ + public ICache create() + { + return new NopCache(); + } + + private static class NopCache implements ICache + { + public long capacity() + { + return 0; + } + + public void setCapacity(long capacity) + { + } + + public void put(RowCacheKey key, IRowCacheEntry value) + { + } + + public boolean putIfAbsent(RowCacheKey key, IRowCacheEntry value) + { + return false; + } + + public boolean replace(RowCacheKey key, IRowCacheEntry old, IRowCacheEntry value) + { + return false; + } + + public IRowCacheEntry get(RowCacheKey key) + { + return null; + } + + public void remove(RowCacheKey key) + { + } + + public int size() + { + return 0; + } + + public long weightedSize() + { + return 0; + } + + public void clear() + { + } + + public Iterator hotKeyIterator(int n) + { + return Collections.emptyIterator(); + } + + public Iterator keyIterator() + { + return Collections.emptyIterator(); + } + + public boolean containsKey(RowCacheKey key) + { + return false; + } + } +} diff --git a/src/java/org/apache/cassandra/cache/OHCProvider.java b/src/java/org/apache/cassandra/cache/OHCProvider.java new file mode 100644 index 0000000000..365ca41bb5 --- /dev/null +++ b/src/java/org/apache/cassandra/cache/OHCProvider.java @@ -0,0 +1,274 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.cassandra.cache; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; +import java.nio.ByteBuffer; +import java.util.Iterator; +import java.util.UUID; + +import org.apache.cassandra.config.DatabaseDescriptor; +import org.apache.cassandra.db.ColumnFamily; +import org.apache.cassandra.db.TypeSizes; +import org.apache.cassandra.io.util.DataOutputPlus; +import org.apache.cassandra.io.util.Memory; +import org.apache.cassandra.net.MessagingService; +import org.caffinitas.ohc.OHCache; +import org.caffinitas.ohc.OHCacheBuilder; + +public class OHCProvider implements CacheProvider +{ + public ICache create() + { + OHCacheBuilder builder = OHCacheBuilder.newBuilder(); + builder.capacity(DatabaseDescriptor.getRowCacheSizeInMB() * 1024 * 1024) + .keySerializer(new KeySerializer()) + .valueSerializer(new ValueSerializer()) + .throwOOME(true); + + return new OHCacheAdapter(builder.build()); + } + + private static class OHCacheAdapter implements ICache + { + private final OHCache ohCache; + + public OHCacheAdapter(OHCache ohCache) + { + this.ohCache = ohCache; + } + + public long capacity() + { + return ohCache.capacity(); + } + + public void setCapacity(long capacity) + { + ohCache.setCapacity(capacity); + } + + public void put(RowCacheKey key, IRowCacheEntry value) + { + ohCache.put(key, value); + } + + public boolean putIfAbsent(RowCacheKey key, IRowCacheEntry value) + { + return ohCache.putIfAbsent(key, value); + } + + public boolean replace(RowCacheKey key, IRowCacheEntry old, IRowCacheEntry value) + { + return ohCache.addOrReplace(key, old, value); + } + + public IRowCacheEntry get(RowCacheKey key) + { + return ohCache.get(key); + } + + public void remove(RowCacheKey key) + { + ohCache.remove(key); + } + + public int size() + { + return (int) ohCache.size(); + } + + public long weightedSize() + { + return ohCache.size(); + } + + public void clear() + { + ohCache.clear(); + } + + public Iterator hotKeyIterator(int n) + { + return ohCache.hotKeyIterator(n); + } + + public Iterator keyIterator() + { + return ohCache.keyIterator(); + } + + public boolean containsKey(RowCacheKey key) + { + return ohCache.containsKey(key); + } + } + + private static class KeySerializer implements org.caffinitas.ohc.CacheSerializer + { + public void serialize(RowCacheKey rowCacheKey, DataOutput dataOutput) throws IOException + { + dataOutput.writeLong(rowCacheKey.cfId.getMostSignificantBits()); + dataOutput.writeLong(rowCacheKey.cfId.getLeastSignificantBits()); + dataOutput.writeInt(rowCacheKey.key.length); + dataOutput.write(rowCacheKey.key); + } + + public RowCacheKey deserialize(DataInput dataInput) throws IOException + { + long msb = dataInput.readLong(); + long lsb = dataInput.readLong(); + byte[] key = new byte[dataInput.readInt()]; + dataInput.readFully(key); + return new RowCacheKey(new UUID(msb, lsb), key); + } + + public int serializedSize(RowCacheKey rowCacheKey) + { + return 20 + rowCacheKey.key.length; + } + } + + private static class ValueSerializer implements org.caffinitas.ohc.CacheSerializer + { + public void serialize(IRowCacheEntry entry, DataOutput out) throws IOException + { + assert entry != null; // unlike CFS we don't support nulls, since there is no need for that in the cache + boolean isSentinel = entry instanceof RowCacheSentinel; + out.writeBoolean(isSentinel); + if (isSentinel) + out.writeLong(((RowCacheSentinel) entry).sentinelId); + else + ColumnFamily.serializer.serialize((ColumnFamily) entry, new DataOutputPlusAdapter(out), MessagingService.current_version); + } + + public IRowCacheEntry deserialize(DataInput in) throws IOException + { + boolean isSentinel = in.readBoolean(); + if (isSentinel) + return new RowCacheSentinel(in.readLong()); + return ColumnFamily.serializer.deserialize(in, MessagingService.current_version); + } + + public int serializedSize(IRowCacheEntry entry) + { + TypeSizes typeSizes = TypeSizes.NATIVE; + int size = typeSizes.sizeof(true); + if (entry instanceof RowCacheSentinel) + size += typeSizes.sizeof(((RowCacheSentinel) entry).sentinelId); + else + size += ColumnFamily.serializer.serializedSize((ColumnFamily) entry, typeSizes, MessagingService.current_version); + return size; + } + } + + static class DataOutputPlusAdapter implements DataOutputPlus + { + private final DataOutput out; + + public void write(byte[] b) throws IOException + { + out.write(b); + } + + public void write(byte[] b, int off, int len) throws IOException + { + out.write(b, off, len); + } + + public void write(int b) throws IOException + { + out.write(b); + } + + public void writeBoolean(boolean v) throws IOException + { + out.writeBoolean(v); + } + + public void writeByte(int v) throws IOException + { + out.writeByte(v); + } + + public void writeBytes(String s) throws IOException + { + out.writeBytes(s); + } + + public void writeChar(int v) throws IOException + { + out.writeChar(v); + } + + public void writeChars(String s) throws IOException + { + out.writeChars(s); + } + + public void writeDouble(double v) throws IOException + { + out.writeDouble(v); + } + + public void writeFloat(float v) throws IOException + { + out.writeFloat(v); + } + + public void writeInt(int v) throws IOException + { + out.writeInt(v); + } + + public void writeLong(long v) throws IOException + { + out.writeLong(v); + } + + public void writeShort(int v) throws IOException + { + out.writeShort(v); + } + + public void writeUTF(String s) throws IOException + { + out.writeUTF(s); + } + + public DataOutputPlusAdapter(DataOutput out) + { + this.out = out; + } + + public void write(ByteBuffer buffer) throws IOException + { + if (buffer.hasArray()) + out.write(buffer.array(), buffer.arrayOffset(), buffer.remaining()); + else + throw new UnsupportedOperationException("IMPLEMENT ME"); + } + + public void write(Memory memory) throws IOException + { + throw new UnsupportedOperationException("IMPLEMENT ME"); + } + } +} diff --git a/src/java/org/apache/cassandra/cache/RowCacheKey.java b/src/java/org/apache/cassandra/cache/RowCacheKey.java index af2d4d4ee1..ccb85d85e0 100644 --- a/src/java/org/apache/cassandra/cache/RowCacheKey.java +++ b/src/java/org/apache/cassandra/cache/RowCacheKey.java @@ -33,6 +33,12 @@ public class RowCacheKey implements CacheKey, Comparable private static final long EMPTY_SIZE = ObjectSizes.measure(new RowCacheKey(null, ByteBufferUtil.EMPTY_BYTE_BUFFER)); + public RowCacheKey(UUID cfId, byte[] key) + { + this.cfId = cfId; + this.key = key; + } + public RowCacheKey(UUID cfId, DecoratedKey key) { this(cfId, key.getKey()); diff --git a/src/java/org/apache/cassandra/cache/SerializingCache.java b/src/java/org/apache/cassandra/cache/SerializingCache.java index ca65fccd3b..911b5007d2 100644 --- a/src/java/org/apache/cassandra/cache/SerializingCache.java +++ b/src/java/org/apache/cassandra/cache/SerializingCache.java @@ -18,7 +18,7 @@ package org.apache.cassandra.cache; import java.io.IOException; -import java.util.Set; +import java.util.Iterator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -264,14 +264,14 @@ public class SerializingCache implements ICache mem.unreference(); } - public Set keySet() + public Iterator keyIterator() { - return map.keySet(); + return map.keySet().iterator(); } - public Set hotKeySet(int n) + public Iterator hotKeyIterator(int n) { - return map.descendingKeySetWithLimit(n); + return map.descendingKeySetWithLimit(n).iterator(); } public boolean containsKey(K key) diff --git a/src/java/org/apache/cassandra/cache/SerializingCacheProvider.java b/src/java/org/apache/cassandra/cache/SerializingCacheProvider.java index a058872610..f540322917 100644 --- a/src/java/org/apache/cassandra/cache/SerializingCacheProvider.java +++ b/src/java/org/apache/cassandra/cache/SerializingCacheProvider.java @@ -20,17 +20,18 @@ package org.apache.cassandra.cache; import java.io.DataInput; import java.io.IOException; +import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.db.ColumnFamily; import org.apache.cassandra.db.TypeSizes; import org.apache.cassandra.io.ISerializer; import org.apache.cassandra.io.util.DataOutputPlus; import org.apache.cassandra.net.MessagingService; -public class SerializingCacheProvider +public class SerializingCacheProvider implements CacheProvider { - public ICache create(long capacity) + public ICache create() { - return SerializingCache.create(capacity, new RowCacheSerializer()); + return SerializingCache.create(DatabaseDescriptor.getRowCacheSizeInMB() * 1024 * 1024, new RowCacheSerializer()); } // Package protected for tests diff --git a/src/java/org/apache/cassandra/config/Config.java b/src/java/org/apache/cassandra/config/Config.java index 33d2bb2644..f42c980850 100644 --- a/src/java/org/apache/cassandra/config/Config.java +++ b/src/java/org/apache/cassandra/config/Config.java @@ -192,6 +192,7 @@ public class Config public volatile int key_cache_save_period = 14400; public volatile int key_cache_keys_to_save = Integer.MAX_VALUE; + public String row_cache_class_name = "org.apache.cassandra.cache.OHCProvider"; public long row_cache_size_in_mb = 0; public volatile int row_cache_save_period = 0; public volatile int row_cache_keys_to_save = Integer.MAX_VALUE; diff --git a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java index 6d626da361..8cc2da46c9 100644 --- a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java +++ b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java @@ -1423,6 +1423,11 @@ public class DatabaseDescriptor conf.key_cache_keys_to_save = keyCacheKeysToSave; } + public static String getRowCacheClassName() + { + return conf.row_cache_class_name; + } + public static long getRowCacheSizeInMB() { return conf.row_cache_size_in_mb; @@ -1448,6 +1453,11 @@ public class DatabaseDescriptor return counterCacheSizeInMB; } + public static void setRowCacheKeysToSave(int rowCacheKeysToSave) + { + conf.row_cache_keys_to_save = rowCacheKeysToSave; + } + public static int getCounterCacheSavePeriod() { return conf.counter_cache_save_period; @@ -1473,11 +1483,6 @@ public class DatabaseDescriptor return memoryAllocator; } - public static void setRowCacheKeysToSave(int rowCacheKeysToSave) - { - conf.row_cache_keys_to_save = rowCacheKeysToSave; - } - public static int getStreamingSocketTimeout() { return conf.streaming_socket_timeout_in_ms; diff --git a/src/java/org/apache/cassandra/config/YamlConfigurationLoader.java b/src/java/org/apache/cassandra/config/YamlConfigurationLoader.java index 50991f2392..82c8151ffa 100644 --- a/src/java/org/apache/cassandra/config/YamlConfigurationLoader.java +++ b/src/java/org/apache/cassandra/config/YamlConfigurationLoader.java @@ -102,7 +102,7 @@ public class YamlConfigurationLoader implements ConfigurationLoader } logConfig(configBytes); - + org.yaml.snakeyaml.constructor.Constructor constructor = new org.yaml.snakeyaml.constructor.Constructor(Config.class); TypeDescription seedDesc = new TypeDescription(SeedProviderDef.class); seedDesc.putMapPropertyType("parameters", String.class, String.class); diff --git a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java index 002238c93b..c2ee0aca4d 100644 --- a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java +++ b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java @@ -1961,19 +1961,23 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean { Collection> ranges = StorageService.instance.getLocalRanges(keyspace.getName()); - for (RowCacheKey key : CacheService.instance.rowCache.getKeySet()) + for (Iterator keyIter = CacheService.instance.rowCache.keyIterator(); + keyIter.hasNext(); ) { + RowCacheKey key = keyIter.next(); DecoratedKey dk = partitioner.decorateKey(ByteBuffer.wrap(key.key)); - if (key.cfId == metadata.cfId && !Range.isInRanges(dk.getToken(), ranges)) + if (key.cfId.equals(metadata.cfId) && !Range.isInRanges(dk.getToken(), ranges)) invalidateCachedRow(dk); } if (metadata.isCounter()) { - for (CounterCacheKey key : CacheService.instance.counterCache.getKeySet()) + for (Iterator keyIter = CacheService.instance.counterCache.keyIterator(); + keyIter.hasNext(); ) { + CounterCacheKey key = keyIter.next(); DecoratedKey dk = partitioner.decorateKey(ByteBuffer.wrap(key.partitionKey)); - if (key.cfId == metadata.cfId && !Range.isInRanges(dk.getToken(), ranges)) + if (key.cfId.equals(metadata.cfId) && !Range.isInRanges(dk.getToken(), ranges)) CacheService.instance.counterCache.remove(key); } } diff --git a/src/java/org/apache/cassandra/service/CacheService.java b/src/java/org/apache/cassandra/service/CacheService.java index 2ffd954d42..fb8153c2f5 100644 --- a/src/java/org/apache/cassandra/service/CacheService.java +++ b/src/java/org/apache/cassandra/service/CacheService.java @@ -33,6 +33,7 @@ import javax.management.MBeanServer; import javax.management.ObjectName; import com.google.common.util.concurrent.Futures; + import org.apache.cassandra.io.sstable.format.SSTableReader; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -132,10 +133,22 @@ public class CacheService implements CacheServiceMBean { logger.info("Initializing row cache with capacity of {} MBs", DatabaseDescriptor.getRowCacheSizeInMB()); - long rowCacheInMemoryCapacity = DatabaseDescriptor.getRowCacheSizeInMB() * 1024 * 1024; + CacheProvider cacheProvider; + String cacheProviderClassName = DatabaseDescriptor.getRowCacheSizeInMB() > 0 + ? DatabaseDescriptor.getRowCacheClassName() : "org.apache.cassandra.cache.NopCacheProvider"; + try + { + Class> cacheProviderClass = + (Class>) Class.forName(cacheProviderClassName); + cacheProvider = cacheProviderClass.newInstance(); + } + catch (Exception e) + { + throw new RuntimeException("Cannot find configured row cache provider class " + DatabaseDescriptor.getRowCacheClassName()); + } // cache object - ICache rc = new SerializingCacheProvider().create(rowCacheInMemoryCapacity); + ICache rc = cacheProvider.create(); AutoSavingCache rowCache = new AutoSavingCache<>(rc, CacheType.ROW_CACHE, new RowCacheSerializer()); int rowCacheKeysToSave = DatabaseDescriptor.getRowCacheKeysToSave(); @@ -285,7 +298,7 @@ public class CacheService implements CacheServiceMBean public void invalidateKeyCacheForCf(UUID cfId) { - Iterator keyCacheIterator = keyCache.getKeySet().iterator(); + Iterator keyCacheIterator = keyCache.keyIterator(); while (keyCacheIterator.hasNext()) { KeyCacheKey key = keyCacheIterator.next(); @@ -301,7 +314,7 @@ public class CacheService implements CacheServiceMBean public void invalidateRowCacheForCf(UUID cfId) { - Iterator rowCacheIterator = rowCache.getKeySet().iterator(); + Iterator rowCacheIterator = rowCache.keyIterator(); while (rowCacheIterator.hasNext()) { RowCacheKey rowCacheKey = rowCacheIterator.next(); @@ -312,7 +325,7 @@ public class CacheService implements CacheServiceMBean public void invalidateCounterCacheForCf(UUID cfId) { - Iterator counterCacheIterator = counterCache.getKeySet().iterator(); + Iterator counterCacheIterator = counterCache.keyIterator(); while (counterCacheIterator.hasNext()) { CounterCacheKey counterCacheKey = counterCacheIterator.next(); diff --git a/test/conf/cassandra.yaml b/test/conf/cassandra.yaml index ec988e299f..307ca8cf10 100644 --- a/test/conf/cassandra.yaml +++ b/test/conf/cassandra.yaml @@ -36,3 +36,5 @@ server_encryption_options: incremental_backups: true concurrent_compactors: 4 compaction_throughput_mb_per_sec: 0 +row_cache_class_name: org.apache.cassandra.cache.OHCProvider +row_cache_size_in_mb: 16 diff --git a/test/unit/org/apache/cassandra/db/KeyCacheTest.java b/test/unit/org/apache/cassandra/db/KeyCacheTest.java index e31b4398cd..c370e4f8d1 100644 --- a/test/unit/org/apache/cassandra/db/KeyCacheTest.java +++ b/test/unit/org/apache/cassandra/db/KeyCacheTest.java @@ -18,6 +18,7 @@ package org.apache.cassandra.db; import java.util.HashMap; +import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.concurrent.ExecutionException; @@ -88,8 +89,10 @@ public class KeyCacheTest // really? our caches don't implement the map interface? (hence no .addAll) Map savedMap = new HashMap(); - for (KeyCacheKey k : CacheService.instance.keyCache.getKeySet()) + for (Iterator iter = CacheService.instance.keyCache.keyIterator(); + iter.hasNext();) { + KeyCacheKey k = iter.next(); if (k.desc.ksname.equals(KEYSPACE1) && k.desc.cfname.equals(COLUMN_FAMILY2)) savedMap.put(k, CacheService.instance.keyCache.get(k)); } @@ -207,8 +210,10 @@ public class KeyCacheTest private void assertKeyCacheSize(int expected, String keyspace, String columnFamily) { int size = 0; - for (KeyCacheKey k : CacheService.instance.keyCache.getKeySet()) + for (Iterator iter = CacheService.instance.keyCache.keyIterator(); + iter.hasNext();) { + KeyCacheKey k = iter.next(); if (k.desc.ksname.equals(keyspace) && k.desc.cfname.equals(columnFamily)) size++; } diff --git a/test/unit/org/apache/cassandra/db/RowCacheTest.java b/test/unit/org/apache/cassandra/db/RowCacheTest.java index 7d5799a7cd..3d5617fabb 100644 --- a/test/unit/org/apache/cassandra/db/RowCacheTest.java +++ b/test/unit/org/apache/cassandra/db/RowCacheTest.java @@ -156,9 +156,9 @@ public class RowCacheTest rowCacheLoad(100, Integer.MAX_VALUE, 1000); ColumnFamilyStore store = Keyspace.open(KEYSPACE_CACHED).getColumnFamilyStore(CF_CACHED); - assertEquals(CacheService.instance.rowCache.getKeySet().size(), 100); + assertEquals(CacheService.instance.rowCache.size(), 100); store.cleanupCache(); - assertEquals(CacheService.instance.rowCache.getKeySet().size(), 100); + assertEquals(CacheService.instance.rowCache.size(), 100); TokenMetadata tmd = StorageService.instance.getTokenMetadata(); byte[] tk1, tk2; tk1 = "key1000".getBytes(); @@ -166,7 +166,7 @@ public class RowCacheTest tmd.updateNormalToken(new BytesToken(tk1), InetAddress.getByName("127.0.0.1")); tmd.updateNormalToken(new BytesToken(tk2), InetAddress.getByName("127.0.0.2")); store.cleanupCache(); - assertEquals(CacheService.instance.rowCache.getKeySet().size(), 50); + assertEquals(50, CacheService.instance.rowCache.size()); CacheService.instance.setRowCacheCapacityInMB(0); } @@ -259,19 +259,19 @@ public class RowCacheTest // empty the cache CacheService.instance.invalidateRowCache(); - assert CacheService.instance.rowCache.size() == 0; + assertEquals(0, CacheService.instance.rowCache.size()); // insert data and fill the cache SchemaLoader.insertData(KEYSPACE_CACHED, CF_CACHED, offset, totalKeys); SchemaLoader.readData(KEYSPACE_CACHED, CF_CACHED, offset, totalKeys); - assert CacheService.instance.rowCache.size() == totalKeys; + assertEquals(totalKeys, CacheService.instance.rowCache.size()); // force the cache to disk CacheService.instance.rowCache.submitWrite(keysToSave).get(); // empty the cache again to make sure values came from disk CacheService.instance.invalidateRowCache(); - assert CacheService.instance.rowCache.size() == 0; - assert CacheService.instance.rowCache.loadSaved(store) == (keysToSave == Integer.MAX_VALUE ? totalKeys : keysToSave); + assertEquals(0, CacheService.instance.rowCache.size()); + assertEquals(keysToSave == Integer.MAX_VALUE ? totalKeys : keysToSave, CacheService.instance.rowCache.loadSaved(store)); } }