From 571e8c6b1c68e86bdcbb29df720162dd9e7a5bb8 Mon Sep 17 00:00:00 2001 From: dmccoystephenson Date: Sat, 19 Feb 2022 16:57:06 +0000 Subject: [PATCH] Updated Ponder and utilized Jitpack --- .devcontainer/Dockerfile | 25 ++ .devcontainer/devcontainer.json | 37 +++ .gitignore | 3 + LICENSE | 42 +-- README.md | 4 +- dependencies/Ponder-v0.15-alpha-2.jar | Bin 82072 -> 0 bytes installation-scripts/install-ponder.sh | 1 - pom.xml | 164 +++++----- .../ExamplePonderPlugin.java | 284 +++++++++--------- .../commands/DefaultCommand.java | 62 ++-- .../commands/HelpCommand.java | 58 ++-- .../eventhandlers/JoinHandler.java | 34 +-- .../services/LocalConfigService.java | 264 ++++++++-------- .../exampleponderplugin/utils/Logger.java | 58 ++-- src/main/resources/plugin.yml | 24 +- 15 files changed, 564 insertions(+), 496 deletions(-) create mode 100644 .devcontainer/Dockerfile create mode 100644 .devcontainer/devcontainer.json create mode 100644 .gitignore delete mode 100644 dependencies/Ponder-v0.15-alpha-2.jar delete mode 100644 installation-scripts/install-ponder.sh diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 0000000..16090fa --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,25 @@ +# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.217.4/containers/java/.devcontainer/base.Dockerfile + +# [Choice] Java version (use -bullseye variants on local arm64/Apple Silicon): 11, 17, 11-bullseye, 17-bullseye, 11-buster, 17-buster +ARG VARIANT="17-bullseye" +FROM mcr.microsoft.com/vscode/devcontainers/java:0-${VARIANT} + +# [Option] Install Maven +ARG INSTALL_MAVEN="false" +ARG MAVEN_VERSION="" +# [Option] Install Gradle +ARG INSTALL_GRADLE="false" +ARG GRADLE_VERSION="" +RUN if [ "${INSTALL_MAVEN}" = "true" ]; then su vscode -c "umask 0002 && . /usr/local/sdkman/bin/sdkman-init.sh && sdk install maven \"${MAVEN_VERSION}\""; fi \ + && if [ "${INSTALL_GRADLE}" = "true" ]; then su vscode -c "umask 0002 && . /usr/local/sdkman/bin/sdkman-init.sh && sdk install gradle \"${GRADLE_VERSION}\""; fi + +# [Choice] Node.js version: none, lts/*, 16, 14, 12, 10 +ARG NODE_VERSION="none" +RUN if [ "${NODE_VERSION}" != "none" ]; then su vscode -c "umask 0002 && . /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"; fi + +# [Optional] Uncomment this section to install additional OS packages. +# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ +# && apt-get -y install --no-install-recommends + +# [Optional] Uncomment this line to install global node packages. +# RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && npm install -g " 2>&1 \ No newline at end of file diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..d4cdea5 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,37 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: +// https://github.com/microsoft/vscode-dev-containers/tree/v0.217.4/containers/java +{ + "name": "Java", + "build": { + "dockerfile": "Dockerfile", + "args": { + // Update the VARIANT arg to pick a Java version: 11, 17 + // Append -bullseye or -buster to pin to an OS version. + // Use the -bullseye variants on local arm64/Apple Silicon. + "VARIANT": "11-bullseye", + // Options + "INSTALL_MAVEN": "true", + "INSTALL_GRADLE": "false", + "NODE_VERSION": "none" + } + }, + + // Set *default* container specific settings.json values on container create. + "settings": { + "java.home": "/docker-java-home" + }, + + // Add the IDs of extensions you want installed when the container is created. + "extensions": [ + "vscjava.vscode-java-pack" + ], + + // Use 'forwardPorts' to make a list of ports inside the container available locally. + // "forwardPorts": [], + + // Use 'postCreateCommand' to run commands after the container is created. + // "postCreateCommand": "java -version", + + // Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. + "remoteUser": "vscode" +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..857a608 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +target/ +.idea/ +ExamplePonderPlugin.iml \ No newline at end of file diff --git a/LICENSE b/LICENSE index 656bbc5..f11c656 100644 --- a/LICENSE +++ b/LICENSE @@ -1,21 +1,21 @@ -MIT License - -Copyright (c) 2022 Preponderous Software - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +MIT License + +Copyright (c) 2022 Preponderous Software + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index 321b03c..c43213a 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ -# ExamplePonderPlugin -This is an example ponder plugin. +# ExamplePonderPlugin +This is an example ponder plugin. diff --git a/dependencies/Ponder-v0.15-alpha-2.jar b/dependencies/Ponder-v0.15-alpha-2.jar deleted file mode 100644 index 6b88d5910788e9f6cc20b3f852d28b7acbe4dc68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82072 zcmbrlbCB#!)-BxKr){3LZQHhO+jjS9+qTWqwr$(C&F?%j^WC`bjhMOf#I1QhkTV!a^eB{0ouLQt@R&^)jyHIw*0dczdz5vUo6a@PwgCx?QCs~ zj2cclmWPXEW`f5QAN44nUS0sq3VHn%Z0bkH|(`derO|5r49gTJ>&rvD02?jOIO zoRzbwxebk>mA<1R=cDa14=5-o5~z#|D2WJYr+@x}|3^pSLjK2`fj77$FDoN0b1NBr zl@Kp|nHnzu6V2RSu*#1EX zU5GQ-=s&yZ`SbjHLJl&kegj7*2Yo}Qe}+lW*4kR% z#^|5XDpFNf#S%vTf&|3~hP4zx%m*eqt2NHY#~?Q71D-tjMMPxAS1>3=&-CCFv&l{0 zGVHzGJn;Ck2L(54C}uD<>l))L9@AWIs(*@)<(*rStoi(Yr7@WE{qe;43-AM81cZV) z&`BvTJ z^HFp*Qa`M)-?Z~Y%0|EUCf{o)3Mb8;JA|~;o-u``GBs<|j&e}W_%_lGy@?pvZi;c@ z1YvkL0;2yBlvtxP8Wch~1x04aPP@NJ3q~4xT~djZYq)lxgAPMpJ)&x*I8S-l zmq9H=(>^13-C1a6a^`nmdg1l4+156a0BES! z>71TY3ymz)oi}{_D4oY_NuKVoju3jf1cCiHl6hG%$vC#^OhaUJOE4#zh6ER8h{(iI=y7(2u-KjU)oLzTxKbyixV|6@h1Cb3s{>$0xv#iAbLrm`E>(SV>zAN8Ekr4<^x#PIm{s&;0_*0jrd{Q>pnf zA(`-I)})~%1ext+h#Yb7H!#FEO0`Sju{Hv=rSc}3YgDE94`k9q8-R1ia1yUmnm1AbwT;EU6;>H`Zx8y&rjG*9itCDS*n3UQ z=P>l_J2LSIdNv0^XKf*?qfr91gg$Lp-C7q;`( zJ3K9qc}?Kn0Y)PK;hG=@S9trQ=Jll-Y_>f*T z49g`>iTy>-1p-?d2S+K2SPR6+WTRYou;pZLo4(}5FbXdS2_)BD-!K$Agyl`#=n9?} z?$iF}(;d3`xjgIk2AS^5KhEItM6-Wn?4;G74H=kBk+L+iDGLTxiwQOp){e3XsH+@j zg9<%CDWR?QtIW&=|A%DSB1pyrG=9ZHoeZKEhD>&fcsF8U@iT=-@{o;&f`tHZEv;<6 z4tdz@n7opq5W)$5n1#RnZrNr!K@tX}zibhx=`HlA*os9hLKIW>Fgw*zob0@K*v5h{ zitE+cI}DhgC7Y5T@!=HX7yVl{l|Z~5LMg=b9(&_<;4wsa>m(i9lQYMqL>g&=Xw4jO&DL{~A2x!|xfwBk)n^ppIK z=+IjVLd_e3^YZT)72MZ??|8@_^dvimDaQkefId3edyoc2Ey=GFvbO?3;p{7{@W%?b zsM<4fUma4NBno$8USH#M6(hN`o-dL1VEw4A8e1|s5&FBb?p3s8;hdPHINHjmCaBVc zhGE+Lyr{1Ow>zMQ8CmcuF|BR-5|ss&c1YBPlUJ|c21VtGV@9E`Wi3_rRGbkvRRlM< z>tl6aKFgeaD6Jl0jX0EV=B~l#l~>xo?55_A5wJK=004Km|0LM_e@6oU=~D#$q2T|! zTS-z_m+9k!=Y|TBsB%C6sezyc6*JQHs(8Z-gDb{Bgb9nGR?_lIPF%X46Ee&X!`%@@ zFF~CV%1@n~no7%JH)W~6#-+6dc=}z1=T`_VE(~cN9KQe5a{Bz;sA6x=IOhAI~nq>WV7Rf3MW5O4-55O<7 z+X)lxfZEtLR7TUO%;&UcyQkwCTV8;Tera4{Hk=IrNixPttUE%SXtxgBE-b9@5xPX& zQML48Xqo!OXF2^API-g)0Z##9MeM13J1Rp2@~@@9fKxj%X|x#UmCJ`W0rRv09xgVX zDZCpw7`va$!S5xzT#FhO{e})oo2W;$X}kROi(hb(>r0Bu4o&k zquF|;jSzEL(O?3XcfFwu6_-SN1w5*A+4Y5%u!SU~C3kVn4U;pm9QBU^5H=@`KV+&} zC$p9?L9b6_Ya%O^J%dI2VRMXPmL07%&A5?hj@g6x&TI_s3brMSDG;ZP%d?*C*JW@s zn2HcDR6*;zL8@Rlf*KgtQkrCXx)kL4UMs;%4WgFxRDMCVh;h~%P7S!0u5BrI^?Q2z zAJTrGU^>1@RCfoCr+uL)Ybrig8NLjwsegk{e*!PRN{O4oHpKZanGB+jh@7_wJY$x1 zDqMzHA6n3V3IcvE?LAlyK0Jdw*xA258oadwz4Z^CW}G_Ne1QH%NJP{Nh3P+pBnAFY zgk=AlyiqZBa5T65*HtJ>d0i3H82Q_KG#F<0hlEDyQogma1fqln*`fq(Vn#3tpZKAH z@RFqq*uLf~vQ0l_RF`HZ1P zkWqD0z2VBJ_%pm2?TL#@^I0453@4f-YpL6X{nIM(Y?LC9{#-VN#bSAnxdM;FHG?>F z_&mjw*h9W-Zo4=QJpQ{db$0=Z)AVLs@H9!}@l8j#BO>h%*PxexARlp}dzH{anjyUU zI>T7dEu9WBd_TgUlN}|6NN0$0*y8XM!bwifrMx4LSAFHcPDWr*A(8>l9z8&*!h%}$ z(b^MCky?9r)R{XHAF%ecRtQm*+(@zpxsfY~YxBg!LbAT@Z9iRS>U{ru&~`T@Pn1Zc zRRHq0gnne)zVlHx$t{NsWMFv`f$NJyMF&n}AJ#B6N;C15T_*-)4#m2M9~hC=Y-PDj z&Sh#3H%bDcV(L${Dmf1llsN{=#X?bHNfGsF&9!20I@v=7X7-#>nsb#!x^ZMZ@pTpm zl=SCU1!tG#O3V^McLlldnR+vJhI0xNs#yc~cz3V1^6FVq+~+|Ov;E=7 z+(0zYrkOCeZOk(*&AFDXylRT*FXL=Gj*9v5x(Vu^prK|{0|r|HLSR)|d!%>`-n?Uq zNh&!;e76rwntG-0W+p{nR$T9~zw=Ksqe;8?#a1Oh!e|7}3x7KMM9JCF-hz=ZXtm*c zxXexm;W?O~%F9HIv}%`*HOu*XUMc;)c09mtkqs*{Pd}Os0eO?<;p5d76vfVb+Sflr z@{&M!oXxk>L8Bh26bG&u`N#Ol^&1L*=kGOw&C~3ieWeyT- zE$8KshjQj!qN+}pgqK&}Tr)DvgP}reQL_}uUIg-yNkDXq%~kf-3JXVhQv8MGZhpMv z4LI7?=}QKJLTq?WbsoQNI$pKDKEA)p0!-Vh2?Gj)5TjUE?-E^5iYR1bb}-51zQ*8tnvMU-qV|GKF2N=aGIm{YLhFFac&XWd%=)!+e}OuCHlU z6^pJNO}|pu*ZKX_tsz>nbKM|{;bUnwKrq0>$#U~p&Eo6mS5ZNO>m5bvQA3+zPzs>XS1Jc9B(2yXP8Zi??qFJNV+a2KK~qG_zs@{yv2@NsFc2BZz}p z36@@ImDjgGeRM^48@G|b^yCU?9!3?~&CMk<%~S+eiLRUH)isoSxYspMD$Ws_gtL7 z-$wsevP&ObH~%cgUa#Il~$Q8!Vf5IAcYfzO8&@Kt6UizHG(#b zPjfO67_4@&z3ggtvX$+=8O%n6d&H9EeU`m@SlMDtfCn-Zmwope^?u$wbiHnW?i$8@ z_G$m2N9uD|0Eq*rgTSN2SlNOnExy}ONZdcXkBYo%PykLd>8^COMQk1S&BOQOC)%!GSA4FIuFfb3Yt@it-vDOO6<7Gjw?l?Ol3tW zl3ZD3;^tTOsF;SqggWEG2yDNR8j7PmI!bN4endNxB1x|iO@Y}`sZlH(uL>K0rck8- zev6GCh$KoI#E*z$n(pDrYN>5RgcJJbZYf*7(fMwEi(`LaMrK*WrMH|Ukq6)7n2v= z0Xu=ZDB++^QK3(cS=I0I0KS5+V0vLtO1oYZE>1pg7~ZIspeFBA=qYqD$O9_B1XFZS zJS)sZk&hZPlU=MS=piEsO<7D%3}K*Hx!`A*oM#~}(1;5L{1Cww>c^nOf@Xm<8Lt%8 zEKb+d;#-h~)NuzFhSsMqkWKe+5o?jE^1A`uzqej8%cbqcEe03G9y%sobx{F&bgoQG zbG**Jp@(#(9}U4yYk*8fPES%8El_+EOP)sK$u4aN!;nB`mmajnq+T<;2{o8#hlyES z*qC~7($06I0a}~}*?Cv*18o=`0f|lWx14&U7M8A+AYhH^3B) z=>u=-uu#Eb!6bLWWEOOS-k?TpG|M9Q;XG08&AWcg5Q06f_(bZ%e1c=Dpy$IoP;Bj_ za~-`EO}}7GbSZE#MU9`fSQBNZz__O5JX20aAY6of07bRNemQ>PVHh-%F>8)@GkA*< z6V|L_mj^;pyXt2QnTUgGH>{ z5w!btzf^@f!k5vOXj2r^*^BFPJ5^ipF-!6|i%FPA$Iyu!*Q$^`DBF>)G_Pm7$ohxw zCJDRfa&bu1N_DZ5Ut z?gc{cIJI2su)b1a(LX+v3na`R5qBX#wAZIUD>cRm)2DtGNVIFb;>t{6i?)}~;t}tw zbSJYNLTGm-OHT3dItDTLL{D|cohUc zt0*mET2zM;#fAm32DhGwT{xxLTL7qw(sP&N4ag=oh@RVYB>Y~=jHagETI&b4leOw> z#;T~U$EN?Tvxf364AZTpug@pR=j^786Oym#TKB_TfiB$W%gs;k?czma4M)#+f#x28 zX8g?7pf&ZEFfD$gd8+gzQWk#Ru&lwCq*` z78+nD!cEC~RsASy=FV8V+8tmk3-2$#^ys`oW6Wau<6gf3A2d9ZruxCvtv|Y3DW@m?{G^MxSqeZ@i-W}T$DPWgo3r6lzz&f50^zqB*+V zz|zTYn3y2l!{aXEYpohKfowve2A6kfCx6!8vl+(oumj@6oBg3MWK+5lKt+&R9LN>J zFfG|te8YU}^%DHF z%x_lN6~Y3z4f&$ebCa_|uBX)zk=}0fYZr|3n)eIlFFS-3?+f?vN4=i@)c*dx9r~}+ zO8-m2q-+iKt&IPN#1v^jc_|$x@tQJ>WasDh ziKkCUyWK*^qgZnF)?2hto(XSrF{f;rNrI5@z8JSztlGTfXf>qt(??Bv%7JcFHjcZ=Y}>MUm7nXVUP4WCHEee@AQl~y&ecNm8aAJ!PCuif|cLH(eSLne=pN z8l3v!jEk+<58fL%rka0|t6K%x=@iYsHl&wPm{2-X%?CRHOOXFuHxkZ}u_P9(MImh4 zl7O|2G<`FK7}f#Qm}aW_!Dzy?5Hcz!F&X@}@Nj{rEp~~aT{u5T(0CXF>1w3IwMxt3 zbhc1b$5hf!T%0wbhQP>&Njw5|pm{ZM0ifN79O!Ljs`2u0(jb0O-doLmRPFSuiSG4? zn8>^7tRbqYf7IndLy_3qGnS@=lBrFhq+(>mII>R8lfe2(64a7&fE)8Im1MaYb#0^Q z*DN9O;>bc-%v*#V32Fg~x47lVFSsf4-GEE%0>82b(+aZU`9*_*JFyKWs?oz#D|fMy zK(Y7l}^p|w!r3wilCq;BcZc@ASUunAyENbT7z?JWPDt**K{WhIg*JlU<+j==KtrE;r610&GkcGM=StYTp{P`*;Ot+&x zez!he8dBBJJ;Yqu6Q>X~JrfcXVW7s=R}%L$NefX$-$O#uxMI%8v{S%RoHdA}yet*O=KL(^vKA@0)WOzSj6!awZkZg!FeHT) z*EUXTA<*4|P==WR4)1iFzNdL{uw;_s9x6ZVC;sEw$o|)u8J(!7(+4u{WW_ncxXxau zHe-z0#alP9_{k|k5&Du~phVRm11xTtcV-WP64F!h;@iP_@FcahhDfJ53OO0+=Jx%a z8zyg+0^a4*UoCYeR1gkkJ+DC}#AvX$&9kBE zh#+;W#q|>Y`sO>o3H8;XqeD)|F+PK2ro(Q~NsC-|3i>Z3CF6~qG2$xGQ^qlfl50J6 zN>Bq;0UA;U-oTJ=Rh>NIbOi897*;mw5Lcb=oSvcOglkS7QV5zSLPdT&EK5Q0aDWcZ z_Y8J}EU;mVm&EbCXy&D2E3D!t>JY<~t)Yyeh&8U+pzQl9mvkes)kLhmwk>99k|Nif zK5%sQG6}m}6Wm#}bNhM!;VS*Wg56$zP%ago^4C|JjO`q2>|kBqRH}7=7M|3H&VY-A zw>S<=#*c>>sU(wpVna#vl(7d{j!(u?!%%I4i!ZvA~l|FQq67eL{T7=4(!tXPB;jEu0F+8c>4t zRpT(9?0t)td>3tt9it)8nY2}YExeu1dAlQgJQ^b+_&wWcGU%HIOYzrj&t5ZosFpmR zz_oU{RGRRCE!;bc0RO@+=Oq^{;qlI$4{^ep34JjO>1tEpMbuwf z9X1Zt=A5@||5Iv5d6^Moh67h9R5jXV>LIL4*iz}v&N zVn>{tb6lXm2U6hih$QIs3$vDiOd;LLCRwD+tK=p*P9>|~rXr<5I%=BALfQkg@<65l zl^TZjpx#Mm!n9ypGz~rwv}eVH2`*uf5}3rD++-P(PKzl~COA>972(Ae=7v2qHXHDT zuwlMdP=w5w__rNdV6wQJ)Ed_FLZ|}$1f>&?Dx`1H{tb;|NefXAn~LldlsySH!rafK z(YZyAnz*7v!GPIRl$}PtKzhmi))NbuJC82DeJE#};|TbZ*9l9>q5a}9Zp}5%K#MKo zR~=EUpS!SGoQKGA2&_n-r-0~dx%VPpXu(9_Duz|K>yB{*2H3~jXa#SG=A$J%k?=8h0#$iXE0d_#=8!`A&GDp z;%h?6k8#fBaI%z4YvLRGO#JQyHa=~PkU@~@OhJOl&`)nNLgtW(RjH(8T(H#OMpShu z{8_qbrAF`W0`_U9x)Y!DO}hY^I^vn0idElRU(uE5Epc(HBw{4FSmtl|Yd#b#3!nXB ze*uB{JyNP;2RLSiX6w?9qIrKSel6)?E2sLFNGZN)wg%+@TY6MK$14eD%rlU}8Gt{w zWo@c%A|V?i?F_%XeV`)8hS6BNB?slpZSZfo*H85??jiT4ZM zWh}T#tQVdz7DXBM-R;vS3=S5lWs; z>E%Hr?{Pyo`WMvf;yyA!dSo%qk?aO`$ z0zT$D9$Z%*_ZaDklre7GLAS}$<1(g6&n?impBBpJQw}wf8|Un297(aL9oUpK{fdcW zi5+tL;P!^|2y+-Q@{3Cd>2`tT_M8yS2{AL~At=w|x7_I56th@&^IGMF?o44v^Hdr= zs-^6M5j6)DVqXFlZ~!7KEvV<}Oe?%=b4*MIfT3~ucS6!Tj8GD1ce!Q{4;Og?O6fLqs{y4?6t=8cIO1MKPeV= z2#B}z6|TZfqi1bgZ{6Xk`zQw_B=48t%4dn?Jk9+EDLY`4ZWiU_fo=1XXlf4KbqE{0 z8c4=vdrW5z6W}=pkI`KRlcH8;_o%X(Q%IOi%we({(w)`Y^u__xL;YZxYxzMBXpXDX zV~oo*wOUv0Q@(}otf_wpJ15g{OQbmC7U`%bJa0+OC6W)#Ql#@8&pTNJpf30Iou5Ls z<@N-sa)di#J^S2A*Z7YKX762AlUiWw|7gifF5)l6nAU6pg$kqbABiyMa^7jJ=i{@U z620>oHEy44v?PAXik6eY!7^Tp0x7O~kkU+ZL?G=@bN_iujL@{itRlKPcG`!M>>jR> ze&FJfe4$DPv~E2r{aWx&zM@pGIArs9>$k5P@)HU+s!kWK#|UY0)`aN%r-o1p5I9S3 z{(6!N{s_$6YUV-WoMTmm>946n%N2hggLw*y_h0@PlLt%B@Saq>i!J50PRh8xk-^Ob zJ=NzzG~2PPK}f$5^n@3Xz%8b+_E%MoN`-I=*?(9h=QwwyI<~Mvxk7M)pO_7>*akn_ z3?EPZP?|3Tx=KLgiuK;sw~O6|C>eK`KBdFm2-_p-W|Jx;ij3>?0!99bxK#|22+DVH z^N;~p<#Hoa1UVYs%{6y+g*m zvHHQ~4I1(*`559+kJh?x@;G&8_V7!@uO(o7yd=3>Vw{+*B-!*-E;;(5faDq>(Sf_% zU?{0qTKdXeh$ z+=qW%Z9}e}(Wxbc&es=!v{~gV*fo6&gDD?MJ{Wu{9046pe$WG5mUK+63K!%&SFoPf z22^Aa_#EcTzMN%}D_BtYtm!ISWS5L>i$%_LUm%Tz>1jsnS4{!`%P3Ic4EO%2R{>O? zb~XZzQ|qLq6J$<1HY*a=$!BzG@#wuTOjBctS-mbF57&=G&d^rDRPUep-Jvi(5X_&o z&8rf8N%e!H)wV(F9sZLR2kQrIr_yi16}xm+cyb)qXq}CXr{fQu2ygbs^d6>`_u!wZ zsNo;97`nONBp%s5=LNGb?^t{H;7nrz38+aVQLv2DWcONGvAbSK+t7v!^32E`a}N}Y;y;-W9VG5?@qE+p61#gqYLHv>!bz>e!`*1eUKN!-ILPE=x<-$W z%Xt}eeO~Pcd0`uin#~gP-@g!jv$mUaOjwc@U+bl^q@8`fmDQhIu?zY&Gc-liI0xJ} zT-uUr`Z{!f+;s)Rbiq>j2ArKr*I1Sbieo5Yk4Zt^UD|}qose&pA}014!ukTOT&Y5W zh4KPp))=<_Kz2Pgh{yqHJn<@}AMYJPsO~Fi+eedK^N1wfX9Rhfnja|O@(wh0E_WC+ zbxUn32bfQXYH!xa-gmMn*^N79H?B-R-$Xtf`Z26)G3780SbpwMy`TK98R#NEJ}#yO zV%gX+a7u5%nK^9yO7~0&-W`n!RBKbHX;+o+dBWqzZFJ*9`?37vE37MM*0%rWHsGSB z+N<^h%65U}$@|VNi+0Fw&yx_fPnJzt-k!G{|NfX0h&TH9Bhs52P8^~p`HDOLk?VcV zSDKf7ABUw}g9gI}({u0|k5+PA zM;Xm;M&Q?J1mAAHnj6W7v2Gf%@LE;yV`O9jp@sJaAZhm)0p8#$@4NI(+o{=pnl`d|`I(>eWbqDEm2k3N%=v+UtINYAO`I^f9>>u#Oz3;V(n7!32fDElcNd)^&$iUJaMN4jY=%1#Yb@04tO zS^ZYZ3&@I^B;2S^ITKc^pU-4MeWsdxO+Ks*>4{Dd-N`JFJ9XFlhGOgVDazH=x+tq( z0cnC{)2UrO)~{!D=viLLPd$EBIi$RuwV!@z2>SF+ckT z{41@65AWh@h6n%BPy_*6Qz7Ww`$yw1AbZp{1aiv7x20!@s&~R8Ac= z7g4^sC7X<1hh&hk5D^g(;@u($6p&2iF=CBY5#o$Bb?W%&rtj)M4b)}L#DNlt`Bt8} zH=)QH_#)ITawq8KX@gE1uz7C$WK7>goj{AF(SseYHN6gtuw#!pJ+Il1vmJeoHyp3t z?^%6c(0UqEpYuRz;5MKeOBHM15ZHVTi@;=@1beL7?h7dIM& zc{+pii(DxP68#J#CNSLm{4|&8j@M@_dCw1Xx~LU|rPCT5t!N`WB{ckuBZNJ+2)52t z%n^Go!8(Ht{+ag`9H(TwP8y( zV>;CU1ML|6euoI-4+hGq8Nw!Y`6TxcbVPqsVx=Q&eKChE3{p>)GXU~B zy|M5)XhE&G5>ukA@PWNdmOeU)9npliyj}V*$H-l_;{_3gf-s_zjS;(q*eGlnXuCt$ zW0PR|^Iwm`9>&pQbToUtpI2ceWLlkZ`uckQ{75a8bSjP|XvOTVjp!p5N94iizZW5m znO&3dNn2FtDq7uxHHFzZceQpr<&}1te^AVi7fwN%H?}cCo3^&KnGt10lX?raW$nWH zj9`}TT=pOLXSIw6w4-13ww9Ba;HXoSn>VsyGm<4`XWi`ba~<^dL&xmM-zjpu%hStwCs2wTT7;|4kXY~tNVXQ53aaPFf5wg$P2ICG z4-9Szk9#CjEQAd2-0hKryziYl`M&YtnIzUD`DMyO%Ecir{KB9+SHzvR@KcB4$}uVy zm(2~Ta0}j5=Mt^`Q@t6NCIhF@?4xAkH~#SVPfym?T9kxFy)lH;8Li!SQ$L@p(#Q1) z&vCzT4A$LAfn2Hy)b-Pxmd1!6ux@9PuwoRH7C%!iySr#nK~sUC$Vw*y!Q(7P)X~rs zay8c|X}Fa2nRY=fHdu_vzocAQY3s}47yUKnw9&D&R6``RD4rr|QY<^ExwUvYXw#23 z!PCj6C3lZxAYX&(ITny?dq%J{=T+s;yLSh5)1n)&{zxL;LR5trxa52! zBT1R_iP4S!b>62kS$y8AYs*&rB~I}YT;Eg%gL3lZr3gZL`I-y~dilBpx%cGd3G#mF zZVAHgxh3DLeAKboZHcq|hczkM4IM4OLY!U?Tj9zr>A6<@E^pUEux+CnC&A`};A?dJ z3Z`NvfG6r;C+ZNTsMX*3JBVuATIlCI5SD6v9%6kMakVazYM#WEtYT{K<-ec4;VQEN zA2s^gLSkJImO2BSarHN4)!^Wl==3i?WYm1m^|G|Q0zoOw>W=#*xh)D2PDo<*TH=Sk zT@%lCG;G&CvJCGVjO#a>92@+jo<0JNz7G`MeOgYl2;M)D;{eB;CGPSzZ}U3WLadA7 zY}t7}CdcfTnw%pNmm?FG#mQ^h5|=9zRRzZ^^EhgXjPKh5+5k@W4N+v^!!gNgSmkwO z6?ANiJEC{dZ1T>(TLP)h@y2PUP7A}Vr+Qh;2A6H$T|LUcOeklFp?rq@yW3DIf1aHd zEGgAw;-fSUv@P5M+MKVyLVPX8m7h9*9p4tPzC4w*zB%T6d80-Rf1Qs-{*C7Pz0=&Q^;x>EOktvG%#?a8FS@x|B652*W z9k}iW`AfBRfww(x{`5F=!2T!I{+rS&XlrHb@IR$hLE3hn58hkTcXp@H+ANb~MgbC} zB&;?N9z5Iw4@jPzIz&mBq9m%F%?8WX?m}YY^#@j~!>$G!@<1N%ubkeR9VIkQ{$Ch0 zFLa!oKKDnH6F%IZ4nR9B80=E~^ttIXxr`GyH-cBdTo0KgSwD7%px=J*KJ3GQ4pv_t z*}=|(I*?5D8>Obi9XrMAOvhxIqzp@=kAy0~y2pm%3l3Iu+e-IUmI#3$F{T>J32vbZ znJjB`k2mj+z;XAX*!T8ygdtXTKSTi_Bhn(_K(ltriR6!l3@Fu2BQ8D_mmTo~jnNL>RdHTPpW;o;+ zO*DXaWIb>atnFs~A{b0|a<3gHR=3T{+X;)i3#nW#h zM_X+>aS}bJ%$_tJX*RriYI?y_w9Xxp`x>@Ecd$+qs&>05`JDVDe=?DXqHGbnrui)H znM)CMiL-&tij=XwL|O^Cct%v`hB~rOt7He#OB3V!f~<~C*oN1T73b++vBdC)Mv_Vs!Xy+bG>Q%8?5Q?$&JYJgHBu91%ghT(V_lyVB7!rPpp&r zdxq|xth2RoF?Mh=b|4ZmHqm#sa{9-+|7y5VG5^zWgXR+)ctE0Mj0K6(+@@z-77XA| zMxl=ql`B*`+vE~T7!?d$zoXOG?$TW0(j1{}6(K)6pY8E+A$x**!u|=u{i*l9#oDh> z^f}W%!R~(Ke&xA+*yVb4FtwRu16bNG&3eb=1Wj7CE96y^BxR(~wUJ;;hS5wQ?x?%Q z8q02nm;O|Q6s9(|oE}OXUlsNenk1z;TE}9UlNMH_{>T@gNPtTN^Ge;zcm5M5!=G{A zGs}U7h-<91gnFjkSXQ#OM!O6IQK3vnh0}9=y*-IbGv98Gt+takcYz%-SOKJ>^U_+v zi!Wa-41~(&{CxAL(KMXIM3&R+DkeCkbM}B&5eKKIKbLpjKz^p4CRMUpU!Pm}IMJA! zGD)4MngK{gB&iC%d>L>^);u91C5o$b@qR+73Hb&N^wWisLX;3S=T>W(B^YK^a_Mnq zyQj;=>B;H2iLE6O#&4B?_DWtp_8=yw%j~i#x7ol)o64j=4LgYvM9HC=4W)-Dy`M*+ zrx9tl{JPUUK9un!>i`-XW=Up(oR4O6x!l?4`5z(^YC~tMqRxr3X`2{~ie=7Q){DRD_#ptJ+`VKfW^wL?6S z4aZ1w`EfT4ml@MD8h{wkTbwZ^e0xR}CmKmWm&Om|CY=``K1-QNu0FuYbcbGV5 zZExerk=d!;uC+14SbhKn_s|bwVpddqG6M|)$x`a5UfY_Rp{7#WY1{^{y+wQM-GgK+ zb`(@qX}oF@-Q@34KRPW#P$95oMCfj>NbDN})ztC&=BljLz`GHu8i8p8B>~y~?uJ!v z=#lVq9d5-SJ@tyF6wX!I>9?;QItSsA&!9(&C_{Od+RHynZ@22Oo?05vSUKT~iu zG3$}Iq60H1N37qr6>Uv#KhLhuH7_1p;|p>Z43lCoa28S) z5dLn^DcZA$)xK>>I!G9kXr(XCyY(gI+bS-e(UR7NodIhvZB_Et0ThUdni~?pgu#rk z&a~Y3!bDwd85m-~R9#Us-T#L&Ps-WEmZKhw7aokN)r$ak(H{Nf_2^vc4-%%!z01 z^%Y$C;A6~k#mm;BMn;@^+ohz;a4P!)l(<-cSv5MZ-2%E3Rjxl~s9>m?o@;2#Kp}eq z=I8zX!H#=NR?3c(76~qFw5EXlFIMs+c8g=p(w_AdF|WGHqp-U4Tk52uUCycH-%GQV z60Ka)=E#p*b5pX4>0sNk57dH76iMM3p}-Y3RjyWQEjt89%G8zW=Ty$|!@c)*NgSd% zj%F!eZ`2WOvtbw=na84P(J`cVH2HG8a`1~IkW-kMtc}++TsBPR8n?J3%bjN(^@?s; zRepkRnYy__*y?No`ldgx-ijaserUc-EgntU>)ygP90Gby86Vc$^7~R4H zTCWxXgQ!!H#;PYGO^oG->$&`_0EeuAJ^Avcz9AHG95om0;Fvl3kSare#~$*- zL~DZto7XR~k1fkEr`Q%_d}P43M-NGzGVmC%#xgEv>#uJW367G|C7k^{=bOa|KCWu>WZ|C{;h3I7@^PD#19LML^gsb z!dI$jB>{jG5FQ7?5&;8&E~$F=i>n|~B-n}2dfr=Cajw|hT(PaNDxry`By)!6F>l)Y z0(UMXb8b5;E{J%XJu_49h-SO$bBGL8ma zg`S(kS@}rIZv=myVY45oSLpf`E#GV&e*QP4NB4kjN%?Yhn$23{r2;XxQHqu6NRvs?zJ%$p zy*gbv@p1tq@P&WR;edl*Cn0WhXfKP!R$c*;Hjwq|>@8(~!ExO%h>VXKP@*NvX((ll zNW@%;g`1RKlxdRv=Hv8mEl7;zN_hd;Ixwt{-YXF11^F^vRXu4m4Cm8?0RSA$Cr+tVDP#*l-tJVyXV6B1&Rq875I>I)%iyVD1EKK{Mx4rQ)=x1a4G3#MMwm_@%#6|Da+9#BFnm8fIvk#pSehA<5R2!aWBd8r~JeNT_kuuUKRzV(if-d{CPC8Q>B&7V2GfRJw zH`X|8F_17~_7WJah=!oHj%=M>0@+_ob;!PzX$Ia%2t}+C)X>aTDv+^AAI=D*4I(_I zG{we13k9s#m7FO{s>1b6#+RWaFm;C3&&FIqsIoKizSkf>18K)iTYHcHS?N2FnN(nW zidJo|IlVD5T8ANIFRwRUtDkJtHQeZFrq?yhSX`FboXs=?f9h zq8t@Qq`}Y}wvaefl}5Q8cFydr`o@Dd=a)hniM3e^X|FC5lsZWA96K46@jbxkMYl;8=;k?IZ}pk3E?I zM+{egv1MY6$rzEmtAc&S(NGy%VIA{wlv_oa!sS7ItSfLi&M4U{GM7itZ!N5h1o29K zogTe7Su*&WzWwarptg)^Z3g^?JG|mo_HU|FPqDket_R}~YpQC%QeTWf599hz4pZ|d ze{Z%{fLj(YK(7Gn0YaCZ3@c~fA6-GV^{6kfT@kUaFWcbpu$dB*g6$EDt6i?OyV64M zN5Ac9R=2V=dXD^Nj+Sf5ao$J`Zf8D6FlQ1jWnZ8qL-pxXB13-G8b)9EXG3z%4zcuN z%ttheDWq*SaL z?WI-$&f@-~ADpkr}ZwR^(oL?YZY1bBwW$zh}BS-f;Kk zU0cIAjGX4yfA<0`ZFr_!0PHS$!v+U|6VLBtxA|NYiUVJd8W_-S*6OV=t`>N~FZT9# zJ#i0fJ#q7_Z$4FW9d-FfIvwA0UnU9fA4+$VX_Q$h##^Muc@oZ5db+m>;2$KoNpg1A zSMU*B#UBtX#@bWYy1&o2)l+9gTElp_U8ID!-|h%JI@lR09m1%Zar8bw=~sd2ym+fk zdTN~wf%T9)Gyr@@=kK8uZm6u714kS)cgLMZAY1%XyQcPt_2tH62b%vl+VtT(ado5q z9%pdK0_u>Q>K&}(Ec|e#p|~dZJNGo4gE9N&{zpUAx_4I+%z;1{p&mXnlnz_oD%|Rc z?i1$X^qHX_p&szwSY0Dzq5A5co8{k2JClWYrg%mWn%Ud*2T8vh)3Fz>yp2%%@V(|v zG`cyf;^8Rha_@jwZ?tsnwq;k4a#2qMH!SJy^G>js0iTG9F>X#Ee`cm`NaRy zo~)L0{F*NAvh>n{4|Z-QwPB~kWksA&iQ6V9olwcAou5EHBpL9H{NACQVb3UqZrCN1 zq*nvoIjsir#+XEVjz$x{n6b8)26cjHQW2h$>_PhUK>o$GhJ*7mtPTegy{Ufe=0p!! z8Q^*3q53^wDFJne!(X3tE)WGf+V{}=6HI(uQlC1yQ@=BD*_8RAJV?L>^C7wzfj1>o z;Xj5{UhC4$3HAfnSiN>7AOGsYc-+wHeictP#6pZq`0k$n)fqw$zqZ6&9yu6HX$n zv|ZW0V@w|?y-x(Z652IK#~gfRBijd#7xbj@$a@X?2EVs5%*}E;Ca?DLj(R~n5Vi-I z0>T5!Bc0PtB>8qBbXYnT=iG1Fg62-brgO1)W0x7r4D^P?eoQ$K z8T@>NRatkz_0u4e1ZLfkE<42om*rKf?{m0MueF^=rL(i+rt1|sQSDh2TV}DbhPIE- z5k*XO*odB@n|NS`OK9+!pIng_mz=S|wbV(~ZSQAHtHK9a{_=;>D)I4!)(m}SyhdSM z)%^3jFp`W`WuTqjn8hcps)snLL?wgfuxf<#3lXNbUL0>dRDLEZprLjeMX~p8RoQ*v z7a`|ZqS9B$4+ntRSG9x3?2cpk8mGGj%7&nrTrzKr!j;k#(_oTCCbZhh|V; zJ5OJ-2H(bW$Z}`YtZ{RkZZH*Z@kD#Qf)B0xm_}A?iiq7^KzZB7*A|6&h@&wzeJ((H z6bp36&%_w+y3l%A4VV(Ry_VF)1nLqDyn+{yeIe58JU`Y!A{L`lhxoRMJl#zS_K`-K z999o<#FH3eOx#Xh#@v}<8Odu0bN{eRI#@eF(?H{o=HwnJi_?P#<0^xP;Z;<7>wk!LLWTRQriZ72?*j_244cI zOS;wGP_Fk>be{0Xw&VR+y-%>V-i+_-a#Itu8tPwg)dR{rWJ06BchM>76vv@DGl~F- z!_4Rn!bO}I!BfFk-80HBh#Y|~tUkeUR55c(fj4$J#R`)AVUonD#agDi94aV{Qr$0? z4^C<@0z@5JZ)hQqv8Q>k`D);SRT4iJ2~9?a(8q7|Vfo>BY1%hs_F1^Q!d}aFWw;~e zrSSCkndbgdZjLSvuCIS#bf15#+~ofEqKTZTv$Lt4`G0j?<`;??+_OIyuRI2;Z4Z56iI=YaW=Sh%G&X zjd49Aj4?5_Rc0A}XM)j`?e@F>v+1qhUAedH@BaqXhozbrPE;$xG7}su_$T+dkCwAk zn|_jhvq?HYa4+zD?Ps|lZ&p{rAQ0|C0_zN{$WHxH8jQ^1B7lcdM-@aRxyE40)n>W# zcRB)HFY!#uFEqfOl>tu()U;#z>cd8YS#v%>V!Y3=7;Ft23<|d%WP$@^8sm5+#gh7l zMFD5c)dlldG)>UUKm2=-k(yaG0|=RkQtdJO6?QDNMXght?NM!#K;gdYO+YdmS~-z^N>?oS&j4%tv2xaYNw8KfPL3tLcI?K?2nKnUH)}2)s&Q>sqcI1K4g5!XRPV(b?f5^;4Is@mol@(MQzq->xZN=vy^Tbfx$O-wNq{%y4{Qf58P^?r zMUIM9U--pceGCj>_kks_gB#q_tWUbI%ckX|rBJ}h9V4!jQO^a}?fAy427N4cpi4ou zWCb>A#!FrS^GKX2o4p3T5=&PksIIa&=|5=|&bAQo(dW_)Sx?8`H) zDqaI#vR}7I5RTgSMb+o3adHdS9OZ&@#=$*3ZyTts*RN0B*^oF{G15yGEuHy@H?`eK zCcTmFwn};4{UHnqMpa{9b0KB(UP%a_65Oh+*DKV2(4?L?zYdaikwmXq4n2gPkMt?N z${XD3uGfJs7e->DRSk06`;#x4ERdhPZRJPc0-;o~usMK$yUvIRa zYq7;i{^Qy9a2t{6&mHVj{Nx>^4;C9}tg=l$h`?&3v12dHg|JWVAH(>qt$tK#N99gD zs@JS}_VEBkvn{LbEe8-H4!RYlZijXBHK>94v^;Rz0nrMUY z@!BKJA*)gPh%Jg+mKTT|HAV-K9;dWUAA(AzBqQQlEY?xK32rPdPj4KqpUifwZL_eH zw!psjf67-mafbbK{0tL@`HO>S?iEnnmPN)-0{A_U(3!~`u|Yn?S8;9;MSZNA+NIJ#rK_3M>)Al`>hvv< ziyP9PEx4C@H{t_z`Js@3aa+!;6A-qgByy=JDXfVsRoK>VY%l4OqtO;YPpN5k|M^ce z=@!BQf#gdy<_`ULiQRu&nfw>MM$y#C*7D0@#@_CK>(F;3hTL|hE4&c`Wc` zkrhKF=dK-OXRLO)U)*jSO-+1UPc!rawMW>Ke1S-W#f1p(u;v6m0x_DVGD$S;7?@!jRbKChvT_USk zzr1zVc}H18(>4#wtaaERGA?efpNwgvFkN1p4Wxfu2dGb1)$|XT{kZ)H8;;jX0df=^ zq;<=xuzR!v!IpqvU3*V~l|3GJQK9z7=#e)x!USL@SQ^eUBhVt)fn1q+HtUx{TO1zG zd7@war4zOTXvzB)#2ErNW6uvRs7Fk-JAskQ*We=6%OOIm%-O)7KktjT<5{*;9igyA zMsFsM;Eml;X=`@ISzK+H(tvdVNF!{aSrpLCR@aNrnoCdaa`V3rNq*vnK4YkzX>v(6 zQzA=JOID;0q6WEX;fAs#dz*KNBafu${)8RSc#JA3)hr@Jk|p8%-gea*h(k^H;4aw! ze{hz%YbGW~ji=M)9VVS3aAB)8oT1`~b2(?mhz(~n%9wKu;Q#WaFi(Uh`Bk6XMCs_Y zpi{txSKFaoTJ-#^V98Thp_!dFHrWzczBu@ZDrDU(mcCpoLwzYl4WkPSkLC#*MwfRHasZJermc2ObipKwH|`a}6RUJcfojYb9f#?}kX~HhPEI{Nk)r0Q zmJDUfr~n~dpt)T94~65G5VRu5;4xY>`F=d{39Ujg-$cJXmho9lwv2tK4#(nxOFMaj75sSl zc>s_)AGs@5nJ&MSIS+c54f=M|gL2HSRiI|emH!>^2kXKcovR~|@I7F6;a~wjnIe47 zfWSPkt3a0-qFa$ExEycb8{TIS<_MxLCUf;t=AW>XB8B?jLU2Xl5TXYv4B$A##;B(z z@#z8yU)nWIVO(li0)yyXDEhe_;(^O{UIJ;k*f3sp--1no&-eKvR;1)$Vf+G^WITtI z@~`s8dV&1lBo?cf*NEx{rwo@2O3JrY&hhJop1134bXQ*!*KG4t3;_KU&kMXw`yigc z$gR}((!`~1qwUoyM^KQ*+wuC=r8~ZT98bA1jL>#H&?5@;JhU@X{jwOY@DX_u_BxYi zfxu5CrdWGI(JvZSKa>H{U3ZL{>&5)aMb&cS|1^Y2sly-7XB zAs-$jP~PWf0VzR+bxh=HtL}c(I@RgH4nfPI5@c=C1Oxr_8)W@g;QuBwKp~7pN8t~X|$k01^+gOt!{!J(}K%(;{QhTJ>44m;FR!kO1f)zz005~`7MZE6N(Vu{&qE!8YJ@%o%l_&9lnj3nAFlzyI?s^iZ^ ztr?AFnXv_(<9f|c#uKuNwanV^$T5!xNyvoxGxf+Q`PKr6BeJ{kW0By3OIE@lQL?2) zz9|QKbo*i|N%+zB?@N%jvgH_M^GrT_yR#CR;6e&wNbRxKZmIR@7=saTE631W zYoYyXa|+~(@KliP7&mCOf7oDy*<~z7?!_ka3IC>Ru^JKGi zge{`L4FTuD3^b+Kh&kcK7jA3#`tirSdw9WSwLsW=*}7~e+>uY1Lg9RmW!3X0Tg#aT z>8{=;%5FdJW?+6)EBBbv;W$|;f_1sKxMVaM?_*QtZS$EM}=%$P?n-<3DzqK(*@QEPb>Rlm7|1RTC`Oq}%tTd8We)W;F;1>)sxGfa-oRl| zGUh6bhvFUvP@Azv18DIG- zv#I0M|DV)d8AMeZ@vky({i|E`uNCS4ZR)P8i{-yb-R1c2hJwF_mbEwkpXFmp(m$g> z=%*aaeCnpWJ>IAa>!lPV|c*DN;wp}*&;I;v1?!WqgNjtSN_%3{yAcH$FJ@W(nBwi2a!tvaUekO`gUn%|m@nq=ThPMxSN7GKdpCsteYV@`9~^Bxp$8)8RlaV% zlB7-;mrF2bk&iPJ>`izT<_I=9Z(p!LCs=zxn1?9i^7tOpb>0koVU2z4EZXna83N5C ze7g0()VKnK>BAhmYy4J&eO0V4_>xpOBp@UpEFh4Kz;foM1|SWXD*>b^AQ1ob znL>MpqYnT2|K(rr|DTxnHShnJt}jy#>;F1I*Z5xf0Y=2(>5$(FM9qTI7;42PKVeW* zQ#xHD7YdL-vXV52$RcQXEQhL?uDtLk40!B%Y9y4w^^AVt44%!s82#M zCsb9&nQ=-55}^b5;+(^b?@YXFF+S!fIjmNXV9(jHT3DUI$_?Z*ww+ebkgf!K^yASc z!9OSyl^TLJxc@Ns`daY+deW)?U&~6x(CxqGJSUD1`pa53WZQ!ELsV(n012lJ2^Cd_ zW{B9JS1Pr>k=*dsnG*(Kr(iH9GSE%_zQ>a#F5~pv2Z&K*TRetQzC|*L6P25a`9bxJ zwCTH}fH6KpM_n*n6eB0LLF5S1`l|%e0VvIW2_fv}*n=T@hpNrUJXyi{80Bxzf*66% z2laJ@)HG`>iHYs0wPFqGT_VE+ze5H1;E-2!iNe>XcqPUfz*U(FmvL#Hp_ zn7{726g6vY6bV$nFi;MtC<{TP=5}#yXP~`qD@5xKRVzi*NVLlH_-I4NrmhP+#5KPQ z|8oC){dGS`-usI81;1m0liqs1CY;nL83MW7$;qkg+uTQ;-!>n9x9is5(yn}=ZU51s zu^0gg6`}D-!GN<{ihN8}6CE<sU%E!fPt}s*0$+9HV#Z>97>EX<_$jD&EG`n+#WP_VzyyqpbRqKDss+2KB0fWNa-k79HY2GWEHt?s z!J0@VL+|iT_Ri8ftU-yIK8c>$)5TXr{K^h$V(46^@7w#FRy*MdL^z*L+vY` zP>n_7)gyid$Olg^)XC_IK*p3lWT)f#3N6QA&4sE%$OlzSN$+yFQtu%PlUv%7T0m>1O( zOAAP0Tn9vIP9~J81+m6~3U>msiJ;;RK*SNfi}png=E3(+vE5`Bn#5DT6SBB{W3`mX%Bt$DJ-ebF z(rm6C(mM4{8$dhLG@dSh8~grNqdXtEy5ESNG{C3*kH$msMLUs7sEtWnRxp z)6QP(!S~p8%In9CP3F3`W`*-=>K7c9dY_Zof-Ns5`=Z5e@G8KKqBGu02 z3H{K)WLS;y-WEQcr2+Z~woBiEOWJe%EkLQ=Ve!=A|c&tL10xCO`14qv4 zU`7G?&GNqQHF>DN=w-f+jon@ApN^I`_IJYKf-Iuwmgmm=Fqf93`Xh@CNO;R0+4jYrx{8nD;aq) zlqEKDmMUAJ)dhMJGfeEVW?j_{YWEb%L2aQjh%^o0t7+3CT+Az(!p_yyg~`E*+>w#< z%NL*Qjz!WeT``m50@JsxcM}3DefG=PrakIYL6o@Qm zRdJSqaZka@+ikPmy0w)iwM;04`Mc0Db*RfA6K%Xzr`o)wjb`n<9hT6vhe=!IaHQsD zE9gt*&qvvlU_B+Pm}AT#ETEP{u3F9g$?Mt-4&CJqnpL{Ga>tAISkftI3)Sk2P^i?o zlD0OL$>gmFQ@d7RR_7+W=gK5*{`ktyIxQ&11HI{!Cq$|Mzx5`aB*y>~?s>5`?BS@O z^x^18O*{fad4szHR6B=tn;K04kDeif!$?oOJVH7|+o#Ji(ft-_z(xZdTvD%mQI84`;F{+0{oU;HrVHG4bT8lHmp zjyuclDH}=0sL5VWo(#_m>`l2Z!%(K*YOv?yQ>ug$DS<#fr%A6^-7xwDZ? zV#B*%Q@FGi$4=+2OTVv~mR+g2&8Vv#J7BP|-fDSw*Ol}dk-_}@dFcI%Btn}{bIX_~ zkz36@d($n+?o!J;@qVzwITj`Ly9z;ZpW+ZpRhMZKR{taW@lyY!gE*Pj!@5eFsNHs{#H8Txb6og&@>+z%2wA$7(F`xLcrY;9e5u{(R4nB(p{|+6MTWUi_KNgR5WAs1wCI-a}8n zW-Ie^ENz}LUlz}x2G=JBxQV@yK<}s8Z_PmsVAe^d&mVc7+#0K6ypdfRC3exCm%IEa zGSLqrKZJ!3L1IUdF@AqZJ}azD`~%#+S2%reO~LT~^mOA#e*(#9>32SO`cgCRLcKu0 zD(Ls3jwniTL-u@7=?G)PjNVM=f2YB#r^+NHA}yR1Vig`tw2!@key1)q{~(eTRU1dV zpolGgDWpVUaQqH7wzvNaJ@%?rjG{>Qd&8K;^T{d3>Kjq5i)WgV?zhdjt9BLCX%=cn zbV!#Jb5h497vc~k0(Gy(m7lt>jwIRI7o6O%hx!&S$!E?$JW=YSde-b|EOKhJpgeQ{Xdjo8qzoB9Y~~XaFK9@Unn|=}q#la{l1XjX zkmX>8mk-!-%$QNksBD!I@KC`(gV8b2OXwA~@>TMyBda5EfD0)Jp(7)^0QHC2uc<#g zGo&b%{I(CeJ03TjKbqbjx1L|l3Lpr892z-mA@KwHb2VIy+Z6&72stsAA&h7B`0!=O zgom{)2(yo&*rW?ob!0+~XMa10J`O|)qd`YX4h1@}X6ukD0_Hn4*9$|4wVD~4$*~Y5 zUa^-J-5RU)#h_FJpwZ#16RzBR0i=r#M2m{+ zn!(IK+u61tNK5KJTWP?o8q+6%j9`bUIYXBLNU=m2DLCw>d{RL6a<=A775r*qY{N-4 zWW2$=t2RO5;{bR(&CxT#Y?zRir8bu%m<(g`T2SV+3Ovq6^s+F zN?{Fe6vcZYoB@f|aPWU-^#WEkiS>AFMpftgsO6O%ndOlvrH7-X0vgx`(&EohC->j7 zsTqsNQEbq&m^I5PEc$?@m&6m1DJOJ>g!GGzn9Oz9ZcJ2}v$QIWu&~Eie62YXWJiHD zMgsI|3o}l&^OuNDdPVa5JXv zJEum<`=t96^&oK;xF&m*FLVhm{?Hp*j1_22VVTfD3*xYTyqPtOEfZnIx>xj&DJ3wEU%|jCTwu zFeX_94{PPZ$ElCJO1DYbs4z(C+sJmbim)Sk7?({TNy1yHE+jy;CQwHpTL8<;C=6Sc$#03_MUD&bo`yq82{z_%q6D?O-7eK1uZOfI`hb#@$_Z`a#yK}fMon+}YpB%>zguSrtv!)DM_jvb3^&8xaCW->7_i#bh%R#AOkF$778+Bk zVFhw4uNERl`|g?AL*Lb3x<>w`{(w(ssj+<#r0w}NwH_mm|4V~vg-DUVxP|HK%0b&r zt!!3PZUi$_JTdnOqfxQli8i-yt(Q`8423VGnFzJ@ES7MS96S0N2OEUI!lAx>ZORq6 z4)8(KN8w~oBP1ij-9$buOaE1erAK#qTS*1h#q49F0B5s9cZ%~=8fah9j^b{5kx*g6 zX(X*wWHY-D1x?`?l^D&2Leoyu-?%Y3Afux@Y0Q9Xe7{L8`(S6zLuY-M#gBKOEDqjBf9STl zec{5~xD!M`^_nD?ip5Loa(;hlK|%FLp9+~-d-XL2;D-qn3-)s6b4H}Phj@#Vjoh2? zP*o}#i|TMPMz8WUwjPCYQO!~Kks?dRDeS{18-uUP&eNMD06*WqYLAYe@X1q~X(jjZ zal7J)Z>yjdn>Egt<%UyE8B$A~-u923UUy@S_mDETesbb4==s5zJYC{kw~GLx>UB(2 z8iQ`v4{y))$`;+tUvxDSp1{p5Y{Om^0TbE-N}I=(Et$nX1+A+kqFk)58T~mRe8=Pr z|Fpa;z1d^H(Yw`G($z%;_9ZV?STOVE&+FmI2V;%33i(>HV#`RwK+#BN-5-RuqsNj9 zug#d0^QGD-h!F=HmTFH^)5*IB7UNGVs#V*|{h1BkXq7qPU6|i4h0~fsu#)0dkae&g zS7dZ1Wd#iZAmM(J(;4O=Ea(LVoAfi=Q<-hzW*AKpjTg^~!keMc4L{i2MK~8mz~884 z9puNDyy9jI@p95#QAHV6=5-ATU|BRvGPpTr#KiogU$VWTR^`6P15vo(`%U@Rt9wCCoa zZ)}WZHs+;-O2K37miUnzhThx!Vo$_RawsY6DAJiQw0+X=!zrOmo5DF%)~t3qwBTcF zqFY9{VeC=Zf=o7fi zCD6yJ5I@B%@AT|1IsS;<6Rw;k%JRZq{{nkwsos2ZB}PJ@SEYJ&>5r6;mlLSwL>rtB zar;W5u-<)w#BQ{=q@~8#rjrxn2!l;gWu)vJ@$2|pX2#7r5u&A{U=vOCnRpJ@YaCQ^vj(`PRq6RN*8^N0R)%(h0E12bXc+mmFsPp(>2qkZ##-1-@cFgY z0%pr4Ol7(Jmf7tD&X0!tH5#0tPP|mWx+gxEr1MA0XM3Cp^m@(-E`zqYa9&?8{0|X( z{O94Tn07#)aeo=z_Cw(Yblzc9nEx6h%pQ`~xRqAmqoE(RjGGZrx7U$#sKzNtRASZW(4k}G^)X(dE;ht4*S4B^bN73%f0no@>& zN))_c?_d1YWZ&O1{1Nz_1o$(>5%x`@$8o5I@^yHO?_$Ax{6708w$kE^ z8JBgxZH7$`lep-d7raOE`NMrKeA)0FE9{}A;j2g#M)B-m%{>!Z#4>||bc!4e(OYB1C>*fuG;_o3E0v}f&ZR=p^0}d* z)~F~sjPBwh)#LRfnWNZM4RHCUE$q(R!{rrX8-y z6jKG^t6>&q*NXzaAxT|m{ESYkCgBU~Ji7gZJlkN)-*y@YbO`c=NJE8Vj^Guox;3p$ zQW(feQgcJ)@jtJnF)ZI-F(vxaa65tt`hvKmJwA17=d1)Gk>PiCtI2rTVnFP8bUl-= z(s?^?nY`Ovx*o!_5WQmiTN*rwF|K{qZ7DJ#c7Hn~`avtGC^Y_pkz6~ath#Jn6bP9E z@d$OxJ1VdKlX2@C+qfof+Oi2`?4jw%geTG(#yyIOW$qSlm7K=u2IUK?@55`g`5_fjEB-UI15auHvzT-VfStM0Lb8`oa9Pa{+oasNIMt8Hx+TXos#Tt zet*CnB=EnL#$xx;Z~^@|1Fz>m_%{D_Z1L;Z1^AWX*ReS4K5LJ8(m1r=Vx5#4>I!XL z`kfcEdzxAg*+uqIHn3vszNiscH=I0g#9ojC^5$W(-|Diyz5Lon1zvKzj*;TYpFz9h zfF0twn+WtspgbT`jZDMqQt1mtsow>a<>XyruphmYl4~|S6hCgKCP;h%{rp6^HEJ83 zR3_4Y-gXN+c0~>6z_p}qWqwwE$Gk?V!p{wtE0TQ1~*37;C zXQz0pu+6yROV1cV@^@v?-$El2U)vlz`~{8FsC)_6gfRK$Q|;U}FThX{g%rJj{(#vx z7eWflQYX$B5DuGIa=1!$t)JPkJ;{E|h!V~YLR=L@Z%^83ub>}>SvKC@PjVb(XRzF! zK0fAsORcXU46Y9jkE9pHdO>JG&?+s=IGj8U66ro>7IhA_Y^Q~C#&cb#>{i9&0QA;`-=^e6JO>{hjg85?tGXzEPjTP?~F zs>shfAB|(aTO0*@*q2djUW+gJ&c~gRRPaNQsV7#UCk|Jkkyw+7I3rKRQ6!#YgqN76 zD$b|uM8-Mni8QEaI-Nt51GR z$88*!aFyp?0!}VWuHLuurTq5ixRw|?$=D0K2+~jqtJQE?o{7U{JBR# ze8K?>V~7BnamHECQb&Vqi}lJyn#{I1(c1bAJI9hFYtxa+bur(89Uv;=P_eC0%g$>e zuUbwlf!_$V(wsV#qx`OTwj!6pF%W4>=ETMg9?K92YDg_5vh{6*}O~v z@wX}ixjFaXB_NQ&6^UMUMFtjN? zfyY?G5?k#GbE0Q=X~W2we*K3!S7okFIoDQchj`}cr;u}qT~b-ck@a}b?}MYh*~974 zF*&XdIeEMBv7>`r<@@M4sFspqP!(z&YO=ToE<@||`vLt&OXKVZ(D|QoKllc4t&L-! zCyDaB@fZf%um6cmifqL_(|w^5TYrm6F#R1WA?<8$r|x9=<&dFlYWTJ1I4RSAz?5GO zE!a$mzT_~V!q5eBFJxjhg8`({I>j4;l4w?oYBC652~C>WLt{oH>o^g4iy~+hVISW= z$}5|2-~mpMEr%J`x8C@1Y`vdvZ(uvPbu^R)RnhsO#L}=7GBj!8)5UBR`|e2klo;0x zQ^zn>Kbp6T37Z!UDW5x>YTQX-IF?+iR>Vu9t>AddnSR7f29695MjS9XcBG_5MDr5V zr8?QvmXz}Hm84v<*tEov!t24qNudX+c7Wzv_<#SXC&6=P*elA;&_TJ?j3 z)X)Y_eoJZP(2JNB8`1e#okX(wG*{|*klBGMbW1;ZTMtpIPJP1oA=~kzPOv3I;@u{+ zNsnxXNebk_E+$CXk_uE-$G*Q#^G>+j!4bG5V@h-u+&Qz*?2`@54i7Oe@LSWJ6CzDX zg>fthtuK7Jg^qerMp>L2q`jd;zPRWS>htkG1G)J`-MFuzDN<;UcZ6BQ^R*irBFGWO zMLv6eFXQ^edT{ptesloxLlCUa34bDm_2ZvAW8a*q0| z%GaJlAM~KahCpCSN>qC+yeeSYG~vX7--#5VG|JJ_OyH^v)9l!(TbKBoFCTC7t{|#x z)2Uc;rtaE4lydwY?I3{)jVPMB+%Ng!E`5$Rnm9h+UPto2abL@P6Qg_>C@TOh0oJZN z<+xW=ZbL4ZT|E__M58=sr<*@VqJ(Fcdub3eP?*d`AhY2~U=@x?whfuObz`?B-w#Fk zPB3(%Rx2bD($|{28_N}XN*~KrdYGvuoKLiZ>K7VAU!h-ONYgs&JIUm-jJR@-T2jlr zV9-U-g6(EdCO98xOuK@9zH*{EiWBntmnto*?1@b53HFqj$Wiro1udi%rImUDS75p< zcK0ibZ(a2g%pL0ae3)C!X6p0Bs=iVpAP-PaD4{sIItG(nShrT_B!e6g8}KOc%c8I#&%I`np%JDSQ6UAO_ZRVF0t6)VkUy~Je3Oynx< zI%pFHpiSu9$W(;|dXg1X76>lN!a!zLz+qTO-?fmHY^%z}V5zYRq@%1Y)!(=RYt=iSIuwH^P$7`Y)I-joFglVO9jh&Pn{%W*6P=ma0BHwmMJ6M_PxBPQk%qQBhD1zn~zW zxqbj;96P>$DdeHe z2)(^NdS<~GSF3+kQX4!ct?_cud#|`|DoqHZ%&Roj(X4W+Ex0Lewl^4tLgtTjroV`* zHFyGSp(`1dj@F@-00>YgWNFsOmP+xL5<71gDwpVGHp(y?K=j~&=oFxQbSNLBz_a~P01enw)d zA^wh@Mm8x;hW>jJk_A~Q{=re+?1;Wc395EHpsK$OS|@cCNZ{OK(r+Y6-^)t+@v(w| zWv!!BG=f+h8BQ;PYL6K$ZaIySz|z(`dKeb{qkmC?3!2Yn-$(q!l~^6=#(oOAaEi82 z8dr^{G~6D$X9QtEw}6~rKhEk7#ZT>UvMIMQ@bil~0s+|?v0e-EMfMc<+bxK`a{O-& zPNoj_c3*jdy{j|BU*8zMBqPQQiiVc|$sbYGwZ{P<@-63Cn{T$;Wfzm#2I63QbJW0q zYGEf07ej$=pppSdZ@xD-w2h&=FQ3&Wy!62c?{PHye^28_%#Q#?CQwLuDMDm%U$&-z zukpCr@*ZJvp33fU*8jL&C-{awGfEulfenQwRSbHA5Mv*0wO;>N`RGQFDW^{eXtJ5m zM-ES;S=Xc-ElvP1^)?uGj#?jVkzHij)1W*m!$}ZcdBfNEPt~EbA zymwmLaej!mZB8lHW=FDMqDeN7iRI65M)Z#AnFCN)Xil8KOLZq0O$|!1bO=0o*~EwU=_`z|&lNwlxke$$gLHk?v3<+A4kuC5hvt+S<7goM&G6 zE(L2}u*N*J?rQnK$3XdS6JMPyOUnOWmXy+!#F+dd^R@^-qQ6EycXv3xTEj zsJK0{FPCi)?OBp}YgjR*Y1v_yIR&B_IO2^6?h2) zuI&e;y~9hetbRV)T{dO97`nRTTSovoS`j*$qeQDkGGt96oyBbX4~Zc}{wMnk8|%cL z9d~n4wZ3Tlu$Dgp#xGRRI@d7KZ?O~lxVtq1B*uPy9*EbxB+tjeYzT1b5C=112Qwo4 z*38^$xFiN%tpoCYGBi!}OhE65>hJ}8L>Z77^6H0FIZsFt9{MHuP|IXiiq2HZrKIJj{1A8yfoo8kPqtKuN6m;HMp$Vtc=I04e#@9 zf4?{2E6jCnXi6(eEX90gT7r&Coe}q-gxf~{K?tUxmj##~9%%&@t9)=6W^z(z&r<<7 zumcV7a6`=W{WJ9@JIK_qHT&TNVL#&~44ED0#<9GUgxH(%qF;H}_JQIyIHQkqBy(BP zH^n|;<8MRJ5-o?hEg;;#}H8+i8qWComS7|sj&&N~{rJTA$IA1lMG(UL zs)i80WJUj)`$+IFR-T=yi@Uv(wWXc;zeR@rR}aAdWw?Kr68*1gw*O;D5gW@dmgZkI zTa22u^Sn4JpLF&p`(BEm2Syp)4rV=79dJQ2DIz0i*f1hwv*L(ScsL1`w*2>=ldK*} z-#LLk41U2fQWn!veV%!O#gh&iG02gO-Jp_|i*EDjExyN#kJoK|e~^`!?foy!Q*3wu zdb5>=TMHv#G#UCKWwLJ+&~$8N!Dq3W>Mbea+-OZ1N@>Ks2af)8W(H83ZaRX`Mk8O7 zc`c5$?oyUB9xN8!FUdBq-6)&Inc!G9uCDz#PjzD#qPGd$IoPL6Tco~PF(WfE{M_(M zu*--H_J6SU6+m@mO}D|_-QC?axVt+9hl{%g2zG-9ch}(V8r8VGxN#( zZ!-VXd$%f8RH(B#EPAii-Me>ph1f_N;4o`9f-lUb6*hsu&i8|9VF{){c}S) z&9^P=Oo{QhRrXf3CcO2O4mmdr-r;36la>~YiO4NC@?6a1rX0K)!QQurZlb8n3mw+g z?^{K6Qnt4nuShL0k_+pEs6Ji>7^g7i71U+`twV$T$GF`;!>JA<6LuPLj#V8jvvoxH z@qZ=YeRF07nb583J|X+5KTfmiwMVoQ8e^LeS39Pp9SxJV22OMLOk*o<&Bt*YO^Fd5kcT5FHWFJ zBRk3!A-N#nA2Y6T749KosX2Zu)uk%>ESO%vTe7p=ONWTbB9+9)M<2$rT?S-1gr`9QmrWmSOf0VU~)O>&UlnM*F%XI;Ni{kjw zA*uo6n@A`p!BxK&1|b81ov>u@;*el$8 zHO|K^d4g}&RA?7ISbAs_6R5%v?c-tBN;p&HBljpfWld1)4$5)^4R1us34$rvS$pFt zRT*3+^9c6{kkVfm>df0tCjBPxdW+QSGPrFU0x9@>`z`c`&MzD!Hn^{GgzrAQeQ;}z zK=nPr+3ZW*oL+2%)?X?sWX8DmS$H#C>qG8`6#fvBLx9GorMwSmro=2FVWUWWXkP&q zhw(+i1@z6JSD5S)l8KN8sMI9a7)&+eok?O^yA`&$n;Q zs|&)HGB&c@bTKa4Pp{?cK1OYd@1uD;pk;S*;JzEr@2_k@5l_n9o7+LkHUz}PEafm? zdZ#6$tt$94m{Lf2L*XJ=+ZVdWXt7H$j4~|fUd1P`qFuE0#a+m~^*Y7%53&_%{=`^p z<(zQOF?9C$#*hZjg}qp2`=u7;k?Il4{#J+skD5%-t#&(;@BV96XLlz` zz~l8j$qS|JAzXaS&zbZ%h7>fPxlE=Q*Th)*(Ig8ZsFCPR;aAT-+4{7-&yWWwSLJ?; zGQmINgUW(P$e7KvB{-aQa%sYI{;ZM*u>K$q4=vvW>a-xbthFNR+ulI8exKYa1`Y6= zkySnb--=0kg~kkaZIEEfPxB7Ax8JPTr__K!FJ*izxfhpOkEFc}PYy8xrL|I&S1)Ce zZh(*x+RpXaByVtreK$}5kQxL9ngo;g7Lsah6k!ODN8Uo4Kg+_o8VJF-c>r6_%0$=( zq_C`r%O_Jv!MfwT*~<+|rrNO_W5%nuV#k$nm{3K0dmL1dCf{6d)+}9@Hhw%j?!}EU zWPf>)QxOg2D>8IDn zI;m2}sHA&jJ}|(g^<|V}+~`A5r~7w#cdJ_emm?$RKU1Qg78hSY|qF?s3wD zQ~m4VGBbSUdYg6lx++saw>VUIrG8DMgw*^<$WU@Cu~$?QNosMbI%56pL5$6PTu>Vj zU)-_d>*EKnLP9dUg#x-q)-Gw9 zTp0}sRNOEZnX8XXHPQqq2T!g?JF9!ajVFxZr$f3~1ABWGCsvVsxN(4H>K`)r|}b!Ae=MsW2)#j4~JOgS#L5 z-nZMSm=R|^knB0=1d4H^wJRXakZ0J)v3y6yLQ^t-Pc%}N#;XR{jDdeCb^%cHx~Z~M zZXxrYzoRF+3gO~~iH?s_xZn49l#`1oX>c?aAo3{E^g3;7EuOqJNd_mL-)cQa&Eqsn1rdKO8D$= zanoE0ZXO{@>X`1a`NT+7t-&3_gD|sIOqlADeIXGTGw*xP>4|8+p^|*xnPbP%pg?|d zjh&_T_7Zf9l-eo?dUq*Hw5Q%UNOOW85Ha<7&(+^Oqot~ZyBsg2q-4aBSK~u*ZjfTU zIN>+f*QzkXD|)0ypTNJPzgmEBX~G_stixM@hD}I?2vFqOgx?oqimh!E=@P9Vjzwq` zp&mZ`#4XYi$?FtgNLtV+!tNgUTAyUtnkg1gH)0R5Uk5qc^MrTTWiV@5nLUqSkajC0 zgtj39j3D--E+zJ+j{BTnTzPm$$nTV(bo9{|Y@-EB;xu0etLiqSMd`L()PN>>^2G-V zehbLQknOt%g#Fi;Jlw3^fz73d3%qTmie=8noC??%gC zA`d2lMeDP5luKEJZ#SLu4?Duo`jIcCj)>zE{tKiKNH#5^LU%8o(cN(U+9u`qgnN<<_*+m2{aKEaT#e`w7@*8 zL01ZOwu+5$pO0yb?cj0k#TISy;2-u4YH?m3FQ6{Wz!;Jmx|=UFc@&y0*`^)Ro5|iz zdwf+i#VyjaY&3G72y)AomnPL~B=W5ES5YH~Q+I;khi0S9T@uU)GTcllB%1QgLuFLI zFf>n+R~Uk2hP}}mPiJ6aN3#mgWvKp87DR)Kpa)hfrkv8e{+y3P^kW}-O|0u*BR>Ex}}UFyj6XG@j<2!LT|| z_ait}uI56OX&gh^ZRpOG7th-GUa}Hc4Q7GGU5kq%F*ieP>(FBi@YZXg5k{49HwJw? zBzDYg>z)W;nI)xLO^oAtXrlF_;{^!bZ7o##`P7^6Q*W5Btgd<@zF6i#H`iyZP` zRm%eL?vokGc6AQ;Mexd|-tBf85kRvtzZ2H}PxFut`%hcS8kg@~;6iMx@(zCl*(Tm< zM}M;2PPf&@8+5R0XX!$|SLjYFzbW5ba@>?e@YtXmqbU|6xf+Pq`kDtBNxW@_wLdKV zw)~9`Ye!o3iz6XeDyf(pXR9lNm8n7{Qnf%cYdYts9~u|9eWj()Qr`ZT!>%kYnW2Mh zKvd{y`E5{V`wI@yV?fld>t+lW*dX?o^!hmTu)eu0n@-z18-c+-bV@YG0JE)RR_I zuW+S#6!fe54v!1KVcm6CLkkFYY=@kE(w8Pps|vi>;KLXe^xeQ4X1Zg{#0ZOzCqGQs zVk+HHs#xo9b45;$FX-Lf5>F`v3Y2G@#%qW?zHH14&_X)uNc9OFU|Pt*Sa;Zd#A%5y z$v4{hu?R;zm`va$Vd6J0BGfeL4w0i~BTf97G|BHgagq4KF0=#%@07j#>V4K2EV@SZ z&UdCejS{j8jlNDu7CEDkgWt|FE-Ab-h(K8(;a}z?N&g}a>Cyd2#ti~EuRg~e zOaxt2w>n809TialB;*8oFJV-f-G&??zJ6JE^XOzUd?R6H{8@M1*cb+&z#2tTy~NXG zv+jc8ZO;)*XP_Rp#2TIUU@ri+5lw8kMbY8;pc$cRI$S$$2FoGSZK$3M<7l#`|{MZv7 zkI0b}iCWefS{Jc~f40rscSGfCtYY|4m)rh|oy;EC?^;5GOPx{7WQ24_w9~mm6iNQQ zccz0vv~~`d>Cnby9Gr} z52J>3qO$1{#c+eJbc(QbBt?562Bs*&u)Tr8(n^3Z*_0W$gymc8<`UQ2)^Cy~Wgi7h zoJj#jS5U5S7Tr|FHY++y**5t=YiV|gKZ3r#y`f26Dq^9oM>729`=&}J*z!y_fOZmDy+WTo18UR9;uiD4yg zexhmGayM+MifMJ?k2=I2jAjTZrE>+SBU;1j$Ol3{5S|rtk=4)00+h^@`eibc;4e(p z)!Wt0!u}s6GXE+s`ukGQ3F?OOh0IZ-DkJAm2Gt54#N_V%Ep{~rY?E6+1{o;DZ} z5zUtATT~*jZF{jR_4OIC(Ac<1x#bv|8dLVsq2tqdIaH6kssjSQRrmt zzdoaAHqVIN8fO-U-$82!+yLN|e?AV~53{&DXmAh^M<*@LleKYVge!l)#x1)>uQy$m ztJvqdJTd)*XiUOHu@4QX1F(|WWgJ0~4b5qCaKsc5e9!A|h(P`fDrxT%`fO!gN-T>P zGc3>bh00+is5s+ThR!QHud4X@%@FnXeqcqQhLIKEM@2{4SpZr6iR2t&jn8rWJFmsAn2o;*DAEi6xpa=JWM zSzH(zm!CV3g2c(pJ4j%~8whb(=}v8lNr{IHGZ3+xPPKM@kk6V)_fboJfVB7OvJPm* zJ2{<%Gx-Tkz+%})DU)NY9?H4Zj-Nf$$JPML*qWLDuc?A1eQBfLRIYn z6t@774yhV)}%o%7Y)^9=M zZ5B_<6{O_yUA)PfUoX@hu>^j6vkYUs!slMpvU;S)Q&vFh!k~O%52jNG_Z`XA$*Kjh zogI0KS?MC4L@UWA1>XWVHBo zF!EtfIc&_Db`;Z$-fdalQw|p!XfA~jST^peq$4`E8#S4JbQ+r|@Pq909F;MIo&ZPSqrg*!OOGQByhcoufVu}F5zpmMCgVdliC zm-Dtcj~QT&G>pYjek0^tYe@ch$5NH`*vU=cM~1QuZh{lCk-$AM;6m2}oPe|tz7NPC z-e0T>k8UsMP#HdU8{#$#>9{JA%TasJscK#s-KJ3YdNrF}MV4yAyc|0q6Wur~yt z3gy?+4Xva&INt-d>%SsXd57{E{L6M~5eIq`vYi51^efWH%y+M&DXCn>dMMmZ&jX@} zw^91Vb(|mFXE0n*w3zHmUo?ssPi{DhW|NAaS!df(6XcnFK=FyUywYg6^`yOBEbZDU z`znU_Mbmdjudq=pH{S3h$-G%ZtuR2qM0;e)KdL>)_+nL@FzvX6l_ZPM>kY=ttLbl$ zSq=O*M?EijUf^s*Ma*(2S7ny49&^4D!I>$$D`?++=fJb+R-m$p&kDyNrK?VEWWpmr zCG2RiJ{2le6EIz5tddvQ_A!V(B2Ie4M$1C;zIOI;^y8{0DEaX9W4raLv@oBLFO1y2 zw!~s#`B7>b*TCEX5aEpW+)4&VbH5>n?5f(>>>HvV-+)@? zvH_9jmlR)r{H$9|W4U3u0)>c5zf3W*|61^#RqA&wQMY(5N%=j;s8ajfQ^#+qn65BX zj7sQDrQ~~~

>mHYnVnI)QL311b*-8kyJF80ZirJ%bm*r2$!8nBo?QuBM@#oG zZy3fY5LpQ+QcXi*o$8XN)HG%jcgfbuI>F;k$%(< zk&YTn=7$4=i;bL;`EB52%gbVDmbKiUx+*yih%K~g+27eSmuv8ET#~R^XE)GP>^?E- zVo+z-3mkMZdXKJ<|9F(0<+UIE!cHX-Zf{uS;NJZ-6{UGg$~%-w^l|dVym#+qY??9U z;LHHQaU+W~VV_av1yu1p^dJQ(DWTb5=F8J|pazUyjL0Bq6shWK!xnDvurw}5PQ~bj=!JBvp zfp0G@3NyIKix!u^;96;qG0vu|ymd{{E8U9%^&?}Pb71S-t4gB@MC$%75~%*O=tA_j z-n>{N1VVPBtS>8koPejMabqU;~F$*p1MJ)i+mQgE8)yd#_p{zalyQ`L&?W6y7R4^s z#abnaIcOpPm=O3#$0NI8FXhPApzE)Hx}{b2MLS0zGXndiTT1zBQv$UW@&K4w{Ik*B zy#LEJ|F!*p{*2!}O05+&0%^>bm7$`hh&qhO%W%tsQUtWdnNVQJg9!cL0%&n&nT2I> z{H9TyY7-4L-!YG1u6pImz!MYbwX?4wzNcu=kDO+ULQ^F4L>_*1nR@AYQoi-{o2hWc~4RfdeVcW1Q#sX%*wJK7Ob5$6txA{n z#M?#0tOr5~T2%GJ8_^xHE3|jhj@v=ux2!!* zKbDciY6_iND$qiIc+6yVg{y5{7eHi1wwdR5NPR%vU zqM_vV;Y)W_6P>7L#FOxg6>*8{+1k%8+_lAa#R`RNQmq&)618NZ0XaM01M~pJuZYa2 zdOiXe)J}(45vv@W_&&ci`NrpYs>=7^S80+mSdiLN7)U_fIG_l;0m!hswNNr5EFD|LB@9+dfvn-2C=g!8TE$J;wgFEuc= zTC_XjeTkGhFonFPb}$QspPGVNn4wG9-dWe=y~RDtRBN{o!X@`Ew{u-_3Y*@&1ZMJy zA0E|}ap-e;=8J4JsxZWrR%Kd5CP}#)@|M5u6cea5s2pa1I@7T^bp-AMB~`Qd!v_S6 z7$tXUL7Dg$Uqul-tgba$IjvW2Dq@>5o8>*XJ~i|L1Wt95H{*B(Rwfv(;okr`thXGdh|)m)kREmozHQ!@|I41Na1+KeLV z>>_i)hcLKjCky12*2!^%`JJrE*5|HzNoe!8_wo0}Bd<&ZSES8xX3TAHHiTzHQBjV0 zq-=80Fvy3Q5p!{Zhi8`xtU zil4h#lit7wBeFOv%Jw04o0#)w62g|;IzLj4o7<2IHoe=QeE0Ma7ZH8F)3>dZu%8Rv z9z-8wL*908+Lq9D~FzDKbt+EO>5m&?-f2y#Hs4?CJH{I$L;o=Fdzenviaak}oJO3Ig&#YsAIm8nfQ)3XH4LB>RG z57EUBr`^wSHRqcxZx|4H8N>Z&CfdhOQUk;<|N5YSzEYIb5M`28l47wp0nN7gWi0*Y z#|i)E8riI!jV3q7%6>~ba`jt?EDcg$e@uokr)0Ck6#iz1^h2qSY-0|p;Pg6Tc&UK z8repO2H7@(L^$*8kYvhGr@CM65pdR8GP6h>?75wNP1p8m-#|XC${JiSXCDyG$-!Qf zP|LR)cv?_yKRtu-B=_z z9(@}1D{x`eSQ)f8FKvS40bu!~7g!d9a)-zgPU0GGBKGgs;L^KptrIIsJtZ%iu8vib zpIGo$%f1oVOw12O#O1PSIIQQj)eXq^@I#+20jLPtir%|%NH#+@QzDtGzHU(P#w2A@ zA28N(3qMcqXUFfw6m*J|A#;Oga#XdUuvN1U6PVRvvU493JJMufbU&F@bHJoLho{~P zkuIPx3DEk!(<>X9(8v@=?T2*|9wHM|^tGisTwS~_9q zcXoA7rh*{f2AQ%~%WHKa<$BV|G0xzfg0&M^jX^Aj!NDSqHr`HxE~~k3b+5J-+NzZD zUc(7Ny+>$4mkS9tI0LcPENAU>0T9W=L= zefKk=5~L@(URZG5iU6Q$ALb?lqefw?wsa}ei*K<2jwIEs&}eQB#rjj{asZU$D`JRDaSsCo*@4Q9n4tOsH$#0e|P*raE%?}rMUV= ze`ZjWgki4#PeKw^T0L+Cy{jAO-@gfI(#}R5^dJBFfXMTOqsy(&jD5m@QjE#kx zsf!7~;n%L;pP$D6A5WV&I5@if%pCr+m7be1J-_?E-{U`560-w!Vg(g|N_ttCx&N!= zI5bvKzE1=dxD{Pl`lXznSTKx428DQhAfu%0Qlo}b6&0mU_ic@HyMDZ4ZNNmZa1RO9 znNJNl7>?zk#g)giLb-4ltU_qW0`G7m|B?(0vcYbzk)6MG-PRrv_BmBK|ZyT%( z792u<2pNszWAg$dS^?xN?8)*4;F{psXDQKoca8$Wdf}INQ~eTeP))tn z?=6%=;{-qmV}`!FCoSq2wKW!j0>UR-nwXW5BECo0M2|&2)64`E9K^-M08(Y_P-5PuEZ`9&N1N7OM8~62w6%5Ry zL+7C)z*75o^{&V*B@Px*3ujZBZXj7PnnQ~(8j{!C$o|J$t+#X1IL3zMNdl8D=O$V1 z!x}m6!QT~ov72huQ>IWuz&rwe^54pS>^#=r+Vyh^>aRIO)4|rk(bGZ6-OkR$6krE% z`+W*xsM?qu1RLhd+IOX27Hk?LWELb%1s$yi;|TX!VpI0c?*m2(nd7yY?(p# z7UVkALoV5NcMmt6l$DewC)V!A7~XK$=`T0bSmceyX1HL%0Y_(?t;S2%wG4cl%)m=K zp~YKE8y#EXx*Wn`i0S%X05|*#qcg+gUnb?bCCM0*^_dKz2>LQc5jd5KXV56NpPW>| zhqr!BFlF_cw{jZGkqqZpD3 zS1+v|?18vY3FCk`MTL|9nss*X*EQ$&bCY}kyh(Tw{6aj?-!6l`0H#RRxP`UIu#AUF zU2!SYKsK=6+bom*qwGRNIfhw9f|9N}f`QUY3>(0e$`81m&WZH+sDgva9!UWXnjuK5 zC^v02o^}5R6#jZW3tPvQ45eM2?T(GuVS1XObuTC6qQm;{B?#MRVi) zMm(oW1U1I#;b%i>N|h6Aa1gfbzvP}@>#C;1zp>QhCl@uMU?sUs}_k1U+aaX@?|OTJ|czjz9ufG_*!wg9D~(C*0~Pkd_KeaM5EjkmBgo zJbJUZPDBU4c+FgeLVc1z+1m!-Lx;HP7yigJG@!K~eU&`>)J`PkxNy&$?Yay5IC!qb zK!6I%)N1=)8R2Bhk$?dGUhNB|hs2h-TW#nmzaJ!cZ+O6f0Pg!G$e@du zKZyt6;AUZG2eA2N%=c$CM*s7}b|69cM=KEjUsw1~|LIp@?VsO=_HS2{vUB|1QliyG z)j^lO{MWG8f=D$m%gGtw8*p4N59#KLdlecL>JDDOSi-G&2z+EturvNzvcU?%kTT;^_u64Z?F^W9V~sKc*t;e4OuZ8=XLVcOP>13fqI_fj;&Zu zTn&O4a$FA*#+^l)<}K`2f?<+SHjs^IL|TDF;A>TVcV|muEXV?9 zjaD?#bT8#my)ZxW-aw(_Pgp!Q+Z8qJNZBl4LlDCN-xyPf()32%a2@QhX2V)oiz6Q+ zq3|6_%A9*icn@MODVB-bNU`U4X#wR!-#{|Yv0PgVaTy`fewqP=LS*QFBM zaCWAa2pj{jHmP3lYjgd4f_?qhf~GJSEZC?zrP+(VaMc%z&bRpQJfS)QUm`mDfzTmXa^s%#xh(NT>@Ss@=nbGe!R7DYN31m%n zxcuLc!>$%yATVFXMh-!{l#p2MzcPPOHK}bs$N#2 z)U~`g?&G#Efu&(pg^Q9vZ|>x4DoQ{Vhca%!d*$~AU1TPAPrht{s2Uq0hG6MaD`GmQ zuwNRZl?a7?x_`auAx=#o92kCyl+ZszO3cwq!Nl9q-A&XB;Q9wb^6qUIH#gW2IWO@{Ep#oS$3%{N2zsHXrLa?BB}8;3V+w3+ zA2Sn%1R0tBUO0FnOSiIwkB3g!$lEHWK*(A(*@g10a_#2(19;=8rXaO2%=8fJQ>B%~ zadcbQje#>pnKTGnXP%xfnSLABhnjTS4m*v^6C@hm5fYQmPb=0hv9vb?CP z!tS=rrgh78w}Tk`p@S#8HVNtWq&Gs9@4~XX)O#$mB5%_1eBku0v>gb~3?eu%#79I1`aDY$WA}ar|oC28Gpj-kRpFkaP z08%(*>Gpzw*9#P?V)!O`n8WW=ug9<5177GD%ZSp6MSzL6EEUNP@TUYBcf8EPsI1r< zUGe@ovW0O#8z(;0b#5$rm*rK-ToN{lmD40%NRJ%&(fb$L^L$N_sE>*(CHk1li z^M=LNlTqRmEcKW7gY^s5l&OzTG72KoSDR86Om0H8kv&JKNvq<*$eYjf(-5cv_6*E( zT=myHE%DEQd3Ftc-&J-1D~IQ4C4ZQX06aLTL)9gYAr>aev+WeuVq=S{Kq4rkF4dSv zV=S9vRa@?W2`09b=VD_ckH6(PpU7Bybb(?O%?NgdBvb?%o7Howx!Pljd$z7kG4ipD zv^$f(i!T^pZ3HlKdRs&(g~VYZ$eMTF@Y6&(&KNs<22f3LU+2xR5n*}*HALiIdJ`#Jplmlycck^4_K?7x^=3be1(-Ms(kEFK-B2x4c%(5?BL+Qy*l zo@lq7-jy40HQM7rNoCf>yar^v6e+2D7`6JNW8nwP+qWE5@u3tr?Nw) zwa&N7$yefH-_P-}nP*X2@g#M~#l(_vyOYVe$eq-o>#31Z#yQU>MeE+Y(<&uPY1Nm% z_T^tkE9IY=)w94mWV)BT+BUsUKs$^~wzQ`a3&FW$c zf8cqxAY_5Q!D`SijqyuZ{-FiQIJy9QK+u@jiT>X$NLScd8)^VzIV?03P!TGL+E{x5 z394G>QZmM15=;+;xlq}y3bHlX>3QvSz1h(!T*dPOqk)fCx_`zzjQeZi>AV5Kz_j5h z3Wxlp{FOuIX#Ku5n}U5ZtfCQKfw~DLl^D7%OXuXsu0E&EvcfAyZ-8k520#53VrP!E zt!!akTHGYv&@|n{=F-xd#;J=`cZi%gT7cB=78E4NKua$2Mbj4cnmBKHaRwKt{EXCI zz&>Kj-x`qIKQo|zBc*QU;%H|lX5yma2&&usJ+A>WC?#-F)X-O8v#er4^4fNY2-r7+ z2(*K52o!lm**s)Wl0Fr-bIlaAZoeQL7(Rl6tR4Mwq>98r$3 zvMAC0>^*tZSN^C~Q`W&nWs$Bsi3a3R_+ME*dKI>o*k=0=|Iekjp2OXxI?BIL$;= z(No=%3-}vVB?9Z1j-SO@p-X2*&(cryOMt}w89)jES2uMFI}5Yt;RlM2=6|T1(zD88 zW`2wOm&onSMq@%sI?rJAb0^NnieS9V{5gzE>O-5;PVlV>$UpK7FmQZjb_>*YUs@}n2?WI}t6c9pp_P85bM zPTWDZbeL`h+i<2tawoB3RyR(}f^XiU>q9YAA?{ya#doZeED^kc0-~$+rr^SUyWcgS z=AVqh#&wJ-d2f6YmX&qnMiwq&teaRmx(qO@Gr-%`Ky%$0wpggSGfF=j<}-A$qiqEL zfMURL!p?49S+)IM%WG?m*d>cMPRmYD`pX%}ptLCO4y6gz8Zto2Iw^ z$1i^tph?WtB|bX=c)x^3{dE!^(8N;E3BjE|Z99d3{P9UTwx z{qYL9rhev%^km_(Lg7i@i>Sc9^QDa>MIk=mk_%>gdzVU1@`Vo!lnz88f|L4^7T?iW z6j7(JvJX>)pkjX%=uL}4)aw_JjgAY93xo?x!xMQE9tfpS$L<6UV1|xmB!GB}PxDj% z7ZJ9bpXrVrODz@t;1@AK}N({na0eP>*I1NqQ_L%EDSHs<(%ke!TO$ z52_oDHQE3j`#SX!I%( zBovOKl3=n~#Te|4eDVd<6j+a_F&9r7-^nq$<6e5JYxlhAFx z(m_c*33FhgzW1umuYtFz){!1NdI7a6;=1hfGujt)s2=@$1Nw)`rU7uXvoIHPbOF_g z%7MaJP!`~~+X%mNb<9s+68Ln9Wr)?#P#4F(a$Pu{gz)V&r`fagQskQXzvq6X_r8PeB+;`4M7eP=b);lZ(=D^i`lO6d zqTb~!z)aGd$FV*#kY5C2W%z^4nXagD3uO;pO0kNOx zsW`dg0nd*bA z+w4YCRhh=tSqj4&Ha)~BGE-~x{OFghotX?wa9I{U3Kf^4soTQl*7~!aBsewO zBxk1aKm;>8RM7*|ANHRde+TTg-}Xc^kHRg$>9QC1Bl=IcnCo82mK##v22S5+3hlhU z0*357IU>V`sBKzcYKk53m0Rx%h<#X8A>kx`CT|2=uASz;h3g**oQ8{q#a{~C&-kC= z7;aq#hk1Okh=2|jepieIbuF&}2>Hhjl{O-LsFj%+Aoh3zQvk}!7TD` zW=qq443uQ3ER{=aNM`Ko@$F1(ep^S)9wjtAq`OGf_t*AEh1||rrVwT(> zV;(HXTQhvhC9*(DtUDXS8?ZZ--A<67xmS1u@>p#Nmx6PK7WUGuJiV55b9EB%`jkuN9+&?Tb zx_~!Y6@y}w3*o%nYalXlN+qjT#|j7v7?!|zJbTC9Weaye9&Vd(TJJlVd7GKG!gqhY zv~>Pr@Ujkps0C-|hp6DO7y+@A7p4h$Z=uL}d`0pB&^83h%FSLp*LP9xAW~|uHiAO1 zIMfU~s-l$3LOg^9yd>F;wamz=tLh==9t!6qH!J$WEycGA4dzj6$$ainA-8_tP6v@d zN^%(ChRM4KJ4v*(hMQfHRWoJc>?cE7K+92%Ls~6b8F>iI0Lcwz}E{yUu2wp}G|| z!!-@-IIZy{n)NYz&>OEil9gs!)9%~y_o8U`yZ|e3@(CByNofN;sVXNWbs@x zHGQI%(Nl^7tU!f0^&_dIMokt1TTNy!wJ?!@mDJkpY7;b?w(TKmSH$8|3v?aHc^Y9Z&xSRcRI`zp((xJjSOHf!I1r41B=PxJFh>#4^i4>L>h6BqNZ@%nWU&UwePUe73_-i*97Siv;7y|nS!F(l*(}>BOLp>SA^c# z9U_(^k^59v?0hmtWN(K}TtWzmK0P2kZ!a&DW@|7|{gwHDUF`kyS<@dUzki)FQ2-r= zxtsh^AQ7!LrqnBf*-63j3YJ!A#@YaNV>wztyC6|UOC2cKc*Fum#r!S3FqR*eT?O7A&!n_l zP%`D%Rw;yVW(0_|#bE~1Kw?)BuAZRrrap=G?8crTP)x3OF@49S!AC>Y=%@|0tqxUR zBU%&fo-Yy_$UnuUslg2QC8 z)bbCl`hgKaFvigijdg=9rP+VLH*ZYDt>A?Mh3vk}X*rf^Z{`uT;`cKEy%Xp@eh1>v zFTXtEe=fB9b#6@2#0p^c$2rDtL>l_r?UgM1j6$TMk3@2GbWoa1GT%a*$te@4$%h*$ zhN45RRP6IB8)qyHS2AQCxro2L5Q29Gg^Bo#mo*&q99EMC9s!R(E)&9pX4l|5tEOc` zH(B)(R&QF;!=h$DIo2nF0w(Q~ekTeHKRSo+5_nQ4X|hEzB(c6CJ`_R+F}wU8ZQd6_ zGbX$)NCK2B#KDZkXh^6 zttI514%%6LU4s~f{KI370r%FcYSd1H22;w~HqVrfByi?qKyH@A$j(dj(T#0>J5D?z zEGr4Y=+M@hcIGIaB;4THv-xDl#*9s>ra5Qv+cG>ZamEh__*I^Bu6<4S1L8&LC-X+Boq+o5=j98K>_J*MJZ`1 z5fP9Ol|}>v5ybC3C_m2O;!*$K+{L=*u65sM&&;0LGqY#*v$v(cstme|Ws#1qXekcT zH&wsuiqz8`DG@n1e9G|6)86j`FopsFgYkP;G{+yu(62N3(daQ$2fP&*bzE+;nXKPx zw^3pG_Ri$SX2H8~CU-^)dftmEGHJOv9+pH80$!j6+?4F`j${H=Er6c6FM5@(cFs>+ zKrjNmy#>OuBca0Y8c0cZLwpsb?A2w}m#iXtO^;PZRv3Ay1+W$G90dsphwi4c6Wiy> z7PBCqpA?C3$QHP(iTw<8MXB7_L*+_4?~p+=<2+bp#({?aedB$ez;y6aQVw;sJANCF z9lnYkTxlGMdDMNgF1Y<;FLj=v`bbjhO({qGx4kyI9=1Kz)zmI8l7`B?=V+B!lg-y7 z+i$$geS1D|Zsq13X8hN}R`2_+%WvRY2|P?ikr0_}3JAMm=-4THWo7W@gO?cS4vqc^ zjRO)C)r%#|c=;Lwn;?o>zfYn!RzKRwcS2yfOMkD8|42<&jQuDx4YB7L(NGgD{( zB9lBFnosp>AUwKyokchhk!a|0s}_Q0NJ9M=nL z!E$TU>E@Qh*NDZRl&|{(YOR248X%;a@J)k;8?ZjeIlDQU{klwm@g+bU35R|H7+*r* z%?Eu?2~V4?L;td)JqfuHE_5i_o|K#9R*5^FH8a@XN}C z@-kcsM*M!WJwATqfw;XK>S$$qx@HzJJ;k=}kZWOuU}2%4R31BCXO2y0zRh?LlSfhw zF}8<*gLzH!jV$co(V&V4$};Bk(U;z`%fDrNrLU^0$|Z-Yinu2A6>CBH&H$a=enO>Y zLZHkBI(@K^U$EXQGIBEVl$$B3XOL6K^qZMDkSOnbM2)OM;+5w``ss+EW68z&0`!+9 z+)XPaUhuDb6lTsO#XC9=YY=q~fWC#Y6 z`6OpD%}qJ_&E1Wp2=09Zf3~>>9?+aZG`H`-%d#IY-PHpQz8xSTm`L%W#15Au$7+=; zn>H*_-M_be`Fn74qhJo9!FE1b;soCeFqoT_UXWTShOB6CTT-mxk6n|Y-wjVSZ|!_C zUr~tnG$)=>kS(<0TZ=UKMl z%4yf;CvxJ67&NYiN#7T&CoqVj+grMgLA76Ig<3m9qx3>=WCiESRr8`7A3nU1{p>K1 zZ%Q5Xa@dL2Yn?M-j4MA;sEETWa_uS#C1#S->wLDb$#pltpiTy=h=W_kGJeYToCeaR}&UML95#R+e$?--DRtuLmMyvZqJCX3=n}YFO z_z{cGBaSjOm&i8zBG)&e*At#uGeN60Wkhr^K|^P8xo%UnkTg`N@?agu{OY4m4s)sL zEW)!FGgHYCaA)WZ5HD!4?;JjD)xgo;MFS>oJ6xO0{>P!F2?kzm|4JDZqp7M+30wlA zR-PH&NUhaS3M#~G32Abfd*Av%&fwa^7nlW0XGG(w+$^6Al?vZ_){!llC0V#6;#k8K ziHR25$?u#w9sT`#XPYp>qXmJ_r4ip*rue-RWNwd8gZ36gsGq7Y6khif2 zv(&W~P8xN^<&g<|d-c?c#)n%xfadLat&bM-4)sV?JH&YgBhvCmqBGAu>A5$<$ z97l8U%<2aNoKMCrK3#i$q2G5=3fTB;2PV-!enjGOju@&@qWi?I0PuUZ`@X@E8Q1d_ zpC!U32(96{I6wPBP`zYJTQd`iHR{3lhkJH5#vM%nTT$VrwaG4h*Vu*bi!XM z0VR*^VL&$U4|jYf@&PkL1Xus({-}Q~PjmNQW;-OV1$b$T7izs!YhN^4_+>_#DC7an zWR$Rag;PcOaHXN|XF6N*=Lrvzxs(5!3C}J zBGosS_aMsb#ygEn!P~Dq1ro5xZET0>DjN6}C1e=8du}L6G~A?=t6>Pmh?8cCpn09{+d(FM_U_*#a+~ z9l%<)P8LTuIq}BIz(e!U>4jRcjOk6o&k5PWB<)x&MZ-GO{hq}-c-%}yW|ku!)r+P9 zFR*~Uk&?L1<+wnTtry**>hTG6K0bcFs4mf-NKvS|*u{MB_rz6DKt4aRrat&Ng&KLP zsCR05s*!gzvBe;{vVhF zXGfG1D`Wdv>ajD9wSf$wG(LTjjVsrzvDTk=(R${pI&)}*uaCOE*0b@hOgdXji58Me)`yJ!WiEs z^hGx5w*zwQ$3GTwTAO)frrDbClNoXEJhCA|8OA3gd-yr{qbx;dL@$O)R&Y1x6Ogni z=F8MROTK&EMl74Di52?|k!EL4M#J3`9j)Mh(k)NUI0+ist1L!h_zE?Dl+Ng!`S(SGtwmyt@8!i1I z?bsQ&BykV5ZV@@Kxnm(zgT=2WrH;RGP1dpl>wZ{!PQ-fNDu#B3ZZB>|`E1?VMgHf? z+~Pax$a%)kh=VgYgtsnm`j4-trPqw#zCN4oLo$kd_FaxMF55DT=HgbEzFmOCLgtP@ z&LwhNa*V`)5S)^8u8gU9?dliyBpRlvHMj}KsC-gC;o^^d?ziY0q}n96&fg&Ten&oWC3+9TR`?)m8*!SlUnlSlFICvAi)UbOTU>aASEHEou1w8*|D#(9 zTOD5^L1V)mAsiQMQ!mu0RraCc!8XFtd)%*r!0ZVA1mx}vFr zzqH1+B7k}L>=HQ;!v&%~Gq~!5uw?y>bp@iOWW7Bg59I(0`)dl`=>?w86NUa*dkYW+%fA3sQV!mb~*nRxOQ;W%SdmADWE0c zb1=3$>8?9#j!I@-Iw6Sp6LBI!~w_S8NM>&Apfd`8QpAKT3^$Gc=yNP5D6aJIv2wQ*+dZ%4Y?5a zsOwRir~^g86hfB=di03UaU8&Al-E^8?liq@cY6Ho&|f$y9-heyXoVTBR{qv5ssjw9 zZnl!LVO=8jbE!+m-PA05k)NR#SuZ;AuI8hCuRUB3GF#%( z%D}a(xjjVdU8KNh$mXNx^OUPOxP*@>kC3vnTA6 zsZM_JHJFNjr?1+@@5`+5MqoE4C&4kTLAR0>7h+7sa~ZU)M!2`SbojhW$?l9Gz5ldSX<68SEj@v2UEmf5|0K zNaySf49AnNHNzVw_hkz#q9Nq}J-X$AS5rS)|qi^gh>I_=u)~SW`2IazbyjGmopLQoc4(4*O=uEvj z#IW)%^Jl~$)uh)tLab;J66-czY~!jVWVO58ZLWI{7zM3xN5RoK;18qVmx0tWwg)cA zB!m?oE2_K{sxf#r{wmK_vwe)=>mWmLybQg7Dbvi{%G#jHSYP6sHyQy~q@}07Uw-$t zFex1OF|PYs(}nrW4^vgs0XGgXXK>CI>UZ$tPJmamFW>w$+Ym-da}A?r*2tiUL3HFZ ztJ*+K^0okpA_F0=YHLr((06-QPo`V?zGI9d*WI(K*P&zm+GMhMC@0BY@^{AUSTa2#&=R;~w z{g=nWWqIc3?doGyTXjjiEV8*DOVHeWk+xMLm^}D|@oRT`j_doXNLq#a%o&4f7_1MA zRl~~f%>|*`2RsjL(GI=6E{0aoP+#6Ao)|(*aC^gr#7o8dUf32bA)d)cvjbPfetOPv zn<|N~UMZa!yk{%gI|gXXUvGwz)4E){#UL;BeFk+4B_uZH9gfm;y=F7$VpRb0m>kB1 zv3L2~%R)4>pI0+j>*lqz$zt_eEHd1RTAwgaS`_n^@{E$}k-sK;O->n2S<-X(zOg&U zL9ZVeBq?wYi(K&6RCgaI3#OkD-oIAT5RG04I~Y}6;vkyF)VrHf=sht;^{$aJcnTrf ziZiX>a=msM<3l$bk z!0n`E>5E&woR2hTL<*}f6Z-1pQdqsW&7ic^E>#Y!dite4b%ar`A4Qk}G+t>K*r9Dj zY`v|kkLHs%oXWMnXF`RQ&dIG{$;;68bn}DnouOdDgf|x|Y`>pVplQ7jSWA1cQ*rAZ zs~OWEm3LgHCZ4DWQGHKT+yxeX&Ya;7&#H&N-)om$m$n6eCGAi5q^Zek9k9GYp#I>o z4GY!nbApJEl=lq#VyQW%Rx!{=ykDE?QQJog3Y7QHGxLYl;K&eiRde})G6q}nLb$Ld z#w_fygz}@_nrt5WTl0p)LLea$-+{m1yU~v#Z+ju6 zeJSr8RNAQQTF_OfjFlSDxh6Wx-|s?pw{RX%p0}@1(D}{Zzj0Iv)Rwg-Q zW!V}=EvpvJk4DH5_F%Vt9>yWXFnAt$|2j4{@%18?N0EYt9QoN!dkwOgA1H!Z3~VlZ zy~Um#$9*xtx1l zn3@KDv$Gv&i>o+zk06)~Sra#O5HOTkj1!!F{c_*=va_c4E)N+;1)HRYT_0$2?{DJY z@%L|fid5fhLPM_2Rcu`m2W(%k?vd1TI`Hc^SB6fyO2Ngw1C`c<2klsFrm5K^bIAj*!ilm6E9xJ4 zW|6Ouzd73}{rW7G+yf+$1{p`HJ51XEXTNAAAxnSTh*4xl~Gd>#G1YH;fXAalgX&-Eg7xTksf1I+(Y%LP41a7}YbBW$6K2*uJ zEoQLLR3t;Bwui1heCA(voA z#ZRRp%p^Y0rN36(NTc93t*l#SnLX-wXEN9#w4d!sRKkLPVlY04(I*}CT5vyqfSOgZ zdv>Ix7UmD@%h*jdsv`Ha?8t6&WW1hO=I0q%DQU}~pqL)N)Z5{{xAdmoZ24ZWkl2{p zBH>c-`Pz&Xkww2l&(?eVML$xYvj^eM4EUW5+!1@YnOPjgm0VU;2ZGu%l42RcZ@oif zkdC2usUUSuS7@=hH8Qw#MqSzXUOZTNoD1V80|+>sIjyi@sBNup?K=PF_UiJ)CKiH` zlyMLU$BqKH=Hq0GB@0w4l1Ldwc_m6*>eSs#=oBW^z!A({uytd|LS5ipJOW;R3@JPG+|YUmc0S|4D=c(vNrP!tn+v-eJ^FX2HZyEGf-Pg&Rz*_z z%?Zd;=yP|`K8((1R$VghAoJjgl9Fg>&I|0dl=n#v-x1ZSOcYk=nc7`$}`MQmC87Vj)@5XA?MEm&rEk z-K5yF)D*ayQ5iUv$RfQfb_Wco>TAZ8H9EXQWhcnI?%cD|2s9qkT0|=59ScLM(V0F} z=w)48-|K)f$KlQ%_)E?uu(_u-ljb2S=uxm|h?cQB1z__S*}})aNlWI}IB^l&uvr96 zdo$P&Qkvu7C3I|=HTQ~HrVCa9y|QoNw}874Yv)VqK!On*_O{9EV|v4U=7qiaPi4~x zPqPvO@3w?tMu4!hKVXvRtB9u*E4qN< z95Jg#!io_`xWnD2>@TL?-!35Bz5i|zorvc7)xLEArFy-}GgNE-@Dxv%|z##ZYZUuZABUJAr`>>W=QY>@Z$+tvEhyR82+q7LB!SIqXrM z2xO4N9i>SyclMyVcyxpaKFyrL8Z`O=r;H(gvb7!zzq4LpwgB2q0 zh^;5*#`xe#J55_lJUtmj6wA)6N;D40D`L^6qFz_{>!(jUaw2V*s}hpY$!f9L6S)pI z`RGl*Tb|v%J?vg39`;311;d_blN(X2+$G#oX043EQvmaY9R9t0VguBB-?U@x54GYl zd-fX$(8?#cmRl6=4qp{`$}Iy{bh_qj54`U7Idamt{feImIa)VK$E9}J9k4Y_7Zgy( zQVa}`HH)%X%+1{5wcg(u@4CkD;V1VEdRQPIvg@$l*e8qW#X~M9qq(lOz_7qDP^f>t zQpR8gTllQUWr_>gXjckIl~_GB;zk*m9nZU)xQ5Pw&z0y8CGaqux8cmKoWx|tY1@5b zwtuU)Z(j12q>f?(gYCH{GZ9;BhEo1YwNJWF*xu5Su1*$beJslNXGYs0sam+0!k1q2 zQn~W%wImDqA9S&Wc#3aTTrSXt(YGZHr`}J95hNYn_qEuUyxY#B?}hO$ouHS;!STt| zWO!iq+zq4{&+=XB#|sVO9(9?$hHBIPsEk_`L2o}^8f!Z^+|4g+e>{T)^!7`*Jr3W^ ztmfd(1Tu561+E8deW60ZlK}Hdco|RPuG8ZQ@NT(w^^LC)MHb_eR=e@3jyK`IA*P47E!j8YS0eo+mBpmaU-O zR8~GsqG?T~c1n8ZnoCh;*(A?Ze<(10Nl|{a(V%(RJfADzg2RigJUz1E$9xzlL4@c@ z=&!QmuUk1cZJY6%u1jtko_FtQt0mDqpZra&R_FoJlB8yWl0#kWGQ-pdPp*C;9j~+G zQ^fZ2`-yw>da9BN<^^dksjF$dNZcMe*r1!1%>fEaXkFq#C;qY-+(386#6Yy=N?{2y1 zeR@?d-&^Z2htqaLGD$+k{COLr_%_e2^e|q>jjo}_FYI}qw!v`^rgqI2#|18YVH{FW znBFS!BTp{7fB(vOkLq+)oqeuB-n3cD0dtYTAm*733*-B*{XJx81Fh(yuGiy+B4)F` z|MKBl^HcK~f&%VfGL|kYm132BMHSCoWilS;x9Ng=IE%{qX_A9&_gR*WE7lQkRnu?Z zc4%qW@<7^NnH)jkv#!gTV2aI|E12zTZsD)glR?ILQ1*qkeB1rn5@Nq-C2D>0nIKee zTcl7vNsL^v>VQ36w4fIM#-QvOs+E=LC!$(z_#l0HqZX`(UkZ2KWyVQeJNsn!qJ5%u zu>uY^1t7_~_c-Y`AwWnrfdjmM=#RHGXqaP)1jtY^U6?tYE z_=xn%^6i_=1oxHq1!RN5+A!sds01;%jI18KXdx&yjagN`T~=vqJ%l<-Q92juCCNZH z+0KPqCo%bX@UzS7HVNFFioOD_QQ@xwS3RE|KHuv`MBcs+SSdod-k+oAd#4|vpjhXQ zPEm)xAK9`!%xdu-i#Ej1ck*_B1)S6xCM=4;FK zEh-Y3vlo;l3QeMyV1`!3S={K>`M4?BLc36%p1`-|+vZ~M;*uq&8Ap@=sZsK^>z`;n z9^@+AEu|;>GM6%2-$*~}BiG?J|LU7Y{GLhW4OXlgn$T`P5z__aSrN4dopczCp>iAI z`Ug8?Kv|H8)I0=aP06 zuhOzZ(2aE0N8XL!q~7-fdJ=8My8qbotJnQHpX-0gSN}Zp8AD*wEUa-3|I6Ois3*F1 ztMvf6B#KQ`2SK^`xKEbXf`Kbv)x4290gLvxM;3NJiW8;WB?evi=Hpmgk}u5p4mctr zV|oiWry~+Qt3d`w3xBmUD>i-FlZ^_zecndlJZm_}Q|XvvYuVXV8YjWHcNO9#S4_6D zkpPr|4fh@CYK@7hajp>4@$_iNHg*Nn9F_dWG<{%GqJF#UZWWrlD{V7)Og22}`U zNm%nPQ~B1KpU55I;g`cXCJyf4;Q>Ufr@X02y5Kz3X>dUa0&?0GW43)5Cg(-1+GWXmvR}%Mzj1L9EbQ1%)e9yaXwqCCn3*5~PR11*8c($sW`)Jm04b%TSugTngLWdoq z;E0cK%j3_8IH)W`maP(ZfR`G#!^lmlc3x4LxEyqS^XbPbF2Of3$5$>Dm(M7V);nKZ zU%u3uhPC|Dv*&6WFcS}``59a_!}nkOBp^JxEDq7^K1_fS>a=3`Mw&AW^Za{+x=ciz z2bwlTIdt@AySVa{K8QgGA76_cu4_g*m|5s&{Wn*9s=QYYnbt_hILsf1XE0nN-vFH_ zY|*$V>bZBLi>q5_V8fFr-z3TGxi0&N5n6U(1Zk$i3xrT(?#p6i;f)liu7hz5Nzbu6 zoyfivKOM{nM`N$`UaF?Zw(Cmaquo~u%;a?6@93g%km~%iv5s{c~X`QDWx~llq zPwx9eXJJKq!oPP~YNXZ0eP+?qTn}Ipaw4CAc)L z!SWmRITgc?2TbgfVypM8Vk%8uQ{P=t>D_h^^AHb}t@8mtR^O@BtK&8f%O3H!5mooP zI5a02dNGx{&23z|>LsbMZ+}o<-f*BUnZ#G365DU$oSk<-ncjidUh+n=;h(#6J#>Y$ zgg~Es?k&;B4v|=t%6Xz{g=-PjqJiLI(^rG??@>lIgvy;v+W_ZD2{&Zgl7JN(d;xt{ z!PO`Hl}qC%F|dy^_?S@gFi0gx>J0Ja&w(9Z6_^^cDZPp@6NB}$Z8;)br7=~~;`x|Y z6LX$@Y{gxF80|%o@SwnzcSmr3>bjfN;ZbJhOh1!I+>G`u)Id8akR+y6HDN`AJjTeU zwVIHoTJV6?ZHJ9!u-d)m27KPN^NTl2-VSE?YMb@V3wimG5Y!LtH^-4Csv}K+vmGAY z-59h60lAg$K9kq~yfmK@nX0k)_?Chy?mjV&_rAhhvgxI)&k|20K>>qSpV9L#uNzwc&dnocq^C) zoqahnTf89IZl>4fVd(?aj!0e&v9!p0-;i{c@!76$H;VZPRe0>xtxzsyCoirIc}QDR zU1dyAW4BE}2&Bs7+UI9dr^7|*i%KD`V9(}e4jZBGcGFOEK&c(7D|bfwe%`!@Xgdpa zkKsm$cnFdRQQrB!IG)Z!^ZQ|dJ;oW(V>(_X7Xp7A`3PyawOJyzwN@ zN(hlUXDZ!$prNX$D=qFgr%{_jsVEe3Ac%W_5RfRsVIzTTH0BkWYJKr11)`qFw#y7~ z9~~#f-`^vi9jB(4#Z^$At*F=3V89-jkT0Oiy>OY-H%)UorH{RcUklwRntJY0Pv4C% z_twL%XrAxV_iZ2%DYIgzR4MONuqYUgm-qT1&3dIUA&G-5de4>9#lVoxA#NzSuT}R-~X+>m*+*5|~vD$XJ zNBYXoO}^kc>^2DL#9QF+_m@paaX+VT`gCpGZGmSqz>5G#=L7uCM_a#Nyw0y`hel(+ zVbHY4g1BV>TET+qbC|CZEs5J-3Y|4mZUp!z2Y+ry2)tyAO`AjftjBgzGt8zWO{Niy z-Zi(CLN{LWVn_Ydx(Q7@~oVCfCget8Gk``wHZ zXSQhAw3F=Wis>Zfw#@EuY%Xg%11h4OdM@7hX_Kc?B2>7g>*?s%IT6$PL7ye{ZWT9r zozKg4tv{+nL$@oPMN&1*$<)~8uas7`HJ6)zVxPPsy{f!yGd5OJmKkF|dX-gRs5Mmi zz6PU%d2e@ZLTy6E;hpQ)Qdt)R(E0E^G7xsj|1q2cuVUPRnDBpN<|aB7LG+&(Dk0vw z|JFj38(<#=o`i7OI$1gYRJ~5jz*_Fzk@{ zr=K6*^j0Gx*IF9BzW6$Je)X*B?Z7aS>;|EE4~}F_44EG`@2Ut03%o*^_ggV)bm(_& z_7?D-u$gO-ytv_kw1v2ZQ9>KeBe0ms-0Gxx-m{~Aw8M=frXM|KGTzbqqe)GaD9M|a zG(xlYy09|AIT@ z&~4+Rft>=0D<(Re7iSQO5Qq@a(a{m`eo@Z@7V5BIAONRhnDW04I_QB+DcDcV7L=&% zf&V=a_=9NVxIiA@{O?m$X*ESTSuO4Js&Xe0AYU8_hY*$?mnGmQZ03p+!Xf|b(WkJ& zA&gispSm2TWCa#i*y=+g&_Mp4FAJ{{Al3l`Am(^_|2w?n+cCTlo&THF4jTR15Jf_T(_kg0H7_Wmfr+|%CP z7Jer{9^V`n4d4_GztX=TPwNXqq%O2LR0IScAkPYfxa+tS{0po!@a7+KNB6T+U~-6_ z?3<@d`C(u{Z?iy8NFR#>eidW>OG6HoAamGRf2#`Ee!GeNm*Sip|2u{VNLMrmfL5>q zlN!P$cwFB63#^)|mbAM&z`g`kqsO}zU;`|)p}_ebb_gR;|7%-RoB_%W zfSUv=N7_kokQN#RXHw#01w7L z03W`G0NH>o?2qnqPqqP_vzHuVU0ngI0xRkc@bdZ}M1hy}@Y=to#U*ctC=47|F|0{~wZ1 z7uNNvePROW%^!e3Sr}oaivJ|+kQh$^$ocF51|I5K1IEbh*TMFr5;xIoa2bJl<^>pP z2>Io4DOLR^k*Z*KcQB9z<5yD9lX6g)qtL_wn@0@Dft}ByTK^F6k4f-4CEe)?2SGW<(Po*uTROyzd;{qRWuIRH=( zB$VN}tp6LZinH}^^#TDssy+F!1mG9%)!)_L-Qqv{FK8IRUP2XLcrd4JUx;^c*uw#U zeBh503J3wA^G{G9GYcE=aS+GJF<7WC9W2oTDp&i2TsdQx|wsn}gEpuSW8sqZr%IOy_j&Yr&lmro+1Gtlfr01A5zj0T8{2 zqVsPgK*mOv3RkgHj+jP5iuPnYoX;Bb0+dX{|p9|v>Wb089G-u5v-#?-+BO zdi|tLgH9j~iL*N{mka)g|5ImBP5HC>U{{XxBDgYsd)9-_8ViYtKQ8NkiTJ;+`OT5* zDDCUfumg_SP{p_$%KP>+A1!ppp8Ob+fA+Yf|Mz2<^9Vd7SktxeC#3(nZM_|*Ii+lBW9 zV5Xr;$*(VtZz$k>O9AyI0>bitzJ+G{KZygKoDp`DBUlSB*!U>A05i) z>^gYpP!Dh53xLkS#|+aA_zmy`K;<_)S!d|l>N2M3Z;_7^uAM}ORP|_l16x3-vH@Hzz)(BE`xJ8bb6mKeo%r-H zJq5h)VIB3Zr+yD_z(Z$(Vmqz~@ax$hv5s?$ova~r+9X)dA#>|#ErhP&$(&Lrv7r+U z$-&fEt?f_PFv&gOq+vQK6FPa%MHrdh?f)e6l!QhnWkDyyft8i={GVij04L>%zUcfXLBCC2b5bI7;uBcM*VnFp zlL(sw=A<0xv>~u9!|nMeImf9&P9#-1DG@r~h7wF)iuV2=C7#M3eNrxT8VgAnxo&;` zB=@x39w&uC=Yx=e5ti`cpM?D;PsT}k&`B0xo!xc)|0M4hS07Z)iIbwBGZjd|G;Mg` zpG2LS!{MYfX!3v9hJ79US7|45A)FKi&6*E8FbRkMO%(jx0w?7{)6c`om3{etmU{|A z|9|8{QM$v9QIC;-lY2VV{YiPybm$5&11IIxKgk2G6@O0~e^M$mOEl~@s&DjPr2hA` z2{|S}Qxn5(|2W3~gsuX^JAJa=(1f+H=NqEQKOvt&bbJyXnm85K*{nbHCwLe>&y&E= z{GqU}D(;y-0-t1IJqZrY7zyh@2%P-~aJUVCW+h~Y8Kx_9f06;sM0v9A(3E@UU~xbE z2^Wgt@FXlW+Z(KR!g~HE?D4S^djE4w4|W=R-$^OZgk-QC4_f>?DgWh>J1GO2H4FBr zhPwQBGGK|$PU1uJKf$`tp0E5J{wYjcCxt*W8o_py;o9E`If_|4ekgiU1~gv|?3%dt z>F;D5k#GEmDe0srXx0_jLA&+&uSA`0Hlb-mU~i7dx8TD5m%!y@jiH$_V9##%zx)~c zsAEpAHZ+j~tbc-a=a1N@LqgLPz#d>nzQTh%^4Oe?3LP^Kiz@vM9x5#H!O5oWIusGsY&o7e1Bc-6 zcY(7f@u5TCU_G*|$bY~;y5)KWgqCo7_>DS?qy&!ai0BpYwVZ%fHPjtu0 z>O#MRhplevS$M#(;RYvBp&xg{ZZNU&;GzEJMg2*5h^~$tjIdt982mHGuZe+6y`S&J z;eAg8qxgYSzZZqMe}m`)`k6GWNg*UStp=yO71vNk0d8Fp5d49EOn`-oiSP{YU;hv4 C{oo4# diff --git a/installation-scripts/install-ponder.sh b/installation-scripts/install-ponder.sh deleted file mode 100644 index 35465ad..0000000 --- a/installation-scripts/install-ponder.sh +++ /dev/null @@ -1 +0,0 @@ -mvn install:install-file -Dfile=${PATH_TO_PONDER_JAR} -DgroupId=preponderous -DartifactId=ponder -Dversion=${PONDER_VERSION} -Dpackaging=Jar \ No newline at end of file diff --git a/pom.xml b/pom.xml index 2ab79b6..db3b06f 100644 --- a/pom.xml +++ b/pom.xml @@ -1,80 +1,84 @@ - - - 4.0.0 - - preponderous - ExamplePonderPlugin - 0.3-alpha-3 - jar - - ExamplePonderPlugin - - - 1.8 - UTF-8 - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.8.1 - - 9 - 9 - - - - org.apache.maven.plugins - maven-shade-plugin - 3.2.4 - - - package - - shade - - - false - - - - - - - - src/main/resources - true - - - - - - - spigotmc-repo - https://hub.spigotmc.org/nexus/content/repositories/snapshots/ - - - sonatype - https://oss.sonatype.org/content/groups/public/ - - - - - - org.spigotmc - spigot-api - 1.17.1-R0.1-SNAPSHOT - provided - - - com.github.Preponderous-Software - ponder - 1.0 - compile - - - + + + 4.0.0 + + preponderous + ExamplePonderPlugin + 0.3-alpha-3 + jar + + ExamplePonderPlugin + + + 1.8 + UTF-8 + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 9 + 9 + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.4 + + + package + + shade + + + false + + + + + + + + src/main/resources + true + + + + + + + spigotmc-repo + https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + + + sonatype + https://oss.sonatype.org/content/groups/public/ + + + jitpack.io + https://jitpack.io + + + + + + org.spigotmc + spigot-api + 1.17.1-R0.1-SNAPSHOT + provided + + + com.github.Preponderous-Software + ponder + 1.0 + compile + + + diff --git a/src/main/java/preponderous/exampleponderplugin/ExamplePonderPlugin.java b/src/main/java/preponderous/exampleponderplugin/ExamplePonderPlugin.java index b798f7e..867706d 100644 --- a/src/main/java/preponderous/exampleponderplugin/ExamplePonderPlugin.java +++ b/src/main/java/preponderous/exampleponderplugin/ExamplePonderPlugin.java @@ -1,142 +1,142 @@ -package preponderous.exampleponderplugin; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.event.Listener; -import preponderous.exampleponderplugin.commands.DefaultCommand; -import preponderous.exampleponderplugin.commands.HelpCommand; -import preponderous.exampleponderplugin.eventhandlers.JoinHandler; -import preponderous.exampleponderplugin.services.LocalConfigService; -import preponderous.ponder.minecraft.bukkit.PonderMC; -import preponderous.ponder.minecraft.bukkit.abs.AbstractPluginCommand; -import preponderous.ponder.minecraft.bukkit.abs.PonderBukkitPlugin; -import preponderous.ponder.minecraft.bukkit.services.CommandService; -import preponderous.ponder.minecraft.bukkit.tools.EventHandlerRegistry; - -import java.io.File; -import java.util.ArrayList; -import java.util.Arrays; - -/** - * @author Daniel McCoy Stephenson - */ -public final class ExamplePonderPlugin extends PonderBukkitPlugin { - private static ExamplePonderPlugin instance; - private final String pluginVersion = "v" + getDescription().getVersion(); - private final CommandService commandService = new CommandService((PonderMC) getPonder()); - - /** - * This can be used to get the instance of the main class that is managed by itself. - * @return The managed instance of the main class. - */ - public static ExamplePonderPlugin getInstance() { - return instance; - } - - /** - * This runs when the server starts. - */ - @Override - public void onEnable() { - instance = this; - initializeConfig(); - registerEventHandlers(); - initializeCommandService(); - } - - private void initializeConfig() { - if (configFileExists()) { - performCompatibilityChecks(); - } - else { - LocalConfigService.getInstance().saveMissingConfigDefaultsIfNotPresent(); - } - } - - private boolean configFileExists() { - return new File("./plugins/" + getName() + "/config.yml").exists(); - } - - private void performCompatibilityChecks() { - if (isVersionMismatched()) { - LocalConfigService.getInstance().saveMissingConfigDefaultsIfNotPresent(); - } - reloadConfig(); - } - - /** - * This runs when the server stops. - */ - @Override - public void onDisable() { - - } - - /** - * This method handles commands sent to the minecraft server and interprets them if the label matches one of the core commands. - * @param sender The sender of the command. - * @param cmd The command that was sent. This is unused. - * @param label The core command that has been invoked. - * @param args Arguments of the core command. Often sub-commands. - * @return A boolean indicating whether the execution of the command was successful. - */ - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (args.length == 0) { - DefaultCommand defaultCommand = new DefaultCommand(); - return defaultCommand.execute(sender); - } - - return commandService.interpretAndExecuteCommand(sender, label, args); - } - - /** - * This can be used to get the version of the plugin. - * @return A string containing the version preceded by 'v' - */ - public String getVersion() { - return pluginVersion; - } - - /** - * Checks if the version is mismatched. - * @return A boolean indicating if the version is mismatched. - */ - public boolean isVersionMismatched() { - String configVersion = this.getConfig().getString("version"); - if (configVersion == null || this.getVersion() == null) { - return false; - } else { - return !configVersion.equalsIgnoreCase(this.getVersion()); - } - } - - /** - * Checks if debug is enabled. - * @return Whether debug is enabled. - */ - public boolean isDebugEnabled() { - return LocalConfigService.getInstance().getBoolean("debugMode"); - } - - /** - * Registers the event handlers of the plugin using Ponder. - */ - private void registerEventHandlers() { - EventHandlerRegistry eventHandlerRegistry = new EventHandlerRegistry(); - ArrayList listeners = new ArrayList<>(Arrays.asList( - new JoinHandler() - )); - eventHandlerRegistry.registerEventHandlers(listeners, this); - } - - /** - * Initializes Ponder's command service with the plugin's commands. - */ - private void initializeCommandService() { - ArrayList commands = new ArrayList<>(Arrays.asList( - new HelpCommand() - )); - commandService.initialize(commands, "That command wasn't found."); - } -} +package preponderous.exampleponderplugin; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.event.Listener; +import preponderous.exampleponderplugin.commands.DefaultCommand; +import preponderous.exampleponderplugin.commands.HelpCommand; +import preponderous.exampleponderplugin.eventhandlers.JoinHandler; +import preponderous.exampleponderplugin.services.LocalConfigService; +import preponderous.ponder.minecraft.bukkit.PonderMC; +import preponderous.ponder.minecraft.bukkit.abs.AbstractPluginCommand; +import preponderous.ponder.minecraft.bukkit.abs.PonderBukkitPlugin; +import preponderous.ponder.minecraft.bukkit.services.CommandService; +import preponderous.ponder.minecraft.bukkit.tools.EventHandlerRegistry; + +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; + +/** + * @author Daniel McCoy Stephenson + */ +public final class ExamplePonderPlugin extends PonderBukkitPlugin { + private static ExamplePonderPlugin instance; + private final String pluginVersion = "v" + getDescription().getVersion(); + private final CommandService commandService = new CommandService((PonderMC) getPonder()); + + /** + * This can be used to get the instance of the main class that is managed by itself. + * @return The managed instance of the main class. + */ + public static ExamplePonderPlugin getInstance() { + return instance; + } + + /** + * This runs when the server starts. + */ + @Override + public void onEnable() { + instance = this; + initializeConfig(); + registerEventHandlers(); + initializeCommandService(); + } + + private void initializeConfig() { + if (configFileExists()) { + performCompatibilityChecks(); + } + else { + LocalConfigService.getInstance().saveMissingConfigDefaultsIfNotPresent(); + } + } + + private boolean configFileExists() { + return new File("./plugins/" + getName() + "/config.yml").exists(); + } + + private void performCompatibilityChecks() { + if (isVersionMismatched()) { + LocalConfigService.getInstance().saveMissingConfigDefaultsIfNotPresent(); + } + reloadConfig(); + } + + /** + * This runs when the server stops. + */ + @Override + public void onDisable() { + + } + + /** + * This method handles commands sent to the minecraft server and interprets them if the label matches one of the core commands. + * @param sender The sender of the command. + * @param cmd The command that was sent. This is unused. + * @param label The core command that has been invoked. + * @param args Arguments of the core command. Often sub-commands. + * @return A boolean indicating whether the execution of the command was successful. + */ + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (args.length == 0) { + DefaultCommand defaultCommand = new DefaultCommand(); + return defaultCommand.execute(sender); + } + + return commandService.interpretAndExecuteCommand(sender, label, args); + } + + /** + * This can be used to get the version of the plugin. + * @return A string containing the version preceded by 'v' + */ + public String getVersion() { + return pluginVersion; + } + + /** + * Checks if the version is mismatched. + * @return A boolean indicating if the version is mismatched. + */ + public boolean isVersionMismatched() { + String configVersion = this.getConfig().getString("version"); + if (configVersion == null || this.getVersion() == null) { + return false; + } else { + return !configVersion.equalsIgnoreCase(this.getVersion()); + } + } + + /** + * Checks if debug is enabled. + * @return Whether debug is enabled. + */ + public boolean isDebugEnabled() { + return LocalConfigService.getInstance().getBoolean("debugMode"); + } + + /** + * Registers the event handlers of the plugin using Ponder. + */ + private void registerEventHandlers() { + EventHandlerRegistry eventHandlerRegistry = new EventHandlerRegistry(); + ArrayList listeners = new ArrayList<>(Arrays.asList( + new JoinHandler() + )); + eventHandlerRegistry.registerEventHandlers(listeners, this); + } + + /** + * Initializes Ponder's command service with the plugin's commands. + */ + private void initializeCommandService() { + ArrayList commands = new ArrayList<>(Arrays.asList( + new HelpCommand() + )); + commandService.initialize(commands, "That command wasn't found."); + } +} diff --git a/src/main/java/preponderous/exampleponderplugin/commands/DefaultCommand.java b/src/main/java/preponderous/exampleponderplugin/commands/DefaultCommand.java index 6af1101..7ee287e 100644 --- a/src/main/java/preponderous/exampleponderplugin/commands/DefaultCommand.java +++ b/src/main/java/preponderous/exampleponderplugin/commands/DefaultCommand.java @@ -1,32 +1,32 @@ -package preponderous.exampleponderplugin.commands; - -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import preponderous.exampleponderplugin.ExamplePonderPlugin; -import preponderous.ponder.minecraft.bukkit.abs.AbstractPluginCommand; - -import java.util.ArrayList; -import java.util.Arrays; - -/** - * @author Daniel McCoy Stephenson - */ -public class DefaultCommand extends AbstractPluginCommand { - - public DefaultCommand() { - super(new ArrayList<>(Arrays.asList("default")), new ArrayList<>(Arrays.asList("epp.default"))); - } - - @Override - public boolean execute(CommandSender commandSender) { - commandSender.sendMessage(ChatColor.AQUA + "ExamplePonderPlugin " + ExamplePonderPlugin.getInstance().getVersion()); - commandSender.sendMessage(ChatColor.AQUA + "Developed by: Daniel Stephenson"); - commandSender.sendMessage(ChatColor.AQUA + "Wiki: https://github.com/Preponderous-Software/ExamplePonderPlugin/wiki"); - return true; - } - - @Override - public boolean execute(CommandSender commandSender, String[] strings) { - return execute(commandSender); - } +package preponderous.exampleponderplugin.commands; + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import preponderous.exampleponderplugin.ExamplePonderPlugin; +import preponderous.ponder.minecraft.bukkit.abs.AbstractPluginCommand; + +import java.util.ArrayList; +import java.util.Arrays; + +/** + * @author Daniel McCoy Stephenson + */ +public class DefaultCommand extends AbstractPluginCommand { + + public DefaultCommand() { + super(new ArrayList<>(Arrays.asList("default")), new ArrayList<>(Arrays.asList("epp.default"))); + } + + @Override + public boolean execute(CommandSender commandSender) { + commandSender.sendMessage(ChatColor.AQUA + "ExamplePonderPlugin " + ExamplePonderPlugin.getInstance().getVersion()); + commandSender.sendMessage(ChatColor.AQUA + "Developed by: Daniel Stephenson"); + commandSender.sendMessage(ChatColor.AQUA + "Wiki: https://github.com/Preponderous-Software/ExamplePonderPlugin/wiki"); + return true; + } + + @Override + public boolean execute(CommandSender commandSender, String[] strings) { + return execute(commandSender); + } } \ No newline at end of file diff --git a/src/main/java/preponderous/exampleponderplugin/commands/HelpCommand.java b/src/main/java/preponderous/exampleponderplugin/commands/HelpCommand.java index 48204d5..f580d87 100644 --- a/src/main/java/preponderous/exampleponderplugin/commands/HelpCommand.java +++ b/src/main/java/preponderous/exampleponderplugin/commands/HelpCommand.java @@ -1,29 +1,29 @@ -package preponderous.exampleponderplugin.commands; - -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import preponderous.ponder.minecraft.bukkit.abs.AbstractPluginCommand; - -import java.util.ArrayList; -import java.util.List; - -/** - * @author Daniel McCoy Stephenson - */ -public class HelpCommand extends AbstractPluginCommand { - - public HelpCommand() { - super(new ArrayList<>(List.of("help")), new ArrayList<>(List.of("epp.help"))); - } - - @Override - public boolean execute(CommandSender commandSender) { - commandSender.sendMessage(ChatColor.AQUA + "/epp help"); - return true; - } - - @Override - public boolean execute(CommandSender commandSender, String[] strings) { - return execute(commandSender); - } -} +package preponderous.exampleponderplugin.commands; + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import preponderous.ponder.minecraft.bukkit.abs.AbstractPluginCommand; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author Daniel McCoy Stephenson + */ +public class HelpCommand extends AbstractPluginCommand { + + public HelpCommand() { + super(new ArrayList<>(List.of("help")), new ArrayList<>(List.of("epp.help"))); + } + + @Override + public boolean execute(CommandSender commandSender) { + commandSender.sendMessage(ChatColor.AQUA + "/epp help"); + return true; + } + + @Override + public boolean execute(CommandSender commandSender, String[] strings) { + return execute(commandSender); + } +} diff --git a/src/main/java/preponderous/exampleponderplugin/eventhandlers/JoinHandler.java b/src/main/java/preponderous/exampleponderplugin/eventhandlers/JoinHandler.java index aba1aa4..66ecf18 100644 --- a/src/main/java/preponderous/exampleponderplugin/eventhandlers/JoinHandler.java +++ b/src/main/java/preponderous/exampleponderplugin/eventhandlers/JoinHandler.java @@ -1,18 +1,18 @@ -package preponderous.exampleponderplugin.eventhandlers; - -import org.bukkit.ChatColor; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerJoinEvent; - -/** - * @author Daniel McCoy Stephenson - */ -public class JoinHandler implements Listener { - @EventHandler() - public void handle(PlayerJoinEvent event) { - Player player = event.getPlayer(); - player.sendMessage(ChatColor.AQUA + "This message was sent by ExamplePonderPlugin."); - } +package preponderous.exampleponderplugin.eventhandlers; + +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; + +/** + * @author Daniel McCoy Stephenson + */ +public class JoinHandler implements Listener { + @EventHandler() + public void handle(PlayerJoinEvent event) { + Player player = event.getPlayer(); + player.sendMessage(ChatColor.AQUA + "This message was sent by ExamplePonderPlugin."); + } } \ No newline at end of file diff --git a/src/main/java/preponderous/exampleponderplugin/services/LocalConfigService.java b/src/main/java/preponderous/exampleponderplugin/services/LocalConfigService.java index ff554a9..ba01cb0 100644 --- a/src/main/java/preponderous/exampleponderplugin/services/LocalConfigService.java +++ b/src/main/java/preponderous/exampleponderplugin/services/LocalConfigService.java @@ -1,133 +1,133 @@ -package preponderous.exampleponderplugin.services; - -/* - To add a new config option, the following methods must be altered: - - saveMissingConfigDefaultsIfNotPresent - - setConfigOption() - - sendConfigList() - */ - -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.configuration.file.FileConfiguration; -import preponderous.exampleponderplugin.ExamplePonderPlugin; - -/** - * @author Daniel McCoy Stephenson - */ -public class LocalConfigService { - - private static LocalConfigService instance; - private boolean altered = false; - - private LocalConfigService() { - - } - - public static LocalConfigService getInstance() { - if (instance == null) { - instance = new LocalConfigService(); - } - return instance; - } - - public void saveMissingConfigDefaultsIfNotPresent() { - // set version - if (!getConfig().isString("version")) { - getConfig().addDefault("version", ExamplePonderPlugin.getInstance().getVersion()); - } else { - getConfig().set("version", ExamplePonderPlugin.getInstance().getVersion()); - } - - // save config options - if (!isSet("debugMode")) { getConfig().set("debugMode", false); } - - getConfig().options().copyDefaults(true); - ExamplePonderPlugin.getInstance().saveConfig(); - } - - public void setConfigOption(String option, String value, CommandSender sender) { - if (getConfig().isSet(option)) { - if (option.equalsIgnoreCase("version")) { - sender.sendMessage(ChatColor.RED + "Cannot set version."); - return; - } else if (option.equalsIgnoreCase("A")) { - getConfig().set(option, Integer.parseInt(value)); - sender.sendMessage(ChatColor.GREEN + "Integer set."); - } else if (option.equalsIgnoreCase("debugMode")) { - getConfig().set(option, Boolean.parseBoolean(value)); - sender.sendMessage(ChatColor.GREEN + "Boolean set."); - } else if (option.equalsIgnoreCase("C")) { - getConfig().set(option, Double.parseDouble(value)); - sender.sendMessage(ChatColor.GREEN + "Double set."); - } else { - getConfig().set(option, value); - sender.sendMessage(ChatColor.GREEN + "String set."); - } - - // save - ExamplePonderPlugin.getInstance().saveConfig(); - altered = true; - } else { - sender.sendMessage(ChatColor.RED + "That config option wasn't found."); - } - } - - public void sendConfigList(CommandSender sender) { - sender.sendMessage(ChatColor.AQUA + "=== Config List ==="); - sender.sendMessage(ChatColor.AQUA + "version: " + getConfig().getString("version") - + ", debugMode: " + getString("debugMode")); - } - - public boolean hasBeenAltered() { - return altered; - } - - public FileConfiguration getConfig() { - return ExamplePonderPlugin.getInstance().getConfig(); - } - - public boolean isSet(String option) { - return getConfig().isSet(option); - } - - public int getInt(String option) { - return getConfig().getInt(option); - } - - public int getIntOrDefault(String option, int defaultValue) { - int toReturn = getInt(option); - if (toReturn == 0) { - return defaultValue; - } - return toReturn; - } - - public boolean getBoolean(String option) { - return getConfig().getBoolean(option); - } - - public double getDouble(String option) { - return getConfig().getDouble(option); - } - - public double getDoubleOrDefault(String option, double defaultValue) { - double toReturn = getDouble(option); - if (toReturn == 0) { - return defaultValue; - } - return toReturn; - } - - public String getString(String option) { - return getConfig().getString(option); - } - - public String getStringOrDefault(String option, String defaultValue) { - String toReturn = getString(option); - if (toReturn == null) { - return defaultValue; - } - return toReturn; - } +package preponderous.exampleponderplugin.services; + +/* + To add a new config option, the following methods must be altered: + - saveMissingConfigDefaultsIfNotPresent + - setConfigOption() + - sendConfigList() + */ + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.file.FileConfiguration; +import preponderous.exampleponderplugin.ExamplePonderPlugin; + +/** + * @author Daniel McCoy Stephenson + */ +public class LocalConfigService { + + private static LocalConfigService instance; + private boolean altered = false; + + private LocalConfigService() { + + } + + public static LocalConfigService getInstance() { + if (instance == null) { + instance = new LocalConfigService(); + } + return instance; + } + + public void saveMissingConfigDefaultsIfNotPresent() { + // set version + if (!getConfig().isString("version")) { + getConfig().addDefault("version", ExamplePonderPlugin.getInstance().getVersion()); + } else { + getConfig().set("version", ExamplePonderPlugin.getInstance().getVersion()); + } + + // save config options + if (!isSet("debugMode")) { getConfig().set("debugMode", false); } + + getConfig().options().copyDefaults(true); + ExamplePonderPlugin.getInstance().saveConfig(); + } + + public void setConfigOption(String option, String value, CommandSender sender) { + if (getConfig().isSet(option)) { + if (option.equalsIgnoreCase("version")) { + sender.sendMessage(ChatColor.RED + "Cannot set version."); + return; + } else if (option.equalsIgnoreCase("A")) { + getConfig().set(option, Integer.parseInt(value)); + sender.sendMessage(ChatColor.GREEN + "Integer set."); + } else if (option.equalsIgnoreCase("debugMode")) { + getConfig().set(option, Boolean.parseBoolean(value)); + sender.sendMessage(ChatColor.GREEN + "Boolean set."); + } else if (option.equalsIgnoreCase("C")) { + getConfig().set(option, Double.parseDouble(value)); + sender.sendMessage(ChatColor.GREEN + "Double set."); + } else { + getConfig().set(option, value); + sender.sendMessage(ChatColor.GREEN + "String set."); + } + + // save + ExamplePonderPlugin.getInstance().saveConfig(); + altered = true; + } else { + sender.sendMessage(ChatColor.RED + "That config option wasn't found."); + } + } + + public void sendConfigList(CommandSender sender) { + sender.sendMessage(ChatColor.AQUA + "=== Config List ==="); + sender.sendMessage(ChatColor.AQUA + "version: " + getConfig().getString("version") + + ", debugMode: " + getString("debugMode")); + } + + public boolean hasBeenAltered() { + return altered; + } + + public FileConfiguration getConfig() { + return ExamplePonderPlugin.getInstance().getConfig(); + } + + public boolean isSet(String option) { + return getConfig().isSet(option); + } + + public int getInt(String option) { + return getConfig().getInt(option); + } + + public int getIntOrDefault(String option, int defaultValue) { + int toReturn = getInt(option); + if (toReturn == 0) { + return defaultValue; + } + return toReturn; + } + + public boolean getBoolean(String option) { + return getConfig().getBoolean(option); + } + + public double getDouble(String option) { + return getConfig().getDouble(option); + } + + public double getDoubleOrDefault(String option, double defaultValue) { + double toReturn = getDouble(option); + if (toReturn == 0) { + return defaultValue; + } + return toReturn; + } + + public String getString(String option) { + return getConfig().getString(option); + } + + public String getStringOrDefault(String option, String defaultValue) { + String toReturn = getString(option); + if (toReturn == null) { + return defaultValue; + } + return toReturn; + } } \ No newline at end of file diff --git a/src/main/java/preponderous/exampleponderplugin/utils/Logger.java b/src/main/java/preponderous/exampleponderplugin/utils/Logger.java index f8ba949..d3761c1 100644 --- a/src/main/java/preponderous/exampleponderplugin/utils/Logger.java +++ b/src/main/java/preponderous/exampleponderplugin/utils/Logger.java @@ -1,29 +1,29 @@ -package preponderous.exampleponderplugin.utils; - -import preponderous.exampleponderplugin.ExamplePonderPlugin; - -/** - * @author Daniel McCoy Stephenson - */ -public class Logger { - - private static Logger instance; - - private Logger() { - - } - - public static Logger getInstance() { - if (instance == null) { - instance = new Logger(); - } - return instance; - } - - public void log(String message) { - if (ExamplePonderPlugin.getInstance().isDebugEnabled()) { - System.out.println("[ExamplePonderPlugin] " + message); - } - } - -} +package preponderous.exampleponderplugin.utils; + +import preponderous.exampleponderplugin.ExamplePonderPlugin; + +/** + * @author Daniel McCoy Stephenson + */ +public class Logger { + + private static Logger instance; + + private Logger() { + + } + + public static Logger getInstance() { + if (instance == null) { + instance = new Logger(); + } + return instance; + } + + public void log(String message) { + if (ExamplePonderPlugin.getInstance().isDebugEnabled()) { + System.out.println("[ExamplePonderPlugin] " + message); + } + } + +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index bf6d3d0..f40c011 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,12 +1,12 @@ -name: ExamplePonderPlugin -version: '${project.version}' -main: preponderous.exampleponderplugin.ExamplePonderPlugin -api-version: 1.13 - -commands: - exampleponderplugin: - epp: - -permissions: - epp.help: - default: true +name: ExamplePonderPlugin +version: '${project.version}' +main: preponderous.exampleponderplugin.ExamplePonderPlugin +api-version: 1.13 + +commands: + exampleponderplugin: + epp: + +permissions: + epp.help: + default: true