From c956413337ad440ad75721d436c38b5b24666068 Mon Sep 17 00:00:00 2001 From: Obique Date: Fri, 29 Jun 2018 14:08:55 -0500 Subject: [PATCH] Added integration tests and improved awareness speed --- build.gradle | 8 + client-holocore/.gitignore | 12 + client-holocore/.gitmodules | 3 + client-holocore/build.gradle | 16 + client-holocore/lib/lz4-1.3.0.jar | Bin 0 -> 236880 bytes client-holocore/settings.gradle | 1 + .../connection/HolocoreProtocol.java | 67 ++++ .../projectswg/connection/HolocoreSocket.java | 320 ++++++++++++++++++ .../com/projectswg/connection/RawPacket.java | 41 +++ .../projectswg/connection/SWGProtocol.java | 38 +++ .../ServerConnectionChangedReason.java | 16 + .../connection/ServerConnectionStatus.java | 7 + gradle/wrapper/gradle-wrapper.properties | 3 +- pswgcommon | 2 +- settings.gradle | 3 +- .../projectswg/holocore/ProjectSWGRunner.java | 48 +++ .../integration/resources/ClientRunner.java | 25 ++ .../resources/ClientUtilities.java | 90 +++++ .../integration/resources/HolocoreClient.java | 191 +++++++++++ .../integration/test/TestIntegration.java | 29 ++ .../test/login/TestCharacterCreation.java | 19 ++ .../integration/test/login/TestLogin.java | 13 + .../com/projectswg/holocore/ProjectSWG.java | 2 +- .../objects/awareness/AwarenessType.java | 1 + .../objects/awareness/ObjectAware.java | 22 +- .../support/objects/awareness/TerrainMap.java | 11 - .../support/objects/swg/SWGObject.java | 15 + .../objects/swg/creature/CreatureObject.java | 28 +- .../swg/creature/CreatureObjectAwareness.java | 11 +- .../support/objects/swg/custom/AIObject.java | 6 +- .../support/global/zone/LoginService.java | 79 +++-- .../creation/CharacterCreationService.java | 1 + .../objects/awareness/AwarenessService.java | 7 +- .../utilities/PerformanceAnalyzer.java | 48 +++ .../objects/awareness/TestObjectAware.java | 96 +++--- .../awareness/TestObjectAwareness.java | 29 +- .../creature/TestCreatureObjectAwareness.java | 21 +- .../test_resources/GenericCreatureObject.java | 7 +- 38 files changed, 1195 insertions(+), 141 deletions(-) create mode 100644 client-holocore/.gitignore create mode 100644 client-holocore/.gitmodules create mode 100644 client-holocore/build.gradle create mode 100644 client-holocore/lib/lz4-1.3.0.jar create mode 100644 client-holocore/settings.gradle create mode 100644 client-holocore/src/main/java/com/projectswg/connection/HolocoreProtocol.java create mode 100644 client-holocore/src/main/java/com/projectswg/connection/HolocoreSocket.java create mode 100644 client-holocore/src/main/java/com/projectswg/connection/RawPacket.java create mode 100644 client-holocore/src/main/java/com/projectswg/connection/SWGProtocol.java create mode 100644 client-holocore/src/main/java/com/projectswg/connection/ServerConnectionChangedReason.java create mode 100644 client-holocore/src/main/java/com/projectswg/connection/ServerConnectionStatus.java create mode 100644 src/integration/java/com/projectswg/holocore/ProjectSWGRunner.java create mode 100644 src/integration/java/com/projectswg/holocore/integration/resources/ClientRunner.java create mode 100644 src/integration/java/com/projectswg/holocore/integration/resources/ClientUtilities.java create mode 100644 src/integration/java/com/projectswg/holocore/integration/resources/HolocoreClient.java create mode 100644 src/integration/java/com/projectswg/holocore/integration/test/TestIntegration.java create mode 100644 src/integration/java/com/projectswg/holocore/integration/test/login/TestCharacterCreation.java create mode 100644 src/integration/java/com/projectswg/holocore/integration/test/login/TestLogin.java create mode 100644 src/main/java/com/projectswg/holocore/utilities/PerformanceAnalyzer.java diff --git a/build.gradle b/build.gradle index d443af1fa..ef96515c5 100644 --- a/build.gradle +++ b/build.gradle @@ -24,6 +24,7 @@ apply plugin: 'com.github.johnrengelman.shadow' sourceSets { display { } utility { } + integration { } } test { @@ -63,6 +64,13 @@ dependencies { utilityCompile sourceSets.main.output utilityCompile group: 'org.xerial', name: 'sqlite-jdbc', version: '3.23.1' utilityCompile group: 'org.mongodb', name: 'mongo-java-driver', version: '3.6.3' + + integrationCompile project(':pswgcommon') + integrationCompile project(':client-holocore') + integrationCompile sourceSets.main.output + integrationCompile group: 'org.xerial', name: 'sqlite-jdbc', version: '3.23.1' + integrationCompile group: 'org.mongodb', name: 'mongo-java-driver', version: '3.6.3' + integrationCompile 'junit:junit:4.12' } task CreateConvertLoginJar(type: ShadowJar) { diff --git a/client-holocore/.gitignore b/client-holocore/.gitignore new file mode 100644 index 000000000..254c5de3c --- /dev/null +++ b/client-holocore/.gitignore @@ -0,0 +1,12 @@ +.settings + +# IDE-based +Client Holocore.iml +out +.idea + +# Gradle +build +.gradle +gradle +gradlew* diff --git a/client-holocore/.gitmodules b/client-holocore/.gitmodules new file mode 100644 index 000000000..856c61c94 --- /dev/null +++ b/client-holocore/.gitmodules @@ -0,0 +1,3 @@ +[submodule "pswgcommon"] + path = pswgcommon + url = git@bitbucket.org:projectswg/pswgcommon.git diff --git a/client-holocore/build.gradle b/client-holocore/build.gradle new file mode 100644 index 000000000..9f9820214 --- /dev/null +++ b/client-holocore/build.gradle @@ -0,0 +1,16 @@ +plugins { + id 'java' +} + +sourceCompatibility = 9 +targetCompatibility = 9 + +repositories { + jcenter() +} + +dependencies { + compile project(':pswgcommon') + testCompile 'junit:junit:4.12' +} + diff --git a/client-holocore/lib/lz4-1.3.0.jar b/client-holocore/lib/lz4-1.3.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..aaf641c4728bf8a2f88d7e6f967395b6e251fa39 GIT binary patch literal 236880 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

}8NEd03Hmcbtni?&#Mg0>huf^isNPL8^ zMXUd|7)RXo?BZ;vpl6q_RjbFo=X$X;NAukAdEX|9iSH>;<90>5(zOTiAwfgcM;g;@ z#Py_MLQ|?nm%`{n7hx*;@Idl0dd7S;5f??2P|!+k^6gnQ>RPEQ_Ns?S-;AqmT4aAO z>zkl2Y147Fu5ry3#5~{_W4_H8OBTB5nO6Ihn((|(HTr~9gPf-WP>3XBgYRtBliJpK zTyL8+?vLoF)Fv%*5T40RR$Kv!X`Y+=k7WTtcV@ikKiF!D1E2Tm*tB1c!vZAt702FAlPwdk^a+E%3dZh#fwJ5+U&^l+$z)uUANO4gGs;`-fcC;Q2ea`V~8 zi7UqNeGbmo%^?zs)Y||+tvH#P?R;D+_xvS`DRftD(&yXETY^Iaeib)PKnAg2tK zAdidlwW{3<33N-6`C3loYc(4g8mH)FTwV3D`L;+cv-rAM1hw-?9r9uKA2>AHBu56+ zAsDw)TR#Iq?=JQR=EdS^bXXXBEse>}n*nr0=d(yH9=+>FG+K==5NMXo7mH43i5egl zc&O1%e_#RzYUwsfRC=?nktAxP;jGb}>!G((!6Z@P%Lqz;2KFDVZF-L=F&`4ONfo2v zJG^0}euyOM58s3As$DB4C6zyJ!vq$n^Myd2&jK|)Si5+`{B%Qwa1s47@4~h>H1%3_ z(OPs)?*PYeD*HnA9uY;2&*;raUVv(^=j(?-=xRaeord4XJFfb3t6tVmfPu^j?+sb3 zNKYt1#xQ3je?~t@C2+aroSYY+vRkNZ!|U;MqEH_w>-CZ9j?7(=#q2;XNu+%=Ml2R5 z)xFss4aV%|f?js1RD6uM8JJ+XQydt$9?9Z*vzdF=Qt{tKbpN7;)PE`Z{zg^?2w=7g z`33DiKJjr#EL)9&d?UjrJR6n;pdKd4RLwr`4}kuEU<7tBiX4Zd0&T}07}O0|FCxRZ zkW*Yv%6)NiiKFxmZEHMs%oaIIq9G<=(W{;iKHA-k+cfXJJWoE$$jxb@X>zV$%>kK< zZDf8m+DS;gt$CXCE^XTwk_o*UZbxrS(`q42k%l4+DsBDK0(#^U?1D)928MS6@aycd)+ZWl)aVOrFiByYv-{_? z$Vm2jdf31Hxb<)WWVTrYna5b@x8z9{cS?DbQHu8#Q4f0#5%C4dAWS|)L$CG{Fhw2^ zzH=-b%ZtudtNxQ8K1qo_bK;Oed2|V3=!kJ5cP6bY5~VijU5-LE3nI;$ado zkwzO?6%RFzZgL?%U5J{dTFy}Xy!g&S4t!=erL$!8^P;f>G=n7Hc^izpuj}E5dDTQ) z6|C|c*%U--$aKh2yP)R4F^~L~@MSPgd7p9E4jb5^(M+&NR|$iH(eO1Yk8|Lx%r8su zxLxg)T){HvHxIK=7F;nQv6~jG6n$^_i_~RI2)6J@f5;{g$+Lc*&A3Tn1p>u}uaHJG zDWuOx9pbwF2BFvd^%>s7fzxuE^trYpf8xo3PgexRE)Q2f3|sN4Y*FWtO^BI^v?gB6 z0xJev$iXhe(h8B_Bt%?ZHnM~gB5o3p7irZjl(u03$%3Nv^uUuv8y2J+4w7fgtmYhOBzw)Hkhj!^v&>BkYpkXPIi0;#{|OW!TBR~y=fv96^nZBT1Pxv@*yBkaFsvuzDY(R(yvv~gM|?Q*2OEj)j_{1(eD=c4=B@H1EtVk%gbH)g6D2>j|KJZ@kyPrglBG zrYpOL@DCNTjK_+Tq<<(ssXUjY_=gIGe`tMAGOwd>xV( zhRU4zc=`}p!D(%MdRHQrT+}aiQ`A3mrZ^>bQ+)2snd0FxX9@>p&J=02>pF+coVl}e zKrH!vGiR(=az)AFS^?ay88WwbpoL^6mQ-asQFON{1s$-ez+l_F|a{Z~@_F^Ri)4NDa zZ#YOc^7OWIIt*j8Ij3t#atmG*UTyfbeEJ^1Ryl8BS;V(LgMl@?SM%EQgJ5^hX$&k# z;m@l2Eic{+q73E^PAZei`Uh`o?m%aB2rg(K&v|@;$1^2 zahBSqHjye<%+Bk7vHCVPgA-NSWbBUc!yFMgMmBo}5>*h+m-;dMK0%K12L|M;xU~AF zw3K|6PuPdfS1G!Xe3e4&!5@rDNlTg}5r>3?1EAmx{cARN> z$R|{He05N(z07vLY!Lj{v%$Y5ZSUyHE*gF5RM5o-kcwIP=}yqmhj>L-O1#1Z8Ay<+ z$ESsn$9Ixr<=L>5A#sBvWW2(a60h*5#49=??;u{$A>tK%h*$VIUIG7Gqy_N`w(x|# z=)4Y-2MafZgR?-Zzhy*%+U##H^0WazvGx)sX|>d`VUm9Q0pZ7iSqjS}5wC!rtqXS7 zYCmP;Nev>%6r_avW=3H|g`s=E!dc_|*<%auUr7IIiIz5Z7p73Faq} zyf9jQ9k%pvnUj)n4X%rrhYa{U#5MT)Xz@3zg;Rr{K7J+<*MQjHr`1kNOR$c`H6C~X z5v%~eZO1p)dxYWt2M!;f4@w07^(gWB2;Ll{O)6c{8@nRMM@Uf-X^-(93)VrZw^+q`#_GItUqL;B+$|5y2N%YUHYd z3%S}VWYv3Y=(t4iY9VW!K`VGwfE`1~N)Vs2bQ)8PpwwuapwW^ln~S00JrQJTFm_I- zhmjg=gjoebY}#*@ky)Gvv zs7Y^OZA_%KBGW$3DXmbJ=Mid)xFFLA`Wq+P`;lya(42vih;R0>7F{H?=q84BSsHWA zDE&|(;UtZS-jr|z927gq73sEInIvnx%Sp09t$uG8C&{`v&ghcbS-Ub=i9?cXF}(&A zj=j2Uq?8CFrFgVxluVLcIJz}K<%QH@-+pSpFt*zSl?y@TLZb4*un)^d>kfo-LFupS z{suwm5;nGr$k;9-xm840inZF8PKzYj5v2`GbBJZ%*$oa(lihk+L~yr13BDfMMtPEL z6bB&|Gmp7sINBDn)3%(G^&K)(RhsDeO!_H2Jz=85RZ=t!^WU4h@^^A8qkK6nOFT_7 zJjr`7QHOCF+;2C30{i4EHhmW|@Ude~J5*4K3Gd#Rz{&c+kQZ z!Gm^x4@)CV?9@bDrE`FxEw9Jl6^w~^Y*215srT@vne3IL`ml@ab?m_lf``Zg?i3cV z1J>$(>A`ae4<1@#mh|uzUL{)n8$Aq{exA5~3Fg02h6r4DYwJG_xN7Bybx<%=v0$j+ zXwj@_m0SgqoVG=&VQZ%qwswM{oWxK?VQg6FB8JN8AG*dW5W)&5LFqJ2A@{Y~C%Q!l z+t!ebVV~p(_6c)C_mG6*j}tN2J6OXRtDh#SFkc|-HHO#ndOgx|rQ!3O6_%@C&&aB3 zLt-Hk>)4xu9halmI#sMvxm45CQaR zUS5p)obcZCBrIjU$6`rT`80FVmbFUK(jPJvV#{KrLgX-bRdF)Jv@YI7L+V~g4-dX8 z^s)0>&nx2)GH9ADqAcou89h~-<82i%+MoLZR*lHOv|sY<2RJ%9hcy~2$ScDuR%Y`B z#z)~v%GcICp4Klu8coe_-f|xK%>&}2h5vx~XmIHG=*q7Q86TaWHe`I1y0#}Z&pDKQ z?C*(>vWC`gT^%n}8!=3Ll=GI~H$M8 z^OlqG(PZ9o{@)oNtzRzVqnx)~pw+DrdCPvpqgD>cT>irH)Ogh5lzioY6^~jtAYVB! ze7^ER5s#X1_HWJT-W93 zitxCH3ki3SGB9`FOsV4QOIX}N^1Ku8eHeT_qsq zNeZXf+Ib3nWQTR2|H6f&V*D0$m!HtVEx z@lOihHuFz@o(P-4b(2mWE#X4l4IaW<@f|sQHi6uJ`FGMwukQBKPuBk|e>NS#{yQr5 zf9#`~{VjemeP06i)=%4iCDw2zpZqO&=>J6g`t{-u`tAGnenOnvvuggF>H-c0j z#*y3;2G*<12XIk#2143=IA-Jk_>4kP+=HqDYB1wTEnGt>o(OA|_rejWry08m4$(H^ z*S6K}F(Zc<5ZT4F#y1DSpH`6fdWo1Ob8U74@iz{IxS?APo@8zSuDjsmgyq&=C`R3E z$lYuHdQQuv67P=0STj$ohKrakk*;*~vopfGWZ*0`YmENnAXb>&of&>2d2G9Qu;kRb z_J~C=*UoOUeGGyLvXsZJm$f14h1}osYTJ$8Hg)~Ce*k_|e{WcW`*tE(HXYxBg4>aC zPoI-^c$=*>YC7=H#HHn^mzZc}RRuS~50q9oPiHM=-d9Wwl*sGWq7#*yaj=7o{e5Y? z5$(fr^t#s_7PW`Gua8aX3TqlNR|7-G+(tSMH{SjslLo(6Pg5A@XN%@KIiHuxMgXZs z#M&XVsSKWyN%3G#^9I{d!0j{3AyNHA3=e4zAZ)QF?Yr{@k7 z7Bk4Fxoxqg?7%)}iJO6JsRny@t*kxWa{f{JaDg%>gyn+4r;*p&d`uO;5zMnJMq`&T zS3PSq(Q#!iw#H1@lvUiHha=b ziVH0~xe)9|1qPvlWokRLUj~JYLHOQQS{e9_1-A}UIOZY6m{!f@$tG}bjqOguk5ln3 z{VMRg`GE}y7nUa;2)t5X5}`j>CWFu4cTE+wZ!gs|(}8#vF=+ZdKrD!e3&8N^5e7LU z2GFW_t4tgpK?n9eRtUya{J7d;x*9NggFS%HaWayAr<1fE?sh@$%27W=h?RBn)xOp+ zXW0Mxnz-84I*geAuqp~2FmVwFwZD+qS-;V{F>aPd#BLd7{)uQ)1RP!z}B;JFL5%% z-lrsyr%XscV<(+IIFC)`ZQ&jjbGI;R^*q+82Jr|qY)w2GD=`)aDLMOb&+_jguZCa* ziYZ0W33l(D`UN@7Br0X;@SgDBYQ;~tFDM{ z9U=H$v(194w=gk4!0b1pY`Q+Osm3S?m?Uy&9kR!-F@tFT7fZIm@^kht<3Lk4G!`lYv*JAhkB=nY;(5-)W6nVteAIB&jT3uJy-*N1&aPksMG=%SudKX2} z=q=7nF@_er0&L_;sQ=CH_P(wyO&W_6p`y9Q1-s+UigbN$a#ij~rC@i@ZN%akgukaY!LF+spSU8Fx7JaFogvPe4)W*O<5zf?s` z8b2*PMSc33g+#-f=z7SZ-c)4 zoZ{EswH{322-JXT@>C;K=F5L)CU|iiW=Yv0xp2l)0NeGnhS5(F$$$%FxN$dBieJY2 zia67gbP4-0H^CpEZCAMHJ%39 zsrR<%lFaIaErfe>ZNzs2lmYj7HHYJy%`CsQ3}`enY?~~?y31y_uIZDg^jb#PH5|JG zuf0yK=upDlH3R%k-~es_INl*8R+T_-5l&tDj988gE$%?JHm6E*!5`#{Ve!kq`d#N1 zPw*sC0Cjj02UcFFK)0v#7tB-IKYzL_hkiBCa`1uknyBCcbA&8`WrZUcBEiHLagmos9wKt|*&H(cR zbdP}7an;7}D3Xh5;<`sK+)CZER<9ymrni0DJn~esYl5L5`bjzMN^re+h4>_>W+f41zpTdu(UK;n=yZy(Epl*?1_5NEP2W>nq zAAnx{?AH8~P^6csdca*J!9t@*meIV24wRgcOZf~ve9DqdpbdHK)Q!;JiE2GEZ1!r$ zyhJ%s{(>QxhYGxb(p=gCY1E(aoE4vg_JI#0E$l;URH^oxm>ih`ob}LF|i*Y>7w-`2MiE;S8Ip7f5) zX|&BUPF*;Q-h>-@)ntZ^81UqJ@s0K5_eaG?jEDM*jVD$^cDfk6eZ^nFUz*b&qdTra z8#F&(Cr}4;XHF}cLrenNwJuhqn=lQ@T$KPs3>lQ#|IW3R%%>sa;uGycxtwT%wy!R9 zTlc|0+(c6!auRve1&`jG5G$1; zwa3^?IC{O>Gr0%?(jC&#mX{%8%z-^E3XC-akEe`})7{|M0>+{A2PRCWKXy~Zb%sD; zf#UQhzVIv*wvq3IkZ-g?1x+qq^t3a#37@O25IS>uG^=Z*wFHkHD?fc589)&_WL2$? zGLN}lFtv|+nUUNT(wpGgy)TxFX`WHvBB_)FDkyTY7tlF*Nic+kT3{S?utNWh zK~5fku~5g&L+qd^RLyZ+q`2H&^x8Xkk*2ho93y6FD$%g{GCT9 zXZQM})D-#c?CFxWJ!eM|LLY{@3}Of;d8#y@r=atjeJ_lJ0%AF2Up-KI*maRSrQOth z>SGHPJ(&HV`sr!q4_`aF*&euap3nGU3GJcN^RsQ@+EUnAj=xgaT>Qh7$uv0kz=A(N znso9gKP(MX$dF>@rV%~SElWIcZ-v;9->c>k)sfx44>!ym+}g{lLqb!wORH;7mrty2 z#UcE3H^X@v60a5w54>|B*`1I-I*FbEV(n{NYQm<~I`=!+qI#13FD&BFObXXe&TJRP zMT!<778r(w%MB@F_dngT`NGC|6N*Tmw|%M}Gq;WV$}OUf!TQ>(rOBRAK+_Ffz}zNUk}SCUJ1KN4YDy(#*iNs_W( zCAj;v*Y4vJaOt^XCz=?|E3K#t!}u9Pu5d~=WT{fTw-QB}njYaV{ATH%5qmsoc~uK$ z8&&1%2E{@^S?Zi^N?}=#FB_8?3;Vokg}fw3?w{TzHk>aXIXx+xhUk%ql^;~4wszi% zu-`xV)ybXg3Um#ij!yA}(e!t&`ue)WdO5!^;bvYGjB!2sM?O>vC6cI8#uWiu`iXZw z*`@<|+WVOGv?FlY!=^ScpT2o#RyVwXv7WN4JECATM+&~GyP?64^fkZNhwIh#S#|u= zW~9#L6VKwauEZ7E`{;e;$P8<1jYHrza2{wX!O-m$*U*!eOffn z)K_fj;YOna-$e)CUjKoyhPo#0&9dcj+Th6JZ04HDO~vX~nZJX>C8fnUv~=WgHE&yM7KPR0B6r&FG!3(?`r z3p5pdIMLM)OtVm>wInAbvjV}%bQ!kylH5kkXL!)J>oO=C>Ny0P0qS2|kd`xi3UDU% zqpbjiX+$XZu6RgjP&Bo@gYDvbENksko~R=DIiPXBtk@PODbGRKQ-5__J`bLg?8e_g z46o9~dRUKZ-y>chkP!@mu}R4JK4eq&Q6EhBf;nFrC{DBx!)FDw45TbGlTaOI-$|Wc zu_-@0^DlibtDQ5g9(>2rWqj{GJ=p*D%KP^3dW&TcL#q73+LsL5lj3zAtWJaQHvfCw zXxZGC9D4qI0240E~$S=b()$Ba~EMcwW_qDrI z2i8$}DW(6Nfw74SXF3SdwoH)DSG|0F-RL?$rj`R3g!o2-$rJ z){whEwnI0W1bf}k%~HxND{MyLXugJN4|wP@z5)s7$Zochd@=^TUbl`UrA%hu|9F$S zll*klaXsaA@^QB1eA9WF*YADXY*KkzDZxoevt1u1%_zFUR(|t6tE{d10fzfs3p;+h zsY`#5#g{#6{K=Qvd*}DONI~?0Ey7sp&tM{pWmIYw;vWkNckllzXwO995%ycIfOkdA za@>u*1pKuioU1jWDGAT*v>f?K>YbO(odoN)D8#nslt>SsAd(|eldNCKJw1~ z{vGiIqxD?BSvvarF#K_K(XIH_PF|(YUs)$jGOXp4ANniI+Sdg39F1FkVy}QqwCHW_ z;>j57cbfE(C`ZpNS#GRv1Q|LJB6O5@P}z>B#E)pBdN?Kpo|aa>7|!YGCqu}OhIJmq zquFUgDTrI%bvn zBl@o`KzuiuZ-Ym;M4Q}v4!3eYF}!WYtWVeI?9*QZ1K8JI1Z>S~+FYBr5Tjhw#fS4 zE2J0)5OWWLb1YX;?sZi3d{o50RK}H z^62|0DB=V-4sZ=52N?eGMl}U-Xuwym=uB{jaDw!Mb{U`?C=MY16;mXGz*9u=#(VM+ zRP+h>4gd!L2b2eh1BL^_`z9Cd1YY|Q7Ii!c##e7K4hSaJU@tgDk7~j*LIFdW#@egcymjRKHI_|bj?odfpB zezPC4=g@fuUIB~)Xahd^fpY_V0>C5Z+S42m9Dp2nBaf)>9(?tF1HGd#AT~I}jRB4U z&MWX6cnmqLw8|WyaVEp&w;egA|SR+q6wNowht1Tr1R@dSQoAd1` z*EX03fje;4leJB#Hd*QT&7xUC6c|oO=X>blNw5&6{SsrjxF@&6{A4;e%&0=EKtRPH9A%-5mC~=36_~pqKV6 zYN_dXi{XjRwL*1yuj-aPw}rVo1?L5)y>*AB&vT-WY)-3n`m={VyqELG2v57&oZkiO zrqpN69X6r8YU#FvKRL8*N{`K+ZJ?~DHlcNf+JTovwC41H&ay?)v@FIsi@^Wvc2J1pPZL42@Y_b`X!t0S7Di@5`U zUYKWci0mw7K)!rW&kW0bpsl@WRea5z*9Q&LSOV$rPmcxZTFrHxGY<)n)^3+8SAVi5 zAHUCBOP{;`0h5vi`@=85$}om}!WH@RnN2fizmj`cZkLQGh;^YAlgkyfPftllyOhVe zYG0rN*l}$C>?EX%s<%%Yck+)B;8i_hGnhoY7-C1h&5ghKiaA9S)Ki9JaV2jthau7MGh%NDrb_2iV8u{HrDTiRrCxW8 zD;XW>srS7j4%tObBL2nol2Sa0=qTa)_u z#J_3H2==t1EMQRbJa2a7el>mI1Kc6!us7}d3kdH){))LOSkxZ;ujM#r5xqzJCXstj za!G`7cj3Ff>0=+`uH2AZz|ZQNYknLu@`F69n67Rnlc;2ThiGBkkevFnYRt8IidD3( z?nJyo<~o>SxSv;}9=7=%bTAI1^3-+}QXAo7nDxhTM$_g$810Y_^NwGfRd84ynfi)X zt#$^jIhIQlxgPgq9MLBD4NUbJ`ty#QwnqeZ@w^%l>lg?6c(&9pZ8 zvCma=HMA+6Uhj7Q{fnC>2R3fn&9t#|vkwytfAJ1HcVxVdFh9p1+|R#NAvcq+7#D6y zb9T*AzPS&pY&1*LbxT*XS8fI}-R@}WFqk*$$*pY?c8wAYdDDB9*55v!AR!qO-8YHSRy28(%7q z7VTLZU9{rx$2P7&M?E~myuVAf5eHq2ZL<7Y`}_DU?DXQ%&-B$%w1sA}GEffbsm!FV~gF(b|Frj?e-EMwM>nRaNi_SRF#lYfh=NZi1PpX3ev4Mf}?o7_~CrVp6Qd1 zzGUU&lnIJ(LvQra{QGLfVb58_vI}zar+&}00laQ8&VjeG8o9cdUp8k5kBe40?v-%g z`%_M^w{|H8cPVF%$t(Rh4{gm}?_q=P0@nU4y$E6Sd-ICgTx41Y+-$6(9LF>Ozpl6O zK_3{pH(^9{Q+m+rGWS&@`Wk_8O}mQE?Ml`>61dE+SM4ZFe^JiO4DJ$R48W8s~-U zR3)aQKecnmkC*rrrID3t^kc`)kgO2>eDEZ^$E+UD7SAv5DT_kl>XrOF1|Xbs!M-^! zt;++@Udew}Dyq-=S2gU3&uh(h&3Vno74$~9f!ShQLv4Utw9lOk5J1nT71xSZ3wfi| zqSiv!qF+O7L|d58h0WI$_y)K^+rq(gBiM3oXtgk|m2F)AWc79k*}ZrNzbquVl2-SB zrJ{a;8k5f7#AUQ&GNA1@@ZM8lM2(Z$4$dT<$oUVvn)b(6YIL)2%t-lc3&tG%yCsE= z6X`iTh%y31O9T!9-yacfSR<1EZ0t4zXY5vufFRUoCnG)e@3oTk@Ft=3bzel-Jz^3& z(!JXwV&rPK7Eu+_4xB$U8QjQ{z7HB*BPW(ADQ#gK94AJ0D?BBiV~XnGMVZB@vTN7r%X`z!OpnH6*B%Y zIO|08usjivrM$v$56bS6n9E1D=;o-0+?@3Uv=v+$7yb9!+({H;iuzIxjVo@7J}wvE zgs>IKU#gY#y-TDA%Kl0@1#LTnQ*u|IxRIX9S=bTz!oBVCLub1E*l(KDc)z@rN8MxF z#L={zcKy3~l~{F8XN)`8v$v1>2e_7<~V$UaMS zm#3ilr(phY*)!~ghs9Z}ZbKUV?jv8r>~MYe*go-+r=JRcrQf37(k|X)ineJ@Nd4@B z?73p;0bOrQ0(TF-nA0b9##(xEvdQWJxa5w^CzwAvDGNj$P&1J@@;jHZ2Hs&7osl@m z6=3%`UeS)Z#yAi6MIpcFQ1j#uF7gjN;;K04NmBmRfF3?1bLb~HO9GwZ72q6jsFyHC zZmO*14|@(MUpeQPmnzq67I}q^F^`>A&m|A@*Z;{PnIVopNI3K#eNX0KAJ#xRg~pdZ zFxsanoIOC{*Ib7!6=3g&e57Bg-Hmxx_Pw3orz^`1h1jJ#IdoJX)^fdMHuT*!`}#`R z^Vc(nN4{drD1-N%zXdtc4DE4WJX-~X*D(#UGyY8$`^`A17R_yZct7h`h+8>~qq}n* z@W#SScH-Qzkiy*s>A5MdP=x06mB-3`%3eB8x0@wC)1XJ12KmirDBVc^fol{tk2g#{ z;Ya>*UoUyz1@S~Co6Z->XR`bu=jzSR#Y1>u;DSbL;E}3S)N6;-2kE)9)uV^-hv;}D z)q{q#C%_TCh#7zfXcxxdEhhTH4~&mvbd#O?l~t#?vcLz*|04CToe4+Dvoo>@{Z}s; z1t$9W!O{cv=BPu`NBs5*bnBU%j}GAv_BNO8qfh(=Zh7c$HGicH;XUW<`+}dv*H89U z73Lq9=RU;e;!mE_XE)dQ4| ze`2FO#HVh7fTiJ;-XOo&mpX>G!X7^2@8s8&(AzeJqip}&S96fm4u|nBiU;pqAfq1} zA&uMxyf+OzZnNFM7;%go!R_>LozAF3n zBnGcP$p_h9Tn5=K`hXs|q_e(flK4XHKt7Fp z1L12CEA9vM0k}s&d6~`5&eDetgpaYh7tFuSZL|J*9uV)1`6fWjAGqubTQ%w{4|w%K zeB~Sb{m19|ZbbV%mF%PY8MT-k-T$g4$~!w;2;KA7m^)uwaMieV3#2cg{f6f7hklp) zlUPGf@|B&A74Hw))1aMwYaa-YJLsuB{7OA=-Su&wKLGCXGd`HOk8;qgvj-h0-*#w6 zSxkx)J<6r6Ev=P7V(Vm|YQ?s~E`jtoj@UVkA3KgnxkA_qA|%K;0nl7b1jtGDDb?3x7dw<8xlq@RR9BN|H%dR;Hxn0U2QzP& zq8aK9n31~TUW5Ob_Tc?olsI$TQ{Ambesm& z5%fuV&!yMaRsuUTM5|QO%iPgj!YTI>8&=|GKZl->sdB%Dwt5n4_rzx7Mn0;#x|G&! zRkBf4^)UffIjE|qOvyOa*`^X?<`hFuN#t$ZG&arV+1;}sBUOc`I41J#eXL;Z3nR>Z zVT{2SJ?OKenrn!EpNx{9)1p|-juku-#OU9kEZ5jF)~f~e#{CsR-NCtqnf&r*e0@n(Z8AGpp(y7>2u@&~4hcNk zjZ^CUCaL|dZPCCeQRkqET@)mB3dUCo-#QJm=-?#9~Nb- zaHTd5Cb)A=(-5oFhli*0XTmH(5o%qYLbK}`69`u@WM|A1#VS(LO41wBR}Wx~A~d;b zg@q0SJ257aaCQWU)-&Omzwo(={tdL}Aua2jGE*BXh)`1V8SF^Hlv2&|FCiybkwk-t zx;j;=(x>+Ve=nJpL{$GVADh`4*l3Mh(u$dqJlguo9jlctW7Xo`v8Wq}^vyVBAnj<; z?ws5iTFC#_YQdW;Lk14=P39ZE{k?@P=z+i;KD?&Q#hrFKVy<#j!qgLGf)e?o-_=?& zU9bHT<49zNus@(X+TN&{t*MntrI?f@2?@1eBA6Mw=|ZhhN;}vv1yL(%@hzCN>>`y| zlS)IUI=O|?mI5GIe|#R9V){E{_Gdk9q_vbHdZCQYvU)9h8_=GGN_-Kj-BF{$RECZ0u8WNK(jXKZ8W>|Cnu>49>L z`RnU#!j?VWiU4s$phz=LhCnKy4T#k>phF}ezh+Q zaB^r&e{tU{v$QXSM|ZG)Afpo`?fK%1M|WsQ4xjGr2wLZ|)8TUl&QrWkrE^^xjPLa? zUHN#QOHXfhD8A>7(eCa*Z0l%*?&_qM_ojFS|8{puyS<@7+jFhjARnCnz6j(q^Mwt~ zvpa~phXc@^X)pkte`FSAYsCF#<`3Z3&`>YW)>!-Ps}X`X3XJDn0J?MIZZJ41jJG2c zvxLELv?9;&WH>L!-&t`UkELK?Je-qdV<^8Fbv*UEkbsR!@IStZ6?oC1#X#h(p)Sp4 z(j++WnVZ%@o9Ig|wi}+R`WYGSn1sYD#qJAE!2>DlSo0#X z#5hr`n2fg03Gz%AXGxm$4Q)h_0}!h%VMLD2LopXxy9e~8fA0&_>yRB-!?;}ox7dhF z>f>H*SBkAQS_0~6apr<9TPg;vtrtySFd7fn>IpI6o;Dg21z{H24V3nPq<`RJF+BH= zo_tayKgAdz*EJO-!Cu*3!Ji^n=qv@%$J^F%%h1krOGRmpQ=*!&wY1;c)?{4v>*%n8 zub9|#@A{}$tVPZg8=IU+w~fpfl=rtIp43!snSulh zu8-P=d22fSV6fWOFHGk-l+zAa)XVNxC3jpw3PtFQ(wd@Y2D#csf(LIx;89ZqDk_-0 zTF&ppd5|E*WyRzYD5G?Fq_d{Hk~q$tG0PlCez|&iO)+S0K)6E7)K+N#9U?N}Mtf?HaKH6N z*#{gHI&6_mjw*F=V!?{Po3%&rGX(Hgd7%3vQT+5s7zDkdd})rjk$pkysotx9$%=xn zPD=4Ca{ zXbHxn(Hevmo8)iNRk3A{<&|1$$?}k2^whN!Q8S!+u#BtSM;E9AtY>r%1(^F-}Z%-$75&zMawWY$i3v|R0p(H|XC;>8HlEhTR6JWwlDO3eYfWiX;kAU#wVpL;ZA?TDTrqtT3i`FriNi3lU4{`*6ITRg%c^KtU6}ET+xxk^P{DZa9F+?*<3FKzaksRNn%BLQj1y;3 zSCTiN6V(5v=B#ugY^ho3$W~wO7x@>A>azmv*W-l^@w;Ql^* zi$Qhzi&=e?0+#UVT|#g%`S-o*IxP@B-m9%IHDr%KadTG)X0`RATb3)Z~*! zlh!bkG$+!YsrRfNOT-@7gLqW_$Oo;dLGLLqy(4?CM!N%KzCas()FB{6p!FN9aCUmm zlW>quDBnlwSvjtaR{#9uJTC|N%~s-}EA#PKD>_W>jJ_2IJe7cXOT0sDg1*@|*`Ei; z-ocibZ}sTt0zT;~)mf@wu_a>+kU7Vgsz(GhFYL#p5T}QoCyJKWd@kNLJ9S?oxM?BC zEi`tu^ip+@q$u+)6hKPp9AjkF8zK!YsY4K$&Ty0DIQ97VLLkJ(jjrk3mJFTDj7Y94 zCp>vBp7RN=F(J!=c&0qyr;c`JL;1&&T$^38cjMkRYQ&@@N0|9EBdl}GqGNo)0rHwr zu&jSV)0HC7^4zcIFB)d&d#V$x>7{Qe zafa&~5+PVzUoHtn(!8d6N<6$f&G;kQ@$t=?ihfRdJGyez;{;iPCPyxXAof~z5x9ZHANV!|LKG71`p+boBpgFk-_eIx9z$6)%8xmOEg@Z23xnoVVC z`?RyZsW7EfGS1aWwuJ^S+na<4gW(8>Km8`dKWQPpn8B24j&sS z@JI+|z>IcNKn7w{AlR2MIU~15=vI`y`)tVwdO)*=X;bRHD%o5Y&uz+&`(o1#U!#<{ zBV6Y`$vObw@9TY`ze0lFpi_m3@Zllw!9**O3PIp+WKx7n2slHOzLxpAC-Mj{&#lghJ|O2UKo z6TrQzAf*!rTd3L;E@TWQ+LcaP9#De3<7JH)K8*)8NyQM5AfM_u^8R6Q-p4Xj+Sih^ z93E!@SLPROqxc57nRRGFIOw-PEaIUicP{Jhp)g;egoT=!R?*kaT-7=DT+pI%>-R@6N9YyrZoYsm5Hym; znYIY9H*H}3M_*bFx5v-((bo8*vSr@D!RO+UzfH2f{rIaw^Q9c7pv1M0vO@Ym(zeP8 z7=<^!fM=I#Rn4E9zj_m5YlQLiZ}|T)25I+=I7t5h>b9u=jj&GjUjl7;SC{`0Y3FJ{ zdZ;X;{^*-AF~iU^z(7i);h-Ugk)k5BB9K4=f*}`?07XhO$>=3PCTDUyf(34@sA;8Z zp{7%H5Yt-KLS-O;43=uSZ(5<-E^Bpn+1GZz@Za`M^@J3Bf4z0wZaL5LzS8{ip332U ze&qoJm{HQP)43fY(K|U*f@dFlXTqdUI)tJ_)wvugEClC!IHK0!1xeXB8dsxxb}U6( zJJh28+o*YMb$OhpMEz=g&kS)`fPS|Ge8|cm5f!x+{ zht+spbjZf}zjz$Y*WG(Q77z2~Z_BFSCc%;(`^~*UKDwX|<>NQg*5wEw4$1`|<_-Ec zyvIF(A14a@z9FU`=@7BeN-@zxM$HcS(4ihrAbGC`l)U$yHRP~8&s#0{tjApqc)#=E zYtsuj`%eWydzp`9g_7V*B`TDP@q&tOtB>Tj5~!4f;LbwTgQzMsQ;%Y5D=T?zMO8KQ zG99_Isj928sHZL}C^hnZ3SQhL^-yEWiNW7qsIcXbG$Rkge|6?Cf_q#L3AwE8wj zaEjW>Dt)c)3QN&a-TzidGek8p2B0`@aVoT+1^aY)Zz~EO@f5 z*0ecfC^0!GWiCqPp_QWZDju>jYB|b6%9!5frbVH4F!gbxt;gpxtXfTaASiFu$cYX% zrW}~5og-7#i$jU6towA1oE@Yw!L&~6Ab7v5wCKRl@a^hoV|ZqYD`FP+DqNMc z@@LV^l}<8=sawrSin`2;LzPWo9#vZS^Ib7do%cCFuPMsZLMK)-Id-fs6Q>em{ zBxw?g;}L3rp^(V6rivQyk48_Tg<^}F$h1T>g16u`RXEpFSVn7zrJx`bh2`XDW-L2p1pX5$%m9rJJ+(_mP+OiF{^FYuO zK+dN!@GYcI0a2&-KE{@%b`BiPprCXPuS|Vhww{gQ?0{k@8 zTF6OQH-Ci$B{^%h@-o%o={aQo3qy=HI>i7m086(p7D&LrV{<>UK zvpB%S()DH(nbZvUCQf1tt4v<&9e^zyxj0kmoT{mot3Q2I>>7)7I3zom{9~|pRli*B z@W}#ei_Cs^xZirn-*GH9RnYBLF*ZL@>Dgb^NLqdyl??yVuE zqMjQpkA!AVb*2wVjWqj`V)02Y2p8Z4$S@~66B-&K;xCuTV99cCYwH>r>){sz5{Pfycqg!5QpAbhUxlP zLHDNe3@>cjyA4;5v58_N^;&#i>uMfC&;=a(AzxyhWpnKg*rV6M3k~p`u-j}XEx^}b7}A01$Lpknk{_}*kL!qc%|XEEE(^io!3XZ zIi}oEK6*D;c6L-0U0}jdK11#1piy?^o^Td8!7R8L(CBfd2601*9C)Z1V+zyd$)+0d zpl^6`186iN)TH8>b((-RW=v|Bg|>$_6gr2%`9?WRRx#N$ZX(P?9>ARrkKI%pw(vfK z2X-+KGiPD^94qUwiGv4vNAAT08a=y3G)9XayEj^)br&kQ(}l?O;t7t$wZ)F_diYhAS%)I1c&rFdi;D*&N{3qq>ofRXO~ExnPc<-q(2px+{^$DG{ zdp2Qp41uzE7I?%3N;4st4BX8iOcnjXFCzP&>2sN+;vm=~R<3Nw@}lYI^+Pd7dJq)ow0h#O09$H3;!nv#L_CWA5b&*lSCq7?&+QiB!TMr2_1{7s01Y)|8M?30iY)V3ftG^sO zf@A3zoM!|{G8AqI@`QO*gARmapOBYczaBoDQR08AVm-x3$~en#&j#6>1elQhphN9U zi|m_4ci@y30X_kJKD5AFFbhD5g*0qUXS^L)#x>!MJAAwtxGP+Y)!3v$TQE9;F}jmM zZO9W_p^Y1{59e%$HWAr+=7S6UHt#tf7}(?0=^E-jACod_9d3@?kMySYH)BIgWT4dN z^>7YDI$6{Q-ybDEn4^`}H9))_Y%-5J&d6e3-_amcSICJk{}`OO4;(|&FnAtHz0q=* zJNq`Wy0g6=bkxi^;$^3Iv@2Zvo*s;f^NrHH}DF(McUyc2j)Js|Kt-EQREYabBxRfaP`K) z9vsiiksN}SRY0*L=R3Lw zcnPzXZH`HKrwQr2hJ4asK6%gDMA~U&PRlo3oEgG#M^)=2 z=Dop919;mM-#cdY(Ko&5$|mnT2*AFf^E`1YU0qk-u7$uoSB6vS;N1KE>^U=&&_~00 zV$%$8x(4(EDEpbP_7UNJXDl;9-lm6Y!VZCHO7J(&V5P7?H5}#LImk5BE;Z0}Whlzj zKo9=p(e;@A&;ZOV@E0T*ZxB7*zfkfsRNroaIJAyn`gBbflUg_Igx+RQ(+qS>*yi=Q z{V|3Mpaw5;0*}Us(&;8(u@Sp!wt07P?@o1J^BI;-U(`2v6TRC0?hWY~ zmM@+D&-}Hvc0V?$&kc@&Ak*GH+t2mrna$GIs3hP{Kcvr+j0sI#%R)+WyTY7bBH_p3 zFW`Ty2&*RbDD%JN1XJ|?W<}`!H&(>c#Z<`E%*@nD)y2}rnMBsm#n|Hio%oMcnzmbF zz`!A2??xq?9Ws@i09w&2XH`EH)ff?E(nyyqx06VHS7(g28vyfyaX9m zAZW3Yno32q*jW+l=H7a#yM+?b9ua}0iD^;fel#~W#sBLlXJ)Bl!nB*J_US7tW~ZON zw39}+i7pW~O3|G<*`!kPNnEVM<*hdr%PsL3EXd`>v*vTWbmGIM`ck;)=~;`_EBaaK zCpow?S02&)M=O<6m%*@Nsw8Uc=>FTtj@eb+`}Mg0*ly|wI&%*s352!<*@b7=qP>A| z?sJz1C|ZwVy3{jk2YVJn)ZlP;QR9@{{=qy%=PBHu%Qd$8VwV9AM6O9%6V$r+7w!Ny z8=yR5I_fI~)X2#NAeuvYJZGfS>kV=QXr=Y1xE-R)I~>9X{e$jFcPST#=!3R9B;qYo zvQOcJTJ65JiNl}dandMOrn^aZG<3sefH^Pn^XVY!Mei5!^|P_Vu@=>!^iTBD3(YOm zvV8G3@_$CbnYL&peK zRsXL|e5rotQ&Xl85a9mK+rG~m-q)O4Zf(8qn@)6qoM`&Ty+5&hTOrx5Ipv4yd^xeT zOj`#-^^Vo>?fY(+H+TDTUt(e1CLP*+KWbs#B7b_h{7!`l+r}sUT}Gpod;5Hd9ZsMUL9v(O5!gDi(Ve@zZ>G`7<#>>QWE{vJ?Z~)Jz*Q_4q+teg$ z_W7s~TW;zh76#1ca!?RQhdXQKKo3Ehy=uX5QKU%C$BraLQWFB^`=^N$R@xffI>SR$ zcu7jFUKd?jG&#G9IJ-=py(UAinbC5&L`%E&ZNY>iDWkB^A_ymze5ldFNRId%aEa61cLJy6QjU?T9g>KSaxn!yThq8ALk}TS`y{o!x+qP}n zwryKoc2$>^W!pxVZQHh8-LK9$@5OiHe)pVsFCz1g9g#aCGcxAdbNtpEW5Jk*7499< z!jXKmH`Q2UDNwA0SnY-MQT=M=?Bd3jF4^yz)heH^g(4djuBQ{gj#GQVKR|QaY@-%y zobu;DJY@{nERN3GePo9d*;g+srq8VErbdfWY)u3YKwjT1l-rSamK)&&?UdEHSOcvaooft1FcOcb8ru z8*IPmSy!@Snj_hB6q~%{XtxJ;h=o)!;?VeVJgF-vpDM1nL}ye?nX^c7`lV=UaBl&D ztX#qP`1x{Mb^P)|*4oNky-;p~iaN*(j$TKE#!f-w{w(0XRXm-Wl0JKPXGWpCqdd%A z2IWcmaQSTt%bzoXrEnT4M_V~lqd0UP29R?L<#$|LM%gs$Gz+I$ZgJtQ%3l4~!087c z!0Cr=@xtM{e!g+XVU`Ukfu!w~#R*`)CUtd1n1Ji|Pk`(9<-&b})ncc|J+Q@Gvsub3 zV3oy=m^dYH&-B_fJk)w__3qq;1^zye!yAF?3Jo~*-00=;Tl?>_nP2K$o9|qgL%K$e9G&=%l%mE(zu0D7y#y%o0p#lBsM6)m86@zk0q4-n zED;XDRDNvEbGmD zPb=b6Q7Vu{O!frIY&GP_7O*N6;26&>Ss?1|kZ?CT5Y9ajuj572*gXB^^NUl4krF2n9tk0M=yT*0NoT#<(rrz zSjR3ubQ-QBz}b*of}{}+!zlHAnsPW_>8^jI|IM$8u(N1h=vi4+fYa!GinusLV&c z0_?h8^e2^#-U2}@3SVG>@bJ7&?p^07MT@xEF=0!wH z6KD7Z1Fq1{_q7b|TJA9e#5!3{nzlA9@G{Bl%sS&4DrYGWBT$^p4!foH6W*>1{4H)5 z&uJ~Eopl=Jqf$<_QF@s3q50ASGxP8o+AdBD{;0MimH}t-hYzOtX)_{}y8eg*akpPk z#q-2Rh5I-^h#cVqFjg-b-?C;5M6^FzKv3q_J@7CG+DRnAWz%B7?6DqrnYlsyv+nj( z1GSqcF9pjxyfCm-38Fg~`)7(vqCW>cO>d0X_vCE0OhZ*G05grR z#Zf}6p+>55O&4c&IG9LT<(F)(*9Pi*z<4=x%&6Q6XXdYX5 zW5j?1(m;X3J6j70uaN5?wMNF`L9!WNOb!cwn9t-~bTU$(UL(%Bq>4jql}xz$w6IqBiid8T6p&uzLu}hDufec-TW*L)iMjp1H5UfO*!zmsHhm)Jg^oK zA1co24+SGfJaDmOLGGglXP%<`8PK-Dh;JT zpWUgZ>g88oviqaXp{XvDQcbd}jLWu$H1K5EiB4VjtQ~WE?>$i-x!~H5QlAZC9%b08 zg?Z;yEB>^$Cg(p_Y$R*xK%387pEZAoGh9zqd(hFDN}*0bjV_hjt3?^w@L`eqOP=gn zkW4-+)XAghpZ|e4o=VVsV|~QY^gz5H5pXL4AVbO3rW-XeF2;gWZ#i0qF6SE zl!A&|sA6G!PZGt}cE;(VF>B*Jk589w;VtW+lHWS^i0<9Wn(=NAi^LPIfZEumS%*>x z^Bex%bY1z9ollRG=G3Tzwfj9Rk3o^zrlb`nDY+X>i7TY^T))U&yom z@%o46*0qJ4&rdBkh|14_$@ESsA&7x}ru_#_muvjvO$x7bD&B~0&k!s(gy#dsoIWPp zK^#x@xfFBijOmgyYT;`X+D1}5i}lf8uDVBx;hAK%iE$fJg66{cI#VIS@tI^?3+?aR z$^ftOj|o}9r^oXNO$g@J>VlFBt_clQgzys`RV!?idL5oXv2{#@8M|KbEIW!~DIwbj z2tL`29CD4MGpw*Axxu7($)vMwIwVE$fEr$5Zpio5@{;JY#@h?ns?9Ml;G7gE&*QAK zIS$H2kYW`vTa1ciSE`e4R!~&V@Hh96JI`dTXR*{y6V*#H?7z@3GnJFxwM^MvIk7(~ zGQk?@F7E6mt*{t3P#xvjbc}=7N`5A(o5lW^F3h{@_xgd-9F-5aL(t|y`Ruk`5D*%lKoy}Za9Gw59 zQ2f-koHtYv|HRR0H5B|>jN3>bwwf~dTFFdBv|Io`pH;+20t#dnu~#%DQxi|+ZP1l$ z-^25SqhH5aFiPhILKv#^DT>&|W-jFG^l|^~5D-TZ@aO4+>Zi^sOI?Hx`1U|%AXwLo zaW+^6!LG=%Jx*IN9J-!1UG_o&{1c3$z-vt~R_)N?2vq>jZWJW3y)m@!|cS{pts%h!IbEoiV| z`7GFAdtri3hF_k?j_-UU0#P}N-qkuc%24{oFwCwzP$=n@R~{XDe>l(0t37P_n%8@9 zns_J@7O)8Lx%b3dKM3rnnWhm}N8^Nb2pe~Z#Fae|5KKZV@|EAGDUoMie{ok#cH?&3YD1bwL;H`9UE7)YDWQ~4C@{QcNdrs>yJ?8m~u}OY3r7?JK z>^t?u^L+@5rC<&=I02_UkRg}xiiUt2BpRO$LFQ>Q5a({Tp~0dRG7>NJ6$jQawvvsC4}mZXb*ai#B0W$^wfl z(H!?@berf2*tSffZ`L&Ij-G$yWUb0rCG(px?l02DXKs2C${-GyQ5UuT`9u^=0&XLq zP;r-HWp!z5EiSt9FQ|qE+>JyNmNjoW^c+G z1X8$`UCf%3eIhp>lB)=9nkcV;9_p-4{iHq_!KEWBshrrZS~6WL=bF-_R3MF@*zPMs z3Jc|X0JL=psGjl0oGc6B0bxxZLcSpwfPEZZN|3)cXGr3^dP3Bm^c zKTMLkT~N|@q#cfY)D2{t@sR$c*X1IgBP6yXnUqY@b=ZxKYqQ>242K|=f!&3b=2lgcRTS3VR&kYZ++tYqqr3YFK=Q%fPkjJ|5I@j|GVP0cX2hc zcXjz!ZHFe?IV`B7j{Hq4a@+4vpsMTRri5)Nf>rKFjxD}$)N5sGKA?4HHe{gXn2@em z%s_^a>sprxBC@lbC)a<-FUdYYZG$UwBi{J^a4T@a|Jw8C<|Y8RYF`N5N>x>}tv0X7 zP(uuzeFqm!t?jag>Q!jBKefG@!&ZP%w^W^jZ^pSY(2iYBM^N*}f;a>Apb;v^z;#_V z@l#bVmqfs={|}xMFxC;*&G&)4y)z#24Rg@ciW*g;1@>UN1rE5sn%6~w%k>q3g&*Rf za8`k`VlUKzSJ#X-KN_JvxMe(-NtSa#+|I7Fn|mKF%-u$6A!V`buZXBvoXo?7ZMPmk zHtwf7?0swjgkBa|vT;W+WxDTr!>kA);_YT$J^E~Azkt5bM&Q}$c5u46I$9_C8jDmN zRO5NaXgb?Y3zZ#9n|P@Eu~mvb%w;c;G%<0Ib);M)gLlN$VFNck4TtjDcBtgtYaUCFA#SHUl?RToo>?;7gLKj(Xt)Ad=DVo>fNk?&yLd4JwqQGi+%zWk5N2O!`yt+Uad&xv&rm9!1!&Fk8q*`jPBo{&Y-V_ zN>9v@O$dYOI^wz8rO?$WWUeel(|Nmw&6Z14Nb9A+Gu>aqUN`j0+zaVPpOtT=`T_7|y zHNQIKF!?zA!LUSumF}zIUd=A(NHUcb1lu1P4O03~;6IcH+4E&eCKwjS+c|I78P8W= zM`*q9>Wz|xrlw<~4Y6oAX8o?D!e?)CNaDYF?_+b+HeZU7iO=_M=Q3*GIozTlO6F_T6qNjy-FAjTtUvg!A&R7i#?p8gn| zCa;bWtTy>fDnA+$;Wag39*^$4+Q*~=fhD|`4*$nhbiOGi9MDP}H`sj*_?}>L)ITu; zUjm6)zto2;pNUVy?VM=k5Q&pp3C`48C9+M>)QyJAr0;L7&xTnY9{e>k0dIt5 z>f}OQwW}Kf?VM@m$}L|8$9$90+p|1M*T(JOFV6_E)_j1n;iw68bpyJf7~gau5kCqm z0Tt7X$d3N!&=!N|j%)BYBQN=njGXZM5C4ao{h%K8`Zv9tk3D`QTRpNXq`i7#M3=NePijt@js+f}zQq^CtjLB4~iL|axfX{Tm^fw@Px#4~O z9V`JfsV2j^Stzon54SUWD~BiVJ2CL)XAcYQ7ccwV;q?0vp{-s)0{X+uOmYDD4B@#)$Bb2XD6Xq!p#?BXMqVpg3Z_9)}L_71RH;a2~A?_HUCk- z`Cw%JuP9IsVq9*=9m`q3^)LhLr*fD=$6az*so84`A%Eqb20m}NL3F_h+o$-+VJo+O z?~Q9$#7^2Cf@e8wz+i5Xm)3~sr&i|gQ_De`{(FtJcO|SZISCehw5x!$V*>oHuz-#` zhKx@g+K>3SmAfz;hp2|u&DYxg*BbYLk@X`S?hfBS&oyQfXyhK^RiYOqftJjPt8>`f zOuw65wm#9!8IfY`45}E7%s$qi;cPm5uV|c$sqLJB=djKRAYH0mlG=xC;j$98)eVTz zqaKk{IMwMpo0u(w z&2xEJ`ZmMD%nB%Izt3^;CR)L&14SvZiRL*C`eE($&EQwNChI8?>-wfzm)atb6!p<&M`BlAbhO03njSpC2cxhzW ztxid3va|dWjFT!#LZMNBBeS4kwWUJEERlFEKBMvG8c3}@`)IZy2#H?o#z~Z(oCM&7s8kgUH;~m=oHe z^L5Qb#{T8-9bG${?8uJl9;Ik!a*uOOhG9jD4gORI{G3r^Q&b4*n$(@ua~IzBiOC`I zQ=G&ZkfAy}$m)}_t4!CjkD>b+pS$%#iO5We>xJFf1B7Qtv7z1~NJ*Vm0{kvI3sBB> zPy=W9a#V6DmTkH!@XNMxTx@C;RB8Q9`+eDIRSP)W@{`GTqzFAOuY~4tDV&AlGnfFe zim5?UQy0<>wtbi@$}$bQA*N;2lQcoTjeSx}^24&&Yu-AQs9-cg&W|a@5UlyS9#2v3 zDNP2Fyoyog8BQcTe3qZs=4c1AesiX@mer756G1#&ej($>zJdt_|i@m*lF*y+`%e!W$WRmh7TZd3;iN$5G3qvvK1{oJg)h4=+jj#Ic zL5v=8I0-Q7Fwu~BEHZ#|X}w`YvIC#!k^6rV*ih+?L;<;OH7u@Ed!f+Z{#>j0B3>;0!cLR(5 z%gao1(uCG&1(eRSJodHzRHj;J^MV-yylS+w zj-)oExb@ez+mfY4Vm>j4FtU2>>-ZT$)p2|h_IN`~h+L2FeUOv>_7!`K>Lk`11EyUx zmb~`K)9BS|!bHxpOlm_!GuuaIc1G#3r~JKnV<8_pOY6vx$=$RfFHtxjdlVg!?fnK- zE^%OnR8wY{))0ZKb}rUULrcO2R(7G3=j8V5*Xjd@~&vA zxVr8#nUo5$6p7oH@))Lt0_9|Da&$;BGVVKM^6kkoIu8t{@SN#$xESSnM z-~FHn>ixt1hzjZ-A{XGM=;ooA6mJv)Hr4cvJN;+A2QwhMf%G$wajstUtA1%)8smJn zFJ1gs+iBNcCu@8T44o&%Q$0b6zM+UO#M42Jc_DsFL}h{p{>iZJ_(3eQO$5aV31E&Y z&A|Z#hiw2p%Q%P!C}(i~K`po;H)Zx+g8~Kege7xxJ2#5LJPK|nUhru6Rx~*C{r|$d&pn*AYPm_pwNhxcq14`Kb}xQs8I+9 zz^M+Bn);O!H;q6ETL3f7cbP}1+4Oqa(Kc+@-el-X40+-t7ILOVjfd@ zzNQtTY;4CDJyDA@j-OhxgG*%t%~)F~53ZeiWxD1xD@PgPuuA-bNBc=qYKp2G>HUM# zCF4?5i#3^Y{Zhd#;SD{VIXv&oY}gK;U$F$d=0wmf=|QZcJ{F$AV`eM<8s z$;L1(^9mdFAOtNlC(8c5fW~6IIGVFc=EMoiNw?VTaR??af)ZBttAVlDa7MN|f~S-P z<@D{r+Iv)XDgbxL0zP^R7FJw_i6d*waC*wXTpNO1A(#1yBkPTb%mIj{Wd70{;V~$# zk5dOjXnUn3VE<_}ai-lgs&(I;)!83Lx3e9tMlM6{j~DPrGSOsdFBa>FN2tgZ|8tQ? zzmZ4p9@`gisYjuJ;yK(q2)#qAK%Upd7jP@9e%jVL=ndnLNoz-h*M#V_O+=mtK+=1n z8-3$$8^1;0fnfvMfnY=0A;K=jBk6Z#at<7)0l{!wVtZB&blvYs2GgyQq91%7|VF24U!T^DOHz4pnf$6K|9zm<@44^q7NpyJP)c#`sB0vw7t3J z*05t|cJU>=`X~>Ua%UY%rxU?-ztCo^gd+m}NVjLgL7G!;2WId&_oWhtQEdm>OC_JD z;MEAf8!FWk=yPSMlOSJw@VOeU@`z)b=s*H;Hcp!3PG2uyjJYo?L3l8vk?wFpG$-FH zD1EqiQ*&DoD+iOtK~j-d1S^zAVu^}F;+Z$F^ipvfcy51bJ4hJkf`&a1meibD(>-y? z!xCkF^UJ=AsFNwOmFE?9NhIkLxThs40J~=C)(g(SkccYx663W{iL2Oy~xLU~xgkx!(^aUzt!y!^WEYv7|9}QOTcTKyA(t_=tjR zMTP#Ys`_g4`tGPTi6o!jt@xTk+|RMGq0|<7#*A%jMKow*BJ7!N(Q2`IUB`ufJ=BoE z?8RPrfS6iZ7sSRK`f@^>ZNji*n)-~oIa0f@&&;*?v0-Op>Ew}0pqBN zm62mMQ#gF_IK}pKCMjIz+q1eo2Aq?6cdp02vh^=&y|Y~laq;c;pvL}BTJYc4s>O|5 zT>t+HIaWna0YwOvZ^8boh5lYiP>`CiU;}~D_$w$%8*!mXm>3+{%VFCh&k^PoAr&iA``&{m>h5Br_ zFjJDv1#tmdjnhg~YFHZYr@>cSRN4jl(AGH zYD~08U`@P-XY8<+o%-UT{hlvbN~c@p@~=z@;L^Y(2N1*9WOq{;Rr)7~>TB{tFtFJ} zGJ1=`()wxkQo>d!N9xOsV7LeR12)kHZq;f?U(( z57;AGmoZ3ubn#b~%!NEd0q!QuhLPL|iJi-o{;R%{Y-?{Wols36OSL2No|SlyM|S~W*W_o22?s{FgR58KBZWUydY5d|@ZhI*l2BbB%&_+S>AhliX5^QB z&M^MYeME=MEk^Nj1c*`eo*lEkZCb1fFAB%$UcmF{u9-N)WM-!MK==neh~?*4l6~iJ$KZ(h)X5IS+7+CPs=_R;JvDAP^-8a`aB1_;(VVG|LWVE>(WXbk4`Qlag6Tu% zYp}p|%NaM|9Zml^BuiN{XL)Zsvp%XxEf_89Ock$C z^d@>Z%&NU5awAKwwO^_|>67B)YdWV-*XI*eFr~>~lqPs53z`o}UBp(#*I=L7HQ< zF@|4Z)#bRuw}))fFmm|}ysGLjRTz*%d1xc^+qOU_=kEq?ize{DxqEJkmk6D_G?T8&+(lrc4hSFJIVx$cNZ7@H}^8(RhUW%`JM4 zW^kz0ww_@*6Op zjQSUr()Tr}9gb>VoQqGvENUH57&J-f{}e3oq*8ITeG&M&x6ZAzpcDZM7hQSdG0W7!P=5Oum={e z4)($yY(;!(DH8)Ev_KI`&jm;nSf8i`T?~GoNs*Ju@nxj*Goqbp8DFw&1@o697oyG3 zV(k|yW#Jv%p~mOQ^sIL=kQ*)yn=N*aDKOk>^pc-_L9*8={XKM`s%m}N6+y)Lk)nd6 zkdNDNr}2i)Ovvjfizw;wyEk&Px^_zwOOl{Dc}m3g)l}7=u!cbNzAL-mNor!Xhw1&LxhVd3AZ?D!B!l_l&Xf zjjoK!P*7CJa#n!5&LOn16TLJDtwwHk8d5Ls|HmuRb_h+U7+QxczFOUP0Jd{X9n`?( zy^{+9?=|W#$l%yKldqKi0j|v05l~RT!s;wz-d+`A4yI~u<0nubh&W?gEd3pYbqmt6 zrWcTdn!QHaIBdfK#OmF#g=NBv$Yr~c1m#RQPtxl@H^$5Db(=fBgJj|%|Lc1A{@;>j zIR0lg`Mn+*xf`h%nVbE8iz2C{k&C6Ok+H4WzmR3O28^TX64syV>#c5%ESw-22IPhW zNZLF!1*0w~QNNJ6X}YdDQn zw8-ZPu`Vh~OD!2e*n~dQ!w?475@0P`(S_`8;~(6HBeLy3Mr_#?r|0+A9kx#-&@-6(oX@3K!ien#Yv<0)!aA#a&jjYBlwM_81%7Vs?*beF<|U z;3u1sx4P!IJwxOVp21!aaBYQeiWj`r$u9k0DSu!l%lxtr)W8-t8 z7}4n78oO6oJTmQ6=ed%4_Pc1OTbw&0RSr!+hfAse*e*{UA~$(B5!0|Zb!e6nrC&&! zRvufWZzVgsG~@Wpcb9Lbt{9} zCpqKFXS3+PsDa^x7|;TD(q>B@ZNeg`bobOau@9hI?f_5VD@;$gyw0;)?HC))+xO#WbbByoky zT8?qyt+4a(>Ei}PCLgL)vDMU0=-A*c0Vd_9YxNVOI7pT6xH+&#gIS z4B6t)XV}_BnRSX&^%%2~nL3L%4of_HK}nX9Oi;hC&6=z)7C1ob0 z*^6w=GGU~qR^&<35z!zG_sUk8w794OxoOADzM_}47<_j>!vkIlL1iS zaK3B(8n@}8wfjzM4bm-${U{AbQftnl$M2()PRnh9{xBezi;REqDt~w}`OcPp_lB*@0z<8cZ;#e08DymaLW35DTl$=)F(@lhF9nj@4 zqhouc2RP>IIHG&q4qAR`RUUwGqzNvEXM)wPjqZDq?Z9huEdre&XM zkDi?x0#zPQ9Skv9e0u!6%x1*35Kj<#^x(R|+*3Q0|s+iXcm)3t<`ebKf1ZzY(YL$T7 z@lEedEgoa1b*sp!QhqWG{DD#`33kt=M4fq1{29L|(&R|*lVv%;z+S-SH(LO5D@NjX zD^n;j5NILd2Pqy;c#0E(1eY~~{*-^}bo9pCVu6UjDB}k%N7y4Zs4kDn5>XS@Hhpqw zT7wpYVaSx{9kehau-p=EOt<68U!6HhC>&jg213cNdyA}$ZjE#pIcUuKyTx#>A9-l0Loq8XRN8L^mfJy6p-|(j^03=~lu0ZAdlD8vy}3fhrJ2JfyExpKE#06atEp z&de_O_Z(#^EEqrY&-uMidBxLn%NBhioH!Y&K3gfGce2nn%+NN)1qm0k*gb134u;u+WgXuMc_#|z{vZOaR0LA*#`}o?K<)+q(G~^7 zjwran3B(Ej%>%3U0_v%jWictBqhFwsanHEE888i?-Hit;Ovv;H;8zo+l?=jeL}1?e zX%3$N)7HcFKi&+qv-uK;uGvpUt%~!aQ!c>4W7#1URvRO#Y%I^|(rT7$h!cz#wlMva zoV*>8-6#UKLqz*KP+xF_I6+?;UV&#{O83e2vyzO$i#g_5wbO-hl; z**KP_Pni0M`;Cky&~e{`6Xp-u@z;?^fM?XK*G!d1%X;NksNUq7_%^N7G38Jv(Uk9F z9cHb`GjjyVNCu80i9>Yu>ZCyi$G*|#;7mo<9c#9r5)twNpGh$cweoX6e+xR}_X0VXmc$r{J^0a~;0lGJFxBxrZ(d-b!A zGW#%-?P~Rwq%O)W85VI9n@1T7vd8IBTrD+aD2Y^S66A8xXd6TBWpw6i>RO6-c5lXhZ76X?y`@VLG(5cEdFfqF5$_&F8~JNUh-yrUlD6jW4p6GFpDNV%Wp3BpYm?5=SPK4CgkO7b9?i*`A@b4iP7@Sp$5tC(uf4}6-4CX&1$VkpTVqvY zAArOc0c+&CfNNq*A)^kaGhKRJEK)wYn`~7|Ix{I7i}@R$DJvi)XWo@-ZTy8`-QRs` zlKN3j-lcYjdhv!;F}6}hK9is%QBH1PahyZJ&?Cg=6^MN=S1}f?nv^zL3|RZn8sY5)EfT5{%qGIF(>?99(hq*u6^2c4d;IJGzKrNfuWFM=}i0OQ3! zlb&Cp>$e&e{X5^+rJ0|>*7ph(V>pMs7ph4nH`;R8+b(QO3A=U~e>t_wx}3I1Coe~; z`1CDv1_$>PHu7F#NuGb)MnVzPs4Yn8mH}R0L9EHq@7gm#^+6tf|3jp29bbAdLIVLs zqyML-l5yE#33xvG0{Hwhn8O8Nh&gO9M^Xnh4SmgA3Zm zj>d{iwPeg-O$61k@fm3-c}@)tarwbSvQ(GPv5g^PXBT1LT}M>+-k<8J;LtBgeh}#u z5|p!>TB16BdL~y-)r<_tZ{kIc2aAytPu?w8SD{emP1Hq{qOLVk*O#kf7dK8=^bM*i z*AuF18XUk?R3b!XS^w~^VMabf+zRxh#MDEQ6;&1Bvy^g^Shc#c6w;rcN8d!fgmlNU z2(c-*QuDXX!1MxUv&q!aS*lG9W{AMb!hlf8zy66tvMO>X+7DUY#?^01EQ)B8$z>fT z)6pURv)l>_XAD(H1wqC5q>FYpj!MlM#$>O_7xc*$jF>MWxxD-{)|FOjVI3JigC7&d zZ3N}AIm@hZxO4jaa{E52`uLFr%ImlTQms&~kryqJyizW-z%|kUKYzvTXNI7^> zp2L+?C{Sy@*;!SBrn5S{j2TrDpVm#Xod$^&O?zVb zkmkA>!SH}AaED%|Wk2u8l7D~cwQ`4cIaiNiu;heaa`B3N4q0sOUC_6>1Sgll)5Mq% zLE-9)*LwOI2K}slx!{x)^^nDFKZ3{oTzQLN2v4CrlHDdVvehOLZV-#R=mZI3E%ZX2 z8=mszhkdP45~jAzisY~<)h zMIgpPaTh91JGj&~u(~=Dk#r;JGrB0fhPKv!*w>T*EvhU|Tvlbf)n}?gjC9FyU~b^m zmylCjqMkBc5r6q~mh{X0GHP%=xO|jcL@JfE|2zV~;cZop=a#InsF@;Z=5d{FW{q2J zgFE5rdz>UO_a^znJbP$lHKpm)wV1ISfWY1;M`{$(7#eKjQNa+I@rkZDRZENhy4Y-X zs4feH#G+hFiJaJFv!tnEn{gmqj6^TvWfUO15!mv zEN9*HF$XCF;Y}?=EoUHa?oifAGc#rF>7xy_$Ge^WRC)NK2X`0Orh0N^7^Zb4Xza#as5XwaDCkb3m4t+ zDtXv55rg|n-7P4T&le>})B%AzOrF$7G}4vzh0wV)3rYhu)4;2KV*D25Me_^yJ}w30 z@L|;;F}fvvyXC{UfeU;;X(l;8@oPuU_+h8co_)kqPtR11c$#nbbP~ngs@J?*d?A+hqzjX!T>X_tp_kMoBS9Qu7J7v7HNT- zAa1E(0@&gy2m#sSj+kS6`8l8;$1&C>uY_D%fLK@Av)H?L@!N<{bpC2b@!8;9?#eTh zq{!#sleOteuQ$x1W{TU;g>J9C@HccBw-YP=RL9CbX?D~Eydl+}%=1hcxSz^OA>Pgf zfx5Rz5OS(9?Dqx1d}e5mWc8Nz#TGM&{T=6aA=Ii7b^X~0{nk1+W zef!dEXNs#tjye1G@aNIsrj@FAhrE!E*|-@;wZ~Z``hi?CRa*DLK~a3J_~?d6)zHaB zC2{33P{z45AWM7Q-P9%QCWDp)+xO!51tkmn zO1nAToF1c+Y6NKbi+Yg!*9WU~zbZ!MEntEZEjP!BdSrw%m|Zr1Bg5?4FpTTxnk&We!j@&ePr4brF%@3FbO%P|8RPPt-z0nR>CySR z0>Uo1_pjgQ1pU>IbhvpA2SVPc@v|nL$#Hv}e35CVRG+~;A}FU=6$KVn(0*y{Cq9e9 zGfZi|xv=lR#iwBF;tccf??_k01PlD$8P`R*vqIP>lX*K)GG`vfT-`*-k0q<}zcE(k35N9FlQ;z(B1s-CoMN`o6&4HzA0FdgiN55z zqyjK*W;^%wycLlB2zl)^=gpSH0z!{v^7eK?Wboz1G|^r`-LN#zeyQoD$RLB zuSAOgRqHF6JUSv)?yD@DtPm}APsYSGA^6b%`zW0n7-xoMDFP1yXMtszj%67-CODu4 zjy=sh%g8bdofH_>2+ImE&r78RY5xA4RcfHRIhLhcYT&XN*61j+qC;xndn2r?NNS+{ z_bt^HjEX?TD)RXpazZp{S5=>jsE18^&{fg_zj9rwx5aXgFAyzV} zHH<5$&@a27Pwp4O=#TX`1pXO|Ve;*$G5YRZAO2(S%JrXmS2cT=|5v2i7zl|p5Qbb; z_Y|m#39Tu?3QzWO z&yM=(OK$fXs4Szk8#C9-=ELjXo6o;50VmhrM-uyj_lDn!B29~XKrTs2G0@4y6RZNC z>EZnsq)I-x-ArWLw~W}b$Nf*FT9Zb`fw_wRjZ~Gy-6bFDiK~X?=6!YbJ)~V+Aai@^ z<~ONPTE|wehybAqVYgJ9L?|BPtMpda(0lg2+L>GPn`ERMB-eAti2VsvTN zv)F9Oi=`@SfTZze?lFCh;1uW9L-o>?$H8n|gC}>22??dNq$};KCW^HeyTcYmiL@k1 zG;wWK*$U?dEsi9a*=@4Os>#7K+}ZYi9i0>h=8b2Qp_?s)3DSq?)@9ZHI3L&+&B$(k-154`a*@fMU9Fv4 zQ=XCoa%b=qYv-oO_t$XeLGc#4+`i(KOexMRPf}dSrN{9Ef@*!x@rtxYIvMgs&h}vt z72BFCoY8$SO%79$T06tsaDQAaC=Og>!y3*@rkXUfq>F4W+6rn~8y8YgoTB;8QR_7- zt*WE-#sJ_0kt1LOzkV;PU>@t{buj&n=^O)y@HZU-;wm$<@fnc&M5P<3m$5mPkE+?? ztmTi%Pc#^$hj5U~J+rf>*m&CG=s|qWgxuHwbamJg(WjZZ#2MAf6Z8PF{q(JQJ7*PM z!=QxoF{UVg4l(_=4Iiv#MSr0J9-*Is*Ii%Zt;|!3W}7*rv8KA%TwkD*HYiRU2SnM$ zzv2*V&JdTwT#vOWL?Tea#m_NkKNTZVQpdbJgSR4+xi`Q}iY#>fF=Cp%07Uw;36JBG z26R}k%|$*ec=jT~i2`o2nKMYG=*LDq-%wTOm9PNaT!sar8Jyq2h~T=B5#t22ZKofk zZM9#bZm>7_zG1c39|odsu%DS#M|H`CO;!m)io2Y~1_MrNY+sf<8wmr#?5KF2Rg06< zzlU&2+E?{b-*%S>Cj720lwn`ye?wI)30U8uevP|`(Aqtve?e7~h9jpnXVv5P^gE}O z_J2WD$7`Nh@CK9DI+}HkPCU}VMU@kqe?nCZGv;Y^>4<+q)$)@GPUiVA?F@+gOGRAf z8WacF|Ha-t1!vZ-d!z48I!VX2Z992l+jcs(jgD>Gwr$(C)v>+v&i9+&`qo@)uG+hH z)jrw>sqq|)%F(EMT;q3N*Z-bTJ4i!;sTlK0j)8+(9|Zf-<*uVYa@jcNvkm+ zd*7Huk$Gd|GWB2DF{8d2)lrtj9oR|(avD@^AS0#3t&<(_GWf%gcrvT^b}FAcJGfy% zur~;qz`rqhZ={57%}dM!RQlYYuM1&>KUx)o(fLg0Lmd`xsY;>DrB-!1A`e0$9izT) zpF7VoB=L;f7i78vcxaps)UgmWf5{dC+YS?c*-jFU3Ivu3dVvea5t?TGNr=IcMRO`J zlQ(+%Y*B;&OQ+z8_McFdX8Uhc)yMxERh3(U^s)bms*wLcRr!BKRf74ENA$l@HL3aw zRZ*h;fvSLube_Lab=Otx;%`(H`a;$8FI0{C4^)-=3soil3#y*q{u5Or|B0$mNHbbf z+a&*YP<7*PR0U_H4Iq2}C#v34Z2=?Di1qXa?`P{v0}6QpL)_sT?_Xtakfb%NzfhIO z{7lcDC;ZAknT9WdF1xX_P02E}9PYOlhz*BiqZHHnxGaqbvU2nu<;ed=)uV&|6ICVt zfvS~}Exv!DYW6=+731zdP!%?tibLZsRMna)+8h+;@_1Y70W!e^`yCkftv;I>w!10A)JU>E zz>vdmgl6vDGx<*x$Xksrll)xNTpsiOY<#jFCOly$uEY}{Sg4UN`Qx3fD)7>eY|SqP zel2(i$gs5sKaX0!UI}V9yb+oS6*BRpaVF@d*b?fC3Et@ESWI~_1qZ%sX0oDyr`dK` z!YMrFg$TpqyP(~J+%l7U8NSF#a{JE#_B>>HNnxLtP0fO$F6;c&R5l;Gr(p#i zamn|Oob1qT&=;f=R}&2MQ0*I2SS4cF#jmYI8F9I&2Fp@9pmv9C57jk?*7R8$Z=8=D zUEr2(fzLnzA?GeIth*rV{+IR>63ys5dooKZHjvr_6;Fs(eVEN!w|g*Os5(zkBa!CQ zR!?@Zc({u*5M~)2)j*za7SAe{8oXFzJUd8HuF|2RwvIVZrAF6}`@nLT5Y*veD0a!9 zq&B-I_;EtEV5SrS0=H0~1pgG61*L7veIQ0xGzPZgpePcaN z)2aG&lFcmgGd zd!c@01?8!~f%rp=*qr`=Qw_FRm|CL}ilRqpwsY9#Gu`=aGaV(G95$y}S}(P|G5krb zR7DeT&}P4n;W(QOEn#)i(aKQMs}1PI(fj*1`%gUPvu}A$(bpXQR$eJbS8$A;$t#{{ zZBL$_w2?Lo?^vFK2R5V?ntWr};by^{X2Ypup)FP72MhXATZR7(swTPqCsY;q2dXOk zAE#ui)L0u`g6r zkkZacee*TDktiLh+Wc2k?flQE8VLVHJ$1|3`JSotjIpo}`-Q3{B;H2zAH6Q`39Da2 zfxTNLB%j%-Z*gWfw520w``zaM1yxh4{zBFCg{Tzwj%h$-NMBYX-zBEVACPTCL~hN3 z!nkHp_Umh~c{SDUBQpdS=<&a2?dVoLkQl!z(~SSIGNt{0QknjDuDW4>s}@TP3oJM; z@H13RU37+sS4z_t4d@20_Tqy+EN!E@?K=<>uB=(Z^kS&e)pz)>G-F&i+49MHjtnzn zi}UaxKM=sVzSz^z;VZ=0L`#%y2zMb4`t0==@XUT<;BaCX z##pab?2H97KTt#~k>$sNT={6&hG4 zXDmh`?-x{@`$YIunh;FqWua7;6iT_)8szR1&zD=7nk#gv!*t=5TB~D;g1W!E#p^;3 z?%Hw{6C9x-UgPnVTkSNX)0~`$eHWNRnne`zEyM}zA5Br~#ug}@M-dh!@LKKQ~m{>sL|F*wE3gTd|=Fi#9F~mt|fQ)EcoNlCv~1 zu%sFO4aum>(zBTY^`lA)>zMWM2)IxW2iKN+!ynS@?TkG=(1dMqnjv{!1Jup!?y0@8 z(Kb+NlAHICrGWX?bSnuPhGBtB%`ZXyPR8l>nFVSk8zksi^JITtWWe%Df z8I{;r=5r?lQ%n@4{GjiPzj}-@t$LHd>!$Px=K-wd%>i0j?5`{yAZ?b*epRbB+(ye+ z%=7T#5kx{jGv*knj7_F`0GzP3E5~)SK32u%CcP@?rZUkk(?0Cxxj;{|@2~VhbEbV- z&1-?~HdWBv%y!*@erWO%tuoJm{6CjVSHBssm6f&pSHY_k`}8nz6mcd6pmTP^3;e=* z(bA;JrW!D|)0y(u(N5$ZYgAyh-9bowoMjnlDqAO@vknc=Pzv@ezw61fmCmkVK~qDB z2vB?I%rzYX`nE{FcuZ;0x8|eAke>f6+2^3td)EQWLYn|R`1U=il>$qX;@M&>xRjE( zXrPq^_zQ z3Z2H~diSqSV@EI7ZNnCS#4a&qUiXg|MdsYr{21rik)5ieFL_luHa1)^ipzstdU2hns6=p)_B?a|*U!=o0vGUOZ+mGlc%9hR{D${7<<_|u|%zhJf3!Hfcx@_XDDtYZHK ztA!cy3=`64ECdHj5K3$EFyj$#ll$NIf$tBHhhmPHU2gzJpa;ks+)_JMSp#|O7Wg`y zB6a>Ai*`Cbq*KPXNPnpCvc5iPD9=Wt_|i07fD#jiqIsIgfU(fG$G;^Nb;t1#m30K% zhnH&){Vacto??W~^5{FeLctd4L99Oa8#-eHY8&GA_eJ~*R*&Lq{VM1qDk7w{ho>1F z%Tgk{PaGq=8(kLGpzF?L7FIcV9vp)KQ)g{AyLxI0wwd5~Y zMVbWv2duU#)EyPG*R{MC&!3IDFxpc%r=Q{o60yeKh8NNQ1*;pBl9PMc*OTx!}q^n74B{DZ&=m*U$E+;z-E{eAWfc*a(AU>%C)5-rVaDP{ zj*xnPQO4c`oOy=h1?zs=<1{bK6qtDq#w>@^i-!)S}|Lr`XcCL9pB@#*= z5`2|h))TTNoOgEf({F@XNiox+h}v|PkrXDfqZyPHevJeERg$)2H}oRReU?>x=V@tI z#`D-V(&mWYE5G(c}!<(A$fIg}?)PCY^Ga06+(y%19ArtDY;)v0F zzr0@d6n!jc>Xdw(56xi>09dPcI9%VAG8NsFEUqa#AO=L?K)Rk`R3u_O5+uC5I7y=> zTJAf>J_(h6|7Bh+ZkDluNZtHbKkSo6vsNV^=NlP+(Vu>OVVLrm^L7%R^l3xJECin0 zo&&50Lo#-7Y%6F9W=%c=rV}3M42(p>Pag(*G0XG2kpf&@2q|w^L&njqp@Yjl9#U`N zh5TH0&;W-oRK=6R&$}liYe776ks7Sak9;jSKrYoNO*Z(kDRLV1t9HwL*Qs(uH@y~W zFaEs|s*%TtXF(nmiv220r72TRh?_7p#y(TZ-o<83K;koVGW=?71?ljNqgjndZW zBQA6kTjJ1-crZ?A#*5si#UB~Qu)5_rf{`6?m1pqF3tm$!181fd9HVjiBkth5H+aI= zjy0BLwgv_6&~OTduFJ){hW|&@R?57@!6Eclyp1Du%fW>FS z>Jzkc&+iCV1$YWO?jSaVcyfT5#AT*s)Xt3Wz9#>*^K_=IkCS@Ex=<4CT9d`PkdtOE z1yMW5ckdFHg}+>N26q7GC2m>9I;`)@RpU3|r>1rKA@3^x;i^Jkt~%?!%jKqn;7KO+ zzg;!?%T*2Xs)tGR5|ToITobCt?sH|W;Di{+vFwV-62SsQxT(bV5pxx}iAlzc`;ne& zlT!_|JJdkkn8$cU>Y(bmgM5U)0Cg0qeqA?vh6*_13s2+GO8C zs%8Yrxhyg0K^5p|73Uv!!(AS~TI@P&ZmLH`b3n@KvP>!ljS*xogcp7m{_!)y2o&Q6 zUjtXPoyd40D$ICUuEkiT(blY~DF*y}CGPh#he{};+kk^~(hjhHHsyo0uR6&3t0kb| z$4#*ASMdt+Kc)?1{rAPIxU|^cm1@R6r(aMSH)v!bZse{Y<(fd$x_wEA1tsVfnXY8d z{Q%K98N1QvG%K(O&q}!=2#C;Af5jqL3WUnzSj4rQcRZ%MAC8Y#ZEbl2sSeyCAq=09 z>GBDv_vJ<+WfmKXeT_V1j8bAKqt`#bjGeZfWAxo=FTndaI{XQgwlP~N5-NM?d@?GM z*GB{FIFWe-qBD96Xy}hwLIlQ?I`m5~bHi^~*FH+8<4qf@C_t zNIZXpuavHBJ7u`b!#l1Zz*s{ny#|HETZxK*ra>VtL6z>G`NMFFu8t^v=9HuY99-bs zn24-|(S$~$^Ag_!*SH`2FE7_>sexzKq5bxvL(LDhTNr0!DwRIag6)>gzABfJJL-K( zsJ@Q;swT9>Pd_q!3rQl2OPZ*%UO}+~ zGY-d8sW8()FuBxeU0sBM-4AIk zY8*?WO+2Y6I995al(r1^DseW^{h1&0F(Idj`_8zm(oX~TncwiOm}rf=>5jP6nZ?Q_C6^djW}Q ze>UPJ9Q{yh9PW-S(ge?6&n;lFm&NL9-emu)$NJyLd64|u=k`AutN(t21C+L8)|9`d zO_JGaGWc`IrG!`W>$UL0p&;Txghifa3MBf3$tbHM(D#syl5A>G6P6lxuQ{Z61iY|POv$>UW_u&>~$oK+if?l9aq zssv=*KnZ#vWI*VJ!G)!gIr5R-pa)w#ITfsw5^EFHMq}9`nm{uXJ7=9+JprASB9yUj z4*NpgFrK8+l4IbauiQ*n!vyn&y6lqVY&~jesu@jbV$V^hybTLf+Kzr+F>BcK5)c@( z_aI)8vfVS_^KqZN+R_wCijrMCa9guwy!&P|KU;-twAG3eiU3!$tiFUhxiG{WI(jPg zhm11Fvkm9(X9UhnR>BlXB zI0TAKT22{XiZPDKOX4rZ5`+v9Loqa`-V$ZRheET|^|jn!8RYdI1m_mX5OUQXV+igc zR0w5ujrV?nU?gaQK`^$Cl06io0s)W}Vm3=m zJ+xLEPnGh8e2!p~u}fH{WjZ`NVYS<|VOe2~Dcj47=EO>=oHNwi3t}+OOgAUNu5*l- zseyQ;q2fj4H5J0==$lDNmUmj3cg^Ye+3Absz`7CJQZs2w-?G^GXhaY6LLrMn(}sQP z_;jutBmP1ktn_qs5wyfoI;;3;lCknadZ|!Vmdrg9M_FeE$E%`RL&jb^F=iE;Q~foK zX9&kJ=8`|zB?v#lB?$(|ivp=%49M{Gu!+UV28jD1O>hiU^JvpC7}+M|F@L)7C@SjP zKo`C!k1pN@@|J*tVsO16(2v=2%CEyXSj}ePmu7bZNr#5o}9w0-q zi7{YRw++$MA#nwH7j5Y|>iFhm6Nw<&3JyJ8Y9*eOC*hx}<&aYD8&(-zIUr<>2oZhc zbh82t&$S8qI5V|=e&@EP=PgSWU~yku4K}l(aHT85mx!#EXb@~z;DDV&Dr*v5y9?9% zW1sYAeqB!Sc51Ijd~FYQy`7*iJ%vF*@lz-uP+Ol4V_(!QL{Tw3uvndmoh%6}Mu#@( z?T(a8jh&*4{|u+sF`MiIIHil|A`a76&CJsvzyhpmDWZ%gjm*73<|(&K##4-)41x^3hYY7E0;Me=$MX(f zP#ag_!*hNjeE{G8qp*ZZpSK_HS7-Anx8L2joH;wP`Y57TM5)&|dk(>mK-kx zG(`Js*Kl{{va*6|ovDbV0HSU{+7LX6uDO78NX&(rhIZUsrQ{@YzIPK6eiIRulzan0 z3;~Y~7eaV9jYj)K`20~nVhw8{64b%-Oo(6@~#juxzGI`jEV9Bvc$+@uDV&C77i%=;3~2pYj2UMuu3L2(XU~ON zWvb!!x`VfxwD{n~vRO7|3xNluP^!h^wp!UyqyFdfXn zqB{&Cz>Xf4-2#2TX=i@Il$u}w(3+q<{5U})x3PT)s}|EhcU`o$rzz|6x;tThfJ1dO zH=e9D`~kRj@Z-H!wCg8WYwKI8dJC~+{rSa=UXM4!dqj5CZKQh-6Y=cHi zN47QgOs95yRH&$t!Y2C`KMr%yiQRjar9O`0kX!_4! z{kfXqCvjm@YyO`$oT8}eZ*6O8p`E9ZfgG)CsYx{a>D%v|<7-`z^efeZtri}U_#ZBI z_*W!yiFw;-+z)8Gdez%-1qft&E@87KQr$bcX&nG+k+rZ-|531HsiCErgpk189Y=>E zApoH|n}d7^#n#R+qCaXTubK-~gN}v(5sngt`Sj}}Tvd-tc;;5#DDcHRwhL~qH(bC; zSCCiG2_s*Xf+z@lhPA7u2$5VY3Vil2QAV(k&B97fUi4G`?;O%dhhC;6nT1J+6`HK{ z#ADs=*$F96VK@)djWKFN<_v9{PEMW#MZxJ5cB#Wcv*ye0u%JO7>2|nWKVC2R#E$AE z$6{kp5)!{IBSQM4j3)Hw4BSiI_+*{3<=0w(2mnY`~^g?EVSBQkz0fSuL2K9M-EYW*i>%1!0 zKA{TyA7pkt?xD1BClP`KY4e{El~RIAB*pYSM?*WZa4^+J;4sw}H6m!SLHzADWWr=T zP%xt@f1mnpku`n87Yga1#p;=f-*{~E;mZzlegHxv+6kUq73t{Bw)%;ocwohyZt zWEQ`sRHfMI10`(ytz1p56&q0=xZzNDQcUZ4on=#aIq8sYTWV==D!E3QaU!w#TI7(v zy44Y~9Y1Yb`_&m@f5D~GW$*MbrLhvn z)UjcpW7~DD=H1rkq5q26r#oMx`bVo>kf<2{AK&hJX$~vrV&9x0jDht@hQV^UM3h%Fk2&PJm(UuSk!S{s%Qft&v@1PWCfzR=@zbPCPR#pWu1royF3=!T1uk=*yH=tmi6W6j zwGHSG-0Xo$mW%TvwUURgNw=I1sVLQgLR1^zjUN^IFfTKtYK)I}TgF3`_t9^QSKWA)=x!3tf=tSX*Q<&cGnmwbOuZY$=ylWTz3IDHEsJzq^i6Y1)cAgFG~4lABgr7um** zPN%Bve4RMIAYq`E-DmL!C`6C_3BQfO&|P`+6E;*z&}h8<(hcx|6SuB5<Y_&O0j}TE`{>wlEn=mRfn-n`l=nE-<-OZNU?&|SH z#SQX%Fmg2pw2hj69~|rA6HxVOcRsy5als9VP_29 zsXyVM+GOEE!P1A|(nky>_e}Yp!Wtl}KF*9VMlgsJN6dYEV^4HI?B@86CHHNS^?SKB zkm}JnJczC*Vz(P&x975~ty%apsxYTuGw78+eH5OgP89m{&sUvZ&d@9KLc|#x;XXC| z)ctg~$(!%JZG<~ll=%Z&Chh^ngPH>4_Y?hC@-g3Ij*f|czGmuorDI+%u0usZK_)m-JzYaE2{+ojIzl=5i{q;Sd3h5BP(D3mvMRfZ@nvyb(?+*y> z7s26|J*h`1KnUi5g9G0M_JLwVWTZ<0j|=&cKTrm5b?+OMOU+#>Us)0gTi^RrJElze zBKx?s3IE%X9Mi<8tbeoBay# zyY3notngO@HoiZ0aQ2vw`82h>Vk$FCxsYTk4&^Qj5mt4c3e%YZ9l2DNg95>Qm_vo= znGilo%|J&%%-qiWmBuTi*x05d>L(7#7?sT7+>n@;$J7}LiTGv6;}6R6mL^E1-$_c zHSCSHM)t2tj7KDHZgDZ4or1LivL4!B=fh5rNETbG3RjOy`4jrjK9~S%i@S^+iCUPN zIR*(g9|XzJG*Bdk3$n25^IP*g{TU&IQgGW@mf`<|hKC+P8M=R@n762OwKKy-cLjd) zX?>2$YRuH7nBTw&LB!Gu*?-Yx@DNi$B~1>uF+Y(Ias#jI6s1Ey)g~(pQ@&*&0LFJ3 zogGUS8g#|~YXX4YHrkxkDpPeX|`fP8EN3ldASCqp^euUvCf zoyM@SLp}`1?DP~N7+bb8rBHcDCVN+u*9~{gbxCztYY?3^Y@nGx4jTyxA`cY zQl3bh(w%2Z)xVL#%i75Tmx`5Z$km zLxu`oe`GS%pvt7UU>v1BHHLeBKT^LA5Aj^KCZIm~(_cpdvz?7RC3dt`?xH=*L1fy2 z7YQ4-=Z!i<8@kuG`$TN}R?F6zT4u1z=`zp{@3GX+0DjNqp|gvf=%Rus{hBt}7GgAx zr4A=UpX-{Vp$1GC`Uy{m*RkyKCJYH~8r?mm?ESd?31G;+Xzvb>xc z{-e)_4R=Pr#nz6O1lcC5E^#gQvZz3NZPm~XEbAcL4~FYlH7mT3U`4Jh9P|edM1iL! zNu>pe<=KlLN22iWz_Mlt4_r3{TXH@f$}O;#2Q2loI%5uZSpA+S<_YW)112x2F#q~9 zNdx^&+^E&N;!cUh7hb1@%KI5r7ik9cbvW@mt8JlRSF1qw+T4dmD8&N=ediRx{t&6f zXz(O*(!5}F$Q!Z46R{2|kz!5+^)`P*L&By>^~(?#YSvCljIfiFlxY-l*Gk-B;wtBH zieIb6PU9$1=}8u@l!HDH*X#}5li{{>u7L6w>QW4u6fw8AmN7wg7|oG!^u2LFNY|*X zJ$%sKqEFN4V8h~TwvKCid9H4uafx*_sxK*q4w9r$)dJ~htbr=cUP{0_GZNMSloz6m zacPh1PoQeWac`&`fE|p)#G3)Z@7%%n><%il93b0etjp`&M0#P~7EMhm^R z5I{k5ZRwm&d8nmcmlAT@MD>>PNfTw*R?Z(Ug9@)Ocq|slrqVlNyC0a35Ro7teRnZ zy$Y6Ua3=)-sxNq@g(VEIAJKv2?^jF*qJ0O>P(1?>2MsXQg>vjgA!SVB^&(vYtym0i z3ryl**n`;{466DwrsU=rR$Vge>jN31DrDta&m8PJS%O)kd{3;aw9IZV0H=`$i8Q>{W3c+j?d~loHwiG3w+od31~u;!0l3E$L2g&7iPv)LP@}v+}=* z1tf0OIQb+XUB+_@oDxH24d75}6`@Gq6DXH}DBJJgY4k=wg}nRq6aN%vKe`yJKl$aP zZuTG~rXO$r_9H_-tZ-1Pi5F!}!KI`D4s;F41i}!;nzR|EyR4{+=D6)cahjqZ&t;U* z9HNW*z`W3#><8Eef;JhlOHxqmH7H&|081$?n8quqD#lP4@!@26nKvvoL0T=Ef^3O3 z6qUBlSu3!l{SJ`o9+Nw8E+yzHN%xb!X#-dRj*^w+<#IJmB^9LuX}U=Lw6&E+3kyc) zMxqa}?~JCuvTI->w4+$T(XK%#9$#HLX(PnKU8E0SUdQrjS0R)RGuqABHuBeJ4YAxM z!;}yv2ZMJMJLyDh#{@{)zMk`OzPL9;I4AiN%pr>ur+NaMpz)REdYQ+4)m(*3(MnEw;+;3tm-tYlk zANl5lx^_hhUiYTFK9O{(-O2H|V`ua_b`7VjAKcZ7%ZC(|o3!%bDEVNmTj`CM*=sp| z=gg4j{cVb_{Jf73Fy`?2P5akL*A<{|Rj+-3*BOcS+SWV3f{kC>BkAUOj}BEK+Cso0m}9wfU+q>xuajv?rwXOr1-bb~h&!URR#V756)k zcmCF{%-whHe4af*jKQHmFcE0n4}HbmDq-wM^rBzO$%9$GjKg$?vp;+|D2!CQB52pB zplv9xYXe*D9vnMy5SQO`0$b((O;GQGQyZlBbLGs&%(w0xD%B?HO`^Q=Ck%q{BcL6uAZGEolnU$FU2%Db7ef>puNQp z?Z^mSurn2jk|)@g1zZPR6v#uW4qX<=gZLe$PSEdBUpU{jIkrdR_my@$jsP$?TB5q` zLI~c#%?%V@Vnp7A->xGW?i5j!OA%Z9&~}j#E8#EBqaAnyES^ddOO;QZxW-W#QcI;g zQH}epsQQKQ=tlB9F^!3zre)X?tJ3HatA$=pv&uy|l}7&cQs_dfr%a}0=t1>Lk@%Jg zS<dp2#yiKI-iW9`LG_}x zIs85sPyUzuy>Kb?Int}&%s0?G^y7V&=tLl&~ zlJ($6q>4S(P#KrcUIs(pp49u6O*__ALX`9_Tck=6yY>VdR@KedJ0)pEc58*7a6sf9f-+T2@JN;zI%-FG-bG@2-=hvFXpk*YCl?2 z%12z|4D1Q_U@QI$IF~d}p7HU~9rj>H)-3IbrHnPH>?{aGVxfy8k@&*^~jDI1&4~R0%?z3&>0FKrY_dLck?b0s~ z0Y{v%M;>c8>DD5dw;hQ`9wPSXQ7Rb+9_5rkViN5C{7J1oYTM~Ub!0wf z--+xxi8^ZE$?Q706nErt_Vq9Drk+`%c0C?@w4B4YfC%%gnT9h&Uk1&FqC0^|ydh60 zk&;lGDL$<`ImnSe*jw7 ze{9wM>lY*a|NO=H-|u5IBzaqCs2~q@vD)6G9~pC+KA0@JWi-hjGTEP3R5Z=ZQg?}K z#X6YIPLsUGsJs@~?k#WLO0?B$G+Fsnl$*0!0&(anY7}%AGqv)i&i43o(3>KN;_>eD zd;o!e@QeP;Y1nbk!d{}1))~xN@CtczCO39>#mVs7PXHjaUrB4EwWrwN6Z-dn;iynG136RjO=j zIjhi6NQFf&9}J3;cugp83`gn!q&H!4)f9{2B^JSI2b(SU3U~5Er9V!44#2HdhKnpCzg(z-R zc$LJm&Qjl?zrL}bQX?b%KGYLpFr|M{u+;@%rsLErp1h`Dx8*nX=MwZps?WGanon2& zg`FH{M%SkeyVyoPBZ_1^J!6z%B|)0Zl+Ye;)>xxt+@~=_k;7CSC}Km{jmSJAZA6zM zF0I-x5PM$t7k{V#2F#vZ%W=LhAx7jbJ#>_WEtHIj3&IdHAYgA?tZy!P_6pfUNdVGH zBRx@CJ6c*B&g2RjJ99i|1r@I@A63f54 z^ri*Ti2^$Y@;ry2jFsMuWYEdJ&xNX?HlA2We3;zC%xa7&c6N=ws+@x`iP4ZRAZ$Rs zaZ4i=H6>Jp*9s`-$!^1nQ-cnC9Znq(O?W2`38PpUT1(X7dRmcaC`s~Dj=eVhjBEUU zjDw3|uXCo{(AklOXoA8zo_jaN-!L)_z3n%xfD_B;^&Htd6%L)*KK9Whv|02cNZzzv zKq_%hk5G{P`*G+DYd!;4U$9Jh$ojzT025%av}+qE$N*io^N3v&BndDl-{A8}->ymH5I zFMqOz-fv95I`)EtQAt#?@*6S>Sv7#_iXqNuI*d>j+$Jc0iiMp)Eour+bdD8oIKz)Z zJVKoUG0GZmxBNWUT5@IAV^hWqCU2!Yw3dLB6d{ zQ;uBzYSqgKc-TZz9G98;6jE`FN@pIQvC_hhbajZ**0_|;?CX$!rLp=jL29+*f_i}- zbFI5N4Nb2+&P;a4@NVARp**w6y&I}0F9^+0XEJyWkB^)j@HE|5maw00_w2=-Z?ac?DQ5L^cMnB;{EaDEnFN!e0o*%Ql2UITJyE zWbEQS5<{?FtvOoe5PJqlU%yg_We$e9K+^6ZbVgD>fpT}V zUXyx2diOP5%Xom{+RX#B5h=7$q1i|sB*W6Kxa{6MXK#V+JTl)p$=$96Zru5xcBttC zn*t(m!$@u9009!aKWM^|t|DDPc#s)gR5W|0254=C-Y_mhwr(zJy6;L5<^+ffqY{%d zDd;^-eN2Vr4N_~U=r%O;Uj)(T?1>AHnpLo2{_$hjA*k<8GvuU&U@niia7bLz_|xwM zhUrI>Cqgl2z#DRo(=YcEwGL(Bfv6*f#cB&HFU%fDn8&58W$1Vvhs<5h59q(TsI+hr zG5}!TzHPz$zj!tO_uFFwDtZK!7aLh3a1N&si{e<1IX7=5Um&&mVevX+ z8uw5&OCpu3TzkpQNkRpqzfh=laap)V%wh&0!bRk}_mV7sz&%3xTUD*Q z<-u0nsX^(EEtmeE13`g^!VKs#Oh5OTh4tZY`Fzq(Q?0(c+XF0qBK;tw&+{}Wo)UF9 z@su-z@Vk!2IbTGCXP2ftKjbAMuclek=De5Fx=1pVAx=k!Y%YUkYG@p_mZHoH#-RT` zLlkX32u3Ygfe?`_%pV0>K=73T6bT#E(BC`mCdw)Ry#5Qv>F#k#U`(JvcaWPjCA;MO z8|w&ReK~Qp#kn4#DFoYoUusP>GqGhk2vtJBAF;7PoJO2XX$4s5i`k%xy`6iutKZ!( zr`zzELRwS^RpuCs5rr`yUW7B#tF8X(IDUzali!7RETDwuR0sC`Msdo-rZDEbkP?h%#9a{RnkBnfY+hAO5K#tZxUhQLaeuD@Pt#>VohK21~&f zOQys{J=8W`_8LmM)CGk!r8ra}S@v4VLrRExk;6uPV98b(^fMjm!xgL(|9wjQvu^e? z{mz^3r3+8?6<0Ao)LoWX))5uDZ@gABy!$4glhBAros{bl{wg|Q`Zqkr`q-~sX7+Ns zq>4jHG&fb6-qF}mjK#df$^;PORXoevyB$3Nl=W5%&@jalcipn*GL1{7bEZA=1YX;F z{l36I$hCN^GO;ci1UXRw%i7~gMhsawM`Vv`bSH`E&M^ImM%9MgrYP<)nt9A9;%EZG z>P4cJb<4WEGU{O(>k9&d(+Y&{juC&(M}?g2&IV^^UI}WPHp0U(> z5-wK%oU6wvjiu?7wi#|4N=S~Db&`(t&_Gmsg@ABRWdcr+B|s!(=5Lv6L#xK;W>zk_;vMl*HK@yT>R4C4aU#Uf7DT9U4@MZ(^DUU7mj!~G=R z#Eg~;kUDn;rQ@H}X;yW(tqb8^;09rZJ^_WbG-qFx!*5pEBUVu+n-ZvDFC~x>C?Y&= znS#EQA=G)$lg#z~0D)VLPN7__$pl3G;>>wd$le`t5LkO6O?tJ7 z%~XfO)SAMy>QI9CJmYGVti8kGM$J`5FHcaxc{8>KRkTa(i3XpC>t-TX_LjaQO#tg4 zkoI=czC85_nMFRannhdD+=#5(Ugk`jyl`^q%`jM#kxMs-o$1APP2}7tVJ9pfQOJdPR z^ABxOpZ?0>+%(P7q`q49xOB^aRgBOGKrMb<8l}Kl?CVbgrQnmbmP{j-D)Ez3t^A2L zPUz$_mg=o3M#$Bv_Q}5hibxEJWQ!xuqCU@}@Rvo@9@SUs&+6W?6vc6mSZv>qPvDHf zZ)?WU^Ke6I>KS$&9QH&Ae9-9w)vlp7;ft# z&bY2oDsPpZzE52j?UFX*bN5g6XIjf0z*?@)@rLy>olT6N!#V=Lc{kpMWHe;xkWa0m`oSYB1?@cP&^zV)bh1TC7BP~%K4oAi(j&SVxZ-#ZL2#1_b;X)v6ifbHd62*xU$i-HK4 zqk_6Sf+}kofLumUtAJ-#r{1?OXKr@`BJ<}$SWoS;RBb1bk%Ha~NG)^}0VNp5ONC*ih{ih>lot%w%++aC zY0DvP70pBa9nDkytTtUCU{~45ZIT{{ZBlQPIQmH-Fv6IZ3f2^<+suhkRLv}_Drw?G zX0L9(HOW6P8Lp`T7Q65OGksVb#_MK>tnN6Hhh1_+nLSO!t;8DIZB5Ed`Wo0*seIy$ z441|J?^yM_>?dz&$Ws#PK|~d({nvW7Z#C6lgN{BR%SHs_mt}PGTE{ zP^mk<2xU=6d_-qk|ua3DpyEzd`?xuWq_tPOy&JbT}B6NjqY3OVWc7hMpvPb@2VpW z1N~)`h^3q27P+}6UYpg@iwPBgGzH4)C$Ssr6+=IOwGT^8!CeEi)(*U;O_E@@pTvCF ze+(&prav6y8E|`-uboIZj}2a-)f-Y9qhVa}C=`^KwuKxqaCawZ5{AUJ1iK%*h*>lqNDM+1QS}#~b*RuC8l6$d(MiIUGh&iYOW<;`&%O%*6t0G&l^mHOlPQIcRPP z?z27X)-c>tKl7ZX<%Mu8fi7iKu_IcjER1ijk3eX9pwH2l9PJI5%? zmM&daW~FW0wpnT0wryut+O}=mwr$(aO5^4^r+akYZ}iu9+&yBCy?(@wA1hWw%sHRA z-btd-RI@3VC9kQrcuK20*i^G!7Pe`;VpIOGo;Y|d>)c&GcIh7T*{=|Od{IBa$9bDF zzDL{01#HlBtxVJ8SUM-&Ezt_PIgp?JUdW}t9=V6#RxY-o!=st7!vAqeB({6Oksk-!dsq5I?*L@(7Qi|{^*ftFvIuBa45Sa-CU{Qw%H_= zS!T+r398pUcfJC9jE_U*1*bHxm;(YuPqomb9c3?NE6*6;mOUE8V*y=Af@Z;ge-S@O6y-OtzMvUJXH01GCDiMZ0 zlMNS^9AsL!r?=F9W1Q_1c?kDJqCNQOPL4ZC`Rqu2e7`hEYK@)UEakb^w8wR!+x?`= z;;aXQGsML;%BVf?9f7*PHK6LLo{4&@0TZbWfO3q%PLA(GW&$5CjoVIPR^^LS6|1ia zJHi)*gexKrk%iN0fZ259)^9-Oc7)t(z!qDJ^mYeao&%^TPOkOU9u|Iu?-I1x8Gj&Q znb&CX-5QL1;AukJfjVsJn6$XsYnYwP%d(%2*!NzM*T(OC+YvDnOYqDus%CKv2nvv?1N*t?C#0okU|y zZARV`ms|K!k(pBn%w;?)&nY29#sCJXMiCVMIhJVQi>&<$mRw`#pU10DFX5~>> zJex{fWsoBB1^q;4qMyYk;J;pnMS`4ot4`q>=v!2F#xzDjRVIpDj~6Z7-MDtX4$OMq z;CEfHrl7QW+Dx7<)ze3^b69f6sT8}dIK@Z$qJ_hnT8fH^HL|+In$bli7fF}k`>!^=1;)*w+ zr64w8HWm}<{>Su5m*vFydMtZD4 zGbqAd*tC9~h95GLCDY-Axhi-`GVCMG=8=0|U zdnnl|38W>_RZT#P{f$E>8vNo@RzQo~c@75J$vS9znQ6fd%{AJzqBl^k*Yh1}XJthyDmw%j@-^C!FKb9NnS*cJ~Vs8cgv9wZ4xKap@6kzaHCM49$TAve*?x4g{uhrg2yt z-&7`7Q2BZ-vSuzUx}GpwQ2EVq7o&)+iX(`v6nHt!%I9TO82Q(VA_%OU(!Tkxz#7GH z%s)&RSX5(jRCK*GPz=*R0)C!^)F3li()%*`268)+V<=ttP7g!M_*H(=u`no9oVrW2 zc!xjjTMSaMNUiu5zS4wZv1gzNKD`8713lYWmhmbVeMRV)F7}o&@C8u2z~Po6b2!C` zXZwEDHJYYJE=>faF*Xyhz?4TSFHlh|yd;PwS6E%L{zSg%BnP-5B5CFjsesZHTT5tp zUVKfw`~>B!;1a25(-E4RZ`1L2-UCBr;WD`}Zyr!5U*`kKv}?Hh1I?fLHzwWREbrZM zO~|C*c=vO+z^d@az!-mlRfI8<8D{w>(;SPta8iR2eQAlm3SNO#jv21>dMG(E$_JIr z!RKk;;xj&wHSW~Pe1fo-M_}N(8p`A?hCNob9#_=zbM&!mVs_xZQskcNqL0YmNH^Uc zaJZa3YJV}S=T;iM|F-DUhD{sh`8&VD?wj|{V^tetMX9)b_j#wnsxE{3?n^$*=>#>L zKGBRYks|(LP!nbSi+eM~xD7np0E9W67iRs0QuP-r zlVC?&gH5=P0G#6NS;hy4SD0^Ha+>_W@{z`)`~DW=Er2_30}a|~K=zs`Cvc5nGIJey z`p{(u;MKEnB{SstI-|;ui=I3yw{QMhUmNzRPlRsvjdNwQ?ybh{c#LJ(r(7Je?y*N5 zx~$x$nhB?0w7-FEKKs;g`IJ46_8ZtS=7>WVKxAq`A=ZChqEH{QZU0KTZ#-n*4&yq8 z{QgPfIzIm%!pZG#{F^Rf*Y&nj#W`f-3qQw-aUf0PWzc9Kssj+;9r%D8HV&zo_{FM| znGoia0Xpk==$-MxRCKwB#&tK{#bC|(hxdp7*U!J4MxFwIiZ$qOr}2M9yNv%H?f&C5 z{(rz-wWa@pyRkZjG}3KMW~T8UBjq1+Eq0dIFNIobl^V@G%1e#uDInN%WtH-}iWr-C zQm4B7nJG-*L~wX_xIVr>KKMidGix`U(^2Wn|0CS>f!U$?hPx~Sir;XzFhpXuFh`@8 z26-{0)vmkaQM6VgOdDD0M4=Y+L*7$JdWEvlOCG8OZQ!RoS4kc`Y^f`nfIOP~MKVDy z0k}e#-YOSfBRsi01k9LNEk>9euo-|$MSF8~V|%B9t`?WU+OB`=h3gOxf;8?bQWUJ^ zn)SgY3}YY6iUdp4NE#2KL{zY34U1yCk(KyS%zookrA5QiNnzU>>Y;8`hX}ob$%x;kh$VIP z`BBp4Y0|4jMg{x-L3cyH>8@Ecy0d}Q1G$RKXf|a218g9vZ$Y5-eM?w5t%)Zt z$y@I&k~Vjt=dy#Q^)vk)MT$Y|3@$S@?7#p|n|{ZR4MTL2_t?>o#ekN73N0GP7i>;oA1nU z85^`kjk50L*KeSDDhD)H%e9tF@nA@a%UlWzHhO&$VHbyaSGL8v9AYW)8FGt%;O@3( zbp`ida91rbjJRHRx|xZV0Xf?D0m!fRux-=1Nf)7oyu}qy=Fd@>2<%H18y>QE1 zZAj3Mj#@CezB3rT*H1cnqSb}SV)b_Fr9tiT&zuNVe9Z(sqX8rb@Rwd}0PhBMSD&2abR&@7RPNn;*s2n&7Jqd0qJn#R3+4h4W757n0SEN`eCC=C0EN|D=@P_Uz zTJoVfoA(+te20v?MUB5jj=MemD3n2Vw)?$wCioh={^8*f#Q;<(vT-}A=tg*->FXvGSKh(tKcSQWEbBK zL0}K+F?=}|Nr7$<6U}bSF>RI<-6o{g?W8d0<+L$7R#;YmS8IZ`ua2D>1I-BtNBGXb zvY?1QiM1v)EjgBJ)RW-GZWB91{(hW*77(woJ+;`j!DCfp*EGAha&ES1=E%OGa-pn7 zimR_P1g=aub~j2eCr1J6pi6LP2=%lMyD@!`nTDDSlN|FC`j3Dm60}OKLP&W@CaX}O zGNXtLGlV*F1NcjPHbLs85X1H{oY;{iWb+{uApUV)wMo4;%Neoze9NilIMlWpKhkF0 z$}|$Xwwiv+E+XB=jSjl?^8#9z8+nk*=E%+27ivFrHbK8{Ak?;e(k^d}a<2%xB>Bo^RODZ9$lV*|@iJDfH}wp@R4=;5c#o` z<$QUNL0$vFz~Pnk^nZmA>a&r_3WnrE1O<4d#|tU;()GfdUSF)uZq13SVn(DYf6T@{ zn@(_O<8pVk@~pJC&ZE)c(hJ<~#s;KH4k1PcbQFnF>2nK?l$KuNuW0P)#mmA)3`{)E z?s_xM8a;@pDWF9JN0>&(hJ@Iun>B+Fit&3jbvk1j2)j^?avHBHL7NN#sZ91B{rcr; z@e@mAAp*W6HO68vn8>&iBU074F9am;FTxud9nn10m+@4i7YO1O?Y2TsM+aLNOrrM} z;nh`G=i4HR&TT;XwYJu8JV!vbhi^g@r_d)%gQtYB8b3GmEkfo}Y!ndmh(>t#``HhP zOLRpQk!!424mW(@JbjqD-px_BN0JEyaJ*!Y{zUB<$rdT9NS4XV%-qD237!ErGGtxV zVOhcFS4HuzgK9Zml^&4JQp^wBZrbs~MjmtqkqXfa7s^w#Mq%N~GH-OgMC51{;^0VA zMXJGJMS}haj9S7!naTtRoO4_lp+S>Cxu((Z*de4rleS7kB+7IZ6wvu-ho2{DOhO=i?$$$7+rqV<|X~^z$VO|(8q!|)1f=rDmPBMKHAUO zsGq0-UyyxYzd??>xw#*nik@m= zRPM9(Q2}NFgAAHF{A%M$rNxxSy{#+|>s$tg14u^A`02d}O0P66yPnLx?NXc-uHr&u zRchuVD9CD4Msm*9zAi)vL#`p~5%tKe6UQe!L!8tpj-eTxp!?vID;(J@s9v$Egm93= z6MBrsg%}zB@gl^_KyJiL`&AHvGfWP zjzoq4)ze!|jcSbniQ`VKU>%mJVs@(*by$~iKQNQjcIq!iNjuG3bypFg-}%)hX*sp| znScp7eNx#~9dPsAy%BgFmM4E#(bw#HC%MV1{l-XAAN$d$N{YJo_!r@wSmRgz=$caD zfz(LVnqIs|J8?_ip=_4vQ#wu;nv$^H{{8Vw?+WV9`bhIn;?oPV-s-W-^SdAVPJ9j>pAjuWV=b(t<-#<2y@2Q(mcwDrNaWw=5oG!g2GX zt#t&(4j*SoIHGouT>F^avRA0-6QF5Vib+4HbF1I^-Ix0-4Eq^v@|jcp2KJ%=>w*9o zU`!-NSr;}jH?yoJ`D&QQoDcOqi^3ZH(7cYjys(61nc!g2+a}vgDH}3 zv+rAPo9`8x;6X#s$jhfE73)Zq)waS~n>eteV_hw(1As>Ri)eVOXVEz}jolxlNyFFW z#!dJIYust71OOOol-<)eHuz~1nwPNpB+Bs^tN|D{%v!%8(ZmYD${>MIj&OR7*j!($ zN^l+hP!F*)Dj1D?MLhXd=({G!EK#=d&kWZT?IT8u-($rf4|%4I@kcF;S`g|;T>M0V z&p(>wdZ)*H_&-p`$bGCfSUIHf>O6ZJ*XPo#x5h!4r*~ zU#QfE_w{vJ(NMx!vV*)Etx+ibjGU9!FXE`gk4Ezh>D3ap2*1CSY6+j)BYBo;b*e9B zb*g`KNW$m7h}E7^{$ac!66m4~a;oo3==;K)Lz9jf>-#{cck>%-q_xSVIjF^{SR~Ke zGip%wZ&38i19n-JG&O@lSuZ46!{J=7DB9mSTp(Tk&9>mzdq(dt+k?2b-0#5Ebb69; zLF0;HN(5!m%{kYHyNBzG!FB>1$V-v&Z!KseRstMR=^VlCgE!`9?I~3LVXK6$!oV>gp zR6p-XN3VST_Sd%uFJ5ZC4TAdr3-bP}nhg2>?63dNW%r>Kws88LaT(;R{vs~eqE>JjjucConODB<|8y8+%^*dC}3v>?5^pU*NzE$#Bi z@$`(?(azUfolhI}$J$>X)7iy8l4>jW33%r00G&vrJk~T%_g80nMRNrj&p3Bz zkva~t+fmF~xb)PlJh&NRKlIaBQ7q#<>(iHFqsL8kbMp9tD$AOBTszaa~ zohEyBW0m*7O1_%||2EL)0Cf9}`pHoLlg^&|+zyRnn2BlCd4_i@_h?dbCe-i@^e3zR zPo1dx6Uz|~80Z!_=|3A;nBV}HV<{7*1E5@MH(2y(j9;;;9OOH5?5K@d^6J*r*SA*1 z!-*OXF703t1-vIrmqg5!z#M7~jBAT$*Sg)Y^nvK=^>c36^$i$yKf+od$Rr!cRwWL) z3EC2Wzl_L{$d)XP-4hp`K00S}}td#P3S78ldqOQ0 zkBF6KkLUH|AM_uBf*dEj+)pqDgJg+Nn|8iH^WDd zjit90D08xWrIZhrxXUf*9_WXDO>BK`&3~#(Z9-b>a zLIBn~z$aO)JA>&>&QGoF<;4#rkF(ie8P^9s`45PNMltNT=Gw&94+bF&&2K||AYxkUJ1iCLWj#oWb_qo zE!nrghS98F3yi{t8l_YaLhg+=36aB~s{l-?Q-xAf5U9b?HPX>`Myk97o5pd_$Yu`yrc>IrO z|BAus0o1sE!>a`-NahJ4QdNL%h|Qs>6;N!Om_4 ze)1x4N{1gspt-R}IA;t^f#Gag_cE+gwcAkGd{N-u><4uht_1g}P9IP9KsFt&^c1o@JGp4P)^{?Yx1dzz z$Z)tQrVO-eXEKgFX3vwLCPai_ae=|Djnde38)skOK1;Hn%H67ZJGH{1F|K&$DNjH= zy^1ktO+=6a<~*G0S5D0^ z&jbYxY71iH(9YHI_5TTxfc3>z5Kdg0l@DWECtfeQ>wh zo*;M#h!4x51{@1jX!Vm+3x2JJ4zD9OP`5Q9cd2ecJ((N@LTFgS850y+ap=^}F5Z-d zaq_N}KdOcwosSTH!4fmapR_`LsebPg_F!;}>uCux*(E`IX*6O0{kBH2_aIQtKFgiZOd?|KOaJaCWVjKaFZ~gIQr1p%}}-9mbiC;7OB-nQ%>ya z*%l%(O>Ev4`+-p`i6Q$#rICBr_H) zM`GWjM|L7lSx5v5WnsjJptRwA-P$QMzX}q#92jSwD!RR!u#qevbu}nj&XIv~W>+wd(_|-m|x1nT#&aS^Ud!&USM^RtE2ZsTQcor8RM~YQL>P zirdVh*6PY7=RlBluki_;>JD;KHK4p^(aQw%Em?z0!_~%9m6bH!#nGvDIaq22B1nH@ zDe1MnUsXB}94~QjbLnig8wP2^Z5$0T!e7SpsEne5xpfwaBLX#sG7mNfgWs^}mzgOd zx=bm&Ud52Wj^4qt`Qskxod?-6{4-K7?0`AfgmSzCWs5g;*Iwmz*l(;#3%|4sp%aA? zeSw`Q=uFG}MWYjb`KkMdn#wY;JJgx@^F7uatv}5oE8&+ITjg@O2HY$)*GcCreLKDD z7rAZ`g!(dU=;?txkozCNs^4#$Iyk{M<%n=#k^~_gL*s1IDj;i@m@j%MTJF4z=Q%C})X zTt%MCe}~LTwg>ag@&+*G{3!KfpX`NubEPXxGk+sa8Eq*oil=AM7%Eaa9NXxwdL_XG z$A)rF5te$S7nVu6&W*xTFOaJxh~j}2#ftX$wRe*IE14hz= zW_}nR$sver5yy`ahyF4y1;l@XYp&~est=8!F{NEWhy|tBhH}4T`LrZw)(u?az8I`r zyC8au{MY701KhF#+MR9YVM9+MUKQK^VqAn2C4_?^M-H7>AHoW+*FKJ` zj&ik0y3UVb-FtG-p(fw(2RykjHo$F3dtc_o@{v5mBWUX=rNi1({@tj%$ald{(ZOj) zJ^)QiP);ZSu?JH?nJ$G`;vzyrrt+-yB3GsEf-Ts>p83N6X|8;TbK2m2aLI)xmo^J{ zSf_;4#v_WfxvAtx;`5GV)C`=4blNI0u1pX3XHPyM#BVmbW(NIERN-18`%X-oJ$Euy z?xAtIi{*1oaZ|nrBBH$zkCzRZImzW_FZ64uC)s;xcx#4tfozEV%{Nx3a@p7atsTeW zIe;&i^Ebhqtl$BVxNLr~Y$m=OEMmqY(vP6RHw>FgO2zT1n z&LZL1*`5kDFnMN$fzhvHFf^($6*o|Vr3djO>bnl4m`&&hE+owDU9Ku-q7}H;TN_WH zmih#V+$EJVo0{3FU$YcLIM6fB)jSBPD_%FC(X$WO!30i@Or(@f9v=f_ndtIjbNxc? z?&tr~+EPb3pJY27qcgA~k&H^f-Iesshgm1cI_#dG&W~VKotWBXqpd`IhAy)GS$sqP z<^Rb@3kY9ewp58jm4AffF9z{3vr*7xZfZSth8#2Z)G@P>prn{6pPgL7YP7>d?v))k zH9MVhLk>b279GMdxUeOqsbsOwHqec9y{qkp&`3K|NLH%>M&3+UQL)fM>tB&PrX!m! z%E6g6C%L#VXTG+Oq(>vguzEOee8O-Bbj&()2X4SOw0|y@NL;#mPk)=KMLVV85XQPX zcNS23s=#P4y5gQ2BO-T(jO@bmLriR(^4&dA?Gs~I`o7jSNX;whpnK}wC*F-sKxFH# zJ`2wa!-}`x>QmXQf!K(T{Er9IS{#F1)iAM98qwgd8x$O6e%7;A#K?LjM^M&(JX+xBnQGrwV7%QY+AY8x2b zqQ&PcM-&jE0{|5|%t>}T0V8)rWWRn0nReboqdjctz#!^8#5+nY2n50_sFg?j1J+;D zc_H1t6}Bu9{x?I8?teDql&meRZCtDs%-sJ6*+M5NDT_W?xD2KAXSrU5++yuT0o)K) z8EOI`pxil}vs3isySWybI1|VhGo06-ulZrL0O|3N{S5VtoZUXfxIYjd1RnS|5ZXAS zEk6Gi>t;S>smds2lp2yma&}B=LV3kaa18Qp&MtfgPbLaHSs$392{=_e` z?5+R<@&7zzQV$?e|J7*IF()W{1~yxTg&p1V*4~5um)%QrA#6YUeKYXCZQuX0d;j$n zbE1EDyBxj+9{+ZE{?qcca8&%RXMfdkW!RG9Ym0A467xf!L2&P9aMLewKt6xMQlgyS zNl=WaXekprncwln=QQ=kMR701Ql(!^i$kcYDX%3}O6ygNk1{GgZOR(U6jsY;*`JnL zrmvR{*AqY^b79|Fk6zQOZ|mFM8I0X;dz(6dEil*1y}|roLJ=pbIR-vp)NFYDy>Q)F z5PC>1n*44nGNOjMQ@ zU%W^!O9%5wL9c=&CRS+ZTY9Vhc@eG&S)bqaD;kL(iJnL~>qj@LrhM}PDU+$9 zR+x^g;ydRL9h$93VGHlxV9dZ8tEf1M}9HymC?`FFT1_r~f#=`bx5Jj~e@TJRQn6F9m49z3|H`CD5?Ph=t$;{&BUO2i*+{*Bu$$gqYcX)A2?<-?aC zU)I|s-)1}YVf3HZJI5eXV>fvhtANHbju0)KpbASowS{_9ws$+~63D6&MKkgf#~Kj* zqn64)GUnx2Vg_rXbkJN;uj!p=NL2L`CyzxpDw-a}4xX-83<|@Do`Oa@jiL9|ROywP z+f~oQBxIvwmZ!v!7?0$s;?xq;3~);oO0U3_ZXZP5N)tmptyPQ;U&q8nN|dXT6WcU? zC+5k`x0x5JJW43(z)blv8wfnQhlgAkN-b z+FmiTwx~OJUHhcut$wx0Q3S-%o!Jtj2=ps?YV;JpqjErBQgPw-zM*V0HP}Iw*g&>) zVbi;OK;Mv^Hh?_q8$I*-$*{Q6tkneM?@|eXRw-|*bz=z)Hs0Lf<_sqZPUGJ^CR;As zK_`z>i!NzK<0ZlS`X9*L++&|Gc< zq1a^^0gabX0yor#c857t*KG;D;n8w529ui=E|0%x3UT?F5>_(D1hW+aRB4A)+Z90q zdSY+OQaS4Z8>OXH7EI(Dmy_L>siB(iT&YFb+)YO>h7nAon$9s@b~|#DQBOJDsL{ZQ zR&KRyKcsiXr<8NaStr0#7^sipVx>QOOa`Yez{q10tV(${#dH#n+5e_YLw4>isUWbf z{LkhD4>`r*O4C#B6+|ZYs2k}o|CRtDbogRQBvrS4H{?|m9p748a*9~d1+mR@_Yoa8 ztnyu1*%4!io=KRHlrEC9pO0s||AG40b}-n}N6L4-L>@lufSAJJ7h9AjUgf?{UV#@+ zkPz`@IQ_)_2I5m>@589-b#g5YUOp>Iq|jIiEukcsV4^mAP)MC80`!!K9+UX&OquDu z*hCe$M3$}?;rv$_{RdntK)swvOW#3b;Pl``h%>`F9}ef}xjTb<4Aj=7DXyOGHK`SG z#o=N*YBa*TK?}G{4y??cv35Bk7c}dR+rxbYdQUmp02|9K(OSfl9j3Sc`YovCAZ{&m z_72QDy33x;igu)Rh+b&9s?&F_u4)y-ZbumTLdA0Ay_>pr)t)B~YZ+U$@~Y1uZ~)ro z2(Td2hj};e$;N3F7Pu2lhcLuK){rGs*^l}WAEjX*2l2rYpi%A8*3fX25e2Jf$0`@yXW zjx5627iH?!MTb?Y0nw|;_V%dTmd>4k#=1ZbH9D)&>>Op1Ol4yW3l|z;;IwW?L|Yhf z=za&vD53rbFwL7RCGXL*Z?F3^Y6v_wkw1$6;G`Wm3M`(26y+N<_=>e|IIY1>M=a`_ zAu=wQ0f&bwV=R$55Uydt6zTL;>eCjSos=4s(7qJJs7f0kW-F_vYH8f*qC4z;(w7d4 zt0!FbRTy5LeCcu$x( zX^!gjNT~I0x~6b(k6COQ9DLbf=`uqAu-2Bfx7@QVQri?pH@A8@G>DIxCML)wBc*Ou z+0RKxc`bIK3;(LCPYhI=##&4-jYbt?Yn_Ql?@42Fn#{k zjGzF-VQseej0ua&)3N5DT^FR!7awP?w_l*h8)AN2z;Ikr8zhalAm)g`m`u|Lm->~a z35|g~FC&kG(a~`RY5{F^q|E7c9x`Sd7@BRA!##9c+qgl;=s-JvyShHPqj${>aeK&& z$Sx?>Cm8#c>V6LkhYx+&m7doZwq;*n&^R=eDfm0{KNS+3a}f)z7={#dNa?#+?yB?C z1(u7$FXO&$oyn!rb^nQ=h0ES)TmrEvzX8vTOE&L7qD7LKMjr@+a8q@H}*~;X4s5x zb$$zjx(KBy>7=%@CxC;Fkb5zv29%lE=b`~!GIOus zRWP>N>F6gKcSuytq))D%Xn`8+*p+6PL~Ja~Jf4(@Ek=A16K?S(l3ovIlr%+n&(s-@bT*KghMTxb?~EdYRAYT6M2=+)iT}Jq@QhIz@=rr5l%= zpe6!}Svc4UnaYb&ZkSeh35Y^j&vVU2axoiD$@Y3Dv$51D?v;%|4j!#OS~Z` z9scr?@Xwc-Grm2f$p4iN;QSje>95)T4;ZARr+}e?#4R%eTqg*`Y?mJdw+@H^pH~E; zuMbAjP+}&BA+>He2wkP-oN6>mlq&5lR?PU31zTIWW>#dy^CZ&PX@f701jgxc?eTWS z{?t|fME&*tHmvg_?s*HE6osoLR0D7bh{~NVV12_7XahdxPfs8*>Xp4ubUGHRjw{}d z#4zQaE&lcM=~_59Yf$aPBm`?Y;1%R^Sgwm&lQ<`ozVtFOWBzDkn!Ev9d&l#Rob}=7 z>smg)HRE`XJ=9i2?lP5Hb6B0S3R*zup1wD?hHlFZT{We$XS4Z&)47qR2Rq`l%~XX( znX&}^1NZ*z00&BxBebJ&gw@{Vba`8ye6=O{QCdggtt3nT8DdbWt+$Fd$uP4T?J#6g z>Di%T0cJ6;O@d)1Svp0r`5n7cYu-(xf~KOC`l6DBuU?B(nP!2gsf9@4rs(Ee8>G2f za%G#C8J1oYgyO+5dcHg}a-1t?^@&lqqf3wjd|Z=^#Z)J-1P!-VQu#IIW~{|SN+}T_ z?$jh#p(#&WaxUL!NtY@k8pCeXpyY}T+n-t|ZG9QyUbuHvqG$<*mO0|eQpF0Pk_zqW z0#3^MU$!#6CF#UQVuzRyT{>xdSOmgu>CvIj7z--LoVOuhdQt->V2lA#@yAS3#on`1n*g+Qp*K*a{Vb$Y-;75O8R ztOPi^{=+u%{n;Thpz)yti!TSB4D_UX_(bsA_V?IC9Fn+Y{d8MedK`(wlQUu&y|x8H zYm1dyg@&=e>nk(OvR4(`6>jy^x7O?%%TCszRMxWcU=ZMK6WSWa>&6){qNSBR9ZQ1N zhzp_|Vxk(fUdvKYCM6F?E6rZ_pl5^2K@o&cNNO+Dx@Gnz`3zXK_FF_L`O*SM?z4|k zYkod-`0qncqS3@&)-Th@dV(dV-_{QdW@mx-pnqU@UhjAskeUKZ#vo(rJp*O0oiA7# zVj{t`{lMp7cMs|6By0)h3VxCsp%45GmUlpU*@EU3SFKy7Hc7cg9oWr|5ZFgzqen(6`pO_;0F?-iCgOdJ>( zh!szcigM%O2~C2+bW~3HB9v<|sx)&vX7*ByekLhr@Dg){II%^##(=Dg`M5Db%}8)K zX>i*~%G-oAq?*CyE*i4qT|r4?S@ zAX3EcR{;zre^hmTq~WWWxvMfxwqPt6q~(c3q?m)PG`S0V_ySTeck0kLx+PYs!x0CS z4Xk)VfBsOalsf?yU|fu`o^#AlHL#v=R#Rcbo+11NSPci5gaI?xQcSk+kIV zgosb-O9E%uWHT_2Gmn3n+i~pMA$EP%ek7d$5D!1O6#{Sq7A)Ypp7_lN2H3*(?Mgv z=^WxJFl5w0Zh+b**g?E+)j`ddBn1QEnn1QFa_+rY0fG61wS;f%Pm)593pYb$BsOEr?uU`}mszzZ*xrCuu zkl7&?6M`FYFm$5+_|G9%>3ganN=mo5Gdv75bfEu!?`M~+4X;zXdljh)0LReTOF~~* z)$QT=y!7XFRN>K{x}x5+l$Etylb7Y6${|&ZIUPy8nGT=z!u?+`x zDl?z4n#k&xSn;+jEP(g@mtrJr`P`d^F3K6Jqp7(DC(ttm{u!*05bCx ziQcOsZIJlT!v;v3xv9TROdW4M2nOF~tOu`s{i~Cddry6S?+x450S$)%@kZK{Kxx!Q zZj<`t#PVGT!h4ZVbvK^!Xm(e}(&YV|zC%Kp7fZb8vo1&2^eeS;|51BNLh%s^E4yc7 z$#EVr3+zw5SEG$|FP;IU?#J+&G@lkc-(ZMWQrW2)q<+!wEv*%Pd@|bMqmB6E3M00$j^u3NT2>#sLyB0~EHj<&oBEqx=q_o-1 z=wmcJSmPnQ(2UKIbqDExVW%nIlpagNXmB&H{DycPZmKZwA2eoG;6vgLB%@G~SFGZ% z4JA_#&9kx!JGL9iWBY|vVUgTT9|_&;;M~D2ftp+y4%w-R$_n_HMOwja(;8lOUQ!G3 z30w#($L);E9BukGe-m|d)#JP{d%G@LZ00tvVOfL{9;$^swe`S3a4j%HfZLpAN+X#i zd})=gzBijG*hyL5Ynp|>Xgs-kC_Zk{*V#s6%sXfJ{&p%C{f090l75R#RH?2D7&Q6gNh3}n0rgV0x+JejS zcy~KM@xLPb#i@ewFJgYNGSH^$Mci!9{^LujSp4h`{Z6Tmb6XoH zYe#q5zYjNQJx4QVBO)1v|FEwWwG`%M;keD_NgDX@@MgxEmDUN6_}+hq;o+)NR~i6a zoJgn>1c8^%7lrV=#1}yAot)fUMB8sbqk|Oa;#_TUyL_indR$Ll^KSb9pbg)XgtQ>` zX>G*A#nU14vlh9D-jDsnF*X!5ES}pVnl@m1dM4 zr(f={nkXcG=H+#3+-tR2R$KDvy2qQl=joRDZ8)Vh#g8&a!T5&UxHK_Wb0@H#t+FblEwc!sfHXT)FEpe|)s%ZSwMt+|(md2aRk(pt10M&>J60eU z#Vg(+xq|?qE71k>cNF1Cc^qKVsy0tu7Df`B5ug*Rx+FU>B5kQsA&Z##6Ya>2^gvIc zG>*dDUY3)+DN!7rw-cw-BxWnZWtX?}e^`6RAkE%n-MhNfW!tuG+jdo#ZM(W`+qP}n zwrzHG8K-*w^S)hF`XW= zNe~Q7@(E=srlMvo&WesHCPiA*IEkNZ3&khe-$0zB=w*`wu^ejdQGE<7`L`2$Fw-|DU$pV}Ava{!suFN^SskOT7_ z@(&!&8WAbnebHeM$iJgY?EiQE{FOXjs#Z!^s_5Q9?U_;VrMV>Z-;s*Fb z0L0YBdi0oaGb;`K3_USM#+;mzVs9lPm5XZKmC_X$mE_(F5N04$RtS~i4c_-y(Vy>y zpIpPZ+{Nr!DK8tTfmBE<+#c6nU%ywL>*I+or}IWhfV3ND{5P@S8(>Rx4?{zN6%bJ< zb&!4hjGh3$cnF!m8*tA$INZKsBu|YAS&FBK6yEZk2EXah!($^){vk#Dg#B=cER0oOZ!qGXzhw$V+gequ4c7^Gs#-2+3vIA!#7#X~2_E8Za_Q1i-lg-YY zMJ2`!?;`?q$L2tP^MlV3A{1reL`9nKYcLh2_Rj_wU>@08 zOkxo9(^Hlf!k9JT6CDmbOIt~ynp`6aSF}UV+dhc3IDklNGY7k_qtly84q|9PA`aD* zva6?ScrIQMPs&7zsr}HdkDCJw2V_;PHXmtn72vC9;HJ6ZM2Je_+Nvzn_Au-iAX{}G z8e0?J+%M74jMF#NZ>2-P0XjvMKQuhok869%Pq2qA*As5v%S06CzC=qJJ^yk%7nHYc z$dsf!r+W#Hc#TNFndUgH5ZrgPl0qZxNF*Jb;7!2xqQYhbB|@T&ou$}MX3#Ol8F!5^ zquf^w=;TcOT1H7T9hqtDZ24F=yCO)P8*q+^uO<-dGD8Mj@>El@%S};4N3GXSA)w^A zlNT1uKRlvRBoC}OL`k7DSlx+Dn-4g#aRCgJrw>|Banv*O+SXVQwjEOFxkC575)mD_ zy4A2xf}Zg-i;uu!2$AAw@PWHo`kaw*)p4y3+lwx1$x0enmmXoDohx~*Uc_9k8DzoQ zSZV8b$l)eyFkxyux_c*a-kwuO?jFLP-)CKzj%S2#blFO9u+lx=lu~$6gzrM>5om6y z{2;R3T-YYX3taN8CUSRwIzrQdMHp#bAOG*z0^_tKMD)B_cyLWj!cKDS@e}xA9&~g# zF_1L;b&PP=*7cE{gHpmIk)xks+xuk!k>!Oc06vkYd3*3$s<+?YLCav0Z?ftB~*sa zoXBz=-Jb5~w`mYnT)HkHrLH>t37eey&dq%d#~6Mea+C1Tm62jE^-R5aA2t12O4K-2 z0MbbIb3_d0$5_hL(IiT6Q0RL=*1UtzmJ!z|%10;pK~?qALgt3nRx+gppGrQJ2BoRmEl;w;0~ zmTG5FVVJsn;+^J$w`{%607+k_jy?L?rehZeDat#tbu8TA7C3GZ>Y!N=;It^|0{q7J zd-eh2p|l5l-FBcp-ZA-g2LU_|ep+?U26IHMv?Bk}90pgC->YwgZSRz)q}b6;@;8c| zGiLv4yT1)a`_qHs&locAoCXCZnJc8bSNMy-02T#J_Hfw~f&z3TEnl0kgaGF#{zpro zXU-elC?8Vdu+2P%CyQga7QoMha*|I0Qqe^N#K=)@6VjuT(3@Mxkwz!wdN3JU9auY* zW&e^1MEw2ym1*{)JE!4=OFOt@p;=8K|%+ zfi5toG8WHaKzXS=LtirD+Nc5clE&SeKI_#5uBFH6{0<)!mmt;&T?1+##*!4_LnHH> zRy6Zc?FjybT;ShifZBx{^ ztd!YlUupHnCC5ECM5eq&1`nxR;}MV;o<`hIK2F&!H)#=!KwSpUs`jfqyRF8bsXZU9 zjsu%%Gq(0IYRuptvC7(y<>!C!hOcEg6}oDh-7YIXnaH{LcqB6%N z$JWrc*pEYrnf4o)E#gb!sc=Vfv^YEqQR7XdTKh3IU`#d8_7p%bsZ#?fxXf~TP|AL} zNJcQ(J2Q6-++ju61b5uxBLi1Zj87{lx$3B6dLgWQAqGE4wyDQrq;0n$H8it4G$NGD z=rw$OOyV~9w@j{2ylLLiUp99gg4EZ2z0ih*fFIcK;*0}K7=kHj(FA-}IUk~}b9T6m zyhDyHG3&n+vzp`F?x=3f8XiHf!?|%QJNP|>&XRX|g)$5!e(xIX&83!rt1i1g`-Ift z7(#6d_($lWdzLa<=PA9=hT$a9kFjsi97VnwVs#HL2|EpUVsCpO9sH{LMT2(&7#$>( zlnxf^707aofU(%Rpz3Aw^O^8DMQ}cxxMrs2i9-Ui1C$wbK9f2rX(#6Ccsly~gUSc) zAE3ZK&ujwy>N!RK)9vSfZCCxbK>p{d(?9f?0+p@)ta|lku}KdA_$FRMVs5?|G=s2^ z*MKL%WNu27$fuEml57YbJ~|}Mg2I7a&iL@1?R`bYY328Vn3zDJd z)gY?(z3yr-a>dIHv2|T~^-9fA(6ifR!RIoAwRlW4s&T#KX-7bRxw)nSuBqn%by1aMV;n^;Z~5t&XMJ1M5^Caah|Ccz!e)Fu zuB=UkD~i#uyySSd{HoK#(%5(T@AZv&3gl!?k-p$U$yG|q&dY%!Va3eajK)L(k9gw| zNF(bj3uJjG9|K(-Doe=u>ZAlF8PCt*>E^c&fW5P^q+Mxyrc=L3gpbsuXX~2yCCLeM zS#8J$*OwDHE0O3d<~#Dv5Zu|6R2IjFNWjB>QQBxLOO#^w3y_M56B1u=&45Y3vqFnF~~9 z5#y`kw}|>(uK{8#3lC!o!n~Oh4+5e8yFri-elK3rY zR8>`YOlx9%Oq-QgT?pqzDBderVc)<3fD5ySEq80`5@Gys%Nux4idDVy7O74skRQBF z|4Ie}`3lbVWH$Y+1z~#E8wAzC_QIY`z@UezUw+_;yAucleSnF}effkqW2Jp`Q0KMarPKtE+VqdBMMsec%NVHzC zG;ai6uK{i!84un9tl6bs|Mel4fuAUzNnoOkN zMgY~Z34Ud`nOSk0VGFg_@<3d#V;eRYu8uQfpuJD@{~pe zTWPUhF-#saMNOCk9lG;J{1U(ywGD2r`l(Hl2?f>*xDc5ok^vekfgA#*mqJ#;o`dd# z=(8-joohvmAmguHI=G7mX+JX&LK6^ULwj>QGWl4o`05IkP$W7F&I$m+Lbvg%f7!Hr z{2bWZdWSrK>jrRmN|;{#%etbHbuQZG>m=9(`H!c;f1T(g`0q}Ge|bv%L-~$Weg1(t zjQmM6QW3+N0T@h3&jZB9!m~#b)muwPfRcnS!e_CMR6R&w7>=x7S!1_fAim!uo=zg; zzHKtsZ)UKepT-pG(R}K){g~L~!{>8aeCko(UxxsJ#xpV1@p$yQ<#{}rzB~BI{fq18 z<&z7!rz_ph;2RX==2BM+0L~jaRvXA2c&@QYH)|Y&{^3?PPS$HMUF@yV$#y^{Pu9n+ z{?5mwJug=ua-N^Cpf~uQDag3HNBI@+Y5=&yq^?iEtg>|%@!vclvS~ndyi<*`^`0O% zxCSRpTAwq*ir?8VdxR%|ZNamTk02>t-1?|kla(_R>_i4L!f0P^r2sTU1bJ; zK}djl8022n_>Gy8STso!G2S-uGv-I5w~H^ix#DploL$3WbTS}-C%TS zC^5t)wh0BI!BALSCnD0Dc9dik>Ge974;qLfohD-Ayw{=!eKM>_Bo897o#J;nIg9v` zu$447DWo~k6lbjOGH&0ZJnN_>3w^2*w@Xwsy+8`JMBSHPvL0_dx0RpM^s`-T9B#5{ zIKH9mJlR1TLy|;lb4uf&tR>Y1bZ=ke&5-w7T*=qsH^m)f-08WquprLTbe#OEF$~c} z1}PBA!G;n&k_$WgZ7L=2@flIhVk^|pVv`Cs=+aArj5$S>ITkET-_=n>RWJc^b`D}O zCM%L7ezIu5UktJQ;vmZdmfYTVIXvX64!W7@fK8$`4CaQG2sfgxs_3NpYrkd^!V47! zM!bCq?gg+gWi_j)50@oW$@cL2kmEoHsLUuchF4mf@KBZ%0m%q5P@qKv%m#834(Q3F z!QCceU)T4){ICiiT6Qf9{WxS1)P~f?Le{M|#R-`uFe_rbD@Ad|3nK!uAO`nENDz6j zSxGJp*NFN_qUCKkk|Lua!Kz1{whS5f)HSB>{dANdXka0l+@bo7o%6g-nKlGheAPHC z1|zSCu5|)M+XHi%E_OBC(}PfLh57dtY%$tyjG*D~OP<1lcs6<`e+J=qX!J|3l*V}5N-l7ZeHXlBClui9J3&>3)1@>K1Ae0ueQ=Iw!HegorOxQQ|Pb0v4BRTQ+^8?>|VU#eADT#ys%>RusGKF?ko>ITAoVrk+U29 z6d%TG@dWu%wrlg$9^|t_4E;GE*}y$+mFowMGk07F|02C6&Yj3*pr$u2p$Xyl>Nqd8 zF5L!TY7eN}_aO{oa7rXMQzHaHMmE0b!ZC8Iv{rx(&C={@pLhKPJ|@5RJ9F!$k+#r; zp&fE@T1zQSwVUjl{;ze}V`9A(8U9i7=s7c3RD34}N@*2j26*NWy$nDFw4gD$%RMef zfszYoXrZ7!!o9Zh^J|DlL=c#eRH^3La~_L@nwBTpq&c&bhz%ZutIMzecLy=2y;&-Q zu^NUvbK{nkFkM&asIHwfp>I^V%%S!wuHs5|6x?pcYa)L6yXG=w2=;g+r~@t#NW0^G zsw+T=_4d=CoJCznXq0aOw8S9XAru-}$+SvTBPPl4vZqP(6m`nIM}EyWl&GW1U)K2^ z#0D!<{E{5a_P^lmj$>s(Fd>E1=_bdW#^;JTe?xV`4>52tx3Jx&>JQWDM`08j+!Nsi zGY2LyG`L`P?mEwS%tyP^m@SkamyvWStqeS>uy0WhUw+*$+z)f7DP`(HDO?GMLvoxm zrS^Izr2{fT5muFZV~Rw&$ZrxlS?Pk*GwVha7HF%(=vrd0XaU5PB^yhfk*+*S*>%1^ zb*GqKU>IOQny1ZavNrFChzpmLQndq+f5Aaw=|looc0nJ-i9@=rSPEhNT}yB zlk7x!b}W|$+m`IibfA6?@eKgb6&gnJr?ve=lQJV%!<6nJR723M!wXeaYs|1lvPq>f z8$o}0UyT;!rZa*=jPVUYnFBqhiF^|7o;P5K>yq{*psJ+qRVNCe{-&rlhX+xnciyiz ztg&Bq`2$P*uvOcGzuQ~9`<$K%&eivvB{;?mPoSlQ2Nm6vHg8)#fDiKtG0(e90*S7JjW(DpWtD-ed^MR2==65OkN)Q)) z;O}EifDGn-;m0u;Kle$b8Oz7ZF33Z?%0!pj6BU%(M@Z(4g_fj)$lvp+hn1|oWw19v z$&+exk(9Y+l_+D=$UCZ4U7B{ph%S)rVj?Z0!83a!3tf)khjABgC~*+gFA5?VnQQaN zlS6pyQH0ntgk@Pu!YgOXE*vlj6>8_r#g%Z7l;H=L3`GrJ9+V_x+or)RQr{;1FJT*Ba4#hHo=Z5Zm#WcE~)Kyb3O(n zgQqXggLg**c5UyIo~TUbXfpdZJZUqy6+@tQE;5?hhi&Bn^CYX@%Yfep<|PwIK%#WI zO$e0U<9*{wP`pP#Xjv;PUW=EQzrx-N_!{U?WAty7S@~_h-Wkh#5!w+%z)Og=&=RZZ zni+r{7yI2o4-=QRrv8|`X4oE0R_q`L(_Jp;s+jA<$&>8+NSaeL3h(!AVzNaw)kbd= zOqhljR0Sr$}Sn2y5w3sV)qnEp;A|SED4e3!PQ z9;h3}RQB`{4>uwm1+9wQSmEbTIP$Fm8WK}hNn)mEx!=LKEmN9R#%>|j0_$5uGmZeR z3bjC2?XP)a9X8s3B(Ucobba1@`q<=ra^vQ7J9NNLSsX^X#y@pEfBrf0;wm>T9DN;m zDUkk=n*R03`(@VoUp1(I;3cnkO~rXWq~T9VAaeW-4Qm1l0&~q+h!J6aQ{OzX!YB~q zh3_N=%Nt{xWf$zg5;w??#KGsNd?405MmD%M34s!J>U0T zC>Xol9SRt;Kk9S*^2;S}ud*@|AFqjzU&ond2f2!1Xn0C8#wbUjEpWa?_{WA8QpKz(g6_Xx$uYnzzjY}Wb=rpM{hb0J1ArenzPEP8n0sU%^U785U+`v_eH9VAf za&{Tb{8v^{w^xxB=nO*7N7z~$+9kw<_+6>ixXqY;eGCY4mRll603^lsuaC_2zL@_QO`C-$!9bmQk;g-Yj)fT

;24Y|W8{Z*5(XO0b-!4VvSuA>0F5}ER-VBAnJ-k-Phy9++Fs#z0)(*`+ zXxpg|V@<0tQ8PScoFmd`q4vnO4803M1luaEx;F(wu|PN8r7t#KNAOvQ{m-;kA)!st zOH?gsp)Dd=%~^B6Mh1+ zH<_7$nIBN&C*Xx>xmd^!sGYsM&wuMB;T$M5zT8PjpAyT})l|>H^nWz` z#PZ)if?wak(O%EMQPI)fNYBd5+C)uF?Ca5t41YGS{3U!P#$L+I%b^W_np~c+KqUBu z$-p1~ly~%>6p9=Yl7@;Igq?yz=(cUjY>BHRzC;J~eqibNj!+&-uLID$$BmX<%yjEN zG(d9v*m3X1ef)O3d<~GcLZyc>E-a;2D5PdoY3$kIV{h#FWcLv@$s9DSX0oBTVYEQ~ zbq@^eAc_TKfQ3?8B-~E62cuMem{%DP1lye5vi#?sGcd`CC|ai6O1g<5_XE%mUU)i- zb&GbQtYELPRI^uKcXk{n<$De1-~+pLJy{qRql5ZPc4_V#17BlKxi&jnv?w62H8vic z5!V^lwMZu-kG6b5Vo~oKXB(UFx5}d^uDED2R+Tc^m}sSnhM)5L4}~&pQSN7f(~Fd! zRPwxdD=lFbELFO_L)1!^RK2zI{V7H*5$r?6T21t@qPqJ&!N?^a#D~#x4xw8{X*x@J zf`mW2SEbrgGsX`*NzAD7`Y~fBW^)7af#b7cdp@{_^xGT*m%61Pl|si$3_z$W_P&{)iaiL|TN3fpXK26w&D3QbwP39e>d#y|Knr#A|M4fSGQ%ShR`ap+{MQhv6rn zDA8Lk&XGbrT6G~Kv5r|i(0l_Q5LS-27nt1nK>Y%<_gG1(L*~bM!EVy^>}?{`?ehZI zGiZ(jqU3-kNG&U8a+qSX6fL8Znc2nC-R04){_gycFv*H$&9I@brf*6|rKwiC1EB`Q zZ0a#A!N-L%f>jY?T4#%{g1!VS;+SL9UFhlSfCLvH>UeX(bIHQBJ?{b%p;6x@c#pS| zuVp|zttuPj9|h5DR4kjMPkA!-5e3D)RV*U-*df+q^(?{q@B>)z2QDiNtOvsx^OX|; z_E?qmx!kDlG4J-Km(atyg|r*qwVY+aLe@|8GBGn>%gFKL^`#-hLN7o} zRXT%x1e$dJ;g zgJ@25^fYhQMl9%_zCopOg3GmH3ei9|YCOz);a>@h~LHhJJ?F z=dL^FXg0S?yDY<5ciesRghP}@LNxFMz?I-))FuZ+-JG1ta4?>__M9;E`Fy^G=(wv#5(u zSWh-IPec*l&y<7|p!MV=V+XsaSk3=pQ-29h$;@Zk_t@BGxcq55tL2@km($OEB^ikj z26EYU8m`t_H=~}|#o(W|u1+o~X=oD2(%#! zUevS;nu+0K7)mf_a+d~Avk(w0GwIB&;X3giq^U|@ZSd{U@dRy-KEe*$KyATJSPWfj z-VRZnBlpAHMC`YMhlbT126ARnQBSkwevdh3Ikb+)IS6%-C9hoB#JxMu{%09)zh=@U zwL#cbuE=mQfMlVNx+AQ?Jv5>C5|TJ%$PA=u;2vvDpNmje3`#FZYy1?>G@U>`jS)0z zY)}iFK?@c_QqD+YZl7w6pb&3_fZOLO(!n$M$P9e|2BrXt8H&X%4bhUMK>TT^Usxt$ z#1lQCe`ri?)VEd_A-aU@+vM4a;mHzvu-{CV%%e6$)SJJ-%mmT~lv5!yT}Hh4K`59= zft%Ur-C$~D7?XPhT+Zp~_K{DL|VL@gEusK2F;2dxEoZ<%&GzFJGxHW=ta)QH_V07Bpf>UuPhFO1oaQy&4 zL0hx6yay*FugawW=EXLu+dcH9%LJaUL<%cB?ua|jCqVh2 zM+~^drI&pUTt|a5whG9aHb_Ku@!Krm$15aTLZ_9KKl8C59B+|YvCa-tgYRH5hr~lG z36~Q1UL*tB)@|LpIKLRs6_Iu5`R&h(Ntz9DZvFb(WdC$4{$Ec66#wCi`TGk|JpYs5 zA4Sydmu+$-U=Xg~D6dp>1N~U}5=aI}pv}!OLb`*T1yGyUjcGyMD5M*R;+_C_5^g8t zl2_RAQ`l-h7nDGe;5czd}WT&L>C8g&T-C_>`)&=QUS$@ z3X`rjZ$CC_m?MksM6&~@(O(wIc=b_O?#>l0Ean?jsayys5GA9jMb)*)^r%VVB}S-1 zJ3d++@-phWorNs$^;4E;mR6zmu}`x%#`Bj%hiXZqubmC@Q~HvA-M zX#EkP@>&LH-D*~h&YeMEQe1FJF^fWaVAD zBaeuabZ^Dg%O2nJWDF;ND<69j9k7@9>bAVVmXC=m8PT?&fsz-VHF0FE98vGd?q^2b zn1vlxju+cM=eRGx-y=b<`7~LTck9(zl$y2StB?5NBz+f26WK-^8gJFo8r~J#3f6`WunWepK9iioDZlgh%6+ z9L*;6L>6AFM}$&txGzlu&AnDyQlBbO+sFabTzkvia|f)nQKGWfFQi;mAK*tZUSV2= zW_wx(K!@ayuXan%dN%+A_fO!f@9(mmrHnRX}h!Mzbz+Dfh*25`O0g%f1B6L z|6%w_$cPjDQ)(wFtjnzP!Ex`Wu+dxR?qbYAQkP1=^#S6viYY4v$S3dsA%_Hu;oW}oMAEmU3X{X_>z|s4GM-{*Y=@0*egsgtnGf&{^PMJP@}$3642Y75 zon!^72la-7kg0EcZCC#kq-zSm{Jsm)Yo8FOw}~oGMA)YwIJ$C`1?i~N0QU>v@x9~Kds|o zQgR68r);l+Y6b)(?oI5C1>d6hGghznaSTdWjq6On>_Z?&-Dgw#TqLv-c=)v&2~M(V zf3+fZ0c8D~8PtvbQvxFVTd%#RtLapPtzkXsgCL~W4D)vkk*}ql2W&jGjaiU#eP|wg z7eY%Ny}B5$d)N*B61c79tN@JUJqHf*pfN)6DH6)k-6tuM7C(16PriFWZQ}W4*1ZEs z>W-23LItfRvr+7DPI&qbFX-mo0RO3Fp)(~1WnXnn=-<)`^?x1=e=lcB>k9L7NZP?V zb3uH$Bhq1cISDxl;W-L&lC6y>u0Qo`U3KRk5Eh|7#ZGN@#no&T#o{d3)MOi z`Yq6ZiAku%)R65$`!|#!W6g7z$T0-NqdE$@kgefPM_kS& zu!J9k9XR^isL0-Jtj*pb*9kco^Os+kC(%4G=Wmmr1G6PDw#2h>Fqa28#IkWxS~#=U zUaDzv&PMikb~>$1OPR1Tic8e8(;~P8@zW%@?Ygd04xysnTQyK(*_akH`~4iWx}pn! zX{|3;F4Ms~1T8NXW|a-QrZw7_1A2B4#i};)3C){O2pxi8C2K9f)DZ5@F?Bnv=#jUeG3&NcsRaD72%`RJMJ$VDhRY1{I77Xg>4%hrBs4oXLy8p|W{gFmP*6_Hr%E;6 zfX1PS3`mg$yBHb{h*zl#2a7~yAlwU}51~?9q>GIXt`1`0+C%3qijOXGg)kb^LbxNg zU+1WuZBcBQn%yBXVBLE=w`p#uF)f7~(te;#+@`U4yTQDm@)3fXQE;M2-DGHI=f9_} zr^ux#&wJ3cug(Z<(YcuG+O%~Zl|GVEFgzn;6Z}H^B3O>+wZKw$KSKeD>-N*xX$L_H zyG39e_Ngnj5TvtD#(Rez5RIe&{(iP4lT8rRGH0L#KMigEo!(36@ad5mmm)Fri9ThzoV+XTO$f4RDTpUgdzhDllOWiA> z41mN`Dkrhwq*n=1)F#q@7d~^wKdV@3SFtMhuo{|cmHU}$canLR3_3$kVWgiOZxGm} zAc_$OvqRuqS}z`{f$v-xRpz$>MxV$Hu&j0%SSXUiC?Sz@g#G)TQH*d*<>LJb5kp~> z=o1RD0#lKAsF9;?;VEz?vqU1#Y_r{%`_T~(X*L_{`)kQ3HrV_3KRHH++uslVm0uD6 z)a3YA&6VRn&9Se}#Gg5uf3CWj3fdMJ@^IWP+S;3z=K7eJ7Qd|c1?_r+x`?2GLk9>R zdhw2K+gc+j)7$l2tmZ$;Bya=3-oHJ|7uKKaOW^DNvNbt^F*(Xe^|7_<;eeYul@FJI+|zR>1Dj#fvl8TN3} zM%&@AcJCYuH4lyA(AX%~S*hwp zK#QS<`PA0U z$omX75ZRQBx+IUu$1RaXm{vuj0Al?Wt%;y30A6J5QBks2%|7s_*9LqR_$zH|5LLqHKd6nxdHbv zNdt{7KLh*oRqHnQ_11NU!?wRqSJ(HPZ=`Q(zLz{odcofZqkHo+y_pDyN&+WoSgLE> zluOUh(+nEYrOR=xT%}um&cjiR-eIE&xHj^&)>+t#rMTT~gMu%;FNA}`WRPE#E>Pvx zD+A)kWg$*7S1U4Y#?=D-wBc@s=2jc(C402j)t3c*tXd1G<=|yaE~{!|zj693V2s3& z!c7xbNJS^g{%SdJV6A=46{eciv7%T%s0evD)gP3-5t+mmCh-c$doS${2G0STSw}tP zpDxYmLEtA~1O50*su#3up{K%w=aE9ve`ns+G-&lf@lXTg??S zS*i`b-~vx34Ko53tR?%=@;JhlNIX?LO&`7vV8QVkQEG;{s*3tvf-|9 zMXY>BhG!Ul4a#{~?SOcT(Y;My^R5QW;h3@|(TUx(;?ueubRr)w{^X40hzT&-ps~CN zp-)Z)FG|MV;gX}2894mh;sJC8I06Oi55UZhx0D#XnJoOX~mcX zl@?fnxG_2-&;(LFBrk}+$l$YNt*)**g-DCm9z-bgP`0G6+D{rP!gf$2#~Bh1L&&9k zY^M{xl(J5o_XYI+1-N{oOW>v*ueP%)T}mE)q~$Mv7ky4^{qNR#q*nwa!cg&i&`6&~ zM!=`W*1$Z1~?vR$CCXt1nI=pZl33?n=u58?I;W}EX z@FKAX@gSmCfx^kh<^W`l+*6ha!-VLa(6P1fJCsH;-VM~>fl|}Z9R}{_f`udU)u)N_ z=yC%k$rR&C$w$idt~j7v)ps3DOx3A_gmgP@k;h(=zj*3fEI_%g;}bntEG3ww69?&; zc^Xgm_fxLWE2xS@=r{3Gkv@(usFzLz%cOK!69q6SYJ)WzGa(FVF-oJ-YO*P=0VbVy z(O~eUQGc^3UkSJ6^Ab!$Y0tBsCUr&cKSf!eX4?V!>_~GBiRb41Q0hZat`TMi6^0HH z!d4*gYcTC2pN)t(=?P(rs5lXpx!-LN!>5(W$0OMZaX>?zXCvep2zWw^-=mlcowm)Y zN^TzDq6zV6A?q3>z6G!ezqV878ff2Bl?va!&3Zz_9nnEANUJWIDlN9YnStp#V1@5! zh)#dQ$g2v`P1+WoF_m3@4g|(!9f+q4n=w9<#FwuvMq`Fks8QS~)Tzw%KHv!-;dzy& ziYfC(j-*HvIt6-*JO$ZvM|r=CijZiBEwf?Of6Zk57Zk8T_=5tgbu|@-`3jY$!jgz|(CG^UDIp}#u?aytK#jh`mkqt}N!}7VMUO?R8_a zJeQM~hr5B$v^*Q$GWE>NREUoZe9n5V(1CzpODMrX*`gtWQpNY-J%<4C4> z(t_e5(_#|*$W{t!kS?}OBkVrVeK$RKT)YS4B@<@DIs!K=SKeeH$y{K+h^jx(vsNI} zZ@;H}pT+r$YPPN)ef$%xfG2mR2dE<6zWfqS<&v)BxqA}2KyT&&zx#^@jJ+{r0+3Bh z=q@Vn0t&vJ3e&2p7eN@k$YF?4b7=0u-9IBZiUIze1}v&kbR8g&4n|1w4N=_chL{0B zEMrVuL-e)YveL*8=27K93qcTgubIh2pjoQ?P_bMZG3_>qpp(8?wBL7t2vRhIIJp8d^boS;NdsPT&ibpI_4F#V6i^6dpR?dW}n_A`H(B2w0gH?pk8*5j4kBnHV$r?NR9U`3T%pP-rswp0=y|;=g z-aqtGa9zk%o24enlX13q4+Tk`UuOcXkv)_yl;IKOIR6F&;3u13KyW?s7Z3=|e*uAD z&*IGHisTRMKR|#jX>yr$JIl}Mvw|@ZGmJa_1q9V!K;STXYOi1hQHP(@n0YgzX3ce; z0V69@R3SitgHf`H5Rq7vC^r!goyXBl~t8n6J(1${i4rB*Y=ql>V8!$Ko1(^f6@>r?%pq7-Ao zKAio~IVG2-ND65Neh)hAe<4BYQ4i%O>Gp3zU?*U>g<4o{4jqBcuy+oaot!AAlI7Yg z>6A%GOPJbFgZ!|5j;I{fVT%(*JEh@su+o#|ThJ)*3LlP5u~SmZ6?Qe-JEbjBYorja zO->bB=dhy#EJ{R!#Q_{&3>5r~+PePTs|o|ybvFe%S)}2pRl$PpcHcApLq*ZcS=SdP z)bJQ6_&#g3xgCVk9Il&646<#)d(u}1m(w36m8ee1UR4m27k5X_v zIZ@N^6eqAZ0f0XQCg96@91OkYFn^|}Oe2<2*VQ1D8zR9rgAKx|MKTYn?XhVwye#Kx zmZ(7--XT{Io;Xh`K52fjK@Y&+*udfmUD!lkT$ab@kdMhWv{`drzK~i>Of`PFmV&Q@ zf-TzQZIL_=jk#gmrXUZMQtOKXB)6cJxQrJUbaykl6&NT}Pfdzaw4dnV=*p&bLO|an z73BMr5mY5D={}?&1_1AM!B>?_3jCX9@YidSt_noj;slt`q|tJo(Q|9j3C&1r;jd>4 zUD4BT=m}basGoo}?SR&85!da$%aiMe0Gk&*(Mp_(mBeLOv8moUyZlGb95`~Yzo zCoI{6_tdu{q-IqBD{Zt-qSzsv{IrBvnlvywAv05P8EuP%Sjw~Rp)-cF)YmI3Fu);k zFg;|sZ`Ix88yNg3f6A3&fNB~=Se&#DB>oYXCw&E%JXb=%{_G1*WC30_p^VyUE|%0j zqD;(hPrQ&~VH$2oO~jcewnQWtM|>|)*CqB4WH^sBsxum6Xj7B$#-}NkiB%?k3=OL)NJB?;a?cIzrfuw8!%dqp zTvWH`9HZJ}{9LC#g&9caacqhko1rkRXlyS9BYW-s&Q59>DhX9GKcy;%3c|ZgbD-^4W_-|vtbb@eI;xm6(@o+_xlBZ z*dPy&WH*E{1#X^=n5U=U2~2ShVk$(|E~zS+b&zW+w4IH%s~5x$*CzDZR-UVea}V{4 z4Q{HQfUd{Y(etvZ^GD6{%xo1wf81Onb0rKzf7Ircf*BfnS7t0Lt> zGbIb;?Mcy_lN9K-w+Pm2$o?8}KuL0VC|AQ%_M%`ZH-#^Ry+JKP4LR4jALnEsxJ0Rl zaVhMncNC-vet`YcBruU==1Koz1H3PH;{VGA|0*i{XR;v+)Bi6UDrwpve8~!+C@VDO zgBr724HPOgYmJHbg+svzkxV7@m1>9ls40DWb&?PIX&;b2A)zE1hz5U_i|nU<%T>S` zF*ccEcj&s_Fn)Z@#_a~M%wzKhuES6|V5-2UP4ZK_3OTd}JO@Vu-!KUIZZ$p~Q=?+% zs_W=(eF8i@G%LS;zdoe1V^?p%Ug_^oT400R41U{VU$KKPNW+Ouq-rE5VI9vn@kc6z zYS`CilEo#2-j*C`P%mZrhyweU zzu8LBJj07hSm|YJ?($AFwY<=al+HPzfVArYljU-;e=(P7`y?=nW7?`0HbxwWqt>h) zxEXeGV8c&j>}5ND5+?0Ss8V_J>2vI@oV@utB+w))EKTnGg`>zv?-ipFDM5+E)DN)w zr|K6*&vmuJ@Zz~0;~oWadAQACwoZlm`PH+vjf@ShpCSv+|dS;PY=qg#WB_@fEKBq#$tqwpr!@1qCGp)o})eaR#*( z0rl-zxZ8=#TNv1w=x~f4*n<)Qm4>F3&hA)1c(3q#o9l?9cn=GM$_e1nQWpXi%S{bs zCInKo^){2YFVi%Zp&;}}3xepZ7^o9+2E`Ep#ny*XvXhje8Ko^VG}H~QcjfwZrx2du zfDj(8818!ol3J1-pORd4ot==Frqwr+BM>ob2?Z4aB?X1oGtxKGGtmQRNKaqmC(Z&& zgEtAH^sOP)H$L(&Gp6p{xR$mrM*H7T2U(c@K^>Hb`;gIeUU$lst0l_=Q`xBOfuMH% z*1;!0WhUouhWEi?CA(Jn1(>M*T!|za2;yJ5{}`JIc}YwP%W3L(>a+1fIy-H_zklEj$z<-2r0IloEEmj1eEF=T42p=0Zzvd`?rU z0#o=JU_s@dH5lxnW%nSc{d9#FtCv-T&Ti>XimuI+T5EYA`*%t-uw}B?{Iauo@5gIQ zpqeE0aVfc|aY0%q^6YeTNG~Sz{8{G(UtiXc_=US+-RD!A5HEbnAWX+7AyyC~IUxwj zln4d`1`Jku5TP_7Bk&;27U-Cap-izUU6wLQ#;av_LD%~xIv2mEUV4OQoFI2OcR5CJ zj=LZ5=lF@UV%NK4$G>)YfB!vCcX z;?o35kWrZDk#Pg#vsq7su`yT}a(dpY`mzZDmh$HCmYr49k_lk->6sX38*g=_Zu0tE z`v9#B#DO3(lJKaH?9_+SqCia`txTk)FxK*oET>iacN+iZ?A<`M#tK*lZZArJD(?y* zK!;z#lo*nEQMVc3nPYw!{Yi|j%E$OYr}lI177a@}w=$SL}5e5t-IPfVMw;0T!e>#CrEzu~ZMaW=HMJ`QcJg4^V)vE8e>E8co8cu}gW+@y+P< zj(;dk4(7z)1N6$D|8JQRBS_a`7EEkWUsD@{n z3Qp6cXMNSI?W1|n^M$I!bmpH`_6vF@wHxIKC7EoH7T2=O%>^DKzO|RZ+cH!;aM~%c zVzhZ>v2jX>clcO9HgSM(24(?;S;D4l$ZSrf}x++$B z+~kZ>TQdewY-}l7K(oqKw93=6yD41gvZo`r_V%SxHyv@R6_Mp@6>S=cm)T_k7)h&I ztg#!7e2IuU&CG($L>+`)!=@?1T}7dO{>{{GFJkW{6fMCz;Md3nwH0__I6>cb{|{^L z7+ndsE(>>eY}>YN+qP|XY}>Y-bnK*Kqhs4nI`&=tzGt6%_rB-uZ+vH*e{-$;%b2UG zW<51)iq9)|C5S8O$$Zsek?A)+mR$l@=ESl=rG?-Z?S&6PsmfF91-c_wN2z70l3JFh z4>t%2=VDDTc%zMn4(IwdtQA^(WU1GoGWWC(YjlhnlX+PsO3K0EOFot0nPe{ARriKs z*R{#pL|Pb<+H6eo$E4vM>}>B!xG@ z@p=yKI4V}#Z%~YO=k@C+Tm927y7L%UXaR20S$0tIGosvU=w04zac1(;Z_!hGwsSPb z1&VK6Z#&a^ziy!X;byi$RzJYoKQX<(84QHMyB z50}sC-pQ+$&?m<#@$IQ_5Yf@_lffHcP1P)YR6qQ}oIN_7Mv!fv;(6cH(kc$6Y| zEhm;ryP^s6Yibm{$jEPB_$0Fio&6IBr$C{WO&g^mZtKeU(4{*&ljjmXx*R;$ zwsrfHnTJ`bluw*i> zBp5k%jOkFdib)LGsSCHSpjgD~-9qxAZH+J~t~;LwP=>rYGHjt>H&Nxle+N}9+OW=a zVGdJu(5#_=t>WLA_`$fCfqZ-{#MghScL&B3361rct|11=If-MB#hQvXH5BNbD`8V(ags6~;Ax=)ze$2c_kTDG` z9yxLD5NkbsAZ12eMCrU#uapAf!+es2A|g~q1mN^2MzmQCow(TdYCxt068u!zO? z;q}9vk&B1z_W7AiCL+{=1~Q3_BlQMU^pm`h7r~XCd|MX5v+>paLmJV^`8qi5k+T)b zRcqNSf2+?2#41$}+Uni{giWs+^!@_H*O4(zIn0JaZQLL>U}mMo!!P!tNiomfBwrim zK{^@^?Ed}3J~+iBSaaqF^wWKPRHi5qHr3qdsvrwEQz)sW(!zE8#7v>l$G&kHm?gam zB(ADppJM#bCSjMH@~4Fv>3mh3gYX3oG|*uEATukMhXWG3MK}6QJs)920h!lU)0@iD zK1ULwtJcu5B6f(kgeR)=eME_Lx9~_7Js7m8iAE)CsEE)sdde!tZ;Nn(E{Z&<=9bgZu91J=jsDsIxu5EMqi*+2lFB zzESBDhO5kT^Th0kI$P2)jB^#IA+l>Hek4pl(c84+8a(S=-BC1GJg zBgutzML$JwnGO*Nx7C1H<1>UbzMp<(?yq!tAzs9OdeB4jSi%`|q*&0TAD(+FO;AtD z15Ok%VKSLy<`dn(Y<2^a(J;V2CF#Dn)Y^Ku8^!PBzz`Q%+WBN?i%PpE*Qj5fD>X{{ zuH9G~J*EQD;f%>)Nn>;LD}#kw$aBA8M*-`2M%*2ghg9{K+vr7j84uTI&4ba*yLP>H3VH@#unLSvzv2X+q))l&5A$}iQq!Z)EJ+g1n3HJs18gvx z=w3%2^VD9t?a{3)z`>Zff|d8*nGfv z20$MHv|bU>PtYy9xywPmMois3s3?P~3;wuGur1{`^E_}ODXF_d>=yjodBZEa}cP)-wy@o|s zBPb%Yp-c9W^Atqt!{~GLMZB3RZx}|44N?dHlO~GUx=0gEhH5Wm zUm322X|b)@!t!wevW~iLyW0%-W486Bp}7_3SamaI_=950`QXIR9ghAPSI>;AU#2yS z+@1zqGwE~kmGy*`FinJQ>T-D4#Y!Z23??v&%(5VRB>1q?pC!9sYb5xR6Bc0EN^E*` zWR#7)fUl=DUnU$F3CxEKbh-%fxVBz9#-t;cmITMbw;4N z0B;s?9`a?4z7Osc9X3BIlp?k;AeAAeMSc)NdK<_KEjKR)3j797ngU2n`J31ROPVSL zwo>JFnc-3Sy_@z%1er2iOeGF`{)2%i%&zBoG1-cgTsgd4rIDNH?dj1|9cL)oyr-LjcUbDYn45-ofZF`lbw#`1()`v<`wN=SSi3I~;-JNb6OsMX z<>T^#4n0P1NBgT`)LzvkZ|2OKrfY70nomi`bTaJosi(jN7x&jEhyebB=px*Ir_>8oTTgUUhAK)yh}ZNi+)Bahnz9p75pImTfrDPC;eR`w|Gg>b-z4|{n1V`S0Sa9ct5%FRSTicBo2o6M^^02ZMIf7k z5s_gCyu%`RWfy0x)y+&?_m+NC+!4s<|2b&hox9Wxh9Y{Wd0uHx@f>Y(-QF$%hM=l- z=Dh=1;b^FiZWg=AAV5we8SY3bNOr&xYZp^fM=nM}J?lw;qh{*2hvr2}>nFwtW#Zb| zSxT3e(q8^ywW&c7IZ>Wcq)^Emw-+~G-^j-%*QTnsKz@UbIo&r2{GZBONc5P!`H18# z+|{dri8YX}#!F@;vyj>+SEIkAE;VMuJaI*~Vu@Fi%pBFkev7{o@#QZ((=hfz%%^7D z$AfFw3QOWZhLN^3T)wQ3tCFDy)vVqn;8uQG7#C0f8X^L8tX#4QDK_EPKGcrdBd#5qfT4T0`uwRgi`63OpN5C-5HGw zg;{}eNdH2eHO5G6e8Brc=_W`=AAC~vM0A4GJ`3Xrb}O|1bCV!V7Q!@*h@42g0E1hm z!^355STN%2kexm@G{XZ-@R{-j-3l>5LwS!=)SMbR$_*yqJuzO#TKTuX;>lwk-~<0t zQ_%l&d;DVx`j-m&xV)U0I;WRm>&3;azg(pNHk&gQ+I6$QHQnPL$sqA(XONKT{SOti zffI^O!JX8aG^;32K?xU}0AAH>NhKyMEK)68sY>Ge1f+uZHVUV#()g~GpVz+C)-fO& zP028upzQTY@iFe4kTjV(AXm+CviRpA&mG^j!% z^XieS1$xgV77D!Q@oDCph~%r@Q3?5UQNO3mfRl|8ugI5y8XO)g+q7fyCUH0z_Ss1r zgZ6uD%cWHAg~DB#{A@An;k(4EV1298r!r#=$ScYNMLxg5$No(9qnN<)O%(x4 z#2Rs?9|2LGXDHs>#yX1W7BUwL`hB;q)%L=9>~Q-+geuM$Q59SeiP(DlGVS8W{o6`nZ>p} zgV9AD>RnPm)+QaBzhqZ!m?>EEdzP5mkvckZ00VCQ3Qt_>7tO@pef?*GaB!B%ct`Ee9Ji9(1Roka))CDVBn)^XC8*v&mF4KGMmVU;$7S2bxA2`Z6|ov-{4L82 zlF%wafWBZveNo!|u+%uskL=z@Wg*;aFAb{`(QA2_i%gmQy44d zwJqsvrId;R_Z9OaB#jaVO_rt>oFdK@rdZBpfZWbzcH&T3EynQhJr)-scrPbY6hwF5cMNTlB8Ys^p70k z!kL_s+&D>^nszo7-v^xjFAa&+hpj7rAqz zTx%hGMd3DwO}+fquHmeEf7YVl8DvHncAN_4uKKMlknStfy{N!)EeM<|ikzz&Emu~I zREja=Vw@}S4fuQqb*)r$h<%}eExTnex;5b$_91>(`%| zW7{Vrq76;8uiU5LS?0%^qbKIm(s=voy;yj6`*_zK>Xm7s=f8~7`N?1%__IBLi!tCt zq&fX)=E^bJWWv=*CqY0nnYT~)IPIPepAg{$UBWp>#8F4FuK;ja3>jLCcKhYocv$=g z!2?rkC%B|@1a(uMB9)B-X##N6fT`xGxLJZTFu{z?34;LHxrm$eb{#5r34shi55dS$ z_tE%k(X#+oWb&lC$Xaw!OhO~#RORWa3uB!M%*IqV91@|q& z`L+X5k~>A3fuSf=ayA2nr>xv1FZPlbeHP!pG+3f<8Po7gX?h3-KQ(iPlPyqp7j_4i z&O1Hjcwop?a&QAw?p0+ZKqCd?m9^Ytd4Nq8gGX#HKy|5H4UZ zwX%hVUGj-k*#Jt!?JTdP6Xl~lK5aOeq;tOKxH}ncf6*?FliP%{)H{G6ua+nlX>3+m zT1Wj3u~vrh0?b6u<{S015~N!#CinvN3dRSNZyPd4ciZc>LWfVi#VUQTm;^3WFd|lm z?ELfFAJ6>=gx)M3popgaNfG_)?3dub4*vY(#`@p<=B=pnXW+}Dgt}a_Hv3HlO2p<2 zj5+W04O8y#iN1k#TDGTR@NgrWbEJmT_}s!_uZA^SsM-iigQ; zYU1tb`GU)j6&4!3)ohy=x2)DiAA_r6Rb?mtl$Y@uUG8_;(Tx5`7kqb|7<9VFUXlP8 z>=cJkKAD#fqB{_7w*x3G!Jsa^^STllvSk+Fh4L^Cq3R*Dyu z97jjcQDN=SFO0|^Y5CfA#9m7`!!7}cE5~38?E7@V_4STzTPcPatsqQr;ieXWMxXe=mPObjBrC$H^ z3wh12k&+2yOK*@@!9he-ibKO|T1e!{AU~EWAj~e*q*-lJuk7EV?aN8(m024{?pJHVHx|{y>@v;BtRQShk z0t{~cV?!wejC#Q65w?q(8tT9>UhC_@B2+!N8;~%$JOzyk1!5dn1GQF%d`r;==5_8h zo|^z7e#VpKF5dMt`d-!?ig=Ot@kG|j)r6N5$NTfqnd_H5@p1E^uqZI}swU-reD0ZSMG)u+s0uIiqQP%xFw+mrf83Z)@P64}yKzLN?sVy18;R)C|B0DF&6E zV9yCAzN&C=4VnymjQ2&nph?7gZX@$CW8gBq*hgwwFW&y%*-(xNw6MTe1}W@(nm7 zOt}P!4rWue;M&YlIw3Xsj&iR>QbN&Sb^Bp4s8HI^DJN$=Ydo!yP+Tp9ZmiqS(_-g zI33VpG)Jz_VYz!}nS9{~ktkU6s@gyyQd9+nTj6#-qv0v?Ngotx&_8ZgPjF?v`b5|6 z$HC1`HXU9OC)7zI)svDwgaWw;V>dUsfDL()y;Cv9o^$5X!{6tpS9ZU_Mz--|J7cbC z!OX!08#)$XnIoze0K)^;V8kP~V0$-5>#@Y z&eV-OWfB`SA@unAnUhR2}JS%!?hBCED5?C)fH_;T)?+niV7 zlmVl#5JyOAqa?RdQtlwLP_OP;TD`;k48pgh82*`m7s-5#gSNbk3>9T7 zG{#Ea_oR6=1iDcIJ*4k-Uel!oRXkV&BLA%`H<##R(HI_xT~I?rkTd?@e4oT#d7sn7)5L49g)Zgc+Fxri3nDT zRTS%lWlA!U&;Z%5VrH&a%_*0Qtp2C=vm?L{c#_d1OvB&AVu$W#)boD+43ttbYVh;6 z;l`M*LaTkUdIhekE-xdXr^1%Q+%N(Qjk;s?CKrfg%ZfM-=jFjkodzjnL5hrpr1qJ| z$h`0O_`z#^Ofu0*O_|+mT;qt&z!>`Xw=^?+TLd0 z&Pr6K&*Y?yC4sCPwVH`3B^LG2TBZK#sxfX1&UTnD*o(^6ckEb*#RIA9vWH^*y%22; zeJ1+i*vSa&Wy1{?3i&*#yJH=_$F|KN)_I+(_8MZd2+N5+wTY)sCC@8l7MSvCizy|X z>>J~@3#D}-W;jMXkk1e!t2@KC_`a}?ijEhC`kD3YS+&nwKI0nMN$`fVL zX>)*Ky=a8&f2li6)Zl#o@{FH4!tOPviTgF;coGxs*8;WXEbRbt99Z zgBxS^oKfPaW@F|WGS69s^v&7ymiZ}jlrpywi2AZnLjr0t2$qCw*?O7zsy9b&^YS9p zZOYcw(;7i(MT%Z8$qtLVyolLsSALcp79a=R-hDZP1=lQVfzPV;Iqy@yRhMS=ZFoFE;_ohjSnx8eX!=teWEZ${0$k&@v~XLdST5%5Bp3qN-1z>Im{2Xg61Uqh+m#g2@<0 zeO}JfY$o?RLKqNiG(;%xO7p4_zboRFLGkoC*$I2e+%pMHu8jKavA5|eDj$ACWjK8C-pAlV^Tf2Nz4`#6CSe94+cIw?1^K>hP&QT?r!56-ZJiIC)0By8#av_L`xSA z%V372jNI3t@&yDMh9(b7R3$CRNyt=m<7nQPE1E0{VU3{+nA#(^AT0s@UdLXzAd2{Y zwAwARA-!5Ct>~?+w~)7etxjliGCnO|kQ%t{^1aiVip455c}|1+o%9z9U9Hbp#GGOI zzFTxjH(VizX{F+zBMHDu&dlTvlhzloF{*r~Mrd3tJvkRU<}i-J&MtOgpH_r#iHIU# z(0BU49SDV}WF!wnBJS8=9OM#;guza3D0qa?)8Z)*#@8qiPB>!MKry>wQF~IEL>9XVG4IOEM6?LQO+{R=lRfO%Fhscy5Oh+-YT+##PhJo0)NN8XJj;6{`3)QkMJMm?@86OUa7x-$=A*C@4-MqQe5^?h{>|;9z17okOF2eo^ibsPF0DtaJC=MHjP&+b;9242-pMuE0ULw_*d_WwV|2h#Hz z3MS?}uHR-ob{?%e<#c!5Ts2*Noj1ybgsD{NjABWVQ;n6=oLcX85az8>nF;%z!qG*P zn1a{c)wo%I*Rm!6QKeS*6{~o;s4tQf#eiArCIXp8v5|6_x^6)>f)(WATg=1M<%LZ4 zB+a+v_@a1-OTHvbDbpB`SlsB7!a99DJ*?D_7tyb;?QV=YEBN{l%8!uhnMw*m`l`e^ z%$&opu$U(oFZuzfcEl`2WFGg<+Pr8{i_+A*l(lybX4W%sXFQ_{-pkt-st^o6`F&fv zy1FvTR}pUlZ=(G2bRAn|BRnWDi_}LO(E}Xqt zUViz*zQ?6w>qP`u`h)n7_?W^=4=MFtyA6TI!oXpj4E3F?M&$+2OgL=F7hGG;U(Tz0 zjF?A{XB_crFFRrkM7x*C*DgeZbFLo?rv|8PxWTNg9}l? zreeJ>)3BY#$9RIIa4)Pm8^IpdcMr2eB~8oc_+5SQ7^S-rropWUC0{6q8V>#PxAAZc zI-oSI+&5>R3&FLKGbPNT>}VWAQ#Zwp%d?9EzUNEt_Y77V@GXB8U2!6 z{Z!hZ=tDL&w6SV61g|0^UMQ9s*&wUl88YFzetHc@gXimQ7v#e)NScpayj`{hG`u6KgZofkyntKeJj}a{?j_OrV z?CTUvtbcJgk4%HAG>8avhQXueV?;_^k?cF8cp&t^&j4G}kG+T9Aj%qXOwGP>n;i)0 z!lM21gQyxXsp>-!ZJo;f%v2BLt3z$6#dWPk@HI$;H%BZ6k92GdgKUhzv_>Up4FA4N zsfmDqa}3Y*i{ha`YT)UWNQ@#<@$iX==~igx5%c!8zc-4ONs2FPV$bUEG;}QSr}2=_ zqDvwQU9o9up(?siIY_HqnkLK)qEcnCDMORVe3gCp*Tv(br_H`}!K8zAT`I`wS{0Cq(I4Y--Gk$Pj=vk4)V5#1b1-Xc^@>fq0%jo+VWt;k zZ(d$}ldie_5p&1@NDnOOmP0|pEhiLSZzd3KWoqSW-}pk0)v;Xe^I#1pX5~jz(BK*P z=F2p|N2So%%a0~ni^X8+plHaam^ADV7nndyqR1Y)bi*+F6kwdr54sgczvKYSw?pnT z#O~9}@HU0x3b@R-M=W-fRJ+4$5sz}~Aga70QwMDq?$Jq;aT9agr!f=gWQezk((fjR z-S@f+J{76-lqVkBPRN59c?XVmGNW1~rWTLudIdOdiN{i(DA>&sX%+ohTl?ci0)U@~ zKh}f1!HL)_2M>nnws1$lhyAJ0;Yw43czSR69;cJ*N5LDTsa!_t@ZG^K;7vtc_WZxE zUjOh4ii`okeEL7Z{J)-(|E=fpk94lLqKqA&d(3-{z0PW#)Mi#t9LnZ70tr(nY+HVS zAQ`^Az!97>*~4*Gras^UEH1_}zjtLH{&|&d)u-9N5?cPf3 zc)zRd5|MEi&Ykwv08FqZSsrPq;aKg)Lz}Z`qWs%K2tqm<|BDT zLOXEikS3l}kJ`T56AFZx+4`stPgeOwRoV|)O43kl`X^=TWxI93-X@C*wem^|C^5l+ zxNV{B4u)jW5g%Gl+^g1`jq8AC0>RHb-&1!)>0o4kyx79QTI}C-Qb3B7vpMKc<@1f_ zRKMwpv4Cjdcw8lKM?MSLK*Qs@K;un0XA$i!N2C3Aiqjv^VYgozh!&>=?{s4I%Km*q!`Wa7rd#oMurdq5S4RBp7$pRh(mByWe zCSGMOZgVj!#p5?hJ6Vv+5mYL_$zpGbncZYr24_nb-FrylXS;;qS6U^o7@P zU9K*RE1nlkaz1Y#zhQbdM zMAJHU&#NLlch_2!eMnV>7EImZ2*^RR-y_$FW>M>V}7};EW-IyG; z0I7c7pWTfl@-iQCz_C*mz(@5h!DrXotVaoIh_O1dv}3&(t7y|OEFscro|t87*bQ^# z!?=r(Rq5@q;7N6|XoiWv4j*DwJh^l9N`Ggy0s(=+q6j(oCPXq>W(=r4w(*RFD4-pv z|1sfOvcqXYbl=;c)FjwjBmK&9SD{fmXS=|p6Y1Rk5sAX&S#s|&=tX6*gpye&`LV6p ztzD`9kU&Ig$tUV5s600l92Suj<4#?sK3^A97V*l7i(hT1vCqU=kG@zJ&=`Y_dwMLQ zJgnhd;Z|e>9Q&PHK({CqZL@B%!x)pYka&_^HtmHKT zs9e#ZZgmrhs=hKnbg01j$d|cDSN3~v`Em*w-I&wm8y={beXiKFL1)Pb_})TiYQ#bE#QIfr4I(h37+kGWDaafCwAo_JWA37 z2w_g&d?}N6(#6k?Bms9&^XG`>`)Tm2d~Y>L-^L8v)u8$3-+#p=wfbPnpaH+E#Q(na z@~@e=3soI!WI#v8<%Ml&2hL($qm(}_D#fzm7-W*FKkDkN3On(Iv-b;4rNXL=rd(RG>%N5pifRp3u2#8k~&u+K&X`@`-5)OHw6e%3yzhVwo2oSP0SYR zHD4BRX{ng2kVnewtTlBP)Rm~Sx=&o!p*> z;ru`rr=l(>tt4GFh0sQ-CsH+fEJ3AeUblu&N<@ih&e%ydolu>YD5lyputP}mDt2W~ z)0!l0*x2pR9_u-WTvA?IVnb#DZ|#2|<)Xzu1=(N3K*mg>SE6Z{R~#Ea4>ClnwxHR# zKweT-ifRUsgBHTjhM|UyS1qBo7|Y<~VhzcmDVf-VDA2|*S_o&lIK81*-~!jK>UUSq z4wTGHX(BV>!jQG}^Ug*4dZEn{bJwbciUySvj?_gqo#0;#2uoJ##f2D^->Z5xVO)>Z zL+?3R{SHwZ8LMJg)j3z|6vPN3n4QVNw8Y5TlhoAn*(jJRGw;wcD)%_|8^);kK}2Ka zi+Wn~c{d!mu$8~6$#0K(XmM37)|i+Y6G<&*IVmaaMr)XAkz=l)?*jum>H5#2=AaKAzqD{H`PAx!a`esCT3#xKrVso!n ztFkAmy9YrG957$5=y((BBr-`XDR3Fk;d$y1#tVrEqCJOG>_4h~5Bx>RJ`gF4DaGD} zhL|>zwj<*9+k2e5Ka9!ASE5f72Yj-P5j(2eC!G~>riPVs#~%r8XFjRJ)Q=pfmFw4@ zk+(1TGsaX=ORY6{7?OD_w2zxqOm8pnL6=KN;E=F_YT#S&LDN@K_~h*1xq|3I@F82` zf7XFvo!HYfm?gqZY#Y?dT=HnA!r5|YlTBYR{fa*K)L zq~zpZsY`6`P07rW9y{U<7#f_47{$zDl%=6i>5N0L$VAx-*)ju8oP1cTU$D3(`>~^| z5okdXX+NHL`VNcW7Cu2IlRv0VOVGHY80kjIvn51NXm~?rrhC%Hc(~}cU2%k_v|z`d zB3~Iu@21O1A1jm-Jyj}3yC@g-Kjc_^OET7d!!3tCa4Ik!a}_41v()3*nVku+GU;Iv z5++Pnk>dy4DcTkMtIGyisfS#c4alSsrO7S@p*zgGuwH9Jl^f9HwsEI!L?7wX7ArM@brG*U(L*&3qT^E@TDH($0pz^q>Vh=gJ!F_bP z;n9U9x=DCN1nx>qsc0H!>yeB7kdf1xl{hczrJA)qkb#>pQJ5)_-(Uj7g%zkERl-Rz3mJIR z%nN47^q?Wa!(W7%7q6ylQzfCwX4u$Hy3D4Yr_!CKcplHZ9$q`HfYO4~(2(R01_h}d z`ShB*T3+AG;M)1TZkv9W>t*Ye%rEH9Zv&`KtK8N_3Gerh)u+088W$$emuCRgN&TU^ zGZCDWGLmxu)!i51j?e#1b&gHU=IZ%hQ~*@RQiV8DQEjKLpz*U-6CXWBGhF`lP+g6= zj;PT_D|2N9RkO>3p=CC~{agC&MOk(k{0KRDQK^+d)gWRkskK=3OO1?-s#ov|ay}^; zwiPQ;@!nn$tge7e>|@{DZ5!tR>(*uWd)qUyrpBFZ8}D-nR~2=FaI z_EXZ4Pm}1SXc`t2`{vO@48f`~WOS;LmsAy^niMC()D?y<8mmxw)fH-pFcD3ih83L} z5=lA={V(^R`YxnNkeiJ1D=r`^D=M27BBrH^89dbgBD=Rk@d~lc5OuZAm5Mr*8>0|a zb|H`%0NGinR~I5!IadwhU|!DG!Jd7${xT_JZmN$%Q|sJlSQzsS+0tAIwmHVdnfynX zpq--mBHIBSi~4ZWh*`1P7pN%A5_$g~{oI-$90(GjnxYY;2i6viNu2S?V^P!^j?&VS zL9CXE6npA+h6#yrWy=Mr+}jZFUIG)PTJ=6@b%V-eunXEUCwbfhEi4&r=L2A4isCUV z{$Zyn!>`FVt!*3WGb~a1q`BH4!IrSULyLUsYL#F1Xk8yF!W3MXt;rA(DmhmTGiOY0 zP#5A(`a6(eD^bur)7i=->8vWd0;(a|t~urK8Q_bik`p3*vuG?y6(AkZ);H#+`0o_s z(k58u6fo2JROG(d^OSJi~2~F4_}Rm zgrtv~rn)Cj=sb3Co2F0KshfmsX(1m6iY8Xm>+Y@c8dLb2c1(EwocMhf2;Z(JM+hJ_ z9RjaFc;26M;d$HmUXTXRg6KX(f7Z~1-wJu?9$cThXfdB)qccav+Z(V%V^+tRlT+4k zN#*!t9%pLGhqc|1Rb6X^m`GKBBA+?c3OSK2x>79K*8(~b7h8cnu~#Z)R>owYT%4e; zjq5dI3T7?D(}%Ad3LNA_oscmk^PhQSnT@#b(S+*NhF_-{qlU=m-ZCPX3b@d^J&{RI z7=~`_=lborwS({k3=p%J5Z^nFMUf$ds`Ui`dw36w-#NMWhW)to?S=5i~i9UG)i*L3OJ(KSAz@ZsHT6u&NX_tK^JXm=nMd z?P-gD?3z7vocM?AUg$~R0AzOsAUjt8*>wQO?)@*a>-;as4j&Cbb_#!!9kCllyL=2y z*^nxAFDtV?7=Y}!E=94qEV{rR4cN*};U4yMu?ODSLu?f%f!L$LZeVfy$lTENwh_F9 z=3SRVuWr)d-L$0#kP6UW2Nkj5quI%u_u`I+=62C@c6_hR2DRK|vjz=r5Msin9hAMo z(FW<*Np;*LEZJ$h+%yiigR%nDj455_ zH_)$y_I_^PaCTm!I8hys+nnlNzc3~)S_%cD<4j8GzUa!ll9!BlW1r_tN(m^YTzJ+V zE6TCI;etdX3TG3<&$maZ&_T+Q2u@Xckn2rXbaNf60iSB@TT^^+1!d9Jq~zA5V3g*j zT@ER<;r`KLeU#kXr8AewV&nbJij#exp@HcVd9`dDCTygWGV=VQ6ljpAzdF>lXu4v~ zJwJ}>uB>KtfzhwsSetKml2N>-Qhm%U-H{Rfy_8qGOwGBnh)tSyRW-%Ndv3c9siIL} zs!_(wpTJFWZb3b~B0EC@E2IOfM~%6%`LYpnUOwWthh2?flc#YIDwT^B(^B-|xAK?B zd(}e2b;f7TLSGYUhnX*ZZ@C-@J%lOff}d!x_%R1xn5CKS@Ny#s%GJMTK1K`$r7w+P zi4Nww&+eKW&~&X#b?z00+e_ z$Q{At%P!7MdaY4#`z;np5B`bp#>8JJ@aXCLtX+D$wm=Y}LIHgC+ujz?t6z?{IF~Rq zLp?4VtMIdfbo1?8(O_2>QQTf`-nr1G16CM_+9+tutUZj9Z5A%11}y_nc()&BF7_w* z^d;YzilpqXbY~|;=YETNu|#c4xy$5kejm7IPs7U`7ah=sOO8jZKa$OPKS$6WVEldj z+cpf+f47VOsR1Kd%|c&W1?9t*G@Z@;b~UL;0&8^^8PeDSX>~|>Ra4puD6!1;ao0@Y>Ykmf4g+e_Y=Hdv1N|`bf$dkXwM|5ErUXg78S?O$!RUa!fXC6k9FxGnl?84RECP&+I)(U57(rcxxIv85@ zyKr9)plC`FJebHcvQkgjbjyo~d7`>eisM|ki+9TtU#`aI754>JyW$*DyrAGDE7v8b1E6_yzif<#xyF|qb%Ub0$~eR^ z(jq^rr!f!P(AGy$g6vS-%y#1vSZDPJBE1LPj z_B(?e(OR~$F~K}1+k?`v{WKK<;>$@i#pK6>D(yz*|R1>7gZOaABNkCs1iWFEZ1zo z&ti}wHoXWO%+B8jR#wzH`%8xSCE64-vw-ortSrxSApM&2yp~}_&=sS#V4Z?otmDMg zlnm4F`=d*Spu2`j6tPY9m=T~jbqI72AZHs@mQgTcQl?Nh{at4R5JiLxTw+#79Wjwk z+tsNtk;;E+u>(aB%emV1^tCNp8+1*0Cp>slgQK>a*p7J>(jtI<80_S_t@M3qMkSv_ z1%eW=Zn~!HtfHsda>E(zYS+hjY6_x>8%TT+)lo?rsF+a1 zRgo=J2@b}!#&@n`TOt%Ya8KOmnv@ zy*Q8PmS`AFYDNo7>epBBc{E#Z&&rBBY9GGZueCa3yF=aiT{6X`@oYaUz`ZT=S08Cs zA$?&huEtm?C5;K?&thtp$v(0h3Mm;im6VM50vw~AxmMAVg_Mf;1x#(DvhAZZKk-bqxdY!!2Cjr-eKxsbQe>-sx^vi+0VvUlvA zOV@cvPy%BrLot^ z;uf8D6*f`QLjz;wU#{I#@kENAWEjrqrS5a}_=PnIH(pR{o|X)#qS{mi2}Q7}Dt!xih#8^AmRQN;z04R@ zAf7e~M|w_m@VGDllX`Of&iTphO@ENGH%h(R%2PH4HiWyyfMV)kOt16 zjN;TVNXAc6o1x&hPOlY=R&W_dyb_d}d2MDhyiU0uJ)5ZhNBqvL=mgD_QZt?dPxi|N zb=T`#Qot;GH;FgQu#{f`x*##bbIUrTL)CsJdO)PaVp(1%|L7^<%{QECfXeH~ z(aK%vsp@Zw$Gu?Hm zGVj*3I2)HBqCOmfH+LKy);u?E1M#rd;1kz`F6JOp?iUH{qEF^x(88N5^>i~ilH!s) zNz%v6ufmXa#M}~PV0$YtvDS$*Du4b>1yR)SV3H@3&_4jru# zQ$l!i$k1qvhL((|#~reW0TlbhiY<)QCVQeI-AodhsJ^PO`38?l`XO7v_GGn3EH_zNu)LR?6_%QLh2F(;-;Ht^{4Knk`YiZe34H!D=1+C-Id} zRaV*U!tXU});-D&!anqdhq-W-1{^kKH$z*Y#gZPW8XnpV`71V^sR zejM>#S?O(B?wF1n?8{!LRx~=t1CsUWqg!&kw$~&yI7YmoyPKHnWjA2A)Ea5Vgo3=V zF0iYiV(yAA?)pc1V4it~fX8@US?&P#H=LPxY+OWEM`~wLty?ip%OkHWm}{Ev4vOQ(I!!Q+5x!&jXq&DE7m2dL ze3G{jf6@^^M7_CrNhcAe^%?(D3SS(Pjs38<2miJaVz*@62-|G;^PN;bBG5`Qgz%)VSh zS1cTpi}_ZCh4c)=ZgVjolW?gi$D7zD=~i>3)}nimO|~aAnc5#G6aOk7r(;exd~;k{ zu+%VKGNy7)q~TmXnxRD@rM9u{yQNrBN>3BQDvVW|{0H9AhaqM9P}zg42!8)3{H~$) z@Xwfaip>c?WBReFP&Ty(Q3e+iZw@u1#iWLV&VCn_3Y?JI9UO~lg&o`X?wMl6TbX(s z8g{xW`es^;;7Sr<0y@brR7x@|oiw_&CTueuk)i0E0FQQUe*{Alg7-K~Y+V*bhZu{R zwB45KM02uxl}}15;9H>}MoO!AzjY;xj5F#Sqdx)yDYojbxtfT=P{;3*x8-E%Dub>B zR&13et7jKyMClkg@Kp_)>9QH@xM`<$=c=mZc-C%MPsz46PMcgP_9LzyE3C=C*@h^1G2=Azcyo z@vrO0sSy4IhggT`l&dUA6O!ibvL=70|NKu?ys7{Lx9qPK63hP)y#2r5_Aep;#Ld!< zh57%hwkQ1mpbTwI*jWFcSjk*Z(XZkEbK!nT|9#?ru{M@QHlD0>R{zR>I@zCf!g;GK zH1hMAGkYKl$x((2Di#n}icv@ynlktmR$6Ld10j_p1h%XMBSYwPacxoA z&}i?q_V?7*3+Qu$+?WP&BSZ`{Ru9Y9!wF&QemMHJr1d&M%7P|vdiZzq^R_Gp>EO)e zA+w&y+Goia*ctcup(PzTXjI$VtuSJ=VzK?%N{jUY1p6@6zqe}IXXtOz?^IN1(&x4A z?KAa|PUd@l`Xktl#Z85H8dH9BmXg zc%yMoIbK#fZm!8(narN|O*ffgAE8-`p|L?Qorfl|hS^rXPN1k{)OnG?vzL{OV}wELJCAV!yME0c zMIJB_VqC}YXmdm3;XcXq>Jf>10@84E4svO<9(}s|x>kIQFyPeaJAT~^wuUQG^g*T8VnIP3|y4t%ctCb3GU7XZFT2<3lqdM>tVEwmY zfORV`jOh2lk0(z6Ns^mymSvN5JTKfdqpcle$6?e{HvWMPGL1MK%q6aM*QvoaDBXgX zJ=(w+gRm&w{aw*~z!)f8GGE(#hX=-bB^R+82?z__Jr$P&c4sml~; zS)idRzQX?t`2^(8OEdtC@gg1S?VG3rQ$tBdzGXZ|E_TVx+W zhuiX3!ny24AKY)S!^2N_UCF%;c=Ix7(Q5tu~U_w!tU56ylHreB3w12M*Oiuj$xmlV;#)CTp4fNI#=j=Kj_58-XnCX@$^oBrI*#XBoo+U875hz^zbU+uX?DYO9hyJ?IecEAFncS8jzeu|%IT>AmVR{DU(jxBM+US{nGH-V3ddAs z&{R>Sxl!{X4bu4~0)oG6u+=ynr2gX)%HS#r4unUK zke)bdA6!VIa0MmU-xIiE9dQU?sC!`pv?;?lSzm*!l~D*a>RK*eR8^iB*VchstA(T{ z_fe#t+%dZl0m&=0J5-4xle+t@$WG4~W;e~xmZh5?qTfwlv@IX|^+nxtV8m)pJ-v5u zBsa8NVR#mmmxY{M0<%}L#DGo}Il=aU3Ss);>J}8Y!IQ>j!_7>^zrYD8n%}#Ih z=Ige7{TjsS%OS{U<8r`g#~OA$IKl`PvTME(Oz!KZ>)!fBdzhb?-i0W)Nb+m zBfNcmdji+~{e95;5$inR1L}>y`QYN@Kpg!Y1#b?^jPbpUwwO(PNO(MHz&1Mss-|3< zgSdcKIfazF3D6YNCY|v#_@(7cXz8!Nf(JSc707n<7Q|$rFEd$fw5Rw73#65C@6lVLmDY%>ID-h4H@s?dNRIuqXgQ-^x4yF3^;uP#FNp;Ov^%-Ai z)CQy9OhV$k)ym5JPB9v%3N(4WpEiU#QMo_!C21t2}eD;Xn4d#je zZiX6SVNSgqf4wV2b6y364e*RAy_mpJ5Qi=(8^IaH56{iq9-sYTk8GF@Wp5 zmgj^+3!veCP4?AQYd1Vw!E+P-fp6=fjKCV5Uf&8awmeZIGm@SZF)8C+6c0!TCJ(BE zRn{QT0|&>;UXFBrp}AZ2*Rd6Eu1uDcWE^WAN7ApLU%_|>+fLbz+sCtqtdZNpcRSR) zT@5eQ3!F|mtPEwojv)y@Y7o2s=(=BU2+HHUmkIF{2lkxcd2LB@+`{{b+~3yt4t$8s zCJ@Hf^7sCZywkK%JKYKc6-9vemCRicWbpiP;KvB`ou)M*phq4Da^Yc+t(@ zdU52fNu*nNv>E78yMp0kh`9DNKUvVtOP~=`R?;aXfO2Bug6Bp0=36{ff9T$*80jhS z@MDi@n2qygeu;#Iw269$#;Zf<)!FtAf^+8Q4|KOw711M*69h&(b>S#C@slPhfh5Df zxy#sPQFCGUxEO~VuXWU-fSyYO+$JG!Qwq2SZ&}0!F4H^=@$WOtDAoR?*GUR(C?_3d z(C5ru0^UWEpf0sk6RgW1E!V{pn)`I6HKHh58iw48d0Y+?jG`N1bPBMiwXrfTS~v{7 zNsjC-2vR@w_)H_VO>x|xXY)ML$gY@M3a=2YQN_&2NymFe+V@1n9>CteQY&REKge0> zsYogI4FH_W4t@4UoEQ16Rkt|Gd?tI%5=4d&KcTL*1%LX&v1rq*;rliQP7KY1YVwZG z*DHzzrM1zH+2|SOsBe(Hp4@`mIqZ}~0N43ITg>s$1nzSNjZ)WKM}^q=U?s^belQX{ z5?U){7Mzb~LlGKpxenc6!`V178)l3eJ75eO%Pc?2Uu(R2c-ZuVc#fd(EC+)k6nNGT z8m*EVqyVhh5({GK7s=uMaf^a3`3XCLK+(bcsSyS9XfxTp`yZ0KS8>#)$JVtQ)+dT< zr7S;HsY+_9^PGSAO|gZVCkD9pIc@0^2Bq5=oBVk;-u6ut5fp97!V97k;?)XdxuNo9 zmC#0~49u0>rM`IjaQ%bRUVPH5oz@0k0Ag@pvLBwbJ1TU7GI(NLc?1%r+N?RN^m`;Q` zzA#SsCNIv|kMI7}y;$tMXS}?zW-SK4A`X~`PohKO7CxclYqi=4#VE!JaLSGg8aZph zO~>k!Yij`Q6ew%E3QWU%XZz^3I}6zy!aKp*8Asu@I3(<`!nOf%a72GYxUWKIaB-CI z^Rb?CgTtVqdhzpy9eNHBa7mgu#iA^u{|5VMlNy_xMGOE_tD{Fr*$w?1U^sw%XuHw6 zOb>rgIWg-|=YP!;$HwlJ!nNg9vyokfQVji&{dO(jg}0UorcCS{SUX@#_C*!54H9;y zp*c~AXCx4HvTz+tS=f#}9c8VL5Ts(cNL9ByC|Tq&p?vRV>+)G{N?{*pJm;aqE7uin zq^^~nAujMB=E=rzyKCs7v|<@z(j8M~z0x;}nLwl26gqo!2|Bzn-b=^9u|ARf@dW0| z7;kER`bXQOv4}-hF{9H;0K8kUPEl=gBm9)b9|mAR z+K{7de0JCrb)}DMwUM4#FgXIIhmU8`DTTV)h*JPwRd7s#MXSXwaG{$=>1U9mR*9R> zKe?R41zbH_WG)N=Rg&kbM>vtUHu4)dNkj3w>3C+X0GaW10J5f#$2NGZo{#Soyq+tsz&#q0m6flph>N3*~6I%syb^jvHUuojVqjb zofFyH3mvU`lZh0kk-XxI<||GZ_d%suWk)nfqv;gyT1U zx$4XOx*2ZufM`yYv3AlupWHBUjePP#$-i)W(zJ@!@gtEn>^5{`Q$gdtM=subs(D4_ z?CK9b&Lb5Opx;d*|AuYwJYRsf{D(S^9?YevUm*eBYxQ8Onh**ttKRQ=xz9!pXNuER|Wy` z1d#(l?1%9vP)WI=g%_e7RDqr|GZ8k*B7@zyc6HAEK>(%1uv3qp-C#c>Da0{9?7HwL zG%2mJ*9zR6jP3UO=-lqq^d_o!T8c#M_lMWV;`S%-P-uy8wm!`39)NFXt90>A_K~*S z9Ol~x{khYSSUZ4Je4NB>t#>aPC73Xq@WqxtnX2}c=+^Ip(JaC{A#_Qpe zlIze+b=d>g$tYW9@DFi#`E~#Y30_ak@l_Iy1q6*jkcq1pxk=Pret#@j{<8KOv=rOSMxW^u0`Xa)9f+B)#ji3lkwsfkNZrvhFz7ehVG0ruyQ6W z9PzdmvJt>LP*akm*uI6Btr=0gNic55t+wq=$tO2|jEA~z(aCoLb!A%O8idb$@Mf&6 zUwvrvU;i(+(gyv5$F+{PE~SF!x}|Lx_^&xuW)qf_Gd_5*Cughp8$`kIKvy}r+) zAG`vdT56A5V_Hng>MOScxDC^a?A%RHdiBPxF~n+YAd|G3gXIMls=RTQntB*_ebfp% zv52jOx;OVGR9b1B8jJSbD!mSm)UROIt;TnMJstpBMZDl?qqP;~)o0|QyuEg*03e;^ zazk-`e&BI^W#Gjr$(1kQZEeeCtLe*AZz&$nw5>RNeW}awU9FPmrayIpC}XOEG^Tr zGJ)ayZ`-RA+=El9sRNAecJ1jlL7HEgA^QwexE-plY;<@P92j07bqq3d<{QYUOPdGO zS~#dQUq+4X1+F%@60+k3z4!Depjah~YTPS{1MCb=VCmGKMa#?iyN^QqQAjbjbQvcPr zD0C0Q$j0F_>Aq`M2d>j9__m}=7YM11lX<6!2qEQ0NUrU&V7V$0vk+K%AjoB!wJ@HJ zBkR{87LLB(qulPnrSC?j!1Eax0M_)iqiD&?TfFQQabxyz|X<0$;5`k<5jfYuD z@-A0$2YOM|HlEl{LT{3-yn5|QcxVog4Mud`hU{x)Tv_>rfI4YjD*;$+oH-XV7KAV& zNV|0qL>-0S)PF=QWgkIQbbVVJ$lVd?ajU+aWk?QfYdK=Wau|%)ZEx&mZMNSf2B z7CYn~l<00yp*zC!zDKD!m)t&h*PdXsiT|``O3s(pJ+1YJzhFxiT|}F_Hk*>0ZN}C* zSU6by4dY~cv$c&7*@ffGzQk=v3lCKHKKDmIlD>vE$PXD_div1;o-vfHABhJ0v2TQ~ zp6aEQA^eIx5?zQGq2D_XMXw#G;llE}!3ea~B4RD>4Z>UHdxh+tVTkE+>I#w-0FQNZ z4=+@vSa*dviGe3At@ z0vH(wkr=3>l^jpXG#(rqw=g}}Mn6tibsJnHGiyQkl6V;o6Dl|do`Tw?9j1 z_Pe_~IM17ZirD58eNoeyD!Hmyw)S_6oY=W3Y}4Y56g;-O@5z6UZ0ai$ zsyufEwHCbN1he*_xg!(CQ^NbgoYIL56xfEr%4FsCb7An1Ee)5KNTs!eT1Bn26tdLO zk~F_*$35%>V_4imTR#_SwtY~5h$V8JbqI_G@Robd5P57{yf;OxN=@Q77#jbS-C ziyXoWrXVT=QbJw9|5eZthVXM_isxs{A)?Y!X&%uY?yB)Oj82Bs8@%eAjacCF zU%+lrsJJKI|$gWm0gTcDx9gG#5o}XkBy4ctTXi$u)`Fsye&M zxi+N8Db|~{G-jq|%-z$jklJBuQQ8tz6)|D2D8C+P63tek{G}V# zGWA7!%9?xK*M6O7v7!DtYEnwH1GHfr!ylj8-=Y&bVEAAtPDu;ft7Jxr=F`{Sc<9VJ zU7%KE2g3D-F|Dk|xb11vGMx^FxZrE3>5NK&S54K6fGu^J#)<$f)?cdOQuU3xa(`7`kPH@V796K5QzUHt2RV!6RkE4U?*b4u#O zR)zx+N$Kv(hgC3P3qS?)xuO6%4c95cf27b=rwA#er3bdP>tk0uA~-Vh*YUeqWG*pW3Iy2@R~2D zu2z>4>@QvAu$fR&#_F2Hnv9`^rud*=$ITpAz}yu=SJ{b&@nNLG%ty@#)oDaf8o_2# z*&DaE{Lm88h)2WICAKC?%Vz_#a}*RFQo92L@(-Wd=)Hs&PI4ToYMTy6gxnh17UubJY$gtVaBcYCl38eB)WjS*F6MHk~lZWrI{$+8$1@qr^O$Z@alOAeb~d+ z4fllpcA~b+aP-|WVN2C*gl9Mm35%|xec=L|%u)tAuWY%OL(3v1F9Fn~nj$gWu>qM~ zM-8_)k#hi=&R?B@#wI?J9;!bCMIW1pnE44lpqC$b+oHhO+|EU>0v!qehBl_XHcZ%Bl{-DvSPY~}_OyATlkpbR_74)a& zr3UtE>*cGA0x_*SRGAYe`b0@FVhC87a9~gB?`ar_8)ayS?>7;$lpwY01L~_LSFt6h z^*@XMWbO1 z#JnQYjRRlKoP@(BQow0RsKr43F2*6h(a8kcQI+;aS*HNOqKbEu_S{wP^0g36WS^_N zYE)%*YI&U7Z&T(&iaJjfl#;VWy`HYh-mG{Gqx+=2o-Qr9z}e z>u;G>#Sl7+V{X^hECRdhYM(B<-YPwMHTFLnX-zE|YRxbH2yb}4?BL%M5yEGpx{H2! zr@N3jjsEoO8~d+)a4DK_IoK4jH9#;)i#yy9J~73lpIHWrF&|UBjxpOz;c7N zb4qt}1)hVHY9D>Ja+D;!|0I(HxPx3{zgdUk-4_{IB7fKg-7G3y8-Q3T0*j0o6@N^0kgD} ztZLCDq*VP=L-j^Tu?S4@2>1xs>P7B@y4w(ABS@xR z+)iVBbx1+6369ct{%=~UcB{B$RvLZRB74|VDBpH3uY}I9Z6(`7hd*~-^e~p(wmW?M zo}eEH@Os4kK?pXnNeGJ`d8YKorcff-$|iBc4}zZBl-2e`Lt1JIYNoI;A}tSp>eQAV zUiD60uuo;;{qBCm+4I=>4CQIgRL{oa_w%rOn(W?t?z^$M=zxv-VQ$In$|0SYw)?qd zB)aNi=<%`lsgnIZ`brPK@@W3IyGDW^leF70pRT{kgd_`%=Fj+!$cu^0hk=pzV~U3C zD``$_^C;oUu_98C=7>`E@T_(arp{obv_DGEu1Xw>cLCzf>$`KMip7_?QFAlAuqAX|xh)WE0A4V)N@b9T};Uy1C<2hNMR34pDzk zvrmy--L7MQu$=2RuWlW{KyGyxczGk!t^fWpVDB?uG10x9Gx@|ny3$FD;Fr%vMTP(? zQw2V+;B)0j;HNJevr*Ay$hO34mU#7=ZtV5^WrDkcD=>L~N@i7F&|;_?TLslXsbH3} ziROfN{PKLm(!jEt9R4%vUZRP{U`)PcCk6A|pzAIzT`?A8Y%0$Y1S z@q5!-o#<&=#_#F3dQOlB+!hS)eAqE2zyay4$gX25?6kh2T~h~X3Hy|n94dC@`({}F z*(uiG7=ItBb;)T{g`;B&B>3iBu0T{_3iS4yr)K{Kdc(-5N}0AR8<3-z15D2)>dYd3 z03q;f8SJ7))sYaz+BX1lz%c$9a_hPZ6P^jeM0d2=gWz(sE8F>6lY5AuftH&-b7!YT zUEP6Zp0Cy{F650&(@6wVbpfyu$x^eE>Zr}?7l&!b7`u(RwB!*&r)S=N)Q)knNl5)l zyq;zi%_lo2u3uHE-FfnDrBz!oW4u_|x47Wd2CrqEqjvO65FRxA6o;=%6s1Z1E_k3^ zd#1?wLia<^9E1=$8e;nFjn3)A_?W1d6XD?vuSR)hcHy}W!k`g_eJ|y+vZlJv5~W+; z&DH+!)+WJ-K|`@fflGhVP)o%I(U@U2Le@Qj}DiOQnF;X!- z9Y288|OKc28!g#zwCt9ALCt0Hi#r6qu$$qfjLv z`|ZRpbsjyp7-T_gUMmq+?->kFK{?{ZHZdJ`UM05}<(?@q9de#Ew;0W(O;Q%hic5hd zT+2j>#XlW%-cY1-s1OnSgfZ6)^~ZRj8Q2fB(*6j~;vD5La2F1R`f$&YLNm}GaHXW- zt5!mKz=F{WAlgLl+_6G`+ zxE2ZF%LM6Fjv>&7n7cq&CAYeSrm~lT?MUBO%D(;_1Ip9C%I;P|giySZ>@u8+s$q}v zpHF>9kALHKXD(;{HCu5|d7E((^vLgRoHx9(BT!@EJ=4-#VK8GTd;RaF5WW^*kb!Kh zT#OOjH^5*vI}zm!V(#{V^ekxgHUijpBiYXVx!p~uPl%7kNbAQes82hBXukpLt8QUf zXlLxt!pIAS6|e0J6)Yue8=4C|mk(nc<-S+T6@=WuFd>0Qz_t9MI2>#---X_b`ao9z zbzfI!)+gFvm%d?>sGcZFACbQ^I;amhm@l$ePgs~x&t^6eXyY^hbW=Lee=U(@E3^>$ zX}l1+luWee=1X)?g82QV4K9Rs7gd6gk&pBr{^|x4Lbv>&0_$Ri2K8H!Kg|0+*j?@i z_WAc!f1o?1|LGCD;W7}~nR>X3hrHu_+aUQB9Bl%&##ysvZwK3QC*AVF^qm;iTfW%r zvj?IE_Li5lFIY>cfk8Rjs3M<#dD8ikO7zn#C*SX#))}_=-1k=l0qs@9q#FeBKEA-1 zlSS?pxw3=3^_5QKA1zT~2GXEyl8TeS*(!ZU_)J|*0MaLKJSXk|0#zj695wd|NWefH zMajv944%e}p18lT5?oQ0=~YoGm;0ECyHvf#t&^v3Ulv<@MKmm10QwiGAYEzpvcFDCxox{_Pov!`=0H*Hf47<{7=rKvG<#}HRYUH zU_rZ+TZl5Y_93^)Js@NXa}WpJx_IY7;_$c^*>qEBSJm{@@gC@I-&6DTR!)^v_)pG=B_8IsFr< zX(kE{jm09OXOAWw4=L0KD2Q_`Aa+^qFHBF6v|-=qCEw>nX0Ua?JOeJ->j4j`erHn0i z)jwTozB~Qj_Yd|XrnH-}%u+xW+=@$4H8CA=-Z|F{*(FUf`PcWaDL^1Nuad|GR!ZuhE<5k%Fym<2{+?JL z^T-GXP___|2i3<2GcgyqnHHF^+)GtuRLyui@HWv(@v~${PKI`v4Z>1uIU0lmfq%^K zP&m1@z^O9^YGeS+@b3bK~t3v{7$+`^{-nX(# zNKe_leMAV3)r#P`h^!bt_F(a`d~bP{_2o_dVblc4moK0t49cIpTMIX$T8-MjH{#JU zk!RkOQ(U`khHREqT-}w|*YP>Z3}k}AA>&a2$MzVk&?`mL37q%ZX_8r9g{ zJFL5@eqY@BS+(~H-La3{aYY%RnJDYZ7P%mv%cx8AsA~F$r`>wct>Xk{Me)+*0>yer zF##?*4a-c5HoSTD>d_2o*rn=4D^Pag zSp6|PsZ*^EYXza=>{hjBro62L*kiJ3bbbM^_Ge0o9zZHv2~W&Z-dyfx3Nk{{jG$)@ z`Mv>h*^TvglNyd2v}>@O$>ieQ_&F@=6Y-Ji`==^Coj!v_)Mu{f3;slHfuic6GfPd? z%|N=c+C0|vV`j;$ZwzN#Oq?uU%p@&7;$RmD)Y0^2FQ`yt&Dv>?FdT+>%9#yn1=FEp zIp0eK{LAhs=^T=8KO@3zOQkF23p!(;d=I?QO$ez!6gKqbi2InreH;~VDG@x8{8ahp z02WxP;fIi}n17CFVd;5@OLiYPt%1LsO+5JJ%7~{-qF_}P#E)#Nyp7u_TWNkUX|Hm- z@$6!A)2JkM=z(;9f1D#dN`qc?q+M1V1AI!Zder;x=0^V!rN5nUlVf}-Qwd_{$rE82 z5z(`XQ19dZqvMh$J&~88?%_~yPL`Xe{_kDT=w^ETP;`HXP+Nk~-{QZ(V!{%pnB#x4 zD}l7-71nP{w1QKCtSS7_#8k2qfE8f-?aT&7WgHLYfIyaIN=imBDO`hyVSw#(joq6% zAGe~o(ZV9mOSt}lKDGY@#C2sxj$`3bqbA-mX5K zg}DfeK}kbuUpu@};0XM~g|))zCB~X+vp$Ubhtb06J5P+aZ?v&-NA!T?QQbUk!GJ&W zt5od)R72}ggU0)hF)1WwA4CTWEL$SrUjf?Do~GsAyJHJ&h?#ZIZ^Whzsr1!a`pW@f zet_83qdRy5sjX3b6|bH|HklUC_I!+J3qz>$7CTIu&65zZ>gnsa-jr=r85dr~NC5xu zdrr0dccc={cZJ2nLge$|%;cT0I=*4C1}nMx=e){kNwQTXIq7?0&74HBhAa2UUNCR#y8vY z$&sy(Kpj*At#2omSTx6~!Cb&L08O_{l6oE-*p|GY*$qpd-eA-TF^~jRiD|)=BePB{ z2ChV;>Ij|(oEy@yw16=Kh=;9_Raz&=n9l?jzF5ZauLOo_qN1ZslpZmh zy^Jl7>BwxC3M~A=bm?nJEA~Ma5i`3`p>rBz9`IZ(MQ!iPsJa44RCaICMWQC=umJJI zBwi}+O_jSMwpvd*o+~>a=WoTxL2Q1>%!_;p1l+xanARUgCkZ?Zl(3Be7nqjB&fdX& zofveg6GCH1LTp%AM47Jkme37B#F0w(&wV*q3K}7w0se>;eID8F&R-AFu0bEx-`|Ig zh02L{i+3d}&HzS}ILbuUq^*qs*ZD?URpc{%bV2v}gsj-av!@(kbiR$z_FAZ(Te^|E z$T-;UBu(ne0aW5$@eM~CAsJ7gj0A#%vpWl9pm7hNzeFB*#^nW{*#yURbE})SJ{%R? z?yr1R-0qF`gG|($(oZfZOWP4SulUs6*pxR`{^H|n!@HPx2i$tLM#w6lfkB7XKX~gLgs9?%0cLoEcmw@R2)?N zlf@cv<)p#c0T#ys+FfA0=ne|GnF0I5v+STt5M%u{-VB~(TfYT3(Z=2K_`xoqe}@@A ztKEt8palHHOa=-QLFgb;#`WA39r^g*g6`YUmY})IOg(VnmK;~W0!T$xqo+ls85__W zSIz-qzZ!66(p!1ilWK$zU55vQLIN28;04W?31XUg|m$^VexJb`-U z*C9eQV*s4ZRx&HP{~N~eES~TcwxD%+Ve&>#j zAi~k81pwmP#*%*=RKh)+> z4=gZS`ZrD>(U@m#l7*dI{YzdYRta*I|D4jB!eW%I2;Q(I+n4p&QOP%T&?^5L=7>8h z7hjzo|78I5GUXbCGm|g=NrDaRoOJz2rk(ECvurf)7L?T`jy0rVK!&5Dt~L>Ppm4Bg63BS0w)PwamMSAma}a8e!{NI zvZOgrx)!_v{2jj9^Tw(m*ZJuDW+)7UCgd@T@>+{1L&ci+%Ywbo33LPQGnA=C${ z)dEYP<&~;I!+pn3m%-QtE_sq;tWln~Ta8ahQrmruWF^(WvbM9S`q3gQt zVA>>8<1^X~dRGG=32k+miJnKuv2s~-n#?IE>@-GNgoASyQ!+o+@m(vW`;{x2Re#UQ zfyu54HwNn@iG|57!ybSD#)Ts(!NbEUp$7+{)8ZFu^aP>XG2R_}D>=Sb@$fm`-N@IJzw!^unvKEpkf&w&9XSB1B&GKV)1W3*@N48{*! zPW`B1G`olaG`Y3VND7`DJ`(mSOwY8Yll=Md0aeEl zWQ;pCyHTq zcky~G87cFyBd=?G(Dkq(r^6>BaG7y<5e_pkiRSHC{==?)BL7}{XXo3Rd6-BB*4dLM zHBDOvKYiD1?H4%*KdOd2ytOOX1)IL06E39Seq|RdtnBh|B>D5=T2%!&T6XY$kaYC| zV0de?Uq0w+*%5usT82e+1;Pyy);^;-GCXcWcQfOmV#-sW8r5#9#){Oq)<$+8Qv4%j zkq{z&U{qChUt3}#=ul;yJ)Hhp-;Wi19dQN?Pi#XajvqgN*b2@mF{R>P9_yE+POZ51za?Bn{U2o@#sagt z$0F~Ik^pS*$cr)JlX`NDAwtSFYivdJbQOP=+@orld_F5B&_Dk9?V)I@Ol2U}Ul2`^ z&cQ;k22fGA7-FkzNr3x5Fu4_ZF-lc;Smm9QPlJER<~PQbeER-%2{`NNje+?d4 zGqcG02dLo>US_w<;3GgN7oRp&c{id9lMVr)+-njeek?gVDeBd{C4UpPf@3UX8}DMa z$cRu*1T#^&-FF=!{ zfaCyj5j@->TY~7tW)2X%*hl?vL!D}f>~fRe!ta8q0dso7zn*{! zI`k3sV;vUt;0Z%^Ur!yrb^Al1fOhL1yK*H?&w2Gt7abHa{`|LmE;yPOul!yBmvr3K z9SYZ!00%Xk;2=y~`yoUMQOc*M4N_61cha1KuYW$n4h-)zIYuxH{fj?1 z6XnS(`Q#{B^@pA745zrmXDTZb2!YWbK=WLcvBFg_9K-suHtMop9HQZ$f1-Yd3bJGF zQIxyTbUnEXwu0f#KW!5E7mdhx|4&;${zW4i-h62Z2fvs^jAB0&`J>js!dMV$#-6VS zC%W;t+P=dnq?f;c2*>gs#nLumU4iPNL*|JZB5Mr@T6jwBhv5ff-g`9g0M>`VnqMrs zuV);)OdCq)hMa;Y?mfR)#~cFcOIF{F5Zn`6U|R@2oo2o0O>pW7sPg+RMplbiWggan zJ2#tR_;l+vfmYrzB5($s=#Yl>xt4}CF*e7%`&-1^QDM!X#JSUYB_uYno&#tD;lJkFP35L9L8?!euO=sgL=*%l=*M zySl}8XzbCTIT+rAG)`xNOG#y&rcqavHa>dQF`TP7WH9e^Q4eOrT;-8YDH<&NECExQ z2nHxq5l?Y3AXLhXA3edm2C6v&##*`rw4{v1=mi5R@8{CB!{#L{h)S5u^L0HdPe zXj*SC7%|L~)EahXii4Mt#4>r>h^$mHX?iQ83vE<(Ca07E*@;eRNZE;wZH_-QmRS&w z_q&D~%OfPjL-fi1q)If^L3Um4jiV`OO&r!-NsBc0rI&o5(Y z22DhWu~6t=(bLw?fYf`8gJo$Zf1;sEptnRH5=*PTVjNAZaQuA|aTV~)un$CE-(zfo z90bw)CCl5x^c0Y+?ohAb%`E8b0niCh{M6Fh9;b*bYMz;rniJ;wuvAREl% z7j?MzUSL1oTCZLrHJ%|&-GY}iqPZ!Xt=q38r_k9N6Uyu=fGn7@f*Aq_*nR|XzDw=QvUWM$K3z4dX5I^ zW(3{3tR)A10ymnxP5uV*5#Zp>3A#ztf!yU*-CN*P;cG~ba@{%Z*OkKcpqk0JtLYoH z10!}d=wGz{3$%E2T7~{MiEINExT5_7TU%F*rJu)bQ8-Kc*E#;5wv43e z4?X%dBNdNCR zeZK#UtNqV_WY7O#ho=YrfwEZs&1cPtrrYBE9!+&l&&Ap3u_Bw}djW%oD^F(B-#q1JSGshS{NAMWIyY_$jI3UUh|_*m#&xR+Sp9zFArt)4|&D!dqriwMHK z@7-U~Kzt#|ute}krlx@=lD~F9@R*BAWv2%SrHwV2@)^4!bRyId9N{$g~O}xL}tyO@=&J01Krmi;@3j_39`!KNYKap+> z4IFJ6>Nn&@Sum`Hxk%eYYxuDhMnU39E*C2^UE4R&Go9Oj(`WW(1*xxLcDfRR1zi=Cq`A zX>sBJYs24uMfoam3HmuLsoeVXJPSdLX~=J)gH6O?!_{{5gc8RjD8g)I4Z-d>sOHQF zpfi>eDR|vb#RUIlqgW!=-lFN+Ek3IyTD zg!5NLlj%O-V_}>zu|)o1j+$9VMYAUFU9;wA#s$+dDGh&uXJUc}*?qZS{43Puk8d-c zllID?ijLc7mb=b^x~^@Zq;**rnoHM%xkj^;XtSY#H~1+6li6vB4((^}4@CX+5o&nk zv3d1gA=4VMB7euKNhoyLf|C8w5h{^eB2q3w4#uASr~QTRDA`BL*ToxQ#Y8?be$eLK zJ-KAY6LY?J9_`05-08&uXuz7tQeFZU0cI+ z2BEW`{)3XRKqM;!t_xoN3#K9Pd>l<)(CJkMla<9`yNMQtZ3M}6n`1-L=+Tu;lE#F-kX811&e{us9tOu_#Lz3X##(1q-0M(*#QB}@Q}`~ZGaKk^G^ z0f`Nd`9ZF2+LKkQv<1B*AAC{N<9?7N;}IM74Wn5N^`awKO20PXT{i6?NNG zL$dWR;U$uJB~9+iRyqj(nLP(+i$WYZBUGWk={=#VlnJ-;M6P288e7uysko=n}JNyV)M~bt2 z*gch;h_~jzb}ZVWWu&1}KJ-T&NJn~wAHIfUEW?o%dH*NzGy6ZnbqyUAFKkZ~RdFguTkZ zt32=H=n*eA^_0Ew!w2u1rq(=Cxf&#{r{CO4_c4F3WgYJmu;_iTwB#6LdNUB}t>6I~-1&@lnD-P%_bljG?L^Snm*$Gc7~Z-b z*R*OZh0-f^TwvsePI9adclpVu!|Ab@&Hu}3Vt*h{4#8p<5NrYmvKeLBVct4`3+})^ zep9`kG{Per5r@eUGIkxNqvDxQxBg>MA+4D{xsH)nRCzMtBxb?zcJ0KhjtEKV%QDXP zU<#k6u2LCUjM>W*&spZmX;*0^MKH5Y+_w7D zfkXI^V&-v6wAOkUeIuTZZ09KM{KA<|Y3BPN&;}Ey+`MOLX#FGxhMK!tIQM09hH$Cp2rQ%rSMNG1aP*PbV zR?Cu-HHJo!I4^^Gd6f-y-K)G5O7*Krm>=7-N6KAPj)OI8IHJnq%CxnoBR?a!FZu4z zEtjhVhW>qFx}|NL1ap`@0jCLN<=>qLx4VXr?@3zd;=1)8OD-%EJp4Ua&_Fn-?!BtI zA}mwxzcO^Wrd75Pkm+`!a_RaqyoLQ5P&GR5BzCTwn2&I+(w$Xa4>?L1!M7E&V1L#t zmgd%Cu7<#yg%28(no(c>8vs9qsff1=!PU4SrLIn#snyuB-o)IS16IXP^c*f(Y<*pA zK>@gf5hF*fAAa4dxDXKhbQUL6#NN<3Q%+q=yHmUgu7ALnI9i=@Xy|J3si3Y#{tJ^| zWQ(|iGE>{UT^y&=W=v`Uo4N}A1(DICqopP(Q-r>)6vh}f)#3)8)~^^jA+~(OSQAxT zUsY#=@iRBQfpFRJsArb9ik=>ySU}Jcee2T#|7WOCO8N<>qgm$-CJPt_Disf+xtI6c0f#J*w_}98o=a68hnj~?_#OK{QvIDHP=O+r<^w7j2A|A9B zsfEe3=ZkHB{@q|#m96^rFI>6U%N&h-3s`GI+=VhzHd~>%f;~R6U@sNL0KqL7-IY!U z+W3tNcsw#it(i`4APSS;F`l4jQu$SH=G`Jz8ZA%-Ighn~@7rdTQV)rSj?5>_T?k@K z_rsK_#7SRYPbatmgB9=XwSqY7@!+P+`Uz>DVe#i#g~7tan(oLdBN+L~r9;d7bMBR5=|+1sWU>i$Fp)rz zLx1(k^$NrHdDa&Xs>~Nz(dcuF}snS8|0g!A1Gm3Uw#iK%qIX9-R?tnOt^K!6gi(9v zJ~k_nR8b(V*MMt%)a;-_H+oKY?zv?N3*yye23rdYzRDLnV2EvHN$2#gIk>?rO!F_d z4sB9jckPGal_vl!R@15NUi0N(0kl{nh5TR0K}|&i^>;JSqava&?lTJLQZb=tiF8Zs zJ3oZIZ>D4jnEC^C(7|!n8vQu5caE(jJP1;=^htaGK zk&PVP1o3?tE@tH(%H)Xm9ZE$4df|Ar^xt{Sl$4BnG<_>mIs1TY z6eXx^m&dxb3gcjtPXceI$DqR4EmHF za0Un4d=U?`0donU+X(5GK^+d;s{H-ewAA>WAZr-P*ax>yP}tjh_W zNJkDsLf;w^0s7lr`XEvAlbt4b4Q0VGUJ&^hfO(1y*Wp%;eSMYis|{St^gJ!WIw!7A zQA<}`)8YZh=_X-0_TROccyzPV0+0;~e6Wvun%HT0QsUwEgZ3_%MTpFD^(Jo>@Nm@! zJ}uUcAq2=cYKEj%bU~Njl6TC>Wr^LYx8lfPp#`hU@Q4kMNp2MYJ#5B&USL!w0I4C2 zq1dXprs}Yf7>V+Jl%Ib+p1NHyS$)FB7T>sq=&}oh@_Sm`V$t7U`TZ;&m4Q!9BFZ$mOcm65c4$R(To`}AtHG#S5g@k6L7O&UyhDm9s2e|q7`V*N=S9A8z5qm5P9 z9XN6bn$osK%Ziw(l`UU^_hV$tgr>Y#{T-ljnPxROpu9Gx?%Jm_ukMzrgACXjQ^ZdB!_^P{$bVLfHpLP8Qe?&ro#?Y?ja*h4e0Al+#=S0Na`EKEIZTU zPy8U1ZVk@%e3oEy)YbOj^p&(Ntpb~A@Tx*lQrBL?HoU2}4ZK2nqFC6nVpC5wr~G`U zicw>2an#Q0C?bpCy7mDF7crCpy`n`UR!-|}zrLioY1iYl)T%PC+wB0py;!ClU4 z^ny_v?BEWacFn#mrdGeDCV36byz2j0Gv{vDESr%zcW=pZfGxXeUdsqnQn>~QL8Gqf zQz6PLo4~Wp@U0Ujqml}@HE;~e8ETQ8+vy+_9qKZ$biv@Z(1EDaP;Lk@9Hsmxsoxn{s_hi2~P6-*lBx9ba|Qf8|0lAeByC3)#s41XD!w zLuC!4DyK#RdvE9;Uv=wdjvYrBjH#>TQVGn#C0^jTYqOJa@eG7VXD+lcJa&#q&0-`L zc%YxxSx>@5Hs#{~#yyj7(ZrCvEL2tO=E*PHa7i^nGZ(=iXr_kC;|k6Lkz{vA%uK(YY$7wMV*Y->v+FVn|H zry+2`5*RCyVJ&=G{`aG(MBYK64>gl_6|lzhSIoE1K1Y#`+aCOhTN7Jpel`B^tLu$l zP_<=Hd!3lBKiNeeK^yTXc4(QIfpNv9w|vb__fLNn(I1wHU6f2-Mu_<7B-{es9UD6H zNHiSloWX&yTt~vG`1#-&IWug_82=?_B6o$}4>?Va$MGT9%|5 zSrFKwfmx0yF3!RQJbYbb%F0@#X*j+XXS7r&Wk2-3sv$&+R1X_z2Y z5~edj0!XDmMk6gGIcCKjgz5T{1Y1I7NJUpBzq=}T&{C(1-^>fnI6+Xxe3sqoFVKR> zSWoGL-z^0L!YN-`wUt8&d&}h+b!^)yWDG(ZV+K-IsgHK0&1?4?|FmY0zBw+&uP)z% z0a54Bk!YgJtTCx9#MXkDCbI?;I1{;|L$x>v`I;KU85qF&jR#m9I{Sxsyxs-}L-BuR zDDNtAK79nkLhxioSw}iDssucX)!F2Vd{>uLx&S`+zv>%Gqo#hQ*&X$EWUw3?w`O2F z1J>(*#?~0Y#V_a&7b5n^9MD6krh{861c($g`dU^`DGy@UMTs3%G< z_&{TTy#v-vp##|$To25<+Y`a(hib~>j?sh81IG0Mq6=~w3aBsGlpyGIlxlw&lEG(o z$vCSAmwJ$4Z_#JeK-ycAu0%F`{m#9B7tCa1bIVufx^((k5oU39NV~jwGUy=6uQK)D z(i2J{ZfkQCc9v-?4;g+lPb%?Qr2sd)7<>NpUHGIdWl-1}=^A_A{r&1%a8sR$PLTWY z?&4DumPc3GK*-dhqa>lKg*o6DUC)@i?t0H_iU0|%Qxky6xNT~&^GGa>&d4tH=ZLVw zW5Qhlt$L$EFfP5;_>r_CC)~{HzVCPRp(_w3zhzuSY(kQ`0r%+@%) zeH-(XC&Lh$$<)M_&_64do8+GMvWA5j_HcHvV)zF|vMfo;>=JnL2gBw^PuR-nY*CEx z`6n{u%xrvjM_rc9Y)zl^9>`yXh60D;NFL?eI=NTf%_ulY{&LWB@)+Qok6d?7 zec2Ksf@^!r5E6MC?)I=lUJu4Y-YVyT!PSeTpP!}1y`DD&aqCR%=|syjE6guOj%Rxf zduC<5`1XY?vwYHRuCIJ`9-CT$DM}k>r!V(y zZUCW`6rT5Po^dans}tna|4N!}3L2%(|8x{@;}xv9WsaTnFKLV($+ZXV-)8dm;4M7J zxu`Fe-PsRAaG4*`_Y)?ydA6*X^S%(s$aPgbHi{$VMj4?cvp>y=vhu}vnaQ&IxwCtE z=SkVjD6%N7=lz>tUCeV}^a$SLb2Yf>3!fVS1JT$kY8iWn(b~^cPOupJ=*PsxqY>je z1LzheF&C=D?mg%3pJOMITJ4vITk72$-UkM8Ks1*Vq(2D5S2?iIzWU-s*(iag*_~+i zJ%jP~ukKgkZ4tQ-s>sjlkygqBLw8g^{Quf7$1}w*7m%!b@RGQgI)baJ2BT`e zXy^ry4s?>7%_g2~2!^^kMS^Q{{n`jEga+owm}sGon54CHzePx^``tX$C`oN0$l&nC z8PbTdBI#GOenW0f7&r@mvIrzuX3+wHjkv1RlPU%iG3aCPcowKwaR|b0m{1Wo%#v9m zuSPOr|ItVAttZRP`jr-4Ye?O7>&<=?93yGI``mfrYX$VJ-*)JKmgwnSA6v}r4?hxX zQ<%ls3lE%^79EJZ1Ry{6UN=C8wJoWSOLH%nvg3Q+{i=bo7koCI6{)83h zIDUPJJ@k9yt2JQJ)dPUn$zNVsS;Cf>>j<;_toXj0T8Az3{rzEHtaz#gf#^z8Z{~aW zBxq;m-CyW2->Qzqzv3w5AN~DzLxhRuhz^h~XsPpK& zvK-^|+|_sjw8Mj2g!RqaiSqkG-N!wQDLdy3AZdO?5eT%i`lGuuPtJ`zB!FUwQ$_`DnuDu7RXtSy^EYlD- za@Ak@6DFh0K3hDEXYw|ZRqTj=B|%Vcua3=U=|yT2_GP~?1<7z|?EJW7$5y$LQ0lo4 zCCg*R7#RSixu1I4=jU#z+zf9fPq*_w(?jcV*-c$*xSaXJ#>zXD2 zf6UTFp%*9ii+hnStB5y4@ZQ1wXw|m^PKW4ukEaKG-GjfXQhW5A3O0@VP4-mSqF<8M z4u?oHSAy*7Q9*WOSPX)q`P|{;KHfB>+ej5Rl3l|bdd|3}Q0zN6aM*4f%|VQwx1Qf> zt$U)1@rL3lSBgIR@nK#igkqSA^=`2Qo6khosO5xU^Z-I0Y`~ARvPFJQ&nWd9Pr(hK zMA?S!js1Bl6?=GRP%TB|3e*tKN7U`>OE&9Ni^HjdjhHf+oOHKOS*S`W(I=_*H3X@e zqfp#TxBKDSSq!wBMy7EZtu?B1VUG%ItOk{+P<5RR zZ3$}~Tiep*Dm80#?EWhGB^4jlKT)Bri|&`fpZpd_+uiQXVjKB>8`sbF!X4k7&8Krb zbNQX8CpSC7Z;b0?dy#ri(-rDBcmT&wx2!!|; z5V;p!zyE}Km>#oc3p;SzI-A*#G!v|8RJ32b1k!rn<5F!0>!>djW_QQRC_D;T&$>&1m8Y_n0uih!Nx4MIuBo>MVXhv8x4P?j7~H$`mXO( z;WNbo6p@ka^qUk*@qOwEpNz z+&ED=Y@?j%g|~GxUVzmm+JSNZ?pxh_?bTp)zFjs!GKf>N<5NK2QY*t-@Rl9I^lX~kzdklJbcr|!u1&pJ=NTgj#PzavLD;U<8% zNzkEJpg^9&&qQ-hjH5`~-@-5ed7h1<;7HYiPAQ%dgTrREJ1=Ugld&-IZm7oC%bN}q^8Q))9D+8m)b5kzDoQ-)6wg)goSrpi2L*dC2~ps)cy`kReFS>PVm5ZB9+A@3)VLB2*d@MwBE&$)Cjt{L{H z^7gRcGOS{=7^a7$1dJj!H9pmjliMR}Gs8dkH}J1fMY}%Oqkly_H!-d8Y~R0l=9PEm z1unO{chX(X8K{1wp9C?)oKtRae)hm+Q~-k5rl{;im&A;$H+v4yD#?yRhGQPd{Ci6s zy+4fh$7r^}8f?c4|3U73Lwb}P(x6<@!GYg8`O%L@QKJtXf_|GaiGyW9OxBgd(|WA@ zC`gV}h*G@{=L)q{0pjxz+I;Vi4AOXuJk}?P4fSm!_3zq!)~AB_$J9b7D(Q8zJ!<=C zN5<0>DuY;4x(#0HiMc}{ed4`Q((w&{quFg~^AhlbH5ZWr&J^q_)ZCv$go+;*W`5*i z$}(|Ajol8hXGHsTac17}!t%6)Qf4jNLTXWTEqf=_Axe;4w2JSy?c%m`Jr>Wpb6L4ng@=yQ}?^`Co`L1^>S9wyt874}!W-zy<@b_?6HlS}eX z_vf5T2;@p_p;4KC(s-IqsOrG(?cX+3!s40jNSQWg<3?w?75yXZugD+e5|;EMrpd^k zb7}ZUxr}x+$M;XLv+#et93cgS>(COvH^Tl+rHxbAXq>sK*;qFlwAN`|G6e|!`SV0v z`g0>{hmv1Gqh3y+>Ce-3Y_@`jars_bp75{G;bz{RHphv`iz(~Ek5<2m-rj(3n3 z>9y>e1&X2h#;QLSXpEyY=!B!zt~hloE-<$aIB}^6Pt=9Ut25*vfPI()i6=hH5d^DZ zuu4#|Q!-=!^$J-pE16&XM}mhC=mgSS*nhPj5v>ag{v+U?X9jp;cD=MJdf#U)vvUzj zx_5gq< zV7#o&7SJDgy+%CiaC})+*#*7lFkyNuWS=8`Tmxxjm0{o02j;m3m6y?# zh*M@sUU3%!-^c9@^yA=~MT{keo&f7m_F{RzBB0yp;7F+-K~YAv6M#5uwzb*x8y7E? zyq`QLL`~(H2I*YDZnB`I$NOm%g22rl%v9CkU*U$|Z#|U%UdKzWeNeS#qM1nTp82aJ z#?6;j&roR9(Qbb#o`3A;kZ3-oPd&m%l`}yqPFh`v6yxjEC!Z^=h}t}D9j{*=A)g&Q z)%c*onZpM;6aN}A7;&=tH_JFUia3cU2@)GJu(}vy`Yv}`|JQq?(Yw0wm4rL1-p>Bi zn;TPzj7PLR#uiGx-El$RvcLP5GWA+(?EIV&R=!a0+mCYz*#^r-qQ+>uv-r!*3Gyqc zZ>$Rw1>4-IH}C_Cps^M&5Aog0{FWZfp4u9B) zGJO|(bI*Gu0dgHLqwe!dUUOVX{_X?XS_F|3x%XkkTUfUW_U^{o;+k^FT=QtV!Jawn ztThq+-G9}nJ=cluj&;tAwtl&iQrRsnK+p#Ue$6ixmIfZ&ErRR)%|35%NRLxg!qlS9#%f&yO z79JG0J(>-?fYUoz@mncC3s+SA)kO?ck@Cz-L-{D_UW<;|)C}BB`HmPXzz+D8!9AYyevyr^3G+<~1xkDO&949vq$_6Vm??-)JBN5I zj%6g!KA>}pOt$YD++7PDZy8_!Z-*+VVXW-{F)TM7YdHOlPAGICw zW)s!VB|rGs=!O*LnNRSYoz-D94qEU=BfuM8a3;W?vOSrW%?)m_-`9r1WHjOHR||TH zMmYk`b73B*632u-e^oHNXav3YoyMdFemQ&xR6>4&wUZ7k!1?inH}cK|2n2lcwO9Ay zoI?5IZO-&N!@uwbbrI&p0wmqPLZgs(sIP;y#RYctA#<_25tl)`FMl7og8KAvxVAF7 za2$edTbx+62GoOT=tCUB_9E(fLZ^t}0s(nm!ehQSGq7!hd0GI};4bvM*DsIX1Y^H4 zWrr*EVm<`^{8yh&T#-xP>)<9q6mcYWyzb(_kIcnL)sFP#09*M+VL& ziwB8h7Ql}%5B%mD<{3|r^?zaKu7K5(p|o2AJYgqbt~?DaE+9)FuT*y+(k6p@VBD|e zmHcl|1KvUIg)9Jz9g~_5VF2?@JyaWF9^19#-DPh^o4c;Ejxa4&IFym1G% zi1-2ML7rijy2p*#0-F)~3dwGeqyl#@;GO5I`1@FFpmI&-=5IBN%`M8)(@(}e62l>@Z>7ejdx!z;tbJOZroV~ zU8OKLt0W6Rcqmt2F9*~oi-Y18>}9|%fM=i?AE@t;-tSDE2EM5Qc%?XkwmUEG^ZwHG zz1a*q1b@Exm_@-u`PxA7!C(7KzyqeQ7kx7cl5M%q0Nf5!kkwEhU>9)A{gr5Wk2oX! z|2-6}hxD1rEYA&)7|7yqziR}oWZ>Yax v27rK$mb^FD;LjZfVtxP-B)fjF7WlpY zEu6qju{W`x{>?Rn`(u5fZyza)`=jct@CmH@1*eA=VhaA|-VRtkC9y+3ADk@&2;AWq zl-6k7FG9L$0K_pPN&(m1A-BZ*%KNjg#}k0Q$O4}bdB(2<(hgfN-bCAhcaSr{72JK= zc~<@F*~~pqO!&h3osrI=uS#dc-wpNpx=BfN$PWb2 zqGRL(%8`KBfa#F(BDT=7ygfw~vodvQY?Z9sQnfY4#nje@z0_x^tbZ*8I-yM}D6(YE zRM|r|>4|(kjF(1B)*Fu8)?$6U8EyAt(6g*F*otDE&a=tMtj(3 z$|U2xfM(WTP8W+Uy{4@YYHjAmH<8^z>)RK3N+)RH(BAR!c=yd_Qn~ck7-Q*8!s|!% zu6fq4HuT_gxA~i({#`H6sY`|S{jdUdr-&Q&&+C`TMOe4cHR}Tet3zqv#g65m{~zD5 zs=@Jp9!-s*`Iq%W z-1y(orX5Cg@g2Egd)%A~RbEub7DbAm58X*>pg3tZ; zk{(S}R6Lk@sW%q^$KW1u{i=d`#;!LH{mw#y@q_o|g2@&RaVePtHgaZeM}`E>OPLo+IfQ;a!Ov6|AZ&p@(G<+zs8?1`jZ#rO|6q!V5*Z@f5_i=U1e$nx0 ziLmp?=UGR6B>{;GQU?=d;wtRFGDI<<|jGX{=$ zrD{589&7yNLN+Xhyc!xUlGHiYedCzb#z`P0{n5x>ht8_Sqa}RaU zfOn5|;6-##cet)-PV=u1fDL(1a)^h2h9vII>#`b{!nJF3poMGGZEp_Iq1-gzWx>9Z z+0`f8%y3|>ZA-gucKdKye?+TB41s7AwWY#CbbArEHAcOLRNuix{E-yAhB+T3TEjyU z3H4^YE#(g@S8_4lZzP|4L9c4*tw;s94iP;{B5%Pj``tr2-V@-k@n*?1yFqe+{7aHB zs1WRJ)t#+OXtl8uM}pDBKQ;RcxbdS9AQ3F%oiuHrVI^#Rl%E7sJn9)6whiDp*4)z5uwYL^K&n zJ51{NBc>F+irm^NY9nnB-&@a#by8!nf(~bbP=S5qm0in>1sAf`-TEY2!n+FV9I+j7 zA*SO^hoGi^hB^#+A-$3CW0gJIH9w_MWNq?WT@16auz>~L;tsAR?1CbpXg^4;r;g8W z!COv7Y@2xOGm+o!-S^UsyI+mpY9Jqpp zWssSOM(6VPuHfs8uVa^OWiQBXVk5fou9Ndi15Cr~Vpf6xL1&veL-%|UC|%p=5sE^v zhefJ~N7siitzuhw4L*#E=vyJHl&<^%XLaB6qPL?{wZmCCu5Gf5WG}B`YXJ)O+&c^Z zPYaOlvNOh8zMtQKH<>H&i!%yRzjG#I4E-jVgIIaf^RD&zY4GxGQWJ)+PVdG!Cl0b< zze|_5!yY1DgJQM2+IWR2#$eoNrcOoZpt<++@C#{M#H9QdjQm+A3H3zl#vibJ%X@YF z0vlFfAot=P%X3m*a!gV`dVc?}O;N_)cy0XDEQRnk-qGt-e0Kk3zwG>lB+$R!ivxIx zECAXya0I?9%80Di>|YZAUV4d)$#eH{bBg!F^Y>nkk>^PN3XOy*Zj-bkKE4D7=WGuh z1b5?jy)WnIZ11pg?ByRmQTZPe&xWTKen%+wJ0=iEUnGH>X9PBGWc*#s={T;*TI=us2F#A?KB;EPiatE+JJN zFm{6ToQ*Bqe4%XV!@~tYuZD=qH*BV0t37bY!oR`tI@qXT0Q~1s){z2d2lv`lEaw?8U>kX}EGp?=l1$$_D-6qT z842f@mr3v4B1slG(L=Z0#ejDEMhV&m(;Pv&Cqs9po#%R-i-KV0r1Soxk;}%EDc)?g zr1WD-W232}+fVBoVFUfvlati%XLX*Z=kJc*7w*cA-D*TA7&U9%3;aId{VZMXFyR`Q z7p>lkyABbC@mt@L2fLxt*N2@#D}3^aCv=Pq+Us}_h<6kLNZvXHT{y;rPc&c_SdNoU;qpM1-=M(k5;QrSTM3 zC=c)o<9}WdY2a+R^tk8^7y+4b9T@>6UuF6VxcY?+I|kob;JZ%lfwi|z^_8Hi0C32_`phBRHgqi5%@AL&8{4MM z|6w2OnAq2bto!5ze1M7C)=?RPfmKYYL!f|z{dt7|4+qcaPqBp}0taA~`6LGHKP{7C znSTQ(<+F#HHd0xi7nQ6LnI||w`RN!d`C9j36{GY6>dCG|WGLnOR$z7h45E5(>*o#g zU!GPjUG3_~mv;fL^>_Mw9nYmncH~5me$=~gJwrUFrVbSlyxv=-B=L!7n}8?H&uyV7 zD=p2u>}mJde!)7eZH4oZ;%^JXhYeBt*>J~6{eB;{1ti&qjb5Rje@rQ_cX}(A*i9;5 zixYLQq{lo7~4$l5Iyn}jl~%{np)h|Ssf|kXByzGywCM!|F9mRA|pl&-BDHlEs7Kd z7$Qijl~v(_nd21gM6!nL9~z*bh|~}O(6Aa?++bL<<_zA&q@2H$CES$ z(PH%pl|wYuX0!Xg#@wwbZv#&Jzf3~zx&{RpRHIyYat{jdsPd1B7=H- zClG^#6O*o^K4JS#meQjzd&?Cd`sNo*mLLfh1pJ^0WPuRl(w8g<7fp!Up=bya#Y$Mg z6wDt~Dj|e>a>7IS6Aefu3Nzl4a>y7|YRHD$9y6j_Z-d_^cRczjCOyg2C}=oVEhT!y z8)9q=;_eeMpn#bw2knx7qbo5)X6XO1tCss6ec}z};b=o3XBdI|(D0~%i>v`|1(>>H z&O?b72er(0hz2e#FdkIa`n3GJIcQJCPds8UfrT)Pbbj7Yj$DoGQ}>8ksxfi-q0l~m z=0{`VPVpcsT1oZ!k~g+vU83@MJk26^gE5LjJsnw70+KgMQ#S(s>s=;MB_R6 zcFTcTftZwJ9 zFLP(zdn7|-MW|OC7ArgZ-}WKs>KX>H^go$G=UOetzZd*F$YT=KU%#q0II%UD?v765 z;^l<*l~SVAzPS(J+!RSU!3MZ(`-7akzlr9HO@?F@4+D`&NNfLN}ZIz1B~zHF{DihacYtj zP8z=o8sab(fRX8piTClwI1Td8#tK_T@mON2hk#9I4bCm7Zz&mUt!sDZ#1?cq`m>{3 zRomBA+XwJh$Hfi>n6oZBV?F1^g60-ka^7Wsz(+iJbYnrui&hj?cJy>x83}EOU+OJv zstl4)u_{&7>yJGl6qI7)1qqo(Rn_1BSg@D|xz=v?wiYse@)KhukerM>of*xL!Q z3H)P&*Kj}L4Fk|AWwheTs=4MyqGW@( zm2>TnBFcn|8s=do0Ky7-zrmZ`aQpTvnbVAQe30SP-F7eVLsar&#h#6nNN-4EP^|Eu zUJS?%QnL<8n_m2d&rXkw!-G4 z9O_PDH*AV{^_x$-9T8gNXw!?k9-M}H6B)HF+pF4UT_jp&FFPW6GPlVg@(%*<2wwD< z)Z|mr#?!$zSg=wIf@r*nmCR*pn@fjn20A(-%Yc$~+c~A|n4O}bLeG9!yF+ z@S$>X9$vqDlm$z}=412!`jGPw4k?mfr42B$^P!Ag5mex=@5`zO2f9zaSa}-9biL^0 zzz8F02#Iy{@grL*@CmUd_8$OK;AvVi9dM4y8HPeqAr9quMd))NN>_fh)R+8Rvnz6X zMhoqj{&Dn5?%-!vXkvaH>=0MO#$;gX^0Rbn|9}-o)MTUCH#}${K>J zc?Wvtp?vr>6E8(GmzBVmbkd12z&Q#U87n9LW{=)pwpIzu0Y@CYPiv&A46%g{tMPXl zSSuu3+wc!C%xhiq@S)b+T#XI3$7vEkucxp9-~7(*{ivw&l~|*4obg~KTjQE{*i5+d zT2=t-KkEoProJ5Bgwk_6S&ezy<=pV_F9R@j`t|j-1+JHgN&_?JySw z$$Ki4p&oc8?j&8@hu2IlBS~`1SqZtU2qhc^K5yg}lpl=UIt8v|>r~*bb=UX9-<7k# zeLeClu<;<}7~Wxjtkfvb60w|U1j=uWmLOm~{v?zBltCyewa6DCdYZ$i=OQMo$ zUS4PfC=4?{4WAF)7PNF(?Lu2j$N>S|)z8px4#4*TV-|N19J&L+SP6dDcKC7Y6kHcO zkQU}UWUhovm+ZO)6f+yKvy*<{JX3Pn8+0V3;yhmpQl=*6n^A0!0~w$1vRr=q%K)ui z#7R7xl~1?fZ<^eonivj>d$U0nu_se`VFOm96u^r>vJr*=(@zqZ+nwH4Kpls&SHh^E)6XnaFc)qo}>?)y9Sx@aGTSkN8@6CLQ#v5h$ zt+fLO^}*V^a;vQhgRQOz8_V=II^_+vxdZ=4SpCP=w$ZWpVi2^}F4$}cO#L^6+MX}k z>Xh4U2)O=d_22COn`Hebs{PV6-4IB&{XYj;U%tm%UB6`ASevb`+W(*Xr8?Xy|0B~@ zhj`Rxr$y@1bZoaW>)%t%!=9jxKukc)7F(uhr@3+#|%Qw!G6BD#!mgV4sT zwV}B47ZOJTR9MqS+L;x=C;$ z3k%cqXdkWk%x_VL7uE!MQFu2ahGD~4d1)7w^&jo;f zpkDgH?7K~eGkLYqiIH7C z>nhv*{j!vYRoa4v*ag#^ZZ9}{>Nr&&SL&z z#Ar>K=PlVB{Wln^H=lm#<}ca2{b%*x?Ejlg{wG@g(#=}38UN3LTyxeGSM}PLOdmnG zdadR^?iV@5QB7U+HO86bExC9_YE6~R{N`DxF_#spJ{79?n%~!$bN)BTe!2Vd3Ptc` zY^C1J3N_NQ*5k_Av|r$=rE}L=!|bWIEOu%yYPTHLK$<$aQv_4)5u)U_or95Snx9mf z0LF^lZk2@zaIvM!R*}wEcxfFpzC`GK&FRx$m_vs^9O|0}tjZZSyKwO2eYj9Ft(MMt zykMr+k6X~St$~<5tA}=ZiJ}9HSq*3lZ{HfJ8{`L5`##E9UC8XpbxREq62 zaZRbTP|Eq%jr>+$YAr!Fzk`Mpnjz5p1=cHF9}4s69&m>dGZI9cP>@9-labU3@mn5! znOBWTHC<`zLbp0Cj2FT<%#}P`x|VnU>ZLj$9bfcMBR8UAk*=KnB!9B{w$Afzl1hek z@?}IWb{vOQWRP}>d>0W!6K2XctIK_ck{Z-Pt1#`eP_cuen!0~Qb>In2T?ozDv1DeR z*yi})Y_u$vf1|4OuhLV7COE}{&o(O1{Yi`b!07M%5b`ol0c((Xu>HxOvNs3&Ns|3` ziEcqs@7_XY&i{|Ae~gZ-?V?8EBpuuCj&0kvZKGp59ox25u{ySGr(>gI>#Kh5cYNo( z=STKh*PLt4wW=~|XQZy$wL>M_$V7@eF?d79o(JL=X^>gq#}H;nr`{2qQG}pkLx=kb^LVm0+jKSDig8?QiO_2uKG6aP3tg)cs(*+1poG=VJ(xq<&NO}qOmZ)||=L#>9lftujW zg(ss?SAh^6QM54cJ>j}|h407v)zwQ}%Q$yaAd@A`1A=L85_Xo`9qQQ-dlNr`i3(e^ zoEml(fRSCz$Oh2Asv1&XfjeAk4TOePRnh*-)>c)gfEoM$YTD~7&W1|?c>mM?W4U0Yo|B?At@ z@jqE9JNv_r#TdCI8ykQ*&>85GSYM$XBZp>*{VzS0)HhAK-J`r8bYQnj>G{jwgpAUN zMvE2z!5vQGi6BSakG+zAe`Vw)txcN9o%Hk|?k!0>jkQ2}J}v@gyIw|(`9gQ8Vukb< zEiH14q1hI+TI}&9U-El5o1XzRlHz#Ch~iw(7-+>vZ~U@}4JX+t^P(VuC-SV?O=?Vo zex@wiiX!TADy@;)Nzk;R1{Qg@T7Q&~4V76<%!F>1)X_Q{wNm0ia|UTGUCKc-nT&oI z`NE6uhFDyoqvT`J<(}QWv&p>M*!ScF`rIyjUlGvmj3U0U@F`*&lF+gK^(H+}XgXyC zfe%QtW@y(ev2u!N`DRo+MZ2Hcphw6mJq=)|j!uszVdb_DFumqEAlcm^4{&{Uw*htb z0Eo7Q+4=T(#PbGN@2;OjCyiDfKh*v2Mz(ge6(D6@CBKM4zNa-a`93`rpp0I~(X;CRv9fJSHW5fttXkZGY-JvCF6dF=MG21^qLXS%*mb??L?Z83 zUA4HS)k;7rxK8ZPKnMlZYqx3;_J$?-rXMG62Y0Y zvSmLQOi8|tZsOw&I{Kho#e=eee*t$tr=y9yAyGeM_1;W7I-T9rbM0zv!Z)ADESq4m zkSOQ)79!dZT(OmGYaEB(Z71S3BtHGaWz_@yM;dak1?;nOs&-hKkTscZ|}0P zNL73K+nLhjQv+9_M;4L@-U+HMz6?p2ny0L&Ii2)gB1+c6k~~yP)Z{sBK`ORCPQj&t zpFc5#I%tkZBS((MbnM?#VUe}w!m%no^ZmXp*;gCiR-(foH2zT_&ub~Z5On`do*(yQ zHqF~^!QpjmKn5b?UIcxCUOoJ@gkUP*V8DmJ-Fu9J|Ab_X^pp?UeSgFixnFDkdyGr| zmuhzAbpzS;eyY_RHTfD@He6Ibx+XL^7b&eU3cc_1p09WxE6iIGLeO~n`JmuHLU&H6 z*7ctJ5stD2tN>FINMxO6YsF+SvlR>^2+nJ2EKF$WJdYhUlCH|(dEZ&GioV!R7Wp68 z?p?7D*;}cWq!xy{)Zbq`6_A$mR;#XV2y6W{M0qj2Mb}1(tUjRaKC;#eDS|x(aQmk% zds~(qqJ{3BP2GfGJrpFC)aH4=3-JKUTuvYY6)RIi%)~?hS47?7}O_~6F z61t>m<06qGRV=t2dXVWNRSys}#+%mrlL^s_yEfH0I8YhXYJgvgqGM$NH zo{~4vl3@4OoTU7`5s~e!5IvqB&qsC#SvNxDe?+=CckgEDc|PH|7LVIA~|s=6X2#h_>R7MAQ*a*?^+m?etcefLgIDr!`J?fslqDe ziK-_fv9Y%JP^hcI{1B)U$$sfg?8mHHn6kg46~px2d4}z%-+b{P`tZs!mC_0>{Sq57 ztU>!S2;+>&zdDvom0LCm5};yNa<+0XZD4@3&5Y!5@-T+Lnw zB$@3r4V@n^o}$Qs#z(mG=vVfmjum9E!c6G696^LY(vAhJxLhVow=+?Li%_OvXJel; zSKVqcvPUC~%w$7L~e1dElBhUloXH$Ug zb@@G2hu9)7(bBj>l^!S?9|EfUO>a2EAF51K^3)ThfU6Mf3Z24v8!F_Iwr0WPBS+b2 zN~w|;meix>Cv7|K8Kv;>(`3Hb2e%)|ZHBhIY46lbnW2Z_D6XT(STi5g zR&|&2Mft&$Mik+0*E{@kMyG%AFHo)(yr787cHdaOM$w&?bB7Ku7UhViFt|$h;uqgy z!(YS^39j;jh;Etu?~Lk@i|6Wz9Ga@u`s-y8 zf%{EDS#$_;Egk>VYk*F%$!n?hlhT8uET5ul?mjC0?UolOg~4f*gI?jM^qp88R`fNL z@H7`&JEWjd_DP+4W987ePth|cM>8J9U7?g|w-4i6wyJ`N?J;ZcGZKK{!e!rF>iAf) zbO+oUcb*S{;%&hp(8BpyEba8Jr0vxlSzl>baHDtL-BEie^rDylv=>rs8|SjIJ+Ldn&vjc+(RVU6^cs>XUd5BGKUC`I>Z zst+1^chAjLcDp2P^qO7DmibqIMby`Q8%Ne7^ra5Mdcre^hLe0lXnuw}X*YECkz^GS zXEYmln5KwB`2Q8Ke?lXgAoLk&i8zohBjXR_1`c$F?l9I8aZUo6`p})(6=eKZ+&~e7 z|CHVTA^+-tUg`gl1MNUbH4$eba2Wx#w*ne!|Bt;_z6P#c5&9DTPjxC=uxPR;g3t(4 zEz!w6DzJy|f5pZ6BD3C#z%KthkANaipr|Qyr>=%5T@X0ozg$#G77j}Jm4TEua{rr3 z9nWIVI6+|&@J^F=4@~~B3rn5H0p1IJzo>n3<$t%`-4};H z4dP?GWH84c2`qft8~Dzmh6gMk{r2|wUiP}Lc)m8=Q{|l2k`wTBozDzCtfE22jmF zY*-Tc&kb$1Xb(6Ba4-2E{R!MkRt3iHDchDnYn=^GlGuk8ZuWSab&fs69fx%Y%S4IOG_RswjxS#y5 z+m?7Q%0KrW$zDf{tBb@IG{!}sDKc=b?R{5C;PcxZvSNM>gsMBOEB*otXDTyqrkN?7wVKMd6>GhQZwyAaZLwcMn77GIs%Jo_!vGe8 zz|Yd6)*ewu-H8rOD3O^@W-D#dq)9=qe|?+x{*{@)iA5toZnP&W=ckSvay8HTRQs^k zUh$qS$~^c)~Um z71U}$C-Fu7adJ0bn&hOe^ISQz4)Ybc3kLX8&kC6`3|LDu8E}&}EPGj&T;|d@<&7Eu z2CU=^L>U$;Xjn00GHuwZQ^07UBHUr!Z7HiSPAsZY4Fo1&I7H-hS;=ej^J)JneGp6B zDpI3{51e6G4E_;$5<(&E;k?_^WSyslOluNGL)P))h4lff;{pQlC>2Z^W#7qFKma?DH#4O0d8XNT_?iK&~AP9A+wF6;l zA#c@x5x9Fxt;b4kATw)}0#xXGN58!yf-WVZ{z!<@e{XI!wh_2j+>9_d;+%aK-C=o2%LKSInh8dIkVy z)xF?du(J;bKEGix>M!}7@RL_c`h*}cC!Wiwi!DZC{BRf7d`C94p_Wc(zZ)f?OZ0pu zRC~Z`S3u188yiwENN+)ZxNY@c%QOM(NQqz8?wW=lQu)siGvrme#3}<1Sdu)Z;j-nTy`jj z`I3!A7uKhz3DorhkCN^ZAgLPOV+dEqv{3fV9vA-z*1CxyK6Cj&Cb8>Y-&tx=+$0My z9IA~xVdK>X{BjsfSn)zt1))v>?xvLq>!U$hV3Oz1{zcjbP?!ysMdoKcIJIt}mYUpX z5uf=*YTL}Lc^wYNq%p>61aGH@4E%V**pP>gWm;V&!EAa-v?oX%-VX=;>D0-Yj>x$z zL?kD8lTaQM63I#Ujosl?%cUh$f4ZJ?c{pQL`D(5q>V(!mgs~l}==nM*yg<+%WCg#> z>EZ>fBe*sMph#r_8e2N0mG@Y(%I`QZL}6D&zK#1OxxSNCpYnj3`}}s*q-TrUjaBFe zF*7HZV)=1!UT#ssuJ&_|9N!e+rKD;dB&P=7!u8~!g5f;dq*{6=QhsDvA*)8ZvmDB- z7B~N}YLzL+0~gn*CAXx-sY52a#8VLtqk>^1CzB3vSH?jF-q1bSxnEUmwTMhsEm)@6 zR0U%~rvRsvI*^5RK($&#MU6#P4P0RXUIn9%E7J%-%&G7XIQ|)05os8c%BaRv#x0i) z(EKe9JVJZ00W0cc(MqYoX#Su+BvK6q4VbQ;|W-+)TvKR56K)3Q=fnFw~ z8cM6!KUoKx9iZ^*M@$yrWcz>OkAEEY>^}w3KL!5szZB(v>B_$p3TJ;zbqe1GkSkYe zeMG2|a%MOo%dS?z{(BO=lv-^H--KDM0>EomS0U}H5XqVWaCcH+lgTdYLUyHf%yq+l zeYk5nmM%?WX}rH{Qo@hNMU0`{=cNnHnJk}TCdd)vN-fc;KGO$tt!!RyMa8R9e>bc% z{;hqPcxWqMr_EG9V2YU<;8h6Ic&)&y>)LoNw&bG5mLBpv6=5SPfVSk#kP!l2JG*O> z8q?e<80IT-RZ?8`8_S?C%{lR6h?_cPNq>-0i)AgUu{?(Ekr=WuDB@ z8EWdvy3=tlhU6@lle#p2MSAt?iz0jU)?vj=j_MEo*eW@FBo^*q`=c*v8CSXy1&v_Y z-W5J;B-et4!kt^O5oKn|V1D*!jI$P%(cYyg{%Blk$B>%Pm2S2AKMMChD)c|f=>JQ# zU`3=TiK3iK)23aBq04!ad!yj6&Hx{U)d@Q6zpP89{g&18E}JaLA^VEwKdb61>ev zSp|~Qwe1<`BqZvl?g+Xr@d@PLTOL_>UDfW??SP!SNf4#(7ZT)s`Gvj8wjHw}lX56j_>( zbmmXqyC=0KiW|qX2F5}(yErPvLVh=l>!`f5b^s$c=j}vs2tAI;D|aIbdW*9cp*sUys+oWMT*S z&7vkCEzNKZfMSGnH=$az?SsSu;KT<$HK7d8w)Ior!@cjIhsEDsC~`^=C%v?o!gG0; zTq)Qu86?0YpJ<^N*|{U@nV!Pu^|Fy}JQAuGsdM--ujTkWY+II3$oPOmbNYT5wdQKPdxiLw1mw>J6a5x zr~2|ZYTl2FF&53rT|+Qm=iHR$X$(h$2^P(B8S?wQ^a_oJ#B;>V=W}_qJvdMG&vk!B zHvctAl?ib(7Cr+@ouaj1LHkXtBRQT+drz01z?0uL=+-PriYtzbkuWd8)T_3M(;dKf z9#85VXy;m~K%AFtwZKLz!+K`hSfdv)yO6nhZE`aMKjdL(@wQTG}JTKO-t>b!XP zLsWPK#(Oz(9yWBDb4?a$jE6LKY0@r05q@f>-&w6NE~A~k5B^Ml7n<3}2}<)ie3(ah z-0oPcB(HhM46f|nix>Iv`XGWhF-ao$04EXgFYG-uicbkk~t@Y>3k*P%7*dii| z(MF~E`ZfdJi1_(huD_TUH@EA#rSqheIWSgs$P5tIYxlxxm!^ic2VaJSG9?Z6RDZXJ z5KH6h>Z#Nc*0H);S*po?@TQbc&V?FC?h^EMBnFO$m2=Rj^$3Ny&Qg=tl(0Nx4Oz81 z?)ExG73ymEz-yd+uWl_slS9AJLC@W_)Y^awD(r&l`RZRhkNToEqDv6e$zLIW4E=S~ z84&nKu{}T6PvhoJ)BQxk#%;(uv0JGHGtH#Z+IMxIil%5wva1X+vd%tFNb2oI^+e1A z6&)wG!dM?R*+U6*3-C94wXb+Fq+PgXvYZKwu!jR%(g;mQxl|^PMiRubJ6c;SbPt$tb8u5 zg3MC{?hb$`s5FvJH!N$AOo7NJWNqlL6xD6!Ym0snkkxaM8{o%Q4Uo)l@t5mW4SUfH z;|m-{5dU7vea}5P!c7|hhB#8&bR)cCnD!^ah>_Sskq+`OHq8992zZf=kQp7mcesRA z>_Pe73-KAE4}r&SK|wpoP_@xHhcKu{B)WmjA_z3b!(xc=Cge9>{9hVzWi1A$dvd45 zRqGt&iqHmSX7fX%{vG6jOTqZqn5JFNxN~XOUI3+&?=iHR@7^d8owU~+QTZ|9JrEi{ zBy3r)x0`pc{w~v0Ae=2=sjO_9;3_?{E6o{mpH!1*77b1K4GiG!Z4x^$*LU!FJ>9*j z7Q=iKwMgs5S?KE_*nOswlUpURnqj^f7@nsf#CMm{jjp5S9iGS?{UGQlG^fUVMO!h` zZaC4;jPr>ZzflOaC5xyu#Q4B|l;|uixiOU`HIZqh zhgv`8k;}V-CBIh8E}xWG>whT68{BZ*8z`ova*$WEbX8LE(`q3t>$sBP;A%w13yi=0 zXFvtR(Y_Qb{D~$8EXxB~pjj}eR|X-Ta00R+0r{$Y{U@~kkNnTrK-OaHi+v|i-;n-! z$~0Hv3pLn@Uv-q_?zJe%A;_k8-hsN3?6_BEXXoI@VEDnS9MI!snx#L8%8~OG)AC>+ z$U|C*iv8sXEM5EwJv?x`$q`^;m1ClqxM%UeLoTt0(!xQM!M-Gg&^!{UOFtw23eg>A z^e#><3LGo+EwLR5ioVjrvp4kbl5k%v+Gnsew|Vgr@Q7`L)D1`HZ#XdOU(xA4ETP;k zHNqkmfVIqS&!Js>t8Qrf<(}3JW7H`QpfASe`cN~i5QEq*@niYTwZ8mRbB5Hs&rCgREnc&=I2>>1&v;;BE+yC>I1dj)oG`} zmx$tpTsCDt$cVh>aRUo}Q9V1t((fY725tvM2c#cwm$F&Efj28t*+&$_=aLqWWusz@ zg}-8mrQF;vmxD%9A6KmJRTioj_LQE$<~ljttDx(pxVhEYd!;}h66CAql}1j@dVgav zJ7YoTlmU05ha~?(fS8f0yoCAH7rJ*u7&58A(qMXKPgUE_sz?E)$Ke~khYPO9{Y>@y zBjc6URjP=q=64TP4`da;gwmF%W4}1yn94eXN?PF_Y^X~1=iiZexQ%BqYI}vfts1t^ zvu=4=_yh(eQ%Z!jDthb!7UXlGM6B!xiOl-~HjldUFgORrQ)6nfe$e*YLsCmZDLA{i zYgpSKUFCYBO`xE1%G(TT(+Vfv%VEA;j8$e#;#T#{MgF;$g zTLJ~FBAm!ZYzt|ALX+SGR7?xgF6|V{%FztQ+{tFGt39W(3^hAgyAxq~<$STS*A1Q#tjd8)MzPq#h5isx^U+H?Hs$n)%C2>tPAv_LrILLtKSnDF z6gD#%($$zqQ4vPenC7QJN6@Oq(fL9-xGuWt*0&AyjrD^e+Yz570~ZT!{YtUpF)PFi z>OIu<0)d8Q0#L}n0DN$!c@FF?2uHu*)_;@O^(QeHVIz5& z-qc=~ga`H*x#l&~M@p{v!YH7?hvi+RGPB$8{=Lh~40wub|JkcV{1?wdI!-d^G5!nE49Yq{9_cjBv!=+2*w4l{E3 zggd$L)zTpqBmLK%c#KyaBhBYijM23yci-r&OAx&6-J)y@TO)EQ61tL6#%P zdj$xdGN9{!{&}I)`469G&^JlX5mF_Tdz*Zy`6Ls>OieWmGL@>kK|o zpx^bCA}fX~P2`HOm(Yu~b=TZ6$lEc(vOAzZg93kt9Pt%Dw;gtpD|NE%bCRk~iU_L_ zCX#UpNong^MBDUO;(Lg_Rm1oo~Hz)St`+8|9=eq}Yq`Q%5Clc^mf>g&EeeV_j zfa_+>;gp?L(jr5@hTt^2Y-Bt3ePm?E&ZY;=Eb#jiT)%hSrodWyQR99tx|zVE53C#h z)66m2g(W;a+i;7`lI(gI%UrV4 z9Bh)&r+$6f7$ zdV;^Qv1v6Xch@N*zxNla>z*$bDf}&-qB{BAl=2K(KR2$j6j|};j>i&q%MWhMcwQ38 z?;3LCs^-Qt9{m?_b5^s|=o6q_M=w?PWrnD`-QqWG=3No*K7(GJ(ZQ=@r<<#dzxraM zLgtMnD6?1n9d;tv!l{uqi}4=&Bf-TmHqK^LXi>i30DqKd zO+TGn&B4=n<)OftZuciVJ^lxaW?hPMfCOdokwX z3ue-0!x&;20FNH~W{9|GV#C!~`fX|lo!VKdZ7>UZpg!rSqeoq2=)1tcsAgzvR^5XW z%xhyJuFW16eOmg(mexL`tx_CF%mQU@#HI#U+ZZ5ZGug#zj1it8%LuT&m>^h&VVqjR zP}ZJOS(SKQRsaPl-yW>W1aJzSYYSI|7&7d{Uhs@Swt_VOW{o>P6wLi6qZD|7qzaeT zu=y17%hVB@=|vN3f*fM>?*$b##ikYf+;iaNr=2lJnTEqh8Pag7Gm^h7(2bC$Ms&IX zBfSb!;AiRDERf_CjgKGr<4s%Igg;gdhYy6{COvq|=XPLVjjN~v2AHOUb=S1aStoak zM%W07*za~!9(HY4B+`T87^k=?vtRQi8xbS#lURL1t&M_Zf67<@zoC$)kDQ)G;y9g? zJ58cDyoJ4uY~>w%1B=vM%}96=e!p-yXLDPug4^zSM<3S+p@H4cX+URVzO<#p+E%7R zt(S8WOkAcWGASy8wd-qM;iUzF#{#Y+gU*F~R;)OwMLp9MQL<$k6lb|~UzkyaZK;3p zcy?bznlnv}^pI4Oq(wIzO2p^zG?3CC5~eUPn2>rgWQ0-AqgA25S_}}v7pBwZD(dux zv0t{dt+jRc0k`e(UxMF42#!53$axRx#z@b#?Su?{-^KETe-Ql!4-o!R! zlNU}~zf=ikl2JfGdJyA43(}^*vlkI<69Fs|3A{xMkCOT4w*ki-V^L#PP2BEPYEcPe zow$bEqm#ks>vXYW?4%R?i8WVUVk~_C>e8ab{?veTe|`bG5`lFIYwoWzQeQ(k_EV_E zNR{Vz{o#qb6kHBSdAZ52Ll`PPIxD{#MmTpF9aVB|1m{}jfcO=cnuy6Ar=8?r{B$dN z{1fys5x3=?3>Pk@}zXR>vQ|Vu8!&V?tyAu#{O}LA&QLO654DPO3Q!oY!4ygmg?|La%F}y zTa9!BrKC~e8TpCkC^R#y3#a)?Lc#l*k`g^lou~u2$kuSF@o1~doJwiFumKuQxzd4$ zpJuVLuni6nr37(8*4`u>mjhB)A=vl8hJT) zsLn>+TUZdKh;*_pCyYf={N2BKZR%8+8s!}WCB(@YNTT2sH-)GHn|zEuCWn|q^1qQ^>p<0Jq}9rejo7UnsE zLX-pvm0M*g#2dHp&2(>*Lz8ne(l3QbLK!tfzF5#%9M}|h!=*sqddWI_>pBj6>Z^dW z#^%26Zfp;X;pc*Hf1wz*1W-=)2>)QqEgdi z&lm&g{JApSBz5qo{d3FNK*Oolpk}jWm;KO)U82o@fLZc^PN&T&q~RMQVl9ov{EX`I z5OpoeSgqrr=$XdKpAOYAN`c${ERD^tbY|w?x-V;xbQ&2C%f4kZ)q>I6SDjUD7uj-x z*9va7IK{1AzFZ(97b`(u>kskyyX?R0T{s{^n8fDr}yvQ!uY%`rg-8L|iT3kpl zyxTrDB7d$a4OJYbUMj0^{r0&7HTyV}p6<(;K$6Y*ebgH;(iHhEO-`q#YWYY|a7NxX zut9gje;I)$i}ee(8X%<}K-1{(Esk&M^Z4cdz~(US;c0h;p3_7tU6`FI#K!pBT0dbR z68m2)A4YL)bzlGe$Vj}uQS=7&_Ct{+cd2>bN50ymJ7uJ{3sSNl*qcYu;B^k>ROxQ5 zmhp8S557%pLMB!q^ll%=&8@H$G()!Z=T!*1zf-iQ4++m%@=o&1#e+1cfsLBO7^31b zUkP1-&IM^mC2CNu7o=1xb~o<+UgB}DR%}S6I)5DT@3y*KNj~Y4-W4)SC#6yBV<{hR z{7Rv2MD(#Is-y3Pn|MTy$oeFy9-gsy02kgBBz>JD`E`)<{92MoA$9j7?Pv@&c~vAS z{*@p-Sdcht%lbe~b3g18Q|yz&W0%BKurAO0cvj<2DdgM9M2PwBuc>1HDmBkcsc{@V z=?CWcid>BKt7e)M5?P+Re5aLAu5ptpxJ~+M<1+TcSh=zpJ-!}2ovp4)=Pj$L^;*be zEvD+H^~yZuWvjQDxh;WvolDxoFubOT9@;ca$mHoDX**f1%0HFxbt}nv(%Q1lG%qVO zzUvtssWdZs09UH*Bt$2E7TCkxsLXY%;H%^Rqfr{j?+rZxt@ST zHVG|`GWi?Jw`1z4ru5t45_>*}deoJCn=4D5l%8L9R8~vw4B3^sO$JmwpV`k^mYbl%(@?iuoe(zdd`n>s7Yd5j!Tqzepo>!YE ziDu=088bnzUT0W;y>v(?hWt@rr%ucg>|xZeNbLTItF2PxU7^W&^LP0ymE)74QK!mC zqp3eXp04HFm$+&DEjTvkR9nl3?EiM(#uq7*OGRbXTXT4BuefaBKZfML>MNL4satmu z)&PgQ_q51r|0R(*>=o0}Y|CGB4=qY83RZ{ko4W$LfF}_360j{_`W`EFJXVIe^^{XP zn8GriLSWyjkwG4pG~H2aWmn7WAKMT{R~b#S#yjkL-F=mfrZMe%P8H8QVQ4t5Xt(X4 zNaZ1u(I|V`b~)VehJMwzP2*X=Ez;_CBuB%2jH2WA;eY81=YqeKVEI$LVI(o$>;=vd z6$1Z)G#{Fz*9Km)!G?A}P8^l-Q_!0EBfuv7cf zp4a_{#oE)$;u?+d;==o}9-*%}Lyd0sIjx%0f2=ddcXq}I|C>_XYxS%}phV7Wf~dpC z#Zf#S=XZ3SA3pP*tj{}a?vMs9!p(6x+i07x1(0HqrVwR8T5_+*0<=b!48|4Uh)$gtRQ2CmA#vW(1czdnv2nJV zIT&75p+fr*-b6@5d}Ztr5E-D=ML!?bcaUmN|1_N4O$05$1y<&)VQ&mm2Kl( zw4&kubteK}_9Nr`oZc}cDScJ4mTKiYSSzw7|hJmH#A6L`_oCEHqOm{zgM zHmJFc@p|4MWBdyjOQq%fieT_;cRk^%5@^C)fJa{2R`QSoRg=+k8x_Xv`~%u;5n={z z2{LI1-9fnAZf=yWx&Z3978;=kbfH5({iqA#c&!gByZuYsWh-quE`*#S@JU|<>z%Br zZ0A*Rs*p`aWEY`t1H={F(jDaTO$7_(it{&9DN=u-<9v_c~gp{7cpM;QO-_y>L33iATi$IEZUd|($K7Y_e`)^~F z4t|i5?EzPr1!725(5Ye81>OcbhvAdu%~)iCe2jV7+F0e_E3W8F^ADF~47(`uS)C)v zve%Ha+fS>0=Oz&-ZFe1m(D1f)f*pwp*~r)s+@G@xud#75Ki6%uHEh?v;o|Kuv68RW*|L1 z8F?EXZ7eSqrYH9c^2>D6Ur|uw!NqZU7nMUd}F4h+5S^@r}oyxpDgPZD#*#_ zbWkR|FxHoquxuLeuQj}QDqRUP^~Z}V_6?_D&(Oo*c{{1x)ZOcWGwL%aK1_)V5_GRE zT(mzD?C{EX^oIAR0*(Mw91vNR)-A^Px?wl1W~wSnRZ~S-09=j`ZGgBmm_L23b+GhI zp!AA}?&Po5@({wT`FCFM4LG%eA&h_}Pf2=V9aks5$6JCD0jiTIiP?Sg#r@LxBLI$$ zE8kHzBcSVjtkhRdfsMe@ulpsWw2Ve#Cet8cgCASKTPXAsZU`AlD*6|spTXCS(a@J) zT#Guir>6Xu)vk>f>5e@=r^;7#9sUd9T3(6KOa(Ojf%Tn7_VD4U0F3yhAItcLDlGd{ zHODKQ!R~^P)#MlB3O=B^VJjiK- zugD({8khY{0WbY}h!Z5hDc!!KJ5KOrV0o75zSuy1wuU?o3+z5Ty};D=B=iLCKeQYQ zebIHdLRbt>6nrWOe>@4XdtBS&gy0uk^WEv%Y3+(A=TqGUk*DhSgE!1= z?c=Rusz>)EYHK{b7u|^`VS^ZnJoRvMeTh6st=)qLsWmlN!I$8<$jD|eRfx|M^GoDX={?#;U>~l~I%mk_v$YPZ zg%0Vxa-af6erm+vKhVoDz+aoAG@GK3TjfvcjdOy^sIDB*_QoS6}#_`WWM z)sy7HUHJrCzS(of!Zjv-$1R|cSQvgNs)Qoat`EzFmd(VKbD(ldI**JjK8yyK~+^U#mkJN{2d7Dms8zItU%mljM2ljv0YMq}0HHdf_I2TU9%T`kuJ6 zExv=-5Yb%_0Zt7z5tNA2$0i*1TMD07uMoNlt$Z4ebCtdV`kf##vX_SxBfwn-@W$0D zq5P2?6h<1^YcLiF-c3~j?W3cNLV0P!`a@gkO_VC335~NknUazI)Vh?E)B#2SDqCmL zUK{&;fc?`5?yD}uU%~Ga1@9|7#DB2AXJ%(6t{xHNCj}$9;&<>Z`efmxxg`NfVX!M@ zXjh}bSapLwd+;rCPZW=i;(46QqhpEUM{xc$m2cdZIe4(Bk}@M9nD860nFH93hJ)&i z#^_bY7UPQf)B!bx)OsakL;)?-!7dL7Qj$9y82#^nU|T>i-T!k;KVnsjSXGVCRQ>-S znZB#m{b|G?1^i-Z1Ub@LT!BMfYA!T{3fOqY5w{!Af~eU$cB0_yiTQBqmG4LSCetD{ zQW033(_1cxQ~s_3 zV9XU&Z0EtLSYiiZjUv?)KT?^Mx^IS4wJM0ZOJo}H{<#6+1Rcf{4FCv%tsP- ziWszyT7EzHr+Bnh7{t4`A3tcrs%=S1tDyJ%()1X^wc{j|6SSCN{-kzcVv$8k1S zC8QQX&bRXY0<>55*V`2DNly7Pq2I}@7vxiaCQ~v`5l0X^cxF_EIkmSx;+Q*gZwPGARWlcr= z>&TK16w-)O6)U&)UwF9SMrA~ps=AeBCCb`TM)}CirvIL^qFuLP!ZY-fDrGNf{UiUd z7PoUAvc?0vC8coYoIs*SJLpuNphiA7yMtoQ%Wo7;;tH3o!BJ+%5>JNUBQ~B>V>vhV zYPL__iuah9jS>a1pzt{^Uma&nT0W6sQ?2bRH~i zotPndcVb4j^cKLrTaJlaWk6mt9+=#)Spmjgw1EpLo>A?ASX{4|D4U__( zCJMp1$r>p8ieyZc0u^rNP~N%L>|nA_Nk}|WNlC7a32^!*$Z!H$-bSIfc2#0`-h5r2 zeu}p|$lbkY(K9stndu{tK@SkXC}-qDeN|M}D_0vU^V2P~#PrM(O}KrMO0J;@2^D}J zJ>Kx;3^W_RBK)F%$_Oyz>bPvJ0r@!>)Q;rCs^&xQ9$>#Eab0r(2PfK~DGvdIA5Vjh z$LUd2{E7&5m88mjrP1mYR?G*JtU$w1!JN#RitTo%<9)bK4%S0>3=TfOkDU5^dWH&o z{*<}G$sID3Q)}oa_}{B{NSmD?TT_Dk8I%N$ckoczGVk7#v(a;h`nXV+#`|Q*q*rz% zHc|6#VxD05)h3&UeJE)i%i`j9uAX5|_sW5Z`+Km<+#a41>ZbM?NpVy-5Sn-o4pEIg zo4XiDC}V$hz-w;rD-Z9T85uD%XD%@L<sc5Dfk)O;lW2lo&54p|x64IoFUz=ujmrsewjH6p(}=+@47e1Cw17IsG%FZVJ{Y z3ZtK$CYVkgdZP*%Q@uR-!>MHG|3VF?HDqZ-ZPddxtB~uph>Yun2hBsmhhR~%Fo-e# zU&I@{Ws?ZR223%+(<33^@R-F^2+ZQMhiY|n#;IXhp0EqgfXajg`l8G|d&*TayJ-Ni-c54C${i1{7Kxw(r?zBj9>f?zqq=35v^oU-F zNM)BLBH-`4j`j^3>d9g|&7G~sl};eeiFrEy|5w?0z*F76fBe`bBOyCk*&LgMitLe; zEqiarj)R2kJuAl^A=xV{8QCi{qpWNP+4TQ<#{c)6$4Nck*URg?aIW|Dxv%@W?)$pG zUjtaVtLyIA(9&;U><=n0ly@^34<2AEq!^>`1Lv$&(yylOy|*VY+3~Fh{4w|22M!@W z^irFBckcc0flYNZ!T5=E8yB~a>kjS^5+|YeCHodJ@LNEzniY;bB5$nwvu#eMS~XKN zGv@Mbny>S((&U}wsEXC)vU@y)RKt%v$i;eQ7fMR84i6v?kN0$6t}l<_p=tW};=8xi zX+0T}QR4ePb1n1)erx+jJG_2+p<-`e2YSM3o#%Vfc3(_8Z2jv34YV!_Ryef7`VIeh zn+`_(-B5y}P~~XQB#_#3MA31eq<5;Rr!+)PJjbgfT6jxvO0IN&*TLE~s;ytN-12+s z?)7UOcYh=ey_p)uWHt(C)>x`YoT+c=p&M(@g7&Jy)%NzM%8D>Usl!Z|f4E)S^=j=Y zDSJ~J3Zv5)Yt=ne9;Q&5F46z|Vy`hk5KK(n{s?d1BTIGm;c-JGN3iNH^js< zJxsYH>C@WUd^cOe9a(Zhl?vT5yE-}|sN$U^+K_f# zox59BTxt5X2>H>0jC7S!QBWB{(Nb+SOM2|r)v zD;=o5wYnSQcC>nUED4KDv%F$iDB#w*Z>?-7^2Lqe_9!LFjr1rbT8-Mi{lqw;@>D_{ z;rsj!qQl{C#bI!I;eTWbnU-ogPFOrjH2Y#yh9mt)89-TD?2sfTo> za-#<9#=g|XB(#24fNE(%F*ydoCJOh-;&%|Y!fc% zCFw>-G?R*_WS~wijFO9T)^Ni*yo6BfdC?fB^nOJY$leXHd4&ebcc0pNU|IaGJ(^Yb zBB-dHC|=&bYyGzQTTKqGzibZf*K3u}WShqI(#2OF2KRbJe5EmpygE-)Bm=n4XFYoeCGC1_QIk(vW}T6GgbuA%blp3`LV_JVFPzLQ`5v zIljFmeX%Xmx*xI>94^>m7uIaB@?56L5Jy*pgP3>WHSevK4P)u6VxO|W0nHDt+ce9#{YsYizV%D`WKz37|L5^xk}3+lXs0TJpyy8rQuH<>c{NyNMqv{SjE zlsO?fCH`@)UJ?pKzL7p+USDip%X>6WZ-=gn4%!JriT02PziNV8%CaUeq)}#}+!y8f zp>p`6n88aOS%R{Oj4uRbbkYQ6XeUYn-@uw-#FyFE1&P?}rqJP3BzKRjJm{a4O7N&- zYVL+R9yd=$6-v}t57!~H zgJ=s?f;GllpY!qyu*RvoZANeHidoZ7-ikMw9i6Wd3}{YdebF=&Gcy17+uV}g$v$(p z?C25EA*U0iOyvE?cO$0{YYEd*>keC6dBn;}pQ3sMVI6#xg5A)aex392lBc~r*}g%E zJvDymmTbU^_VS3;b7v^8v@`T$WjNLw;%RIYE!MX`L=!4hBbrEz79{me;alwOeHx0+ z-E}6PLJJ<03Jz1P*{55TuNBOKJKf9QG=p6;QUf@hn?> z>U@4N1r;Ye@>^hN7EBWEE9PvlQ$;G~o6Zc4)7sawnjR6<#jCFlF)$2^4X^N5y$!u~ zMf8&wQxKJ!VY(ad?%uvhN-p$aPbv46&d7WAkrBs>4TrP?nz!0`th2lcl#Qv}E)P?z zT>H#<%QYRCqwVW;HF1SbKOVYX-ZdDN5+27ktC}RKqS90-3wL(Dz-cL#*&Ht1=vx*( zzvf2`O0t%i(NAVG75*~vj(LCtGElVU_yOLN@fba+_DRgA4u>HX9&#>Lg1)Cp6Q(Rt z;f$K-rdsv#%Oea%k9g9U(_}lC(o7OPTqUf#`dnsw2%OpziImks;yJb3(db^&Nf3O` z%v7^|0mo_XfdtRZqWe z5Lx0i2x-M_ryiV;)k(=+L^QAF|-t&hr6#C)Sh9$yhI8tPk3$ z{(*^?k#?SW=Hm<@QR3d9bXgl*B1^njR(Fju_{J&aeUnC&P?1C zA&0K6c@~-bbcCUuv^+6o*(VYW6=O|aeM-F>BZ7O5Cu9Z%;zjz4WNua=&o&ERzj{gU zb=;o%{5$ox!r{D+y4f20DV#fTv#>}Jb(uP|@=dsEr^861m8;K`|53$-V<}IDQShNU z)h_1>?*91VT&!rYTLQWsISg*{xzyY&${Kew*A;Y{-g7lEP8kg|#viZ$8RJ4&Z<7dt<+6GlrcV!9xq6UhF!0}Zq_ zrt`=~Au+i=`LWc=%^HbyGWcyT5#8u|_L&Rxx>}DP+;e_xHaAo7hNw4g_!31Bb>748 zckU&3OvH&bT-y=yqM*bwF?$Fu^B&F8>%NR3x)cccV2l z`BfCdGARkvx(06LvKD)ZyWbNim!Y@NZn1JV$VU5{dP_#4*bVn(7Vx}tp=4*T-Y%zAU@~(P z&(=8C8#o}oYAXKF;(g)~L3`v(@TE={_;*X%?qc8VBhs25uqu9~orKg zXGnA}#`xWx8gdBJ?4jvhRnz;Gq= zO3b+#%(l7d;uk-M|GK{~N}BC`X7t!X$rFwIO%WwgzMA&%vFvQ(=>boSz3twv*@5}n z{4g6r(NKzA_(sbX@J0JCD(eEXxa781HN2H{nH#c$eMMpYJzWQ3X!jQnP(3t%kZhZK zqKJy9dn<`KUD_|@%TtP{v>mb+bC?$Cp|3evTB1TC zm1e#$9U?m0`qD}5b`vifTOZi8hlP-o!xO69KgBtaSqRREC-2u~|CCul%-|WMygQDw zSc1ElP3{y<#4y2?u}j*|in}NkT3yH{d%!Dxz#;CQO;bCX^F&vo_ZX!Et|eZfwMReQXNkbN6jn?yl+AncX6G< zNz82UcrqgUVUAjp>Snxk1%6?3weilxVoZzM# zI4NgZ48T2&xfIUglt2bG5DOadQ+W|Io*yDkY?S+fZ#>x^n&>r@ZXGI+ZPiT?f-bs{ z_3x7P6Z&sIqY-%+v%TuSt>eF~DDGZMQ(MinD2%fRgjMi`dPz`J zT~EYg3!@i+12X^Zmb45pOX))13^5~Vn6)%aH)dN6XEB?sUzZ;UzM5iC6!ZnnF-Oz- zCEP`o(41hvdkT%`Yvo-}|7{M)9569}>u_?X`mPA*hdO8Q5g@-C1^Qx?*It>}0JbT9$q^Zl69fyd)60=Y63 z;j}QbpF}z1mekRv*{j{6rlRTN_Jva*-d-9;2_b9RgsyK?4_^hx?_V0q`;wERwo@f9 zhXP5YBcfoKpM3oKa6!)V5YrH?y(O*QXac_BEI#MD^rgCKVo#BJ$UH>6M;M9{Yk4>@ zUP}#?PS{n{o1(jPF{zlPmBtd>X}Y&uiQ1MFa5C3i)IJIk zG#!EDm=BKfW$O~#!1bu|6cs#8?^GCu8Axw@5Tl?k&OoOYt>K(@f<9C*P6RjlC5)^Cit}J- znOOY5w)KD=e{xar4PrI0x=B9_LCAJ{$?&Ci6y~N})<=h_C4h@PyQ~`0e zrDruKIl>j1J5@M56`EmQr1Mu!#)4udRSKSL99RgcnkES6Ie8uDB-IMg6u>F-xoVa1A(yqS?`z4=0$wYiM6 zE#aAw$%kZ#m2lH=gHMDOv#!bdiUs;p{4u;dmLtPg80MdniAed1dQ-oP1% zeBQiqywem^Uq1NOCB zdROs86O*^h@Tl)_4lZ9EQ)d2drGRw)YQxHv;{L?J+b&*Fg<^yYhdw5+4L&ipEUS86 z1RoM5sZ}{H&Iz=Z?5farse^}6G6x?ve9qJp74Y$i>al8gm%pLGbtjCcRy$xkf3HOI zb#u~1ws{6vp`xBHWwb{fUn8stUP%JZ#)zS;OE$h}(Gk(0bKoaIpiDT@LnJL)h;k!c z?*#I6k~3Z*h867=Ub=g!d{P^9`1YodTiQ!q^bvL1*N4ZHw$TPHWP6Z6#Y#4==YmJ{(%Z1et%rTM z&Yb5_%yDegV0GW|4Xm?;{#J$2gTN7x$d9z7ZWxTq?E|S?0TJ#)!IqaA|~1qIK6q z+sjiglWWdNs`U9hD&o~?!E(oHE_n0ip%tzU!&fw}r%zM_)n-Zb=-QsI2Jmr=#H7tE7r=AxUA^=4o7Zpya?&SD$}DnfD2Spnjdyg~6inEPB| zv>NVuXo~sraG{!I_4Vo-OL!l+*N8thruuZc3l!Bg>Qv_IH-1%BtzZyOWT*``IQGqT zf~e#+KJ30?=g{-*+Da?#Tl3uziFedVD)?`u@rq^?ApSWSABLCYl+j@S)MME9RsQ<&_cm?lB7W?`Cv?h z(`K8ztl>C0L6wvG!N~i7fjQ>yz33*ji?Niltyrp~OY_8C?!&B>Bj#qe?Tg-_+kJ1C z9z!wN3EOjj%m>1JqOq#3Zm||GZNjC>La-iKh6hTYPn~>x&H96EZ}e;#Tpor|(BdPT zF-*8#o@r1E|58Gss`+~As}>tPEFbmZ2qv2=F400r_ig4|o`mud zEQjM78BM5WK1qjvxX&`LJ@Td7ho6F?yVO_bfyna&;m=fZ26JpV{3bUBUkRlcu6dZS z9MF1K&M;Hav5}{9#s&Fsb>Cc|WE>KkEf!$BY_P6TnTP5BnN+5K-}vBxnW2l56%`M) zP?Jl&@M^EMw7hwKQO#9U*~=17+|kj>uHOrig#~@NTdn+IReQuo&Phi(;og3|wc|}$ zziCHK6h;FI^VRS-L3~mJT&V^2t@aDeSngxUJSFh$bc@^T|T($Y&fa+IybwO z;%0)tf?i3VU>8-GkHPH${$a)%zFJp1km0SdSZ^q#`#uXs>Q{mbbwxg@P=U#HKSkQf z*r2STs=Wq|P{PcrJ-l#|t7f%3!6Yu_97)UNPMx)t#)0FaE?=UA*4__=DGvLMH#8Y{ z6mxK+$~FD?R5W;-4MhfwEvo0#Y-d;7W9Z)eIj);wm4#%d*SB#s@dJZ>Lgqa}68wBW za$%~X&So?=4|j>#?qEjs!xmbPSD&0}>1h~bn!I0KeSh0eA*c84a(|+_7h~y07Vq02 zn%TD7N=E&QsdxArnw;b8qs=*K1zjFc48Jh$mc3oG?ki&;V20^Kh-EQ|8bGwB#~HWs zI24z(T3vOkk)whHGY}IOFY3YNoHx7oQdzGb4T$TQD;X!5f#tqt3;Pq+k*BM&7fG-Y zzCgQk8LR0&rNayV0E1koG&611CCS5qJnhHSwED|-{iU=Kn1mv|b9}~b@4@y?v zlXj*$!Y;7ioSDdTqa&HC8togp4DvN^-g@_vFJ!?$wj%Ip%e3%-N^dli>YJ^biyJ2sinh(sT>~0f>OfP)=NZ>zA|i7Y0wDy zU-QPUxSd50b2Laxr<_^nQM;<+5+*i&n`nE)ff!$~<+jsv%?zLUz!?~Z;Qp_0>5v7S|iOVMbq zH3hQPtj|T3t7AVf@^VZOo+p#b0M(6roRAtNbGdBR=eMiX%p@Zqxg#7y!rt{Xj?1kx zw+pN!6;+=XDgMxl(_~xY<*QvscDVtyE74*zJi8_yNgXTrY9~amAdcUJ#^a4bBc^#Z z@6OaRl`*L5RysJ;XfNyD($ZJMCOWq03G#JY($L^sTE1{h=c$I%PR~f7J2}IPjTSe4 z6zOegP!ux`{H}y7ByXoc(NwkO*t|sFEgfI3B2&_}2uf+rSk@lkE@k&1U$ z75hqUxwM;PdG|2QYePay*^Op$xA8WJ!R2hF`zM_D<*+W4zvJQ`odALEJEMZ`%b}nW zfrvmCE?fZZ=eyrq!oCso1O)_YL`=Sw5NHqv)+F}DGvAi6$%!{0`D2u6GVGjbK=*X8F$u$4)1zeg8l zc`zmq0zIq*fv6E|`2pl#4*#;XGB>bt=ViChch=`Hasxg)PY5OgOh*X>vNE@Eazzku z8n@H8{Vg5`!6y3uZS<{;kVvnDK^cfmL7>EMAP_l%WzWAX|0x_|d!Fh`2pqPGzg3&_ z2=XIHKaE|;K?p{x9SHOd2L(iiU}%bH`1}45^Tvq@1!QCFh~W7AnC1RuVPR+MWaH?5 zuH|I}$#eg*1ZMh-bsW5i@(K_lYhnXr&K<{CfiUG+0}BfVnp&0fAT$uwlGE$0|8F{(}2W>rwG*paRN({Nh01lHEbh zb#pYn>tteL?C{9Z+zLXkpzmmChFr5iz7Vf6pjn3$1Y$y9Q;Yu&8#z_!!^(OH8VJ+{ zR1X~jwM7XjRovFv&cPT0v2{QW)M83IwgiBi0FV{|n6B~@pbf-P-^LMwocE+&LZTkv zdWsDNj=0(9zbx4LNOHY^LxCP&SG2@09m2`3Vi;`0GLE+Gv+m1H~SG;os@g zV~!LnEiS7lbKYzp0Bh;Q{E7=08w3iz3IYir41LPxXH;M@SJ5{y{vVoNS|4KeP~X7H z_-sT@ofzWyr|JVvwg4yW2u>W`e%lFhGK*`-8)2P7he1M`ZUl=NflTMR%E0&?UA z0!i%U&q)89M&wMZ`0nu~fN5|M1Y$#AGN%5FDXITE8QpZhI&cdhYn>rmX8nwOnt12e z%4x!xWaA!=;(|ahAe^iSnk(~=lh5Sz*ZCKwx+f0@FPF3-s@WW~zB*|1IF41PBeH1EZ;5IQVsNPOEUU7?K$Q?0dz)zK7VU zI4vM`@O#)}Orh{}V6S=w6gc9puf6@RzXgBN0#+<>yNy7KQG@X_k|)U(rfI(YgO zNrygQ+Gqf!V1((rwu_Ya$i~vf*2PA}-2FGovE9zYU>;aKGYCN-dIY)xaNIzW)_>;Q zA5lQAmu7jG4_MJap+Hm-iGFCPNQuAd&PFssYPW&up9XU58iGa$#?Oh!)t#CH!v44j z{(AlMrQ{+a%L$Nmre{{OM5_-3vhX>O>WHiOHZt?Oh%G2`Nqxrj4>kc!{yzCkkhD^UzKA5drUY`?NkUf0-~SNkfRC&`onDjQFTE7g(%E`5((B|`mLVVKX_WrX z37`!AalPR{B)Php0qxY8tQg1G@cRs;{HYxNf0%MbLT1`GQhDE#ElRkS>VpZKbM)mLVT8dZeyQtIs26~e8bbPWrGu%Pnl1wP5Fn2ccYe-WzwP3z`qPpN<}+q22Gpwq z_?rmoqs4v`{Z|w7^C6u2@mY0$84k$b0m>V3b_?$OH$TY7L7O8kQ3i}d4;aTSgmJu- z`hEVNE6VvJF_q&JeF2Q*I(@mjKl15{KB)qS~E{LwYmdG-+nD(%6ClS|ktx!~=~k*koQip=TOgG^$UFTT#^B$JiuJh zA~17d=P;4Z)M+Z6A^_YU7ZBNhT=8kBAmD)*5BHh=`t(hI+W>dz|8aHwzYX%IO8= messageLength; + } finally { + inboundStream.rewind(); + } + } + } + +} diff --git a/client-holocore/src/main/java/com/projectswg/connection/HolocoreSocket.java b/client-holocore/src/main/java/com/projectswg/connection/HolocoreSocket.java new file mode 100644 index 000000000..456ac2fd1 --- /dev/null +++ b/client-holocore/src/main/java/com/projectswg/connection/HolocoreSocket.java @@ -0,0 +1,320 @@ +package com.projectswg.connection; + +import com.projectswg.common.network.NetBuffer; +import com.projectswg.common.network.packets.swg.holo.HoloConnectionStarted; +import com.projectswg.common.network.packets.swg.holo.HoloConnectionStopped; +import com.projectswg.common.network.packets.swg.holo.HoloSetProtocolVersion; +import me.joshlarson.jlcommon.log.Log; +import me.joshlarson.jlcommon.network.TCPSocket; +import me.joshlarson.jlcommon.network.TCPSocket.TCPSocketCallback; +import me.joshlarson.jlcommon.network.UDPServer; + +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.net.SocketException; +import java.util.Locale; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicReference; + +public class HolocoreSocket { + + private static final int BUFFER_SIZE = 128 * 1024; + + private final SWGProtocol swgProtocol; + private final AtomicReference status; + private final UDPServer udpServer; + private final BlockingQueue udpInboundQueue; + private final BlockingQueue inboundQueue; + + private TCPSocket socket; + private StatusChangedCallback callback; + private InetSocketAddress address; + + public HolocoreSocket(InetAddress addr, int port) { + this.swgProtocol = new SWGProtocol(); + this.status = new AtomicReference<>(ServerConnectionStatus.DISCONNECTED); + this.udpInboundQueue = new LinkedBlockingQueue<>(); + this.inboundQueue = new LinkedBlockingQueue<>(); + this.udpServer = createUDPServer(); + this.socket = null; + this.callback = null; + this.address = new InetSocketAddress(addr, port); + } + + /** + * Shuts down any miscellaneous resources--such as the query UDP server + */ + public void terminate() { + if (udpServer != null) + udpServer.close(); + } + + /** + * Sets a callback for when the status of the server socket changes + * @param callback the callback + */ + public void setStatusChangedCallback(StatusChangedCallback callback) { + this.callback = callback; + } + + /** + * Sets the remote address this socket will attempt to connect to + * @param addr the destination address + * @param port the destination port + */ + public void setRemoteAddress(InetAddress addr, int port) { + this.address = new InetSocketAddress(addr, port); + } + + /** + * Returns the remote address this socket is pointing to + * @return the remote address as an InetSocketAddress + */ + public InetSocketAddress getRemoteAddress() { + return address; + } + + /** + * Gets the current connection state of the socket + * @return the connection state + */ + public ServerConnectionStatus getConnectionState() { + return status.get(); + } + + /** + * Returns whether or not this socket is disconnected + * @return TRUE if disconnected, FALSE otherwise + */ + public boolean isDisconnected() { + return status.get() == ServerConnectionStatus.DISCONNECTED; + } + + /** + * Returns whether or not this socket is connecting + * @return TRUE if connecting, FALSE otherwise + */ + public boolean isConnecting() { + return status.get() == ServerConnectionStatus.CONNECTING; + } + + /** + * Returns whether or not this socket is connected + * @return TRUE if connected, FALSE otherwise + */ + public boolean isConnected() { + return status.get() == ServerConnectionStatus.CONNECTED; + } + + /** + * Retrieves the server status via a UDP query, with the default timeout of 2000ms + * @return the server status as a string + */ + public String getServerStatus() { + return getServerStatus(2000); + } + + /** + * Retrives the server status via a UDP query, with the specified timeout + * @param timeout the timeout in milliseconds + * @return the server status as a string + */ + public String getServerStatus(long timeout) { + Log.t("Requesting server status from %s", address); + if (!udpServer.isRunning()) { + try { + udpServer.bind(); + } catch (SocketException e) { + return "UNKNOWN"; + } + } + udpServer.send(address, new byte[]{1}); + try { + DatagramPacket packet = udpInboundQueue.poll(timeout, TimeUnit.MILLISECONDS); + if (packet == null) + return "OFFLINE"; + NetBuffer data = NetBuffer.wrap(packet.getData()); + data.getByte(); + return data.getAscii(); + } catch (InterruptedException e) { + Log.w("Interrupted while waiting for server status response"); + return "UNKNOWN"; + } + } + + /** + * Attempts to connect to the remote server. This call is a blocking function that will not + * return until it has either successfully connected or has failed. It starts by initializing a + * TCP connection, then initializes the Holocore connection, then returns. + * @param timeout the timeout for the connect call + * @return TRUE if successful and connected, FALSE on error + */ + public boolean connect(int timeout) { + TCPSocket socket = new TCPSocket(address, BUFFER_SIZE); + return finishConnection(socket, timeout); + } + + private boolean finishConnection(TCPSocket socket, int timeout) { + updateStatus(ServerConnectionStatus.CONNECTING, ServerConnectionChangedReason.NONE); + try { + socket.createConnection(); + + socket.getSocket().setKeepAlive(true); + socket.getSocket().setPerformancePreferences(0, 1, 2); + socket.getSocket().setTrafficClass(0x10); // Low Delay bit + socket.getSocket().setSoLinger(true, 3); + socket.startConnection(); + + socket.setCallback(new TCPSocketCallback() { + @Override + public void onIncomingData(TCPSocket socket, byte[] data) { + swgProtocol.addToBuffer(data); + while (true) { + RawPacket packet = swgProtocol.disassemble(); + if (packet != null) + inboundQueue.offer(packet); + else + break; + } + } + @Override + public void onDisconnected(TCPSocket socket) { updateStatus(ServerConnectionStatus.DISCONNECTED, ServerConnectionChangedReason.UNKNOWN); } + @Override + public void onConnected(TCPSocket socket) { updateStatus(ServerConnectionStatus.CONNECTED, ServerConnectionChangedReason.NONE); } + }); + this.socket = socket; + waitForConnect(timeout); + return true; + } catch (IOException e) { + Log.e(e); + updateStatus(ServerConnectionStatus.DISCONNECTED, getReason(e.getMessage())); + socket.disconnect(); + } + return false; + } + + /** + * Attempts to disconnect from the server with the specified reason. Before this socket is + * closed, it will send a HoloConnectionStopped packet to notify the remote server. + * @param reason the reason for disconnecting + * @return TRUE if successfully disconnected, FALSE on error + */ + public boolean disconnect(ServerConnectionChangedReason reason) { + TCPSocket socket = this.socket; + if (socket != null) + return socket.disconnect(); + return true; + } + + /** + * Attempts to send a byte array to the remote server. This method blocks until it has + * completely sent or has failed. + * @param raw the byte array to send + * @return TRUE on success, FALSE on failure + */ + public boolean send(byte [] raw) { + TCPSocket socket = this.socket; + if (socket != null) + return socket.send(swgProtocol.assemble(raw).getBuffer()); + return false; + } + + /** + * Attempts to receive a packet from the remote server. This method blocks until a packet is + * recieved or has failed. + * @return the RawPacket containing the CRC of the SWG message and the raw data array, or NULL + * on error + */ + public RawPacket receive() { + try { + return inboundQueue.take(); + } catch (InterruptedException e) { + return null; + } + } + + /** + * Returns whether or not there is a packet ready to be received without blocking + * @return TRUE if there is a packet, FALSE otherwise + */ + public boolean hasPacket() { + return !inboundQueue.isEmpty(); + } + + private void waitForConnect(int timeout) throws SocketException { + send(new HoloSetProtocolVersion(HolocoreProtocol.VERSION).encode().array()); + socket.getSocket().setSoTimeout(timeout); + try { + while (isConnecting()) { + RawPacket packet = receive(); + if (packet == null) + continue; + handlePacket(packet.getCrc(), packet.getData()); + } + if (isConnected()) + send(new HoloConnectionStarted().encode().array()); + } finally { + socket.getSocket().setSoTimeout(0); + } + } + + private void handlePacket(int crc, byte [] raw) { + if (crc == HoloConnectionStarted.CRC) { + updateStatus(ServerConnectionStatus.CONNECTED, ServerConnectionChangedReason.NONE); + } else if (crc == HoloConnectionStopped.CRC) { + HoloConnectionStopped packet = new HoloConnectionStopped(); + packet.decode(NetBuffer.wrap(raw)); + switch (packet.getReason()) { + case INVALID_PROTOCOL: + disconnect(ServerConnectionChangedReason.INVALID_PROTOCOL); + break; + default: + disconnect(ServerConnectionChangedReason.NONE); + break; + } + } + } + + private void updateStatus(ServerConnectionStatus status, ServerConnectionChangedReason reason) { + ServerConnectionStatus old = this.status.getAndSet(status); + if (old != status && callback != null) + callback.onConnectionStatusChanged(old, status, reason); + } + + private ServerConnectionChangedReason getReason(String message) { + message = message.toLowerCase(Locale.US); + if (message.contains("broken pipe")) + return ServerConnectionChangedReason.BROKEN_PIPE; + if (message.contains("connection reset")) + return ServerConnectionChangedReason.CONNECTION_RESET; + if (message.contains("connection refused")) + return ServerConnectionChangedReason.CONNECTION_REFUSED; + if (message.contains("address in use")) + return ServerConnectionChangedReason.ADDR_IN_USE; + if (message.contains("socket closed")) + return ServerConnectionChangedReason.SOCKET_CLOSED; + if (message.contains("no route to host")) + return ServerConnectionChangedReason.NO_ROUTE_TO_HOST; + return ServerConnectionChangedReason.UNKNOWN; + } + + public interface StatusChangedCallback { + void onConnectionStatusChanged(ServerConnectionStatus oldStatus, ServerConnectionStatus newStatus, ServerConnectionChangedReason reason); + } + + private UDPServer createUDPServer() { + try { + UDPServer server = new UDPServer(new InetSocketAddress(0), 1500, udpInboundQueue::add); + server.bind(); + return server; + } catch (SocketException e) { + Log.e(e); + } + return null; + } + +} diff --git a/client-holocore/src/main/java/com/projectswg/connection/RawPacket.java b/client-holocore/src/main/java/com/projectswg/connection/RawPacket.java new file mode 100644 index 000000000..7e50e4213 --- /dev/null +++ b/client-holocore/src/main/java/com/projectswg/connection/RawPacket.java @@ -0,0 +1,41 @@ +/*********************************************************************************** + * Copyright (C) 2018 /// Project SWG /// www.projectswg.com * + * * + * This file is part of the ProjectSWG Launcher. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU Affero General Public License as published by * + * the Free Software Foundation, either version 3 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Affero General Public License for more details. * + * * + * You should have received a copy of the GNU Affero General Public License * + * along with this program. If not, see . * + * * + ***********************************************************************************/ + +package com.projectswg.connection; + +public class RawPacket { + + private final int crc; + private final byte[] data; + + public RawPacket(int crc, byte[] data) { + this.crc = crc; + this.data = data; + } + + public int getCrc() { + return crc; + } + + public byte[] getData() { + return data; + } + +} diff --git a/client-holocore/src/main/java/com/projectswg/connection/SWGProtocol.java b/client-holocore/src/main/java/com/projectswg/connection/SWGProtocol.java new file mode 100644 index 000000000..afb10261e --- /dev/null +++ b/client-holocore/src/main/java/com/projectswg/connection/SWGProtocol.java @@ -0,0 +1,38 @@ +package com.projectswg.connection; + +import com.projectswg.common.network.NetBuffer; + +class SWGProtocol { + + private final HolocoreProtocol holocore; + + public SWGProtocol() { + holocore = new HolocoreProtocol(); + } + + public void reset() { + holocore.reset(); + } + + public NetBuffer assemble(byte [] packet) { + return holocore.assemble(packet); + } + + public boolean addToBuffer(byte [] data) { + return holocore.addToBuffer(data); + } + + public RawPacket disassemble() { + byte [] packet = holocore.disassemble(); + if (packet.length < 6) + return null; + NetBuffer data = NetBuffer.wrap(packet); + data.getShort(); + return new RawPacket(data.getInt(), packet); + } + + public boolean hasPacket() { + return holocore.hasPacket(); + } + +} diff --git a/client-holocore/src/main/java/com/projectswg/connection/ServerConnectionChangedReason.java b/client-holocore/src/main/java/com/projectswg/connection/ServerConnectionChangedReason.java new file mode 100644 index 000000000..9633b19c9 --- /dev/null +++ b/client-holocore/src/main/java/com/projectswg/connection/ServerConnectionChangedReason.java @@ -0,0 +1,16 @@ +package com.projectswg.connection; + +public enum ServerConnectionChangedReason { + NONE, + CLIENT_DISCONNECT, + SOCKET_CLOSED, + CONNECT_TIMEOUT, + INVALID_PROTOCOL, + BROKEN_PIPE, + CONNECTION_RESET, + CONNECTION_REFUSED, + ADDR_IN_USE, + NO_ROUTE_TO_HOST, + OTHER_SIDE_TERMINATED, + UNKNOWN +} diff --git a/client-holocore/src/main/java/com/projectswg/connection/ServerConnectionStatus.java b/client-holocore/src/main/java/com/projectswg/connection/ServerConnectionStatus.java new file mode 100644 index 000000000..bf7377bb4 --- /dev/null +++ b/client-holocore/src/main/java/com/projectswg/connection/ServerConnectionStatus.java @@ -0,0 +1,7 @@ +package com.projectswg.connection; + +public enum ServerConnectionStatus { + CONNECTING, + CONNECTED, + DISCONNECTED +} diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index d2c45a4b2..962e3b05b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ +#Thu Jun 28 08:06:24 CDT 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.8-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.8-all.zip diff --git a/pswgcommon b/pswgcommon index 90119697d..454e995ad 160000 --- a/pswgcommon +++ b/pswgcommon @@ -1 +1 @@ -Subproject commit 90119697d198ab9f02032a60e97761f9afe7221f +Subproject commit 454e995ad33133304d22173441f6ffc8596e392f diff --git a/settings.gradle b/settings.gradle index 98436d501..5299d9862 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,2 +1,3 @@ rootProject.name = 'holocore' -include 'pswgcommon' +include ':pswgcommon' +include ':client-holocore' diff --git a/src/integration/java/com/projectswg/holocore/ProjectSWGRunner.java b/src/integration/java/com/projectswg/holocore/ProjectSWGRunner.java new file mode 100644 index 000000000..9e5b9c5b0 --- /dev/null +++ b/src/integration/java/com/projectswg/holocore/ProjectSWGRunner.java @@ -0,0 +1,48 @@ +package com.projectswg.holocore; + +import com.projectswg.connection.HolocoreSocket; +import com.projectswg.connection.ServerConnectionChangedReason; +import me.joshlarson.jlcommon.concurrency.BasicThread; +import me.joshlarson.jlcommon.concurrency.Delay; + +import java.net.InetAddress; + +public class ProjectSWGRunner { + + private final BasicThread runner; + + public ProjectSWGRunner() { + this.runner = new BasicThread("holocore", () -> ProjectSWG.run(new String[0])); + } + + public void start() { + runner.start(); + { + HolocoreSocket socket = new HolocoreSocket(InetAddress.getLoopbackAddress(), 44463); + long start = System.nanoTime(); + boolean connected = false; + while (System.nanoTime() - start <= 60E9) { // 60s max wait + connected = socket.getServerStatus().equals("UP"); + if (connected) + break; + Delay.sleepSeconds(1); + } + if (connected) { + start = System.nanoTime(); + while (System.nanoTime() - start <= 60E9) { // 60s max wait + if (socket.connect(1000)) { + socket.disconnect(ServerConnectionChangedReason.CLIENT_DISCONNECT); + break; + } + } + } + socket.terminate(); + } + } + + public void stop() { + runner.stop(true); + runner.awaitTermination(5000); + } + +} diff --git a/src/integration/java/com/projectswg/holocore/integration/resources/ClientRunner.java b/src/integration/java/com/projectswg/holocore/integration/resources/ClientRunner.java new file mode 100644 index 000000000..5c143cab3 --- /dev/null +++ b/src/integration/java/com/projectswg/holocore/integration/resources/ClientRunner.java @@ -0,0 +1,25 @@ +package com.projectswg.holocore.integration.resources; + +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class ClientRunner { + + protected HolocoreClient client; + + @Before + public void initializeClient() { + client = new HolocoreClient(); + Assert.assertTrue(client.login("Obique", "pass")); + } + + @After + public void terminateClient() { + client.disconnect(); + } + +} diff --git a/src/integration/java/com/projectswg/holocore/integration/resources/ClientUtilities.java b/src/integration/java/com/projectswg/holocore/integration/resources/ClientUtilities.java new file mode 100644 index 000000000..3870c5b30 --- /dev/null +++ b/src/integration/java/com/projectswg/holocore/integration/resources/ClientUtilities.java @@ -0,0 +1,90 @@ +package com.projectswg.holocore.integration.resources; + +import com.projectswg.common.data.customization.CustomizationString; +import com.projectswg.common.data.customization.CustomizationVariable; +import com.projectswg.common.network.packets.swg.login.creation.*; +import org.junit.Assert; + +public class ClientUtilities { + + private ClientUtilities() { + + } + + public static void createCharacter(HolocoreClient client) { + client.send(new RandomNameRequest()); + RandomNameResponse randomNameResponse = (RandomNameResponse) client.receive(); + Assert.assertNotNull(randomNameResponse); + + client.send(new ClientVerifyAndLockNameRequest(randomNameResponse.getRace(), randomNameResponse.getRandomName())); + ClientVerifyAndLockNameResponse verifiedResponse = (ClientVerifyAndLockNameResponse) client.receive(); + Assert.assertNotNull(verifiedResponse); + + ClientCreateCharacter create = new ClientCreateCharacter(); + create.setCharCustomization(createCharacterCustomization()); + create.setName(randomNameResponse.getRandomName()); + create.setRace(randomNameResponse.getRace()); + create.setStart("mos_eisley"); + create.setHair("object/tangible/hair/human/hair_human_male_s02.iff"); + create.setHairCustomization(createHairCustomization()); + create.setClothes("combat_brawler"); + create.setHeight(0.9648422f); + create.setTutorial(false); + create.setProfession("smuggler_1a"); + create.setStartingPhase("class_smuggler_phase1_novice"); + client.send(create); + + CreateCharacterSuccess success = (CreateCharacterSuccess) client.receive(); + Assert.assertNotNull(success); + client.addCharacter(success.getId(), create.getName()); + client.zoneIn(success.getId()); + } + + private static CustomizationString createCharacterCustomization() { + CustomizationString str = new CustomizationString(); + str.put("/shared_owner/blend_lipfullness_0", new CustomizationVariable(33)); + str.put("/shared_owner/blend_lipfullness_1", new CustomizationVariable(0)); + str.put("/shared_owner/blend_chinsize_0", new CustomizationVariable(208)); + str.put("/shared_owner/blend_chinsize_1", new CustomizationVariable(0)); + str.put("/shared_owner/blend_fat", new CustomizationVariable(0)); + str.put("/shared_owner/blend_ears_1", new CustomizationVariable(0)); + str.put("/shared_owner/blend_ears_0", new CustomizationVariable(191)); + str.put("/shared_owner/blend_noselength_0", new CustomizationVariable(0)); + str.put("/shared_owner/blend_noselength_1", new CustomizationVariable(40)); + str.put("/shared_owner/blend_jaw_1", new CustomizationVariable(0)); + str.put("/shared_owner/blend_jaw_0", new CustomizationVariable(156)); + str.put("/shared_owner/blend_eyeshape_1", new CustomizationVariable(32)); + str.put("/shared_owner/blend_nosewidth_1", new CustomizationVariable(0)); + str.put("/shared_owner/blend_eyeshape_0", new CustomizationVariable(0)); + str.put("/shared_owner/blend_nosewidth_0", new CustomizationVariable(35)); + str.put("/shared_owner/index_color_skin", new CustomizationVariable(35)); + str.put("/shared_owner/blend_cheeks_1", new CustomizationVariable(5)); + str.put("/shared_owner/blend_eyedirection_1", new CustomizationVariable(16)); + str.put("/shared_owner/blend_skinny", new CustomizationVariable(26)); + str.put("/shared_owner/blend_cheeks_0", new CustomizationVariable(0)); + str.put("/shared_owner/blend_eyedirection_0", new CustomizationVariable(0)); + str.put("/shared_owner/blend_nosedepth_1", new CustomizationVariable(0)); + str.put("/shared_owner/blend_nosedepth_0", new CustomizationVariable(107)); + str.put("/shared_owner/blend_lipwidth_0", new CustomizationVariable(23)); + str.put("/shared_owner/blend_lipwidth_1", new CustomizationVariable(0)); + str.put("/shared_owner/blend_muscle", new CustomizationVariable(144)); + str.put("/shared_owner/blend_eyesize_0", new CustomizationVariable(117)); + str.put("/shared_owner/blend_eyesize_1", new CustomizationVariable(0)); + str.put("/private/index_style_beard", new CustomizationVariable(0)); + str.put("/private/index_style_freckles", new CustomizationVariable(0)); + str.put("/private/index_age", new CustomizationVariable(0)); + str.put("/private/index_color_skin", new CustomizationVariable(0)); + str.put("/private/index_color_2", new CustomizationVariable(1)); + str.put("/private/index_color_3", new CustomizationVariable(0)); + str.put("/private/index_color_facial_hair", new CustomizationVariable(1)); + str.put("/private/index_style_eyebrow", new CustomizationVariable(0)); + return str; + } + + private static CustomizationString createHairCustomization() { + CustomizationString str = new CustomizationString(); + str.put("/private/index_color_1", new CustomizationVariable(1)); + return str; + } + +} diff --git a/src/integration/java/com/projectswg/holocore/integration/resources/HolocoreClient.java b/src/integration/java/com/projectswg/holocore/integration/resources/HolocoreClient.java new file mode 100644 index 000000000..7786a0ade --- /dev/null +++ b/src/integration/java/com/projectswg/holocore/integration/resources/HolocoreClient.java @@ -0,0 +1,191 @@ +package com.projectswg.holocore.integration.resources; + +import com.projectswg.common.data.CRC; +import com.projectswg.common.data.location.Location; +import com.projectswg.common.data.location.Terrain; +import com.projectswg.common.network.NetBuffer; +import com.projectswg.common.network.packets.PacketType; +import com.projectswg.common.network.packets.SWGPacket; +import com.projectswg.common.network.packets.swg.holo.login.HoloLoginRequestPacket; +import com.projectswg.common.network.packets.swg.holo.login.HoloLoginResponsePacket; +import com.projectswg.common.network.packets.swg.login.EnumerateCharacterId.SWGCharacter; +import com.projectswg.common.network.packets.swg.zone.CmdSceneReady; +import com.projectswg.common.network.packets.swg.zone.SceneCreateObjectByCrc; +import com.projectswg.common.network.packets.swg.zone.SceneEndBaselines; +import com.projectswg.common.network.packets.swg.zone.baselines.Baseline; +import com.projectswg.common.network.packets.swg.zone.insertion.CmdStartScene; +import com.projectswg.common.network.packets.swg.zone.insertion.SelectCharacter; +import com.projectswg.connection.HolocoreSocket; +import com.projectswg.connection.RawPacket; +import com.projectswg.connection.ServerConnectionChangedReason; +import com.projectswg.holocore.resources.support.objects.ObjectCreator; +import com.projectswg.holocore.resources.support.objects.swg.SWGObject; +import me.joshlarson.jlcommon.concurrency.BasicThread; +import me.joshlarson.jlcommon.concurrency.Delay; +import org.junit.Assert; + +import java.net.InetSocketAddress; +import java.util.Map; +import java.util.Objects; +import java.util.Queue; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicLong; +import java.util.concurrent.atomic.AtomicReference; + +public class HolocoreClient { + + private final HolocoreSocket socket; + private final BasicThread listenThread; + private final AtomicReference location; + private final AtomicReference terrain; + private final Map objectsAware; + private final Map objectsInProgress; + private final Map characters; + private final BlockingQueue packets; + private final AtomicLong characterId; + private final AtomicBoolean zonedIn; + + public HolocoreClient() { + this(new InetSocketAddress("localhost", 44463)); + } + + public HolocoreClient(InetSocketAddress address) { + this.socket = new HolocoreSocket(address.getAddress(), address.getPort()); + this.listenThread = new BasicThread("holocore-client-listen", this::listen); + this.location = new AtomicReference<>(null); + this.terrain = new AtomicReference<>(null); + this.objectsAware = new ConcurrentHashMap<>(); + this.objectsInProgress = new ConcurrentHashMap<>(); + this.characters = new ConcurrentHashMap<>(); + this.packets = new LinkedBlockingQueue<>(); + this.characterId = new AtomicLong(0); + this.zonedIn = new AtomicBoolean(false); + } + + public long getCharacterId() { + return characterId.get(); + } + + public String getCharacterName() { + return characters.get(getCharacterId()); + } + + public void addCharacter(long id, String name) { + this.characters.put(id, name); + } + + public boolean login(String username, String password) { + Assert.assertTrue(socket.connect(5000)); + listenThread.start(); + send(new HoloLoginRequestPacket(username, password)); + HoloLoginResponsePacket response = receiveNext(PacketType.HOLO_LOGIN_RESPONSE); + return response.isSuccess(); + } + + public void zoneIn(long characterId) { + this.characterId.set(characterId); + send(new SelectCharacter(characterId)); + } + + public void waitForZoneIn() { + long start = System.nanoTime(); + while ((!zonedIn.get() || !objectsAware.containsKey(getCharacterId())) && System.nanoTime() - start < 10E9) { + Delay.sleepMilli(100); + } + Assert.assertTrue(zonedIn.get()); + Assert.assertTrue(objectsAware.containsKey(getCharacterId())); + } + + public void disconnect() { + listenThread.stop(false); + socket.disconnect(ServerConnectionChangedReason.CLIENT_DISCONNECT); + socket.terminate(); + listenThread.awaitTermination(1000); + } + + public void send(SWGPacket packet) { + socket.send(packet.encode().array()); + } + + @SuppressWarnings("unchecked") + public T receiveNext(PacketType type) { + SWGPacket packet; + while ((packet = receive()) != null) { + if (packet.getPacketType() == type) { + return (T) packet; + } + } + return null; + } + + public SWGPacket receive() { + try { + return packets.poll(5, TimeUnit.SECONDS); + } catch (InterruptedException e) { + return null; + } + } + + private void listen() { + RawPacket received; + while ((received = socket.receive()) != null) { + SWGPacket packet = PacketType.getForCrc(received.getCrc()); + Assert.assertNotNull(packet); + packet.decode(NetBuffer.wrap(received.getData())); + process(packet); + this.packets.add(packet); + } + } + + private void process(SWGPacket packet) { + switch (packet.getPacketType()) { + case HOLO_LOGIN_RESPONSE: + processLoginResponse((HoloLoginResponsePacket) packet); + break; + case CMD_START_SCENE: + zonedIn.set(true); + location.set(((CmdStartScene) packet).getLocation()); + terrain.set(((CmdStartScene) packet).getLocation().getTerrain()); + send(new CmdSceneReady()); + break; + case SCENE_CREATE_OBJECT_BY_CRC: + processSceneCreateObject((SceneCreateObjectByCrc) packet); + break; + case BASELINE: + processBaseline((Baseline) packet); + break; + case SCENE_END_BASELINES: + processEndBaselines((SceneEndBaselines) packet); + break; + } + } + + private void processLoginResponse(HoloLoginResponsePacket login) { + for (SWGCharacter character : login.getCharacters()) { + characters.put(character.getId(), character.getName()); + } + } + + private void processSceneCreateObject(SceneCreateObjectByCrc create) { + SWGObject obj = ObjectCreator.createObjectFromTemplate(CRC.getString(create.getObjectCrc())); + obj.setLocation(Location.builder(create.getLocation()).setTerrain(terrain.get()).build()); + objectsInProgress.put(create.getObjectId(), obj); + } + + private void processBaseline(Baseline base) { + SWGObject obj = objectsInProgress.get(base.getObjectId()); + Objects.requireNonNull(obj); + obj.parseBaseline(base); + } + + private void processEndBaselines(SceneEndBaselines end) { + SWGObject obj = objectsInProgress.get(end.getObjectId()); + Objects.requireNonNull(obj); + objectsAware.put(end.getObjectId(), obj); + } + +} diff --git a/src/integration/java/com/projectswg/holocore/integration/test/TestIntegration.java b/src/integration/java/com/projectswg/holocore/integration/test/TestIntegration.java new file mode 100644 index 000000000..af3aff8fc --- /dev/null +++ b/src/integration/java/com/projectswg/holocore/integration/test/TestIntegration.java @@ -0,0 +1,29 @@ +package com.projectswg.holocore.integration.test; + +import com.projectswg.holocore.ProjectSWGRunner; +import com.projectswg.holocore.integration.test.login.TestLogin; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.runner.RunWith; +import org.junit.runners.Suite; +import org.junit.runners.Suite.SuiteClasses; + +@RunWith(Suite.class) +@SuiteClasses(value = { + TestLogin.class +}) +public class TestIntegration { + + private static final ProjectSWGRunner HOLOCORE = new ProjectSWGRunner(); + + @BeforeClass + public static void startHolocore() { + HOLOCORE.start(); + } + + @AfterClass + public static void stopHolocore() { + HOLOCORE.stop(); + } + +} diff --git a/src/integration/java/com/projectswg/holocore/integration/test/login/TestCharacterCreation.java b/src/integration/java/com/projectswg/holocore/integration/test/login/TestCharacterCreation.java new file mode 100644 index 000000000..f954c024c --- /dev/null +++ b/src/integration/java/com/projectswg/holocore/integration/test/login/TestCharacterCreation.java @@ -0,0 +1,19 @@ +package com.projectswg.holocore.integration.test.login; + +import com.projectswg.common.network.packets.swg.login.creation.DeleteCharacterRequest; +import com.projectswg.holocore.integration.resources.ClientRunner; +import com.projectswg.holocore.integration.resources.ClientUtilities; +import org.junit.Test; + +public class TestCharacterCreation extends ClientRunner { + + @Test + public void testCreateCharacter() { + ClientUtilities.createCharacter(client); + System.out.println("Created character: " + client.getCharacterName() + " with id " + client.getCharacterId()); + client.waitForZoneIn(); + System.out.println("Zoned in"); + client.send(new DeleteCharacterRequest(0, client.getCharacterId())); + } + +} diff --git a/src/integration/java/com/projectswg/holocore/integration/test/login/TestLogin.java b/src/integration/java/com/projectswg/holocore/integration/test/login/TestLogin.java new file mode 100644 index 000000000..2d57af0ae --- /dev/null +++ b/src/integration/java/com/projectswg/holocore/integration/test/login/TestLogin.java @@ -0,0 +1,13 @@ +package com.projectswg.holocore.integration.test.login; + +import org.junit.runner.RunWith; +import org.junit.runners.Suite; +import org.junit.runners.Suite.SuiteClasses; + +@RunWith(Suite.class) +@SuiteClasses(value = { + TestCharacterCreation.class +}) +public class TestLogin { + +} diff --git a/src/main/java/com/projectswg/holocore/ProjectSWG.java b/src/main/java/com/projectswg/holocore/ProjectSWG.java index c913b0f21..0f9fc12ec 100644 --- a/src/main/java/com/projectswg/holocore/ProjectSWG.java +++ b/src/main/java/com/projectswg/holocore/ProjectSWG.java @@ -78,7 +78,7 @@ public class ProjectSWG { return GALAXY; } - private static int run(String [] args) { + static int run(String [] args) { File logDirectory = new File("log"); if (!logDirectory.isDirectory() && !logDirectory.mkdir()) Log.w("Failed to make log directory!"); diff --git a/src/main/java/com/projectswg/holocore/resources/support/objects/awareness/AwarenessType.java b/src/main/java/com/projectswg/holocore/resources/support/objects/awareness/AwarenessType.java index b843e4d05..8f7f87a37 100644 --- a/src/main/java/com/projectswg/holocore/resources/support/objects/awareness/AwarenessType.java +++ b/src/main/java/com/projectswg/holocore/resources/support/objects/awareness/AwarenessType.java @@ -32,6 +32,7 @@ import java.util.Collection; import java.util.Collections; public enum AwarenessType { + SELF, OBJECT, GROUP, TRADE; diff --git a/src/main/java/com/projectswg/holocore/resources/support/objects/awareness/ObjectAware.java b/src/main/java/com/projectswg/holocore/resources/support/objects/awareness/ObjectAware.java index 089f7e15f..f6c1cb37c 100644 --- a/src/main/java/com/projectswg/holocore/resources/support/objects/awareness/ObjectAware.java +++ b/src/main/java/com/projectswg/holocore/resources/support/objects/awareness/ObjectAware.java @@ -63,14 +63,16 @@ public class ObjectAware { for (SWGObject removed : oldAware) { if (objects.contains(removed)) continue; - if (removed.getAwareness().removeAware(type, object)) { + if (removed == object || removed.getAwareness().removeAware(type, object)) { object.onObjectLeaveAware(removed); flush = true; } } for (SWGObject added : objects) { - if (added.getAwareness().addAware(type, object)) { + if (oldAware.contains(added)) + continue; + if (added == object || added.getAwareness().addAware(type, object)) { object.onObjectEnterAware(added); flush = true; } @@ -134,24 +136,12 @@ public class ObjectAware { private boolean notAware(SWGObject test) { for (Collection aware : awareness.values()) { - for (SWGObject obj : aware) { - if (obj == test) - return false; - } + if (aware.contains(test)) + return false; } return true; } - private Map getAwareCounts() { - Map counts = new HashMap<>(); - for (Collection aware : awareness.values()) { - for (SWGObject obj : aware) { - counts.put(obj, counts.getOrDefault(obj, 0) + 1); - } - } - return counts; - } - private static Set createSet() { return ConcurrentHashMap.newKeySet(); } diff --git a/src/main/java/com/projectswg/holocore/resources/support/objects/awareness/TerrainMap.java b/src/main/java/com/projectswg/holocore/resources/support/objects/awareness/TerrainMap.java index aa2c26967..9f9bfa83b 100644 --- a/src/main/java/com/projectswg/holocore/resources/support/objects/awareness/TerrainMap.java +++ b/src/main/java/com/projectswg/holocore/resources/support/objects/awareness/TerrainMap.java @@ -94,7 +94,6 @@ public class TerrainMap { else aware = new HashSet<>(superParent.getAware(AwarenessType.OBJECT)); aware.removeIf(AwarenessUtilities::notInAwareness); - recursiveAdd(aware, obj); return aware; } @@ -121,14 +120,4 @@ public class TerrainMap { } } - private static void recursiveAdd(@NotNull Collection aware, @NotNull SWGObject obj) { - aware.add(obj); - for (SWGObject child : obj.getSlottedObjects()) { - recursiveAdd(aware, child); - } - for (SWGObject child : obj.getContainedObjects()) { - recursiveAdd(aware, child); - } - } - } diff --git a/src/main/java/com/projectswg/holocore/resources/support/objects/swg/SWGObject.java b/src/main/java/com/projectswg/holocore/resources/support/objects/swg/SWGObject.java index 1b9467c13..c9a20a343 100644 --- a/src/main/java/com/projectswg/holocore/resources/support/objects/swg/SWGObject.java +++ b/src/main/java/com/projectswg/holocore/resources/support/objects/swg/SWGObject.java @@ -123,6 +123,8 @@ public abstract class SWGObject extends BaselineObject implements Comparable damageMap = new HashMap<>(); @@ -84,6 +85,7 @@ public class CreatureObject extends TangibleObject { public CreatureObject(long objectId) { super(objectId, BaselineType.CREO); initBaseAttributes(); + getAwareness().setAware(AwarenessType.SELF, List.of(this)); } @Override @@ -100,7 +102,7 @@ public class CreatureObject extends TangibleObject { public void flushObjectsAware() { if (isPlayer()) - awareness.flushAware(getOwner()); + awareness.flushAware(); } public void resetObjectsAware() { @@ -118,6 +120,8 @@ public class CreatureObject extends TangibleObject { @Override public void addObject(SWGObject obj) { + if (obj instanceof PlayerObject) + getAware().forEach(awareness::addAware); super.addObject(obj); if (obj.getSlotArrangement() != -1 && !(obj instanceof PlayerObject)) { addEquipment(obj); @@ -148,6 +152,26 @@ public class CreatureObject extends TangibleObject { } } + @Override + protected void onAddedChild(SWGObject child) { + super.onAddedChild(child); + if (isPlayer()) { + List children = new ArrayList<>(getAwareness().getAware(AwarenessType.SELF)); + children.add(child); + getAwareness().setAware(AwarenessType.SELF, children); + } + } + + @Override + protected void onRemovedChild(SWGObject child) { + super.onRemovedChild(child); + if (isPlayer()) { + List children = new ArrayList<>(getAwareness().getAware(AwarenessType.SELF)); + children.remove(child); + getAwareness().setAware(AwarenessType.SELF, children); + } + } + @Override protected int calculateLoadRange() { if (isLoggedInPlayer()) diff --git a/src/main/java/com/projectswg/holocore/resources/support/objects/swg/creature/CreatureObjectAwareness.java b/src/main/java/com/projectswg/holocore/resources/support/objects/swg/creature/CreatureObjectAwareness.java index d0270b3f8..c7a509ba6 100644 --- a/src/main/java/com/projectswg/holocore/resources/support/objects/swg/creature/CreatureObjectAwareness.java +++ b/src/main/java/com/projectswg/holocore/resources/support/objects/swg/creature/CreatureObjectAwareness.java @@ -42,11 +42,13 @@ import java.util.*; public class CreatureObjectAwareness { + private final CreatureObject creature; private final Set aware; private final Set pendingAdd; private final Set pendingRemove; - public CreatureObjectAwareness() { + public CreatureObjectAwareness(CreatureObject creature) { + this.creature = creature; this.aware = new HashSet<>(); this.pendingAdd = new HashSet<>(); this.pendingRemove = new HashSet<>(); @@ -62,6 +64,7 @@ public class CreatureObjectAwareness { } public synchronized void removeAware(@NotNull SWGObject obj) { + assert obj != creature; if (pendingAdd.remove(obj) || !aware.contains(obj)) return; if (pendingRemove.add(obj)) { @@ -70,7 +73,8 @@ public class CreatureObjectAwareness { } } - public synchronized void flushAware(Player target) { + public synchronized void flushAware() { + Player target = creature.getOwner(); List create = getCreateList(); List destroy = getDestroyList(); @@ -92,6 +96,9 @@ public class CreatureObjectAwareness { } popStackUntil(target, createStack, null); } + + assert aware.contains(creature) : "not aware of creature"; + assert aware.contains(creature.getSlottedObject("ghost")) : "not aware of ghost"; } public synchronized void resetObjectsAware() { diff --git a/src/main/java/com/projectswg/holocore/resources/support/objects/swg/custom/AIObject.java b/src/main/java/com/projectswg/holocore/resources/support/objects/swg/custom/AIObject.java index 9aaad84ac..d6c9cb92c 100644 --- a/src/main/java/com/projectswg/holocore/resources/support/objects/swg/custom/AIObject.java +++ b/src/main/java/com/projectswg/holocore/resources/support/objects/swg/custom/AIObject.java @@ -105,19 +105,19 @@ public abstract class AIObject extends CreatureObject { public void addPrimaryWeapon(WeaponObject weapon) { this.primaryWeapons.add(weapon); - weapon.moveToContainer(hiddenInventory); + weapon.systemMove(hiddenInventory); } public void addSecondaryWeapon(WeaponObject weapon) { this.secondaryWeapons.add(weapon); - weapon.moveToContainer(hiddenInventory); + weapon.systemMove(hiddenInventory); } @Override public void setEquippedWeapon(WeaponObject weapon) { WeaponObject equipped = getEquippedWeapon(); if (equipped != null) - equipped.moveToContainer(hiddenInventory); + equipped.systemMove(hiddenInventory); weapon.moveToContainer(this); super.setEquippedWeapon(weapon); } diff --git a/src/main/java/com/projectswg/holocore/services/support/global/zone/LoginService.java b/src/main/java/com/projectswg/holocore/services/support/global/zone/LoginService.java index 3c10c0eef..192f3fb6b 100644 --- a/src/main/java/com/projectswg/holocore/services/support/global/zone/LoginService.java +++ b/src/main/java/com/projectswg/holocore/services/support/global/zone/LoginService.java @@ -32,6 +32,8 @@ import com.projectswg.common.data.encodables.tangible.Race; import com.projectswg.common.data.info.Config; import com.projectswg.common.network.packets.SWGPacket; import com.projectswg.common.network.packets.swg.ErrorMessage; +import com.projectswg.common.network.packets.swg.holo.login.HoloLoginRequestPacket; +import com.projectswg.common.network.packets.swg.holo.login.HoloLoginResponsePacket; import com.projectswg.common.network.packets.swg.login.*; import com.projectswg.common.network.packets.swg.login.EnumerateCharacterId.SWGCharacter; import com.projectswg.common.network.packets.swg.login.creation.DeleteCharacterRequest; @@ -94,7 +96,9 @@ public class LoginService extends Service { @IntentHandler private void handleInboundPacketIntent(InboundPacketIntent gpi) { SWGPacket p = gpi.getPacket(); - if (p instanceof LoginClientId) { + if (p instanceof HoloLoginRequestPacket) { + handleLogin(gpi.getPlayer(), (HoloLoginRequestPacket) p); + } else if (p instanceof LoginClientId) { handleLogin(gpi.getPlayer(), (LoginClientId) p); } else if (p instanceof DeleteCharacterRequest) { handleCharDeletion(gpi.getPlayer(), (DeleteCharacterRequest) p); @@ -112,6 +116,33 @@ public class LoginService extends Service { return name + ':' + id; } + private void handleLogin(Player player, HoloLoginRequestPacket loginRequest) { + if (player.getPlayerState() == PlayerState.LOGGED_IN) { // Client occasionally sends multiple login requests + sendLoginSuccessPacket(player); + return; + } + assert player.getPlayerState() == PlayerState.CONNECTED; + assert player.getPlayerServer() == PlayerServer.NONE; + player.setPlayerState(PlayerState.LOGGING_IN); + player.setPlayerServer(PlayerServer.LOGIN); + + UserMetadata user = userDatabase.getUser(loginRequest.getUsername()); + player.setUsername(loginRequest.getUsername()); + if (user == null) { + onInvalidUserPass(player, loginRequest); + player.sendPacket(new HoloLoginResponsePacket(false, "Incorrect username")); + } else if (user.isBanned()) { + onLoginBanned(player, loginRequest); + player.sendPacket(new HoloLoginResponsePacket(false, "Sorry, you're banned!")); + } else if (isUserValid(user, loginRequest.getPassword())) { + onSuccessfulLogin(user, player, loginRequest); + player.sendPacket(new HoloLoginResponsePacket(true, "", getGalaxies(), getCharacters(user.getUsername()))); + } else { + onInvalidUserPass(player, loginRequest); + player.sendPacket(new HoloLoginResponsePacket(false, "Incorrect password")); + } + } + private void handleLagRequest(Player player) { player.sendPacket(new GameServerLagResponse()); } @@ -142,28 +173,34 @@ public class LoginService extends Service { onLoginClientVersionError(player, id); return; } + UserMetadata user = userDatabase.getUser(id.getUsername()); - if (user == null) - onInvalidUserPass(player, id, false); - else if (user.isBanned()) + player.setUsername(id.getUsername()); + if (user == null) { + onInvalidUserPass(player, id); + player.sendPacket(new ErrorMessage("Login Failed!", "Incorrect username", false)); + player.sendPacket(new LoginIncorrectClientId(getServerString(), REQUIRED_VERSION)); + } else if (user.isBanned()) { onLoginBanned(player, id); - else if (isUserValid(user, id.getPassword())) + player.sendPacket(new ErrorMessage("Login Failed!", "Sorry, you're banned!", false)); + } else if (isUserValid(user, id.getPassword())) { onSuccessfulLogin(user, player, id); - else - onInvalidUserPass(player, id, true); + sendLoginSuccessPacket(player); + } else { + onInvalidUserPass(player, id); + player.sendPacket(new ErrorMessage("Login Failed!", "Incorrect password", false)); + player.sendPacket(new LoginIncorrectClientId(getServerString(), REQUIRED_VERSION)); + } } private void onLoginClientVersionError(Player player, LoginClientId id) { Log.i("%s cannot login due to invalid version code: %s, expected %s from %s", player.getUsername(), id.getVersion(), REQUIRED_VERSION, id.getSocketAddress()); - String type = "Login Failed!"; - String message = "Invalid Client Version Code: " + id.getVersion(); - player.sendPacket(new ErrorMessage(type, message, false)); + player.sendPacket(new ErrorMessage("Login Failed!", "Invalid Client Version Code: " + id.getVersion(), false)); player.setPlayerState(PlayerState.DISCONNECTED); new LoginEventIntent(player.getNetworkId(), LoginEvent.LOGIN_FAIL_INVALID_VERSION_CODE).broadcast(); } - private void onSuccessfulLogin(UserMetadata user, Player player, LoginClientId id) { - player.setUsername(user.getUsername()); + private void onSuccessfulLogin(UserMetadata user, Player player, SWGPacket loginRequest) { switch(user.getAccessLevel()) { case "player": player.setAccessLevel(AccessLevel.PLAYER); break; case "warden": player.setAccessLevel(AccessLevel.WARDEN); break; @@ -173,26 +210,18 @@ public class LoginService extends Service { default: player.setAccessLevel(AccessLevel.PLAYER); break; } player.setPlayerState(PlayerState.LOGGED_IN); - sendLoginSuccessPacket(player); - Log.i("%s connected to the login server from %s", player.getUsername(), id.getSocketAddress()); + Log.i("%s connected to the login server from %s", player.getUsername(), loginRequest.getSocketAddress()); new LoginEventIntent(player.getNetworkId(), LoginEvent.LOGIN_SUCCESS).broadcast(); } - private void onLoginBanned(Player player, LoginClientId id) { - String type = "Login Failed!"; - String message = "Sorry, you're banned!"; - player.sendPacket(new ErrorMessage(type, message, false)); - Log.i("%s cannot login due to a ban, from %s", player.getUsername(), id.getSocketAddress()); + private void onLoginBanned(Player player, SWGPacket loginRequest) { + Log.i("%s cannot login due to a ban, from %s", player.getUsername(), loginRequest.getSocketAddress()); player.setPlayerState(PlayerState.DISCONNECTED); new LoginEventIntent(player.getNetworkId(), LoginEvent.LOGIN_FAIL_BANNED).broadcast(); } - private void onInvalidUserPass(Player player, LoginClientId id, boolean usernameValid) { - String type = "Login Failed!"; - String message = usernameValid ? "Incorrect password" : "Incorrect username"; - player.sendPacket(new ErrorMessage(type, message, false)); - player.sendPacket(new LoginIncorrectClientId(getServerString(), REQUIRED_VERSION)); - Log.i("%s cannot login due to invalid user/pass from %s", id.getUsername(), id.getSocketAddress()); + private void onInvalidUserPass(Player player, SWGPacket loginRequest) { + Log.i("%s cannot login due to invalid user/pass from %s", player.getUsername(), loginRequest.getSocketAddress()); player.setPlayerState(PlayerState.DISCONNECTED); new LoginEventIntent(player.getNetworkId(), LoginEvent.LOGIN_FAIL_INVALID_USER_PASS).broadcast(); } diff --git a/src/main/java/com/projectswg/holocore/services/support/global/zone/creation/CharacterCreationService.java b/src/main/java/com/projectswg/holocore/services/support/global/zone/creation/CharacterCreationService.java index 166d757b9..80881a801 100644 --- a/src/main/java/com/projectswg/holocore/services/support/global/zone/creation/CharacterCreationService.java +++ b/src/main/java/com/projectswg/holocore/services/support/global/zone/creation/CharacterCreationService.java @@ -56,6 +56,7 @@ import me.joshlarson.jlcommon.log.Log; import org.jetbrains.annotations.NotNull; import java.util.HashMap; +import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Map.Entry; diff --git a/src/main/java/com/projectswg/holocore/services/support/objects/awareness/AwarenessService.java b/src/main/java/com/projectswg/holocore/services/support/objects/awareness/AwarenessService.java index 8a39e74be..508dde8e6 100644 --- a/src/main/java/com/projectswg/holocore/services/support/objects/awareness/AwarenessService.java +++ b/src/main/java/com/projectswg/holocore/services/support/objects/awareness/AwarenessService.java @@ -66,6 +66,7 @@ import me.joshlarson.jlcommon.control.Service; import me.joshlarson.jlcommon.log.Log; import java.util.Collections; +import java.util.List; public class AwarenessService extends Service { @@ -184,11 +185,13 @@ public class AwarenessService extends Service { } synchronized (creature.getAwarenessLock()) { - creature.systemMove(parent, loc); + // Safely clear awareness creature.setOwner(null); - creature.setAware(AwarenessType.OBJECT, Collections.emptyList()); + creature.setAware(AwarenessType.OBJECT, List.of()); creature.resetObjectsAware(); creature.setOwner(player); + + creature.systemMove(parent, loc); startZone(creature, firstZone); creature.addObjectsAware(); awareness.updateObject(creature); diff --git a/src/main/java/com/projectswg/holocore/utilities/PerformanceAnalyzer.java b/src/main/java/com/projectswg/holocore/utilities/PerformanceAnalyzer.java new file mode 100644 index 000000000..d1c9c79c1 --- /dev/null +++ b/src/main/java/com/projectswg/holocore/utilities/PerformanceAnalyzer.java @@ -0,0 +1,48 @@ +package com.projectswg.holocore.utilities; + +import me.joshlarson.jlcommon.log.Log; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +public class PerformanceAnalyzer { + + private static final Map ANALYZERS = new ConcurrentHashMap<>(); + + private final long [] previousRuns; + private final String name; + private int index; + + private PerformanceAnalyzer(String name, int outputFrequency) { + this.previousRuns = new long[outputFrequency]; + this.name = name; + this.index = 0; + } + + public synchronized void recordTime(long time) { + previousRuns[index++] = time; + if (index >= previousRuns.length) { + long min = Long.MAX_VALUE, max = Long.MIN_VALUE, avg = 0; + for (long run : previousRuns) { + avg += run; + if (run < min) + min = run; + if (run > max) + max = run; + } + avg /= previousRuns.length; + Log.d("%s: [%.3fms - %.3fms] Avg: %.3fms", this, min/1E6, max/1E6, avg/1E6); + index = 0; + } + } + + @Override + public String toString() { + return "PerformanceAnalyzer["+name+']'; + } + + public static PerformanceAnalyzer getAnalyzer(String name, int outputFrequency) { + return ANALYZERS.computeIfAbsent(name, n -> new PerformanceAnalyzer(n, outputFrequency)); + } + +} diff --git a/src/test/java/com/projectswg/holocore/resources/support/objects/awareness/TestObjectAware.java b/src/test/java/com/projectswg/holocore/resources/support/objects/awareness/TestObjectAware.java index d0c03d131..29edce138 100644 --- a/src/test/java/com/projectswg/holocore/resources/support/objects/awareness/TestObjectAware.java +++ b/src/test/java/com/projectswg/holocore/resources/support/objects/awareness/TestObjectAware.java @@ -37,8 +37,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; -import java.util.Arrays; -import java.util.Collections; +import java.util.List; import java.util.concurrent.atomic.AtomicInteger; import static org.junit.Assert.*; @@ -57,7 +56,7 @@ public class TestObjectAware extends TestRunnerNoIntents { tangible2 = new GenericTangibleObject(2); creature1 = new GenericCreatureObject(3); creature2 = new GenericCreatureObject(4); - assertNotObservingSelf(); + assertObservingSelf(); assertFalse(tangible1.getAware().contains(tangible2)); assertFalse(tangible2.getAware().contains(tangible1)); assertFalse(creature1.getObservers().contains(creature2.getOwner())); @@ -73,29 +72,26 @@ public class TestObjectAware extends TestRunnerNoIntents { @Override public void onObjectEnterAware(SWGObject aware) { onEnter.incrementAndGet(); } @Override public void onObjectLeaveAware(SWGObject aware) { onLeave.incrementAndGet(); } }; - test.setSlot("ghost", ghost); + ghost.systemMove(test); + onEnter.set(0); - tangible1.setAware(AwarenessType.OBJECT, Arrays.asList(test, ghost)); + tangible1.setAware(AwarenessType.OBJECT, List.of(test, ghost)); assertEquals(1, onEnter.get()); - tangible1.setAware(AwarenessType.OBJECT, Collections.emptyList()); + tangible1.setAware(AwarenessType.OBJECT, List.of()); assertEquals(1, onEnter.get()); assertEquals(1, onLeave.get()); onEnter.set(0); onLeave.set(0); - test.setAware(AwarenessType.OBJECT, Collections.singletonList(tangible1)); - ghost.setAware(AwarenessType.OBJECT, Collections.singletonList(tangible1)); + test.setAware(AwarenessType.OBJECT, List.of(tangible1)); + ghost.setAware(AwarenessType.OBJECT, List.of(tangible1)); assertEquals(1, onEnter.get()); - test.setAware(AwarenessType.OBJECT, Collections.emptyList()); - ghost.setAware(AwarenessType.OBJECT, Collections.emptyList()); - assertEquals(1, onEnter.get()); - assertEquals(1, onLeave.get()); } @Test public void testSingleBucketAware() { - tangible1.setAware(AwarenessType.OBJECT, Collections.singletonList(tangible2)); + tangible1.setAware(AwarenessType.OBJECT, List.of(tangible2)); assertTrue(tangible1.getAware().contains(tangible2)); assertTrue(tangible2.getAware().contains(tangible1)); assertTrue(tangible1.getAware(AwarenessType.OBJECT).contains(tangible2)); @@ -103,7 +99,7 @@ public class TestObjectAware extends TestRunnerNoIntents { assertFalse(tangible1.getAware(AwarenessType.GROUP).contains(tangible2)); assertFalse(tangible2.getAware(AwarenessType.GROUP).contains(tangible1)); - tangible1.setAware(AwarenessType.OBJECT, Collections.emptyList()); + tangible1.setAware(AwarenessType.OBJECT, List.of()); assertFalse(tangible1.getAware().contains(tangible2)); assertFalse(tangible2.getAware().contains(tangible1)); assertFalse(tangible1.getAware(AwarenessType.OBJECT).contains(tangible2)); @@ -112,59 +108,59 @@ public class TestObjectAware extends TestRunnerNoIntents { assertFalse(tangible2.getAware(AwarenessType.GROUP).contains(tangible1)); // Add both directions - tangible1.setAware(AwarenessType.OBJECT, Collections.singletonList(tangible2)); + tangible1.setAware(AwarenessType.OBJECT, List.of(tangible2)); assertTrue(tangible1.getAware().contains(tangible2)); assertTrue(tangible2.getAware().contains(tangible1)); - tangible2.setAware(AwarenessType.OBJECT, Collections.singletonList(tangible1)); + tangible2.setAware(AwarenessType.OBJECT, List.of(tangible1)); assertTrue(tangible1.getAware().contains(tangible2)); assertTrue(tangible2.getAware().contains(tangible1)); - tangible1.setAware(AwarenessType.OBJECT, Collections.emptyList()); + tangible1.setAware(AwarenessType.OBJECT, List.of()); assertFalse(tangible1.getAware().contains(tangible2)); assertFalse(tangible2.getAware().contains(tangible1)); } @Test public void testSingleBucketObservers() { - creature1.setAware(AwarenessType.OBJECT, Collections.singletonList(creature2)); - assertNotObservingSelf(); + creature1.setAware(AwarenessType.OBJECT, List.of(creature2)); + assertObservingSelf(); assertTrue(creature1.getObservers().contains(creature2.getOwner())); assertTrue(creature2.getObservers().contains(creature1.getOwner())); - creature1.setAware(AwarenessType.OBJECT, Collections.emptyList()); - assertNotObservingSelf(); + creature1.setAware(AwarenessType.OBJECT, List.of()); + assertObservingSelf(); assertFalse(creature1.getObservers().contains(creature2.getOwner())); assertFalse(creature2.getObservers().contains(creature1.getOwner())); // Add both directions - creature1.setAware(AwarenessType.OBJECT, Collections.singletonList(creature2)); - assertNotObservingSelf(); + creature1.setAware(AwarenessType.OBJECT, List.of(creature2)); + assertObservingSelf(); assertTrue(creature1.getObservers().contains(creature2.getOwner())); assertTrue(creature2.getObservers().contains(creature1.getOwner())); - creature2.setAware(AwarenessType.OBJECT, Collections.singletonList(creature1)); - assertNotObservingSelf(); + creature2.setAware(AwarenessType.OBJECT, List.of(creature1)); + assertObservingSelf(); assertTrue(creature1.getObservers().contains(creature2.getOwner())); assertTrue(creature2.getObservers().contains(creature1.getOwner())); - creature1.setAware(AwarenessType.OBJECT, Collections.emptyList()); - assertNotObservingSelf(); + creature1.setAware(AwarenessType.OBJECT, List.of()); + assertObservingSelf(); assertFalse(creature1.getObservers().contains(creature2.getOwner())); assertFalse(creature2.getObservers().contains(creature1.getOwner())); } @Test public void testDoubleBucketAware() { - tangible1.setAware(AwarenessType.OBJECT, Collections.singletonList(tangible2)); + tangible1.setAware(AwarenessType.OBJECT, List.of(tangible2)); assertTrue(tangible1.getAware().contains(tangible2)); assertTrue(tangible2.getAware().contains(tangible1)); - tangible1.setAware(AwarenessType.GROUP, Collections.singletonList(tangible2)); + tangible1.setAware(AwarenessType.GROUP, List.of(tangible2)); assertTrue(tangible1.getAware().contains(tangible2)); assertTrue(tangible2.getAware().contains(tangible1)); - tangible1.setAware(AwarenessType.OBJECT, Collections.emptyList()); + tangible1.setAware(AwarenessType.OBJECT, List.of()); assertTrue(tangible1.getAware().contains(tangible2)); assertTrue(tangible2.getAware().contains(tangible1)); assertFalse(tangible1.getAware(AwarenessType.OBJECT).contains(tangible2)); @@ -172,7 +168,7 @@ public class TestObjectAware extends TestRunnerNoIntents { assertTrue(tangible1.getAware(AwarenessType.GROUP).contains(tangible2)); assertTrue(tangible2.getAware(AwarenessType.GROUP).contains(tangible1)); - tangible2.setAware(AwarenessType.GROUP, Collections.emptyList()); + tangible2.setAware(AwarenessType.GROUP, List.of()); assertFalse(tangible1.getAware().contains(tangible2)); assertFalse(tangible2.getAware().contains(tangible1)); assertFalse(tangible1.getAware(AwarenessType.OBJECT).contains(tangible2)); @@ -183,49 +179,49 @@ public class TestObjectAware extends TestRunnerNoIntents { @Test public void testDoubleBucketObservers() { - creature1.setAware(AwarenessType.OBJECT, Collections.singletonList(creature2)); - assertNotObservingSelf(); + creature1.setAware(AwarenessType.OBJECT, List.of(creature2)); + assertObservingSelf(); assertTrue(creature1.getObservers().contains(creature2.getOwner())); assertTrue(creature2.getObservers().contains(creature1.getOwner())); - creature1.setAware(AwarenessType.GROUP, Collections.singletonList(creature2)); - assertNotObservingSelf(); + creature1.setAware(AwarenessType.GROUP, List.of(creature2)); + assertObservingSelf(); assertTrue(creature1.getObservers().contains(creature2.getOwner())); assertTrue(creature2.getObservers().contains(creature1.getOwner())); - creature1.setAware(AwarenessType.OBJECT, Collections.emptyList()); - assertNotObservingSelf(); + creature1.setAware(AwarenessType.OBJECT, List.of()); + assertObservingSelf(); assertTrue(creature1.getObservers().contains(creature2.getOwner())); assertTrue(creature2.getObservers().contains(creature1.getOwner())); - creature2.setAware(AwarenessType.GROUP, Collections.emptyList()); - assertNotObservingSelf(); + creature2.setAware(AwarenessType.GROUP, List.of()); + assertObservingSelf(); assertFalse(creature1.getObservers().contains(creature2.getOwner())); assertFalse(creature2.getObservers().contains(creature1.getOwner())); // Add both directions - creature1.setAware(AwarenessType.OBJECT, Collections.singletonList(creature2)); - assertNotObservingSelf(); + creature1.setAware(AwarenessType.OBJECT, List.of(creature2)); + assertObservingSelf(); assertTrue(creature1.getObservers().contains(creature2.getOwner())); assertTrue(creature2.getObservers().contains(creature1.getOwner())); - creature2.setAware(AwarenessType.GROUP, Collections.singletonList(creature1)); - assertNotObservingSelf(); + creature2.setAware(AwarenessType.GROUP, List.of(creature1)); + assertObservingSelf(); assertTrue(creature1.getObservers().contains(creature2.getOwner())); assertTrue(creature2.getObservers().contains(creature1.getOwner())); - creature2.setAware(AwarenessType.OBJECT, Collections.emptyList()); - assertNotObservingSelf(); + creature2.setAware(AwarenessType.OBJECT, List.of()); + assertObservingSelf(); assertTrue(creature1.getObservers().contains(creature2.getOwner())); assertTrue(creature2.getObservers().contains(creature1.getOwner())); - creature1.setAware(AwarenessType.GROUP, Collections.emptyList()); - assertNotObservingSelf(); + creature1.setAware(AwarenessType.GROUP, List.of()); + assertObservingSelf(); assertFalse(creature1.getObservers().contains(creature2.getOwner())); assertFalse(creature2.getObservers().contains(creature1.getOwner())); } - private void assertNotObservingSelf() { - assertFalse(creature1.getObservers().contains(creature1.getOwner())); - assertFalse(creature2.getObservers().contains(creature2.getOwner())); + private void assertObservingSelf() { + assertTrue(creature1.getObservers().contains(creature1.getOwner())); + assertTrue(creature2.getObservers().contains(creature2.getOwner())); } } diff --git a/src/test/java/com/projectswg/holocore/resources/support/objects/awareness/TestObjectAwareness.java b/src/test/java/com/projectswg/holocore/resources/support/objects/awareness/TestObjectAwareness.java index 84a17b12c..8267f3cba 100644 --- a/src/test/java/com/projectswg/holocore/resources/support/objects/awareness/TestObjectAwareness.java +++ b/src/test/java/com/projectswg/holocore/resources/support/objects/awareness/TestObjectAwareness.java @@ -29,13 +29,13 @@ package com.projectswg.holocore.resources.support.objects.awareness; import com.projectswg.common.data.location.Location; import com.projectswg.common.data.location.Terrain; +import com.projectswg.holocore.resources.support.objects.ObjectCreator; import com.projectswg.holocore.resources.support.objects.swg.SWGObject; import com.projectswg.holocore.resources.support.objects.swg.building.BuildingObject; import com.projectswg.holocore.resources.support.objects.swg.cell.CellObject; import com.projectswg.holocore.resources.support.objects.swg.tangible.TangibleObject; import com.projectswg.holocore.resources.support.objects.swg.waypoint.WaypointObject; import com.projectswg.holocore.runners.TestRunnerNoIntents; -import com.projectswg.holocore.resources.support.objects.ObjectCreator; import com.projectswg.holocore.test_resources.GenericCreatureObject; import com.projectswg.holocore.test_resources.GenericTangibleObject; import org.junit.Assert; @@ -43,9 +43,12 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; @RunWith(JUnit4.class) public class TestObjectAwareness extends TestRunnerNoIntents { @@ -86,8 +89,10 @@ public class TestObjectAwareness extends TestRunnerNoIntents { testCell1.moveToContainer(testBuilding1); testCell2.moveToContainer(testBuilding2); - inventoryObject.moveToContainer(player.getSlottedObject("inventory")); - testInventoryObject.moveToContainer(testPlayer.getSlottedObject("inventory")); + inventoryObject.setArrangement(List.of(List.of("inventory"))); + testInventoryObject.setArrangement(List.of(List.of("inventory"))); + inventoryObject.moveToContainer(player); + testInventoryObject.moveToContainer(testPlayer); testPlayer.setLocation(buildTatooine(40, 40)); testTangible.setLocation(buildTatooine(50, 50)); @@ -134,7 +139,7 @@ public class TestObjectAwareness extends TestRunnerNoIntents { Assert.assertEquals(0, player.getLoadRange()); moveNoAssert(TestLocation.SSI); - assertAware(Collections.singletonList(player)); + assertAware(List.of(player)); player.setHasOwner(true); Assert.assertNotEquals(0, player.getLoadRange()); @@ -157,7 +162,7 @@ public class TestObjectAwareness extends TestRunnerNoIntents { initialize(); move(TestLocation.SSI); awareness.destroyObject(testBuilding1); - assertAware(Arrays.asList(player, testPlayer, testTangible)); + assertAware(List.of(player, testPlayer, testTangible)); } @Test @@ -184,7 +189,7 @@ public class TestObjectAwareness extends TestRunnerNoIntents { } private void assertAware(Collection awareExpected) { - Collection awareActual = player.getObjectsAware(); + Collection awareActual = player.getAware(); // Ensure it doesn't contain the unexpected for (SWGObject a : awareActual) { @@ -192,8 +197,6 @@ public class TestObjectAwareness extends TestRunnerNoIntents { continue; assertTrue("Not supposed to be aware of object: " + a, awareExpected.contains(a)); } - assertFalse("Test inventory object should not be visible", awareActual.contains(testInventoryObject)); - assertTrue("Inventory object should always be visible", awareActual.contains(inventoryObject)); // Ensure it contains the expected for (SWGObject a : awareExpected) { @@ -212,9 +215,9 @@ public class TestObjectAwareness extends TestRunnerNoIntents { private Collection getExpectedAware(TestAwareSet awareSet) { switch (awareSet) { - case NONE: return Collections.singletonList(player); - case TATOOINE: return Arrays.asList(player, testPlayer, testTangible, testBuilding1, testPlayer.getSlottedObject("ghost")); - case NABOO: return Arrays.asList(player, testBuilding2); + case NONE: return List.of(player, inventoryObject); + case TATOOINE: return List.of(player, inventoryObject, testPlayer, testTangible, testBuilding1, testPlayer.getSlottedObject("ghost")); + case NABOO: return List.of(player, inventoryObject, testBuilding2); } throw new RuntimeException("Invalid test aware set: " + awareSet); } diff --git a/src/test/java/com/projectswg/holocore/resources/support/objects/swg/creature/TestCreatureObjectAwareness.java b/src/test/java/com/projectswg/holocore/resources/support/objects/swg/creature/TestCreatureObjectAwareness.java index 09f4363a4..e1c67a6d8 100644 --- a/src/test/java/com/projectswg/holocore/resources/support/objects/swg/creature/TestCreatureObjectAwareness.java +++ b/src/test/java/com/projectswg/holocore/resources/support/objects/swg/creature/TestCreatureObjectAwareness.java @@ -30,6 +30,7 @@ package com.projectswg.holocore.resources.support.objects.swg.creature; import com.projectswg.holocore.resources.support.objects.swg.SWGObject; import com.projectswg.holocore.resources.support.objects.swg.tangible.TangibleObject; import com.projectswg.holocore.resources.support.global.player.Player; +import com.projectswg.holocore.test_resources.GenericCreatureObject; import com.projectswg.holocore.test_resources.GenericTangibleObject; import org.junit.Assert; import org.junit.Before; @@ -41,16 +42,18 @@ import org.junit.runners.JUnit4; public class TestCreatureObjectAwareness { private CreatureObjectAwareness awareness; + private CreatureObject creature; private TangibleObject testObject1; private TangibleObject testObject2; private Player dummy; @Before public void initialize() { - awareness = new CreatureObjectAwareness(); - testObject1 = new GenericTangibleObject(1); - testObject2 = new GenericTangibleObject(2); - dummy = new Player(); + creature = new GenericCreatureObject(1); + creature.setOwner(new Player()); + awareness = new CreatureObjectAwareness(creature); + testObject1 = new GenericTangibleObject(2); + testObject2 = new GenericTangibleObject(3); } @Test @@ -69,7 +72,7 @@ public class TestCreatureObjectAwareness { @Test public void testSingleObjectAddFlushRemove() { awareness.addAware(testObject1); - awareness.flushAware(dummy); + awareness.flushAware(); assertCreate(); assertDestroy(); awareness.removeAware(testObject1); @@ -88,7 +91,7 @@ public class TestCreatureObjectAwareness { testObject1.moveToContainer(testObject2); awareness.addAware(testObject1); awareness.addAware(testObject2); - awareness.flushAware(dummy); + awareness.flushAware(); assertCreate(); assertDestroy(); awareness.removeAware(testObject1); @@ -108,7 +111,7 @@ public class TestCreatureObjectAwareness { testObject1.moveToContainer(testObject2); awareness.addAware(testObject1); awareness.addAware(testObject2); - awareness.flushAware(dummy); + awareness.flushAware(); assertCreate(); assertDestroy(); awareness.removeAware(testObject1); @@ -121,11 +124,11 @@ public class TestCreatureObjectAwareness { testObject1.moveToContainer(testObject2); awareness.addAware(testObject1); awareness.addAware(testObject2); - awareness.flushAware(dummy); + awareness.flushAware(); assertCreate(); assertDestroy(); awareness.removeAware(testObject2); - awareness.flushAware(dummy); + awareness.flushAware(); awareness.removeAware(testObject1); assertDestroy(); } diff --git a/src/test/java/com/projectswg/holocore/test_resources/GenericCreatureObject.java b/src/test/java/com/projectswg/holocore/test_resources/GenericCreatureObject.java index 0bf537037..a24ec1a65 100644 --- a/src/test/java/com/projectswg/holocore/test_resources/GenericCreatureObject.java +++ b/src/test/java/com/projectswg/holocore/test_resources/GenericCreatureObject.java @@ -37,7 +37,6 @@ import com.projectswg.holocore.resources.support.objects.swg.creature.CreatureOb import com.projectswg.holocore.resources.support.objects.swg.player.PlayerObject; import com.projectswg.holocore.resources.support.objects.swg.tangible.TangibleObject; -import java.util.Collections; import java.util.List; import java.util.concurrent.atomic.AtomicLong; @@ -78,11 +77,11 @@ public class GenericCreatureObject extends CreatureObject { public void setupAsCharacter() { setSlots(List.of("inventory", "datapad", "hangar", "default_weapon", "mission_bag", "hat", "hair", "earring_r", "earring_l", "eyes", "mouth", "neck", "cloak", "back", "chest1", "chest2", "chest3_r", "chest3_l", "bicep_r", "bicep_l", "bracer_lower_r", "bracer_upper_r", "bracer_lower_l", "bracer_upper_l", "wrist_r", "wrist_l", "gloves", "hold_r", "hold_l", "ring_r", "ring_l", "utility_belt", "pants1", "pants2", "shoes", "ghost", "bank", "appearance_inventory", "cybernetic_hand_l", "cybernetic_hand_r")); - setArrangement(Collections.singletonList(Collections.singletonList("rider"))); + setArrangement(List.of(List.of("rider"))); setGameObjectType(GameObjectType.GOT_CREATURE_CHARACTER); PlayerObject playerObject = new PlayerObject(-getObjectId()); - playerObject.setArrangement(Collections.singletonList(Collections.singletonList("ghost"))); + playerObject.setArrangement(List.of(List.of("ghost"))); playerObject.moveToContainer(this); createInventoryObject("inventory"); createInventoryObject("datapad"); @@ -100,7 +99,7 @@ public class GenericCreatureObject extends CreatureObject { private void createInventoryObject(String slot) { SWGObject obj = new TangibleObject(GENERATED_IDS.incrementAndGet()); - obj.setArrangement(Collections.singletonList(Collections.singletonList(slot))); + obj.setArrangement(List.of(List.of(slot))); obj.setContainerPermissions(ContainerPermissionsType.INVENTORY); obj.moveToContainer(this); }