From e4568ef9fd7826d77f88747b9379b9bdf85ca46d Mon Sep 17 00:00:00 2001 From: Alexander Date: Fri, 14 Aug 2015 16:44:11 -0400 Subject: [PATCH] Add rest of Nirai code changes, And get the game working without compression. --- build/data/NiraiStart.py | 38 ++--- build/make.py | 200 ++++++++----------------- build/rc4.pyd | Bin 147456 -> 0 bytes build/src/stride.cxx | 77 ++++++---- deployment/public_client.prc | 3 +- otp/distributed/OTPClientRepository.py | 3 +- toontown/dna/DNAParser.py | 12 +- toontown/toonbase/ToontownStart.py | 8 +- 8 files changed, 138 insertions(+), 203 deletions(-) delete mode 100644 build/rc4.pyd diff --git a/build/data/NiraiStart.py b/build/data/NiraiStart.py index 4140161f..52372c5f 100644 --- a/build/data/NiraiStart.py +++ b/build/data/NiraiStart.py @@ -1,14 +1,13 @@ from panda3d.core import * -import __builtin__, os -import rc4 +import __builtin__, os, sys +import aes import niraidata # Config prc = niraidata.CONFIG -key, prc = prc[:32], prc[32:] -rc4.rc4_setkey(key) -prc = rc4.rc4(prc) +iv, key, prc = prc[:16], prc[16:32], prc[32:] +prc = aes.decrypt(prc, key, iv) for line in prc.split('\n'): line = line.strip() @@ -16,40 +15,25 @@ for line in prc.split('\n'): loadPrcFileData('nirai config', line) del prc +del iv +del key # DC __builtin__.dcStream = StringStream() dc = niraidata.DC -key, dc = dc[:32], dc[32:] -rc4.rc4_setkey(key) -dc = rc4.rc4(dc) +iv, key, dc = dc[:16], dc[16:32], dc[32:] +dc = aes.decrypt(dc, key, iv) dcStream.setData(dc) del dc -rc4.rc4_setkey('\0\0\0\0') +del iv +del key # Resources -# TO DO: Sign and verify the phases to prevent editing. - -vfs = VirtualFileSystem.getGlobalPtr() -mfs = (3, 3.5, 4, 5, 5.5, 6, 7, 8, 9, 10, 11, 12, 13) +# TO DO: Sign and verify the phases to prevent edition abort = False -for mf in mfs: - filename = 'resources/default/phase_%s.mf' % mf - if not os.path.isfile(filename): - print 'Phase %s not found' % filename - abort = True - break - - mf = Multifile() - mf.openRead(filename) - - if not vfs.mount(mf, '../resources', 0): - print 'Unable to mount %s' % filename - abort = True - break # Packs pack = os.environ.get('TT_STRIDE_CONTENT_PACK') diff --git a/build/make.py b/build/make.py index 65b0aa42..e5008224 100644 --- a/build/make.py +++ b/build/make.py @@ -1,126 +1,44 @@ from panda3d.core import * -import argparse, marshal, struct -import glob, sys, os -import rc4 +import argparse, struct +import sys, glob +import os + +sys.path.append('nirai/src') + +from niraitools import * parser = argparse.ArgumentParser() parser.add_argument('--compile-cxx', '-c', action='store_true', - help='Compile the CXX codes and generate Nirai.exe into built.') + help='Compile the CXX codes and generate stride.exe into built.') parser.add_argument('--make-nri', '-n', action='store_true', help='Generate stride NRI.') +parser.add_argument('--make-mfs', '-m', action='store_true', + help='Make multifiles') args = parser.parse_args() -# BEGIN (STRIPPED AND MODIFIED) COPY FROM niraitools.py -class NiraiPackager: - HEADER = 'NRI\n' +if not os.path.exists('built'): + os.mkdir('built') - def __init__(self, outfile): - self.modules = {} - self.outfile = outfile +def niraicall_obfuscate(code): + # We'll obfuscate if len(code) % 4 == 0 + # This way we make sure both obfuscated and non-obfuscated code work. + if len(code) % 4: + return False, None - def __read_file(self, filename, mangler=None): - with open(filename, 'rb') as f: - data = f.read() + return True, code[::-1] - base = filename.rsplit('.', 1)[0].replace('\\', '/').replace('/', '.') - pkg = base.endswith('.__init__') - moduleName = base.rsplit('.', 1)[0] if pkg else base - - name = moduleName - if mangler is not None: - name = mangler(name) - - if not name: - return '', ('', 0) - - try: - data = self.compile_module(name, data) - - except: - print 'WARNING: Failed to compile', filename - return '', ('', 0) - - size = len(data) * (-1 if pkg else 1) - return name, (data, size) - - def compile_module(self, name, data): - return marshal.dumps(compile(data, name, 'exec')) - - def add_module(self, moduleName, data, size=None, compile=False): - if compile: - data = self.compile_module(moduleName, data) - - if size is None: - size = len(data) - - self.modules[moduleName] = (data, size) - - def add_file(self, filename, mangler=None): - print 'Adding file', filename - moduleName, (data, size) = self.__read_file(filename, mangler) - if moduleName: - moduleName = os.path.basename(filename).rsplit('.', 1)[0] - self.add_module(moduleName, data, size) - - def add_directory(self, dir, mangler=None): - print 'Adding directory', dir - - def _recurse_dir(dir): - for f in os.listdir(dir): - f = os.path.join(dir, f) - - if os.path.isdir(f): - _recurse_dir(f) - - elif f.endswith('py'): - moduleName, (data, size) = self.__read_file(f, mangler) - if moduleName: - self.add_module(moduleName, data, size) - - _recurse_dir(dir) - - def get_mangle_base(self, *path): - return len(os.path.join(*path).rsplit('.', 1)[0].replace('\\', '/').replace('/', '.')) + 1 - - def write_out(self): - f = open(self.outfile, 'wb') - f.write(self.HEADER) - f.write(self.process_modules()) - f.close() - - def generate_key(self, size=256): - return os.urandom(size) - - def dump_key(self, key): - for k in key: - print ord(k), - - print - - def process_modules(self): - # Pure virtual - raise NotImplementedError('process_datagram') - - def get_file_contents(self, filename, keysize=0): - with open(filename, 'rb') as f: - data = f.read() - - if keysize: - key = self.generate_key(keysize) - rc4.rc4_setkey(key) - data = key + rc4.rc4(data) - - return data -# END COPY FROM niraitools.py +niraimarshal.niraicall_obfuscate = niraicall_obfuscate class StridePackager(NiraiPackager): - HEADER = 'STRIDETT' + HEADER = 'TTSROCKS' BASEDIR = '..' + os.sep def __init__(self, outfile): NiraiPackager.__init__(self, outfile) self.__manglebase = self.get_mangle_base(self.BASEDIR) + #self.add_panda3d_dirs() + #self.add_default_lib() def add_source_dir(self, dir): self.add_directory(self.BASEDIR + dir, mangler=self.__mangler) @@ -131,7 +49,7 @@ class StridePackager(NiraiPackager): def __mangler(self, name): if name.endswith('AI') or name.endswith('UD') or name in ('ToontownAIRepository', 'ToontownUberRepository', - 'ToontownInternalRepository'): + 'ToontownInternalRepository', 'ServiceStart'): if not 'NonRepeatableRandomSource' in name: return '' @@ -139,26 +57,26 @@ class StridePackager(NiraiPackager): def generate_niraidata(self): print 'Generating niraidata' + # Config + config = self.get_file_contents('../deployment/public_client.prc') - config = self.get_file_contents('../dependencies/config/release/en.prc') - config += '\n\n' + self.get_file_contents('../dependencies/config/general.prc') - key = self.generate_key(128) - rc4.rc4_setkey(key) - config = key + rc4.rc4(config) - + config_iv = self.generate_key(16) + config_key = self.generate_key(16) + config = config_iv + config_key + aes.encrypt(config, config_key, config_iv) niraidata = 'CONFIG = %r' % config - niraidata += '\nDC = %r' % self.get_file_contents('../dependencies/astron/dclass/stride.dc', 128) + + # DC + niraidata += '\nDC = %r' % self.get_file_contents('../dependencies/astron/dclass/stride.dc', True) self.add_module('niraidata', niraidata, compile=True) def process_modules(self): with open('base.dg', 'rb') as f: basesize, = struct.unpack('EX24t8LG%RNLB9+tO-n>Y^}MfV?FoH+v#ZeMa(Vbs;-}0|o|9$sAeLNn2&J*KZ zkBxrz+;;bM&z^gI(`Qzd-L~@cpI&*>=gK~H)2+9DK3ew46=f@9x0Ze8*0T8@TUhqF z&o5tb$+&T2%I&VdH>Z8=YoB>hEjycl~ER)g*m6kcWdV*L7}>>)?zv*E?l>u7Y#Ny2rR&kGNf~ZC2@@ z9^pH{r-L%NlIsGOtH`DAv)``u6biER<7ysKQR-&Dt=quF0@plB)8h(Uv*q#0{@qyM z`ozSOJv(V|oCppte^4GZ zyPFFWiK&@PMy($2a`gn$QrhI2=n5nfv!(dWQ53gM;ZmL?{ieP)I^1!6vEf(x5yaK< zJ~QMkOvtVO@d@>I^C6lipJ}>LIt=a$+hbksce&!NmX2-L2jA%$|@UA zyW{#o6PAUX+d+;Q^o}5=L5S(BB29-(@T>*bt;wC;MfdKk$MSO|QX~Cg*a3>vr&x{lXb>YtAaCNpbFHoibF~24OtVuv> z>ZM!OH+(Gclgx2b8OR6dd%5ERcWnXAFAdp_Ca+nYAVHP#R<&-pk$j;S%bfAM$PZgYd=J z7buHUrU%&Jb!FQ(kCA>?66O8Ro4z@tTy)sg+zT7U0j zS@{HX_WI`}Q#>?SXYP)#7*ao4E*%c4AnMp&PeF_nee&$AXf%U^`74t@>Zy*$l#Gtj zu(}6(OAj4Z2N^&H+GPzSqQe>c&y(emw@xjgy0Oy(84jusopo}6c6jpenQ3av(SO|u zWUZ5iAtqS^9`6xB(0u>Q&JmNE2e6H2CnuG!sA#X*qeT5dl-g~_Kf{*9NTu~7e@ zWV=~lhPD^hdel5bP(0XfhT7wy$F%tnd8}Ry&eH@K5AJtNhHGd`{{sDXpf{gZijoUN zNFbRvv>XugKRQ7!V9}@-%8v)PC5xfwcxam$*%puV(N}@dvRxxY91D$*Y?txKBO?cx zbdJl_7X0DJ!oO)%@Q@ko3;Q1r{gAmlf{1>IdGA(#X5MD4r_K!2CxSa!{r&1|6vcxN zn4t%h(2xJ|-qu~w(Pm`Oc$yU$OrDSV<{3G{jf`Mpuf61bu0U6oZ4d}_y4{>0xVy%q zK1@y8#)BO;8ws}m^#fAak;h5Pmfmm-d06r@5DyKT!C_;jD_Ti)bF{h)oWvpHNGcxD zq!T?IZi6-g5V~2A*@IR|j3K8_Y_gGXo{NnIi$ZJlBquyW?B_5!yIkK$b)VK7HHQ%mPQZL1PWtt*kJg7iQ z;$e?W>KS>SKO^A9zE>moYwAh)YhRYXFuz&i-=CkQ5V`eVp!q8{9&v5#@}Oo0(BEQg zyUoZx;k13iX)`sa?SX2&AZCwhN3O+#yUoaMSVKLbm%bNk!!mU05|IP-Y9pnX?`^>z zL@$;#r0a~4JXe!$-T>c+AsxbfcJc_q70s7dvqhLWv@agopGUa+nUxvbe?r0qU$S%| zpBbp^sG8v4(lLTO^!oQ^a%Cr?2P8+zk{k<|mH+V$Os)%Lv0$f^u+t=gs#mQ?AS13~ zxD9Ee*MpQ7&5WE!V1mn(;Bq@X2#q;w%6N`EpCBmfE7o+q->Kj{7y9)%g_@GAKe^{U zt|2j@AR5G2mT2;yr>y67>bjM(I3oJBeP!7z>IG~&aAowlqbR#{ojT31sxfxHz7%+k z7OyLMCQB=tF0C49Iu;Ep*Y7(+k8WE`x$({FnJ0!Hdj81I-pl^6MTaQf=p~4=9+z*2 z%yzJ6Zop$*iNW=&GqaS0x1d>fh(!nviZLTb$t{-g!h*3hgRI~@k96X3yQC8|E_X&} zsq$C`me{+;SyNeKkR@P#!2j7C{3oatop*w#-KePQNAe7QqjI?bs9A+Rf&X7)vMRu z7O&8&#aVQWdW&08(l|lG>Pw}#g-XJphzW5B`QMUQ^bcwIA9vXzQ;#<}9_qI(MVl;* zmVnEDPXMC6YmD%$|4VQf9M`YDNZ0fjj|>|v!>&8Oa96QGY-ROItlp~N@LgxzDZ;uc zG=#w&@x=)w1OxHlFl2`6=~vGpT*BHg?$W^dfDDT}E+RfvNRT9wK0Pvwd#6>luL8J3 zfwQn0g4h`F_YnNuuSQM6g1g-e_6vsk&3TgrLxXDQh@e0v&^d{Ss#hJ{XEEeS29sCF zBlQ^zEkMy$Ao5ZIL^8b5iPlUTdtKS#wZ#%JUS`5F{J@`yJc#heoM35v;sR-W=Gps? zvVAxwuv&;{5+CND!S^p%wdCi( zRakA;p%HNq`$c_%e4mBN0k8d`NhLYD7y*79w_*y>jgFjyNwOz(hSx*212W7bt0uN6f7 zYAeGI{2ekJ7_w>cV|oDbD*NCeS8|f{@^*HlJ*T-`6+`h@A3l=ic^G*RkLQKgjkn8I z(ds~%w8BFhd_iGsnxO-*n$ePSt)BD*`zL?v_-wk<&BxtG3~F%n{j+ioEtfPVE$9t_~-%L<$GW+Sr- zvA9D0@wwUlsdc&_M?ca-^#619_Y2tX-G0RWt%fraQ zkaw0lItD3f7J&VvU)@fr7{6MeV!-IYp5~8$@W+sZdY(lmL87E$*tEk@2qI5FhQyCl2RkXaB7XG|#va%W^aDLY zMm+j1j|4Yq^$u6C?^$yFFIQ;FWO3#`*dlf!qS}nCI#^=q}V~DUytI-td z+I^T)`r;Q>GbQ#_Sly5K67)FsjWJl_%y>K%S^oD+Hw9Ls>{x%JF+l0DN}*r>M%ho5 zn)mUfwZp%03in1!NkI%5npU5b`XI7ycEuiZ$NdEDPLE(}i1J8YOEq`wVlzlb1>)qC$R?#UaYawFR0=xCoG2=W&MZ?%@NAnxce9_M;p#*1Z`dlj)%4~ilG6?hOn%Nb-X6OA_ZDJxu0#%WryQYJ( zpsy-8xMqq}y<4j4LHCawR3o7rv?NckTFLj($Jk)tL@SvM%wjJr7f~Pd3X$%}HyE_M znhd=TCqh28j#}s;F-Ebf!@yxt@35LL(1nI=>K#@ydEY*?-5-Xb##eqE`8LVYpMxtPW3XUQz( zkXd@*f6FX%cm9p*<(eTbwz`ap*JZ7IO0WE|dX)SQYUF0oACD-cN>xzll@BqCep&fp z)h1Q-EPl_`v9q`cOeZIp6E)dKQrZ#}1(YR*l*78BgP2MRsl|Se=tg_N^DI7*$Cfx2 zH~7c0NLC1iXkMD4I<@P|%b6G8%v%m_ z%+ZCj;=nJ62>CWmXbV{JDr-KnqlocUketux8s}94nb@*=caS)WY~iIb^;7geq!CM1 zv#uoP0O+{g4>amhpbmYEL?n@b`CKWHM{wwDJm>gBk1w*xU>R4k8J%X|A(CRpDwsyu z$lB!S)~45{ZA7-z{3Z0CdnR4l&&4ja2@{bCqMVSg{XAQcy$5N3yT#)Fd?@Yb;(So! zR@uNCfmWX9!9UX#8!IF$dk-=J*<4N8D=lI-tq|4%auyA`{o;7&VJ#M*_lM(ii4<}B zuz8K|{MrB7I1K<4AA4dYO)O<38PZk1EYJ4(bqHgGs zI`t!`Zm+KUm>Q(O8c238{nX8$ZFYSGn}Uv8Z=*se-QzClB2t-MC5Kvb^{IQVo^YN% znfF<1z4Dtm>q-3`*5LWOXSzR?x9 zK0X4z^`^L^X*)j4%*t{zgZ6=s_;2rf#;YZSHl!9XWhXEm8tQRRmA)_#i4e|12l(RG z1f<#`tC|kB2Zt~jmOI&FP?`?QWf5xQ$L0?;@77bqzr$sD_&shtenuqGvJ3=O$Le== zlSHtbejI?_t-nvcdw*LkiE`Zf=GG&v*g~-AD{mD>Y+yR$+w{1Ec#x(?3)5c0c_ug( zH%uctpVagevhCBGs;iHi-3a+mmiBCidpKkId4X0PyR5B zk3WgD5gB`F;fPrDR67=3F3-A9ddPAB*c9@%31Qc(jMAPd7IgA#?a9Ak6+nB|W}p+z zBtm5`X>Pt|ZNPNrgK`W$%-XW|cwX`z&&%KAd6{tMylLj>La*6rLy`~QG;=});TR@e zJ1sszS1vQXg%WV3T^Zb+B~u68j{eY%Sa&b&q&-9VEJb)8p`52384hR~D%aTeGSde8w_uRr#HEG%Fevs}?}y2Uh%9dr;m z3OeHjEqcG8C?CEVIsDA9@l&3|Px*V|hp?Q3AEv4=*`dI=06#M<{2Zh0N8)E>`;qvy z+n)%(dH7=n4*v3H;NXwRIQWyvoC5yJbNHKaQv4ymC*}6q@NV-w|tc1bl9P*RnRKtj3Mj3IGMHbJHaH%64u*wT=?GmcQR?Z)sXOVDK0n zkXr`U|5WxLQ7ZM;(2R`K8nU({Q8p4eJv>`Rm*j~d^$zwGQDK2>NWEdTIk6(ra@QJv zYd-##+xR0;-H@LnxTPm}pEddxD{$#={gMC^+M-?pZFuTmkn5+pHX~aI-mMxZ_fK#i z4{lD9wLrVs@z7=|-KcAAuGoVyx<#$#jubB?TXKo5hM5M-FOLOOZ>c-2W_jzs zl!YNfci~ciKB2tJ<0pcq?r04RtfIingurN8O<_W^`+#YiR$t_SSmj*G{vtkt#%Wr; z#vO3s49-{IBW^7;Ayko857WfC-Y&>N306ZwvX+PnHW!Xk6c3+7e?qVObM$hO{cQ4ROE#U?%8B^`rDm_{I-v2N_dwe_ zp`o_99)>s>i97O@X;1iFHvTV?*OJ&4{lC|I>^Z1ibxwW`ZqX2VX_9~KjLv+oV7_@v zog2nc4|)2?|9G{>%EggwTn8Wr-r!`(;w#0&E5XAP>(ffu6txnNWs*&0K@=oZnzuoi zZJ#EHC-u++Ix9jd!tuH1n}q!G^^av=`^XH_1R+^IuAXXfkaR~A=OZTLb&gkHi?CdO zX0`Wz1}t=+&UnsrWIX8Ql=F`-o+*P3s$Ua3vXO34>Y#cJ7uR+Y;L<@gPr!2){-gpn z3!e~VTK%<{{`0x+nCA%urj-gQ76!5@tzMUL$-(WlylqPM(@Am;ykuu5^#Y02=mOoy zwq1Wp!?5~dpY55meze`KgGM>uB|CoF${_Mu<5>%vTQBsMJNCYWCWN$FM9(^`@FczA z8Ya(%R@i5@A)e_x_5+ygsWV|maWkHP?SE3&XQ%d=PwF~({9wx;fc*&*B}gP0%f!2d z4#cP_ktF7c+Ncq_6t$C9I|V1#*k18;(zgPurb_LQx2iTk2aq8l1j$^(PSplMs@_U^ z8N(cs>|%J?NVVk?Q7n?_f?g6ZB~dNwoagMhrdo(mefc`Qn)x0F^Ml^5%g=ZBy{kPC za7D{8r_ra572s9BVZY0!KG-aRfy2g+|MuPTW->ND_Co z84w&SoJVGhGDE6P{pA|%h@F&LoyD={2mH6?;ICsjPMUv-S(BDg#UB92gO`cF{_ z$_y%Ymq<89o5%yvA>>OL?%QN78BnR(%*F+El=b-TyTCYN0c`o8&L#8! zpT*tkrE9tBRj2RMiu>3lp}sLlGLVGnvPvEI1<744#;>!wPz~1ml6-fGyVB1mJ|!7*@MFy)wu&iRJFxLlq_ACjYjG%4K<%76|Yq% zYsBiD0Rz#o^j9dESHpHdk=!f0^{}0`kWx3pfZ`-yff^tPdKy*gkPQ;;q*UpR1w8{v z6iAUMkQH%y{^Dsl^rWNvq|9OnNfb~NA{$J04y{B}nWN;ykorz4Hc|@DjhL245{hYp ztkSNWqcfcTb)gfHDiG!)4ZV=u@m}>A*bljYmrvkS5_8jdoTTQ~X||LccAc$jhCP|R zA`hLe9eT{!e_|R@LEB8HpQP7!paZf0vb}ogHLHFdeZN&A<2qTy64zwbjMRe;Lp$@6 z_`C8y$1y$5rXWI6>NMG&q44czF`|jV0hpxJrB`v1L1RghW4y5otf8=13hl`Gk=-oJW-w&p_rJdmh!yVT3@ePJ0R*!s4t~%;X157{IWxSy70?{MJ)F*tJg-r zuj!wtIS$<;Sm=PtexG{{89u|}S!gwc(Iq)R{GUS>oiKmond|4dd{DwUCzZebLMy#~ zE$92ydgLkFg@P_9P$eN}#hFF%5e^@eyq9ZAUKptAT~m;pDR(PNUU);2X0E1LMK@Qo z=9a8sXM`l3k{3`M{e^Qmex}6C?^pUHYfw2<9Z@>SF9}AaN`a1euuo?-4JL2o9G3-v zoGL-&dnPkstJ-j!qzrPTuI9Pu$1LiDaFp5Br4Bn!5QHSO$5vYz(-sk(`Y2s^Pj zwJbooXP)+Xnsv92F+X~0n_De%;0tUV$P7F($Y)*<3e~z^Voi0b^hz!5Wt4nSbNri? zztb2}sJ>^e)>|-X&pc}@OQds&yTE>0iaK!h%$=;OOQkZo>X}!r3#9H8eI-3jl`D&v zJ}Orpb$6q!eXL|+?IZ4lt)OqwKEt{x@`3yhqH`n2-H{K%kCuh}jx5RX_=ANypzCye zu0&sr9X>EAn{#@zk&^f|Wt12llXV@5v>7|5=sMGMovFIc49l2LtKeVr9nwj;y-F>A z1b?;$myP<>5;JrrBXpR@wHCil$?+@fdIEb-CG-g;rEWp|#3jA1KOXAKa#LTuT1dYH z%TeL>$g)jy>oa=kEoWB8i*v+kA<3pM*{wq~iNNQNq(s{|wBTEu51(_oHy2xxvpPym zs@9AqtF^UbW&t@f{lA=lc|kxuObPso-2kh3)o4)QSQ-V%6-GsxYT+8ld6Bc5Zp7A-@X9p}>;@euC}4wfU%hfikcAh(ob)CL87HIaj`~av6#taT z%l91&PsAx6+>^zOQeTDk%;26p=Cue*ub=2&@ZeQ+fScKGY%_p&Ox|aX(x)RdyMlnKiTJjRLhC%FIPVrrQt0o9E^F*ebC2evt z4wjN#HKy+b;T`3Z)gKQ%p4A`5;Oyh*u_w4wIuN1e-}t|DS6-0iZ#B7YE>%BeVKgl| z_Pw|m(aVMDed=u%mL=|08>q|)J2TY5K}YLM)lMC=+R4#7h;dN8sVSvhAa18J&D+5R ztBBkI$)IN_USKb(8QLkqCZDll=TYhXEvmHZdLu}FgmIdk?_>G&9XM{jBp(ax{c6UX zEQxa~cJw_&cQovB>r*Y(Ek+Z!CF)k|wou+UcEh6bAdBQVf?JNu{ktv@v`&rEld#3%K!R)u`gv$YE6yqcWGp_5DPPUKWd62C|Xhzocb5&W|7E%ax%&x1d&eM!A) z9nn6J3$QxloroUiSz(?LWKaE5;zu@gg!yvJsLq3s9R5QvT&Z`$^M#id4D_%4MXhhw zmblhofZ%n5g2Nxv+>w00XkwnUOthY8LPDGFww^nLZ!eHDKj9zw2Y+_Y^&siQPh~{s zIrC?MMu;BWg9DHF$EY+C@Wm){Vt+;l29|)D9o6a2sx3*~=7f4xWy6+*BFn|p2cL`c zwqMZUW(iZ({*7OvdssB2IE92~X|yQU>X;~S6s1>U3q`N;f}Y?nxXbRQytY&N z*@k8M3;1H2`Xp82!AH!{Bb;tl%e&<6VRDY*k$s8aek_W8b?OpIF&f)~-zSp$ee#>e zV&v$f#)HWs{pKGX?7UIzkiEZ>9v;Xa^7DGgZ{c26?yAEZe1LGxx75qp1>X{n+@~MJ zgZIcDU}Q^Gq%$>$&>B)GD+#0!^p?US@2LEPO-H zY9n(tne#?&oO9*3?clEUP7&+(%HMcocY+KmUXW0yX7EgA-uguz_#eMl zzK)%L6J?eIlf&{o0fx7L~=chp(eA42YYR97iw8Sq9iBY z^DF^7IP35Wd@{GptSiqlQjULh{7>7%wPj+6hs!m~6KBKmEh7>W4-@ewVwBs3up9G5 z{{Z9c2Iza?w|x8VWd6&d%B(T5b*JsW?B-i3qIr4#%hmc24TqqJl%Cvwc~NNpSpQ`c zQP-URGPm{^|3ya4`7Z~b1c%`Aml8}o)_>VMT?lGV9)h#-%`%QqdFwx*L13rSJ~jke zz>hKLh-tAyC90&I`(!1znKctZUs$~fpxT1BT#Zukf`-&N5KGf~4~8nozSP}U2?(}a zbymP$Und`II#Wa@_PE~c(*Ds+n(R8>#XnlcdLU~5DgWq2dT+=0W_gZN z%Fbe1{KS0k`$g6tJfT0~*yFzkc3Wy_dwi#?x^0iIJU3?#ysJIVczrqjxMA>H0BO5q zIQsc19SJQ9LnZ3N|B=aD;Hq}HVwWR3Pqy`JiOzs&HM2LM2Y6wnYrxB&L})Ydi4rxM z&f=|W5tin?@;82Ol)uijTID9Jw#d6IB;4{?R_bk5nP1A=zqY8Wey-~y0oYd!P3BbT zMwVmcNsg06m(fSFh#P7Y4zs9fRuj|e^ca1iFCB?4Q z)1}@gsAmod5PKgd8a%X`fLMvD$(C-XlryM5Urdwan4VVoW}3VUOhr2-`H77v;%iRpG@uvZj%lLgpV;8wYR7b$c2+e zkch0WH}zVE)!D~2w-j87dXxa-aU-KbvLjEonr4@8i`x8{G{Hy7GK8J$^64rqkR(w7 z{x=4%&yr(09(u%t;AGZ6Z3oCE1<5Bu+nDSl_39FWrM!YJ+{{VP_OMzSv~DF)2Lq)P zY>a$69>z_bI-(nuX-MQJ`s&%EdO zWz2uF=A9q?LU1r7FhsU7y+^|8q8toNTYX%^P{JvV_Ih|#-a1l}r3}43g1EoyMmZe( zX_ke9$vIEP5>h8zj~qN_Yj}q9;rYh+EKUTTr?nD!FL+iQ15e~#;Mp+v81$PZk-@m; zOrem^BV|s&gm+E5(_z9joChpXpN8BoaFrp>&gf~q9=_7y^(?Q+J19!jdAc)s8rQsM z>Y5S?O=wo+-5c@(i4vW(TfW-Y(;B93IiO*Q6GgmNZcSZi2_aL9B647cDtZYmp0xuf zo~X4g_?)~?M(#zXT;Q7Ka?KGK{jF{U-S2{v4~#42R2~<<9eB0x(9ZdOQ!&`fZyZ=M zS?=e?0O2~u6tO6xL$0}WZA!>hTjI0)#d4J|ELSfbz1;V^C6le)u8uM6g2^Cfdl^Lf zbH^raXi2wmo_f`Id2pFaMyLKBT`gc&n;WYa&x6ghF&L8?C37`O#;lz6yP_17VZ-N+ zUAUnorTZ(B9>&@Ifh*&6j?51m`+1v!U?hoCqM=2wXTijarPc2ymz(#B97kH0sBa@s z*tAS&NguW)w2}=q&6Kw!w0@~qHFKo|R?smR4tB6noX{G`5uC>)QE90kRv$xu8#||J zNg;3IeCor;afxFOiM?HF)=hToDo4fh{N(id6cafWdi}+tr$DbOb!Y!C=(SXXm!sGJ zual+sXF`_O9YdB9FC9siKOwyO&yZ!i?kPu>Q)cAIQp@Y>vceJl`IzX>rZU(SEh!Rt zrXDu%ZW@B4KrfCK;Bp$G3-1l$79E}cFGv5!$6xC|B3*cnjdx|^yV`oiA8C@zft){r ze~J~OGcVHJZc^stjTPEOEiwAaqH>V4+g&lTIA9l_pI1zV<0aJ9?`$E6obE2TNPSLv5kMy2ryKdSql5GtyH8U)bMMa`yg)!69UHcENbduJeBEL~uRI zyHvgW6Oj^=VQ(`bf8&W#{yO&Zy>e5pmIF%G<)H*SdA)l6$9!WQ%3jZvXjs}nI(Q_5 zO3wPV1z!>4@5m2q1DQmZPA_>h&C^s7o0)9Vw*`}Cq>T4K7^#XVX*^s`Fy6j6il!-H z4EoZVMy_?ox|BGYTFFL^>E+B~q`y1(rxo47KZAj3;pP?eQK!DoCI-E;V`xUE)%&01 z2%Ike7pJ_>Xz6psh?`B7Au#vU#vh`*o(vdo-{s%9l(D4jHeDts(7$pmMP_IklD({6 z=F~ct5nA@RVu9vqW^k%Dau5C*lX{x&c_O8ua&64NLTOJ>)Hd@rBU3S|_EZGRbPGTG zNj40+nRI41dq_H)AuXoRqK_8xUK1Jmw=jk4e1<_x+U9FpjSS6b^Cv8rC-x|)(aPeSS7R_7K91RgDD=!RADGW|63{Hy& z_X!m~$c}ux)yGQ5?+x(R_?7&1-B}?Hjug9Amr1=ZQm-nwZ#DTBrRr90DuVmstzIgK zO(Nfd1T!I5@sRF%|0A|LW9?d3N9WtGJLgqExOLj&MBQsE)>hkM$f`YF!BeRjFss=L z3B-dXJ;8m_`+&h8yN}ox4Bo7|`U=TpDWeNZ(c(=Bcx6V3saF%s zKvFuQ$}%4Zhd7ClEpXJH3=W}4|C8)9(qUNr6q{C4y{2ye#y<-lLVXpXGA*Lo@K|1< zW}CbZW+bfQN?Ne~RZHc`wmWCRS}sORGH+^Po?6v^%(0W4_b1f_4TI_sQzmT1Fb-D5 zShZ&J1-nfSt7d45xKom^WVus`duyrAEs?Bij~jx?76#ia>{W!?;vuj%tsd4FBs@X_ zw?@JqVNd_Y0~!f?93&8$)kxTQJQAw2vyvA~8aqcKVd}9+n3=8q1FZXzNU#ZBDD)E$ zykzqs(LA)6f|?XMmFsd*nQl{G=V59Zk1R~d?+c8iKbEa9v@sqciaM<#vN0Z+2JyZ^ zZA&uc@Hd4{Ec~5yDw8Rry0xMQ5J@8^V>#rd>O9e+oQaW$NR}9M`jrs*LsmO0>cRP! z?`jP~wd-^dmh7dhXU==vF?gS=fJC!!Lc< zJs8;JZR2GHwynb3;)2*8SLfLkSOJ7;Z2N=qZa0!UXWG~=gw{p}Vp|&>pHEhZl>vpY z(Gm)5s<R4kgL?#1P_a$oo3V`#ft;)$*{cHp~9FF=v0UJ(e{-`tpsBc2Ez0d|y=5 z7LG)*DdX52kxYj9YGLj`A*f?R^Oi$%6u zmc=xA9}<^!ZsYB>y!usY)Vhr$i{(Xa_uz%QBmgTLDdeQw6OXjXZJV|?M9lEM#GPuz zgJK@gFXn+n2c)b{mjzn)`oFT(F1msuNr?%TvoA;B*HW(jjT@xzAh)7m*O(EmP_Wx8 zLJ9@T!F%T(1-o5d8MDJ(5!nvuA?PHNrW^rY5!wztZl^49UBF$ZzK&6jxz8jEBipqB zSguXaay@LFyLB%LIcU9XtYbj5k)V4Hn}Tde#UmSymW{4Er-&!L-qx(=@~kRYZfVvM zZYr3Dj?;<6x|1H51)5c^KUg2og%Ow3}q-NEIBI@i8P&-nr^#uE+ z>*O7dPQ6WzEr_j^m1vQNEpc{$^%^OkG?tWB2jw6%9wPbgxS<~aiwu2~QBF9t5Y$bu z1)0E%TP~=lg{{1T_gSs?=&>i~*#nMjEdGt?zK+mrCgKcMdFcC|KkN%hXHkqJndCQd?new zR%!jR(mGDaj- zI4=-ZUi=1Bh@*lUpOD4Y+9H?lfm=F(CTJkhBDq%($oh<2?{B~^BiEZmb+56*tKWdg z!b8`O%NmN(+Jjxrc@}BXtK=1_$wxJvk=%%Bs*l#?-o2XDx087}6t994&$X0Dur^62 zn~<{TQGO(2(WSb3@SxuoEayHeLZ!$6d8NtZxMWrL>ocGd`pQMc6Y_3F=s|rDiE%8` zmKO5fFg;v_ys&aIZ<_fCwrm-QFrXcieODanG%MniKL9?~*-LeuCiD^WPGQZl9mn+pf7l zJwaiGeSU(siv{HT1YsOBNuG5Tu&k@`yTAi4sat(LG)`7eA<`t0XI(Amb(pPEZw@hL z6~j1(Coa`Prbv$utG7_}!W8xyn)w9wPh>)YAL19MwBP?}LdQ0iw)Wcl{d;7;KlP%l z<{&a1j`gZWB!Z=%-fh3%&_eo{eC2Okn7`j&HwAvm&sUaFbNl^n5$f#s?_&7l_WNJc zuUBLBau%?*dzmk}V8`Y={8#p;?+0+WOy}<=xNa_02LU@9tf2_`PX6v}ewF}9;!`tU z!o!dp+ov>UI^Jc6dI^pH*&XT+{pTs{P+RMLs{7Md0J*~$k}o<97Ydy#+md3*52=e0 zgj7H%$P$diwzk!C{I}^nes5q?^|(Aa;;1~@AH$!xDaaG(>|Agq7WaGoo(A-N%IA^) z?H!@1L3J5hHul6Vn`2PbKPGdOX%8yQhTOCv{CpxCDY3HiM=Y1o3NoPwnLt|ICYeCT zh&bwN5x(&vT{lOlHbPE_4?HLEF+mpL6!398KC!!K|H9EzYp>-m;A{Nn=gUr~g!!R| zbF%_o@c-WQMn0qvSB}_@&4<+IA4ecMmk-Htv>_os$(@zRaJ_n!71E$k=o~**Pv;ft zBLtCQPCD9!BjVNay3Jrp7D|z~K;)C%cJvYXw~~CDzhrtnMBk|v$yBi3%_)20DX{>^ z)umm&$zkE6Bj>Mi-go&)@)_mlf`H(cm=z*kgWK%muw?h~D;2;6`ETo)S0Yz7;?U!A zMj1!zky;6Tu#-2)xd?tyNP?2m+qF=MBm#yW)+a34JHDU((G>CELkwYt9%7dAlPgmB z{krl4a(ShOf?U4`^s&Nk)v24DcJ~1Wd42JD0ZA&9%JO1*?PY>L-EK4af7-g)999=P z?e1YB;sMr`khDtFVj8W4+tlLovh3BKxI1?QO@6day8kj2H59ynMGSHE0rD+G*@d>X z&GjWBJ2mj~zALE(>S{gmGm8XvX*L~S5q?o0g3Ls`vHo)3ejTfme}8@Mew#aw>ot7^v`Dz!qEu}* za$FO$sZ6J2;Ij|O2DK!N>tj>An>nRzN^<^&b%Ype%+B`KZ#M@~!`QT&3fkQG8zWNE zZ1|*5pLTV4*_?PIM|K*Xl;6@cJL8uv=ML;9->vQ$AijKIO3K^L{??PxW5AstxZ8hQUnyX!E z5oQuIg3wD7u;hY3d_hT~))TKOi`SIL7fg#Um=UkJe(OHW1>@%Vu6WILOXcX^Hg{KL zN43>yCgxMGV_!5%j;?1qzv9Du+uVYCJt&(PUh0I^FVXFdjg`Bo$JUVjl)?GQ3jKU7 zA+-_D=Uxw7qr&Rj>~%DDna*wD#rihGOpJBcyLjhxaWnMkqu=Ohnbp^;-&{h4){Z-h zjNZ&r0F~KO*{tE6S$J2cnGMs-)6CAoJykna75N_*>=Z9DpUZ?Nn<<)9rO3Uu3Ib-& zGL75@b2|8~8j7A4zkRlO`!w^zi_AO93O}+eetR`o)~J4gw^h%bX6(2+9y>eX>(!RyLict$u5l+>zQ2^aLNes`DO)6Ru%Gi$qu{tP|z#O)>ACUGNPjz)ai)Q zMzfoxAirD|cA>e%YtK;L`+K3eATZ0l>OA9}OceB1XR5kl6U~}wyk~QDS!R6VO1GqC zp5K+6Yt{&kKOz;U8|&t~Vv`7TjSaUg8LO7Srj3moJE9)5D_LqTC`;7T@?Q9{=5uYO zYJi8yzX*PB$O6$|l9UYIjtD9}G%PkgJ)d1L^ZEFi`RcFTnanZ`ar2b+KOwc%TNl8{ zOT5O4Ay?}w(Pc)JEB5hbuX^JgiiaBGF`lGdt%rDVHt`0RSzF55dCbmaA!j8q0(Yw? zo<<1W>_KA7<FRiXRd|T~K+*2&FTJD2!J|IT^QG-Gt}cT(DS`!S@zXYGhqsxvQ!( zI%8JI%eyWkzOj)&tgzYB2r<@WVpthT=#D@Y$LNW6Ls;f>>gO0}W;bJWFcqJxxuo6O z&Qzu_71=l%RQC}4GcVgO`~vj9+zgY)W8|;mZon2{^(DDTwPs==X67-ECW8zmCt%c{ zG`@w2&azJ(_NjfG3bL|x<&29tnZ8?wz~>wpKwa~-OlFaavt!XHGnU~mli_>RM}Wtk zDBYU}^>2hUhM7P;qvYtOVUgLwV(~aw{R#X4fKh2`)ZMSOzl8=N6$!enc$5 zSXUB=uM4d7n8nEgv%A|f)3r>Kq1V;yZU3lX;{D|Sa4;Sltn5IT&f<05lX{Bf1tC2( zUilR)d{%q8%wjgD=)T8OtbcQ;7~KM}h0m$G#hU9@E9pvbJhlB_r00uu&%(s6%2%qo zqEqB@!89mibYU;S$WkG2F9dEDCu-gC@rV_5C2hK9ExkS_q98fM{9i=B&00D?b{6ZI z2)+oVzo;(5RMnLJTa^Bb$z8m5f<0hYd`W-Xl6~4C3t$8S_hQe^kTprM7=H}lhH zNDp4MW$r2DaNL6V=B&h$-i3)J`}n-bXZONzeWK>NaAr|J;Jx!xmAmFvb*}rMkt&QW znic9_S*`mC?pswzFLmKM0Y`lfAqdSSquk9RjXk(8_ED*)E3x%JC}^R;@%wu)D3Eox zoiD48L~Xr+0^_;NLJQ6}fYaW-++RdORx5Ce2$Bpz>STX-ZAhiiWWA*Y5PWC zPTfz?1N1r5yj&y8#?&4}R)1lagQ8MHA;@c^=hW6lKRf*uY!{8~Da>M1S8^HHPIimJ za{3aKnJs%NQqgnriu69LBTR~711TE5FDi<#Oz;f;%btk{J z&8^O2s$CAD?L3zmE)lkP2ezo}Q2(GnByA0^;j7G4Jf=M+ow{{+q(I&34pdxCArg-)|dQG3zW7cdmN;-kPxuXr9Op-iMKdd z^BZ3VyT_23CN235;ou8=IESIhtfaML?H7%d`>q@FQDV02J{gvt)t*rREX}7E(Cdcc zVha#XcXKqlY}F+;w)PS$AGifNuFg_XixLZJD>JjavD5YM5R4P_c#WVhV?+Yr>iX!-;B5`GgZ#Mx**`WIh!N~B zaYsutv64(IfY4xYb(gisi08}1#gL*HGipTj$IhnIw&lo3$MS5DU$ov0d_Wn+q2SaL-%l<^h~w!TW1%5>YaRz_$4u=9QYBh1w`{ z8T@dl9949HPfk7&(3QKyovQUMTgtp{*tMe!xEBI!c~q zh~DQGZN4@3K-!0^UGUBr8tNgC{k7$-vxr%%p6tmYYMvVNTPtJ&0)Kp!LJ$xiH zv82N-D)-EWC+|afHYmNZ-(A|c;b@BcJKtCeXkEH?W@4$Xdq=kJ3!{;q`E{+KK^o|Y z7aJ*0i~qA7rA5+nSUpPZEClXj9)3?A+K`J)vu0}2pIPl$go?^Ec+C&v{j?s6{navQ zurJY(=vhMW8M9^zxb>Se!>XBNp+>U@j>7t!YTP_UtTX*2oO@#2Jk=#urWkT{%>{Cl zzec(V^7eMG7&dt0rZ3?V+kaOyP}R#$V6As9Yi=Czu6#{=b&r0^d*qI;pF%b1qJl1V zIhcpP*6}X)fLY^B=o&}8>u0*|g5=a(8EW-3tda5D{UV;pG^j^$i5r)Sh2GFy%B*f6 z_dgsjR-eQ;XcUae6Z2r^!|Fy#__|vfG%oGRd`K;oI&!f>UknuES?Q@YSe8f)_dUh? z#7WCDV0C62c|DjyUTnKzwF+OnDLjg~@Do0~iKCAOY7=qO-T9pzp;k|^JbTy9J|Lal zlk03yI-7HBXOHO4=xum>Y@bQQk~fM+BIV%9De zmgVSJAYSVc-^rFKVpzFBiTvUp&WqWrNJ-1=aw^cMs@6jtPEh*t`lS6_55ADMt9|hW z1p#Y;vkpQE;Dxv37k5Sgi9yTz3DPcgyGR^uiB28VG?pE)PP4SUEpJrQ`d>@32W`|` zsjou?>14M4Kna#H-m2RFW&Oe?4s4SS(wjNW0tX}hLNF#0CSZ=60YM^R

?Gn5pb| zPzrM1pLWS6sIMH;lU;$xiV*XM5noL+X{UY-l8g)F($y$W=JRA%*H$U8246pCi9C#* z)->&Fu0VH@+_}}YBzZJ~(+8#E5)o?SehCfScBW;w52=0FfY`!<19Ocpd5(FNcR|9l zO%CFoZhF<5Um7`4SpRpKHD0wFA`)>2EJLcDKGb%)%=RD1_8;Y$bk6UL4PmlAr?H^g zQIHL4{y2c!DriCO^;xF;kZP9RZk66N#RwHuqvE4uh{UKZ)ii0ekpzi~-__!+>WN-K z4Q#p@z}0Acz}1?GPF?>|T!LtEH5?y%yP{`dVzGOn>X}Q0crmrdE?g8=&-=ve^xa^Y z^R`#1BS;tNkpQfyUE*NkfHzRP-n7Q%3^6T0-FFNuj{Vt zXd}R|ptPq(esvPweSo_08gIPD7q1C4Nz1sK_mZmfMJ!nYg2j4WG*A~|L0bb!s|Esf z(ucZKtc;pcAvb1zxu_N6=2H3=cUes>bucKLyp3)hPJVVQHFINVf>_2FnwTmNnW?Jo z*sTq+u)iQqrAyUx3k zx%g$XS!DIqR=Sg`2e0Rkv)*4|5L~xAfxudEPD_Gq(K4s0w`!StH3D*2?cg$rqs_Hh z!wWrzF-V4Dlc0}8?Ni2)GyPxgWniPDY@ma0i3}`yO7>H$UR`xIeFYY(A6*ILtmtV2 zU!n#&;gDysJKDm-v*Jrqoh>P^3Q&dZ#+3gTp4tms>ltyfxxi~bW%ug>$*Ax@<(b>5 z{Jd5I)StE~m})L)3;NoYjOz}LcP&n0I=3zHbqB|}s&SuVL$GUeVI2mmFN_xDXT{a> zc|vvNfFd!5)39A}z|zstjQo$zKJVDhWj8E!beI~tN>Jc|{?J6f;-5(+DBV3*g z+27X4ewI!RRW|Tzz6IGE-VvZyook`Gld%NVXAFFW=N769tgM=RbZ?#eKZs;c3ah0(6U(NXDGaXdv>jmJIZRCNYf0Nl9j68D^QO zudz(lL*q-jlILudXQroB?lVPl6V6O5*9KgapP{#U8?$o1HIDQ)aT-tU_0jh;j=7(C z%>8Wpo?U?d*v2r;u7#P2QzH(UUR;LOB`_wXC1{LG0&xvD)z-#;W|IM=h> zoTIy5l8#p`kL%$8PP#^zvhhThgs9V%9pP{|6HDhjBf2|Egp?BsI4TlJ*9jcf6dKY9 z6d1YkIW?|OR9{18bxCG5@>|@h)rfMh>a-f?7-Qzb4K3dDA?ny^?MuGt3J82|j2!*@ zN5+c%#NQ6YDc8wziO~MaPW?)~Qh8aJ?A9xM8@=lSKtslgVVAKY#V75GuNaPhF138C z#!GNN?^3YP*%Rz#G}#)K-?Eoq8Q!CsMF6f}Pcd27diNse%}mQg_BA#dD|(3w@LSN6 zvddyF*&i>ou_mXu?2dUazzw!Msar^lU+m~gww3kUo3uXFJW6jjD!ZHeswdMSFj?gRSQyMo`)Ts5JWN9=BCe>E-fh6j( zDFESoYO?v+vP>VN<-oH-b5{khMp$O^_sI(5XeL&qUcClHgaQl9?$36V@N=ZIYCSDQ zRkhxAMe=-fhQz5QUJ0I}n_IwMNll!j_0o80)iU22Pt{wii`2KI3%j|{ltmkWF3KI@ zdQ@0`{e6OKWa|)j@ojRKla}h0Y!%|Wy!FOQ$h_Kvp!-|(5+d%7VWJ+DdNFU6ZXcVV z9+dk9o_L$|2Z^b#<~kZp0I=#H?op?tyTlGIT{7^utF7u-j(aVcGgzw0%vhl?3{_>P z*p)%HEI|@mGbPo$x#TXGivxGUrZ#Eu4m)L$Rwh=8DICym88C^i*~Mn(uCA(a!^osq z!CPGeXM-Tg=UpWF7i3G2w9|Z{u)FH$YHwA_fA<5d;f5pYnZwG-#+=8lMhr$zU({gy z#c%xCUv+fpGJfmm_jGc&2QG8PN;(G$jMoaqUAyqD?`F#HE&DcX)boTqGzL5?eMVnl zVQ;3qb;kd81v2G{X*}M{_hZ~{p3k4#_-x^G{tKIm+eU4wakpLN-c(aSw{2Gy7~O?N zkM4YTw)4c*u54Xh%WZTQ7(E37!uPVZHd}R!Znpr~LuRRWWn1-n_t z+05rYJ`eDDln=O`46Y~hUCMVU-z9vP@Ezb=p8NRr@$Kc?%eRMb&&aj0aI~BL_VMZG zlajujwW%ot19@wq@0o4hIxsitSY;#D&dk*HxE~SgxLeFOTSH-_|1r-P^H5&17cz+{Gx;pD^FBzCw4EO5&;{PlDeLptM$@sVLJK*31{5!l=)5;K! zg@2>+?cvWfKG*Zf^5nbmuXN7(X6v4qf2G#R`Pc5_H&oimXFH$A_&mbrAwJ*YvxN_9 z{@=jA8XFmzbc&DXL06!ZPnJgh$N2ZohZx1;->F=lgn!oq3u_^jH*er>`uPzZ?JBeNSVEnS84G)ba`QS1}*+8@!xo>3i$DIzsMSh6Y}WL*_f=@>#iNsn0h^nK}vlaUt#K7s4oe7Wmyb^IuigAqx zU?hh?M(%M-X9Hj4k=0(ms_39QU*H0{$}afGft=Jp{cT=f?lZ3|_mGS7naYk$^UJ*(@mn{%y&eg?a=c^Z6b*cF zzDsa#yzN=}p~Ej5e<+OlDqd(CCFa9`J9fzI#d9z0l&=6^PhOXX4#nsvRYLKfR43XBQ;Z|Q~frT}qMe2hKU9MMN%S(R}d$vJ)i#UwoFcE2y zZv|sWaU-$G|3goC@*o6l?8;Ei5sgj7`cb#r|DdOQ)f*V)JIe^hLDC& z?fSoosrx5$Oyx6AWsV+QS9ruYn5lf;*x}jm2bbHuA=+nNlcxXkrzfLl zb`Au%^l@2`>|K_am${)UG4JRy`TGz3H_cylk-SQ#_Liz~GcPU(NLYFZ)V0>$hDX(Z zJu$zw4>$p2yod&-HCGTBJ6(0~W{c)Cmd2;4uOUjv{kTZd%AdKs(rsedF{n7Ft5Ou-v;LDX^_Rl8fW`u()I=d2ck7lp_k-bXWSIyq0 zDP9=kbpVi*OsZ98ui5_LVXW`WC?_g%@pmV&A?t@R&Ok( z{w}uEdtx`tnj_`wHe|-hHyhxy=6nLyV|^OvepX8$=2uTrUmXJFstA~1ci1_jM$y&4 z-TYxwnQ9`cSlbLt@C;SElFde{Al9fhann?SxNmkV{|umMG>57V`#1XNqakydZgbfn zV_Q+F%pQnf(xL{{MZ3nv%*5-NIa`PeJeee7;6)L{1AD}cXES`%B6Zps3j6YVj1pxLF|&Pfo>5rQSYLLg_%9n zmUoof@BLAGuITs-@Fqv6L{Y zLo!rh>;ux@TZlgz6`pGi6rJEy&W>**nPW1tVJ<%wGdf(SUS29V=`vTy&nn0wkR|Z~ ztL|uLHj#?dZ>fY36#qHmQ-f4%l$@#X@{EpzC6FH#%aI`si{evEWgoSKhX|0dsUycF zhb^bQ>phypS71;4*INZo*eX8_RibBqT2e{l>?I=He~= zl^qh}I80U}lw7J3(;-gR87z=m2Az_6H1G&F4eBMhzY)?tRO73TeZE1(SSLx|iJoPo zjz-Tg_jJBpWcC_=IH&Uu#f83mAE+$|B#VAoi^MuKxBRZyg;MoQsak@1JyK-!ozvM@ zTi>hkr`5;Z0V!hvc)2=&7o{joDM3p{JbnB+#e=f=k;*(uxuS2sdG4l}V2 zgh=RDh0LvsSv9CF0(2L1Zj(8G50=i(*_WI1{U6HC`Li-0bAC+E`86@H^5(ojNaufK z&S&I6P#?|B`COUvcym05Rod8J=*Sc&$7-|jKW78UiRM0vIWl)&gSth6qrxz)w_Ud&f>|+9VyCNyaIE_Az8Ue zDvS+l6VG|fLX5{72&XOaR=pbin_1&~*d4<#yW=kp7sUQ3oBA;paiM@>7FX4HW223A z#LjkA$BQ%L1yZv(I(lYlbQA^2N6AmB@nzUF>U-1Zb+hMYcIl0r<( z-3Bcq7$&Mt3@{sl1|zm$HHMO&qQ+*e?9mWj1+Byb^7{nwk1E~Ul;)L3Nh=u8!{3n5EmzHR*F zoX)=#o1RfZkX|^)%Tp z+1N$QtLIlWwDPt2$SnGe-|ty5UA&<}MD(buv-i z(SHCeTg6seXNv@D5NAueJW|qfy4}VQAn!RzbzuN6^kep}|3hKrE9;LG#HxQF`6}xGDuc#ocb=}lO;Rf|@2#-cyfUz8c+37 z&}NrVxme#a3_5ajgAz5-n7p(>-HFf@FFp)Z|Zy9@SLCZvU*A(WR#AP_@s9HZYAQ zP1BWo=W!rFS1~=?%v#@}P9u8hEPk+QLRkA|TAIB-gN8hFR*N@Qa;UQ)>JO_+1!(9h zRydmdk(RW)o5NL;+(^zLEO5?DK+zQ7#10RHcS zQxU^MGP84JW`}0QVE6_#PDV<8P#lgZ3Z2wxwu8Lt$I^42Xm>briu5QIo{-AY_im{v zeFsL+16cDXR5;|qN8b)}M2 zP^|r8+e~z(e<9P;)Bg{FB1>~6(442TBYBf;_xCcAW%qv*%MQE0R@?n&%!>I|PC$QX zOaDG{VxaJ34+2j7KCgOwNSElk|3O`Rgmu!B?IZlG`HaO5x0CaP?L!(NNg8MC29wN~ zfH6s3OA{N{XES@Y`)4b+SIW3 zX8&L|iCN^nT0c~`z_;NKnqe;`FabMF@wfd%R`8vw{VNO16r1vCa=CW$wv-FkdE8ep zv5HsSE$QUPs+OcyevF~VHmHMQ_p$&ja{R@7Cpx-vui14tma2GLnm4HLG_XKn6~0lk zzKGSE%;&3m))bh%Zq8o6T-CEOY_<$1FJ$Y>|D=lu%>vk*O+0E|m|>%ABfK1!OUf8{BXv2_1Fg; z)Bz(wEfE=ELHOp62_pG%F~@A!l&z^gf&WDHzfBPJayQ=)$J z0cUdR2XrvDCpjMj%81TvP-#YMFjMM-*y|1IDFjGZjb9-Yj%~s*qvtcchM;CLEH##6 zPQ2O6xOuWf6@A)#(`dR)(Da!Fv_WKzkgOBclHACbTA(M#iR~60r@O!!kI}HJL4EzO zgDf>$Wd1QUncSxh_CHE33paHr?aL&`Vo~O@hp)!9eJOL8kVsVOu1@8HpA3k-iLiJ5<*w*QW$Sx^hXYb2^6tZW^{tDo1&@lBEI(9S z5G^`1%8O4D445uN3U}^k|HHbtAo>cy4v`QVMOdliJi6x8UwLI;^qe`NkMUJH=Toab z*B84;ZHD@d2R4HR*TCZ!vWj;}LAx$kH&)46%}krzNm@a3plO>d_c_;s$(DfRTixYZ z&%?Wl{ZFp)CJW6~BtP`4DrvP|TIujgtR(tL(j(RtRju*dS){(nFlM*;F|RqJ6H^e| zOB9W9XD4sjm>6H>Z7Sq`A<<6R3m+9ItQ{!Z&u{KZ`o6he=Z#Ys`^tCgi zfelB_m2dBcBj@oQn`Eq=>>`^YLSs%9#oK(yZ?luci!MTY`vpNquck!X3m0verF%Wk zoGTLQES;ypq5^(6b9{~&!f{CFCs8tlJSg4Ik?T$k=3Wgxayx+B-=Scz$@9&(yUOpc( z`&s+8_GPWT_u6Z%eV5CzHbWGj=g@_h8J?le*PJbkwrYhc@^n1=@QQ4G zkb#lo+b=W@XhYXX0QFr}KtQDmNzX&-A9O?;C9N9$53UD-7Y6+4bm=oCM1R13jXuCO zEOP4`4r4YtSo;&Jvc$EQ+PojKg6Hg2FGI#gZ6igXt)zaZzwXmtyVVB1qR&a3dPpL8 z0=7}&WI(ipP;BH9;cQe@%Gh93DCgg#$vkLEmCVB15yPq7bb}tB>nS3#LB=0Fn@o_a zt9I4$A@p#a&;yfvDb^Yt>{vQ{#hyE}P#ZFC$a48!tDfPTo8_+YaR@W!?sk`!i{0NZ z*c8i}&;DOe@UYvO)$K(Y6zfo#{1E}s$FrF#iK349ugo6dtP-6K-g{M&bc1?vg0$`3 zXrpfFGx}?{+0we{dO}_usb-o_Gm0|{^ei7*peK1+fu7?NBkSI9gvaSO8qwU#QW54U z>rDvNDy%{>=>Q~UnOHeRsFdq?~8$q+T7*Sz%$q2Z~eZg2f{1W@$yy%zQyktWo7 z>!%5b4r3mzaiJ(8Z-nLTn_0%LXa>qYiPc%^zrSm;J8%70slS7e2!sxemH(9Iw;#QwN}LL`-0tD3Ko;rx1~SztV0eSEXUyDuQ$ zU+j-;X=l59QIEGf%@uSkglI)b9ZylKpayH~WwSe!xv6K|a3S$#^>Gp754U+(y8i(_ zSO?7R4W*#dhFTa_D_k-y9;OWsn4IP85Ipp5g(^0;)MD<(GnYxRVz*yVdFYt*B1*ei zW$NYkxIoRaWA5%3^8_(Ar(GgQ*ofT)DVVG(vMx*OrDv6CL7!a4%A8)8BS*Bbvpnuh zgmctQ6qLBaRGj4CBDa6DU0S6W>MI1!5mGR|)}u@L8XO`!#Iz@kQ_E+#h_O~T&T+yP z>!v&P+&aj}Rj8N73&W`;>qgEkVTn4G&R}u`Vl8<8g>+eF9(MY`ILAt55LbY~1=jEx>2lj!fUY!*|}MHC21c zVrvfju2?(Ux1y)!YQx>~k&8#KjMBqg#-`T(nDfd-vC6J)XJPmp5P%>kNe;5TSh&@1 z7%b|7xq^zE(5RvrZq!39D>p8}P|oJ^lUX8AfzC2!y2>krxfe+Lg%iyYPBaIfB0Z6# ziM5<g&BAo#J2^k0Yl&6CSMq=`GU70gNR6Vw!_eag^Ti-@;AN{QM&+t{j?id{r9yO1qCr@xb#Pn^2Ki!q=bUp@JqJe7E=hCcwVy4twvfBVeS-GA-+%YG|%r$uWq9Jhsqfu=E`S za(04;T%6Q!SiE2V1Zk$>Vui0vRBjx*8sV%Uw~At}>QS?GqtUODf%xCMUB*IcT8GNa}WQ)+AD$}C>t{&-uioO%=dn1Ox-u^m}~Kkk#Y8WzCA0`y9;xYybV922fAmtszPUrO0Ie7C>|HX z>w*b}RJZQ?hc$QQnsp7lNf%J}jjZG=7s@s@bbWq)__D}d8P1g#=2vE}I!~U0xZVx_ z8H>63L}6X9TeGkXdaE??4w?q>@g|&(=@+GbW_Af2UmuIK6(Sd!XTp@vKzcu-B6xYF z(R1jjNRGp==5ipa#ITY@s!JBB_;dzZWXsP345c4Oh81vg!27Vw!w*agtf zj;%wwe*02174_x^G6d@8$*_?X+gup6ywM%dr>T8q70S(44T5S) zB`XX`?*2apy=fPRFO3x^ac}gUpw}O}w-#8CD~V6Je>cya?#9RO2N-|Ttl?a02-LP? zloeg#QU5`Ue65|*$)bfGo0i)&o-+&2F-C-A)E>JywANo9EClbkPkho~JKj@xXQ1}j zve5VZ>|%(Epn1>c&yyT3jr3&PIkz6Ea_zAT!!ynJjEJiBtMXoaCKKnaFJM~N@AKAA z;Wts_iLFjDkx~vYYG|&k^fvr}7%jY_cPwp~PRVBWFWe=A8L4}8vaH}}aqQ!)F(X!7 zNN(3^bbTaJbUOJ6zTlx)xR>0O?NVV;2YF48VrA~ zx&foBxmXnVqtzuwd;CVL_tj@-$->#C>PRVt7f9iG`zl%aDd>H>{O?-jp9H=^U2B2^ zn65{c&W$ehN0*i?vrQUKd0$2>KJ+aX(vD2?{W7tP(2tNs8^o2oa&l`QYurJnMPoMr zh&Apc9DDd>{-#{ZxJ1n-j`R~~!bzS47TG4QBw&v}mk+dqU@(Mgr_T(R)mA4t!t(-R z1Soucv!qlXWLx7CJ`YLm;Hqd^RdjYT|6PVggRXVL!VLY`PUlR@vO8;Aj;v6>XaDd@ z1e7YH`V}Q#`<)k-CpHJ9?5|O2j9 zA&&|6m-$su*q%rA(gEHVX1WaBEzu+^QH53OHdbVar547RZoceq9Ii`uhzF ziDawQP{MC)M(PimQ=M(WREoGo01Z?5>sMdy7SeLXVr%HbQX?kCM;qqymzTHr8);!n z?<)1HLJ))GWoQN^(`+5ft6q|Z2Z(2ucwf-%k0u3Et)5^?6RUng6?A@Nn;@9%Z5U0z z8oJ9OPf2xRN@U!7SfKZdw&r;!hNDaulQN?Z74lbJ=i|f@lQ0iu zN4806Dba@{#o9k{HK_B@KWE44+jVIf(Vy#IGXDHssmd;|#AW3UuM~eyne;n_ps?!? z)&x+`#fTjN?^?FE>_8}ST3+*u@_I|vS@#u5%ECxb&B}iTPB8R|DYuX!2nKu74V!*-J^`L1qt$A!>v4+Yg#KYCg~mw-x?;DYIDc z+blyw->YS^JJ%y!X^u&hHyC6T>D$gmreEDQ$#D2P>^d$s^hiY7Q=Ey!QM4BZ$maAqbKknqg0_j;_zkcg=4YSCqQFTyZNxCxBg4MYJEO$y&}-A z`5PG>+hu`7AKQEmt%AMUdz=_eW|6^{hyp6}bu5bGI$Na8Q+GlZzUo~w&2?41^e+A1 zlh=*2q!ZymQcXi0g-5n6rv)iBvnpT`LSdRY_|;Y}tIXZf4TgSU)6hNBSYIHCY@!#( z05aOCOn$)5W0>oQ(r5G6+aMSFT&w8_^K@bs(J9qx-lm>~Vv)zMVIOAlB$LMd>R68u zWENwvI96T4rTmn{6?UC(k2LvD=u8V@ysi#@qwxs4&(hrxxA2)6Y3F`FrFy&Iu>yR; zZWAAlB6)I{vAOEDoxJNr(9O;m!a+k#-4b`l|WIbFy=2eT2+rI+mcKD zfmrrs9C3_2Y9W)B?No=XgTE(2_MxHC0U-_2sNI=X2c$*|_M=BYsXvlZ*-F9o9I@)< z?4oMUNA9N{V!zHr=`LQ89KNbMMbw6q!j~tm2#6xFT11-4%8e2>8fA@)4iQaaLvI_R zLngx{jM`^`Z@PuUgvRp>zTy`fOZIaaKvSuDOg@FM;Xgols1C=6mZ@wiE>r)_-^$*z zgNMAxan-FHC?rFqYQ-1U(SX~9$gz&qx0hE$3Pfk!!BzL=+>!*xsaoy=0zxP1F^w*h zLG10F9HT^A-BNL1%(hE=raL$2S(=~XMnNhxq)aW4xx%9M>v)=aeh>}JRln6gqL~)Y zEK`#ufqDd3yF>8HYqm9cSWTJO!z0RFH}!9SldERG`UUHR?YBa9`o@=SsPj<%_td@Q z7FJlYJUY}U2}I|+jG>mk_V7M^?KCwRSv|7XVwW%F;XIHWB?9bTeQvjU_hu=_1+=@6 zLCcJktVpJkB(YSbWL`ufvY&MXTk(E;Y(Wf64h}9Obi+rgBP-x&Fj#=e7kA z-+M++bX}M4m_BP=54d_}up{rCg-4E{rM&Wr*sQDE1rC?Pv3i8^H89vaAmHqF?Ae$! z=o@9g-(_b!sNEqw%7TdWCGO+|k-y|{=vnUYk(h|^PNYfHCiB08x{WC}fmj)is3d{V zK;k_S;lXxWh<;J3Y?zmU=g6WQ&5Hr%7xj4WmrW#yXZO!&`Z8G8<2zP;bwA`U7vy~{ zt4FE2dTKoGI~EGGrwQf=r{iP%s!WLTB;@f$hYumMY*FGZ~wm8Xdd*qc{;yQ@`w${fdNc*b&Hie*JGQd<#}iWR{x zClXn^lkT#`p;YIQ>M}H5U6HNN5}8yzLIiH6u&;q#B)laKkC2S8F7da4KaEpr)`!!G z=2RkKVZIGHAC5!f86@Ub6vpRPcokt6-z${1tN$tMuL#Ias-6?9Tcw_+`sDvj^~wL2 z>W2?hy*PSQ_ueyb>s|kw>RqR)er_L03q2!Esfda*#{u=S8 zz25r81aSWt&63l^{zjL(ut4@?Yrn#nojVd&V&pB5fDrg)q(pX_;=T8LLf#jO6dn^W z>ZrbW>XOex7sQIbXmVfqdML-cWepF2?27XW#{M>!mv8rM-_hzXBhATE7be1g<(dbs zwaS$u_4uuuko~+0ga+!op;(guqVsk(j;>xHO~!-R7rgP&H0;Vfp;_K7b7=KD(Rm%d z*J{p>-B%*5<2qvA8;PQhmmFlJZD1Tl@^+yCX?7&ob%ND)ok2Q*# z6sM#o@J|}7iQTKa326(Tv<*n3KuAz0koClS~O~Z@yl@Jd_k&ubD^Dj;Jo$D0(@ni^SVS zbiEYByN%KH!h8^>t1%Q)$?AW5BK)ozBE_@)O3}X^>RUE(a)tXfzj^zpZD#y+vmvx1 z&1yyTmr`-`m(q@QUH8K~@$ahZ%=xo~q|yyov?bB@g`|PgAup3rCt=9kMnEesMa2hd^2cOO6{u^acAwT zxsAhS%%o{4z9sIJAIYDTwp2&_zuS@=bDGX*N@^T7r!ft7x$-NmswS39=CZsllP9{} z;dC?sQxPDf$5Uhm$t?~jXutn@iPBDyS`#A!%tVZVxw^oBfDTBETnW+hl532?x)QEb#i8*`LDF{P_FCBBn}XzR6&Ql7*Qg;GOgiVV>;bbj|jRw#GC zFDJ8qoWo&Y!&`_WN3M}_QSc~UtoD$&$}LB)Xmw_^dPSS2>zQrqMdmrPy*MCuA>2)r zh!U6_V-l+ZrmIf-T4Oq+#QEhsNg#(aJhBuoXU@6x;fQcz)pGS>7O{2?=8Hr90(4rb z*1Y=208vruP-!|qCsml1wx)d^DwsRi0P~cPbk}^_ns0_|F}fhH?$DK|v*gRd*OBUx z-LqxNCx(33#GpR!W{+5z*G)}p=@9XN2Qw&FHB_YQaR)QhMcGiwk6! zq>^$0Fd8pS0xKB}qdI^fc??Z3CG%l#UBbM*s!$h5V!O{P%u%Y7jKCON@-8Ru*%j&; zPNtQ<0=>1(tV`(2D^KJqj%^j{{Qd(sj$GyHZB+Fu)xNV$-^lvrs`NXQVBK65nPF{D zZ5d=hZ^GiKl-xI?}_fn{60HaJ{@gj@so$G^woKHpyi3lsH z=s&f^&H5nK#_WJ(QNf;4ORB(r=6*%uy})ky-E=_6=)J%W{h_Jvy}--*Lz{xW7b%bw zoS&qIO+s{`QIP^k=s-QUKoU7ZVl^~zqcmre#B3DW!(f|W%E$O3(pIH9uSx!!EIKvM zUMA7|&9mBbbgepTv%U%f4r(v5-xe<(bHuj9`(8PAavNY2t|9X%%`0}txmhd}?IC*}{((x>59q{eNsJe`&gX@Fy93Qq z)|JF3rW~dpdX;fcSKd0Zy%G5EQ<|z7?Iy|9&-mK(2NOByDl3IEnNHl`+6y$7&cJh< zdgN{76UC4UPJ^0(@~ky#|Fx^IX_|BO`{m~ue>oYSFyF51t}qxYv|ki;l* zY;x&e*Csc=sDo_El<$TPI;%a!PtqiC+bEHnTzs{s^w8izE=O~F%5g&AZ3<_j4SUJ5 zu?N>y(T4p56C)p#d0IjyEPvkoF%%1>jeJ0+ielm?M&3s-QXmN&P<4{}jid=k*@=;j z#6fQL{OoG2Fxny=UO5@HP@VC1b%q9s z>!{+{bHYa!;v1y(r3}iSw0qKPrN*mvf>DiU=mah5q#{bfhblV<%T!HIjC`2R*d#u{ zME%wi=#Z&f1CI<2Rij0Erx`SA8uMM?e96WfgmW)t^M?Z?lYSVE&@V(~kryicYTY(? zDrYJcl0bj!B_yE^^&?7cHFn4UMA844D7?1M9m5;AVL-)bqT6z}FwIE5GAVp9P8`m? z^5&%QIq3&NV_Q_ll{1pVqX7=P@@6L*1T8MiB-0Os@va8;51iTjb_cKGv>uTo9&YoS zl5ylfG5^F}0h#t6c~wXu^kkJmgp~g#&^9UmPn5rn6H~lV?~2&yl~*t_X()%ng-58n zzP5L6b7f247DvaI!)w^pm>mDu_-axYj|6*C3+s1XB*%QBs6lYQ5c z)++B8&3IyL(K9bxW4s#qxTZy=g|4u?Coor%_&*~<{^ZD?T=^rjX@<~p2NHXqfq4vdE-u8Ul5xVo0Cz3yzgUgDBE~7Z(qx2$su=ibZn06ns5)U+Cr&~ zqi2+azge`f)!2JvA4*)4_T)8RZ|uR>32{j?t_gqB5|=!bL*hl+^rRPb1RTsvAyNl3EpHbD_fX3wk@2GPZA)(-B`R`` z7W|q=8Jz8lG0*U`ME>9r6QHN>!Lsa2#O3V{1X+mNvBAWM?-GXkX>3i@dpc?YQSncZ znV`}?D!SD5G;Rv+1%}tiNXLojP_Y`uEJiGdlL?aoQ<7hc0b2M%HIA(mcBZ&9@TlQB zTF5R^hF$mC_O6PS?+N81u6x^~^!|i*#{pg$;E!%m^B;J)1!j7=4tW>>o zNk5~ebEp-c#EtIwD7kYGr8}wa!3*r_^4H;v*6Js`z!tf+wRE3TS|FP)>>EsTLFgxV zLMC4!PwS*1J_!pacuM%UBRDtKaDV_i7qxz?Tm=c(YvAU>Ys)k`sb-;{qx(G`FZsIhAw`LB3Epl zD;hgYxLwyLi%GOWN!*;{(bxeA;N>$Wc!`2~Owf%s9OSRLe&FoB$6PdGdVyh0kY$7M z&46}2R-;#NFN(AAhdOFlqZ4EGFf_Wc4R@a7Z9?dCqq}tV&>=$OT_zxJWL=9Zq*R$G*vLRA&^e4dypOaTp z1c$z8Sm9QvBeB4Z>?B&0={ppf!qYDk67vqM!HHoa5_H~E@ z8y8PccpqzysAROaY_(eSNx&z+4C|CW&9#zo*Ir|8W~i zqz80gbGLt&lY=c@B;d-Q;L@VqAtbLhOEm8}S&Rv3xhO)3{M!F1lOXK&Zcp{A&Iq*8 zb8FmF?A^lW&De^fR~7zJN4`NMhMa4{PMl4mMruUmM$BNDZ5q@#w76+#V`@`N)6nAj zUExDZr_MXh>VQ)5O(I)2kJ5d0?#J)~>T1Gbri(RUr177+sNqe+uY3(>22F0t_`1n0 z>&4~q!L>(k4S8yh7TGah7`sbqr{;#fF@9oVP}Y=n<>*D>q>`re!mAr4bGHbYm!68j z2cJ{v{;a=ubnlq)<31Lwu`4Z===JX9JD=6XQRy5<`lE*W08U;U>8Qjm;pB^nRC@_iE| z^wSGs$VA_rr?$I{z3RUXuruG~`yf0)eTxN*DN)%C0b9~_v*$U|GSQHntok5-o~N3* z=n-2yyesAxi8SR^$vPq4S}}EA77wj0$Yh?*^LQU`<{7suFY-RvV)Qs)H(J!?G)D}) zue!)M6i#h(UKG1CNv37>$fo(&vUfEOHEQ)xIGP;Ajj3W{l*Kc2Jh$uYqFZrni#vdL z%A^mSOWc85c5_w5D->KW(|PceP;7p(JSD}%Eiz_%WN0rzp}OR*)FXS_ijyvi^xU#` z@FT%nmK{krigBe8=}DLGbp7o#UUd|^x>IiALNjSuD6=*{H|z~MV>6O)WOK%EbR8%4 z2}+Rvq+e~mat%iu%dFtwg?-GOi6XjWnPR{l9JPo?nGTfl0#d0qHC3C0PPjE-z*Y4@ zcxRTnfpU<${!s6GLY*RdbPaBfXVR1F-j%ML)WX`{?R}hp6ojCv)Xz}pNcvkxIoq8( zOV!`&q;$A#CMxc5H$HKc*Bc^m$N zO2q)YNf=3y2)A^n@dVrnp@7WT(qunZ^%Hdio>Ah6)8S%kNBS3He0ml9#L6|;HEUy#W@IV0}n-lmtQ z4r+AwD+JZf)o$Ob-u2IeT6Do-Z0ETNq6wLf>bXXR>+A(RMw<7PdB@K#I$XyXdeL*b zhZ9<)IoJC_bEGGKRk9N|M?H}r9(Og$v*F%nce+|SUB!ucnN{Lkn`>t3Sob^qv9@&J zA}`QI_PAG}J)CHA*B-43rPLlRh9Nj|OX8pNl1V62!1>{{+SV&s3R3s|ymukGEN?(bXF_=!Ot4>N4 zUD725gNEZI@<3IhpZN?t53(|r1*EX-Yf+?;`^aS1a@+;#4ezf1k$l>Bv`wQvZGz3?!k#vtpd z2f1V=5y_hkPDtcT4=1G?FP-OT1HI#pdEh_-h=#6Ys& zMo#c4P1&2*jL1~hhGul=IqSgtcEyt??F1QEeP(He`U^5C8&hs8Fag|K;@j(ev?bDW zeC%x6TOWUe%^B{?{@YSg>H=WRN-9AvR||JIOpk}!uw^U=jPD3NY9LrnM6!mDcsr# z$s=*`+oA?<6MVP8>)^a85fLWqoY!!N=UJ$Y+2^WKj#0%nj(-aLx@0D<* z-4#ikzw%T4@K$*MW&DEukDwuzOA#UjH4*>+|ArPyH|@yL^ln-9Ms8!h?D=?xj@#qg3#OtN z7YZ2brN;m)Mcv{?W4&}4UuW<&!mrk{A4_bJTYBo!h4PGx`6fI?_ z+soBz`8;Wik)efr>^PYflgo`<-;vPy6>yCpv@5q>XO^qag^Z^=D!KVNVVWJ4t2?1A zUY}d4y=!m@=?OSI$RjufwgE z>L!QW%3U*zZ!OWEBDX}5w&mrjlCBb?_g?Qf}0qnRZp

hSiT(n%Bi_E%Qd2W)w|6na(D{K+4%u5tz5nFRXI}}cvoOl~UDwfQZ2YU~{ z1s)WCMPXEa)jc8r2T2}810MlZswdga2Oi)-+rS$BsExW8DD#H$ia@a&$m4%ZB(_c^ zZhMG7Sf%;e?(`aI6eEw_w7YyKR(=^Ncn+~K=6sy~qjV z$k?6dmYZDFB3&Q@fs`;m^>E_S!|{ zFWJwsU$i$gRLWVx1>Rm=sS2kR)Myve71(> z6r@wNjqQKyb;$!opzn{y|KsMjnMfs3iIjB>!uCp2ZFW1OYaapUmZKNO#C@J=87vIu zEG<_pe-jdr$E5L}j6BH;3B(={uQ{8<&0us&BY$~o{Bn#tA|=NXRqcfdM|!lxNnpGq zy{+&pKJpq%E-|J^dQ9J9{$q7*Qh@Khm47a)sLG%BskeS8t>wiMUyHY1{F4}2VvQ$?2%Q zX?$(uraXs)LV+e;5p~d2& zw1WLn)1dB_q|m(X79QB9%bqi7y}&pU`EK-DdE-C&pA#cWUi?S8e=`wqjQu zyTO!TH;<9UW@;Bdk>;-{^J&UNwFldxtKqEExi`0P%hM9x=yY)zETt622Z?`Q7eOvK zPr)g4A^618C0Tnab0{%0a?I(yFF+`v$2>9eNh;#rLLSv(X2iQ?JMxMQvgQPrn*+fx zoE2N)iByZaDYDSXf?ZmqtuRG~DK`JGZ|BO76IZBZ>@*|iLHO;iy2J)J!`c_wzC;S1 z6()iTYBjp!>;ZOi|HqyO9-bw$@u$$pw1QC5>~eJ%8~n;xC>7`4YzIFJx@K1>*FJb? z4;;Lp5S~GAyl$3I7SF>Jnhdqm3o3asFf>850N)dHyUM7rv8&3_j`Xs9HDxrj!OD3E z1F-PUghoL<$6hgVj$q>e>-H4ESO^x8EXN*hE~G-$q*F;ydkMpruJ%u^_H^1b#}*x1 z$>#EC8eWtac-lp!5+Q<{Z4)~0MQ&Gg1Y}Slq60n(DCi|8}4OH3s73T!=ESw4TPOhIPg@yk&z zl9wH~2N=-uvc|E?3uWKEl^MNJyoN`o_=#ZWgV%uLQ?tTOc~Nn}agnB$mBrQ_R_V}@ zNQHNJ3aIs}JFmeXGbf)ruQqyG{+S$ec{#3M&dV=*W#z9#zJ7s~-Fc#-TngC55?~fk zvS~7PMW;;VFDt%i{PjO;VhWlV*({{CH?Q0Gp?3bbx+*^}1Ora4LP*$S{dQFt1)^=v zNnlcI`P)5({<3mBNgT$F89cWw#5=z~ejl=+MSOjy9QhlsJBJUGN}I1D?>(+IJuWH2 z$9a(MWvP?dImilYeKP6M@~z9iWxpVQDhAvyn1_|EAxR~FPMb=ug#)|UhFHF~@ztLZ zT|O}*#{Wqj$QiU8^HQFV`;$LZup zowFsf&*Gqp|C2l2c~j*5tO_Hw4bLCE_90XnyBm?+2`=B~yPR+3d8VqLKgj6J=LXSj ze%~wKMHp(hsw|tqc^R<Cpzz|E6MqiEHL?H9{d>*u!?ci*J#0YP`CDIP<$szJFA}8fAXh%lFcPpV{9H@;$#G zW`Ex!-_r~3x4+lR_r(Q>iOu{XCytLR*qm&AlhF|$TJXGlo3;BnS=kfC6$TtY*b(v~a^1D-ii-AaD zIH%M)zz#buxpH}L~w3M-X0_pGEz9PyeC{*u4ELnhgW2~GU9|!geKz1 zkgN{2f#tDjdK0K_;hTH>O7V=IR=F(Bo5P$ln+jbM@0oT_I8A(K=O8wz)(%U~YN6^L*1bvGDCv}fr2?B_y7_>R=BsPQHJN3H{P z2Rd;x9Z6)aJ>T|6jkX1IMRts~OKCOr5fbaKX!din;~QEUl4=Iw3rQ z*JBc8##q6me7j`EBRIRs5%{A|3Js}9?5R+XKTPkQ%jmbc>rOm(G5gp3I^{C$Getbt zCxwxt?dgmEl;>DAV`Homlm8^eCPq%93N6jJN&0joQbJK%<`ss0`C~-^hD-i};qaqz z>Rv|1Ji$H5MK>}b?7t>!g!9K?0@)t_VK7T=e@g}xV>TWb*|S@w0t)QXAb&7jEtEcD zl=8=gC+WW6s9+vQ!e>;dH-Ao6^~>H&jBI>xbb1_x**{3ssXhNY1edLpdI9`edS0Bc zV*?p8TZZ^XWJ+gCB$5PoaF_~yNf;k5CwYnAdSDC!oPs+~How+B$k_Hr8zv*eiEf*! z|K{>n9z{V9qVso%9P!0IUO7M*>CvY&+?w}WKh*QS(;$h_21Obt%3|5(!OUqo$#0rF zbz<_a-AAL3O{C1m*j4<+2fSSHB!$mon|S1H+0TwuPf#qIM0Iap@s$+cIhL}!XH7*H z$1Ac8(JFmqu&|B{1UO}Mv#^gxpd7>5JuA&s>#e_!4|NCBX%sF;&%XqN{TymVdha)! ziOFfkmx+=4nGACB_SWA-YTuV3&s2??x8BcpV&q=pjmLDC=*)S|(S{49Q;IUY>(5T% z6x>kAXH$c;N1Q(023kus zm~O3~wdb(kXplx34!SNe@?APcdOV$EhOXL($!u}9L>px8k9RqA{u2N_c%j!&KXk=;SJ&?j&!+9H~banrz`2x&Vt9Twq86>XDNY zXKOs9eI_>CDd+3@y!RaC;LzzNo~J@am{>O6;GJv?jn48;?fin-l($Q!=2V%Qa=Bc) zP38<9VWb{!!_&0LoN4*7`Q~NZd2Z8)nKPn~$)MGKlg@ic zx>wp9Lkf!In;Doen>;JZ8--m8aZQ0EN>)*23(lW7C zF--Pn(zuL6Sb#B^hE~J+HH)P~H_K-{q$m3e!;|!^cfKi2!>&pib=u}U4MSVmoY!4m z9#}AhvreoFm4?z-tb}4GwLCKE)wg^6MvK2Z(D|)!A~`}Ddwn0`Cdi^9J*qUL%^$0u zBAEvo+K|V&SrYm_ta&}|F|A?DsSRYYp&M!ru}Qajpa;_(@vFc^a>|3piOs@}5|gLe zgpW#BNX~4`2IV$Oashv7TAG9Z`fX<&S`BxB(v;2e zxpib0RVyq0*({3M+rf$OnQF3`SB=)i2|DcGIv?b>Vc#0JPm3p4j?spWRH44&Ucth8 z2WNI(m2PFVv$mhcA>@+C6Va5|J}cLSX?3WrOntr_ZliU$)4G8sg{*7FGW8>tbJ_Xg z9rXNG6GzZx>hd2_th8x^wCOtFR+~nsdA&tRTQ;8D zmf`B+-e~2JHvILpZAjH^c(Y7>r+*t#X~U&u>bE}t0rrj^dLe)jjhstJ8iQjny#Mm> zSZK6*w;jah9l#jy1wxkQ@Bj_l^M&28B~q8UxzTrka?}WoW1l{TQ-k`&PjFLHGrU~kE{=CET^-wpQP+UT1^&I%=m!GtUE%IIT?%JPd{XdxB5f=PbVDZi0L zfNQ#*=(dAIMjz_pZ^Jt^8Eah)i96Hj$HBWh--WxGedW?yo5&~QqYVd0XgFFvNp-e1 zmFOLgrJ39qJ4RIa3>-}uF)8kmNj+y`ENZ;nX-GjsjdG81bW*iDy6rHr-LE>m^^0IO zwc8{g&J)M*k@rr%Ki6CDCHVFi(QO^XcX%u&TV#S4t73U{5OWV{W zS%$g{3pr`nH@;BT`QC;+h}gF_>q2kC1%y}{Vp4ahKAyy4$0eMY%wGL~wYocXs>Ei& zKe1Wrv})Kzos>%#4fWplH%_N=CeRMeM;L61kAP<^|9~B=EaU)KGAH$JsXGea)y5 z`P9OM%H45K?Um`_)I@`{eX6tU!R?-v<#HjNx28=v`Ry+*&~rHQm<*adox-Va|5n;%_6Gf^(H^0Z z7EKiG*(|@#;*-t7Q;xBsh(O$Wl;aHbb*tTTs$E>Dy@o#%@wVz#1rNcp^~Ek9D^U^^ z-#K{GKAC-W7z+-l&nQ(t!Le5Im~>t$MpZ)W$mG~jRUjQbuIAlF|GtI8k9IuO|5#V8 zPoV9_`|)c~FNw`N&dMYb5vBP~4+%$@Oo+oZuX`^iPi6cq^E~1*DOU667;LyU=UWl< zEuiJv>rjWZco4XuN2;$NJ2+X16fj#2qnrr5zx!32ff=pF9+R&&vqtDUG1iDq;w9ai zz3J2j4*c=A^<#UnY5JKx6w%Bz!t32W_fl8nBi0DNdade|H3Ef{e%dJSGf$anIDd#P z=!lP2%lm2wnU$I-pWNO1jRhU*?$505PNh5hu~iu2!CR$L?!5dP^|c`{Ko07zt!JJm zg$K(6E7{$JvoPX7&%TAE!6eLQw@My{B$QpQo|Q1&f6!b2uw;@2z;wxiRV=ap-u0Dj z^u2>~y{AIG(IS(ETP^)~hn8|UhA;||PNu1NBa-#`K@v%)-o>xAda$Mmk|(XtKeUov z-T=5&_38{|T5&AsIE z@LRM(4157g?d<`jZEcm8$NbSlssM z5Zg=Ji?C%Ji|wn7ZgYXT@0hoKISDbL|6V{E*8_)3GXd8N0Or|*iLpSS*V`m*lC zasGPiFDFr8)`w^%WU_+1(mVq(jDD9y-_dy+wvx)cpZSWY^0KN;-^>(|%3)ga$73uB zlsrC=Ndf3z*9!rQ{&k3_Y|Tr#>2HdPg`bE*u$s2&JLPI7A2C*2;Ey#( zoWF6&F}1Rh*RMS*?IX_HAi`ICBhnsR=Ms)RwpOOW>o7%O9e!0y z&%$oBqTqK;;*9kCIJ`zKm^5?QyoL;_QV$dUOjq#5U@a`hqvyrjC`x_+<lDkAJd(wQg7Z7Zf(+jt9sB?l=Y+8{Ji_Rj^i@-Oqi59BIOUmuwIeU< ziUDNiP+U;pvBrHJ>QM7C!=Fnb$&I6tOd67x7xm_Og8s(E?!>}QX=h`Wnjke>29o#a z_8@K2{0pXRaUFSQ&ilf`t8ua6eW7F)@5G6EmmDqjrZH}}_J|v!!}ve)2QMu{q{EI{ zO=16H^u&0WA$XY$I}6xgU><)k&xQ@LU>W}4WE*z$I3u#dFG+a~eTohK7_h*y{K3m@ zm^=hn9=xIqxLL1Qj!U8(fABkYqF?uwH_;!QRA$PZ)PGn>&-Vu}w3Aj_unYaci)>iX zg5~;y7u&G%z9J|4gO}LgtE{Bie$~#ya)*mdeVJ`qP8@^sRqdz#^j(N;XyJ1%Z z(ls&ZR)*agY?3zMLp^3oWy|4*#H9lO@3+8vHQ1zaz<&a46~AA{OtLdPV`b>jV3X3x z@Sp`gpur}w172r=l?I#i4!EkX_=7seBza=yS{dHeV3X+x__#Pc&l0Py3I%4*MY!++|0Qfx%jKVo!lL-KR#R7{4jm-xDKMmOG95I=;SphLW zu`+lx*yIL)S6g6Fx3U=m;F~OPrUsil0q~r@;WxVs;ZF#BiYon_L3$ixxOngH1*O_z4RFNTd83Z1M`g2Q2Un8him=xd@72i~KqfR`ObHvuiTIR!Q9($?wHrVW-?!!0E(QxU*h|2?+e;#y+#-E19@#0}HG9yLh+@@T65 z%~VH!Eb&?DOZmNAeWpKi)W`aFqWY`;Jzu?}e=k(8>EB%Ss{Wmi^NdQ}G@m z#Z6OB@Eh4tm{?V)ey%~Y)cyLmMBS@@=c*e0%klh7??QE({#~q=>ED}Fh5o%o zU8jEoYPSAeuCCI*E7TSGH>57nziZTa`gg4w&#$1M9f_!60^K4DiAvQ$Sv=ISy96o= zhU(J62PF6p9h6l;{Z$8LB~Wkapm2Y+LkBlV@I@UI2CsgngTm6)CLMfPf)DFpvjk&0 zC>&Vbql3bA)oL9SHmjBs)F=ygRZDe*a8y;MgTh5si4F?eR0TTNA;HUZP}rk7PX~o1 zs%#w;9;k-tpzuAFs)NGo)Uh?ve&KJbO9zFasekC8FfsL49Tdi;-qJx~R%(Y13U^X3 z64WRQQ&P|92w_BOgANMwQ4i^$a2wU6gTi4{jSdP|Q6U`^PNKfAgTgx0QXLd_p~`en zScEFkL17C@d)D3}d_Y~Mp+fuWJRKBzSJ^r!G_Ho}pb)i6C8$vrT2?))r3-|9)xUI5 zXjXl!gF>R}eH|34RBz~@kfLfKC}sxMu3Mk&Bh@*Mia%8`F52~lj}!#bhn`Xwk%l8EvP2G{gUVDuDnts0cyTJld+R@-wfJF8 zA)QvbY!8pg>n<)+SCJ5jqPjvdV7JmK;~bspePPw~vfxmzz`NvVb7Pl2+RWs*IqqcGu*)nM=LRz`TzniblUdK?++b!0oTkB-ax5N{2+&Qei@- z`chU{kRlT@&6g6gAbBRF(3i5tf}CYSX8BUqS`e=ZDeo>zh)qA>}GA zkb!19Ltst#ESd1xCr|j@$kOzLf9jc&C%l(cn7KO#aNi7HFO|eQWO`?L>nBTImpa!> za$Mx+W$Jq*k-5D{Cw)iH>Z!4roW)1l6SfXt4F;1q!ynAFVLt>W6Fbu%9A(2QEf@#! zGi+E9Fl%CS_|3Ax7h6el{6SG6(eyLMf^indHrRxvS}@MyV>FDD$yXR-1hb{eERx35S}^Jc#Ro?;~}wEGR%Sr&|=yxDKShFCC;@@5ACI~wn8 zIH!5Dj{twH!NMda;?^G~U#5O?hdHS0_3v?2%`bAa&OIW1nVEfh&XF?^=YWH57v^Cc zJMQCnv)y7HrKN0E)>QBdx5dQ)RV*qQVRS%T6ygojC3>}ZTG?Oi*MXRxv>{A$|ma^2;9VW-g&t#(DZ zm#y}+e3UV`C03pB%rnotDE=^!FOzuEo3DrsNmFJL8aLO4kHprG<#W5NvQ3$8VDrOA zw5q)ph_68ZJse5>An;xHa@JoB{?)wKsf@UpvL=BrNiQBjgRVpwDpzv^=3D=Hyogt z$3Zx6*9AIkJS31<{ZPr|+#S0yCvt4`>h#*VL&s*sN^{~vBHxT&?UB!%SZN1-E}U%+ z#|+x#ztzeUp>QE9T3?jHgCBo zNr>sHkHoFGO1=L*zV$89>HrUp_@?NmBQD2yb__QF*5t)@*7TZMt`7Z>^cy8nbaued zsmVstOy;?LPshw~#D5|WcMMSr{z3-p{z$*=hDVq#mH8L~^|1$$FGo(C2#;$|ks#e5 z&fG9{oVw&VdcNiZ1Mz8*6W@l1_fK-1y5jpHCytBL|1KP2_eI8cNM754lF??L_HcaF zckf`DX0SU`bRgZulfN8@IHpHG_7+Rtegz;+p|P3SToOF`11fyy zYUX$JZdde9yqYNQdZC%xb)Qq@9zwD37fnO!cX{iX01oe#V)0hr`D?=cidjH0;?`w{ z=LfrT@wFBE{c|!%yuUuFsW=HDyTH3;x_3)+oG$BVs(qA5_beZ8O%^B3_Vuj#41;-m zg2-lTHv@+Yc(jcp>pEPNu(H!=2eU*zU7T&B0Au~`YgfQj}V&`=v)VyEG z=tkG=SK{o`SQdcMt2-cG{OI~-y1exjG88!wz1sbR&;_?G-g>-|I9_Z7H>gI|jL6vz zu7}*}c`}MccL(FzAOmECdEy**&lZ*NHfEsrZOqq$B#tf(lo zu^ey1-}rz+JbOs0NpPlX({b9z=6I7sY$0cQHo5pkH+O%9uMdqblkt>LOWT zTTzsAUvpULIZcdj_v9K7%_W6j@U6 zJRbkZ_>!p_auu^oaqE7No1^4L*Ql$R=e>S1lN{kyjP%mr2<*H&wb zskAvX9X$TLUBPTrh3zN@udr3(gVj>NyP67mX1|AeAAh#9SzW&SxaQh1{!;mT{S;`Y7D z*SLlXG0SL9j`U=%jI)6;4R+Wpiy;hNo-KgN#Tf?f{m*~IHX52&G4YJ^gTdfe1;@WY}vpxQQNMu#$jBA z_RA$*IU@3tCy8@Kx61}9x?My9hR%y$+9SJBR5Vx0rRs_$FbM5lp1lh$K)cMYG}_J) zKVHJNbB2ft5}dn7vuUl3d4Vr{Jam>eSv`{(V&qmB@2Mlq-*Qw&X33QI^(+g$M~C)3 z_T8@s^u4xQwKEBg_hZjJD$Qslw=q^4YV=s0QLL?TPU;DHJruJX)5h$3V5d6*A>|8m z%wF&|{FKt{0y1=0CQDc1om*B^k3(P3wL&2?uZL=fV)lJ}B~9QnZ|X zWj4-Gw>qfd?44-#*FXM$L(yBGB};(}^5trO2~9)SgUWM3RJLO1oaHY?Z)AutGBhIN zCHYG|p=l&;zsi6S3cFtllcL7qo2Xr-2+t8zy;3rTVCmUVvrxjP}1&CIpGc@evv!usQZh$ymy7opBf4XUd zXaTHpMU>NggRwY6#Q<5~k*X|5p;XJNR-7412_`R$rx~NvNZQ1^6*~)2do4z_Izwh_ zvHRE3aiPJ#mXQg$o=yw9WQMjN;BiMbpIf!!lRY$$lF+9s6eyADUrDnIjKy|zSZi*$}@Qds4&oW6%Cx7Y4%n3Y#KOPP>PReCrmpMBi(dj zbaqyBcDBZ$J}zy=6;K;5HXr%$%`g$G5UNZRE4wOzY{XbFxn%E?d=Ph4o3;B!u(lo{+wn0Jc3<>m=2?E63n@= z^D_7|K7K9@g}hsGy<0|4IushgE7W*~Y>kD^#IJ+5VG>EaTUI1_w^Sw#5bZIelZj3q zAo^c$E^<4Gb`tIFS2zvmmI_`YiLt`vyTcV)MN;f3D_sMWw8<jy}28ccgrIK?v(ZdIb{<9f9g6I*a!Q(e1F;-;y?#R^rkxA0b z0ZNLPC5{F5=m{?5|C(+8W{~ooN zDBP1&j{Enh8AOdIYWyitCas1iIA3+XHt8GRH{M7as}LSy--;y0d+&V`nn+CC)^a0@ zT3hGCLP-7tzS0As?|Zj=<=s+xVA5BR{yV}~UX6u@i@%unsp%g?{o~)GUMA{OqCWli zsEtJZlc;~55@q3ckAYH2sS1V7Y89zQoK&s1VKEC2g>+I#=K#?KX7p!7e>On$I5Rp< zbbLS*ybZ@#;tc;mU+F;`4Ng-3hK6VjgT}uo=wAawZ!x1kC;IaNqJM5ie?jyYr$Hm6 z(dhD(cG+m43ixkmh=WPc_>zLY93c7(bHVi`3sLw=O@0> zPwbxfq<>+WI=u~3K$N<8qfis?sZ=z|jJ65*)MzoeBKJT<2D*X*QcU!o>|aA&=`oA-DdRZ zh`Ey;HN9aI^FU~{k;L$S;Vb>ZMnmZOR5Ui21$BYOK*U^UMxTzDziUR@#5@ohS7|g3 z`AQGjXb4@OipFTOAZWRCAX@&0EjP_Q9WC!OqitFq2#u|>Y4;!Tl^)Sd1G-)zbbTrw zKQ&A00gr)*d8HYBI$|y}qitdy2#;Ki$1z{&F}pj2u1`fnloG-4IA{nlpBf$S(a||U>MQ-!Mne|xQ`@`$i0%%15kED0n;CsNg8!u%Z4>-JXxvQ_ z!~dDD^fMccffn)wW9|HZ!`LI1pj~;Z4>-JX#7y4@s+RiD;tf07V_C(r@hU z7-%7%sta0SFXX3o$7nP9bOis+;gbk{AT-`5NtNM0QROQ=;jI^qVOk9fSi!pP{eRhe z7r3adEPeD8RbUBdl?gEM<^3iyhsD20H$x;RHMBMK=3XK+>H%^ZVbK zd*_xe_G|66*WP>W$Jwt{VWjpgPnOx(Zm7J3DYd(cja65o=U-ukcm?=Z254a~O6gw( z$$|QT7o_0t>jz?_V5J`zi2DbCA|`(pJ^wSM5NQ(Mzm&fHmKB3C2k0MsUJCxce&8J` zSm_4_V&f-35tH4~^W6#?15N1jBtps@pg$WHDfs*PfhVP4r5_lGjUdLx7t!;-P}mq~ zLjTz}tTdE4Kz}wGrQq-D2Yx99EB(MgY*YY6O#V80{?|-6&?giPG^0hFj5LuI)Z`t=>D4c_-pk1zbeHs(1iX1u)v`*3FyzpekoX)(Dx7CE(I$C|3GXA zjE!5-^KU6^3^bviClONS0R7X6kb=Lj9~dSDEB(MgYb#(HM*1E}NqhcwRq^Hpg(I?=Y<^9mPT0 z5l!65lh_j;hASs8(q0T+^lRe&j4f?w(Pp<6-*f7oPtN61T<_0j%gKx6JC^j;w6s_Z zwI-p-@WmEGD6Nj0yHZ@2Kny3LmN>09=;cXEcjUjjUW}vNeU?p}tHoA4ogiW7?1eBK zb?c|*Alc=?r@sB@2w5A5bc#fdKcDv5Wo;Pr_7|;BEwta!*#u`XuK)1`(t2|>UdGcw z31r1te!ixOYLMOBt&0-6ZFoCC z`Ly-SfDL2itR7DcY-n1uzVkc{8`|NlZqGO=HN1N08B%Qopp33%`*F8W*BS5O~| z!z+@!h1Yw&QB+#eX;XPw9+!{tIxXG+t@aC~ZMY*E!*6t9cySK<3f}4f_yyY=HHNo! zVZ~oV^Njtd3Hy}uolu4u4n>~^ZT&;Xg6fyJ1II#*tKvII@x3_)Rn62C-v~t|8J!lF zD}4iMCtdH1*G!|$p!Ej4yDgSAqYw@Ib&EZMBVAu#s@Kzj7swrZGa8TdVS|BfzTH!8 z*5~?FnY*geZ#9~4$YWLMU5(~jTpTDtGKxZ=CyI8%=hLH*phG8<{aAgPuqa@h zV!la-d)i5f5~MW5u-^>TJ;7zAH%YmYrQHs#M#_;NG;W+Hcqq3m^6cWyuc2h8*x(9$ ziB2eBRRQM?(i;rFx8Qk(ud%|XnE|yhJ#FjnU5FbRG?bGx)gaIu83tcOn zY{wI7K}ks`AE1!(48h?5Bo@%5A==6@19ssw2m0*vG^AK@uYdz zFB8wX($N(!aTe*t0MC4}!R|8PiE38>KPr*G$Mq2MC_m-*#jDuFJ8+12dW-&eh99Dg zzD0jLfrluoZ_yt-$}e??_l2SUaoUGejkRf{r&OZMZNea2d;b%*fTPUU=z#a!-y?ZC zZqseQgSSlVcY=6-bST0@;=Gj(%X!DlmGBpy6X#_*EGt$_g#r~9EpsFc(|gUAJ%4tcLq;3{%4wYYWEvyA>oZflX>Ch951=qb zs41Ywi6BI-|M)GqYG7e~*@BV*g(o~J-{P2=8CmCg66d6RDsva&QRI-II$<1?<{DuS zjy&7>wb%-q9%j4P(3uJUX0ee>?HSKZ*q6a4H7uBL&bZH9I&=L@YtS*_W+x8u11kg= z31P<0&$VZ4L!*JWUT-r*19#ovx#0+SC^al3@)B%%*n&Gh?rgPx%!$XvbK*rxXZaB$ z#v0!b{U3IW)99td?8H?#T7|ZhHy0|X<(G=VwyrZy7l1OVrJCfQM&co2Vs~V-DVWSZT9`xxz(IW>&hhHteUbqH2x&hA8l5=~qlaYx0UbHmE9!+*8 zgz2Q0pn)|`T&%|)7`?YJ)xI%oyq6D%=EKIXo8X+ZP7MB|BPlEx4;$Mz{!zyX_p=jw zV!|KwE}Y8Xm}Lblp8dqO{G>E)%OEc}ZIda|b$zaUgN}H>8$$Dg#Rb7p^Ywy1%UVOq z{P(xwH6c%sYypvAoL$_gbZEHrIF z@_f9Ll-WOz4wOiy17iSj85Ti#ObQzx`2fpl545hNhE1~H?%{RO->iEQIdv}kqfrc^ zjQ#`ic~Z(}yxz46&GP`&15UNMcsM*YnXl0SQItE&=3Vs_iS+b%;2HH*7RBl-)LRtn zEiz(sa6JbK*zv!s!qPxSFFx-5(FpI4LcKp4=ekcuMDEiTE=m!v)AR9>XCpfzz1}l; zXCM9Ab@6Ml9+z(pV|-zu#}MxIelAH^F1H~2Ur{XcT|<*N=pw=Hb()wLre84M%ZG(X zdO^X+5xq1@qJyMobquaw{sZ+ngONcRV(|91@{-Oyt}VVG*YawV#3xXv-8QoRmcJOx z9?`+`zIb6xqqDc+gcg%EJU5INKK+-W>TtXadX1G?5M84Rh6W+*q(d+3u;@GMhJXXi z!u%Ye7*zg2a%k;(FFJipJi%*N=Zl%E5C-#1pk3U<2m4a6~s`PjF9MW4Hd;?-Z8w4W3pb# z$`~mt?iVN~O>=OjTzXUk^HFpuKV_2+DCts49K$#j*3u&SN}_K8=y8>2K5=8XG8|frUp&XVI zPtS2}MVem7uI>`@=7d1kH?U!{?SL`^ne*}+ zCD<%ieN>3)A#}?rvJT4ljCkS0>8!yXlH;8{^!H7sg1K@h*_ke7M&MP=A`~m4>Ce;&_wXl$w(8xa+XCv{TS*!r9GK+CK zWyyQ={xymTTCVYA_Ha^5KT>S3@A0p{5}*x!hu(d{y};ugabcT)g*4J$KLq7itZ@BnLE^l?{xzvG?D#P2(8>~9_WyBB|}UjGVzE6y4!mIiX% zOveYLPdbVr8@5b@mvees%;NQU2kVI8-Ljf?ynx?kz!pxO=p-U*>joR%t> z*8LhHB4xYF#3$mI7e6Vykq=8ud+PXl)q2ta3eTyU* z?!Vxpz`mRE#knuRPISlirAvWC_aLE4Mc}T1U1SQm)f5TS{W_yEi%%=Noy{kd-Ol4f z%WkhXRN~PpIYS(5?gB!4K2I1vQ_3a1QZCh@I|V^fkr>@GeRh*O8usczG0zB(lx@~b zg7%muKRGUnNRE3yaAG1E#?unUZYo>vX4DLm5cgm4s7y?zq2dcNa|{)qky&V{_%oS; zq2fa_OYoL3nTrh-e}ZXeTFPNi-Ez*#8W_ojcaPxZhC65lm37sXB#cY=M@8ozSe#4@ zUE2@{)rL~Sc)Ypdby~MkW7vSfTUMj=y$S z9B+gGEdl5g6AhKGVDK(GVrpX2NPV`{Af$qewSPdB!8t!5CF<;@KgS28Hr-LV1Ah%p zGg4?`6-W~__f9xFS%(pU0yI=^ho@Y&aJwCF_67@qy+I-q2-5xNPrd7Ah>nD4L_C#n zQrd=!-B`WAdy7GD9fhJgyln|jyfcWuO{~>WF5JbyvAa<4C&3dkyMY#-#)39wnqHzF zAPF8?V&idin~p>}D=Eu(K8rdGJWg?ohD!QM9NEO0EG6Q(w>rMNiXk>JJo1zxN?f@g zM?#|3*ANgr2FfJxX*pTS9?7ubFdkPX?)eb*nyxAn*D!mPrN!L}`&)Is3@5vO5(80j z*Aq%tk>NFV+Nq)yEI?nSVaxBC{~E)qPt(ZPmBZ)Ty9)R)dsm^M@}~&vVAWJ6b%=b1 zTouT;Crym>G3+v9y9o<%6_4J=SjD24_~0zDk~-5Ye1_^JD?Vm?rQ$wBrOW!9SgBah zi{f!&YCw1yvW!IWpTVZ~6EVI^OzCzXheH@vc6*JmT9PFyM$e)sCRdvRq*14wN#ffG z*)&ajhorK+F&&5tUDq&#SF>JxiKCLbbd<6z6^?gEO!3xVphTFWi&{xToV`KssH~#k z_-;q#7Fgs4>3xSfX0#-{pb3j4eRzPJNI6-IMakaDZKw(F1#gS^Cglt3Q{|r`XB*$33X*9g$0tVVG4B0N7q7$#Q+a)(AwlCj7=6t(D(_;K!p zk0;FTDmGLcMNa^MuGmJEOhW>FNHnp5`!R4MSF%(K=owM+bU3G)A?W5eR-Ol`h^opD zVKlK}9Rk3)lYxVpLIgu4-S2=nbkv*pP^l<7>M`pv9FFhy=%~58;kg$jNS@j^FfN|$ zMS2L2h2D>sY3quI;T!NQ*ZFa8#$@r|iu(9i?85PoOLDoD2CHP?K|AYqJ6X@uS02Qs zpavme6l2*Y*XysR66%HIGA<|l}(Rlc!+lxKh2j*QetINp>*Lj2f%D{51KmX&7J z(7B!uoaS%C8)wLjp&T46vf~}rG*?5Y28pMjRh?h#Wvx|Ye;YLsv7XpjS(tb6IM?h4 zy;a|Yv%cs|muDR7qH%e5ib@n&W7`wUKP?^9 z9xPSX1W)K54KF*wJwecCGE53V7v6&Ch>EAqX%G*8le(_(H_2DZ^`2niG4T$R*o{(; z9yO+Uu8G)Jw0}U2+RNi9;m!Xcey|4)(Mge=Oia)fQn)J$sFGaim+<2xn@$+%c|aPi zFeQzcHh*gWpc#?D8S%uYf`??0m8@ZZKyq#Xo^=8Jtq4n=gNtRZD2mUX z+B1nx@_hkxly1G}VY`#D?FsQRdJ>o73D=JaMdE?m_@vAyKSpHruj1A; z#}#=ux73etP@VP;SzIS4ft}sVZ;8mp|LQ?iY^=r&C4tV*Pe|+Hqt{|XAV*_d0Qeo?HXtBZV@v{ULYQyqgjw*ZLpO6U ztvu%a=6CjbP3J}XSDI>b@ON-EX{HR~Y5m_%Z0cU&TXYYFPB8lXak*Z=1A$m;VwZxW zKPgTXEiU_ky$~VIrVv{8C1rSxZs5TGXfW1A%bTee!Rjz>HK{<=K*Z%AzN4 z976Z7BNEG|MDd+HT-kFI1%Gdx&U4Qq*V9-$icQ7~#1}DbL}$bv2$4kq${K?W`{M#q z#MXL`j;$9ge9wys_~?)E%4Dz@rxOPo_TM=~O=1it6S#cbO=^OoZ}a-{1}+Bkn{kJ| zn_+}So{c^t+!K8q*Okq<*I@~EBtw&;XL@;q25647ZqO0W)L*}^zAY%IB`B>MX!Tcu zFzV{Xi}jw7+Ot9Dw8zSu&|h&5Jt9|L;IDy9(CHP+aYaP0tN_?=MD$86mV{{A3@=z; zhKTARqAkg;N6}uO+u7WPeZJgbcu&)b%fsEfcW3Q(@#8S62$%6fi{X&@szYlyjEA%1 zv9)sz8;zmR%WRWd9rUe35^?W&x!6E=+MUS#F|2(`59@xm4%#mJ{uV7vi}Xf*LF<=6 zb*1;sG}CHkXKUxj_ErvymLU#ladQL$LuMi@v^Q)7!b0Vx?NB1%TiQ1ImbOD_$r+2* zp=@cp70ZgDAQA#>;~CGHi)?B85|*~H6b`HrY-u~xx3nE1FKrv8rR`8GXpdk^+ia2B zvSH9&tK0Jg#V>vN3R>wdyA@k}U)e2Fae(2sE$6N`h({vNmR%Wn&V@pWJd2$YS6&s0 zUFun|4~3dTk#%}UH&e&bS>M*(-pz+$FLMY};yY|2?Y=nzTm~#_NKND_7J#t)_aJHl zyHWgL*B23xgaD7f>l!T3*juM;U_o-;&cs?ux^H*jq@?c`Yi+fbrF3x!x@y>qs&O&e z`tm8sX3WgLiadKD2-AwJsKijiwj<&Zb#ysC7SIx7w9RM|At?(D`+pP=d3F(&2SUNm zLs(oA6N95~*#=|PS$h$RmIJ5T>&8LnFD^W@g;=#jNQ-wp*=5*Yl5{)1g+|0B+i%dr z!c2lEn!BLT5k0B2W)IDd*hwLzY=F^)VHC|3(@s7W8J<9X_@twdWEMh7&8CX6VfC(& z>{6+`4TBXxpAJZ-0XlD@wowt?n2LdtW0jMK*AjAo|;l`e>%N*EZ6185oXG*AXA0 zYa3QpX^n0!u-U`ti|`V>qB&#`)P__iMc`{d1KlXUkRn(5B73sw954kD)^o@c}(XP`UN2<-)02d;MuM%PCee(~}aqGNXW zh>IRTmUeYrUo)#7ktutmXG+qGO)I(&V*^k$I1+}ALqG3G9Xeh#Xis&-=@P{T{>AE9 zxE~$J+gR1*c`e4W(jKlVNHk#ITvhn4u~kR_H7; zyplSw43LCTmx2bM(#3jSq!okv?{x+A8yi%6`&k&b=Q zo6)TX`xzvRo$qQ*%!7uC-@_4u7iy}sP~-&lxO77q_=(ZY(1H;MJ-*QDgeM{p)Tj-_ zSpi6KzSnG|_m61a=rrSjYBkq_{PI5b{ZTqDj(=W+rkMa87BkCAy@C9JM(q%BP_@Nd zl@#Fb855n}E(EZEov0@-26@zz@Xyq=Q31f$0Y4rLk&3gIW4EZcuF5 z0n+cm@vdsz6FV-e`@o0W5Z9}iKuMb>o)_byn+2V=)e|ckIua%#OJm}zQYZRj4!3b| z^}V8@Ds||Xc+#+~xW>kZw|egBY<&ZIRnc!lVa%H>XP5zor?;O$PbCE7lm^~?lGQ5F zQ6FRgg*Qn#2@nYeme?&fXtM{$A!zqH43j@RaCQT$Fl?L@WZkkL8Qj4&JQ*3eh0p! z!nnQ%hXx*T;$o^DT2k;vfexX$fo{6NNU*T*1tukFij<7Y zvX^!R@_&HRvn+>}B&CZag)FyV86ysAOb8eo=y`%9XOM(k$wa4z3V7-cR=|?~V2KF$ zR|M!m5}*grrum_|jsOy%p?;phSt5tDfQCvzm*)Nn_54hK1aw42HwyQ=s#YjntZOT* zjtF-yaO_?AhRUU6vEJa^%V5DsN7~Uz5fUAonDGia97TD=B1EL_I>twfdMHvh+edjs zgp78d56$%#Jm2&8l}FTi(I-P;)OQJK7x{2Sutf-rK7M+qjx0!FB)-u`8*aQ99%fqphNe z8wB<^4n>2`uA4OeS@cl%cV93&uESr&?xo)M;R<~XY@Za{k@rQV8+qfDN9fHU+Hv%c zJcfJG(kUzK{L%QkDHVmxHbR9*B%}btyF-Dcep3kT-gAP!&+^1J=Dxly+sB!J?aOfnxoVZP<9!g*8l|g}zG8<7VVA6=Vkv zqfcynA$mv^W{brsVm;}~{JP&npo6Iid&V9U;pHO~g%J;jpWuzNc>OHl-jv*%9$fYQ zt4EuX+kqSNC@9?Q4-P=?@LfM|nXln2g4Gdqu6D3hI% z-W%;Crie#AJp`4j%k{!!s5E^_gnW>qRJb2tno>zofKOSf7OGLbGxW;A9!$S6>$%21 z%xFsrMnxT?>`a(K@upCrKw;WHfQN?2OJD1)=W{18cah?Ly972gC1dt@i6Y{>&BO04 z`h)34x`ZdK~hIcdnA7rFJ#%L zayTk*#BZK(6YBtf2|r`lugP-g0x^TiLfUxc2#Rz-?g%2dB8j5Br15L1J*4UJy&i(s zjV=lFYLYQ3tyf1!Z&(p$AH7c(2;t~5De7r*`2NY%y zGec!&9s@I;M@5|BH|!4%K!1rrJ_}QYfO))jj^F`7sk5zwI?xTQw<1FH<(iwEPnOa`L4np=gZF>^r3R$(rHb>pNjTB z#0%jqn3~`bEt-lDm%gGrPetik=-5)x*e4vUUukv>h0oyMj^SkvgGAySixqQKc_>XAPZn;n*$(Wj`$*(7t5 zSw6msnV~HT*JI_A*u!0u&m(u2qd(z4Y|_$6Z0t_qi{3TJg03LCvCm;_2<9aq?)3^c z=^!sl2qI)!xG+ix6?6+1dIC_b7z1;?w9eb5Xvq-9YDt!_)0va@OO( zFHV=$^B=DWuU8f%=v`%Gfd=a{NhpAHJ%nqtD{`T)@cr>As~#aSS@3T5Y^G@d4xEI! z^u4GbL+E7gq!URJ?g9*;_L2}z2wI2|Kyk-FzTq zz+`!#mI^aimU_Ih!d98-r4Tv|rz|rY>C+IhCA}0V&uaF}Q3~oYS72{?m+^UfckbP< zQ4h}6h0Y$PqJx&~b)#HoF*A~-dsqK>I6<7Q6dClpL4B6XHHz`Y$j2$~I8F)wq_+s) z{!5=C+y*BVAwGS1yK2&wp@d)XQSw$#N}UTP%v*I!C^F9kO! zM<)1~*taNi9=UmrfXrk0<(g~rZ198yHRQey=jiBEc9^R*#h3G6W2vC5w4Dxl;fo3D z?r5ZK7zUw)h{H+y(h$FmE%+O@`8a#c&vGrL`Vm@RRyIiPr`1oxyA8Q|Xl-agTI{(- zk5T+FeOw{{+a%NNZM59vUp;cBr>X4D1R=m~3B{Lb*`07f3s0=WVw|m-N6C`DZ?`wVHo{5PoTZaDBK5h!N{<5 zF^h$O>J=KCZb9dTl~JtB{u?poNQ0=KK+ir`JY&DA=&iMJ=mr$L$cT3T(Uy$=i+v zsmMBKY5Q+}lk4}J#qKJ&?bgfOLZ{H~EWNgS_il089(*#*bI#PfVZS<3dxSLlF4B}= z9f=}zq@Q<~TQ~U6wjXbs?&K@mb4NmjZ20lmb8R@MUKwDhaH2Rxb1SrAp1az4wlcM{ z-Q#cHSlP}Add9=Io&vGyjogt-MxSA%%l|@jH~7!9pKhB;jD(-Yv!>^+I+H5f#VGA< zM`@cF6;;}1do(Jo&GQfj-f+TV!NZ&{Y7icM+vacgYKjLnnJ+`KxI}1rbPU6B_zh?1 zoV=w4f_bhjSG!~sPK~zWQPI*sCpZdkj;#CkH}=xY9IuIgYZvkijeA2V@6i`ahsb60 z8~0#*v0~BcHF^Xn+*^MoeE`OLU7z?BJH zJ)U;C^CL06&AIH&b}>>sHTpEp`6K*GFd8JZIwD2k{JGER1=Z3vtwU(tc#fVMtpD84 zY3W)Tek!_Uqh6fo;9sZm%zV9_v%7V(H@L;g#PD3_3{_<KTdZdPJ@&noiaQr`qQ&kMUP2$YXd6+F`E3D&P#P0&aDdVj{T3A#8V8_Bkwj9F|=U%T9-7hr?3iuxyL6gyHM; z;0)il(X05d#H2I^r@FDj>`2>N?H7ZCzcGV(eGInVVulFX=^jtYA0w*$rrU1?8D1HI zS(rD>`N&ROnom4kc1yoL0MmupSfH_liGxMQL5vsT;HetHKi7YW=NR^W?XGbCVI0gJ z!p^O3q@nwirv^7io6K8iLhadQw{C&5+a;c#gQ7#&1ETAG)1RC!SLgYCOgR5&%mn_C zsSW)5G4Y01p8~NM^QOS@nK2r}E2H4b4e&T-=LUHyB<2h+ufQ1FkCveV8*1LE4btTz zF>SA#7DbV;=fRk$&Df^h_ds!=*SznEhN?j`JzB512AQAQPquf~Qx(Q#I3% zgt$b=A?y;yVs*wM#pF9Yp`iRBqa37ARzgd!dES4b0a0QG8(x9N3~#Q^{TqDiI%oGd zEPLfb9+W%S{WEyVHUkLlysvYqasxaY&3JIK8WhC|rt(K7D&TjM9j z=-1WG_KcNCuKVrO2G3!8sfpufN>rV*y-1Kh3flYd$ymAv-w|6K(4jyl(sM%>N16An z!hV7?A8rV!CnzS$@EUeYyi(BD?)k8LE&Gtpyt3yx{-)D> z6d!W?=-iU)7sDV%<{gn|v5XRxw!PG^vsG)ZiAvikXtn0hsI*;zHrza78l`1;Z4|hh zR^vhGZJ7Y;fi|=}yL+X>yf^xYp~3};E*;X@dLZ^$tP7g=A|xs;Lw=vlG_@qqSy5WsQ1M%5X)QkHyq5Qz z>9u0oDY|Qn0;A729LBOiqQQaE*hJ|9P)8C_rgImJCpPG>L_Kx{SaKb95!k-=^P z^{nV7gZ+M34u5x;T&E4M&}Y%1!_SlJ)Ovg^In2#q*F6N@ksVpl7le^Lu}qzE)3uQ->}!sS>x|bkocp7Sb;3PSk-|`iaMB?(JA|X|qpVqMcb2v` znfKs?2TFXqn6?M|%4s`r?rwoI!T+ekybF599Oj)O{-^CS?7s&e#da%%;`c|yMcvLx ze)#6lMYq$3$v)7-stcOP`fgsEC)fBjxq%U>rW=%$E^k z^C|jck$hp@FkP(gY&Gm}$9WI)c@0m^S~OqAjh-+V?1qP zw|>mMM;v8ErG0{JYKQrgIM2{5ulW-X?uLI%-O7bps_ZOm(v8Luv13_LXl>?Z+!sYX z&XOkH<+w)S-Has&Pc-&NF9cb(l1$<~+T znKRD2aC8ec_jf|eclwSda|@j*YcijgjMkGU?>vujg;?eT8sq&Ycy#z{!rCCV+_JEt z@+>_EeHy{EsnJ9^tILYA?8NRr7M*&U!-nWgRq=jVP4QYyL}R=^9T#y2VFfNLy2ViW zkHE+72mF9fx(mv19wb0gG=O^)92YCxn_Y)ZFi%RPd=l~!R-z-%LI`&9A?3G#f=AM$ z()7ZF>{`Mb3IbSI(F+e}*TC(J*X0g}2C!MQC`Ir2*EYs${XGw5@97O(>kIrj0?|#m z*Wx^?VgGUQV$Lz61spckyF%+ddZ#XaZJotgp%4Dz;Enn&lqN};!_sCr+^Y0}otMyu zXF1ZYJA}_2rB@x6?NWDEd1-^8mO4Z`)a(LhJ84+4LnQ3x?Wy94`a4?tl|i_22_N=| z#CB+@vK(Y}g-6M4!$hoQ9o@YfT{e0^Eae@HJm#>}V%3b+$1Gj6q9&e+OuK%Ft)5+_ zI(DS(5!0@ZzA*ZfbJ8%w{vH;Dj?7^HB~n2zXR!Y>EQh2Xu*dMqR&q%_V9$E&$T$QS zwBA66j{7X?U+x5FcABxwFLi>~s1t0HJHhMjy}$xl;og~@u~H{EII0Lw+~exUzEQ$n zr*N~$T*taS%U&_9PJ7IeR)cOY&6zZ$4X@=mENHIVFhpWo3M~QMp12Szq0M&dF3zb7 zj6Q;Hub#TST_lb6(p^x6z`DHvyLl_Ry>00BYV4&o==MbOL0pFLn)iAwb@tLaZnLwz zN$UB$o1#0-U5H;MOrWzpmi9B&cCkfUSMMGfgpT4SE?lDr)YhQ`Y+@atxho6zI*!vH zi{u3>dcP*>{pz$`9p-k{`_*E7UleZQJN`_5SN)ZdXTA*j8sw?>a|azybO@-YcJzMc zTGsou`+C22^nRB1@+++OyQTDg->}~A8|1Tt^?n`P0jc-1+-AMs?U}6iyG^}c2lam6 z$h}{e;iX?9e{v7F2OHU}2W;!t1G;d>_Y>Thp-#-=s&^aTqZL<~#&N?-zko1^=^tZq zg_}ufHIB4)2UaN3y2P}PBQK6_9^F#@DG8Z#QlKLpqZCHSW`jM6308~29uG^cBv|c+ zS0J_cacy|UkM_+^X{_qS%Chx^#B*IX7on$a5UUz@YB(g;a1x72AS_GaK21l7&3>7$1 z4FyPhouxjpH18EHbr_8;wHP7iI4!N1@MBDF6D@lT`_bG7+pPyN4j-p+ctl|I#}LSi zB#;Lsfjr1LR>_HQt$mZ*)RN5wj<|Z*6 zmjbSxv9@7`q`ee`=@MECbrAJl%RwAlp<^MfsEDUKKPmql^Am0p9v^VYvGQFs5Asl~ zHtG{xLG?J|i#Tnl#a8S{IG5@i>6mNo!*15A>@Z*&8p1Uv6qiwdzZ>a_rEQctre(og z&~Y)%g$w>)((Q!{V!dZk#-QL$#u~!#hN&+?7_zXc2&LA@m{;fFJ^M-P&6P9T+9z7eJX-9LRV~&w;)xHG@D`fvFpV>B+@#q~S#*TpKL;(VgJNDR{&x)b z4&!^&+t9Gz7^~IbELqR-va3UI|GFyK4_65rV^O1T;mU1fT}OkF*Ti--=y|QZS=Z5^ zBU9hefc-9ev$3NAowdE$)Y-t{3Ncyz#1ro^T|LJa9^%j=@uM-VK!fIoN1x(@aJ}T- zA@op|CwK_mIrjK7{Yc^ononx6-AQv0%vS?~8a;kNN0t*^9quR&p|fGQsnBr*T3~9y zI&DY4PxL#E=y|`OhK?gT!qSn4AK5@0`h?_|Olf525yqomP?LE45M%KaKQj6>7&`&R zFwPF)R!WS;N{pHCEryh|D@LDL{sJb_;EW&6Og}y_`ix*0LWS61Z;ovk5=%CDmWZnd zi++Bwv^z^o?~XjniYV8(R4TgTC^{<2<0wianSLD&CNectqygo}iATf!6Jq@#DyGqm zhlx`@jJ=e{-#?A=#q05DbWhMno}oZT5qKyXig@&C-iY#pk3b>tVj=J_>~HuLm7tUW zqy$$XEI4U~vv@~FpQeF2m_8JLhb)S%u0i-R$5@Pg!i)J`$Viu%-u0i)$LL0WoW%V@ z68Cu8OBfFRkgxtZfD}+}zb6+E22~y$X~DR|(h)Uz-z+Q$Rya`r*elfPwT{vohTqYd z^7e|l4cc7ea!Iw2)_w}Qh9Dp)?Nhp6v4VunPbwJLG|~mvfbvsR2V(R4Bo3ob@K2yj zO^7xEW-QF$=o8@ol+6Drxdu*A4ICyh7!4IPvHXY$b@+OsRi#*ljp{&dL7LN|R>;Je z-y34fXtTca?C1+YE%+oJgd1ix2yxwu!8jSSCs#CzV+nGDnbpn6vlYiEKT9!{M;(*U z;9icLqvJYQNj6BNV5Nd0sbV)OD^DqsCDxB_AYn2g7}XIABRIN2xJRyzK$swnrgvfV zX}dd?f4JN&XTwd|fKah)kV)Af6F1<*=15C$kU6-s9_7zkE60_w_j>3vBUg+6*}#m= zZpLQ z`mTxIB^(=gt$Gmu7+xYAjh6^#kdYyne0UGL}j`P3%Z8enUjim9~Str5;d9-G?6 z55|1Y>$UlHUKHzJSgyK*iVb>p&=iLy=f+~1AL>}Fb1c@=`#&#}N)%j6zzsKiFSuy$ z`;0SYFdI7_qOrqhw;DO|Tk#@PuPcLy(4{>_W5;Rn7QQ6dSmM%l;DTJx3GD?(grh{~ zNYrDP@Q+S&(QJpQE2J|E4kQ1VD0C4?obJGWsj_L^i&3KEb#aI;3O5+qh-ah!1LMsn zed#Qgv9x%&(Avd`ceKaEZx~C&<0TArpMVDY(!pUly~Btc8xBo$20x8Yl<4Cic!~&i zA@i6oci}c4ALg7x1K$bobW0xiE;{gl#92J4W4TH9GCJ6{d zp)dVdD?HJa@+v3-lBh+6t)_-LTx&U>Yblp%NeTTp7DA9{0`pzcm zT!jccQz3>T63yB0u+}-sf>#<@doX`Ej`~W}A&P|0pTo^X41c(A7>Empx%%ujI$FD8 zF%4x={?t|Q3p>pESUwT1DfIp!&T$xim!|hTNzIWHxoP;Mf-baa50inLP#AS$>AsbH z4B=z#NPn2{<+HUOz2f0|9*Oi`Xv57udfLp0IRsu$69&Vr>%4LV=cqcb$j{zohJ|RQ z2k@?F&%J;k@0bLLzjO=D=^PJvb-$C@gNLflyZ>zM@#4au-Z?#3tR9Du$Y$4p8}OS= z577M{w%V%i@UZJ#H}IX!D0KI)DM}@kKki5yDhyPcyUE#uN_THTXoHU;MF5>OjA9pT z=|u4$QS5dR2QBUwR2j>)Lb{mms+mWZ8wgwFW^Jw=Uv(#KCLkX|FC zOhS56L2{yerdU5sBU&qW6SCZ~H&@!&yT(-Gmd+KR-@Oo4cgC7r&a9I^jta zWtk39&V8yb0*offu8U|dxItk)s%jEPdz_YL_p}{qxuU+y1Bt9{Awtze$Z6T?-i~JC zv}|*?t&sY~R%X_^TVN_>RgGH})OGJgbg2dX3lR!|_FH$HiX*3`%$>;S)ws7ZI@{b; zYC6FZolHiDDt9T-NhUhCu2TB7Zas^C)Saw~H@gC;Pq9c;Yhx%<1w}fFNF)gIkLpkV zW-s5YKkI~))z%R9&-!9ReiT`#0@c%mrw;&L0r2P=-Db2fl&pf(45VKZ(j-Ef#rVD9 z{@F*W^ezMC6+&4_C}V*#V3X9l|6o;D4K<5oinfKKeRV~uiMh*FlxZ-W02HbCM-y@_ zAs>;EN2!sI0-5t6cRR0yvJ2jWLe%dxIP#89WT<7$g0kboE(D9Gokb?sC})p1ms=>F zZt^G3%%i}5A2hOGqIiFzcq^7S&@Jg~3O^7Vg+y+j0zwHP>|%ruv?0hn6wwZJQFtgN zyoJImSa|l&$X+7Z-y(aSWZz5nm6E-l?5UD{KiLzR{lK27pxAgG6i<-v(-OvqWFISG zP-fj90)uhq{@ps*h*@_y`4LC%{jfFpCy((nb|HriP5z5}tt%Dlfm9^r{skJ?fn{VH zg)WaJ?=B%izaqbppAexvIPYKE08Oi8aSz3`10(ML|5HjJ@g6_Uh5P2MfM!4~pwZyR zeFEqJ1RMRh5rFZ4Nr2gaEWjqf&j7yz90jxht^&RR^Z-JJ`Eg?bPXnd{<^q-ivH|M= zWq@sfU4VB1#{r)JZUaKW(|Eu_KqkNjr~qsO90VK(Tn2mt2)-BT0Ac~jfGj{6U<+Ue z;CFx{fKz}rz?XpA03-7GC}2Eb3Sc&1CBO!#0&EBT8bH5)MLBE(lmUtW%CG!@#`uqb zGk|u$Z9o!)eHCC5AQq4ezaoGU_7Q+_0409#zj4Mf?{mfv-JJ2-G>!3BZ_s*#^xOSg zjqwA7D{jS{n`6t!funfz)SQA9t2Xe~V%Yn-ZL247fEC47eyw!_M|KXQme=%+##r+d zXY7I*@d#%O{ub&kBBV5u0G%p%}lgV_d?P`Y5}CUVBIQJirnpk@s4 z#&O0r*xMcl&ZC^M2+%ef{!ai8*Hz1avlXxtQ1Vy2mIc~M{5r%Vp!n?ob$k=>lL6}Z zIR)!7@^Ugw#k?)2V2!D$usDa$DJ-Q9d2W_p_3H2kcvAJJH1&68nY9rpymtSZK;CELg*QslY(p zv^t}h@j~{z!qpjhR#QPnzLl#1O>Pm&DGg-GaNB$!Ds4KH@>-~IZpr+`J% zik*JbU$QjWGNwn)l(QonZO@M>;y5c@X2AF^$Z;8HZbCYMGQif&NDn{}vNH0D375AC zWUyZe;@o+aGfu2TJiuEbXI%8MRNounp5o}0m+mc`ai5bjR=vU*=OOGzRh+RK@h1cS zWCdqDEyI@xBM5~5BLGT>li!t-uPsBhgCw8?;EELDFQk z*$Qo-`vf2x@ixBB8RKE!2m7eEIOFQ#{5D!}Qhr$YFy0DdCbToiIf7<_ef<)v=-(R3mJK)`0#L3{DRb}rn!Z@$y!h- ztjRXzTk{KT8%%tmX?0Z^5A+4f=5-*gNnvbOT6{)i< zW)9}uG>dt`EMyXP%e=Yf)VKvp$R3}%gdQ|v{_*pYlHyX~f`436635jvqV3=peVjAy zg8e3*G*LOP0Q{EPeTkl^Ls6XIit?Was3r&C4$+Ec%hH zm>1TqFWK3@0cQ}*w!*X;kNB|uZ|`=|MVKcxoA zd`Z*$&rkEi{weYA&i(&gpTE}vD5VhmQ&J>XuieP~zzoZ1{qcWTZhNteT(4cSY1lAV zR{oN`qVnZesvOng7U!$4ZT<02e!A`TpZ(+ZH~#78JKp@~U+jGAU*6ue`(J;#=U2b} z&EDVs?)NqS_J=?2d*|K#wFlmN|KJCQ4%gKmX*l|)#-`?D$4{L6_fw}^&YV4W{=*9& zwO;)A(&ayY@*iziu6}y$v(NwHa$on{_~Og2+Q0th+nayw=`%YR5nM7uG)+lfJV?(y8xgT687EauCiV%WUzxoUKaMLYD#1?=3~mso z*Tc}`A2~T|ctk`5%tZW~%H`wVR1ROQM3u{w|BXj~Z;}6*m>>CUkpFQkhg?a)sQwetz?S#lv60N zC}~S(ft(J-m(o_!g*>n{36IhtIvLtgRr#g@ zOYOFx{0dZYQV`zPO=%NPlpe=P>2UbmCEDaBdc-@?AzmpyWF&EFe*V;ACLEdgjW=2F zGm&Kjew@YfRA%N=u;7=B>W>2?SXW!~S6Nww&n;Z%v(H=27m{}hzJ3(XIAM)IU*ofd zJVs--P{1lOuE>_d>M+B$IvccSSXbGE44Z_LQNXN7hXZ{MbcrShT0{p>z*#ajaG(Lx zMsc~>83kNQ1~1q$5kT~8In0)tE!c`>zeU!}0;}vu6(pObuz-c82(p>MQ(O-5IN)=@ zT5O1(}t3@qNm7Y?VM8QIDc%@LyZsn(U!eVw*O3J zcfwBXm42_P?0A&K=f72D#}ku2|DUMrKULZH`Ss$wqq5U?>tF!rF@=!SQVJk3Imm?- zEuY%2jpfAz42~PZ1u`=gecwDtOG+OcDKv$fh4wykfDmeH^B`++3`0#_p}PQ!J`w0) zBUwrlKqC&^NPPnJ4JJS#{!))X{8_-kEbwAtC7#LrvKYtt3^yA&DTXZre<=p_NqK04 z)VEQ4%Rz3}z*WH7Xb$V6)U+r(2WjRYJP&_gl<}yw1hUp7(I>o2gs*1d)Iupu6H=qT z!-S9m{M`WFDOCz9!at%Y#mGTO0c6F5+)yqhs`>Dxp3lTE*MfhEcOJb3<(?$07!>mu zP9c{CKcYwDijp(xgL=zp0xPF{q)mM#^#LZ#=AVLZ9;iJIR~G0Mz)g83p2&wJfXb6{ zbazP=Fdj*Ar2d@pN7Ap3nZS6Wo|*W1(kDkseLwB1?*hc799w}$rL_imH6eu}#HCS% zs7loHU`n|qU!p68$*sZ*bp%rVJ@6{+ye9eR{qXWy0nTYQP=a)Mv{@=4#YK{+)M9UHO8rdaqI~HMRNsZDRjMzk=cD#q z$a)9rC9UWash6@c3as<@)%(PLazxw^CF%#HzJ>ZJl9_?}`ri7SsFEMz?`}HzC}ry9 zDCgO%{4-eJCG`Po|1SOijJ)(siRNxp#!~4@^*9k@6}f4gqSB{cfk%Hz{b)9PXcVB? ztx~p9&rBtw)R9CdLRCLMTpoz3B!eUuG+xult>!O6RX;zRF3pQ+&aF@^_HnDoQv|+% zlzeBQUJ6;+P_IE_T@l=5r(T>!CmQLblA+N<>fNO{Bwf8_LGnPmdV4NwNPiiZ43p+2 zU6(XQnswB`G{RgA6Bm}bu8%dwd&nQ=z2py*_JLd%HO2>EZio3G%yBRuf?3;&y+4@Q zFrlG?8wYbF%#|NuFAQea1+4AE)PIPzX_&6_P&W_rB+M6K*1+tBxd$fgURS}iu(m>AY>+$zFU{l@nO~H(K(%fwnqn+G`+EmcvxLJ95)-@S%z9@R$taH<$L?R`3@_;}%$p3kBP1t0~i(kx4NSp)eH7`92;f-(q2Pw!$hmE1x*C z+F0HZpYd)j$tmWGQ4YQ`X8H2%KgoqSo%WkDGi~&-l5Dl*=M)!Ht!7#aa#%g6_Lx{X z5r00K_<}1cv}NEcZG%ZDP}Me*fz{bLd6_1#MqfhM66Yu_RvVet;?=gCB8U`cF0rmQ zWfj`;Gay+qPjR+2$V#zX`_j&B-#nWNZ9cA1UIj%0|5TyC!%&FKf-u@_0zNX4rXs7f zB?kT#S~6=sH{%VIRYlLuQ)-t9Ivn{qJc&7IDC}}VK@Pko6!Q=bWK(gk#b$VBVLpew z*PH@;X=a+nLZVh>tSJNzYK709u(l8zjIuo=3wxXy2$I|;RhUT?mRGng1Cm=LSZ#da z1Vq7jZJU6yE?{wsY$l(*03B6Y41({qniV{h(o$&0!Jm$9s4DhB^wj3T! z3u#*m)-eCoFIw3*w?a(8Koe$c3dI?mfXoWurFcE0hWK7@&CDszo{*JOz-T~V3dp?< z`?oI&);wZR@e^$L=*MTc;+FDbV)^m;S#8)A?~PNGVas5V`uL$&0bwOh0m_hJsc`ZO zGp#mcPQl4X+gOdY0L6`R$rNlElm(w3(t&iN+*E$nJX3K--nxuT$gL9Bx?1StMunrY zLEU7t7745Jux;(bU5!2J49cR4-_?bAh54&;D4AY7G#u*ilr&Zq=H;vdisGjJuz;5; z9PN)sNm`4o6IR(WUd+kMLB{YaD73A&u7P7h!3Nlisk7_#TUEFgdFz7*2V{VvPf+SJ z$40eB5&;w8YasoqV8xv$lwc(XJvpt5$vDV&Hg7G!UOS{p_RGK`54ul$nb|O~Wc!j) z+?(g`Sn>C@KiVLd+n*A~+M%j_DgM-U6nict zj4DlWqi6QnA#FLUR#{o0E8!$tiX9B+yokzF+$e-zyVRCgePs$fio};aj@lhnDsMyn zX`n@QDSpN1STa!YBqP0k7=v@NSf{P{QG1u0yMjk1Ae-|QENCdHvI=4%z;SXrFHlv# z&(9=h22p)}WZ(O_#%P|K#%-6)3fU}SCRRpa&P|%mWiod>w-V;k#6)fxGiPzBFyj+b zxLDbLyzCB@!*$G^%H8}-qSFSG(mT)0IPNGjlek)D#&f%vIi1_i%voF&GiP%fnYon9 zWM&GN$jnqOhM6CY0Cvk1eOyOE!CYa;6gUpQQ_AoPv z+s@1st_r4k?kuhZ=B(5dE)VA1c?-D3vYEilx!ib|$*I%1P?+YF6i&~~>0H;R@Z*!pwMXA2SoUUCf-pZDppJ+sMqBTsAWkxy8)1aEZ*E%S~eDEG~?hah#EvOF532 z3%DCsDZMoAGBcNO&CFcL)xu0!ID@N!nP5)g_LBeHncN;`rg6Jua|g_{lsIl1%$d^{ za9d!;C(h+6$Xp8kWdA(b%!D~NDS=xIGjYyLE{WVrlek3LjDbnYH&j1BNr`}LxmFg}mtOsN}+to?|r#GDz^b((kNtTyr4 z7|JtE7`SYik8vx}Q)jHf5GFpUyzzQ3p7@m6Szr}=tGav($cb|L? zm<4WSF`7&U=J-@;bXv8SkSv$htPJ|{ROg_#sC@LlH@?JtAF3;9-b0l@{Pk(Ga$_Zb z9__m@OTt-4A1bJ`b*otIljllV63D(B2huhI#sXqurg6_bH;o$u`%{1kfN;PQfQ=i0 zGZrSr0c-+{dmLv*VIm4!DL`~mrOAx}JO!BW+!Gw4V3h)P0{jVwV*-{H=o^!|40v-S zqoWXa8ekOMF(C3BaAa9#a!hzDR^Y=hFK0~wzL{36z-K0k0$X*k7xA`dCc(63tjZzx z>O7nLeYRpn7Eb3%juk8T>>R2y%vM*dDCRSLI7J!cEv13;e5>;iP90e0IP#<4l&^56 z8W08u1q1^)z|Ai;#v6cZfL6dsK;lu2@hHrLfUQj$V=c^mfEvJFz#hOZz;?hkGXDfT zm|FlqO} zU;=~y^Z*WU^9zmfGN1);5U>NV5wHvp0~i75x&a(OEnqvK2#^X$0K@{O0LB4yfNl@Y zEd$yBM*+J48v&_+@c<5R?K;k(19kw4011F`04l!_m|bq*0FDCo0H_`U%F13YD=))A z2JOpbFTYe4;_r`>43(9Y{u~z(QI=d*#p$_mk4;HlREBd3ILwfoT!m<+ab;Cyh{fSJ zLw0tyUO%X$sAzprQJ-@RI9QP^tuQRgDab5bpF)En_G00mR&2FN1M{o`X@vm+i$D)y zNf59&EMTp(CKnb7Ma)lfOJq0;)+{i7PA@E3#HC?hkxqQ{KkG4Z^!&MTb2)C}=vi|y z`(S1QGgFv646Sr(?aCY~}egvkN{EU-ucR=x`J=_GiQvpSQ zJ#rY~DYqo(Og7=i0w`_~!ZhT8pE_)d9GCnl?he8QC^WYq9);-v>Uc+0@rdquxG&3o zN*s#!eQ_v^cv8||Ngnv^fu9NYBgjtqq!rQ#xR(J+04D*#HzALJ1i(sw+D-9@2CXC0 zPn|x|?Lrvkg?{R=Z3rVjN|WO5g8PT2H)#}J)TPMyscE`on&htobiv)9e+pCA8@UNL z8PLDpl(1M>sN9rtR`NsfD2(c+Nal$$rRHfP$_rlXNBCRd-Z?-SD)9+%p!mxD3o1{g z>=ZsIu9A+D7?qK_Jcw=${DSG;hx{Y?8v*w?K!WT~I0MNoi}$D`n-pEm<4P4xid&?j zN4UNp;;V7VzYKmmRq=_Z8n_PvT4jI28Hgu}xAS{=x+%w{G$^hPcTg01AA~!Q+)@0M2qWIG}MT_v1MqN9#Oey#93+K!rYa86Qht=KIt}tC zn(FxEHwk`wR5Xc~TDXq_lzJnaf%2e^N3@cGce5WY9q!i{0ZLgB&Oo%(@rc$g;Kd>y z+381oCBwZ;MT>9-qNR>UagPFTOFvpW;NAmJ+8^NzM5}+i^N7<1Q1Zit4IJ+%a42o% zX9AuPcZ3u-$+HRW2!NU%;SD59>bOKB5qK+A^e9dd+#3N(y%Ekpc~ZwCTG_zctD;4` z9fbR2KYD~W5O38KV!3s7R70W zyG`*!IK#sqb=j-qP&kbj>al_R4#F=C^FXrGkNBJfcPv1WVZs@RPjx(sYkb_#Sk#YJ z8Qfb`v{>6djXdK+&da>9AGhEA3*mm+S`GI+U=`psz(K%uz>ovL2lW3@UDVY`WqShVqqxII!q^7 z)cXHspR@IVqVN6x?|ts=KJMrFo!NWOnl&?P)~s1`&di)~*hfnE)cTd*MS1B6t^ei7 zr5&{7eefH{Wf^;#G;SX);gNqD+FZ~Q{#m~8Az%1}j|Y)iTJ3ba7^ip^~2_5Or{`Q0S zqj79X1m2N6TyGw4lPW*Dt~|+e0CbpyVLiQRqyd)%aMIP%0ZqB5t4V0AS8J%M@Z`Xg74Ys_YU8N)9`IX zIwYr>5fZ+8e0+XHNcbK?Xv=WzaTy*w1y489I9LB0PPD(SK%ZQ}&!KZdQf88;2Q;KC zG(snigybE$igA{K9U`8{pbViScQUsjasF~|0X=!n_vLv%Lh?*PC(r6Gc@ZAuB6$+p zT3?!agydbLFKqVlAa>;7X?TRZ<;^z?A>rXd=;SZ=>ReYu+n1AnoG)#nFAb@8_G!`- z`)CP|ic`?K?VP+HX-iJ*pH4L4L(l|Xq}-$ot+*%e4tC*B-VwQd=~sp*>=VQ56E26A zsy?n`iKn3*=to;{8rms-v{k2}y~mGs=V@ry_|XR8Y^W0|h8Lu6XT0PsxATnu#Xc6lzLE;r3i#9e$CLMOymIRJ zS6@AK{E@28@#L>^{PWY-c;m^tAl#p_6DJtk@gKfNg=_{KI{)^10W_}zZoF`Q7`|{kaeGt#7-p<pw?-K7XXHuTn{hiZyjsNk_&hfQf z+A}S{YipePcGbsaeLKf@BcWp=Q($4W+^MCTP&hcH# z|Ao>yzAOKiaGn>Dvm>9b@*6R|bG(21{_D1YkX?X(`mW{cv!ru;*Yat1b&mJv&*Hm- zF+h^vS!UI^kN6;flKYb0z_r% zEyNo1?IG&(aSCnJ@IPq8o?ODG$2oJ}2(0DD0yHOXvn`=$vcex4yv2UgL+LuUr8m;)RT5vteectNR5ue_gH?ldRWe^S*i1|3ca@Hc&x>=8Bnu`Y{{+Dg|U((8Y=};eWGo$+a=y!B_4XB zbf9~^$=g`_kV3BzsWegwvMiO7NZi=rqsjf*&;@9AdP+1g5LmrJJw;;4Iv9_4RasXKw~J*kU(gku6b?NLhSE_^&=;3{=KfM4+28S_f<^@tIqd+ze8%! zjOSt;2u13Bva1qn(#ZR3t)UaG2&{!mpP7tv5#62%Rs;rwdCAyJke-caH`dX)-QG{o z`=@ix;B+GWy+eV{G4+g zyW@58a{B6i>S8!aJJsKjo9{Tu(`9Qn!^z6+mBWmjS>18yP6%Dv!zquqDyQIgk~Sfy zt715CpQ=s08xfQ3y=;y^{OdChqXBGUCj$TYW9LVnB!8SQnM}@EJsDqUBw6w5=%Rlc zOt53@wVY1M&N?~^E3dQNM1e9=9SZ+4k$i0hJ4uIAU_Wxs zoLi^QOO0~HW~W^1!cnQN@uNn@B*eSM504){e&TQs7Ilu<=YIFK0qZb2ca|CHB+2P; zo!o8`WnVd^@J9jXB5Ohk=qq}J)Zk39)8S6v#e=>U^xZ*5JjtVW)bTLDfAFzm3B~b? zjK2OP$78&AB%a{Rbw&dJsRaD{D6#Eb$DFc{u}-HxAmmAegeTFz{(z%v%QAnSS00?7A~WQ{5b$vYB~^~EIaAAl1__>#0FJQpB*Nv7l-IftU359Iyj z0C_I}0YJ+05HJ{6?t5N=kd$vFK=NA+5W2SjQobz!iQf*8_%H~C$cKQ) zg~X9Dhg`VD7r)p?@JT?(kcIyl$oFwXCe>T9=K`n#DuD`MB~T8O0>wZfkOyP|X+RQ? z2qXY;Kr9dgcmOw`12Vt^G!O+u0AWA~5Cjl<3h4L@nZH9hqLE9nkX;EHe4LSZ>L%#PI75`%Wx9**CIHAMDd3M6?-gg)Oze?}$ zaY85k|IKjaZs;kH1xy1x01bo!6mXygYZHMwpd2Uya)AsW35W&U01dc+5P$*>d<{JY zs(})K&=w%fAoqX=;DJaW3G_BK_9pT`h;OpYaZF$^8Gz z_o{ZjWWk8OW6x^J%s2EV%8eP~^| z=ZD4p9$dWSZTC9;^HrbxHR`h5^;_MU8(WIL%ilEeokuE$*4%aTge#Q?e$Q&j8&>nx zvR#LsKK%V1FOG{|v2VeihMxxyDOh}kCo<&17du`F*|VYU56}0jn|}HI``y>w_UI?W zQyV^dsPC#*$_MOuZp1mM7Y64nzB^~ZrkK%*!&+BAqG&?(>p#SgUcGm!v0WBjzb zLH2o3n;SO!{^9Sib&GNK_UE$5M~5{fMf-Z}1CP(`xAa%*!>v)N1HMVT@U2gOvKr4F zSTOS9k(C=(|7f{atxeB(wby&n-QQcBQ8Vney`Pt?+xD%s{^-#y(+keKwc({!Ye?)3 zyGPf(U-Ia_P1eJ8@mh{&bLjg|zH057{Z5H8{N+nu`=rE*7`XA9ns+p2`u(?A($OFCKfB3Eo4tuN!>-q1L=davDKShaHbCchODHE2}p zH6lMY{*^5^4|;HN;L6%v>lYnv+j!~nZwsePdPrXvxAdQ3W3Eq~adhc}ul6okbYAN< zyPnzdS$*JFtC}5eIzPm7%y-JC=wtU#w=>uOSOV}0$eh179YznMAEE2${!An@n_J6m z;C6H0bBDR!yufSxNWO%Bf?v*8@Ne@U@*nfN_&xl0{90jyaD^y{YsC-6yX7b3Aa$R1 zNc%uPVuYJ(%?;*$^Ps6%3#_HqDhrvoux=8;6*Narq*v1)(c9=f^kLd$B84GBqL3^s z(eBqcUDw~!H|n&Z7_r6#<0IoU<4N;5^D2wA3~L18108T9Sk8v=mJloC3HJ&W!ka>y zuwL9I?h*S+X;O@wD>umpMsrwuM=+t$GzfFv053Z?o$t``?Wu{$IRzV(Hd^ewlb}?)`!+t zq)c(x$AVxuJ%*k{U%?1We|8XC#6H39V}D^+ac^+DxJW*hujCteQHqvskchl^?KiEL zex*J{U!X75pVo&Nxkj1MVT>>*ActscF635iQPaHVW{hN~vmdd$*^yi-x1IZyyNRDF ztQWo%z7x(BuNE(oCd>2We0i0;UcN^uRie}@G+85G;E>-W*U|sN;i;>*H@R{0joLo# zSM5UmGJTdlUw=T~r~j&NGxivL&5h>gCW!OB-}{W9vo za6`FRZYr0~-NN0<-OWA7{hK?Nck%1_{d|8RLeQZJ^MrEYMWI&c5PFH{ilO3Gd9VDv z{FB@v2Pi>GU*!Vja)nc(m3U>QlBwh>&nPb{!RiL}EA<<7l#y;cYwR$B%?R^qlQU&g zH{E8s`Jnl-xyGzEYs^}+&a5{Z%trGf%LR)XX+>ENTTi2f)>(B{z13j-U{U2zb4>Iu zq({+lbON17C(+aB6grL0px4qhbS-*VJ^I*_Oas%(e9!#CbTCI4iXF_3W#_QjY%ZI} z=CcKCA#|sh-NCl7t!x{6fE|yT=W=&)1zaIl#J!C6?}N4oMQemZ1`&KDAH^@=^Z0ze zfG^~~;V%#d3&Vu9LQnBBkr!u(g<`EZOp1|4OB1A2DO1Xk?v>t>-jhC&{*-#kedKfG z^W_WWOXSPtE9I+YS{7whcFP|5I(dwoASXhj9#obq%hZkPztqpwKHBBlV2#yo)}GOx z*Iv?UwV$=V`W5;@eUl$mUHPPB;{bEs7*yDz_4x`KI zvzT+3D;bfAX2vqf%q%8{S)6Tc4EApJO?EE#5Ld>n4(AqeYq%P&jV};Ng^fa^uoE`upzxP)v-qS~F1{*Ck|iZb$18Tp6a0Q9n>Ot8Oh;%hJZ{e;FIhFU`H?zoAwCwA@yVm2EAu?zL*IP1ffY z)q?#K(5Jrih4esr1U-Yki!PFLeI(Ma=81s=eSK=G(U^af;F$=kMO}lKjBjJAYM=fw=hZiyOq<;x&>inXne=(p;%o+9kD0`=xg2H|eMpDE~w5Cl8Qa z(7hqDBwOpOasZUzIn=4e}StE~QNgQqNJ()-TjA(WCXT zdZK<7eY0v%q}R++tEzZ|hvEKT^JIy@`Ik)oQl(TL-N}L=UI{Y9~G~pf95Z z+D%WPQ|USMB6=xZLT^U99Hj%9OPN7T9Q5Q@<}fpey@|aA8oZg^&i3Fg;$$uf{dYOn z0PFQD?CDkfSbhqh&adEK;t%k@^8sj!ON6h)AI0CqBVvGbmNZ{lC_Rdv+DE=Xj*thV zM~;&;~5m8?gKfm|5(Dus;)d8ZFI; zBVk8Yiymo#v|I|4hsiVKQu$eVh_XzXqyD63=ocAR8gAo8<4I$^kz_uBQTtu9)$DJX zu#KNtd#w(O7)Kd-oK26T)9Ly2GWs#PjDC^cMSl;SW|%RsjP=aVjGO%jw~%{^dzP!< z{vdLvu}2rdL^_wg4=G-OCHr}O1HXm;mRB%d-7efG+^SM>*new-2m+p*x*61!q;ewCTI$5-zY5u-ozue z+|RQvv<6yJta%t?AF>{^p0ZxDc33S|8!6wk0NYm?Li6-ow83rko%G%G{qz&`A9PQq z52Ldy*q7NsuoyA08FvxO%eTTW8UPz1ixb7=l8F9!o4iZ@O%7M)=rinSav{bIdsH4?nb&>jz`nbAUYu2V3=bM+9 zpQ6W3vQh|-`~c#DPzoIl|L}4qp1GX~#|Rn2wzD^KTi}--;s)>;@JL_gH}Svm1BGja zB;h7_ZDqo0;bq}Hctu;`7wxvK)L|h27Ah3uV1#&$D2c1^de;J3-yAQLUS%T4cFgJuVxG%VN?keQELU=)#B5KlB=?m#L z_*~26tCXS2?aH6ZyZUE3RUTlUb9O2HPx=b_D*9TQrA1n$O?cQN=f#W{`gH})2TBbgy zu2x@BUstQu^=bq93DM8}DhgX0K&njXjGOT=F-$D1UjmcJBr(&N6ef+yV6vDzcyk3z zAydSZGG)vGrky$H^L#?tFgBcZu@P(}OJf|9S)FyW9<+8W8^6|1^qONr+J>2d7XE|)1Ahr@M+MuEIymhJ?3K-@x{= znClT@U=8Ag1k8d`gft;T$P%)JT+D3B;L%nHmGCW^gl3@~-bIHHj1e|ToQ5&B8eUzU zST8n+jbfA7EbbIr#8$CQJRr7<2gMGIAZ^wG3%`-tbAVtY)Ce~sj3|RQbi;$$Rf3UZ zq!<}SwvlHP7)3@2W*;k!N@Ia;-co-zu;QVGoO~606iIv&yZN zR)tk*RatA`!`Hy$@_O-&Rue}2ov@azu$Kp{c8vWU))Dv-I7gxf^qmf*gXmy7gbu~5 zIh=OU5p*OSg+ICDX_?mH6?o_vI`#zrKa0-B=#@w3(*<-PU4+r01ioAuJmHme1zky3 z(QD}HV{-)3FQU*RoW77?>wlq7-z(T!wvlaOcd`fBKrYDEdZO<vWPZwg4VuDKxec-r^de#;38A7$}B`;bIhgL|&9dUG&)6n+so}NGujh#0s%etbv|6 zI@}7qrJ!MvQk1P>anP+4XjYz71kEa!R!VE2S2a?dv=cMWc4$6^tyl~D~Zwbf`hLd$nrUQqVzwG&Yh?y(aVc!>8fan*e6M!)2umz)B=pY%-Ajbl2y}{uE+vU+(4!J@4fLl4b}txuBTKQEbtOS((xeP2`eYI)-l2yXvXO}Ic}k2@v}m(& z5a0KpEnGdQdS9Ca+g3%UvtT1C=nk64_*sS7o{n)aA7fn&+l*cxioPBPxz?fYx**9k z^w$c=u7i*8jU-9JG~Z}K+5OIqo);s=VuqGrk05DchL|O0W1f~L=8FZ8W3gB&hQO-w zu&cFdon601)R1U)i`t5s9>8q-h)QXJT96j3g`nPHTDa!2wLJKMme#mfZ{Tw0z9IynUery`fAiM~@&9tFikQTPFqoenD^cX!>kJA$%^=iEyGH-*_!;MIcdo)Hq8DpQ@ zs5;?0ohHnScESg3g)e)+Y{xg39p(|t1p}=h^r{dm6g?~a*!MoP#iO6;n6G;l1kOm{j0FDQlE8lf)F-V+ diff --git a/build/src/stride.cxx b/build/src/stride.cxx index 1c05dce7..aabc3158 100644 --- a/build/src/stride.cxx +++ b/build/src/stride.cxx @@ -1,18 +1,17 @@ #include "nirai.h" #include #include +#include +#include #include -string rc4(const char* data, const char* key, int ds, int ks); - extern "C" __declspec(dllexport) void initlibpandadna(); void init_libpandadna(); -const char* header = "STRIDETT"; +const char* header = "TTSROCKS"; const int header_size = 8; -const int keysize = 100; -const int fixedsize = 28; +const int key_and_iv_size = 16; int niraicall_onPreStart(int argc, char* argv[]) { @@ -24,7 +23,7 @@ int niraicall_onLoadGameData() fstream gd; // Open the file - gd.open("stride.dist", ios_base::in | ios_base::binary); + gd.open("TTSData.bin", ios_base::in | ios_base::binary); if (!gd.is_open()) { std::cerr << "Unable to open game file!" << std::endl; @@ -43,31 +42,50 @@ int niraicall_onLoadGameData() delete[] read_header; - // Extract the key - char* key = new char[keysize + fixedsize]; - char* fixed = new char[keysize]; - - for (int i = 0; i < fixedsize; ++i) - fixed[i] = (i ^ (5 * i + 7)) % ((i + 6) * 10); - - gd.read(key, keysize); - memcpy(&key[keysize], fixed, fixedsize); - + // Decrypt std::stringstream ss; + ss << gd.rdbuf(); gd.close(); - // Decrypt - std::string rawdata = ss.str(); - std::string decrypted_data = rc4(rawdata.c_str(), key, rawdata.size(), - keysize + fixedsize); + std::string brawdata = ss.str(); + + // Decrypted the encrypted key and iv + std::string enckeyandiv = brawdata.substr(0, 48); + + unsigned char* deckeyandiv = new unsigned char[32]; + unsigned char* fixed_key = new unsigned char[key_and_iv_size]; + unsigned char* fixed_iv = new unsigned char[key_and_iv_size]; + + // Create fixed key and iv + + for (int i = 0; i < key_and_iv_size; ++i) + fixed_key[i] = (i ^ (7 * i + 16)) % ((i + 5) * 3); + + for (int i = 0; i < key_and_iv_size; ++i) + fixed_iv[i] = (i ^ (2 * i + 53)) % ((i + 9) * 6); + + int deckeyandivsize = AES_decrypt((unsigned char*)enckeyandiv.c_str(), enckeyandiv.size(), fixed_key, fixed_iv, deckeyandiv); + + std::stringstream sss; + sss << deckeyandiv; + std::string strdeckeyandiv = sss.str(); + + // Decrypt the game data + std::string rawdata = brawdata.substr(48); + unsigned char* iv = (unsigned char*)strdeckeyandiv.substr(0, key_and_iv_size).c_str(); + unsigned char* key = (unsigned char*)strdeckeyandiv.substr(key_and_iv_size).c_str(); + unsigned char* decrypted_data = new unsigned char[rawdata.size()]; + int decsize = AES_decrypt((unsigned char*)rawdata.c_str(), rawdata.size(), key, iv, decrypted_data); // Assumes no error + delete[] key; - delete[] fixed; + delete[] iv; + + // Read - // Decompress and read - std::string decompressed = decompress_string(decrypted_data); + // TODO: Compression - Datagram dg(decompressed); + Datagram dg(decrypted_data, decsize); DatagramIterator dgi(dg); unsigned int num_modules = dgi.get_uint32(); @@ -102,12 +120,21 @@ int niraicall_onLoadGameData() return 1; } + delete[] decrypted_data; + memset(&fzns[num_modules], 0, sizeof(_frozen)); PyImport_FrozenModules = fzns; - + // libpandadna init_libpandadna(); initlibpandadna(); return 0; } + +extern "C" PyObject* niraicall_deobfuscate(char* code, Py_ssize_t size) +{ + std::string output(code, size); + std::reverse(output.begin(), output.end()); + return PyString_FromStringAndSize(output.data(), size); +} diff --git a/deployment/public_client.prc b/deployment/public_client.prc index f7190d31..548140ec 100644 --- a/deployment/public_client.prc +++ b/deployment/public_client.prc @@ -5,7 +5,6 @@ # Client settings window-title Toontown Stride server-version SERVER_VERSION_HERE -audio-library-name p3openal_audio video-library-name p3ffmpeg want-dev #f preload-avatars #t @@ -66,6 +65,8 @@ want-old-fireworks #t want-dev #f want-pstats 0 +preferences-filename preferences.json + # Crates: dont-destroy-crate #t diff --git a/otp/distributed/OTPClientRepository.py b/otp/distributed/OTPClientRepository.py index 8bce5800..e2e84f2a 100755 --- a/otp/distributed/OTPClientRepository.py +++ b/otp/distributed/OTPClientRepository.py @@ -18,6 +18,7 @@ from otp.otpbase import OTPGlobals, OTPLocalizer from otp.otpgui import OTPDialog from otp.nametag.NametagConstants import * import sys, time, types, random +import __builtin__ class OTPClientRepository(ClientRepositoryBase): notify = directNotify.newCategory('OTPClientRepository') @@ -222,7 +223,7 @@ class OTPClientRepository(ClientRepositoryBase): if dcFileNames == None: try: # For Nirai - readResult = dcFile.read(dcStream, '__dc__') + readResult = dcFile.read(dcStream) del __builtin__.dcStream except NameError: diff --git a/toontown/dna/DNAParser.py b/toontown/dna/DNAParser.py index ea2f2aa0..44368b40 100755 --- a/toontown/dna/DNAParser.py +++ b/toontown/dna/DNAParser.py @@ -16,21 +16,21 @@ class DNABulkLoader: def loadDNABulk(dnaStorage, file): dnaLoader = DNALoader() - fileu = '/' + file - dnaLoader.loadDNAFile(dnaStorage, fileu) + file = '/' + file + dnaLoader.loadDNAFile(dnaStorage, file) def loadDNAFile(dnaStorage, file): print 'Reading DNA file...', file dnaLoader = DNALoader() - fileu = '/' + file - node = dnaLoader.loadDNAFile(dnaStorage, fileu) + file = '/' + file + node = dnaLoader.loadDNAFile(dnaStorage, file) if node.node().getNumChildren() > 0: return node.node() def loadDNAFileAI(dnaStorage, file): dnaLoader = DNALoader() - fileu = '/' + file - data = dnaLoader.loadDNAFileAI(dnaStorage, fileu) + file = '/' + file + data = dnaLoader.loadDNAFileAI(dnaStorage, file) return data def setupDoor(a, b, c, d, e, f): diff --git a/toontown/toonbase/ToontownStart.py b/toontown/toonbase/ToontownStart.py index 25d5bfa4..7662412a 100644 --- a/toontown/toonbase/ToontownStart.py +++ b/toontown/toonbase/ToontownStart.py @@ -19,15 +19,13 @@ sys.path.append( # Temporary hack patch: __builtin__.__dict__.update(__import__('pandac.PandaModules', fromlist=['*']).__dict__) -from direct.extensions_native import HTTPChannel_extensions -from direct.extensions_native import Mat3_extensions -from direct.extensions_native import VBase3_extensions -from direct.extensions_native import VBase4_extensions -from direct.extensions_native import NodePath_extensions from panda3d.core import loadPrcFile +if not os.path.exists('user/'): + os.mkdir('user/') + if __debug__: try: