From fcc7f3c303b5b01a04dde7b19fb15aa92efa141c Mon Sep 17 00:00:00 2001 From: mxyx0412 Date: Sun, 2 Feb 2025 16:59:28 +0800 Subject: [PATCH] Update v1.1.2.1 --- Strings.xlsx | Bin 85877 -> 87074 bytes TheOtherRoles/Buttons/Buttons.cs | 289 ++++++++++-- TheOtherRoles/Helper/Helpers.cs | 35 +- TheOtherRoles/Main.cs | 3 +- TheOtherRoles/Modules/ChatCommands.cs | 4 +- TheOtherRoles/Options/CustomOptionHolder.cs | 10 +- TheOtherRoles/Patches/EndGamePatch.cs | 2 +- TheOtherRoles/Patches/ExileControllerPatch.cs | 119 ++--- TheOtherRoles/Patches/PlayerControlPatch.cs | 426 +----------------- TheOtherRoles/Patches/ShipStatusPatch.cs | 10 +- TheOtherRoles/Patches/UpdatePatch.cs | 5 + TheOtherRoles/RPC.cs | 44 +- TheOtherRoles/Resources/stringData.json | 22 +- TheOtherRoles/Roles/Ghost/Specter.cs | 33 +- TheOtherRoles/Roles/Impostor/Grenadier.cs | 3 - TheOtherRoles/Roles/Neutral/Amnisiac.cs | 5 +- TheOtherRoles/Roles/Neutral/Arsonist.cs | 11 +- TheOtherRoles/Roles/Neutral/Jackal.cs | 2 +- TheOtherRoles/Roles/RoleHelpers.cs | 6 +- TheOtherRoles/TheOtherRoles.csproj | 2 +- TheOtherRoles/Utilities/MapData.cs | 24 +- 21 files changed, 451 insertions(+), 604 deletions(-) diff --git a/Strings.xlsx b/Strings.xlsx index ce3e974e32cf9eaf6f5874955c8fbe7f112e7bc6..50efa15f1526dde301e0fe84236d4c40ee89ef1c 100644 GIT binary patch delta 75520 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

g|M7MKw)Jk8B))7guMj@~4A|F>ZA@Wy#tx;46 z)QEgxk5jO&F{4w5134Qy#nZ+1uSP9UMmc1zV=!TzWe}P(?fSO?CFtEZ!(bh>R+pj? z5Nn5heIttH0)MQJno2I2YQfq;cfWyFx<`1TheVDf=%I+6i{6R`wKH-vW4~0Y=9<;2 zk7hE+oeYTfW*k!$R(s5y!k>Q1jRtDK{B+fKy2A&`fex~YVnF-RIC%PvCmyPCdT1C@ z&5u%sf)zQt_4lIjrYo^K(fYPlO*T>{J+D#4n?PhC?tf1=_@n2o#0$|dZKS4UKi^Yh zBPu(op7(NkkEuJN@;kn^u7B6wjQM{q$`k*mXvo*NmiY;+bb)}qqt;I#9S%ks4hBTm zQS}pTnxIYxD=MnN%^B!wEET!*zwwfvtP8w17`Ok8WV|h{O;7i2z?21THefGPz=n6Y z!^IQ9V}B^-MDl@gSG1J zAd=6VKHl~#S`f8VcgGP)()ikhFY3T)*0`QBV`zlj@~TWhWe3CebYPp*{*k*0(oTX) z;WSnv(M71k{O|x_K%T!7iKWe0b19lo)d6rk6HNfbD!_knT4VRHG>1etZcNwk9z|#U zds_^^vqUoU3EpWJf)a-Zmt>ZHQD*80j1Bh}KXL)@J9iXv3+hETU90%Q-JEJH+U?16 zWuonJ;V9e*W?{kgEqqImqTUDTHlh=j$G=qTIWXFWA`fOq63upJJZVqQt0byXDc7Gh zBFyz?jR=2h!cmCMB~g!J>jKVbx(Zfgy-&&IlC&C4NkO=QeS2fj@fVpIVfa`W;3PuB zMmY4>5qC*GU=#?w6*)&!k8>_8;gMA05z+kIjQnF#v_lQ9Lnt~C-gvCGqSk;gmGy3AzAYSp^9aZ# zvx(#QToECW<4>$R1BhD+pCJ*D6X3{a7CCIx{)=Ytv%5}~mz&c0YlY1X{ zfH;3S#y8OxdO&^x!lh~>7F~(a9T7(E#~oQluCt3>F8~bVvPIOon{M^0t-bu=V^sP= z8eMAZa&+8r^VK91h#Rnr>`k|9N*$&r)gRBahzkh zg1E-P79$24u@t+zhgeQ!s0&Uk!pIh?iFI_djEHkoGqNL>RWp;XHvgK5*a*!{*VKR7 zgHwf-*TvCY)YPiYeS3NzlZ!cgMDD5kA`n!ta85{)OD>PWYSh}nCqyUhptu0K4MJ!X zK@o+th&E7KR%y>}s_|D;fZe~ZCT1o2H~=cgOSXggTH}%d*tXKzus5a(WvX-W8szpr zqel3mj<|wGY(&)hr(^a!ql(lTp7Vc}N)uixsPMi8g^}o>SI(m~sF6WYM%G@(P-ad; zABJ5}$QlR1d0e%|(xNT*N+c5z4dpYb$X{^FD654baJe=DkPy{BeUn5^hp58oW?LFr zw;~be=y)WVNEcwu)>tAbl92+&mq?3?QDo7G3~?E-h(cTbF47tSdxdCF)I)!SaE{cU zy&IFN(O^KvWl+M1I`sr8eT{35cQr2=pROWC)@1d#AAdko1}+PG;aK(dfR6aTOsHpM znXgNy!E+xI%_YFTsttypud&-)EsR*aIFJRXHfl-8A=C)bE=inFJ0k`!XxvrSj#Ad= zv&HQ-9N>jIYQg{yHnG;=rRIMT5Jo^fP0UOmz-uEttoqMAC~TjX=c(t$}@7%`1*j}gld zxlP-hcm%k4l5Y2jG15SvJR{A#kpw52tcj{;#ol-Ly7GIYs5iEfP+eg9D@$3UB;!abq$8+ znljQG_QDeWuu_QafuXPT=AEQ{;PM1&y@{GzAOw~=p8G%=YdudRg+$h8%-AGcMwunb zOm(wvkr5-`0+A2W{zQLKTTQM4?_46p(Zh&&99d>I8c<&dXFL<52}h6SVly=79a%=~ z!;RysQ%V2-o@jnEk$bX1krbMxHc7 z$5LdKv|qx1ggIN3o#Mzbbh<1HG;?2Zd}xnMu~T0BFa|nP#>$snOQupugf&F~sCMVL z-7$?UFqh-4#);_BjF=f_F0F}~VHO8)VoL;IaiTK?voHzQb05=_nUPv?kcQe?l5hyEly`&J?>}GMR^M`)}=60*~p2mTtGP6u;S~qZU zXcCQw#f>d8qRtePQ#Sn$@MOZRa%(KV$4r_vT8nis(w{8K%sIUKy&8Omjj;4)yVNlb z<}|gtEegoA#leUsL#|!zF71mp#9OR{nWzxUGGc8X$yBXZhDSrf;}h#(#563*%=-Nu zK`x^(LO6d-mmjMB32B6)tc#f-MOmH^TREK2l3D7AFtfYt&`LL$LoF)@L0%A(9H_zNA_WKj@8z#3Um)~NxgywhA+Au+S7g^{tW_BPbu8}55@ zK8_r8R1*rCnfuJ8CB`Q8b7+Yc5}!V%d{wn_sJeg0VEcTw*Ph-~N4x6rirSjAC*Blt z2Wq@u9Wj}Et@pYBaL%~ z8EJpr?I_A*lJPr|p0nrs;oJZ+SGZTYx)`w%lGf~}JNf+~s7ARjdwqq0H>z)_H1|=` zR#!(O#@FZr5^b~qBj(bQj5La?*c^!c{%Jo&B$u-p2vvBbt|H&llVT>|;E6L6>(TVD zXU}2m0_j@y3>a}o&n1&BX~ON47|s)7#BP6{G&8I9y|zD#V!x&Jp3?fHC_YLmm|5vb zk`c3*AWM>$FuGcpIfk4pVqon=MGUTbMl60S)*OpRaK|kfO8KMb!YT$&4Kr~*w^2q+ zbT!hRl-#XsdKJK`F1AHd zBDA3V@j_{8TGCU5nWfb*VroyC5o`ahtp${~B4702Ia0ud7pts>q4PGi$k2Zzb?|W| z_VME$i%!=rSg)Z8>omc@2NPDU45R?TmC*{ewuWa5+W=I$*+t%dw+}8Lx@kWX3*1 zr@PSkL9IO!IknKhj9DPah)wK=i-pA%@OOlpdLR!4A5-c|%j7qT%M(oR?%|G+LR^{vl?cm zdcs&`K)u6!S8E2OW*HT&f359iY|`3pX7xLq&mW8xKkV8ID-_flI8uFC1}>5<^Nnq( zSjNcdQEdzuQ^kx&o7=GmmpQ;wSbd|iW5)C|(x>E4waHK+fvSM5UItvtYMAjlm*1dh z8*u8->L2q5Gbr3ws@erMwaHPNjM&G)3YN^2 z(u;?vmlJM}cK>v71H921#ARW{{(h-2KUC@%qmw5iPaTWOlYj&clL^5)m`6b9?s%G* z33#~eGBO&tfksjag_2`kky+D7@itcL8Xe$}%zPdyv))0+HTXD-O+Ri$j z0wi7-T=Xkr#Q1-Hfret+(KA3p7RE-1ux|goGyo8DRWaipdE(3*#ReX8E7i6L6yQuG zCK{K;&F#{PDB?{T7_l%3GBan17`G)NBL&GHKC$1+uy0*8j93Td3aF)qE6bpRber=2 zMIpNnSN509F;U`xW^W{WnF(;cc5bYR>?n30 ziq6tR`3;QYsEB?Oml~zn_ob$K6y`H9vq1am2+6J*&lz4mCFi+8D{G&te+0 zK6z#qmh5sq`=~HATv~X6sER#1DmqRl?+Z~-JBNgq(^p6ZGsl|4=W5|Ou#K@l7y7sD z@863}W2DP2f*V8RFsj|xLL+Mx%&gmE{c3p?E4F_c>$iJe{4#PsCb61A>g$1i7i`EFA9Dzz71dj0yl3Fn_SDHr~TWku>*KtX1^$%Qu8? zH)3nbo7#A(_TY`I<+DTTp{OhaHZjt1mx*=^TOz2sBu1j@g6)3cq28y95sUlenF+YY z+oFH6bEiEzt6n^o0%mA6OpQq!6Bb8LotP#Ku4=`MnEGrRE?z{*%4%$+wDwvurdbCg zc4kq=PT-o2h|l3Teyc%pMfj$lDG(*CrX*cqG_>cD5RRR7Fti3xbIe%28zkXl!lr4; zUNipD@-#eiVyWDlhL=uoCu5s-$JAdtUg3X_WC&;-jhO6qM9e#1SX(KsN>i8|Jxr~c zxM#*6cs2RlJG)~PdCp8pOKe9|gA&s_iW)Kg%}7&3RL@YF+btd)Nt&ZoFk*Er$%t7R z+7b!e`Iw9DfCXT%E25u$~PsEhrY03#qTzeTYzS=;w>3BYuQ-e!%zpH;^ z#&R9cv}H2M#Fx;5V~hRU5xapPo5dq>TaY3<3A}Q4;-5<4t!radLnYL zTusdQSgtfP2ik=v_WBE|X&KurJslU`S=Zl<(S4EVgq2-JL4&lKf%PyI1jBxZGd?Qt zsg!)>5Z6CAL4d&tOzljSNQ)61lx%;m^kl($n~7`gjRM0RlRU32D#zN9^E4EOM}>tLi`S(Fh|Yf++8TrvB7ab`>yS70^F8K=pJaVU*avLMj!jkJjbnep}=q_mr0^#V7d zq;ZT*CUZT-N~9TY4>@D9P=vmeL8C0 ziY79m>-NS-0&>J+TBybmBl1CACKGLG%`_x+U7@6@NKrubI&%G)UIv>w6{_~-2smtO zp}09E3z?)dxOj=T|D$y)mW~NSsk-*}HUJi)mcL-yx~bFD($?)*JZ@cz+>csklksHA zYG`lesdg$IJN+B_|IBGlog{y}7i4E_Y|#Dp;tGxhs%JNU_*lN>wGb}R&FKATBu*`s z`I60%7MLuBOO3P1WV{KWw7N5V&2gWIeD@gW;ucjPIK zAZl=tvTR;;6-N6iU&jwoR_D$N9qDixfc6~a2 zLtX1O(Ml$)G`B}GI0G^-fbd5Mt>4@RBS%vgagb<9HbrlEP^p*Gb@2z0_Vh)5KsaOV zp*b}~-4sNk#ki((^|Jom3**kM;`7MyBD5l+)EsSn4*psAl)j@|E z-{f>OH9qQdxaE%bUZB{_o?w`>In{d zDB^i)Pi>V5i*pZq3ykbXJQu3rPM`~I@%XuDT7lQccKm_(V;J@@O~B z%)>Idr4i*^vPOR+%9Z&Hjr0N4;hPYoIqggcA`Ukba+uZ1$h_v`u?bO3ab#p7mRW#I zh;!I-j2Iq}9Fe#QNiG+Qkp}u$ItRH+F`9ulXSc}}pEW*X=~I~rNXJTyWh^NC{IM#ck!${7&_AT|?n7;wyp z%^By*NaHm0lo3g-?Pjd)16DFMq}o~xnVryLOo(#8VoZqA^*ctE1s4Ft%xG|NFO0O& z2Z3Tj9)o`+n2_X06EHHyypnq(?L>LGkyg58-A0CnSLtiSU{sWALXfWXG_v57D;Q0P z(-m4q^g>mW2|1{-F(JlRhGJw?=_(5olDI0tOcN=~-pqm(OEj4fo*B2;qMLl&PFr+=A8oSSD4FGC$w+kO zn|6B$~M)GwWQk4f#*!+ENiBj~6Ab zb?tux{6dsX)Qpo#RB9)CY`w6Yr3BqhFnc;zw4#O$&)Xk{IMW4}yo7O_TP@_)nY~gX znbOa6vV}wlCnI56G~A6^dZby`?^xFpanKW4H{wL-$f<3u74`?d-Ay+ zy3QV(MlKaWK4?s5dH&S3ww76}MT;autx6o2D!>UN~y=eOxcnq;b^Dk4;bS9aKo{Qdz zz%dmiGM1%^T0OaetO>yJ*pm!3;~RT+=L@wwQp(MO$E(K&Ko)-^T7X!(!C ze<9jbe7Su!f|J)Hq>w=IUb|H%7j|NXG$vCtS7a-#BSctbYOlW}>h{AajAEgvn>_O^ z6I1`2XuIXCD553A^?FQn;Z>{x*q?vO%Rr6e$~P4J8K^Z%JD+H>Xmzo^^y?>@JKmc1 zwFO2uB)J!I{Zxjv2bgCOq8TUVT3@oGFVc|`(=kYHMq9A&$ZEPsltly1gfKP|U;ymd zBe;Ip7-;hu8!z>WXkJciM$wFL@$h#rQZrYFPN~j$^f2czN|vSiOeB>#MPq;RYE-Lf za9H|mK<7G%nm$o!^#1i$+Hr0Ot7Y^!Vo{bSo)BpIV|CH!u?>qzHuSkL}&M3@HV0uX8cn5f{ zZz;_#s<9#YY30wF8PT!(#YlfFaXsP8F_B}bL6Zq5cVUdvw7qm}iP&g@u#70{^lY-F zMYM$%kLOX}4+hx6crTrICtvfBk*KHiiHc9>lq=1+os>O2ArX5!mWnn2*U-YrQZy20 zo+Dbo>G1izA$#Dl+Fi-#CJS$N!K+osjUn}$3Nq%Nsquc{q0ke~8Sa0Dr45{g_(Qe1 zU))~uq8E}DwPIVKlB(3XC_r!<+ERh)BJYXI>9cpEjrSU8eaX;rrQhp2wB2xJefo5?ExkCA~m|XIhs0?%-nS~6fK6|CMjfPT56$d zPaW*%_ePz{xt{HO_N^+H+SO=*;${!%28@ek8z5eJF?K)NkmSM*$spq9^ZJ)Rc#dV2 zKSBAkXg7$)8a81lOp#p6+&D-iblhj`{+8mZp&xBuev7D-{}KQ#`BKW?T5?$bn2 zPe1?cRLc4z|C&RDf5MYbITBmkT;XpBSt2)7$c^Cf7W&>h0dbTGD~t1szBRSGt#-c$ zEM?%QpMR!ab(MeSJKO@t zqOnNvV)dY8y*NVYY^GBS8d)${r$Udb4ZRT;5T=Pr`AUBQTvpELU0zkAJ$~_-R_l-a zkZ&ret=^&@)mSx%a~zb*n=AYjO$%MCCoN|TXwuwb{Sg5abugCCy(~QM)RR*6_u)9@ zOkn*b%;b9rrfF{ZlFM}Y^I!a}qw{X!OMspbgMfaNK5D)DCD^4=p$^QC!th)C`2{Tv zr|9-K!~%cCy%)Mjlt?!5)VG)p6=qUforPDOY?SgMQ_*>dkW=regDk?3+=@c(vAwWJ zi;5daXvzG-Qe*E*bG@hdOAc3Py>QQ(mdIxudmm;|1MF{hH z>i^)rmHyHuYO;4^bK)VF6L*r5F-C0T>93_ThFk->((>++#S)9V3x!uX4gwU9XW>VY zjuwByA@abjaE$@<7(wvQJO_kvad)xwbWDvdG7K(ug`!BQqP(Hr5j8eZm_+b#Rt-<%nS5@f@Q{%7K$gdSUV3XFe9 zF4oSUM6RQ+F-6Zr;*mt7>>|#UVFs|%QOFEn>hfw~<(b-;mGq_BSW^AVjCxo&TvO|Z zbVNVQmHI{`V!w47TF#uRF_TKJy~(&Z47h^Bs~jqV4`+T8UvI1hA& zajrvRvu-nW7rHL4Pn!F^KFX5?{*Y{=XV1sz<(2QgeK*#4*8-9hK$)!eWE=jP$XJ=A zb)VFaW&Smw?5j>vE%&6j)%n8#U&i^~4gzJm72;VY+$NH`%{&l)F(ir{i7p+KDjHd2Kzc}sgg8U*UaaA%3iv9a) zVpdKAaV6OpiC>Cj#0lG1l97KVOG^W2p)4zt@(>RX=^&ClR(pqPeOzKGAlGrqL|PnP zWF}08!IG$i!;3wSK-985z3#Z=yW94M9zbn>{@It7<6a+btH&e7)kpXg@LSwu z8RV8-1)QHS1%>0DP924=sQ@@1$wtyR;5AWZK}=p-y*TgaqazOYbp3yQ+-J`({*0n? zT!_IRP=5JVuXCo;NNpUMqvOW=*Y?9P%Bh`3>PDx?Q(*FLA4sOV-z}F9bi-W)W({Tc z-|NFp2hP4uGwx?YSj%+QRIws3Lb?P#PmnMjitQIE7?vG0Ei5J2R@wOloT5)X!OB@WGAL=JlWe5Ps>H(h(wZ+s3^;=Ik#Cb3DGWF6PbObG zIa-5@LQZFmhjuLqLUG_FQ+Tp+Na_c!$B|Wg3*|a)C6=#eSwi%|rysbTN+y~=C4sIt zuO&bA#JSj=JHUTHN@S`$vlU5vb^%RMaR`hv^uKSnl)G$KsFTD37y1hk34OTiDwIW!S8Z#Kr zt-fm68p9`?dG4GVj%I)(joMG853b&^LSorwx8DeY9QYcs#t4cGL{rccsRuY9A7X8R zf?@rY^{MZ;lPXHdeSQE-aG$EiW>9j+wmsa55^H~XMyMxHo?7XM;vmFux0(~Bs(My0 zcjB*&42-h8uPW!Z_s$db{=QD~9{6R_T_^M18a>@z=Z`4r-{!q9@ zr^tU5KWqW+zw~6cG`n5u8x}^5keaTJyFv3w;h=fI-|ySAkKwN4x*ta+;EG5F1U&!3 z>a5!AwWnSd#}D(_QLw73`7IdQ-W&s+BZd9O4@H|2QF9P^$5m;vigPU7|Hyf69=C$X z0AsVrCIqu86`6qh;80Y3rk24Evc=LUO`?Clk2(!J>_;GM-L}^UM5=1x1(dQQ0R%k* zhM~jfYzhv-8!2C*aLnYPkN~ZyX+epsc439nE=yf6^I4h`NN)xOhW&H~p+(9Z#poUv z)u1_04~VKV$=?1DBungE-0DVdHq9{2!vj+oF)TXEo*kt>Lo0~s^6-Ge_#U z`)V|2PYn~Thzq|WYQOG0HNHnGj=j`jbW}+khu?K4i z>&P2!cMq!Z$A!5^)b_(;UKC1CM)G?i2k#7_>a<&Oj?ChRu~OfJoGFt^RFKt{d*aY{ zPi-N2{wvyGb=?&P)K@=4osY<;K@ksbVR%F2l|Up;&CdR{V-kM~StQ!ODXxFNQWGMU zaa#TN=|T>9{Q2B2mEGk!^e3V+W@IaJYf(9h@+;BidOU)KKEFSNk^oxqXn`8V)}oF@ z8B6x_zT(D~!vVODI=eNnO!3^5Xj^*ujEHaNcJW_iYY9C}R+4Kt7-lZ9vRK>J7w z={u~Sqm*Nb8r=RZB)ek0k|=+F{(dZOHKZbh_$x9(*P7k=k+wVl2f(q|GqDd~f9(7WR14xh6WF4Xt>ODIVu*YL60 ze&+ZySFlv0L5zVrp^aEB=-BtVlQ0y)j$90pD$dXx>lsum);%d!dI`>RkXHh27006 zsAi9`dOBz8Euit~*|*k7srj02QBA#)C|SsU0Q9A>beSYP+(LhNrT77T*-wY{!8x!C z3fKKYUw5H<6)PB49?WXEeJGOnh?>% z&c4m(4hw7D#hn9@hC|0V`lI>iebHJ=SzDX3)%plQE}X3F?S;bnfIT%){GiK7^gmU0 z62UdQqr-lNPYiRM&6EJ_g0JoK+$RfAo4H*}~P5SR7&6oWCw)7I{=#@Px zx|+!6MvD)hs*x?sD+I`?U~+Wp|DCz*mjrlH{D^1~ z)MvO!(N9nf^`{|DlViNjWuR10gPF8N146v7Ok7 zD4q!1$5`-j5Z<{x9#wsx;i z>s4|S_(cp@+gsDct~k4Ga)};z^T*=6iVcz~)@H3Ws)u-AV47v{x%oHGPkb&MH0bT; zR2;yuglwSl3RntzB1P0kDD;+UL~$64V=tES&xZK2!W+MYAx4pw446U=X%9d$4n{h0FKg z9vzouM>f|RbKs!>j0GbWB_%K>b6-Q7$G?2ag-ryRwl~4)N)r;I0@tJ3w<&M}8T^bZYdijzKE zXR0J&C2+Tz66G}d`Hk{I)KSE|(0)jaVQ3NT z@kMxvujAiBzBg7a0fo>EnCDpOD5|M}IYj7XPSMSNYpytc1;P!EsdzSS34AHu1S^$$ zkuYRlFi;6ykC&kr0UCcZ4=Xdb3%Suqu%z;XAq4$cNA5?*L#^3LmM@3GGG~hyx(hu~ z+P`^hy%`qg_cTzwXt^*`FK>< zZce$-aUh#1I8KlU-vuk}FR4=aSDf5>L0CmCs#Un+sFQa6G0cAmXdF=kYJNAytN?Pp z(uGdaRW={R4TK#IYze))*Pep#zS7lI7`gzMbkrD*jul292@6!o-R8lw@vOXcD;{YB zB&)(5#r}M8cp5^ayfBTm#a-Gpf&(F@+W|$%XPK6>Q6peASVG3vnAWVmhl<*Lge0+; zrkD$UI+HqX6fA$JJJSdbmSf0=iz=Dvd8B_L8tGK%2t9oG=z&8DtAj@YC>6v8%S$sL zZ9RTA^Hu5x=`&}4oGh%4VUtdV1~%L_5>&~!>5L!3OBl8y>=?y2CAz#zE8N@QozcmAaPRgsK%i> zlOUD@pl@!$qJR^la_5qqLWI&GvNteEBV>)q_pTtxYL3O7wiZAbtQ-unGaBSf`Qm`! z0n3av2gHBq{_>R@DfkC!vhn=0VV{oNB}Iw+P(9uB4{ALTM{~ zLc&Yar^KPDUdeYu;5AHLt6W+f?5~V2=yx9&DjOU^b|vXP6J6cWr1+{T(k{qxX-4BA zkgU80VrdvyXf_-n;<0*re#mz=1{PP2#e5v4=l6fH$`b~b;k!sj;gfe6WZJr*dY{U&ElGD3jhJ(H_0CnJ3?{umD(d zau0t(mQvY(YEdq=q`5e?T_X~3wR(WBvIWZLXUg~PD2Go3u66-;(f5XOiQTME;IP34 z+5+novyTGycTGp_3og#7O`sc9yQg66MS7@E#gsAtW+2ThVY7u!4ON&!2{sD#!)98K zhh0w)ZI#UyjuLm58IbA*29^G*v2k|((k*}FvPCWcVpR;gYdLpJl#7zWpF(|L?W9On zZh!Q@^`;78SV3_e{XeTwXO8W5^6#$2)T$}gim#)wcTe?^Qkn|4*5RRlY2l53AjJk` zUoS2dr{Iwdb)o|Yj@f^v6~R$(#3utEt_d7Kb!;J}w3-VhaD&>AECO zV{6ue26jgaHk|zKkxWNr17rUUey>~ywaho%-j}D#BNuDi+1e;CUaslJ(O+S{w%2YH zW}lWPd-v}7j}KUKCFomC1MfF?e9(V+V)yqYotjt6(Gk*xS4`u_c=LATR+;tdqH+252tk*vEQiqT3y!QUbsSn@96WMHslLzk~F{)Owlz^)~1um2(@G}^7 zWLtacHPmWJwP#ajI>D8C2IN|(ml3hczwat{%tfzjg{R2KP_u5%e0A=t13y0aBQC!W zI>EK^`Ujn`LHXxrY4o~v?;d}f4PH2g4}RI1ZvOZ5|G|9xV^7CB(w>mH@6wf^PYvHj zScR+h!u`@Fc-B`6Ls7|j(4i{bLo(sGxf56y2Opm?2|d^C)Y|?lfK54;NArye-Q1W` zGqwGI@qv9`E!?8O2tz-!bofJ~McfB}{xvrRMfR_`8!=~F;YuHV{(^rjSR@d@T!N(( zXV$%ROo97E@&{EedkPE^21uZNE-WCbER9o1IMtFtRb5rtgla=JM!|}uF-&9u3sGM0 zqSv}=Jfw~^dVW(Iw_hL+XNDEhtXDB3Sn2I8-d?FHvWb&Y*kyQQA~imM^?g&ywO5fe zE(I$eCtA@$@9omPQFMO;z;VEfWfSMOsKMG@94K>;yZmGzaslpLnD7M=p#8$2a<*gt z5V;ssosOBnqs$n!jCMR0y8}jZ-?$7@MXkTX23IE)TeP;qI&W}fMkdI+4QhGkk`-D% z=n)nhEe4P(z-MeLTsD)1HR*4VRe(X`pltP0o8Me;HY)%+V|{;-b4Mk8WR(H_Wb|nV z_?enOy484MV%vR4n^7`K@$PwWIGcsBe&C-mN$3^Kb!~%$f%P&VGY|^p(J9Re^e2@0 zf(f&}?yNrJX7IQ0;dXo3m}}r6aI?uS^3i4$i5(T)DD>sZIi?EI4`bZ}*Q#@6_W>Or z?Gdpx;qpDzQ*eKMoCh>-FbSDhKw8?6C8WCvv)oUY&3b;#MzE5*P|2-&fvpB~3;FnP zYAE^DZjbV9Pc0ViJS5I&ash2B*;mCturchFHwizAP;zO4Q35;=`o(rdK01Yus?N)Vgz(r#2K`o4=SIz?nm_gTsTzeYq*gYO(=4;{| z+X1}w3lo2C1*rB5Sk+Kq@5P1EEs~Asw!=p-9!a-L8#f9w7r2NA7&dCaBqhEwx30`X zrFB(xSdng;&}Sy@K10I9vW;8#4e!m8UlQ(E`eWcToS$PhZugv&vDlNYuLllYo!2Z% z2Wd5hrR!D~p;tHa{_LyS4aupewPFXLd`9XWh8%xoEOgRQ65}~Il#<|?WMJ|a2)Pjo zOe8Gj58cCdhE>KdBGRmlTg>+uh>wVfA<^TqD(O|L)yG zTIH(bXlLEXZh;Epi#2!H$e3kkV& zfazq>clbgedQA?Z>H%rmul9z2X}znYoVhHuV_arDw>y(1oJx)v8wUDhxG;Y|Y6BSu zgVQbo;sh-h@t&{cz2MS;Bc1{dj7k3DwJv`Md?yd=ioJvL44YTeAJo1$6^24A)OwO7 zj7fSE9F-6O@f5K-mvls$ixDT0V`aMIgrOBJF1gJS(y*Yno z?i7oDU|w+SLf+F;Z|7C4yoWM0drK!Ciu~dT6D*kBwPR4afG$cmXW$k`K|-=ptE5Xn zXzil7gZthr0PNiKP7p0EQ!52>NQ@9e)4*41DVZK$Eo^2*$<$;uKjX$+d1Q{crdT|a zOKOtSvjNm58xB->6Fj<`aHZ#f08W2|S(q4kSX$*(@FgrIoq2*y0y)GY27J$OPm4}K zFgQCh9nv9%bs40c59zqHYUfmKTUIXP$&5U*Bw|$KM#{nWGj*5PY9r8alp5d8P`R|H zNPkOQD_ksM-9UwlfiVUQttDx3!QR(C7toJpjeW^iUvyuBI52zKQ&&XKBRM-%>Cq>5 z!zF;>LuYA)2E!+jXDlCewIK_3(Y6D1l(2W-v4`wSPDRIwjz?O~Hiv(x+8%?(lwGF$ zXcS_m(RVGJNuLnzIBmY2L3zxC9K-=L6F-nU5~gqZO=nBJZVS?FvM}(zhGn;8yv-#w91X5tuCd?OT);0?s~@zDacV*0M#ixT13)mu#`;IwmI@E ztg7y6Gg;U9N&~lHO{wj~F%5rPO+8gxhu?QNwVkoR@h}aTLq&`ur2@_jB>QtlwW6+q zLRPX1*qccTa@cz&Hr+lk$BLSvc7vSzzWcHAVC8A)>cisG$-*S;LpS&L7eQ4Lt{J*B zg4;Nl`D?b2oO2V^lgvq9qq&%ZQS7IeMI`|rBm6aA1UBr6TCZ4#wcR|LK;5%XsOLVK zX1%QO5tLo$Of23tmxm<*9)I%Z$?r1OhdN78;b7d^>mNSiGMFrV$S_; z`?onm29ZQX_P98)i8#TAoa>h-30aJ{Zg;qYWVd}0=OBgWA`c+~wSQkbxQ3eB{6(Rg z#Fp@RB-YCFAbm1ly@1BJP~G~)-amvuN9?i;n1!5QP+4Xh8{3;>;lZgrLi)21TxDmf z^;FUix)e7c5P62elAZ#M!jM%y0>z!a)5=fPy08&c9-y$2ztjSsRMRcsC37bh(Qa z>58|9k?swQmSB%GrfyC_5Y+M>Ij0;jANB+( zB&tx_xQA*81dvWW@?k39vE7cF9mByxTKLk$;ev8|rF%n(&#tdB@d6ozu7Dm=x2`V3 z_(bU@kEq?d=XG#*2&SSywZ^Ns3|!j0>}g&3moON|z|rIqS~oudn*hF+r3F_Wv!Y;f z4E*n{B(wqWHW=)9I}NHv@(_ld55=Z*VBmhaj$BQ^ODmVTCjlOR$;rx>sLXd)=C3-J zjUA5w{uI0NMq>yjjoamgb+v`cSxH;{^7^srD-=k(nemY)Ae5rIm>bkJx>KyaA$&R9 zzLS`wb$vu93@F@lgS&Kw^I?W0RG#e(CA_{+*J3T3n*;g5#1!6?@vA&P> z)-ZTP5)EIf8A#vq(x9%4Pw_xBUrN66= zveJV&0Op;dUWcrw*VL+(I%2kUht{S@vM`QNjI28F5ZX;Y0z!W1>IDS8qba25PsW$_ zymRo(|19NyFFP-uRXnA{u|DWVxf|)o+ZbZX_o{m(KDzFdvO%aFUOO)kW&xBra!Y|t zjkwF_SCJa$!}W^wg~4PTOkf6)a~}-vmd}BS2`?0k@rLHyW#-krvqi8tzOtaz?+t9K|dSlyE%PXSdg-OcE+&-yo+s zq761?Dx?%&_6HOYjO~J+C@B41xN6jej?aKp32=mw#4=GdZ2A%Z-~qWZN75=#KbnV1 z=rq%R`X84712%UEs5-S(L0ed!%6>CV2|abxqVzM?v~!GE|JZ}Y z8&nQ~=h@t<6W38n{?Hh>Avh2=A`}qt;Vy%Yo&514K%jreK1GtdGZy>7Yd8{w2ta#> zW}Nu0f?NiQd9nbp%k+}2XfTuSbtNu+0EtC^%i+YYIaQU|M0pEmSPldvWd0EfN+y)1 z(AZDhZVoz8^qwiZEoO)yzba$YLP&EVem!&E$(JmVu*qsh`cRiG(IV#pAoda3&k$Q(!Dz!V7o@SBGvP4 zV=2_DDwju;gY={T7PEd8E3z^(g~8Pv0b*o1Zu*{>}0W!RY5K(to8t!Z`A!v<`B`{t@~T_p1v-3>ZKo=#L0w8f^hKIz(#!==uO zywJ%8Y}f97Tmc86UeZE_W{Y2AKuyRrdf|skUq5utNvog2osRO9lQ)a&i`wax(OVj3 z<4AO$P|GrO;p`B6nKTBmXTS&<4VncZI;vMDih#uq0xW`yV}cN{Z&Xevy&fQcP?kQ2 z;16?&g3p~sAXbdkOV&r8Zx$|h8l8>C-$3nbMjU=AZ*78z4!;!Uu3-rAi#WpZ3sFt^ z6&@>gOeTmd#?S@Qg%)FFkiiMa5bityy-}wFitr3>xXrLJ?qXinFG?|--S#_|9av#& zW5KoCgXMe%H^LR&U7cl6TwT(~XOO{N0|a+>cY+fff;$A)L4sr;FgOGW4DKF0xCAFS z1PcWB!Ge2$muGiB?7Qc~t?FC9f8D;P>U3YJ?lZ;FV=&TL3|YCJU2A1%D2`zp9dK)> zL%~AwgrXFx8<=&-(~>9e!(Vq23+h-(7uSlL7?39~==XBR_r0k+@&|=!1jkz8O4D0_ zj`M>vK4B&qJxty=1$PB_ zlJ@Z9uN#O>5Ftw3e2eB5ahm{TWr`}!MUvlz;oWj<2OWHuai^@Fl8rPDVAKZ-90pBp zfTFU%)+Of{-LJ303m6lWxtpq$j0d~oR~Gc-SnYMuS(iG0aw9B?ewFq5S$g<=*^o>o zfO>3iPG8Q_esaV7MC9HPCpq_?PG1m?-^AX*kid1;3rRwfjS15Rkg8^?XirFkw0~qR zaNAMe9fLIn99Q9&`TpBQ?Vl;e3U}D)1SlvvD z(z_VkgpeC`hQUo83QK7K`0x;mUa-@^<#qx-P%b2!^-FpgufPK4%Ffqxj8AEdkxs`p zMS>`?HvMC14T+qb4;ixEw?bE?8GkaAIvm3N$tf+rEQr1Wc?;hW|BTgJ94p3i<*W%# z{NU*&GyOAU=TvhMQ+Zzc^<8PFO!lJsv8#QBfdToC zIds99y}Xj)WYpAJb|D#9WTxt{_~#enYR!z$RiAEsjJ#E8DWTmjR5F31;J&A->z{cw zM3B@kYF}?043{1g>2&A1L(8<7G5nM=YSIh*LaRk@$rDbZ(bYZc&+bJ>g!F2hNcw2r zMj+K9^$w>6nUU~KiPqwxiuM|1S!?L1pLC|fMnlkZ&Q6BpgQe!aKkG<~KBgzx;Kh;! zMe7~jpIEBo#rK|W4@2z{lUUkd9)Bwi(IHrAgm8BiL6g|NZi&V zPDCvjfHH{qSJ6^lrLrBDFH?AWOO|Ubo9GZ$qodVv!Z1vRSIUXMM4R4ySRdwVv!^mf zyVcDb{`!{OW(*^yR+V!CzZ619ea;kPncE2+yG+v>ljRwP3hI!ihPHLjIWQuRdI;nJPdr2^%*%va2k&r^g zA(5Rw&#^tc>vx8x&ceGg#fAxMbgiZR!>BUArF(+~X_p+(SKt#594AM{k+Uw2P?#7T zYl&~|2IiWRxvo!_OUlg-<0@E{Sjou$^jl|xMwc-J^8AR zXh{8~zuXIBB)D2u^|Cxt@szI6Gbd^-@7AAVvTAc!f3;z3WS8ywr3Au?(f=9A4v^(_ zs&+U-ucjt3Z?2nnFjpPG8M`A1J?@`bUsngwdpM$ZGe(u%qQkyouq7(O>M&B?t|RrJ zaB0E%ugNrz^LFo}l&>o?HeyVd)9kq*Hsn;|sR)4Hjf$S@?pm~qytD6+?Z#PVC z5-Eqy9RFFNQ5k3b?caTIb7H?F_B?+UPc&LDc)jKJ6!;19`#I~LcIEu~dnn4yF=TJ8 z64$Nb_%f>b=Cznl_tVx+ll9^}_R5XN#TnQs;Nab26W>1ZM<3RplGdFpNpTyOz*JYK z$(AJ?%6p!gV@UIR?~Y_wiTTB8Px_gU)4tnB?-%FQ6fcG~es^!p{XVmtS$e=eR`t#j z%lr^v?sV1@c9h#L(E$xz=~D3E(;_`?~dNXN7yDy(@(~h)t%P; z?oF-|2Pg6xP0<|p@~n3yk*ixvA4&X5~-oqlRl|GcU5!*mat6!ii^ z?HhKhCav$I2c{GaSCkf!F^|UTD+p~a7QCo3qrw}f&|u6$1bmR`I1_r#hhKfvX){=Y zFpPKM%Xtu^C*>jw_K!=(ffRaUheI_G-@o>;+_=|Y5=3H-(V>TXY}k!_i0$O6EeG%> zz5EW7I4k(W=9^#+j2WlF_Hn3I=u0^~E_pJOB%Wd=I%$sY?i2FB`@K56ybA>T5^ftp(h5O##Yi@Qdl_4>CqiBtc`mXu#?H`|!?nAejd9P? z^Txh@LNKN4{o7r&>lig1wY4=SCi?f12Vv$*Hc(+PP=T0N!xh-eiE(DWHk?emU}lhI z-v}b-=upu@$(?*g6p1mpH!|aegbs)mmX8D&X6_2=O(YtZ9vao{L1&{X{53Ds1w<9; zuCTU(k(}|bj)qfd`>9#>iowx-l6LhPUT9R4;Dp}|68>|-(Q^t7?@*hd4Jm1>`AP%I z35Y^@QQ^+0zp@9vq>KlJuHbs#7TVnr!y)M5(Ihz*#R3)yWOY=_q>uN`DBz2-;(a5P zPP>5X2rW6=&}@GWlWZ-l`N%|2hZC(W`B}ZUY*UDvsY%XYotfE@iV3oXuEtUInvidU z-S0xi4v)9|HqGsS{y8*OZd&lL-3g_0WpqXAm|${{+fHV6g_`gdnewcD&vo_{Eiv4v~~tX^}V2OqD$PQWSkjbyQlAy>mAc1Va5Hq9$=$CSa0V(L-ju~otg z0!;AObBA=sPa^wNtDc|Li87M_ATmsM{`VLo!V-9s>!A_Wv?!%p)y13z^9WO}9~6Jl z-$I>ZW+9ZfHEBL8yALiGuXN2uvZ8s3O^v(UTwluid$_I&)9@VC%*i~q@ls3bn`6w-z#~2q4u#B6a#7_K@h#!p|kWn zZbu^J6}LJYy*+#(E!xYo!umFdyo&oaA-s52*bEIO8R&2y%T;7O6_yjsN^21=Y!d5u z!az?rKzS^n&D>ge+@x3v+`-LQ3?Rmq>-A48YMjbuHE*ZB(Vr2n(e=TiM81n5p+?VB zGEJMBZC#JAwbmmOxSR$-OxA=jUkg*MgJ|780Ywa2L!MjJO2hUu9VImTuPdUB|#tS0%U{toCjO_Ti!XNI7%5yDH106ApS?b8W(yvlXgb2G-HvaSRWzux2e+6J*!u zqooRsn6P>6c)8+SYChq;RCD{7@P2}y?&c8cr&$<`aYZNBcPyAfNMFl;5pm=(QW_H2 z5g7u=HxBNjHBWDFM#u5#?W4}W8h?2Ue4=0L<`(l!W@mj#sYd(ZFL z?5W^EyF2Y&Nuq8$_K*jHb(rL!p>hsQuqCMt3|vkw^kJPYsI62i|L&Rb!l8*yh1!Tu zvFl){K`=WptoZ0NBz@i;Hxlu;Y~rUw%hivFlgWs_q~1|cN}JoCa&Byd@C;e#zC++ zqPWj>rtsq%$Kp`<$6SZez;qXp6#j2BDr-B*=HML3YzL>ez7U_I^NlmEZ-#{Czju-g z&280vrsuvLmQwZTt%Vb1NfL+&&T9$__NYG62AyAkRksNwl_5Wq9t(nC?*eZwCZuf5 z&+Q-B1H1B!sR|kA6c?|BflUGv@WbD~*0Hy7oGw3_l1j&3Rv+iCdvLPHU{WFe#OOAI z5PaT9ln){{l!p9Gr3vucWkwONXx-FJxvBzoCLf!TlF_BD4P|VO;K!Mijd5%-xeitL zZavh3@zN(nYT2{{jt=7}1ZpS7^z1lOyFwW6D{0*BQFjnVVl=dNv7~}gWxhC&# z9B^c{X&o~|2XDc$vF}YXVdXqBKLm?jvst@}C(XybY^qbXTFj<(K^F~{07b zs0%4m7>!}W=PaR?#9Gp1HD$C&^~HOvcnAi!Nfne7j zP3#r zMJb05ynghIucpFX7Z=mGpZrmY4Crud_GS3X+qR{^e3=kw@}9mF*|F_R@*55I72rhji)JtvLz zf@~TwaZ-e+Xi`F-uc?#cyZB`#1-A7Jv&47Zy|R` z^PcD-y4ILl82uW?6r^r{5NdrSq3okgROzP7^J*SEAm1pKnL;U3UX{}XgS?9^2dfFM zy?oMTA8{YgX8${AqRmuT$Uigndv~@xID9_Vl>;n!{&yETcPxliR5(HiY{rZ zAt_|r-nxPzKXj}968`i0o;pTqA2R<2b54r$XYw+J;4XY&5ndxYIV)wzxmRD;q(2iI zJK7DzF7URH|9OcDl0)JZnn)$ZJB_ld1-|51nbwyao1M(Tpe8l23DldpLwjjz*BL4n zPbHFIZTk2JnGAoXd1t%uReuho>tDU4X5xhz+;p^qUqn&KfcHk-+RD=BI zp{en?#!tVOp1}vR`9e53_dWaZxqT22gv!S7&QR!p8~w+m*v(Q^2g7yx@i=6n<8eOo zd8|n?Rc7^zs0Sy}<=#RaG9#Tyr@>pvg3R&pFvY>jog9@#Gr z<0pAtx}2Jg7ySGD?`9Ao5H9nzD%ep{=ZVJb^w* z&M{Fm=T)d}QqMYn#K3?teu_3av$}CZQE54GRchw9DlMwU7Vd;J3WB!JP+ZJFm6)}! z6@7@bFaOq@ClmI^P#~DewtdrQh98!IWeS{n{t?niHDS_3W3_x$+@AS+s~TM zu|dCkLgp`+FMclk_118=Nar6!*sRX;Z`rhDIynSJvx!-d01K!TfL)7-bf&VVWH zuYi28aVg*eGC@B(K`*RK3djR-?Bm9La{~Pvx)4Aw7NHrGFU?DXekoh^xn-3Hy$JgzEr6e?`gY_GJf)77pwmNe{r-hLC>sX-K7&enMi!r0+% z$W#Ai0?Tcm5grUaVfkCBbUqn2%#dUuQlKO;q<1_TW+ii|c%9~ZPk|PDIJV;DiO)Bh+~E(X z_+oat@@kdq?fKq^oxbi0SFfW-=y3AUIn~D_t0l$1W{Wo9J4wM|R5?oe_{{VpS=YMKY@Guh0pwJL^Z?C?5wBmX?8>mbr*`Qtlj7|GIvX* z1PWr!__sgoNPBr^Ip7dxpBF8%Y&~_0LXM2d+jGR)Z7Y|}M)aP*#%z%E`trY) zr%yBwW0KeF4B5qlAGhizh0A6fH-ZoG$kd*)9K1N-oZQXbWD)lDUaiad6FS-Kc530c zxCpY+sHi|1YNW8>|1v~rP7z><(m(|uZ}WmQa2$wSNz0P!-CQ9HkJtl#8_}!VWIj2!0^V8lfaeJ!+)J4wX7rPe$Tm6r=ss3J53cD2% zy}{Htgp*L+8Ok{SX-4^{&!PyY}{qJ6qNlPdE&p^%P$ZbQY^$3wZqQ~BJAdg z39b9yC-4vmLp{fptN9>yD_R;JJ+~5>2=S=<>zM2WW4tB^j|DUZSlXu`LveTm0%|-B z6!VLKFsAI^!p1zli#_SNMJ>DOYIK-`wJ(grZ^e05m5zMFst%R7Y9#!EYIEu5fF98t ztYVo6l^{vrgKW=+M1=LdCvUjNpq?iGu*AU zXiud+lhn^CVTwi5{K&qxDYf58!uG^xL|-0>XGE!DBbcL<7Os_lFdcg=6mRe_Y*#ll z3z^%MVJr@Acl8h9(cQ!iqq)fQ9~|K}2N!vEJg?EO{Sy0ci7FD1& z@CFvB3gn<*D;vab(EtG0o)G|~fd3wEv0z$iK%(SeEM(Z4DiD_f{TZyWj0ynA3jqEH z6*K)83Zs7E$+?}qUJ0WB0O$<=i@k+ussY)MRhoExn_zlD`A21RpY->TY+ z4{rJYD=hQ-H+KFH2F}9uV?YN0d?f!DV@>=wCj1u21%$%v-vXt9A+YkdKx&FB=9>o3 zGynkj3jsj*-**XkC{6xeN(_5=3uL9tl?DR*oVk46Je|DkZEe9`T;`s(&R$&qGWcK# zs=!zOiKV#eFW%?Nz?js50{;n0mj9e8l7;!H14Upa>OeAttT+D{^gO(rRt~P3sz3ye zmurInFH;Dh0sLzT00Dq71ONc<|9O<902@~aN+2jH!!R{~;s|1DFcl5pYiz<7wG%P` KkgxtC1Nby!tR*f%Oj$EG$?o08h3bPLj50@5uY(j_3V=#7YUcZoCzh;(g2LJ*|8yOFN5 z;rZV8JJ)s2AM5(9JLaA{*37J#wQ>tlPcu;~vCvVgD6HUr;_%R^fMr4aJHL@z^sFBy zf19FF!mwCrq+z2Dtco)tMTFd+Xy3#oyQWM2n7(gW3C>4SWh$o#AevdRp3h8Kz1k5| z`9nc0v@-Q1O$SYu7u&0|>h}|I4&*YJ28Y74m|$x+{{@@KRuFK%_pzsIC;UVQ<%ynH z+xK__wTTnX0_NU|3n0;|vU>eF17U%A-iCpMLVQnrAMY?b-03vF5=RFkvkoPwVuCGS z4DWNiRTVM;FD>D~kVWlp+Zx^`6b^>vACvEC)qXztZjKpuzyOuC+5F8VLd-T6R!W)J&`t?`lyx;D@ z%Ibxb+4yx&=`ddcRecAaA~a}Ykw8sJ8hzEc9|s7)48D4u|5UrRMAysY%8s=gk)llW zYv?!l4#mS1B#B8V%{8VBUS@Tp4m>kfY4K*p7ah8xkZ*hH73B76Bv0zcAkDm$bxKGF zPtt;SyW8yPZ4v*L3j6P~pzr)ub_P3VIDfxi8Nn-=#M{W0fRD6HArW{fZ~i>BlhPlm zb?9xG=fbTp9fpxDe1U&0y6#m!xK#(0WS(_ya@;Qlr{>=B^gnNTN^%t%H0=G--9CA* zui5%pFR9>K-LpEQvRj2IMzkOmbdCsmz2Dl^Ah@|8^22U zfn=CU9$7kOunr_<5D#!1Kv_$c91K3lZY~w?72~*Z5@x=BZWU7m5hK)@mBemHDkCa( zN~0U!iosN?^RJzO`Va7qWN2NYH>YqU4z+*n z$eZ~t-eBm*n-z6utbAXry?IZrPU!+dDdMS^STKOcwLg89^iB;4R852}kBptWUoDcV z_T_`S>nCzj2@WmO;A3g7CUd9CNq0cmrirIa!Ekqyh1nt{jwq&8!wPgH}H=S zM_W6+-Jpw~kbFjh7vsG~Ymt}j$JDnIi}YhVDk7$ewPCt0?R)c53N%x@&SOxOB;=EM z2C2TljBchbU>tU|LlQ%8txu*sh2N|3?UMV}hW86pB$nf(6)O&h4tHpl_%K+}F)ltL zvh*KHzeDhvTyi78@p9&{il%iL?&$Bj9D2d~&%3qP+}NeGvY+LTI`OIs_jPi_-+1ZI z^^Q4?klOVDkf9t$f_~!{xd<>_{#RU->ml}W;>I+TH$M(?s?KRpo>xO=GPwJ*mN4<2 zy)7!$9?3W~a&#^l*=FJuW5H;vhW^sH7n_w3-i6sk#0=m8FJ@Y^S2qhUXZKIVFDh0Q z&>6Jc=ysb47rbnC0wdtPp3+yRYVWT>7scIgN6ZAfaBH~=>r9l>RSQsDoN?$q7IXL}Sp%Xr3{Kl`rFF}Q^rom2&@ZeVlA z(qVlGiq<$|air3z3TO zgZCVuJ>RE;g0cF=n_N7*rzcF(&E1Wjal3ACo+@z(dq%8#SNaG9to|sv?yL_WTM3SC5Yq8U+Ed60LQl; z^}bz`jtp5+epmc{*G8nWBD9+K!9JjRwO^H@BR!(5(7SER1Sx%q7s!__fewnHr{{O? zv!r5UZT4QWt`?ZzY*cwmx!|f6c|d zYaKGHHGrM=sp$1AF?zp9ACV3%^Kf508~efzEJvz zOf7!X*7f5$yRcBsoMO+g%w%F=PRk&W`}DhowDFdUk+l&%5WD9yJ!0;aQMI2{Q^e;z zb8e9eTr1xmdHoADa`)#`;y<(LZ@gz_Wxk%nIIuliM`|f#b48L8iw4gw!)##9{yDV= zR-QU%>(~f^J6a{qFIjQGz7ozo%7J57S07Zt>>bgYY1^B*BRyv{5o<&uhq=HvJKIi@ zz>rjT88fjb{99ysRA=V_MA>kO|;Hj zani9&$+Way^Y3+6tQ>s1G)Z+GysiE4AWZbC#ErLXu^F=70RnRPm%yQE=-0VbtEt@f zm$@$Ts;>NdQ_N2Bf)qFccxN(}y&;xlhiF0;T9n3hlRJ-mGmxk4s9U`Pu z>!fk2sfTE<%JC102qLZma2B|;9m!5?HalzH2(MM+!^336$&J@Y<0|Z=GKYxVHF>i* z$z(6KhYz7WKyqWQWeDBOrv~QKC}JGCNZY(6l}IiRnKX-6zKjgX7o^D={}{g37tfpI z;OKDYvNB&LUcb#I-j`%5&Nx5D-}p4_MBkJAZwKzs^NKZ{MQv1N%w3&z?2wM`DrRK2 zU;~RL+kI%GMsw6xe@vgR>6d)dFEOj69*s+3pIisINWd3t{FZlLq9^&S?xnN>rUq%vF_(o$akJyfUrSjg;MNc6Xu(;BafvqMVdmTKE8 zBBx?4lq5yo&79&`C#!HqXXAH@>GGNp+j;LHT~Bh&n!VGWxW-RP^ZvVQ8TIPdV@~u$ z&h!+9z?Isl{hMk_?g&qbEF1xsh+f#akBA@PXu5rzS+KooD4tL^z0CP~m1YKp3}5-~ zt7bvP+Z#kr^XD+Z`K)lh`!%X1?z7uZC}Q0VB1J^*21b`H{hS>~YTYeBgo4fqfey+3 z%_Z@MyJCZH#8rDl2JrmAcm=1CrsZ9`)Ce=MRZv(tF;$lVv4|y$I9!)e_ws7OuzGeT zOyRdi>MC6H9(fO_?@_}w;apKM?e*{tB&&_h;ESVwGj8V@XfZH{k_h>3o_v$~(R|wd zN0?mA)Zx>fti0~4z8I$ zsh%@|wNn^FD|ELh^M6Q(y~;{X%N0rldR8&Kjd8MEBkG5knr5?--~9HG_vI2Y_vHxf z5$c}(nZYQn>meW7yK~Z6(;AMo{K%%~tL`yN_Bjyb`guJsTzJXrGZ-kwBo~u~6E`%C zQVlH3?~glprlFdYAMZ@XnH}?Gnsp|aay9jFF*fT-7?aIAE_Q|Y5^U^#1r|)2Be~dK zRg+S!kj5>%H!I8QhYE?^ptE4sN-!$y2HCcncu`tR&X#u10};JZ!k3?}E*VBY=XLHJ zzW4OEP!=BEi+1eSi2fjNzS}6=S{6zz*qxv9`)3vt>e^Fc)K8Qj_zc^*7;RIdw7~Jc z&rpj{O)mn6MElYmzO;%zT>~O)Sun>j;_}(14#`-rB4UYhvcM=x!3wXHI-Mw38-imO zPBZ_9QMXl^e4tI^qbzaxR!U--yP4c!i!^QkWPC>k{l?h}l{duaUtx5OP)Ls}JNK82^;ha7@*>o4ilQm%=*xX7E0jrmN>8X$#9S zpnp_^W{<>{rB$XP1yxi^m%sB)=F*WcbD|8Z|Ydpo-(KXnnVr@w@sq47#87rLa= z2X|s~S0AVIeiqqR9+In-OcVPqqn=?N^*O4x+ZE%gIu+L2_~pEpIQOq3B`#mAvJ%T# z-gjs$zt*M-4Jrz%s=d_j(zrD4(pWYp24aw{8KOnGP5pF+d%K>VrsZ`?7^Iuu)eVVk{Y2lr%9294-LFQW~iSUy5B%qD&n7>7UTe9hhh@&?NQRJUF$ z(WM35`JScvP}?3e&xNdQS#QhVGP<>Dr5IzW)ed(dZ{41_d(EWASI{Bs`z1C+9*R|# zVwkFx_*!W4-&`w=vy{rmVXsNL{QDe*6HhgcxUV33^sN>HgNOqhuX-6XywJd>m@-9A z6`Y&?a6$J(b(sTl7hg$gY`S0>JlfNA)mFRt0E~`jfmn3NKV?ID%X04dUNEluo(7!6N=>~8t_H++QxXY)1VgtEda?(m z-5xI}mQl|NN*BFO>2`0;9FYaiQSI;#OxE7cTTErTL@#)YM>rk8Q2FJ;1DlTo)VEeL z?!Fk=nUg1>_Pprf{UJM^w&M^sCCUP-N|cMYk&E%F4MbuZl2UE=VMHVV^M zx;5T^b1uACTLp#|I22Om&)ybRaU2%E3Ss`{hriR9gj}x?otuLbf}NDJ+Tk9^9Wjf? zwcVkPpT7=WqoWK2%y58+*P7ru`S8~QtwGic&4gi0?UmfDX#QjDz*F}HC(2?#i0n#$ zr@!k>o*!E;k?u*$&2q^$2Jg*vwIEtQhFvE*4TtjFCFN^?HsaQ-H=y#HzeIenlIFLrAk&2% zH%wO`IF>RbcQNdh#&+1E(+xK5Vbmo9ixo+48eJ`EHng5JeSoK9g__GgD7P(yD;`Hl zB;sCj^TuMZC#=59qmYY9N&3rW_FzQd&@YezJK>-W) zmY!T>6#Pd92BCq~B+N*h&xjeE!k>UU=BWcb`!wo82%_?~#ld;c+T3rL`9p`ymu7)zrN1?@A%g!?lFscEm6yN1j z1;BvmBqE-a)U`3wI-0LiLT0_BMNrY+OtwDo0^3mlRgU3X_A4{@C$)@J9uC|Pv;!>& zW9veFNVLlncm%pLC`ct89xpDAao2nvUBdF@&Quj8Nd3GgJ^EQmg46lL%@yhAPZyw+ zBWLv^Z(q`-gQ(=(cHKMM0!TP-H4nSz#26S(18IOY-Nae`Vf}`@w zU59DuZ@HL0cbc1m$qJ3SO)cQPEhRhZcXXkl-q7`UPOksna{dq!wtVtDDX|oT<_TxyJyw%E2cSGh zpP~OGMEycena5oEp072#wT{z0zzGW(jHse3(wS}xyZKVu9b9eoF_^Zoi6i@qP2Xcuk?AtiG2Vw-MThjgPAOB}3y@Sqi%_BZ>osT*g8BwW zQp0Ry1TrMMjbIx8F)&)6$`-T$aysI_l4)ZYudz@)fr)<8dPR$K&!uAxxPW(;wGxko zRqOpFb?jSRWfmNkt97xLz3(x^UVr;4BS^9sIl^=N8}tVqmHU&19{@vAmJdth%YYo3 zu9V!-_Q4`*b&NfrGmb|lfYlnBg7TsAqH*Kd?JtZkP%LJA&gJisxt&D67UKyDgGOf7 z5?u!bS;YOF;+?((X~-_-f%>M`!N`$)EfIOaFDTMkP~Fu>o^fLcvRrdV63&}B6@y15 z^k#f~mkW3M1rgbmCuC=ssmL}aA9Z9&LgVqNt_`*^uDUSEc(4~Gf*trS% z+>Z>J=lvQ&i0glqtQtW7+iLHzm7K&w-?>`S9|U#JGg?YPiqn$PiFwD~VsgwTA2=@> ze{@y$p%6?3fYFn=eP8NB0Uo`+B%%EK0Q^&?uwO3V3vL#rOK#Xdas1pn6au|SWD{9S zW|Q^kJM@nAtOo}c`wQ9D`a#Ej=M7zQ)tJw#o-$K&S{8pOHDFY_tO{CMC}W>@V}xRh zMlT}~jiMsv%l?REBrfXkQ*OcCJ7K7On7U1JUK=0bhx>f!To3@?uRy$!ERth70)1vb zlI5Gmm067WA60F!%VQ4Dz76>JY3LQNA1+p2?_}q*Yf-L4oxTLmimUYTk+0q*;}LIB zQ^x;5<)In9WA@1T@~LyTT7jSe z9X4%(NIWo%^Ghsig(8PtqNuHFQT?$C6b{n&14Z{a>|Ro~7!o!Nq-Kc$(PvEAa;{*z z1?ln0w=(qhUr+)Oyl(~A_FoJ*M=@SD2`OfngRXoJ>iwP0n8K=Xz^Lb(f#llot#+ET z*6r*e_p~6kAb2ApTCz4ccxg^8C5o~*1}K3&*T)0xw1BRDJ63G*zVhn-be3< z%gXLRm1|E(>5ZkxZLg0qIoP9dG9%OLj&Vj(z$N)PGa{6yLRgVxT8STDz4Sb3 zmR0(7W?%OABw0dZv5r~M>nW^G9KY%orTtZShnyIT(#tfV&fBHkj|){jjPI}%HKYw( zPTwJaKF1xV-Ny^I6-P2i%X69|>;cA5p2gMPPW4wT(Omzfn{D?y;C~wNLG9HY6~=cz zFCxm5=m_fqn1e>m)cFHv&CFn8|kbvCLP*106@3IK|CF??FDuAJXG0n>K zuS+~aG5-oWDErSpSx}}O6Ok#*qwE^Qv>_ZORIQrz)U1C*sm1P{O(4X|&cNvy9AZc9|l&jP`*0u;-4_c%Dc3P{9$6 z_+v}-_GWJft{Tp#aIr8zZ#8W(a7euva=M7WyOZ6R6ex_Y78xkAuTX*4czgQIvDN4L zvZwV{RKU6Ky1{+&^r>0rka}clUR#pJ!_eKmf@=AeJZLk}$x6Q(74eY3|Lq3jLL zS|NIPVDiPMhO%JB%H%hJM5we)mqHUMk?u-97^8(i-u^U;3Gg9$=6d~%FFoP{bHSSO z${U;u4?!K3hz#tB(;UBDNw9U>Jb0SZI;1|AlAGOdLgD`R4c8G`&>fX{0!tmY;LSf_ z=w8LE-4$qEFrnX-D6`tmpTBwJG#qTE&dy*@eHJCJ=^&~3Mhk-F%LuhCFluIE&Z=gE zgxWnR$H$KbG=PAP0pOy0hifdET4exxB97np5t2_`6jjuXO~g1{m@Ms%ZZmjrEq#P}C)iRVe)^pt9YXCPf3>osi5%rsD!#c}g2( z!DAE|m`9NCHBuI2;X^}zKqhYmL2Zfddo4!?;}pY>Jdbc@2uEm0F~?4s{wu=ciMA;N z<#^LTfL$^{TL`KnxmKbux*+aa-XLpceN45i#$kbkMxV2Y${P9zwqGcBGXymYDt{Jy?T!I-R0+Cajg za(AIxMUbN)_X#JAL4y<=OkT(9PVS^T@zhKa26RM+4VYDuI3>^GTxmv{hxGc+n90iB zW0@P{XXQc#ZC=L<+XxSA22`eepC*@USBUE)v}MJ@IX7^mjGxbO!7gT!VsD%B$(xp| zlUb{hIWmwln0=QtYspw+S=dB4U)We{&JY2br~@?&?IFh~M)t8TeRFB zh%D6HefODS8M*mW$!4j2i))jHhkaLuh1;*Thkdc;OF@{d?dl}c{7Yy zrxiT&^zBzrSFTzA%?&{O>__WEU3-ur>fy+sO$zt4*@8m7k#WKC$Y7$zCpK|;$JM`#Q0^94o#5O$PNfgtB#XBR?FNP9cX;g-2#7}oXBzNU!jHDtm z;57P7`JZO?H+h@NgN}#NUo=8cy*X?>ngyaV&W#2ZXT|bzZ@zCtW|0x}sNKV607anP zvw{@!r+YwZ3OGUJ0`a2D30&v3HCs?7o3=bjst&)~nz2{w{mNqTyrlHNm4f>4PHiD* zNQsD2`R`tODdwCzQpel)bvd21lEctioUi;Jzp}1z`Z_gu@3s|6GF9DJmg+1?!aJF|@ zr|HtgCH?Ac*76VT9r{Mu=k!TmeWKy^lzMpYmRB(C0!Yjm?KF^n6`nZm)|aCH z8-aWrq{9qgR}W}?A6>g%Kx(D0ANiRkcmkC?CK4PH`f651lV8+k=i;fPr;*Frxizn7 z+e>ULJJ)!_`a!-Be88B*wDt=)fldU6uOydzSTe_Zshcs+1)TRO&;osx3Q4-2Mc7_O z#WJoBZ4v68=QjOXjs*P&TzGeUbH$$(KgEbf~7L}g1FIYnzF zbMwJggbB~KvG|P1SVluUFj$l?A$iXKH<6jg*IZ#BVFdI>G&6iBv!fFzPA_Jo}^N@*x0d;1astY+#-1_<~L>GPY5a-i# z?$^40KO=|(TAur15O4ErmRG!M$rWvc%TZ#&c;9)Xqz;&=v#7|&EgW>lV1D5Rqiv{~ zrDPFQf6~~>7G}9$seGMxk3-JnrL)d?m;@eg%AdENw7G_a^d)x)!oi7uqe6Jsf^ZzR zd*mDVfS%Y_Do%}{gAwnFd0oVsC#soa<_UGfk$XWIP~nSX?wKkz9> zHs$5>Vm#28v_YB_-`ml?MEN>);!ir&rP3|w0OjfoL3xXd{cn5Uas`!Kav2-`J{Tfl zW&ErGE;n)6*Vg8ig<4TKr~x$97`$?qFnKqan2QKocG=kFW_e<>9f#Z)IPFmbin4&6{!%=_?? zhsZNygHy;|wI=Zl)ZHnEWorx>@x5X%@;#CB;b2RezFR6`l^-a^mVwh8qh)P32%u4k#V%2VbEw!7FWnvK=%)3S7#VU{nU^ zYmLw2g-k1n38#bT=%c?3 zbsk7hA8dEWFP(!NSXB~Fk2%Hj^1;8VpmzzXalBV@;QZ4R(I2bY5yqvA4s=~;&iG8F zr_Z;zt8>qM?QM9ObU`a}n@?b|Dsj_G`)ooYTfwi&y0WbPbRkkO4o+4c^on3oQ{m@a z6|`z%^)O&3yA-psRIs$yNzK*VP&YS#Tg;lhUUu~}T#Fz0XTU!zm~-^(t&jGU*EWsg zmyT7Q+f}!|vYE-gj3W#2VQIOEOEww zc!WyFgu~RnS4$Yb)JscegMN6)1$O!^q-Y;cDahe zsOwI?+o-aZ50?!)_CJSc5T*NboDqzfpfU|zDL2JbL1z_75W8)8!&N$|UH|Y}vQX^1 zdS2R-e5ZRGk-Ol&uq+72JIZ)Rf}+B^n7S};qO4TUC4yIJ|4Ktg))bEFtDNE6(KbY?I7 zBpK!`JAW^QsYcK>tngh0&q0qHBkF`8!=IwX^Q^=Sh1GOR6b{$(%_wTVD!529!RYkS zzdCi`G{0Y{oBv{Y=DD{uX}Elab66e`t+#9g zR=O?*TkO3ViS;V6DTAl&0p z$az}1?M9d(e?CNs#l)jkm}WcTl0r_a`JmZTZB;E zX(hfd=M$BQ&?o1@rwI$lR|Jo@I?- zxq1nSRFe#(ZfxkYqmBF3+LE}38ob#Qx~ zCI6{wF7(&eY^XDSIwk*GfHFQ22OO|e*i;EsJe5qN6 zG~&An#t}x0Lk=<{U`coCAoeT9YyP;PU&H)w2IZAGWxN%Au_HVpTEL<{XHa!xPefWb+aPvhPI$fFX}=Ug0{RfNI@h--2s4?IoIc$4R@ zKL6E)Rx`4rD`dE%jJYkrYJvuDFjiDhWVKxwT2Tf$T88TC2bLS^ah3+f)~c(- zU=S6-orgo zlLmu_>m+P2BKy7pc9DeVD^q4K$0fY@R!s$EBqoFMI%kgU)TvfBG*Q1>!G7wZe~p5D zdmkA{_dDlR;#XB(*%zZ1o~P=R&nAG@;-IRIMN^C~&OudJhKXU^T}9o05~E24vahs< zFVouSIQ5E4J9c?l%YtI5UhOVJ4>9tOwhAzg3HIIBpJ|@(15gQLnGHwes8_!d)50eP zK%c8XeIMI|BAwU;!uVbEmYu!DJR>vgqJ*I~X>dceP~`2)&;73v+y9&hb+P{PDK3&o(Ug1gVS+HiL04Q+{NiA{`E$AN=jFU zBzi$mJ!Dvv>Rn(NLUHSb29Y9SLRf}Eabs?^3a&d%bOa-7wbq0^${LG(%! zWsFSApx0A4wNkkPaz%Lo63@Q841JsKh~J3MNzjy>v0v!^$M@xKw9}wQoj{yuI-}lV z3m_=^H^oWne4y78@$uldR^oITW#*Q0U5*GZd<8n0mcpjZVbMh4=cT4$KjtEMY5Y{pc;y|WMcu&Jx5;RA9F`(h3|Fvq=W{fs< zFc{LXQ7EI!F3UbGIrhyu7y3g$MEdVLD_mphVm(+b4ywp=nIfe$Dc%gs5VxUq(&^mR zDcA2;oXnxIBDp8ZvZ)oaB~Za9grxKx!3{v?+%Ko^QXUzYQSLp9{4(ums_I8u@0Hvp z%XxCX?~~3IKn0C7zopG}Fj{~kgvx762V{nH5T7Bp^mz(Wt@ zOz&TIaWE!bREPF^Uh%Lfl^fEfyk``hdAZRLT3f2ZrfyotS?_YqV{UTNRTbiz0WZwJ z)cyebxC}wv5N1)z*ntS|DSK9VgYaJpVGX)#C0-RlIQEn$E4<4aDW{jcr!#k`5GM@? zz2|#upK7Y5^2>r;pp+J=-6Tod6i;W7bQ%2thgW4>bVhN28GFMc%ey+YB2IGqR3dk@o>;dY*){+GC z0l0k{(Ux+SMFK`JSy3hOquoDYh;xd{RHx4RN{pADL$o0zNnbfkKrm0n)y3u_=F{F&Ii?Qef=F^uucwv0 zCG|z|pqbO{GUsXd>YoT}Nq{F(DBy+x6qMu+(!^5$4S6Ptu1qbFO-O8Up0|DbIG%qN z;313^7j+7v^|G3?roPZ0GF$v0q}+Ta*twQ+TII_-yXgw7a(W&tajt#LFs|j<5xZ^! zdw`y9^qciv3u|qr@D=&;HkF>^5aGq|04>Rt%?h0Luw&30*8@5%z*gh>N$kXcSzVyQ zMjUKgL`-C0TX@qo${&Ua(|gIo|L^HlGBznWim}nNv3>6kg@`}z=AR!S_X_^S+f?Jo zFOq_{+wB{h(s$qae^}r#Q%OSSZ6@Y)fA2Io#HVB@Ttt2v}qm~Cno0e+L{KxU(*aI*BM=h4B^ zgq4OzCT*iHud}Vr9d=5I9A~r^Mc183MYmj&8{Sj=JLJS%2VjR9S@6Xw6;lG)L@W`t zx52!|RPuOBoU;r^%w?iriMP&zo9^mjsZXS&+m1PyP0f=GA>uC{@I~X7w7?@uvM5M5y`c7+4LKr2XqLDXTr1XQvE;WEtnrpugLkBm>d_h2->^u zWZ&GrdYMzn4lMLa3E>nb!9FIKK(4$IcJm~n$tMhYd(dcAQiBP!OhDtJ&h-LjpZNS*-+a%E4F`$*rX-{B3)^@0@>~x#JHw zm9r|Dsi!i78DE0O*OTMG{F@xuc{AeVwXa{6yq-+VB9}7j?sFuEGlpE3kalN9`~6yi zzbM5%L^EUo1v#<8_}J-3&M7Rb5#q{!u(X{U`#lRgW=9q-FbK$u={;t{OZ{@b*v=slM zpdfgQ35G?BsJ|K1w6dd+*M<;;1ej5VQ@`Q{bJpP!+LXMfZWRRIAl?};YB0tRE|7|z zYNguQ)|0Z`=umbd(|(qUs|Z@W9)3Q_P7i!z3w8lBvUfNWmI@rwxk9tBVL393`L=BNt{Q4}>3yevOhEfjRNP6xwXbp;!!q#-&(yAcz0g!zQ zs85{q@D>Fpk~Ub7I;$d*7Tvk|TzFubm?Zm#9fIcQ1SyzbgdF=wXMI0^gEUSJTiQeH zRH{(-nKWVIt@w97%<7)nZ7vtuZPFL+&JCOs5?;7cXbt}D8nOS}B8PM$|I%)~h{!kb zSL-nqd0XfdKTDTUfnkQ7WaA=L=wvLX_)y-8tP0&xeT;nQ;JgP2|sl@5JO? z&9+AuqYp?VlcUHB@pWh`!&n1bb_+&$zco;kL#}Qmp(oCVK|wD9WY#e^KcA<_pW_Qi ze53sLd`990NF0&FnfCOp8=P8e@#AHvdzstC5w`7#VYYOUe}I$)&gDAsVoMz))CbH? z-z@^KTH^fSfOF=3!w(ey?OCq;i#QZ(AbY+fJo9uZ16`St46=MF8Mbl6bojH|SKQPk z{MsbJJY4&n;baA_c83JEKT%$zca3K@=4IgL0 z4fj8{=hW0Zc9g+xRGgP)gPPb&aXndW%-#9f{>-gbPF*JbT?e77TCjm;&O7(^U}R8` z+zYHYOjJ;sx7p23ASNmV%^?;(`f|e5wFmDE@H=m#9`HhMtsCE~N86@(0SPUDpLH@u z0<8iRcKa88^-RKsJDbM}_FxlpAZ?3$T zctUU5dV#raOsKWdlf}D`h-!Xag29n$GiX7phdYpvG$+-NA~rWrm<@ z55Zs97PxpR@MAEir{MAkFba=>OBj>ddipD(BBSBSA>7u71AYRIGe0hy1Pi49;p<5>9ZFgi6rwjl6=Vzd zgC=bU0>;uh-2jAULbmN#!murV!!4DhBHzoIEc>F)KVV~ZBz}YUA{F67aev9M=>_6< z9PDQ-Ss0{~tSeTsglK9}`jq^Zh?O&_#KNu*$pycz1}I=tm^Oz%MBjQ@Zfk0<|%;GXVa84g^)|& z1*M41U^E?#sn7+j>9Vgq-)21GLuTe(Mk0KN3+fA~v%D@&^)LF}yQEMaF-6LT@du>> zxQbcNyJ`3f6`V#(M*^56=5CN&XNxxd;Uc#RCIMsLouV5O}$Ql`F)LN)LxNRS6{RoL0 z6Kh5`nWohCHd=_5sD@(8I$kC15u10EWZ&mt_P*dii;MI51#2gQn5OZkoX_ag*~KjS`7Cwp*FgY;DvyAUpxEM(WJF8ja^F*+v;TDRp#r- zY2E^mSD#ode?OwORZ(RsJloOVb}ekH{r?jK^cnxjmA?Ha&)q`E>G}XawbFxVroB9s z(8~tV6x`|`Q=E@I^|CwwS>i&RsFYkB4=AVaJ z_8lT}A1f(lA|vv&$FBl{9KQi{isxbnhg~_?n>Md_uYGiYuTUPZesl<$eT2OK0RA7W z{0C3xOp-hzayN4LM-XM-KesPzl*%+5vM)uz?7@tw$D=1T2ntcp*@q_sMtm^;w#mDC zdCnbd0*rgfznPdV_4J^WIRy~B8SM(fv+G*^wFzLMB%Qv`w#q{U@eo%cBwXP`3mb|D zV$_CXq(|NqVp=`tijM;A6Z})#*K#8N;_l$#9*&4V*sQu5cc53-`bYbF#S`c!)?JN1 zOLnRHs&}QvCubfy>)IHqiYn2f@~g0UsVlK?;8GV|S(aMd)$r8y%B{`|@KG=z}3)5`^s)mduc2a!LE1^Sk}KtQ_)^Yp<^ ze(*8db+mRIKkK}a+|j~B6`tPMyT^o$4Iu*55u&|#`QVTCwS*VKD56>>m2fU9jzH6d*g8e@wz@^}I!eBFmw-?$Q3c zjzZwfn{~dqx0o@F_@F%R;zsX`7CZ5=*@L^ZJCTp~=2v@<5gey`cKJ#7){FLtozW={ zt_j^)Bw6x(cyQVI7IOdH#D4n3uhQUXUpRbc<09&og+Aa)=2B>j3DKwZR8N;O?9{w#==`%uN)j^@I%CNzBR5ci`0-D`=n`nB|5 zTsm|O?LdKYMBZXqTMUj)9^1p-em;0})AU#@+RNoeV)2T+IzL2Cec8>#D=(HCBeEXl z4@n*JAQN9GyYPDOW1m{*r!=BM7nd9>8;xBg6?qru`e)AW6rBe@_Nlr3S`2)Sgu{V~ zla|K+>AE7^=eif0^6(pC%76jjiDB{$Bok@IO4i3Pj8Q+fdk~ z7ZJ@-*ABEi%e^J`=wxpB^Mr<>ct7y#|A+q=zEaD@WBBC&B77Y@#>on{mWv0^AL2!L zekavEG0slND<6WELj3~yvP9GB^{L-3KnP!^#SEWDZ%#$nQQ4h-3buf-F=V%K@wzecXvr}4elNsf)m`G z(?g!;-DmIbI{U|WUFQcgU2E04tLm;=)eZFYEJWZ1V}{;Zo4%M6$u`{U5%6Gt)38r5 zUPDOu6*Dw_xX<0&LlgSOiQoqz10@-D-LR(6O;n*x5B)kRMDTwWP=-T9ZCKTruOKto zKR^I_MitCC5cwh`@@VGU)5?JJZ6;e*^+bLMD=-%j%WCt_6b1YhmY)TfOUR6v2WIHJ zX=$d9)$mdyN zdX`?SiDZ8#WQcwCz2p8gYW)71X4I6DjGxle4vHn447-H`if|G$bh#XDsvQ43awfD=mT6yzVPQnBnfB`aVcSA(#$ zF}lEq+2g-)V`jR0K)De7uzHV~xx?%CdlPyJ*Z`xZ&ZL4Tr%-!LSvh8`|0n^)UPG9M zsMyTw#~tx!XA>It9|71RH^2nwc?J;XB1T|o^+*LtsGR{uwxMwWYz!Q3PxhQMsIUY? z#SjOQ7GA&Xe*|O_zLaqfsO~}7LST2L58n%n9NLJL(}#5)mq?NdYK1hge?h<NpkZDkfx;JR)3e^RURuluHDGmTXtRQC$@~ZFaz$-JS z5|>}-k39jOrd)O~fwL-x{_-_cY9Tx84Zq(mv7q6Yl8x!957Z==-_OjP`Js(FsC*}= z&*+}7-K8+iAyov@?;YV)}3wfofac(J`5 z0$T4LjP&(9s)+pLeR_W2vLoB#ep_()!z_b+l;0}dXPNgd+vC#YY`{al60d!4{vt z`>J59>)9jqXG9E9bB-fuVCAXu;gJw9t~bC3a=(H-al?x6s30Tdj7o5fe17|VD41wX zmS2MzdU3?)hS+I*$CTzHiN@VHn)7#9NaD&P_Mpr8lA@|Lr$!JH{Cv#3v%?=*?UOjd zPl-UXw5{|Vb8;>O;CTUUA!K)7#BglfCip*#{%Z|;7uZ1M4dx#n?mMPAepxdz?7(lf ztl)PlZ?GWf|F?={ptk^&70){eAWoc*rZrhS5Rs6C2^s!E$mXFS5Ku7>*34Jg_E1aK z@PjVLOA6+lLiU6FFa%`{KpbxD=a*374T;bA_UEqaljz>Sd9>@rGbn2KUBfq8gKspP{9HX z04~gb+XN!E&vu0B#>h;C1#(A^sJIUWnaa%hAA@_BL5~>~zMwN_GtZW@;qK@CUHB1A z-n-T9=H%PIt2{?>dHfuKrm<7F%=#~C@s(^9EGH_)t$AQM- z%6~K=1D-|;}tKK`F}AqoBu1^*cSFF;7W z{ZIe?@8SUc%gz4@2-(~JaQLr(|4ShMmvMmpyWMZVCa5Ec1YSEr2cU^vp?d$Rfe?~* zhv#e(w;LeZ|5GFOzo3c#*$j|FH!|QHFmAKegSaYsk)xl@ za8Nl?%PC;OpqsVSY;gtn;ubTXv2AO_@H_B7pffHZTBsam<%nB3Zzmwd%yYKH4N9@S zk1QQ{uYylUEZJkd`w(|kp8QEQ?xQBC%bNBnP8{^zNr9dlmo_VEe{wvc3`-N+1l@AR z^6guC3OeBr59Y*KO?3T=sUl1;u=hE?eu3ZWlAuf!eQ}vaf`Zay1Gl>qf>_?U+gRtu z+StuAVfC&k%)3?Ir&D4?;frd^r4_3s*V-<1S*`1QndTg^R?(ksy&G|WIT)j!5sM-o zSvq>$=BcS)EKcV2t5W9RGEovn{viCaT5I!saQn|V7uC#3{%V~qc>z!5`RVVAl5X)7 zuaD520iS!eY8}hddaLm8XhF7bmV^WCq-}8Bt|v>Qd7anZwx-Xgo+Ksx1d7_~=!^Pvl@2yI` z2B~$T$~qLnR!*YwKMD-w<}%IiO^8W;3*1^iH9L8`WvIYi{zQqE@)H3>nrpWT9oH(0 zopPwP3(f9J@phr>-Zkk)8=uQZ_SWjN!j@e>t-<5v#;w$Q{Ggv0cg0`)Sqkia-LKz# z?s*w*>(?s%>lY2XgSQ7F8xmsTXQkiUPDK|jZp|HeaM6r*e*1^o`;Ob|&Ud8JZtyN& zky+j*q0*48;y*YxPK{V>f=C+QtlAfSxJCSs_T^oI#&*_d8Z4!vfH7;t<8s`p%@o-Y zs=Fm-w~ia))=U(PbZhxiTzOl6ry7@-V%w#Z-Lk)qnx+_csHuwd&-v^bgXo(N!n1up zd6Xu|Y*Niz(Ldt2?|yidVNmMABe1rEMeEZDjos;B*J$r;D}3$z$^^7qw8jZVaYymU zYdG4)poNPS`zVIAkTXV*OW7vF70pIyoHbsfM~~|ETJ?)~B)8F1Wyf10DD!hD0d5f| zVTn7vbo5s9`vTj05N2ZyGiil@@wX;}TX-m_rza@LOKS2`%mO=F&?l2#Oste#NhuOD zv(kK<+mg!{uCA`hAidh%p9|*~G88F&yqxwXizYKr9Jsx|IvB6P}^~HJ4*j_WO!vc)YQ}q8W}x$^1eIoJsKqII()pY7nPOy z0yoo^{^ygxGTFDg$gAFmb<~qOYGIk?aZ&3~yARRYzdy=3GlEXis2ydRr$sG7kJ!e4 z{KQNq(EcqU7r}Uf(@#KoVHO~$4x&KHb)iPuxX=g?Gz7irOP=##EPH=}XIEY^i9Io+ zF+@UXJ)!u8uP=31`p>M*XX@7<+%m!+YrPl4il4|-Cq*e}3$;WXkp381in{zTvqM%A z&N8M!5t<&s)y@Ekys4e<{>tvCEv&c$B_^PRG~k;b6+Q0QG)5(g93;o8g!Cs`xTmK` z&)Z5o0gDQEz%CnWs#i9vjz3vKKxc(>uvZ%Q&=ldTB5F-sh*)Oju!nOIumEOco zi&C7cpsOiaaT6)6399Cub{lOtQK2$?RnfHkT+CkM+pYc!^n05V-Z|t%O|PzMnI#(< zVPZA}Nx^F?R!Ps_CF)xQ&7DiWf!>I)-d3Cnd3q|(G&fxxb*mg*&0)!_+NB=HlXm0F zWY|2k3e=&v3d=Eh?T_!11K)FBlNC?xswVK5{&$*qkpU$W= z{43ZRS7vL-8LB4D*n|py$YCpXyxnk}jHo*%l##^#5*!z&xu~DYlHc}=U|77$*ir_1 zTR@Ajn_gohb}g*RA@{3c|3*BFtErY&s9FeiW4w#EC8(zz7(I`N(bmYt_2esvP$wbb zXJDo`+pCpWUejDpca3Vkz0G zA+va~(laAw>7EXzvKy*8@4_B7qgka%?60+Fe3H5ZaJU!~KIf1X*q?&TFz9yE%)pxs+ zF4TV{7tP#IwR0ey%Vg<++q&3DM7NVGPKCb4nUSI9+jzx4GG~F~0I)v9MG6gr_SXj* z;cgxK7tpEonmj6cQ3yL-Lxy#^zOA?Ux0m=v(F}NwUQr?fLC= z)+njf1MTCuEJWLGccjjNkHs>w%g#^17*==sk4nNGilY3G5)ia?@r_ zba*D{5o6FZO9u}GU-r;<)w|JS*u@f1iL~g>jXevN;5Jw=XnGpQo>NW_%22BnWR*)X22dnhR z?~+i{Fw+z5)O{|VtMvV{mT2L1O6sjDU{0Dm%J9V& zDblasSp}RDBHY`2QxGvvK>QBi389g;pfu#S{kXqe(u;#|70v9si>sX{Xz-9pBue=X z`W+1-6x0nRx>Bxr2Yt5ic;%~+4PkYVXqQ4mxau3ierqK) z@paC03A{BnOJs(*5Q@`O71uXAt%h~B6ftq4fxc?T;#}HdcdPWT$u5V#gcU>oj8D+X zc#8{++NK8-IwuU95~{g6bp;7j~hOBsvL2rA>q?tf$!&@uZjJ9n=PVd8_E>E2IaTH@Zp-a`8OH^a|2kv1tW6-ZS z>a{Z$)O3^5>0coBQw8M7Z?IMCZ$)_F;5y65zmz99T$iT!25gZa8un_TS)x(fT?n41 zLOZr2;KPoOdW?C;lOSc!vNA98@Z_!dG2PqL<_G??s%C$*i@kbJsW;6Od&a__!bP}6 zx!-Jqy`5+LC85&khm0B5xMCox->@jHg27?r%yLHw76KGu+4-0@ z#e$P7M-kJm8$L5hFYI2t9qM8CA~bVrZfoMvT}idQZ0ZeJc^Rn@URlri*nH!#|Kv&f z?j`8uRl#G$aLt8bTN6pT9pb9xxWJ@^!Go>GU4pwos3Oj6{1>*93G5QhGH>T43=^;?aq zQ=L-iF-@yEI$%hH`*Y8da<}$q_bVtInM<|ss8VM{MR2Ov;?VQRce(JWTEUR9dXnO~ zy%dLPK}=YE!~X9UFJk6*kme&6vcjezieKxZZ6;smQUyX3H5VE*0WFY)5P2@Ve^kwn zPRn;16tYZZNcpvI5*?*qqaE;=?1)f&n9rMmQ<=w+orPE z+$SU)x#Ua}>G&2SOP$L-1}synHbA3R2-wks%gk)=yhv=m-@;CNzWF-FLiL}KN7y>o zoQKg^6hAspFH~2R$9?c6POceX%~^=Z1xke;I`{iGc;P(g2=Rj!HOyFtb6D$P3!Gj@ zSuA=y{STJMWsR8;M%hJZiH_D-3`B~x!igMeL`-??`U6!$rPhAqJA!S>M6nJVup4pn zessMERn^eqfvjG7Md$;Z)XBimk(rbUYy`sgC8$}MNHli}L6(dCOB_1WtJI}4X&c3! zaV=C!*nDE5p92U4=+;qz^UwCs|Ju|4P$`6A8OZW2H2>LRYMl_pP)ad+qB0RV9tn|X ztoV?!RS(+gMGi# zw-pmxDBk8q61iD7)$mPvBd*SZE>~8DVzXA2e^zM|etuUfGF5ihB9U(UL+YrDs)v77 zWW#GjFxxy9Nn~D|YyA4t*yHo>BhN3^kwUhef@oqDhBqK6lNcx)su*4J0nk^xktMwVjixky02&W?8d%6Sc=`9ex9YScA>16Wjo_S65lGowD2^3H2P+) zz)zHdZ!3l2rI(oguGF_>_0dl3fuQ*!a?XcqL~?AF+F z=yD2un~`((cAoXZ{{WR%U34C!p26 zNbei`0xa|ZPsvhTA^5t>6CpI>PX&3jzYluMVBd17%O$9)%mkb6`}V?xO;sMn;E(!D z$<{vBuy-pa;6}`R&~iCPQ64=$u9QKll@@m$h?q91=2rgTTJ&8xCM;L`mBbn|}Y zj&w{dTyW2bS$YaZt6mU_$?GQQ?;Uu8wWVE!qTdRb;p$qJ5&m(h!yN8`j57QTYvk&G z=_nqpLZQNR;o35Fq3Dbb07h^VjqfUp4{MG-1A=C91Pz3uN5pZtjMC&geoeP;%-rf7#hS`ztOANJ7wfxr4Vz_ zMjzS+TWV>V@RPl8Iklt@n-Zl=m6gjHn8Gb?P7X6B4E=vbYuf zZfk_vGLBzxmP8Efm7{X7YoT&*^?-r-EYrE9qrSQPz?dfy$(cOi0DVZ7Zr9kGe*dfn zmEf6$#Ek((buP4nY_u{2YOseP9L?Nfl7x7nBf-2Fp*H$PDz^(YR}{OODM(E;?gza% z;k?%2MS-EDsPn#DTFyYx8UMhTW#;sRRa%YopHwyZv@4}xby%=YNsyZMcIj#QS760Q z?($K>;YlS!^9mOXJ-VxZlt|8mb`^>ZRD-L5zr-j7UyAm2OmU?#**Km%x;FU4W=*$8 zG?X*u1~Ai*Vve+e@*-JkUnNd{BXr^}n|~gAY@efQXXx1q~Guh1ZLy*XM!p_mlqcr$#dilEU~Ilsq!UrNm(Kg z%apT(kOjF*C-pwP1SUIz+aSfe_~`VBWVIJ9i$8Ldf-!#b`CK$aq4W^9G!wo8G!|Kp zB&Fc{#|Klgo@dVvzo|z3XOh7*c!Egn%Q|mST_7_B@>$k z>tLrE9D`B}-_lGPOe=C`nrXzJ{0>2JZexFQ2sB1)V$R0YAD5LIu<>(jJSmF{U|v7w z4;mF7B~9?R5wzjI%$v~`k#n86UmeyTOoy_3z`3GMgDi2!xai>>7?WL0IsYI*FZoSx z1esd`$Z)MTHJ=a|B?d=CVHxc!MBnvjkL*tAITRUE6Z8Co?M8W1yXOU&8SYsebe zx}8Zb<&H!g5jQ?K;Pe8aFj>dz1-|m!M&{n7-QfI&QZWAS<xs~{<+H=u8NST0Z63%RGBV3Pwda>np zdM=>uq%5OauOC3YNP|Ft>-y$W^DW_eV5didoTaAec5i-Ne@XZZ%nVeoHdk{=FMZNT z!QSj8MMzYhTus-^(({)3Jvv_b09thIG72u$fuyr+V-pah#QO^E>|BzQ&qdqT0P^YS z$edAZ?R2|p_>Jx;STbC%$@cr@m88z$Z z9cRvpC=R$;J~f6zn%@jpN$pXh+DN~Jr6kaY#;Ydl@|JtN`44yvUZE zQhTARL-YkS*3a-`4)ZO1Al|&G1hLQ2XIi(SF3rxxi zgqWiJ#z#`1r_9q0(!ck36In)=;~t63<}iW( zo&X9;1l;CM{sO%4ZGjvs_=w?x1nVj^(g6c}>`o5yzu6))O%u_Hf7p@wE=+DPqx^=#r)(jj%xs zb?h-*_iQD7t_YfV5ynJ$4mzSS$YNfdLyMhbE{vSb)821{8b}Q@O)xGN#GNlC!T0#7 z#-^Z_T?Cy$j2ANFC_gY2r71J`%46BB=L{E{D9uv$(OT(z=f>p{+fFIrIp+7~(W8kk zk}JA0#3#R;;OufgrZ7p761wB_`j_`}7 zH5Ad|FeQAOLwAV5pYT%Y1+0tI3S~{C2X{Vb+>n%hC&jOO9$h zU3tc)9aIx@ya=}I-b8JGV*zrl6X7Z!z$W*`&S+1#x(lTDa6SF!{C2t*)bg|~arY;osMYu4f#&Yd z>Fu=J)8qAS2*~?x?FeM0q1Wbhwzs#58aQmh&C@zZq#LN&iB#U;eWamt zBz>yE<%-OJNG~B$32uw~{nxto_rpx#rioXdh!?TjeD4PrvCrxnKekFJH7+lz2;}W- z7AfE{K7qu@Ku^Dgw><0f?KQGf&USz&vgd8e;VsQF+-?mTF}X#ybg-tk`RZH>W$0)w zYKRtKo74xEln<>}SID{^^5*SORZ}ZyndRHwI&l4RaBvfkX6sCdO5P`)A6a*-Twgc| z+lhT$C_C?LGY@<$`Q=lAddr8|-PXyRHw2DD+v?Nhh#(by&N`HA)`sJILwa%fxiGK9 ztIHLqAlc2^b(Io5(qG<3@6g&*cO3Wwt@rKJn9>SCB~w)VBSe znDdcxv7DB%9>Ht;I&4@tw%%xme?liYJ&2PgCzr*MsQf}jXFrXu_-$Xuu!rUT`~3L} zdyRKD%LyRW0(GUJ{3&i#N#mBB>j)@F7!bIm^ncMvO*e~p(jNm;jOL|#58pIAxD~SVDSg?~M^LL_Zx1L>Yb>rj+eG5jaX5mnw*tt0@%j5~$k)|cSAJ8<3L(uW(H5A%pRHXR;4 z?D3#yv8bGjQrNr3!Bk|iRTRoUd>l)D9|Z%k*~*3*x5R_C^A4;3z>{gSrc7~j0l~Ia zaJBYNM=Tk~`y%Q_6k zMf0d_0wTdJ6A@Wet@CEth&eO`I5KGAevB_7r+IeDz9!PRETFyUFE1*Y>d|yapwwb~ z;gBfzMxe0vRswJ}A?T0GAw6f-hL-s5g1|@4AS~j&ij?+8M67hT1Bq1JvH!!G? zY+dlZx4^UcDuTlM6C`YYafeo*I9E?teEd92iacb8+T=cy_&J)EO4B< z_Bh@QuQ9Nc#KuzC!89<_S?3)Zw0-I;9gglYYc}yi#cfc&@|!RxtUFG!CoC(%O@jIT zdMB>gV=k#Sf;<6Ei={3gO3}Ljg=J5T=<+m(=9MlvYaW>%jsI{W>ew2t0*q@_#>t!g zT1wWC5@v>I2N2y0o=KGEE?AP;rzl+L^COtK+=o$?Iw8^HMp9ePFSCdQvQE zKS56IAtk#g{y9k*G+>>sQPWGLq2oky%e8Hf;wUy~O$9tHJhqg2?;X*}Ym#^33DAPg zG-5+Y@=AlW`>%*{=<_m@7=;}H=x&@2HYo?zkH~}~{g&AgLf&%Nin7aLh}JX42*F{v zIyhgIzf?)VWK>B9kfOsDmCzVkJ0@fP|u zPN``2lp{5Ts4TWH8vpT)VYh^{a3u|{0cPjZc2G@TK|fH^ci@qbt&*Se;xXLt#yWY}>1YC9V$;Aco~; z_W=p7{;L*hS0_~xmrkC(4lA`M4IPsi5eUCAgCsE)z4Z5fK=5iIzfKj`LZ#LDoc5wl zKbs2KGA*%%9OEd4^{kU-A#M8b;65J@+a$4iS}Ll!hdMd82hlS5^*&7Whd)dq_A|77 z@Oefv!V^<0&YbAN@BxrxotUJq?o(?L)3+n=K;9%H)#%Ys<4S)k6AJN3De{3#8FS4U zb8zK!6tJ1(=Xke3pTKF_>>C+#YdC@@Aw}H8GA*ntEmC6k|BLnrKEx zJfuwHl;@)K-d9bktg@L)or2&xYoFRy1_}VP#o^GNhzo%`aV`CQB5AlqUamP>E5;knd3wtBHdxo@Aygt&5IG zy1KU}cgwyGl`u*rYCP)48rK9ojP4Qw!A(t9P$@?E`3OAj2F!8)0u*S#_j^84hQWnT zwJA|+Bl87J8y$OPb&HG^u-^l@nhuJU@_sJdF9>S5zC3@z)I}-9nVW&rQZe9yiq9xR z)_RRUKEv0SjD-6pXR9mr@Zo8x1s=%o<11sw6fR)tyIcx6r@W!$*beDJ^tHa^FM39C z0c>=ERPv}Vs;ObRK|5Ki$9PE%f&+!a!v(Vu1=c^EpsL43mf>TL3E5k=$Z0xhP@Q|r zZw#_x)p#WXkTOaWQ#XVZd4xr~RaV9FN-+>sIA01*422y_!CD@pIZ_chFqwS~(8=QI zp%3aU$xisb?j&L->bnQuT0!u=Hp8c0*bR*ZB~IBu;^Ryb5-39ti+-~pN|`;TW@HU_ z17(TXlXfvhIvG}z<6{@ABkmd)Mma9QxFCMK(TcjW;H7&AVy^UnxbLq9znFYsH)X-% z>i7<%w>WE)sGTi0F0*Vv^g$$yaVEUX5`Yh9*X%UN8PFBZ7zMdSV`&>4eFw`^vS6Si z(NWXD=hB1T_m?WuTTE~(LBOxov7+edO1jdw_U&JLR|B5jokVJoWx|#yCm{iz9uBun zKvhR+Qm(P;Z;Zgle!y!q`lVp+4;1APFT{laRAFD`&k7{pU6xw@HDRSCX(X+VsM({2 zGNW4~>=wi6FFW)B2Lp9iGOZK@`1B%5WuOQB^k(_XasM7|s)NK1m$X()+TN^n1meO; zlKjjrye|sjWwwww4jH!&jf^u*Y62Wf@-@~P7_SlBS%Pi_v;lyzx9i%_!+=YWA+14u zC#p$io|bkuy0vKpx{{aL-^n{^7^r)9Cz4C1G&^IMjoC)Y*hj*E|MMz|U5do;G6U5&wQ`wR& z=$(7XbM)oJj>gV7tpHZQV3;*U&n{SbQG50t@vZ<8Q4e=S?`E@!&lY9KEbKRM7QXikm0 zHwX&X?~WmjENBU8uwLEItftsSL!l#)?c!a(APtulq>QR2ce>WqScf}QMqYJ;4IR;@ zkTEpon3yx`E&$TaI!{gWQ2OBSQgUi>4bB z`)$AcHQTGgaVb8n7ySJyOr~;_az=VPC(0A5JMt*)QtH**pVO>laTUV)nYX%s0FE^X zQps@>aZV=jwX|OqLxZ6R58l6kB+Cdl>8wfaN#{3*XAw}p5)3Qo%!p4no)VmzJNUr@_W za4Uf6YLewu;R_IevG%uTODBIFQ~GF)vee*Cewv>AUYXrWh$NrTm=CmFFGEF)_q z?b=Nah|3QuGs3)5ge0^XyPq@kR(UFq*|H%U4+wjO2?uEkRX9)hmCE+LDmNMHq>w-h zxhCq3)QNDg(Jn?Q7BC&awvs2Qg-*+U4|;_*h2k&RLasWXAeLK-Au?}~X__%Go-6qt zX~r8hp<0?ug{3yJG}OHsytP3RXXON4K{= z*UY?85edKBCtBe9AI4tyl*9+U9A2C4TZ4na6S~&S6Hb|AkxUK}%+zDzS=5%l25APZ z29+wGyCcKVhaEEq4*~g`Lv9n-MIpIR0h&)pU?VpY91Fo`eC|DHq@8%1W zD*_Jkeypcv4GGUp+I5b99*H}ZQW>y4@6@ztjwC3&2+(JArVD#%Xa!goyWSAgE9;k! z>S+B$fmQet?&Y;oTP#RTTZYbgN&x^94pS#r%-6U?1?Xu1NTgZR8rlq?m*C1CW#Ys5 zdkPh*N+x5&Wm~9cRhU7be}duskDb(j)k-_^7$I6^{X=Vp9y9iD2}-b$RHq2}dn|60 z!s3;B+K&P?ylZSvLhJAoM>i$K{06m)2eIkPkvGt@d= z7(?x|RyU?3(9-^+0UBiIG4cWLy|FB6EfrqQWYq?d+AW z#hm&1C-t)GtvRF!U4kQ_$vTp`oj&thXduCX_TZP-)?}O@oo_0HBT51t6>rU`pc(EZ zE!G!)4h@JGSUOnR^}Kr_dRFhhjzwSPR~xK8mwXUBDLf3}7_`kd!OU!=4B~p+sBu{^ z3&_UT6!g&0S@LOU{z`~ue5*PtCQa1_hRI;0xWj`DlVT)6X-Iib$%MP8MTv| zrO!Ne0*Pe06F7tL**m_6TwF>gC-xx0(eI&=8PNm)rwrmtqwNSGAg`Yzt8gF(|~9Q^)V3Sgavoi(M1&yeKWoi90AlE?!dNj$_JbCCnJqSOwVv%fN}4a}Hl0BRg)-|Y+#2y#_=v?*L9etW7aRo*D@LCWan7#mtr_o4M(7ryRAWHMRLWvB5`8o0hbO$_(MK+suy4vSRf7p&> z*<^hi8X)599^7w7nvjb${MNr6@3~v8NG~D-ZKxx8lmNJV>j6L@ZGyV$xlLGnyy5P1 zdoH8cj4(emd|5XTAo>5;`r&f0EE=^?&b37JbFzHom@8Pf53>Dhq(dutcKU|XfQGfI zWB-{?E-JbU8E$?$R8WFb4#wCVJ>JYs?3&mh+(yndAmWw_#@`hlh6MOedkwW|GGdEW z8^pK!b#x+6a*>cO2AU?|n&#SG%1O@jU6cXh92=aKZ|rLm z>#u^Dy8ePaLGB^%A*aB-XT!bC(oipR_r*W8E$8Qni zZQ?W%M?met90k}LN5n4e@D%buGN5@D-l2?N)^cVfdI`_S|R1O6OUi>#hY zMv#YUO9R~$yCJKt-N)e zx3-2~MZ&gBnH*>^B^8U;$V?>JL$F+=t5X^Rt$nKbW^Lq$XA>2p^r}}YH?h!yd}x>o zO*cNE3vu`disegk1WG61ZusmfKDiSa`>>?p?}YYcuS82f;~tI)(IFoe1s zftlBh?T+P6IQAxM|ClAku8M!uZKR0F$-HU4*ZL4nAP_V1rws`l@doy)^V8}ZdY`mh zW00e9US#DsgTdU3t;oTlAK87oB8z;msW<{Z1KodzfVbc4zC-cn*e`jFFp%1+u=Od% zT{>qo`yev|#ua!>O)G_lw%vUXBXw9baGzb@+Q-1zuwl8-$zdAWB{s>>pUCVy>+*|T zB)6N+d1;daJhgmBkelE!r)-p?{90*yML-$ch?1GUq()VjZY6UIg&f={{B>R@90xBQ z%_O0z7Np(EHs34NqrfW!YjI~i^k}r)AsOl#&=Jyae+;+0i~C9QTl+PhME2*WV@pj$}F7kF#^!RL}`UjExW(H(G0<3IPi z$EF2$m=;4m*VoOIFk)^WyE`F*D8P@fO}mE$MQ< z;xIbeIy~vRyHcoF=5O(-zdJtxt)wViB{(;D+}|C1id<;(Ns1pF4k@@B^l)3yEnbX)&0JBnF^esg$v*0prNgYRP$7KYox zA_m6wu?jP#yB)!0R6cK^D^@uU>%kT`rVfJy6~Dv z1rG0%+zZuv4dCGE086b(bwcZ8!A9({?X857)<|FzTHE}^Rl?(sUf!-r9ZaP*_1@&s zflw$e0{z)RC=Xi2{0poLX!da}>KB=Cu=}2+?Jyi}XQAOxDopL=8qoSd6(LA4 zsV3OaTl#*w6)^3GTA0xwZ@3#-Iv8tCRcmjH7l)pNIDhF)3r(mB2VeJKX0kBvzGnToHW1Zo zL*|bk8a-^MpIYTh;#aw}SpAtSP%#?nLI@%KbOWL+g=mr{>Ky^jpzp?EhS7kgt+cvO zFgV>&PP{+y?FV&Z){<4NR4J2ST4JzRZl~3Hxj??Q{uZX6%PLHP6$U+(VrR8TZYlMr=$>R#3(=d z3LY5JAC6R$8=HZe``X|b{4%wfI&jOlSk9!6 z3@r>?PpSz|n3^7!6Y(0>)SOeG5@pNMEPY5xJX*-4{i2<|FmRH?DOSl?k7>6u~g-X8|}r)J!oPTZ`DVuE<}>rnv|1D8CV>63)(Ss za6G*fiv`amZ@#*;g-rS?WkV)mFXe!A6?}@Nr2&#hPNOw#)+chghqYu)X@F@yh8i0mTA_E9fgr{RZ23eDVacYiyL(4D6 zX=%bwMm`?f8=Bxvfja&o6q@;$n&KJT--?Ag#-K%IxqMo@)*?u?4hI{AJqPmZy(YZN zF~6b&AsgXQ3P5oOec$SNDct}qOCdLe(4i<|b%np|0CR)BIenQdz#Ig(8`lJv zkO?+@v8*(}Y|Z2gi)A%I+*B1Plx=W$*%J_1OdDb6CWJkOX^u*`Xs6k=j z^l_Ru-gdiVSbl)eP@)B7rL_Tsfo?(`2#Fd1_naZ#q$E^D*q|&S51f3z^)F$7rZ2Mu zmlVQ&N*E@<$8wTsEV$-Gx7@j4OX3I;t|o{NGJo+lYPuAgQ2R6;NJLF{{|hrOAQ8ms zqe{ScE&gG84Keyx5;9RNSe)UpbNfv>I+v50>IV2wY8qE60t`gX=cMYK|LCZS=(AM6 zAe{K!V#Wvn2u(w44MWQ1ef(d?oQXu7NT)ZRs#`7XhRBMs4|VD z(99t9(+9inpMU|_DFb=SPXuQhsm&KyCR2u~Rq;x?pP30a&xfgiEC`Y~axjzmfPo|% zo5{@p-1}Lv7>ybNQJT)b0?1cI*w-oz@L3zeWP>CP?N<#@;GooHU7*4NV@oY6ghNE0 z7-W`^qIOZdswrii+5141nia8ejq^mYB5N-(0A}aifTAM0(IGrwlrJ-%K20YM9f$6clsHpvhlCL z)la{pwM;cZOOtXjvasa++sweBx{2}i`)YBnxd^9aWk`{mt^HL8QV52m&~1X|6vbiMZX9nrFI~Y5zalQJEtlY@D<&+2F>N{ob~b| zv2h`=M$Q_x-wb&NGhZz;{-FpP6ve<3S+X!8{Ar(=7EH^G84{LNUN?bR67qZLiZpvn zc0-YQYFIs9h^?7nMI<&Ql$ahN;7kjFxp`qk1UC&LR-b868#(vBKkh|ZBN`3#AI;Z; zCc+ssMmri+p1^|NS@W~}z_!E-47jLmUEVX)K&K#~gFHJ~vpN!>pyZ}tpm2eIu)ABo zcQQ9{G%;3jcC@fHbAo)XvD8P)iFh{pu<6Y`8NKuRhp(R8L!0!8@grtH-B9~KD zj%~e=PEf$Du}M0cLb}e=^-*ug>9SIr<^X)qsKE8cEE#C^Ca9G>g#pd`vEyY6kHGCL zX0tMvN}uVeP{-4K;ET5Nj<%=Wgtlv=BGt=do2>I2#K6td;~B<}(msKYiuvb%^nbn2 z%oCu+Fd4WW{oNivVLv`1 zuH%!|$&aKA{>KM9{_9CH8Q|e&RrduXLH^$5AFg{DHw7LXP#-7-j)r4dMf%B_!jsxI zPa9+@=Iohh;~8M_+BRrDK4NEj;ooOT7v*No0k_6!@y#KJbu|b_{cNuJGFO}Fc9Zxj zd^sKDDE{X%gS9IuU}Bf_zH~@x^m|7t!ZL6RqJol;GDaAmZ$pHfqV%^yx3MdXSj2~H zH`=~CstS?%`9PYri8|LlOBuToyZ9KzyMR(R{rU(J?c0kAP@45u(#4|kwBktlnWOty zYa*2DtuDPM_qm>rKQ&Xocm?|VH@B53zl9eA9h}(?VdV=!#ngA*Z0-diPW-U+KHG12csiJ{@hD-!a*U@#d)%ZxFK}=aF+LPwc$4h!mVAnx_AkV^CS`;w>-pUb!k%AzqUhK(LZx1 zdwf_2S>N2zJYBzp7y7`840C}hGhXI39kjc1duD&4y(bYDvofiHc6w9MK7T3|OXjO| z+JgPVs~4$#@WKne4RdJ-SK@KABB)K97qr@S+=MgUX9}e4K28QX63X9u^s8`7G!zE<>9Xc~BE9-X>I=vtcsAkYI z=H)7x!|9j#JT8WMs>nx_#%C}kZ-it^FZN~?$ z#WAU{i;{xQqJ=uJU1!ms{_pO@{VP{@agNMJ2UGQdQpbs|r*1lK9*D@;DBt6QS$(kZ zcZP1ea~=^vC`Y^~y}ds?r9^qYZJmO=0&`{@@>j}E(%lKZwnX&gbEs=vu!o!ZA$!N% zM{{-2d~A8|;Inm>)Kh*^dqx1;#>4e=xN+VDUTGux7*jHI=ixK{$R<^KdwtR~VE!-? zp7H4uPCR{z4i$UE;iLG$q1|`SVXq&XeK23yw-nSUGi)~>wuKVk;18t?@O&Ny={aWJ zl!a~m_}C(M*WdyZxAue|xU$D~3A7zkqfKoi?Am2ee$0b)i5YuE#A{PT=@sVP3}iKa zFiF&Xn)Im~uK|NjA1 zK&royO{#K9^_xvyaBkbyE|9>Oe%#QHf8Qkfk(fz)!^ign&4lZ$+jm6TG;H-!ZVdH9 zdR2haxvr?%iWZAXbIr^g%fJ{l=TC_y#{FK?8mk9O&;)HYh)Z<3H9fTQZixU@_-R)j;@1ed=4$@5>c4>DURv+x;I&Ao{sI`h!8fV#$!3d#{45LU)xjYsT>~iivxbUb#{R@zSl`*aF&lkf8=7mnw%^1 z)+cp`=vKNQsdeXrz9S7`RsF72*C5wr_|wbkcVl=qhG%b8Cnw~`B)LpsQ~mHCwGlL z0i5psbh0BpYeIG$^$TT9e>D)RK!*LkTqdt-4`c?alRrgEQ*zBFX>7XC_`cbfvv?|g z$_-V9HcNfhnTZxg!>4ntZ$X*g=;G53sAi5^$2W7lL#m7S-=8Wy)shr9zjFUt_;Ala z0s4`WhY8rSFLT^djzp8A&`Jn#=q8}ai>B|Af4_A-6mnJ-5Ao}{xV}wv(+EJmgm275DHcI zUTRNu@qR~CV;Qg1Zk$dvg$&Wig1ldpgOVWQ9#|@w#rti@V2_vm?n=2F6t)FHJ{ugf zc)+gA5FRPS3OyG{f0LIz8;vf%te=^M(t6wWy{F^5PTVw{XHc}y8ZN563_m?qo2J!q^ZpJ^M52^F!pHbV)fpG`r4J+(jxw@op~6( zdX|KPgaQ$6Cq$Lx$cd80df4??gyF4e?XgEI`KCzVHMBzZCe4xK4H!xTxB;|~4s$oJ04wuTsN?+N} z#`m~NlQ4dX3%Cn6;DJKVURwv1eT#^iHB}@*uP)q$by)h2^k4)hWeSa;o_z0 z(j9tPPd%t!ShJTVI3_2vHv{?0(q)qg!xI2chlr*|f1wP862E?aNvsyt>r0B^CFYGK zk!XCM1sajKFcK)*az(G#w=Ii&YG_~VC|Kg5oDkkLX!Z8=dk2GKWF5jonzn9NK4)t= z!`G|O-5QZ?;X$~tij7=d`zE?^OL$CjlCrR(qWdML){{9LVA-t$BVE}J(59kpXE7M^ z%m+B~f7bblRnXCswT;y~;rvKFm6V>}`_0e15 z=&WMJfLMM?K-r)7^MbOc z4+GWLD+Y{-tDv%4;rt9Pz1sTq+MStb@=-K5C;dqx-U(s4G>EfGv)Apz2#Ro$55uLIXky-sbaGah|&&~JU{kjhK(sWi485Wl{ncHE<6pdztweH*elQ+5JzBX;$Tq9X?h&L!^)eE<(CoD5}e}YtRKs?%7>CGg(UfinyOCtq4aDDVz{oAwQ z+_xJmQ;_q+wN(fmqOh{03S!Yr`9J}4rkR47iSq>#Pe;i+P@rcAt`kdl0P-@yplujB zUm(dYx6&113FNJ%ntKR*B96dT*NSiB4GD0`5B8J}`FO4e#qE_MFN#rfCgEyNe@{ji zpNq63{4$yutFApE$?)=XtFNRWGKhO~L;l{}P|jKdvh}di$cvudkDgv=kCs$GdvpDM zPi1)6iI&wz(e0IRZZ=%K5Z*rB8Qyli6|^08l(k9iFfx!AOiQ;_F-UVMu}za%^bGoJbZe(by_#p9zxu}^&Cz-4VP}#AI_jF$uX6VWrp`> zj(!CLip3((Uf7A#GcnGS#z=I%J9)toCa)h-vqm}Q&)$hOoYf~qLu8h2P z=EwT@Z1utmjC^BdI=WxSr#IdU1y@B^lbay#?GEZBu1?}bMfAwouLBK*QQy@G; zp8;K!-Ooz!9b^|O=K5@Bj`*Ozz}uqw<63p?7WJt9?XB?kiH{l^@*`ZT;p>ahH)pMm zeU&TvB(~uOWEn=}qU68{ilsaF5Rjzf5F{YdkI!zbFNKSUI|Bgy_MeebJ5xR>15Q)sIlDo9okAGTt7(+?)qDuOjcfV=xpf_`FL7(PUyAF zNIX$9F<5d^#DPeb9ZL4-$BVMBsyxCZbRVegCzX({j-k$YJ;!ozU?$GakVbPu8jHR3 zrMz?%D|hwuf2r!&G6pN8_{OqluRX=-V*6Zu~tybObQnxx5|7+0#7ch*uaeV;HvI z@O&=tj-_{9%PUeh8yf!-I>XSE`=nG7)p4@Bo9sj4e|2JW#soHFWzi9~x-}X%mbM77 zm=0u{JssQOgR5_!|L08KkxZWTNy_C51=_^R+OyT_^lMTVtgH&oLk2cocR3DzKJ%8P4M|Nk9`Yse+N8`ZAE}!7Ok7H)v=kN&8+Rtl=fBf<=im5)(I_c6=N?*eu#?-&dNpxnp=h! zHEa|@uMG`SwU>Gai$P^zP_*&Z4(DBMIxkkosm1Db%c&)?=L5Z^f|d#7?f*@F}1uo+M1u z+$BKvOX|#8bYnC;{VJS&uIo=4gAfe*Z6a+Bn}iHPY!c~%$fjVYSGH#Hfd3?HH(0+m ze*{Pt4GOBhS(-#~n(Sb7bqN|dBlg;ixapQp;Q%Uj4iwOlBT%3{=Dk5-Kt)UqI$p9y zvdUVK(i=S{t(En-;vdP}s5on|UHP2McbmOJ{r$?8V(DiOzmt6i`p8mFkzyO`DU4Xg zQ9Jvpc5=bFc?j=81hd%zYnyc90z#wffARa0$TsP}&&-8SI~ysv@;J;wu^WwPw$C0% zEa?^>S|yIb(2OtUw5iq?Ic#ax7eY<)jQTmF&gzDp#>%wA&T%Tz$*(fd!Q199+GcD7 zG(*`B6B8nd0*~O6D`STAWHNj^PS*B?RmbjQKFBh)i`g1-4AX|`R>$wdrj*JVf1C7T zjdil?o9MZK%=nmInkIX&NiUTP%jk5FR$4GR(gn=6;@Zr~@VcctZ=t9kuTA4iJznM! zC4-zC4f%u-d1l{f3(7CvHVZ1RVi%CPMLEXIJdF9iZojyUx6R@T?exW!__kKs?H8Ky zrcS$1PM!8mB;Rk^i^bqryJ;twe>Uf+w*IEJ^00%cCS2{Nn(3uawb1KedI?wh^fI*$ zcC{h-KGT~OSvz%p!G^^>#s$@2$Z~u(ewv0@-gc%9>C~xikaj_-q}xuqA$`a{mMdiG z4p8|eoN*bz(;#H1P|rlGq#9AQTFkTzCH++#Uve_LI!x=7>hkxn36oUif2g?ei$bYf z={w?DLDTF$Lf@~4cdw=`X@Zbzy<$Snv%`ea7BD8{7xkNk+VvKW1#*An6mtk8eX9y8 zj8tujJ1XLr8F+G|8QILyYP_3ePT0vQ`F%_ze)c<_S8{>w!7~+()ZKY#R)R{|x$%n- zO&JnC=mP4w)=LoY%a!0Jf2zAxZhBXGUHud}Pw>f+)Gu7EEiZ@i4rGZywwonvv-Gh$ zSAHLY0Jr4qwv^(zJ>(ztGtPIjv_jhl|9Ge0=-d+urB8X?Zl>j$?N(YYn22e0a)Jb# ze)SkiEFbF-COTb4*7ltek1th-GD4x44BARYF-knGvd)|7)s551y2QUsvqt?Y8;~4 zo5wJTLMJIR>tY^z3P*D#;Y3z9xGi@WSx(9$o&%$^x148bn>1AB+HK*!5+d>O5?KvwGkD0)^`Ed3Oxq_~Km)w+b3_=&ub3hqn z89iOUhZC#elHz0`!LjjI|51UO7^f#mHE#D@0D@i@`jTBve^vW8wXdpGz^K&O67ciu z2_YMfKigP+^z-Y}tPquKm@{&D(yBSoL|BU$1|lx5Ju~x(epK3O($s8XE38xTLf)&;xzt9L%TaD zA4JeaInV-C(Fi*NwW>j?)sv5+$?5Rfv)a_O?lA%R&o7oUNBrXUVrBr_hNd9Lk0mVz z$pFbjf0;Lx2DhVs+0xZat8tE7G-H_3x<5q7vkYCh}4RoScjtHB&nj1VNvo^@(v z)Jz$E4a8|Q*pJ{ZzlYsP8g^I8$I82PX(`qGe^Os&7=i=h#32 zNx-hP@&^A7`nRuX<@RNYM>r*pfVj88?K8Edr(5cyC+njtj@@90!Qas@V+HzrX4(!3 zoS`Uu6b`bn?oOB0jnB{gSqX}k08IF|DUQBo5^-RVuQZ#EmOONiAauLPedrF3f4dGy zZw%-G$UQ+9D9vbeaw?qvrh5InK1B_h;ueWG*Y-q>2PMVCIwc}@qwJKV>q2ObvxTJd zjV+#=DR1n)Jo4YV+0Hg;P6>z~C-+{JRUZRCM6kJQI=+%-H|m9Dcx9%dK7{9_c3fiA z)UFzDjP6n>#Cl-lwji}t%48iTf7hlF(c5+N->!*|e>a;O(g_@I+AQ{N&XQrxBV!{WO<59Zv8{{7yiaO#;$ zgl|rT=!b_WidHeDb!D?0{)hxFj{a~`Ve8&(9Vf;4b&(Y`*=Y_dsUT?G3Q= z$cqE9box*w1TdO86V9KDPCUlU%dqK|S$YyKTK)&EePL=}3}@jGyodbVjv_uL*)8dj z0Kt~xfD&4?)|Z~@Yt0VZ&I82W+|YiJ-yRYd(9*hKYs=%|c?Y{=BF$AwC#S4ta`3IR z>Z9kwyEl^%GAuYOQQvief8#4294n1@fKIVQs5!+FCdG8j6s2e^TjtRPReSy%JVI!u zNx)2&l2`P=&lkyyDX)PoMh3iQv`=NY42*;UdEUE@uL`-s*BRF$?WacgyF*-Xfgmpe zWCZkN`r6yP}eX3KkpU-*a%D@ zZdKLv`Ra3rstU}ne;6Rue3^7G+bO6DIY|&lrA@Ta{xo3J%iCy{USEXLM%UO_Xb_!Y zXUk~S{OE3HjAu8!?Q{gJGzuqYDRkq>cY@=WzX-p5id^gv_@nbr#4MOxp2n1H_xq7Z z+_m6l7zE6`}WZI3u-oWAZR2&d|m zxNpoko!#76S&WumRBt{eCsr2p^t~K+7O5mgN(WG{!|_t10pT&#pv&+bKG~q_msgv) z8`M`Dbp$Mre+~F**dOu3w5Y&qbGSMa@qo!?Cn8M>t_5nL;=bnC%TfZY^zBNtdUE-} zphD#w$S+7&`8Q$M^Ir#&Xg#cGv@{*Qc_xWq6jLK&P4l=!hKKzkta9{Matb6a2Py+e zw}JzQIBHy#^{cPySDq=3^erfN954F?3Qo|Nt3eyNTB#510K8RrNe0fB5A>@z_!A$Ctb>#EE-F7;=gF>aGp%X;4`8V)Qm%%r* zX4TiA!%y^UubQ>NrjpT00UHNB*;=EY|XJ>)4M3AS5T80F+9L_yP#Hgr; zl0XgGnr^>^B0}41RS2yxz+uFm{=Vlp|_jU-^`@BF^z+;3CVVU?VB19dI(kdm1p!2;xC^#9 zJ!|)(>FeS2E!j~PE0bNciLPsF#>>LMe+|lR<&8u+GjW}VHxnDe0OOUA*szQ&hE&d` zSqCK*`~j%+z8I)qI+!nKy$5V2)+H z19X#E3lY~2Z}0+IO!poaCXjCSZJ=WR54c|rL4Sj6I6-{qky5~{9B0N!PKgOde}A$D z#@ZNObafhTXZmJ|Nl=Q$m^j_T9qe7WO~w6_1dpxr-F8n)r%c!tZ>~7l+`Ye#!g;1r zM2$ZE)%B$`yI*DVH^Zxs_1$YwiN<`^=t>vD)A!dSAYs;Mjm8*Ah=v0yI~^F(7O zS~|`&Z%J*C*WO;P;_buU(>9IR9 zQPKmR`t&}kAVM4~LiuyKN8ytza467c1zGy@enB}w_y~Sekix^cOB-w73RZ+NhZEl? zF~J4SKNjTs55X%0$&*|s-ZZ<-ozo|xYtJ3_yUiqA@=Z*_Y2IWKY0BMrENN0@nrv96 zN#p-8=?}l8t1uV)KUeo|T;RJPnX9IWfBqC|k7p@E#(%^%{jt zk5fs=HQpPfQbt+~WS(JJj8h6X?|yui))RS#wf4k_1CkjyPDiIzC7>BGnpWM*Y+nFH zAViNifxgL5u3V_KfAs}8Jf^8Zcs`(lI)ofgW#ozG(pc64G`GIMIrHz^1nF3ylBoKm zXX0_{i1Z$iHfJGD%6j>wp63pcFeSgQLg{m%>o`!@gQC*KB2pGYVzq<*zK5!GUYy)X zMRevNtb@rp^b7Fm^!=iAZfDM_qhdV%%(N%~bXIs3kU|jte=7QWvq=V?Q9#n(FA6~K z=@upQ9d2M|m@y}0?8&)k;eY0djU005g=@}sBePqcvb!OdRpXVI1a3Yb`9M($X|M62 zV&CMVCBlEgSNCXhLr&rZ&GkoDQ1iHx&QO|tc}*pu%^Qn~RW_bv9repnF5DmMsC&aj zuFM2$DwLeLe*t)Lqn@8|!DQcJ_GhHZxIPjYjSyfPucfONLBD|CgFNa zG)TAre`G9auMHu@&p5Lru9c$f&Sn+~92yMx2eKcWbuONKhujidWW9_ezIwiTeWiM5 z2?cNT6(kK-tRPB47_yd<%h6*vHh?}(Jk&*vPUu=K8Gb8m>#RbB_TiqPA%u8g8|O!? z#{epNg|k0)irzZ9gx+KrNUfbjV^I}zW(9qJf4Jn_)A70y5S)O_8Ifo@*Q7TzZirN? zUc73ylA6(>s}K}M5P$;bBDk;OZc++5gfr_n!?jb_!da{GTo#ftJ61G4cRC<8AlyER zLL<#b(Wd7*KuvN^_c|U?`VljuJLC@|(H&JZO7)k55e&(yTd#H`b)hd2OHU46WK-}6 ze@pV1AO?Z*mvbox)Juz|?oooqSUnb=d5JaD)nknb5kmY(a`mwjDtd8vIzw!Il-xYF zl*abQxY1OA(q$BcQBoWPM^ZWiEi8K0t&TE|MJ;wjN(d?;BNj@FT{OD?D=JTu>$8~S z-A5AoiL{HqBDrVAsxD;_v6zO6IR#lafAsT5^c1BgPZE5az9<|fFfBc{Otfrrn)i!V zR_{iiyWp5IG+f5}m{SC4i%ezBniakvw<6f3QbaVNXFg8OnT*Ux@8bLZ^hRyj%5}<} zU~{qvSnZ!fMkwCIfURT2wd)$DXIVX6R+Cxq%Lh=pBRD2Akk$z^`FyOQ>SgaTf7~*5 zK6TmXJo8jLf%PaP)h?_id%Fi&lc09WThf%=Q?hy+D;ESu^6Pd3u(o>wYa^uQe}>-L z=$$Q0n?afIY9)JxXc7W2%T8O@_f1y6&#C$k)%cKQ9a~sM5JT4B&R2WM^gpaZA&9sg6&!=5ce=aVJqr$)48Cn`Va|H-{kGDfNCg12JdcDZ00e zCr!HOf)}(qfD583XzD~;F8QnFs zagam#Yb9Jg93Q88mh7YHf6SkpIa2vLpu?;d601KMuRpmU4lCq)1UdHVe6n+lf|K0; zg&s3%GX|hG(hP}5%Ho;YNlM_VC#qo@4ZF0h0G57Ufw${-V&qJ-JTtQ0L1D;IN@ zni6GPq>0_^uci6A3f&HPya4V;W*EEBFW3|^UQs1EOg@+Pf8Nwlr(Qse?OaSwib`Sg znv_iZqa}|aS`J&ROo3MCzQ_NAS0LCeQZwtXK+_e>Ba?AB zQ^j2%`wah$-N%k%$$26T&hlC``BogQ9n)w&W=ttLoMLCR7|!ke)&d(uS42F;tT;A{?1~RHiKx}$P%1&|{*wr5VkXHY z+E^RcgS1t|cA2$efLtAv%yK)_r1%Gtn1hU@4UJefiO$|b<`&0x**tmnyPNZO|B75T zg|s!Kl|?A9s@F~F9DMX??fn=tYwBq1Pjq#3Z^4A|lD zf`EQme`s`y-P(7ec$ErA?}zHQNt%dBw`OAe0SdRbp9Y#~nM}B6Z-;3co3l{n^R4a; za^h})86kq6OM-(J$38!+t^JTooo>td86#NWbuu?!KYc#=C8cd0^qt`>!mD+;(R_;c z(T?LNL|3ri$`ls-V3cZ9s*X1??KY8DV)GOCf1xzDSc8s=S5vxb#chNAYjLJ!bLl7B zV2Ov+8+7|Fd=2hkLfa+pblOna3lq+zUFf5A$HbHoIB3pZ8W^EU11k-WfHA-WiFD`e zLy%m06a!;53Sh{`-vK3D&=^74if_3`kPP^kfxHFB@W6oHtAWsRARoHQA{U ze?g0yH@5MftC4Y4bgDVi8nYqZs}iuGbPc3-Q2r4|U3i%ShR~yfFpq7c=4d86aAPI4 zZzexPNe*3R{)0^rw{G(0Db%8muH33$exS=zErh^K1gDE4aT|efM{2Vy-XX!g!9eOO zsda>aWzhqB4;eR7-b+F|x_mEOzlJ(*f&07S4hTD&Nc7s_gIDo?P`qaV%^@RKH+0cvkYfAgUYQIFeEg1*gSz zNHP;Z4<)~2cUZ>(Ziz)me!D8j59HbqsK~`Y@K*+udsD362$v@H{YUPP4LZF@e+!!L z=>ylZm9CpfwYc`F;INf}WbG#Ix*Lki>L#j48+i~3(X4q-(%|gN08UPoRC*Q0-Wf$= zFrAas19`{l7slR)COYoc5^Y*W=R2F{RGjou)$^OSP6pK&U8w+#27+`F4h^#j@E0Ag zUCA%GjvXiHrLSP^;r+NRF4iv{)5LH#lp$@T!Uj2rK*n zC4WFf<+~roI>Lug>{Frx?hBHeLo{^ED#s%?(`{)Fo7TW&dhT@0Dgfrve{G)LEC7D>bq&dYu;Ux%j#OVEGPrt4V!DjVm{J(aC z(C_YBTryP(uXZFRVCn5lZIv^&9MBvV>VM&JD3^j~+S(#R=OU9ig4j zZcwv(DbrE{$+xMQQ%SP~Pr6iY=}dlN`rZMPG>}BhM4c3K12Eh71`dS^02^VZ0!q?~ z4lMmMZr*eADE4ElcU&|#xzeU94NpI%kgsHqXt)9@5F!PNC!nOce{qnZL$7M#IiZX> z<*J*5>1T|5p8Yv5=vt5O(}s$KjRQndth=sYy8tk9jux{bK%mq@F#yh*e= zj)darC*G!<-(9JhOc2KNf7MhCP=IR7&+7MH7+2S| zm$mg<^4j~5D=yDj-r9|AkRYG2BD56pHc%@0#rvt`iC>aRMZH;(4;W@42uPxDrEHsn zP_(G9h?5grcXezTY9BcLin`2ol=s56N0C+hZ!I{ZRY-$qi41M{fHXa^J}8Mf8k>f9 z3ly5L2Eg;UfByKjGkHwB0F0C3R-nvEqNAUMXbE~%+dF}&q1q34PU;vX$WDt#HQ{$M zFb%+zF+?~P3fzxPg^S-um(GMwF4ym#Q_3&IgX*ai2H^UDY!9w8*@SS{P+ELgzw%@K z;zIg?Y+_1F$RHc137ed+FeZitlXAwPnyeunVQ*0Ee;afSjvJlhLLgT4#AECeEqK*% z1;)^RJPc+j02qIV#gb8}J zsezl^-;s|IRl-sij!RgT5sd5?UEOT~N!gs&s;ldWpG+STICX9pl3(Km{l&2JAq*hT zK*7H6f6kBlbS`}IJwkd=ks|diY&Ov*;(H3N?2|Edc)kx)^t!8}7gLwlTC@Na?sM`Z zo0wP1=f;O*R}L-|J$Qjw7K8BB158|pOD0j=oy9pfI1nzCZAkNBlNK>emv!T>zswE0 zHpiEH4mvjl+S0cJ@X~Fk8qfIIKo&RACR_HHUJM1Jz{q@t6_3`skcSm%3;hEdDH%od7!gz$Z zw}v3y1qIh28vyR(Ja+{Fz4fcw+4C2WIrEfbnsjGK=!&Q%OPjHF zf0hiLQx8y>M-ojV*&-ZR>D7>uRn{6cC9-z)h1#6_M2JdJr!)|lIz|RuY76zl{ z8yRavEb7ectB7IoO{muXU_n-Z5fBMwam&tmEN4yr&J9l>f{turLz|irL0 zmKne_B(c?A%tWIPUD&8_E!D`dyBD`4@lk4{@mHuKTb+4?f0E63C1JI!t>1g#e+x?A zr!}E#)wNT#=Xa_zOYp2oBJ8i^^YkT57AS{pA#N`2$DJ?kN7~{xF#S%p$@?xglCI;% zEmS(`>>vKWb@pEc)BAR|4{GOP?l5KkD0R|dLuS)?*|u%R$Di)pNgE%6S|3)&D?<@} z1ZfOmq968;a}^}WnxA~K`5>j9e;Jt5XqWV$dxZf@i?tiYdaa9cVtr%9dJpA;!-q#m z8`e`na>b%$rsrHojy91MYWKgbpP8bfruVI=KXybmse*d_<5r*8@tLS^h2!%OZYuJV zu|*Ryq&z$?YQ3!<-jHBx-AR=JvWbvFVpr`VOF5>{f21Uiqcrsr zUM83#HQNq5vzZu`KCWbnz&x0bVTSP=8F+^D%2X1_ffOa;Ka1$H_BrMxUvS$lnS8)Nw-$979CbLGmw|!+e=RlPz}^cADDDMupd^sWLRRmeryRU$GBK9+d*Fu_SQ%sWU+X`d zt3P{PUA5}GGp6nUvG$pYt?+jI9^L%bh3Y^a1yhovQGblSM>6qKNl@-jZ>9L3l^|#P zE;t+bGrYH~&8huXgC%bERdsD$CB7HQG^mhqveET>?b6fQf1Piu&n=0c`?No(AQx8> zm;P(??Zw)n72n8c4*JNglf(|efrhw&R1+z{|`S^FRa!6o4s#qZX-L=eD8?<59Qw2 zaXVth8oOg-e`9)VO;C5abz6~cjo0A^Gzn3#K!OW^>ZT`V0wl%z1*AmrB9fvgk)lM2 zx7LLuz{`KJaSFgw|AqbXWL2SvDySXE)BCg&oOU-*$jX!FmM2f<_dN`-*lTfD06rL) z5}_a3OHb|fH|2cz2yBeCg7M;dGK_MGzq7)>BwqFGf3E#%E_`4kr@8tI1iAvBp?S4T z51S+bBv~z`#>XV6#>m7C00^yuFkImuQx4@ouGYx998A&+`AGF|*Xp;1WLw}M684$u zpRZ+@rU*_mvGzcKwbtjw!x?*FUTuU=xC>z91vN&snQMFu8`m;TV?2b5E%d{3K5KvY zzE<;YevS}I{^w5Q(~pFmL#5!`1864WnzRslZIq zB+j8CuAFbURxQKcBTDDMyglD=rTR0qO$po8pXv*<(6{~mX5;y)r>*bW;$NmZ!1Vds z&pMKzBv0Opes&tbYhbIjLM3Z3osdA)e^-~U1QmSnAOueM9I*95&lj4NJ{hL^`G%nC zrIx= zP1SZkt;xfY{1{@%E0-^xZ>p988h0eb{9U~l=r@l>J?w3&?`=@<>8q&T4n6K)f4zS5 z#-+eO9GzB&f%BPWjK}Q3LQ-S?1mvK+;(6ebTTwHT)lB6 z*skof{WL&@L6PZjO}-9UHn@H^f3U!4guBqV_od6{uLRn|D0(4MP$(T1Jim1LLSRrc znovN7!=)1{=JL7oUtK;Mn0g#Ksg^`B7mkyM$!fZM^?YM^+jR0M!*2y-GBiV|z?%qx zRX@+A_%)=sI0s>Y|FALi5#)p>lpEb8+%ZZj4b$%H^Vb3$P+rGDVyig+e<0*6aVBKd zQWJYf8Le*2`G$aCCj6;>kc&malxt`VuBN&~qguobW_<~hp_ljS=Zmj$R8w)V9~fmf z&IdOvCKj)LRP#NDuAPIqko`?R{(B%7;&hx2T}0^?YHp?aH7=BG*qaJ_!@zM4jIB)~ z0}hx-*8;k!vZ2xro|ZEKf5+imva>bp>EhaKX)LgE;UWy+4PnpQ_m}LYhk?G2v=AR! zs2Q{K>L^eeu9tnP76|>xUN4*!4*piZ3FSAGEEB5QyP4AczyVHU$Avx4fO7%+5)%q> zD2Kj5dlSqDUH!wG$ZtWmL9L%E&8S`dqjSkfD`+dbLSHsAZI1-pf6a5aRH^w3&1PHu zjtV?)X#bS9d+nvw>K`=_{uyI|h3Qt#3<1}R0lq?idIo?iouQq}KUEsnEHG^~Aam%D z=>J{~1`tFW_47cON+-exQuhJ|QuSNh!lUHfP_ygWsqo+EVyuwm+`C5!->H=*a1V?$ zz8(wHLGyEmDmOZ9f4_SYP)@TWx^xaCkrSYV7Ktc?DWwKVh)jppgUY6SpD=7lbYdYdyF@ ztCoP{Ol|ixoTNqbiiS=boFH?7cs%ZnqJ(Z3+BKR?wpu6nf8DivQ&S1m{`zAm7rq*u z+RI<~y4>Warw{wFrWHq}Rp@ZpT*j$5yv~ZpO6~TvL~o;uYOdHL{UPoF(rD6&_A`-W zGIZs2i+n;mL|5=scZlbo@xB(aL~sFp;CIzl3*^rP>>8-6Z$JCuGb;@=zTbYb^14_e^Rm2zoGw6pFSb4;mQ>QB0bnv zzy+bIiII9J1z_)m8qD}|sOwa@B7bg$DS$YmnP2qjCw^!kPCHq}kV;uer)Gl%^Q}u9X zj6jEfe~9oSiJ`dqA!nZ98Y7wn(F*fPHKcAK|L9|nevBj1FVdU8wSW&o9}dClKJlDp zYYd~-_CNKbP&`4Ap};@>#~hN)k6Fff>8yz-R(ay@f0F~4tj^|W3;D)`JrO<|cm>5&AeI)5 z+lPEKCY-_KV9waUZnu?1Hjcx5ig`4U1@s?k2ATtRB}`%;j?hpX>A{xdrP_ppOnVP~ zjAvEtzO&!Iu;0zAmDk?vE{@EgW`loU-2h(5*}3IP*bnh1_t(4i9^};E2XtO>>NR&B zVQK5?0Ex1G!dr9)6;&S(I83MOy$!c+8D>xBuH=*Cx zK(8{TU3vC<9QBd%C=qyqcizOh;0UCK8WzVzn+6(7x@n9h6AF^BlVC=5juS2De}um% z8*n7ggt$trtbB4+WJxE2*2Re3y=fGvH?7nD-X$HDl9N2ybqe$}G$wF>pv)ZL-U<_h z36}z>FyOl;_AZoxAxtlsuD+8zoYu1u99!J#EQwfuISe81kzgP5x*uym9)h^u&fxYq zzVczHUXc!+_xbN|E+upxBzh)|fw}xyGwKC?by{%JPL(9Dg&Syu{O-}h-edJ(v^-aV4Fib?77+O>fBvU_g>lIY za^=*>RAs7f`LVb0Q@$4ZB&q#9AY&q0uY%0dQ! zI{~_(I!9-y!Y5OWq^=O7e-xWixZ+`H=fwviF7~ht3G|O#V@D05NYI%J)L_30$Gp2@ zN3PMCCL-qwsGAPND-zw4iF46ZvqYY&lM!JA3F;^ZXrpA>lyXLdd9zSrF8f^`&^eE1Fl31BTFbptAC!d^nIR09ZynAf1*|7i8r*h$57$c zd;vHzrbeU*SwIT~bhp~!y@r(NjIX@I7;E* zlduDI4mD0}z|qmYkhp*f2luK%pkd+UHqw=H->k>8?|8$~n&^h}vNa&{ZogJFzrNTE~r;0a$$U?NMZtzFXTZtE<(cwr<%YM42 zvSTVYf2E%Gb9#@dJEF=vzO=4?*VT&oe=f=s|EFlkm$;Vs39NL1Fx8{hPaqu*MhXrF zL^n|N6K$Gctp_13;FHZ6=xQt(x%9vAlAo*#yf+xP|BXbvGo?*W_icdl1!FltUXy_3 zcWB$i6Tu^f1Zx-06inhp3{EQx_)qzzkv#%vf1@GqEqrW|%v{dbJ_Q2sVs^v0bb`aR z8g3(!&vZ)O_A6QtwN!V<5lPa}<^*f%pm^4~o-$c$gxvC)Buy0u08~J$zr*)*V4Kwb zk-G`fPJ&C}6jmb9MW{o%@e_%q%~;b|no!ljjXV==2Z&XGUbfEeVQCJ3aom`$;XR7Z z`ahj9;D6l`zt2Y~zg^@@93EVLU;0IbBqcC5++Y021-$RvQOqx@XT5Z-;tO|ksGJw2~FsZOO_ zf7XaF*Pk^atOZ9QI+sK}cC!mOqvNF(<;fD6@&0)u1WLApNV_|@k zxFnn5&|gQ~CGjnzKqDej*RiB6)%p%JJEvnNxK(w+KkBUog z5owf6+Ox?>s;e^`mT-3mm}D-DQk{Bg2t$5}w8;)2X1oQ7kuF?domyRu;Y=bIWA84z zP=ADVD$=Bp%X~<8^~nj3q!NXTrbcJvACsaTR(2gi(TVWJW3^Sa1_b4-cPsO4;Q*Y+ z{VthJ9LML12#FkjV%-@a>r(g(iGZ8{M?SO2@ngrrNXlnR^qbCB3Zzu8a}M{|Ir^U5 z`@jQ4hcdB+w$KCe6A&&{o3ZFhjP8gqa(_SW$TD)BUFvxTU>KJ!qu$+gyI*bZ6%HSw z(ihU`Qd^g!l-5Di|=OiR3+=WC7x}I)7DU zXtP2rMBH_Ux9LctHi&gZpZ7R-%sspmMxyJD9I^E*XGrE3c1wW2#tTnHR4? zZvQiCgfHrdD`><ViVnIS9_>4<13pGijkf?GyeEewInbrOICAFk^($5#pDbciaP zZg!@Sbt@8aj*dr?iF5(h?1;4|L^6`V_!4PxF^Vi2ks&Sv7Ex%+-$gniV6PAjibjYK z&XLBmcVbdCnheOe3`!VLr+>P4I+CH~UCm2`xQZBAlhwmP{DB<}To(4?vFh&w6ZC(X zP|wIR-;hd0u&RjW5@27|Cd1Fyxi-357_oS1CQR$OmbEqNuGVSAlmf5#s1!#5|5HGaC)4FMotHo{7e#_`pur2l_U{J-hQUD-s%zEPTdBQ$kI6(gguBF>1x&!?Ir9WfcUU^&xU&g@Co zGe;3KE1DzBh>322N-rS;B%_1ybEdPXbJuZ{Fk&4?mJ#E4d=8?U4$Z$MbSgbfjM&JN zX6RUotdg!v_!AacBV6R4?tlaaQLS(aBrS0w?4w&1m-g_DcmdeaBt!drB#i2tLimS(KS`c<);^`~(|e`PEK2GXdr_ zwYwt<$aKcRh$adQ71w&p`=Sl;YgWQcRET96v9^z7s@^NZqY>fpiFGhy8Wv?{{r-+1 zmr)oYoTe-H)!?KwLQ&DhOpu}?&xoxYPH4$2b$>*d*KJKSLo$^>KCFmv%9UZHajq~U zt-BRPnM@*nTNF)R7=&{J$XwxG>FQ#{N`FXNvmd`J?2kY-%6-`zC=R_+10&`650bXJ zIvO#)Mjw!9qXif-mzHFtQC!95KGXV!roS9gUrhh$q z4r3Qc*Q#&Gh&y^Nk!VX1Zl}a>o)9B;^Q4(st?zdJSrq#%Z}gQnrbO{kQo+nhPk)k( zn8gHHlDve`)xyj%)VGIC?6qV(`>36X$aqWyC~R zBV7sE-RxdZ`O&e&z*+?(rqPnjoRp?sa>{_c*sF%;o#VE+ez?M@Ci3;3XVlh`+7y*C zS5z@|97X{KPD+LSaagXj^^Oj73x7+hdw_P&!AX@}w|n1~Ug*T%s@SiF(S6b^vg)g##aO+aoAN)5_?9Q{Lk*+CWZuY$worMS;S+r9jRdiJ3U0)>? z%tQw^UO*T7(Iid==q$Cej@}f;r?qxQI;-*9NQZDaMg=-x!i3AQqko4PuZi1a#y&!) zyV(6+tv?Vswa~zfSs=)WP3-$i#ido`B@}YYl9pXUTD-6lEI%oXO0f<`?8~Ce>~2Z1 zX-db3rM-2bI}6-O>LMfNab%gUX$MILMaX@7jy26x16!QUf^#E|M+t&7H|u z+Q{iqZ4Mbz#f(Rre`gP`aDb<{_Dbcl#`H7Nr{qs{%1|MJs(`It23*T(nDIJSUZH3k zaO%+N9}5RFDBM>QZwmPpDUy=5l&MWl>Ux$okIHkq;tEym0)Ly@ z*?rW@3AaakaJsY!-e?Wtvbbu0zg%1xDQB{D@?_+xV^Mh$kicOwA$SM#2ngLBPZKi% z54T-LMgup{Nb1EE#7#`V33?1(k|F9>#)#Sd0?ix&JHUMcJWN^eys!rj_Q!HCK=1)N z+8D7G0uf9XgMS3`zh)MQL;lV3Uo(rsZK9&3nZcjkBI=!$ozm78t0;<&#}kN;i{eW; z1miN|QfyMgOfSMX6GuofgjVXo1AAwY{yitUt2v{sWTg8V+S9S7Xgu11TUOC_mU#@2 zcwunSuZ$7n`vn?`ZAZ@l4Oti)A;P--x6%MW%vHsVdw=AKGjkLhddRI*J0ehkGm)5R zT$Z+W%B!M?H)&wR!X(JdoF!u1wup=rq;NQAzm;L%x@s7)4$2i!OAS|+K?mtJq@Zm5rvW|<$%hDUQJ)9}^9*WM= zMEMPj!KLsjO;Y2pQstixvCUN|}tBp9gJ>WK?Jcjr8CJjB^q6OL=C! zIQ1Txu#)y@EsPkvoLN%27e71sKVsF)#M4lPAAd_nQbHF-tvoK~j)l0eS1Y<0F}qKm znS~{{Qpi0hJ{m1AK0{Q+o*fq*rxW*tD5%{d!prF^q=K1a&EZqE_!QX2*q@7oJNEZ) z#ilXRWf#GXA#xbi?n|MOwF+j|?d+ghS;LC0vV(TtvtLH;#UxhNikVqNV(lVLusN%Z zSAUYW0OdGlX3c;gBQ`;9Dmn{?do?tMKrEvIzy&NEtf!nYf- zHRVlhK39A2M%D|t5p`cwmI0d>>A1^8JBBS0R9zAyQFX!2pzu)d)5VCzee%o%T;rWl z*}2mmpH1PT=NvkPIR~QZLdmw~kXB`Z!0n{8bmhS~gcvjdnP1$S4 zKU$fFXHG1Yd(-gJ3GO7jWoI7!HS+?0k|CgVG-9$_5i#$4aecM4CQV^-^f0w%;(wkQ zfADGw`8RfE9C^-6NlR=;kA@|tcN8^Z{F{-Mh^U^SJil8yI+8R;t6;?HT9Og7G0IVkJ_Hw}+fDStvqd?O9?mybV#+F~*4acnk+hn+ zI(Vv`O2tn9hWSn|NmGa2|S+hENK>r+jj3bB| zUZO0U7d^%Cf$G=sLzLC|Zk3MoJWTp`)!4i6M?HBTd(_d*>PRNOiF_0D@^*bXennmD zHqlD7TPbdjWN-##UVi}Lj}ThFwG&2;CNJV3(Uxe5-teGOFQ*#f-$uGp7x@91b+V+$&Qk9nVwD9O2yjB#{9Rf3P#%f6Itiyq$dY(P`ZB$U_>ua;ueTXD!$KQ$#&K zG3H`jfv%V+sQ5|v1%56nVOy9ygQ}_L9x}aV;c%>YxJlG6na8E$0X6YN&EcSjBA&96nJKqCDD7GxM-Q zZfQh0m#oopLGJmi6cx*xxQydwYh!qwf6XG1U z93zGYBu6A}LXykHVx)mSmJWmR=&WF*sT^W5A<88^FtR*2kvtQ!G;Y3;0p`KSn~>&# zsvEIA!H}B}>lD!{urK-6@#Hy zjZ6UzRex$il83};W}XvlrI`jg(2hpdF%ON<$b6z0w~_I{pmIh;0f^0n90nXSVspm% zGSWB=J!M2vN0%9E`+${94XMsHLuMzm7!#r#uox4fbp4KzWx)kNF*6!m+zTUZ^g*DQ zkjG#NCM5aM1dNO^ujJlHJ5gS4q?K-2w~?XYRe$;#F&Gu)nh>NbJ&i0ll?p}^;&g?U z5xr2=WI_&VY)pvpm7y3JRl3T;ge0y?Fw;cJvNy9}#oAj;2y!y1O^DLD$3~{Glk025 zP?eNdBV)nMo-{He^QGj<@y|LAb{ALq7XX!G0?&+FY|%|VZl^7}z>l_AZj{V&vScJW^G& zr;$rVkPjNuS)M<2t+VZ$XwpjDcCt)T7=aG$q;(D1hE`Jod0wJ{s8h7Q#*!&YpMTKw zaX`_>6~9Cdr7q57Rd%L4n=d{a^A=i4W>^zRz8md21CJrr-ulaAG?h*yqvxWxBXCSb ziHsGgqE=6BB5MM0JoXer&G^Qi-Th3hjFt1V;4!NnbiOvVMbnY9iS~3d5wCvA9$!;~ zAIejkANhH-y@isrM2(ock2F(G^M9AaIynVDZ{8Ggqo$(x_&l_4=Vzm56;=d4W zD!$ylI>E^s5mIPJ@m`nJAQyIGhBPOVG*@IRts_KOWomCcC+haYM;OIIQ8#(!TPCLd zSJ5uZSy4nwi0k#3=)$X51+YI=mVr9Qm2W8cGf?Z4cD}vEqSeLv+^?T#?tge|+Lsm> z-H_y7%nwo-)*fJlS;o{-%V5DZQjhs^53+Q3aVU#ROjp;}-eTv59)u>j};IQ=B zfX;OiHGQH|=>6**wBy_mR)5Rram1o5sVryo0H7Th_RH@9F(7GftgRzKURh%_s-1FC z5A#je**lSBs|*&BnV|qE4Y&4(gUA2z&;KdW%YOF+gufyQx;UdaKZ)rfk>efUxxS@5 zyQH!s^3%$nH8Y}P_luEO`}KBbj)@#g4Vp|ixrhz~P z>1L`rU0scoc6xm!8eBY@ayd;;L?f%b(Np>N-a`OUQC;@lF#hRQjQh;*breG)$W<{i zu1=Js)!FsVsMjTC2)>qQxX`RlY2Q+EFH)mhTcgP{iS!*;Lx0g?_)UUBR;HyEd-l}9 zeqnFishsQEDdb+ON~v9)7AS4?fo{OKShfM;l^0|8qD=`d+>i_+Za%Mng@dP9R{0Z@ zKZ|yQXuLVmCXONhLp=Sj%~WIh+y8d^_80%-SGWJ6HT|!MuU=0h2krN%e>#tNNwkHY zI;9_@uSJvc&407f@i@*g2(yO1n?6j%{u2G|uYUc{|DE2Z$$#F^KJlRspuFtrXocu8 zdg7#Z7FLx{Kl$_%J}cRy1Dbg1@u#1hN?L#9Uvo(EPk8b%M}A9NtNaZiS>#8G`7u1+ zM&ElUE{U#<5hrefh9nJX17mpTql)2-S%C~((wauczXK|UGLdo5bQxVA3joye02-C!< ze1!q-EPrS8uB@r?KEL>MhxJE($Tt<#c7I8aYOGSkaSn>-tyO-CriHEzl$K8hG-++K z{)m8$I>;9C&x=pH^`umT1311p6Ig!yr4mN94!~woZRuZFD*L89-+zj~aETQ|ca8pr(8(iZb6u z;#umB9))M3w{aJFDS|s?giNm||2OV;>0dfUP4PzX2A=iMe z(7bzVvBc8uV(~?ugAS$RS@=<;qlNH`JbzFuTw?%rMv(tAPXU=++FdF?&Z_YxhTX-E zT?7`M#VPvPWJKC<69dor%EDljGUDpax&ri_3-l2LLMg zqbPX3H1H0a^QWJbMphxR@{)~NYydcKdS`HsyD)>g_aVYR4hF$i9<0KQK|r_z`G0A@ z7VaB7@k9l*`JRunbSQQWPm%l&91`rm~a8DFi!b z)#x;yDdfkB_X)WVCYnfcqf3Qo(n06YadMrE0z@3i|5+JE_z$aVBJrs$bSJks7QyZCcum;nfN6fy(Qy0TVW zeWEsJC4H$jm(}13qbwE=*VV=$9nlZ-<$*DY*l(PMRx-8f3=g@2C_Rc|!}7KoxERnj zqt)_}h#0~hT2AH&@YuvDmz;xQMViyPqLBj=C(y)-f&#<-5vXVAE3QI{p54Y zajy?|)WfmT+5>zFII_}Ok0^cW407470zOcf^1^XXr*1>nZ~zRDWFtu(aGogZAm*^` zew=so(GiDxx^6!nuzwepen!zbF8tsRD4%`1-#OE1WH^q@(Q)JLOZ$G7a(JhaD$*_T z6qqdB2g>R0cPo_x-DnSiXG7WjxB9S?!P(b|#%9+k3l~R10`{-`gaVA%idJ9hGZU^C zkf}bjZ*LBJ*q>yH7d`fq1qj7+YH$vPFXU;w+9_uMqF9mTihtmzam3r(IC0$65#%2Z z1`9_ckO)v!inDIye>fm!O~@_6PUARoy(PP9rHbQQrQsg_oZqLiFIXmiZu^?+C51zY zAb#opH&qQ&Nk*jWB$+tFa@muHIz~he2c&A3Nq-e|y%^P)p&%t~;bO*H(MU(4Jw;wb zBhr+`zAr!rk$-#Ng~-;I*5`;Eo%)Yo{U3YQ!W67kn?ofowA9Wr zCyrI#EE#bp#FvhGu{ZN}exhy0-eAwH{gmQsc8;_GcOoe(VgWjshZY^b+i|4jF+;^? z=6XZFs(;-Ad^gJ4e!4eU?KBsE$``;(C#dBX^Y5U-#5-6BEV32)0lnexoKT~E`U%1o z*0%%;{!P@Pn`vkkYp3ZcO6C9;O)`;;rP6fKc_|u6-i)-%2pdjF)VpRU!bOR8v0#l> zAy4?baHXN~lIW~7vkn4zB&$h;T*ML|X#tXV^?y!eqsa7NU-i8=BHc(>+0)fXT-mLI zPgx*|uu{>e6~VI9jQlaH!&jYKXZVCO-JMgz(F|~_QERI7!PPrfNG#jx_8UQ-1J5JY z96?coXbO5F^#BLNM65GVpsc^LKK31VQdQ}?&ktY;?o+kc6Uy$`wnw{B(k;(G^#saO zIe#5d9E2F{Rr8|MSkLN}PW-izfl-n7MfKeF-gyFFz)x@Cj;@dQ4{Etk*Co-`pVlRp z##xUX_Qwr#asGQX`4atu8CPC>!c$V7U4;HGKGBR_c}nywE*w~Vbx?0=FfvTXSNVoY zO{~d;A*ZZ3^hzCN@JHbmog!CyzYThU@_*cJd3L8fFe;21Ar)R7_kvcG!a)mw+uyfm zAHrS7bw7?uz%h{w2zdU*wOO^*Z$Elonm8=v#=+vQ7Pet%dn*h2NDBK+9Evt2q5>hZ zkgL*U73WyE|AF(|JT3>30kX5mCIpi!6}5nC;ZRiVrdGg5vdz*cO=56>It{$7X0R%k*Mx(>0Yzhv-8!4BeaLm-9kZ`S}X-J72cX5@|F3Ua73ptt- zNN)z^hW&U3p+(9Z#ps?8)x0^-5{RlYso(wxBungE+U`YeHq9{2`vX%LF)TXEo*k#Z zkyXTWd3ZqbFY$j8b?xDOHJ-O0jeio2i3|54YQOG0HL*u3W}oXYI;t{`@$VwB2<<$Y zv-kRna}>mewum#J?P_91)cl^8NTx5n=*HYrlZS=9wbCTb5TrtZozz|!BcfU1D@La6 zkwd08q4|u=tECaV%U&K7X+CuXLY4B=<6_Ug+6UkgC00uWI{Wd$7BbVERDWPvEQW;C zl9;Y)WdWsG>cI}p*n@S1b>t1VdxzD;!{Yn{YWv|aFAC+kvBI9n!8=1JK3$fale6?b zTOOE{Gjmdj3bNYra}HhjqirP5e?c3puJgix`r>D(D-!uMC>p{o3~z|M5{Sg9+1bBl zrtnwHA<_O-Y2$^O6tSAq>VLma7jnqsFXVTr%rBqOpNPt)k*&zBMWrgry+oVq@fa5R z!u|+K0%*mf1!^2yi#ir%EZI*7N}Jmb=iol-`qsf}#dA}lZTa~VBHEqb#Xpg)CG;>^ zNv`2wWG|#m7N5KU%_J?PZ?JxjQ;sESeh0Ua?27eDqWt-LvAETgjDHZqu*e8K>vs1C z+VTKY0LNm_#A>XacE3|4z4Ki?EFDkK$k(Z=#f9DS@{#Jv7auOjP9A=yK_bI@x^IsG z@PqtVc<$6`%vz{ZVnwUPus%EwHh)9mx?ddVE%vTq1;fgNSq=A(B!e1qaH80~UF>}$ni!AYA}{L^QE;uM7FZ;(BlC-GNBMkz*YF(R}p2XsxBJtu5JVeS{zvPFD8LVsT^0 zel%HnugggEf2!ORf@^jrW8Yu0k29hsFTA#AR?EOmdVh%^-3O7*+x@h8?c}khsOkIg za>$sYNYv{`?iX$K3vaL$!;QA@KQ29eMtgqmTb%ktUBA`?6eE9G4{e$Vwz>IgIIpO| z9EKbPTJoX+%ts;G?a+k5Neb&8_m%oHQb(5gf^~rwvC6ItlzPYMc)2%)Iwv|Lj3ZS| zn8P}sbFTqqNxGhI4wV<@ z=-`1g#ECcPIJhqy;G_|_*o&1DkxoRAC7NT*|IwaZ`V*bS9*P2a#f?c%(#%VdHFsA5 z1SLITe7}qiu(zgQILap-=ux<-T%#hTm(1ipHnnn z3i~_KOQ53{_PFS3qL3di-G8jcwlS{|Ag6-K@$LV2=C+>`;7REN5`!t&iT^CGBR!iK zqksP|bywOO*KuXP3($XP2$+G5i7hEgkW3~v;7Ib4*p6W(HfDl+pry9Vm|_cDY-Qz@aDJO8X1{s4E$k(sy)vM*! zUCuo>Y5|%L&0eV(HD`#V$#x!^FHb*nOMhYWhL%W7%O7QdjA?0a3L-;rz6K$(y*UF% zG^>BlM45`Nqs?IpqpDDZ->`IU!c6ZGfLmg>fNf71LQ&_-+B|wvx<>JrjE>;n%I5vp zzHQ7qO365ybm~Ia7vO?KRvDCm%JPHiLKGq>xp)^21-V~orjB4bqFk;F1|WiW^M4v9 z0ul*(S^~3zfaF$`ThK>Mx7RGieCS&cD1mUWH1)VT^Ds_G+$f#94Iyut3d0I`E3ZCE zDOf^icTB`3j?dAo@TfN74O<(5lR|2h6hZ`h|Bx(f{xMd4TfuSEQ(l@S>kah!rNI&+ zP|=*DaCek@z5|h8H9v)4#DKNEHGf;`iL=|LSLlH^e=N?c*dVE5ZPr?|dWiQ0rdbA` zn}75C#OK06gWi5h#Q_{k$Ofvcf)%kZQbfIr!g85r6r-^?_Hw!Kv~=}r;!(yf(B-!V zY|3=xBsou!{MJSRNOA|@QPz8tjax}HM=IemcF0#|^9V(g-qiA$;ukBLg?}jobsn1m zgRs5Xhn?!mSPcDFl1gZPzha$m#Y^68h>;5s&hAz{CFf-Qu)CUf_|(c_oL&z)@-HA zmqTHhv!!#rNne!qZysB3hQ;|k4OA~$F3ePA%bd0rZxC=GW+;^1k@;0iN5`3_3@P*4 zVSaTRJN|iBW-|WRk))xSSXFoLWoqBX0f)oOMAv}AjEV#peXq)+jcr?1gz#u$oLx5 zn$;6g5xsYjBo@;YbHPt$GsldA1%GvJn!&;HCi3B;N_2W2>7R>6IuklV4<9~y;E=-V z;86fd1+l@(${a{rkDbnbmHFqEQ>XtegRop>aG93R0#NfC=~aX)m)A;jw~~RY?h;I{ zg9q!~)^+^UF=N~K8e+o`Hx0U5=iU9)&;Iq0F=ju!m&}ir&Vt#*IJRrd-G4R+$Vw4! zc1*uOK7IW2PWV0FZ9Vx}S7#*W}srv~+;# zDvs|H?zRlD@)<~+3_PlFsLnKq%tm@~98DnEGL}%!P@b`u^$8p{*g#ugonrP;!2Yi3sDHub1+@uuqiO{u#$Kd{3RO%g17HTy z%u+U6=+sb!Ih0_dP(N&@^?2Cz1ku*mY~d(zcbNgHZeUR9uYa1DWalqjM=o3B0w7k! zu)CIX$3(d(Df|)C2i9teWaaip|IdD^LKs%STu1*e>eQJxcRTra*J2uKWz^{@d-v2H zDWxg7z5x&Ya|>_$11UBj`+9bvGy{)ps1qGH@TUD|S`i!tS1NP zGxwd&Y|0S)LlX3V_^hi7yy*M)p9I}b_b0ESn9lwaEuXaHesW-c%9#t3Tp_~Xti zbgo*(3Ue3Iday^*XuPzH9DBra`1s$!HbT7u(2SBBM3ZOD{;2Un=J3&-*WP+B^UfQ% zocj{QD}SG2+JBTe)|G8*Yw2*jj`+J9Nfz&CzqD43_OA9!(9yS^=x+V|lU%OL$%D6! z7*#7-O2Ad00T;>%@G}^7WJhP_CDdxkbmlUry1|ut3glX-ml3hcf9NW&uRfF^BSYP~ zIrY_*CN^xf0bH^08Pb7a(<+7*1AYp(6+UL>|qRP@Zm4s6(8C26%l})HN zWMd>&oQ+{33s{KqdKbOcRpTLbq|x)6+PM7;c{p>d$Y#BY8Nq6Qf9b|*O_5EVl)^5< z8xyJV0j%$vQm(yCgCpc(P&GVe0*^Ce)H2%fSnLiM%>$D%Ock~M9vfVpRBX}O3hT4CAol90|{h&u!Y_u3assNv{t#H{)7S^P{K~@0Rnv!X%+rFxRyWQU=zq z0hxhNsEp5OR-iwj%oj|UjSXk@88?H!g%7veE5=*{4}qIac9D-Zt4Qpq=teS-ujH93 zNI#5q4_vFxl|2A-e6&Zz)`ZLVRDVyw^>G%^yx}xtVgYGsLza;4Cd_g_T{i34bsNEI z{#-S`<^{GI&@JTS!>OU`6*+`LDe(ex79RI;y%fna0UE6JZjqttHk_ri#- zJX@zah6ys~g>#gcU2JpVv*z&(_p&mYVFEW4FtM61@^5JOsbgtdF5o(glYayz@`kKW zzgeTsjFdST=4=9Z>e>*YTObd(dl_a8a_I3U4ZDd>gmgopK-#5erQ$5P0M_m@<$iIj zmgs9>iSSizSW1iYN$(@TDAHQMBgjdFz30MdMW7*Osokm$4!B6nJ*b6|_R4tx0W;{C zl50^Jiet&7otpL@20jnAc>^(bIzD}|c-FEm0#v|=^xp+01JI6&l z#IR8lCMormxpie8Dy^%U!-{m%gg!HI_X!dv9@w~r-|*fn`6c0wr9TEf!^H(=N?SkUP!DGZl_^-yO&H=E9Udr|)w zuDO|&>eV?;o~c3lNPpa0)OoKaw+rbG+rWtlj&+`uPp6RWT3Q>!NeW2<{SDV~N>I13 zC%7XFJ;L99{z5`79bh_H^c}tsh+fl!sCGb__N%?&Us~@fDQ7NA?HHFC&+X1+38#`{ z#zuiY8BG@NL~S7BU~t++K%AiEBHr`$f)`vmaKuxI*Af6&t=aP;{b1~v1vV5(9a&e0jgxMZ_0@$vx%6lk7^VfCap~x?eFu{V^T{{M)3+SSB za|Uj46r?08^-8(~gw`&KJGk%71HjHr?*!4x18Su}4v7(BWES{JEhW?AYlY3MD4Ck9 zyIKQDI}fXo7&c>(NLstURQC# zSSbSOf`CZ!Y}}p7c4+&9Icld^fjch#wYAc~s9Vs8HX<&i(tQ@*aMk;)gx=mgIDmGB z>?j!5*M9(gk-p2lqs4yZAx@>r>`h3D@|_Kw82B>?r&RstI9p*Yj4kW9=;eM{;(k(xXrAhD!j$htARp4Teu5&saVhYC|S=(Y6D1l(2W-vxn?UPDRIwjz?O~ zHUo#K)|W0M0TzFoLwU@U9K-=LQ$LV95@xUYO=nBJVGGi2v<5E?O36a}@$hl_!9YIU z(l?sm;CQe>Y=!yqoHmwXHo_X9^jrk|A>n}{vAY|rKt(uGi`vy1^`+Rjs-Xzw1}kBU@4iZZFA&TSWVs4 zX0opHm4no`@TV;cUpx_YX%4u9xyYCB_r<6#;whl-d)N(G!5NcQK9YDHZFg{)*3 zus72bmNSiGMFrV$m(V2v z8-FBY1L0SkvQ=m~8vdTxGxYKt$ z*n$5nh@}Vn!$DhFUx}KLfP&AW8+SaWP{Vrsgz_1GijkFoGw+U)VA5O6YlN)6uW=|G zh|++9BI3@!VxY$cwjWs=ipF?13-)xShZX5cH%5`}4UCpxk2I#P%|H;;^By^;9Dgt$ z_5?3)Sfvg|LH|aG93x-c?2;EqA=?l+DvWJNGi$%X0;xPkx|~H7m!E=jJ`9Lq7@0Z; zNJm;F-ubM|fZovxV5rlLT##;f!IxU@yt z)4K96VK9z?qv;j2Zhitb0eme>3$8w7MZxqK_}i_dv;puo?07p3sz&kxW591kL?QjU;W3T{V+n2q>}a>SyhT+r#s%9p4v_J39vFFBWu z9ghJ1lzIwAV+baV8?xrd^y~{ z)0m_UeMBb=DBSbIyL5*0VTL4Bp6wzOgbVtP(2f!iqP0qg7tJzGC@;o^>tuPj@*Uhr z;vKYau=m03>F{iXFjh67D}U;NO|!Xt-8eBQut9zig}=<5o|eZPs7}rUF(Ug|-^Y4u z8ayHm9>>vQ8}i`qM?YZf0B{hCW9Y5>pQqDsxDC&M)5p^BhXrZa5tGL*2|&It8Vms@ z9n!WfU2&2OB&`F!uxHIq!b=f~n=0Kq(YWaWD(O!lw~8{I1=N3_fd~#y7|KFZDuu_VX@(^=L0)J`TzTEC`^oSY47{}Tcg;~& zzPkXxyi?R0koEMMTGdiV%(mgs+7w9^#u18*QnQr8aetkKLSsWl4uaQkEC>;R_72TB z@m&MC43!FG0b-ZwC0*5Err+yHUHSkLi=Dd?HSt4PR)r|C^E?c5S-UUGHBebC#Fdzg- zsa4wNPY7odG6EWky^yuKYuZ%h_AS8O^=%ix_CsX(XJ`q#q;zw_MRTK5&|Ii=jcPID zN*2}D#(#$JfsV)--Wk)jyfpXSU65D4RT;r(*nzK*Xmx459;KywcRIj!jdDe*=iA0o zs8>}kk0=M}NdYWo;}TY6b#4ZOt2qM1$a38DJuPFm4+2r^!$#x~H1Y*04A4t0zT_ON z*Ln~m^VrI;F|mPYt$170>ZFGa*!IoW;<`xYGk>}pbcj5is3>TQO=*47wIhd1ofUbZ zlMUFey@R*{4nn=8g$&IWzs!J|kZJV7kCeZ;=bV#PKZQFThEcoKAW@K%gvr4#6Mh z5`P7sJB>iB7;6`-k38QjT<$bF8;!q$+S!aa{8HK41Q8v6Nfs_+2=R+J!to1HO@&n+ zD|Sq#h%Cm?1=58UV`Y%R3CIxcA_2Worvr-c3|*a7P#ikAfOl~(?heJhEbi`JTo#9e z7YY>V;tqu(OL17-br&mEq!d`R1zOzQic5Pr_vPL>dB|iYUy{k>pG+pdQ7k)g=yYa7 zuM!RLoDok*M@-{|dsFYHYp{6Xx?OuoZs$u%&5qB_zY6Xp5m9hIi0hU7e%H!ZdDL*r zHvvo7W54Is9qfhZKEvh*oVf5RSzoB6Ut!04yu{lS(;E6#?<{wV_LTzzsD$D)MUPWC zRO!ktzcG`y(pRSYONMZSM|mLt9dL$CL8##5YRyQM3#fuIn_Y6yhs=2M=kQalN5-u5 zP|JY30-;#wT|?VUkYAb_8!m50d#30?X!Pd#yZOalQ6_1>tMJufiVK**9N`f_F^y`f ziU3!l4(qb@_ukjHq&9XSebL<}OqNBLg=ElHY2ll{QfMrnRmg^MHDQ~0H=pv<*wPX; zXAKjvdIYhI`_2#E#0sE&~WW`|xF!=7r;xrieG$j>}#A z+Apa7-aWmqc!j)8HUND?bXpy0W1I#myzGue6 z4&Oif434Q)tKH!YCE?}r4Y_@<_myh0@rHidreP~Br#dE}ZU+;)Uce6El1;fp8+M4RtKFqU&}m`hSsO#oS_ z1YfavlqQb#loJa4(SE8b4=y+G$|+t^8KHa$*NKs*)9Fzbwtp?+>l&3i#tn8TShD=+ z=LZ&-G7?eD0ZqyMarK%4!)JeYcN37*3jb0?5UUZ}LV9UL&E5s!%NR}b|MOJI$1K&Q zF|1}^^IhB_d;pEH%B5CGBT@P8#(i*(W{v-~t`_lla62%BPHtoR)H6U`J^aChNrXm| z%WePR&3rcDwFBT2RLC6u&=!AlcsbFXrykIxc66EH@IJpt{|kZG(dthC{(X?G`e>_v zY*yPc14LW_gfA6G9o-xjTY8tnnULuBy?-?<#Kg$^V|wzus9sN%zf~6{fvW^-*h@m4 z;iKO%+2KFJqvfWEer)6g=J^DjwnbPH7@Z|SRQXUItFE64QD*ihlUNhMb9;uh=AwZ# zhA3}IW7u{1lxR}5rXK(!4W0EO!mFi45fs;rTNx;douTmQ4|mV;PeI6wg?U$8nR*1SxHEx#;L4(3?8{J>0Z_ zQYFP0B%5%s#IMIi`}ppHunmkuxD64hSK@c&G)P-G`W@Ckz0RsD?RZN6kWeJ{$EgU@ zEx!d?~9*@JFy#NC^%xvPHP(!dt2e|Z;*807LWy)>fu9=hbD&I+Me0%;Z@-8{p|%7 z9Kb`Am`%owF#Vhu37^Kq^KtbatFn+o;A>+txlpmw_7JAp8p#b5)!Z5Nzd8+~MDy+J z--+DXh@&wYlZC{SCY7DuYrcRbyra82KK($KOoTB|KrH0kWL50_6f#uozXJ}i$DXHM zhI3^=YxMC#ZSt@h9c_aq0udbo{|IREGuYZ+3|4H!y)Gu4_vsNC!%xV2VSg%_cj)=S z&Mu(QhgJScbuncl`ooD%b`Tc>cA^8!d&~+=`Rnh^0S-v1=~)_i43QTFhj<38dQQv` z`|{;!uBS$0(d8D82#TLIV1hIz2}SXH>^7DUI)LCUx}FYz)HnTim`5?~JE;kJWRj(1 z;KQo;;>yoV>5z>tM^#G{izI@fki@*yyt_)0_o3-z8%LCJC*#xC>2=48?y9rY|7gVP z&{VX#X;(qYsy2f9w1!O>bqe^5oG7qJ0hB&5gurGIUia!e7KF~^w!!MFDiY9D(MkS+ zUy9QK%`gyqf%RZ9omV+d-T21qEwy8Ny3`>+x*M1a!zbni3 z&A)X!1Yd7g7B}}JyGiSjl^BPEY9uS5%;t%}MGU52g9tw9?4c%WvlDeI^vcGMKdl%L z{%y{ZFt+Y@+QN>Au9JVOw%QG_AotyuBZ@kkK~BDytmI~A)l5C5mksyhO9(DR zHtlM!?@rM(yo}u&w+1Y1@JNVEG?+e+Ht_yCnw}#uh?!9!kES9glxj;P%YHnU-rGPMJX4n-vgtsrM4YyK6xGOE+8pE2P&=I{KUDqAn~+dH%;p-Ek8y=&tNN?JI?eea%-XAuddOpFRb) z%jihsNL>weTUL z0fXdg_0r{;Jv!H93E`zjq;7a$KY)XqDOqEjCiqV+wXrd!zqcJD200>$HnJtW9(Fk* zcaD9YM%>6(hB4PCpd6V{oiTyI)BH#qyDnJqLPp##Eb1`yGr!=av*$9DE;d=+2$1{b ztj(I$gV*ngi?8SsP}6Iv_wzFZ<3lX6#hDRQbZe6{GuI)P;q3|fCVDx8VYw>W&2Y=P z*33K-8LngM81c8Gwl*U(j}41(^13?V&#bRi;Z)Vx(~9(@tKII+knBF{U$oKhuZc9R z){*_jyWx_uI8k+)(WdPAVJ{jE@bSa!3UVF5)X~-YW~8xvE%hdB@cBN-ia&b?5mb!n zpeI^&lq;P{GurXo**GgW{oF@s5JnD*Zm={g;Ky$?bIY?1=Jq{dJ`wwyDPfyGJ$_7{ zq~>c#i>qLVAQ5|kluhKX5T)GHI8PXt8PUIeq*#Um>3bv+(bn+$V1{2``l%u{?(xEz z6y?H7HNUiTniK9rWELU#+}mG{R6FW9!d)h4pQ^ckz2C@S<#B|Jx5h-ujn9zda9LuD zW8^G|x!k5*^9T~3;$HumLoR55V=aDuaQ@ZIo&r}D5B$I^9EdTkNE@Vo{3tOtP$-sU zAM;0zFQB?*Tgy+yKw!KjqU$ zTglwLy%|kkOu5cFskf4mx_0D?RnYGWd2?BFbne+%=KpkQ6-6e|7-69^l#&c0P0>Cx z==Bu;^G?%Zi$uodu7vkSd6%!@c6fIg@=bbo`r7RFy*y$?@u@bzH{S=v-R)!A#+6r} z?^lK&B!Aeb6r^q-S;vKIK73J0?yRVfxbCZgBp=qB97D;?jvhOUQv-K6Y^19@X0(!v z>#;wl7cxd_Dh60zc~CmDM+GLd679Xy2t#! z#M zUq%)m3I)b(2_|>Ue0oppb{EI8#&Fm~;^YIIMS^e{(LXbW2;wOmU1#{hW*>8FZwffw zk#MMmM6<~SK4G4`H^7c0b>iicEAVd=4_Cf1){f_q5It?0w9pmp*FUk0ED9u&j<+3d z)EY<#Qb~H!^A=)KUVm-ymOH%1-SNO=mywLD6PAFSy+Um+V0Tu3eVLmhYAqX!o=IQ4{R2W*Zu`?H+|Jz6h)pF1W67L&P?KEm4UM}vgK|6_Km7A#4)3&p z>|Ik=ch${v$Z|+1{3I1P0T&O8X}_R-r@SDGy_pG`#2W_D2`slazk`+LrHU4gjnh|J z3jO}TO{ixv=en!FH<>^b0!Q7i$zWtV2&-FcUJYFdPL?p4WPE|v-LJB`b+=< z_(nj?HFkFW+5Tfiai`DFy1z5Vy88_r!f4ijOe@C2B%gING)@F7i6wagD&{a}z*Nc> zrLtm~N7`mX@<0Z41AXnizH0y=9PlMBT5?T$=grT4&nG_|{w#T^)i}2~6x&A()xHvc zF@T}8LbDf1TVO`6w|)dhKz!r(SOqH`qq9`g?x!zi z@rdt6h6HP~i|`+tym9k8KXrJ5$y9LtH~XLr&fBb- zvF2`qrm*{+Cl>IOF+6qQ(xaHwepiFSfLU=8k05in($(rQ6c$DexIO5}cHCZ*Q|**A zr|gY4*j6IPDIK1F(q1@Eqi38jGa}0nu&^0;W zB(z!yC(S<)W7#O%%ZWfpvW zWTuVsM+?5RTq)t{a3-w5nO9yiy`ug?-TW781WB*U=ozVrNW;j>jDjTOC>F(zV0{wx zFDEteQCk6tG5goX%v@|5sLtiJePZY$XRIEdDluGkEQbW(b{Oc0G!vKA=Kxr1NC?9O zsfp#%8RuGdsbO}a6uL`M@Q9+ z15p`L-nPtVk?^|Z^{T~poZa8=gik>t-H?O^9bIH@W%0~aJz9})S_C%gQYM@9cxD(l zV@;=S#Rgd?c~w)uk*b>LcXxe%4t{J83A_)1V3(l%HJ($%I5B!MY;F6X`F&W)-G zmd99mW$|*!k1u!x=AJZ@J++*A6zw1i3st$HVw!LJ%<%hd%giF zMp`6+52_l?i0ohOd-Q(~17WNV{Em*^Oyl%r3M!xrGyvW~BXxniG$ki3k~z8nz`+v= zfD-Wki!O9b7syRBQx*62I~D+73IhBGV1N?oJp=W7_z&!u0KgsVe*rG2$-h9qB-7n6 z4ge6N{a+v!n*T2V@|hv$e_mX%_`g6Tbn_XYH7;d;L-0ImPi}f~ zE*W%37f1-r)CW=nIiQXDKt`INfmg--Pyj%C4h2B^|91x{fgb7uZM4%M; diff --git a/TheOtherRoles/Buttons/Buttons.cs b/TheOtherRoles/Buttons/Buttons.cs index a1c05e85..2757c253 100644 --- a/TheOtherRoles/Buttons/Buttons.cs +++ b/TheOtherRoles/Buttons/Buttons.cs @@ -257,10 +257,21 @@ public static void resetTimeMasterButton() SoundEffectsManager.stop("timemasterShield"); } + public static PlayerControl SetTarget(IEnumerable untarget = null, bool onlyCrewmates = false, + bool targetInVents = false, float distances = 0f, PlayerControl targetingPlayer = null) + { + return PlayerControlFixedUpdatePatch.SetTarget(onlyCrewmates, targetInVents, untarget, KillDistances: distances, targetingPlayer: targetingPlayer); + } + + public static void SetPlayerOutline(PlayerControl target, Color color) + { + PlayerControlFixedUpdatePatch.SetPlayerOutline(target, color); + } + private static void addReplacementHandcuffedButton(CustomButton button, Vector3? positionOffset = null, Func couldUse = null) { - var positionOffsetValue = - positionOffset ?? button.PositionOffset; // For non custom buttons, we can set these manually. + // For non custom buttons, we can set these manually. + var positionOffsetValue = positionOffset ?? button.PositionOffset; positionOffsetValue.z = -0.1f; couldUse ??= button.CouldUse; var replacementHandcuffedButton = new CustomButton(() => { }, () => { return true; }, couldUse, () => { }, @@ -626,6 +637,9 @@ public static void createButtonsPostfix(HudManager __instance) }, () => { + Sheriff.currentTarget = SetTarget(); + SetPlayerOutline(Sheriff.currentTarget, Sheriff.color); + showTargetNameOnButton(Sheriff.currentTarget, sheriffKillButton, GetString("killButtonText")); return Sheriff.currentTarget && CachedPlayer.LocalPlayer.PlayerControl.CanMove; }, @@ -658,6 +672,9 @@ public static void createButtonsPostfix(HudManager __instance) }, () => { + Sheriff.currentTarget = SetTarget(); + SetPlayerOutline(Sheriff.currentTarget, Sheriff.color); + showTargetNameOnButton(Sheriff.currentTarget, deputyHandcuffButton, GetString("HandcuffText")); if (deputyButtonHandcuffsText != null) deputyButtonHandcuffsText.text = $"{Sheriff.remainingHandcuffs}"; return Sheriff.remainingHandcuffs > 0 && Sheriff.currentTarget && CachedPlayer.LocalPlayer.PlayerControl.CanMove; @@ -772,7 +789,12 @@ public static void createButtonsPostfix(HudManager __instance) }, () => { - showTargetNameOnButton(Medic.currentTarget, medicShieldButton, GetString("ShieldText")); + Medic.currentTarget = SetTarget(); + if (!Medic.usedShield) + { + SetPlayerOutline(Medic.currentTarget, Medic.shieldedColor); + showTargetNameOnButton(Medic.currentTarget, medicShieldButton, GetString("ShieldText")); + } return !Medic.usedShield && Medic.currentTarget && CachedPlayer.LocalPlayer.PlayerControl.CanMove; }, () => @@ -801,6 +823,7 @@ public static void createButtonsPostfix(HudManager __instance) }, () => { + Doomsayer.currentTarget = SetTarget(); showTargetNameOnButton(Doomsayer.currentTarget, doomsayerButton, GetString("doomsayerText")); return CachedPlayer.LocalPlayer.PlayerControl.CanMove && Doomsayer.currentTarget != null; }, @@ -831,7 +854,7 @@ public static void createButtonsPostfix(HudManager __instance) akujoHonmeiButton = new CustomButton( () => { - if (checkAndDoVetKill(Doomsayer.currentTarget)) return; + if (checkAndDoVetKill(Akujo.currentTarget)) return; var writer = AmongUsClient.Instance.StartRpcImmediately(CachedPlayer.LocalPlayer.PlayerControl.NetId, (byte)CustomRPC.AkujoSetHonmei, SendOption.Reliable, -1); writer.Write(Akujo.akujo.PlayerId); @@ -871,7 +894,7 @@ public static void createButtonsPostfix(HudManager __instance) akujoBackupButton = new CustomButton( () => { - if (checkAndDoVetKill(Doomsayer.currentTarget)) return; + if (checkAndDoVetKill(Akujo.currentTarget)) return; var writer = AmongUsClient.Instance.StartRpcImmediately(CachedPlayer.LocalPlayer.PlayerControl.NetId, (byte)CustomRPC.AkujoSetKeep, SendOption.Reliable, -1); @@ -951,7 +974,12 @@ public static void createButtonsPostfix(HudManager __instance) }, () => { - showTargetNameOnButton(Shifter.currentTarget, shifterShiftButton, GetString("ShiftText")); + Shifter.currentTarget = SetTarget(); + if (Shifter.futureShift == null) + { + SetPlayerOutline(Shifter.currentTarget, Color.yellow); + showTargetNameOnButton(Shifter.currentTarget, shifterShiftButton, GetString("ShiftText")); + } return Shifter.currentTarget && Shifter.futureShift == null && CachedPlayer.LocalPlayer.PlayerControl.CanMove; }, @@ -1125,6 +1153,9 @@ public static void createButtonsPostfix(HudManager __instance) }, () => { + Morphling.currentTarget = SetTarget(); + SetPlayerOutline(Morphling.currentTarget, Morphling.color); + if (Morphling.sampledTarget == null) showTargetNameOnButton(Morphling.currentTarget, morphlingButton, GetString("SampleText")); return (Morphling.currentTarget || Morphling.sampledTarget) && !isActiveCamoComms && CachedPlayer.LocalPlayer.PlayerControl.CanMove && !MushroomSabotageActive; @@ -1386,7 +1417,13 @@ public static void createButtonsPostfix(HudManager __instance) }, () => { - if (!Tracker.usedTracker) showTargetNameOnButton(Tracker.currentTarget, trackerTrackPlayerButton, GetString("TrackerText")); + Tracker.currentTarget = SetTarget(); + if (!Tracker.usedTracker) + { + SetPlayerOutline(Tracker.currentTarget, Tracker.color); + showTargetNameOnButton(Tracker.currentTarget, trackerTrackPlayerButton, GetString("TrackerText")); + } + return CachedPlayer.LocalPlayer.PlayerControl.CanMove && Tracker.currentTarget != null && !Tracker.usedTracker; }, () => @@ -1410,7 +1447,10 @@ public static void createButtonsPostfix(HudManager __instance) return Tracker.tracker != null && Tracker.tracker == CachedPlayer.LocalPlayer.PlayerControl && !CachedPlayer.LocalPlayer.Data.IsDead && Tracker.canTrackCorpses; }, - () => { return CachedPlayer.LocalPlayer.PlayerControl.CanMove; }, + () => + { + return CachedPlayer.LocalPlayer.PlayerControl.CanMove; + }, () => { trackerTrackCorpsesButton.Timer = trackerTrackCorpsesButton.MaxTimer; @@ -1445,8 +1485,12 @@ public static void createButtonsPostfix(HudManager __instance) }, () => { + BodyGuard.currentTarget = SetTarget(); if (!BodyGuard.usedGuard) + { + SetPlayerOutline(Medic.currentTarget, Medic.shieldedColor); showTargetNameOnButton(BodyGuard.currentTarget, bodyGuardGuardButton, GetString("bodyGuardText")); + } return CachedPlayer.LocalPlayer.PlayerControl.CanMove && BodyGuard.currentTarget != null && !BodyGuard.usedGuard; }, @@ -1469,15 +1513,12 @@ public static void createButtonsPostfix(HudManager __instance) { if (Vampire.targetNearGarlic) { - var writer = AmongUsClient.Instance.StartRpcImmediately( - CachedPlayer.LocalPlayer.PlayerControl.NetId, (byte)CustomRPC.UncheckedMurderPlayer, - SendOption.Reliable); + var writer = StartRPC(CachedPlayer.LocalPlayer.PlayerControl.NetId, CustomRPC.UncheckedMurderPlayer); writer.Write(Vampire.vampire.PlayerId); writer.Write(Vampire.currentTarget.PlayerId); writer.Write(byte.MaxValue); - AmongUsClient.Instance.FinishRpcImmediately(writer); - RPCProcedure.uncheckedMurderPlayer(Vampire.vampire.PlayerId, Vampire.currentTarget.PlayerId, - byte.MaxValue); + writer.EndRPC(); + RPCProcedure.uncheckedMurderPlayer(Vampire.vampire.PlayerId, Vampire.currentTarget.PlayerId, byte.MaxValue); vampireKillButton.HasEffect = false; // Block effect on this click vampireKillButton.Timer = vampireKillButton.MaxTimer; @@ -1486,12 +1527,10 @@ public static void createButtonsPostfix(HudManager __instance) { Vampire.bitten = Vampire.currentTarget; // Notify players about bitten - var writer = AmongUsClient.Instance.StartRpcImmediately( - CachedPlayer.LocalPlayer.PlayerControl.NetId, (byte)CustomRPC.VampireSetBitten, - SendOption.Reliable); + var writer = StartRPC(CachedPlayer.LocalPlayer.PlayerControl.NetId, CustomRPC.VampireSetBitten); writer.Write(Vampire.bitten.PlayerId); writer.Write((byte)0); - AmongUsClient.Instance.FinishRpcImmediately(writer); + writer.EndRPC(); RPCProcedure.vampireSetBitten(Vampire.bitten.PlayerId, 0); var lastTimer = (byte)Vampire.delay; @@ -1505,12 +1544,11 @@ public static void createButtonsPostfix(HudManager __instance) if (timer != lastTimer) { lastTimer = timer; - var writer = AmongUsClient.Instance.StartRpcImmediately(CachedPlayer.LocalPlayer.PlayerControl.NetId, - (byte)CustomRPC.ShareGhostInfo, SendOption.Reliable); + var writer = StartRPC(CachedPlayer.LocalPlayer.PlayerControl.NetId, CustomRPC.ShareGhostInfo); writer.Write(CachedPlayer.LocalPlayer.PlayerId); writer.Write((byte)RPCProcedure.GhostInfoTypes.VampireTimer); writer.Write(timer); - AmongUsClient.Instance.FinishRpcImmediately(writer); + writer.EndRPC(); } } @@ -1521,12 +1559,10 @@ public static void createButtonsPostfix(HudManager __instance) showAnimation: false); if (res == MurderAttemptResult.PerformKill) { - var writer = AmongUsClient.Instance.StartRpcImmediately( - CachedPlayer.LocalPlayer.PlayerControl.NetId, - (byte)CustomRPC.VampireSetBitten, SendOption.Reliable); + var writer = StartRPC(CachedPlayer.LocalPlayer.PlayerControl.NetId, CustomRPC.VampireSetBitten); writer.Write(byte.MaxValue); writer.Write(byte.MaxValue); - AmongUsClient.Instance.FinishRpcImmediately(writer); + writer.EndRPC(); RPCProcedure.vampireSetBitten(byte.MaxValue, byte.MaxValue); } } @@ -1557,6 +1593,26 @@ public static void createButtonsPostfix(HudManager __instance) }, () => { + + PlayerControl target; + if (Spy.spy != null) + { + target = Spy.impostorsCanKillAnyone ? SetTarget(null, false, true) : SetTarget(null, true, true); + } + else + { + target = SetTarget(null, true, true); + } + + bool targetNearGarlic = false; + if (target != null) + foreach (var garlic in Garlic.garlics) + if (Vector2.Distance(garlic.garlic.transform.position, target.transform.position) <= 1.95f) + targetNearGarlic = true; + Vampire.targetNearGarlic = targetNearGarlic; + Vampire.currentTarget = target; + SetPlayerOutline(Vampire.currentTarget, Vampire.color); + if (Vampire.targetNearGarlic) showTargetNameOnButton(Vampire.currentTarget, vampireKillButton, GetString("killButtonText")); else @@ -1639,9 +1695,16 @@ public static void createButtonsPostfix(HudManager __instance) prophetButton.Timer = prophetButton.MaxTimer; } }, - () => { return Prophet.prophet != null && CachedPlayer.LocalPlayer.PlayerControl == Prophet.prophet && !CachedPlayer.LocalPlayer.PlayerControl.Data.IsDead && Prophet.examinesLeft > 0; }, () => { + return Prophet.prophet != null && CachedPlayer.LocalPlayer.PlayerControl == Prophet.prophet + && !CachedPlayer.LocalPlayer.PlayerControl.Data.IsDead && Prophet.examinesLeft > 0; + }, + () => + { + Prophet.currentTarget = SetTarget(); + SetPlayerOutline(Prophet.currentTarget, Prophet.color); + if (prophetButtonText != null) { if (Prophet.examinesLeft > 0) @@ -1892,10 +1955,18 @@ public static void createButtonsPostfix(HudManager __instance) }, () => { + var untargetablePlayers = new List(); + untargetablePlayers.AddRange(Jackal.jackal); + if (Jackal.Sidekick != null) untargetablePlayers.Add(Jackal.Sidekick); + if (Mini.mini != null && !Mini.isGrownUp()) untargetablePlayers.Add(Mini.mini); + Jackal.currentTarget = SetTarget(untarget: untargetablePlayers); + SetPlayerOutline(Jackal.currentTarget, Palette.ImpostorRed); + return Jackal.canCreateSidekick && Jackal.jackal.Any(x => x.IsAlive() && x == CachedPlayer.LocalPlayer.PlayerControl); }, () => { + // Show now text since the button already says sidekick showTargetNameOnButton(Jackal.currentTarget, jackalSidekickButton, GetString("jackalSidekickText")); return Jackal.canCreateSidekick && Jackal.currentTarget != null && @@ -1974,7 +2045,17 @@ public static void createButtonsPostfix(HudManager __instance) RPCProcedure.setSwoop(Swooper.swooper.PlayerId, byte.MinValue); }, () => { /* Can See */ return Swooper.swooper != null && Swooper.swooper == CachedPlayer.LocalPlayer.PlayerControl && !CachedPlayer.LocalPlayer.Data.IsDead; }, - () => { /* On Click */ return CachedPlayer.LocalPlayer.PlayerControl.CanMove; }, + () => + { + /* On Click */ + // Exclude Jackal from targeting the Mini unless it has grown up + var untargetablePlayers = new List(); + if (Mini.mini != null && !Mini.isGrownUp()) untargetablePlayers.Add(Mini.mini); + Swooper.currentTarget = SetTarget(untarget: untargetablePlayers); + SetPlayerOutline(Swooper.currentTarget, Palette.ImpostorRed); + + return CachedPlayer.LocalPlayer.PlayerControl.CanMove; + }, () => { /* On Meeting End */ swooperSwoopButton.Timer = swooperSwoopButton.MaxTimer; @@ -2022,6 +2103,14 @@ public static void createButtonsPostfix(HudManager __instance) if (Pavlovsdogs.deathTime <= 0) PlayerControl.LocalPlayer.RpcMurderPlayer(PlayerControl.LocalPlayer, true); } + + var untargetablePlayers = new List(); + untargetablePlayers.AddRange(Pavlovsdogs.pavlovsdogs); + if (Pavlovsdogs.pavlovsowner != null) untargetablePlayers.Add(Pavlovsdogs.pavlovsowner); + if (Mini.mini != null && !Mini.isGrownUp()) untargetablePlayers.Add(Mini.mini); + Pavlovsdogs.killTarget = SetTarget(untarget: untargetablePlayers); + SetPlayerOutline(Pavlovsdogs.killTarget, Palette.ImpostorRed); + showTargetNameOnButton(Pavlovsdogs.killTarget, pavlovsdogsKillButton, GetString("killButtonText")); return Pavlovsdogs.killTarget && CachedPlayer.LocalPlayer.PlayerControl.CanMove; }, () => @@ -2072,8 +2161,13 @@ public static void createButtonsPostfix(HudManager __instance) if (PavlovsdogCreateNumText != null) PavlovsdogCreateNumText.text = $"{Pavlovsdogs.createDogNum}"; - showTargetNameOnButton(Pavlovsdogs.currentTarget, pavlovsownerCreateDogButton, GetString("pavlovsCreateDogText")); + var untargetablePlayers = new List(); + if (Mini.mini != null && !Mini.isGrownUp()) untargetablePlayers.Add(Mini.mini); + Pavlovsdogs.currentTarget = SetTarget(untarget: untargetablePlayers); + SetPlayerOutline(Pavlovsdogs.currentTarget, Palette.ImpostorRed); + // Show now text since the button already says sidekick + showTargetNameOnButton(Pavlovsdogs.currentTarget, pavlovsownerCreateDogButton, GetString("pavlovsCreateDogText")); return Pavlovsdogs.currentTarget != null && CachedPlayer.LocalPlayer.PlayerControl.CanMove; }, () => { pavlovsownerCreateDogButton.Timer = pavlovsownerCreateDogButton.MaxTimer; }, @@ -2170,6 +2264,8 @@ public static void createButtonsPostfix(HudManager __instance) () => { /* On Click */ + Bomber.currentBombTarget = SetTarget(); + if (Bomber.hasBombPlayer == null) SetPlayerOutline(Bomber.currentTarget, Bomber.color); return Bomber.currentTarget && CachedPlayer.LocalPlayer.PlayerControl.CanMove; }, () => @@ -2240,6 +2336,8 @@ public static void createButtonsPostfix(HudManager __instance) () => { /* Can Click */ + Bomber.currentBombTarget = SetTarget(); + if (Bomber.hasBombPlayer == null) SetPlayerOutline(Bomber.currentTarget, Bomber.color); return Bomber.currentBombTarget && CachedPlayer.LocalPlayer.PlayerControl.CanMove; }, () => @@ -2318,6 +2416,7 @@ public static void createButtonsPostfix(HudManager __instance) }, () => { + Werewolf.currentTarget = SetTarget(); showTargetNameOnButton(Werewolf.currentTarget, werewolfKillButton, GetString("killButtonText")); return Werewolf.currentTarget && CachedPlayer.LocalPlayer.PlayerControl.CanMove; }, @@ -2396,6 +2495,7 @@ public static void createButtonsPostfix(HudManager __instance) }, () => { + Juggernaut.currentTarget = SetTarget(); showTargetNameOnButton(Juggernaut.currentTarget, juggernautKillButton, GetString("killButtonText")); return Juggernaut.currentTarget && CachedPlayer.LocalPlayer.PlayerControl.CanMove; }, @@ -2434,6 +2534,11 @@ public static void createButtonsPostfix(HudManager __instance) }, () => { + var untargetablePlayers = new List(); + if (Mini.mini != null && !Mini.isGrownUp()) untargetablePlayers.Add(Mini.mini); + Pelican.currentTarget = SetTarget(untarget: untargetablePlayers); + SetPlayerOutline(Pelican.currentTarget, Palette.ImpostorRed); + showTargetNameOnButton(Pelican.currentTarget, pelicanKillButton, GetString("VultureText")); return Pelican.currentTarget && CachedPlayer.LocalPlayer.PlayerControl.CanMove; }, @@ -2470,6 +2575,11 @@ public static void createButtonsPostfix(HudManager __instance) }, () => { + var untargetables = new List(); + if (Spy.spy != null) untargetables.Add(Spy.spy); + Eraser.currentTarget = SetTarget(untarget: Eraser.canEraseAnyone ? [] : untargetables, !Eraser.canEraseAnyone); + SetPlayerOutline(Eraser.currentTarget, Eraser.color); + showTargetNameOnButton(Eraser.currentTarget, eraserButton, GetString("EraserText")); return CachedPlayer.LocalPlayer.PlayerControl.CanMove && Eraser.currentTarget != null; }, @@ -2502,6 +2612,9 @@ public static void createButtonsPostfix(HudManager __instance) }, () => { + PartTimer.currentTarget = SetTarget(); + if (PartTimer.target != null) SetPlayerOutline(PartTimer.currentTarget, PartTimer.color); + showTargetNameOnButton(PartTimer.currentTarget, partTimerButton, GetString("partTimerButton")); return CachedPlayer.LocalPlayer.PlayerControl.CanMove && PartTimer.currentTarget != null; ; }, @@ -2846,6 +2959,21 @@ public static void createButtonsPostfix(HudManager __instance) }, () => { + + // If the cursed victim is disconnected or dead reset the curse so a new curse can be applied + if (Warlock.curseVictim != null && (Warlock.curseVictim.Data.Disconnected || Warlock.curseVictim.Data.IsDead)) + Warlock.resetCurse(); + if (Warlock.curseVictim == null) + { + Warlock.currentTarget = SetTarget(); + SetPlayerOutline(Warlock.currentTarget, Warlock.color); + } + else + { + Warlock.curseVictimTarget = SetTarget(targetingPlayer: Warlock.curseVictim); + SetPlayerOutline(Warlock.curseVictimTarget, Warlock.color); + } + if (Warlock.curseVictim != null) showTargetNameOnButton(Warlock.currentTarget, warlockCurseButton, GetString("CurseKillText")); else @@ -2901,10 +3029,8 @@ public static void createButtonsPostfix(HudManager __instance) }, () => { - return SecurityGuard.securityGuard != null && - SecurityGuard.securityGuard == CachedPlayer.LocalPlayer.PlayerControl && - !CachedPlayer.LocalPlayer.Data.IsDead && SecurityGuard.remainingScrews >= - Mathf.Min(SecurityGuard.ventPrice, SecurityGuard.camPrice); + return SecurityGuard.securityGuard.IsAlive() && SecurityGuard.securityGuard == CachedPlayer.LocalPlayer.PlayerControl && + SecurityGuard.remainingScrews >= Mathf.Min(SecurityGuard.ventPrice, SecurityGuard.camPrice); }, () => { @@ -2916,6 +3042,27 @@ public static void createButtonsPostfix(HudManager __instance) if (securityGuardButtonScrewsText != null) securityGuardButtonScrewsText.text = $"{SecurityGuard.remainingScrews}/{SecurityGuard.totalScrews}"; + + Vent target = null; + var truePosition = CachedPlayer.LocalPlayer.PlayerControl.GetTruePosition(); + var closestDistance = float.MaxValue; + for (var i = 0; i < MapUtilities.CachedShipStatus.AllVents.Length; i++) + { + var vent = MapUtilities.CachedShipStatus.AllVents[i]; + if (vent.gameObject.name.StartsWith("JackInTheBoxVent_") || + vent.gameObject.name.StartsWith("SealedVent_") || + vent.gameObject.name.StartsWith("FutureSealedVent_")) continue; + if (SubmergedCompatibility.IsSubmerged && vent.Id == 9) continue; // cannot seal submergeds exit only vent! + var distance = Vector2.Distance(vent.transform.position, truePosition); + if (distance <= vent.UsableDistance && distance < closestDistance) + { + closestDistance = distance; + target = vent; + } + } + + SecurityGuard.ventTarget = target; + if (SecurityGuard.ventTarget != null) return SecurityGuard.remainingScrews >= SecurityGuard.ventPrice && CachedPlayer.LocalPlayer.PlayerControl.CanMove; @@ -3047,9 +3194,23 @@ public static void createButtonsPostfix(HudManager __instance) }, () => { - var dousedEveryoneAlive = Arsonist.dousedEveryoneAlive(); - if (!dousedEveryoneAlive) - showTargetNameOnButton(Arsonist.currentTarget, arsonistButton, GetString("DouseText")); + List untargetables; + if (Arsonist.douseTarget != null) + { + untargetables = new(); + foreach (var cachedPlayer in CachedPlayer.AllPlayers) + if (cachedPlayer.PlayerId != Arsonist.douseTarget.PlayerId) + untargetables.Add(cachedPlayer); + } + else + { + untargetables = Arsonist.dousedPlayers; + } + + Arsonist.currentTarget = SetTarget(untarget: untargetables, distances: 0.5f); + if (Arsonist.currentTarget != null) SetPlayerOutline(Arsonist.currentTarget, Arsonist.color); + + showTargetNameOnButton(Arsonist.currentTarget, arsonistButton, GetString("DouseText")); if (arsonistButton.isEffectActive && Arsonist.douseTarget != Arsonist.currentTarget) { @@ -3113,6 +3274,9 @@ public static void createButtonsPostfix(HudManager __instance) }, () => { + Arsonist.currentTarget2 = SetTarget(distances: 0.5f); + if (Arsonist.currentTarget2 != null) SetPlayerOutline(Arsonist.currentTarget2, Arsonist.color); + showTargetNameOnButton(Arsonist.currentTarget2, arsonistKillButton, GetString("IgniteText")); return PlayerControl.LocalPlayer.CanMove && Arsonist.currentTarget2 != null && Arsonist.dousedPlayers.Contains(Arsonist.currentTarget2); }, @@ -3310,6 +3474,22 @@ public static void createButtonsPostfix(HudManager __instance) }, () => { + + DeadPlayer target = null; + var truePosition = CachedPlayer.LocalPlayer.PlayerControl.GetTruePosition(); + var closestDistance = float.MaxValue; + var usableDistance = MapUtilities.CachedShipStatus.AllVents.FirstOrDefault().UsableDistance; + foreach (var (dp, ps) in Medium.deadBodies) + { + var distance = Vector2.Distance(ps, truePosition); + if (distance <= usableDistance && distance < closestDistance) + { + closestDistance = distance; + target = dp; + } + } + Medium.target = target; + if (mediumButton.isEffectActive && Medium.target != Medium.soulTarget) { Medium.soulTarget = null; @@ -3419,6 +3599,9 @@ public static void createButtonsPostfix(HudManager __instance) }, () => { + Pursuer.target = SetTarget(); + SetPlayerOutline(Pursuer.target, Pursuer.color); + showTargetNameOnButton(Pursuer.target, pursuerButton, GetString("PursuerText")); if (pursuerButtonBlanksText != null) pursuerButtonBlanksText.text = $"{Pursuer.blanksNumber - Pursuer.blanks}"; @@ -3514,6 +3697,9 @@ public static void createButtonsPostfix(HudManager __instance) }, () => { + Survivor.target = SetTarget(); + SetPlayerOutline(Survivor.target, Survivor.color); + showTargetNameOnButton(Survivor.target, survivorBlanksButton, GetString("PursuerText")); if (survivorBlanksButtonText != null) survivorBlanksButtonText.text = $"{Survivor.remainingBlanks} / {Survivor.blanksNumber}"; @@ -3553,6 +3739,20 @@ public static void createButtonsPostfix(HudManager __instance) }, () => { + List untargetables; + if (Witch.spellCastingTarget != null) + { + untargetables = PlayerControl.AllPlayerControls.ToArray().Where(x => x.PlayerId != Witch.spellCastingTarget.PlayerId).ToList(); + } + else + { + untargetables = new(); + if (Spy.spy != null && !Witch.canSpellAnyone) untargetables.Add(Spy.spy); + } + + Witch.currentTarget = SetTarget(untargetables, !Witch.canSpellAnyone); + SetPlayerOutline(Witch.currentTarget, Witch.color); + showTargetNameOnButton(Witch.currentTarget, witchSpellButton, GetString("WitchText")); if (witchSpellButton.isEffectActive && Witch.spellCastingTarget != Witch.currentTarget) { @@ -3833,6 +4033,12 @@ public static void createButtonsPostfix(HudManager __instance) () => { // CouldUse + var untargetables = new List(); + if (Spy.spy != null && !Spy.impostorsCanKillAnyone) untargetables.Add(Spy.spy); + if (Mini.mini != null && !Mini.isGrownUp()) untargetables.Add(Mini.mini); + Ninja.currentTarget = SetTarget(untargetables, Spy.spy == null || !Spy.impostorsCanKillAnyone); + SetPlayerOutline(Ninja.currentTarget, Ninja.color); + showTargetNameOnButton(Ninja.currentTarget, ninjaButton, GetString("NinjaText")); ninjaButton.Sprite = Ninja.ninjaMarked != null ? Ninja.killButtonSprite @@ -3877,6 +4083,9 @@ public static void createButtonsPostfix(HudManager __instance) () => { // Could Use + Blackmailer.currentTarget = SetTarget(); + SetPlayerOutline(Medic.currentTarget, Blackmailer.blackmailedColor); + var text = GetString("BlackmailerText"); if (Blackmailer.blackmailed != null) text = Blackmailer.blackmailed.Data.PlayerName; //Show target name under button if setting is true @@ -4083,7 +4292,15 @@ public static void createButtonsPostfix(HudManager __instance) { return Thief.thief != null && CachedPlayer.LocalPlayer.PlayerControl == Thief.thief && CachedPlayer.LocalPlayer.PlayerControl.IsAlive(); }, - () => { return Thief.currentTarget != null && CachedPlayer.LocalPlayer.PlayerControl.CanMove; }, + () => + { + var untargetables = new List(); + if (Mini.mini != null && !Mini.isGrownUp()) untargetables.Add(Mini.mini); + Thief.currentTarget = SetTarget(untarget: untargetables); + SetPlayerOutline(Thief.currentTarget, Thief.color); + + return Thief.currentTarget != null && CachedPlayer.LocalPlayer.PlayerControl.CanMove; + }, () => { thiefKillButton.Timer = thiefKillButton.MaxTimer; }, __instance.KillButton.graphic.sprite, ButtonPositions.upperRowRight, diff --git a/TheOtherRoles/Helper/Helpers.cs b/TheOtherRoles/Helper/Helpers.cs index bbe816bd..e1118dd4 100644 --- a/TheOtherRoles/Helper/Helpers.cs +++ b/TheOtherRoles/Helper/Helpers.cs @@ -584,15 +584,20 @@ public static bool Any(this List list, Func func) return false; } - public static bool TryAdd(this IEnumerable list, T item) + public static bool TryAdd(this List list, T item) { if (list == null || item == null) return false; try { - list.AddItem(item); + list.Add(item); + Message("complete", "TryAdd"); return true; } - catch { return false; } + catch (Exception e) + { + Message(e, "TryAdd"); + return false; + } } public static TKey GetKeyByValue(this Dictionary dictionary, TValue value, TKey defaultvalue = default) @@ -811,28 +816,6 @@ public static void SetActiveAllObject(this GameObject[] trans, string notdelete, } } - public static Vector3 GetCloseSpawnPosition(this PlayerControl player) - { - var list = new List(); - list.AddRange(MapData.MapSpawnPosition(false)); - list.AddRange(MapData.FindVentSpawnPositions(false)); - - var closePos = list[0]; - float closeDistance = Vector3.Distance(player.transform.position, closePos); - - foreach (var pos in list) - { - float distance = Vector3.Distance(player.transform.position, pos); - if (distance < closeDistance) - { - closePos = pos; - closeDistance = distance; - } - } - Message($"Revive Player{player.Data.PlayerName} To Vector3 {closePos}"); - return closePos; - } - public static GameObject[] GetChildren(this GameObject ParentObject) { GameObject[] ChildObject = new GameObject[ParentObject.transform.childCount]; @@ -867,7 +850,7 @@ public static void clearAllTasks(this PlayerControl player) public static void shareGameVersion() { - var writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.VersionHandshake, + var writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.VersionHandshake, SendOption.Reliable, -1); writer.Write((byte)Main.Version.Major); writer.Write((byte)Main.Version.Minor); diff --git a/TheOtherRoles/Main.cs b/TheOtherRoles/Main.cs index cb311612..33f64276 100644 --- a/TheOtherRoles/Main.cs +++ b/TheOtherRoles/Main.cs @@ -1,4 +1,4 @@ -using System; +using System; using AmongUs.Data; using BepInEx; using BepInEx.Configuration; @@ -102,6 +102,7 @@ public override void Load() SubmergedCompatibility.Initialize(); MainMenuPatch.addSceneChangeCallbacks(); AddToKillDistanceSetting.addKillDistance(); + Info($"\n---------------\n Loading TheOtherUs completed!\n TheOtherUs-Edited v{VersionString}-Lite\n---------------"); } } diff --git a/TheOtherRoles/Modules/ChatCommands.cs b/TheOtherRoles/Modules/ChatCommands.cs index f86b7851..3198bd2b 100644 --- a/TheOtherRoles/Modules/ChatCommands.cs +++ b/TheOtherRoles/Modules/ChatCommands.cs @@ -116,10 +116,10 @@ private static bool Prefix(ChatController __instance) if (target != null) { var writer = AmongUsClient.Instance.StartRpcImmediately(CachedPlayer.LocalPlayer.PlayerControl.NetId, - (byte)CustomRPC.HostRevive, SendOption.Reliable); + (byte)CustomRPC.RevivePlayer, SendOption.Reliable); writer.Write(target.PlayerId); AmongUsClient.Instance.FinishRpcImmediately(writer); - RPCProcedure.hostRevive(target.PlayerId); + RPCProcedure.RevivePlayer(target.PlayerId); } handled = true; } diff --git a/TheOtherRoles/Options/CustomOptionHolder.cs b/TheOtherRoles/Options/CustomOptionHolder.cs index b72e02c6..88c148f3 100644 --- a/TheOtherRoles/Options/CustomOptionHolder.cs +++ b/TheOtherRoles/Options/CustomOptionHolder.cs @@ -236,7 +236,8 @@ public class CustomOptionHolder public static CustomOption specterSpawnRate; public static CustomOption specterResetRole; public static CustomOption specterDuration; - public static CustomOption specterAfterMeeting; + public static CustomOption specterAfterMeetingTakeRole; + public static CustomOption specterAfterMeetingRevived; public static CustomOption sheriffSpawnRate; public static CustomOption sheriffMisfireKills; @@ -933,7 +934,8 @@ public static void Load() specterSpawnRate = Create(50020, Types.Neutral, cs(Specter.color, "SpecterOptions"), rates, null, true); specterResetRole = Create(50021, Types.Neutral, "amnisiacResetRole", true, specterSpawnRate); specterDuration = Create(50022, Types.Neutral, "specterDuration", 1.5f, 0.25f, 5f, 0.25f, specterSpawnRate); - specterAfterMeeting = Create(50023, Types.Neutral, "specterAfterMeeting", false, specterSpawnRate); + specterAfterMeetingTakeRole = Create(50023, Types.Neutral, "specterAfterMeetingTakeRole", false, specterSpawnRate); + specterAfterMeetingRevived = Create(50024, Types.Neutral, "specterAfterMeetingRevived", false, specterSpawnRate); survivorSpawnRate = Create(20280, Types.Neutral, cs(Survivor.color, "Survivor"), rates, null, true); survivorVestEnable = Create(20281, Types.Neutral, "survivorVestEnable", true, survivorSpawnRate); @@ -1153,12 +1155,12 @@ public static void Load() bodyGuardFlash = Create(30342, Types.Crewmate, "bodyGuardFlash", true, bodyGuardSpawnRate); timeMasterSpawnRate = Create(30210, Types.Crewmate, cs(TimeMaster.color, "TimeMaster"), rates, null, true); - timeMasterCooldown = Create(30211, Types.Crewmate, "timeMasterCooldown", 20f, 10f, 60f, 2.5f, timeMasterSpawnRate); + timeMasterCooldown = Create(30211, Types.Crewmate, "timeMasterCooldown", 20f, 5f, 60f, 2.5f, timeMasterSpawnRate); timeMasterShieldDuration = Create(30213, Types.Crewmate, "timeMasterShieldDuration", 15f, 2.5f, 20f, 0.5f, timeMasterSpawnRate); timeMasterRewindTime = Create(30212, Types.Crewmate, "timeMasterRewindTime", 9f, 1f, 10f, 1f, timeMasterSpawnRate); veteranSpawnRate = Create(30220, Types.Crewmate, cs(Veteran.color, "Veteran"), rates, null, true); - veteranCooldown = Create(30221, Types.Crewmate, "veteranCooldown", 25f, 10f, 60f, 2.5f, veteranSpawnRate); + veteranCooldown = Create(30221, Types.Crewmate, "veteranCooldown", 25f, 5f, 60f, 2.5f, veteranSpawnRate); veteranAlertDuration = Create(30222, Types.Crewmate, "veteranAlertDuration", 12.5f, 2.5f, 20f, 0.5f, veteranSpawnRate); swapperSpawnRate = Create(30230, Types.Crewmate, cs(Swapper.color, "Swapper"), rates, null, true); diff --git a/TheOtherRoles/Patches/EndGamePatch.cs b/TheOtherRoles/Patches/EndGamePatch.cs index a6053bc2..f7666777 100644 --- a/TheOtherRoles/Patches/EndGamePatch.cs +++ b/TheOtherRoles/Patches/EndGamePatch.cs @@ -206,7 +206,7 @@ public static void Postfix(AmongUsClient __instance, [HarmonyArgument(0)] ref En var executionerWin = Executioner.executioner != null && gameOverReason == (GameOverReason)CustomGameOverReason.ExecutionerWin; var lawyerSoloWin = Lawyer.lawyer != null && gameOverReason == (GameOverReason)CustomGameOverReason.LawyerSoloWin; var akujoWin = Akujo.akujo.IsAlive() && Akujo.honmei.IsAlive() && (gameOverReason == (GameOverReason)CustomGameOverReason.AkujoWin || - (GameManager.Instance.DidHumansWin(gameOverReason) && Akujo.honmeiOptimizeWin && !Akujo.existingWithKiller())); + GameManager.Instance.DidHumansWin(gameOverReason)); bool isPursurerLose = jesterWin || witnessWin || arsonistWin || miniLose || isCanceled || executionerWin; diff --git a/TheOtherRoles/Patches/ExileControllerPatch.cs b/TheOtherRoles/Patches/ExileControllerPatch.cs index f8b68085..cfa476cd 100644 --- a/TheOtherRoles/Patches/ExileControllerPatch.cs +++ b/TheOtherRoles/Patches/ExileControllerPatch.cs @@ -5,6 +5,7 @@ using AmongUs.GameOptions; using Hazel; using PowerTools; +using Sentry.Protocol; using TheOtherRoles.Buttons; using TheOtherRoles.Objects; using TheOtherRoles.Utilities; @@ -359,70 +360,80 @@ private static void WrapUpPostfix(GameData.PlayerInfo exiled) if (BountyHunter.bountyHunter != null && BountyHunter.bountyHunter == CachedPlayer.LocalPlayer.PlayerControl) BountyHunter.bountyUpdateTimer = 0f; - // Eraser erase - if (Eraser.eraser != null && AmongUsClient.Instance.AmHost && Eraser.futureErased != null) + if (AmongUsClient.Instance.AmHost) { - var rasePlayerList = new List(Eraser.futureErased); - foreach (var target in rasePlayerList) + LastImpostor.promoteToLastImpostor(); + + // Eraser erase + if (Eraser.eraser != null && Eraser.futureErased != null) { - var writer = StartRPC(CachedPlayer.LocalPlayer.PlayerControl.NetId, CustomRPC.ErasePlayerRoles); - writer.Write(target.PlayerId); - writer.EndRPC(); - RPCProcedure.erasePlayerRoles(target.PlayerId); - Eraser.alreadyErased.Add(target.PlayerId); + var rasePlayerList = new List(Eraser.futureErased); + foreach (var target in rasePlayerList) + { + var writer = StartRPC(CachedPlayer.LocalPlayer.PlayerControl.NetId, CustomRPC.ErasePlayerRoles); + writer.Write(target.PlayerId); + writer.EndRPC(); + RPCProcedure.erasePlayerRoles(target.PlayerId); + Eraser.alreadyErased.Add(target.PlayerId); + } } - } - Eraser.futureErased = new List(); - - // Shifter shift - if (Shifter.shifter != null && AmongUsClient.Instance.AmHost && Shifter.futureShift != null) - { - var writer = StartRPC(CachedPlayer.LocalPlayer.PlayerControl, CustomRPC.ShifterShift); - writer.Write(Shifter.futureShift.PlayerId); - writer.EndRPC(); - RPCProcedure.shifterShift(Shifter.futureShift.PlayerId); - } - Shifter.futureShift = null; + // Shifter shift + if (Shifter.shifter != null && Shifter.futureShift != null) + { + var writer = StartRPC(CachedPlayer.LocalPlayer.PlayerControl, CustomRPC.ShifterShift); + writer.Write(Shifter.futureShift.PlayerId); + writer.EndRPC(); + RPCProcedure.shifterShift(Shifter.futureShift.PlayerId); + } - // Witch execute casted spells - if (Witch.witch != null && Witch.futureSpelled != null && AmongUsClient.Instance.AmHost) - { - var partner = exiled?.Object?.getPartner(); + // Witch execute casted spells + if (Witch.witch != null && Witch.futureSpelled != null) + { + var partner = exiled?.Object?.getPartner(); - var exiledIsWitch = exiled?.PlayerId == Witch.witch.PlayerId; - var witchDiesWithExiledLover = partner?.PlayerId == Witch.witch.PlayerId || exiled?.PlayerId == Witch.witch.PlayerId; + var exiledIsWitch = exiled?.PlayerId == Witch.witch.PlayerId; + var witchDiesWithExiledLover = partner?.PlayerId == Witch.witch.PlayerId || exiled?.PlayerId == Witch.witch.PlayerId; - if (((witchDiesWithExiledLover || exiledIsWitch) && Witch.witchVoteSavesTargets) || Witch.witchWasGuessed) - Witch.futureSpelled = new List(); + if (((witchDiesWithExiledLover || exiledIsWitch) && Witch.witchVoteSavesTargets) || Witch.witchWasGuessed) + Witch.futureSpelled = new List(); - foreach (var target in Witch.futureSpelled.Where(x => x.IsAlive())) - { - if (Lawyer.lawyer != null && target == Lawyer.target) + foreach (var target in Witch.futureSpelled.Where(x => x.IsAlive())) { - var writer2 = StartRPC(CachedPlayer.LocalPlayer.PlayerControl, CustomRPC.LawyerPromotesToPursuer); - writer2.EndRPC(); - Lawyer.PromotesToPursuer(); - } + if (Lawyer.lawyer != null && target == Lawyer.target) + { + var writer2 = StartRPC(CachedPlayer.LocalPlayer.PlayerControl, CustomRPC.LawyerPromotesToPursuer); + writer2.EndRPC(); + Lawyer.PromotesToPursuer(); + } - if (Executioner.executioner.IsAlive() && target == Executioner.target) - { - var writer2 = StartRPC(CachedPlayer.LocalPlayer.PlayerControl, CustomRPC.ExecutionerPromotesRole); - writer2.EndRPC(); - Executioner.PromotesRole(); - } + if (Executioner.executioner.IsAlive() && target == Executioner.target) + { + var writer2 = StartRPC(CachedPlayer.LocalPlayer.PlayerControl, CustomRPC.ExecutionerPromotesRole); + writer2.EndRPC(); + Executioner.PromotesRole(); + } - var writer = StartRPC(CachedPlayer.LocalPlayer.PlayerControl, CustomRPC.UncheckedExilePlayer); - writer.Write(target.PlayerId); - writer.EndRPC(); - RPCProcedure.uncheckedExilePlayer(target.PlayerId); + var writer = StartRPC(CachedPlayer.LocalPlayer.PlayerControl, CustomRPC.UncheckedExilePlayer); + writer.Write(target.PlayerId); + writer.EndRPC(); + RPCProcedure.uncheckedExilePlayer(target.PlayerId); - GameHistory.RpcOverrideDeathReasonAndKiller(target, CustomDeathReason.WitchExile, Witch.witch); + GameHistory.RpcOverrideDeathReasonAndKiller(target, CustomDeathReason.WitchExile, Witch.witch); + } } } + Eraser.futureErased = new List(); + Shifter.futureShift = null; Witch.futureSpelled = new List(); + if (Specter.Player != null && Specter.Player?.Data?.IsDead == true && Specter.revive) + { + Specter.Player.Revive(); + Specter.revive = false; + } + // Medium spawn souls if (Medium.medium != null && CachedPlayer.LocalPlayer.PlayerControl == Medium.medium) { @@ -451,11 +462,6 @@ private static void WrapUpPostfix(GameData.PlayerInfo exiled) } } - // AntiTeleport set position - AntiTeleport.setPosition(); - - if (CustomOptionHolder.randomGameStartPosition.GetBool()) MapData.RandomSpawnPlayers(); - if (InfoSleuth.infoSleuth != null && InfoSleuth.target != null && InfoSleuth.infoSleuth == PlayerControl.LocalPlayer) { var isNotCrew = (isNeutral(InfoSleuth.target) || InfoSleuth.target.isImpostor()) ^ Vortox.Reversal; @@ -507,10 +513,11 @@ static string getTeam(PlayerControl player) if (!Yoyo.markStaysOverMeeting) Silhouette.clearSilhouettes(); - if (AmongUsClient.Instance.AmHost) - { - LastImpostor.promoteToLastImpostor(); - } + // AntiTeleport set position + AntiTeleport.setPosition(); + + if (CustomOptionHolder.randomGameStartPosition.GetBool()) MapData.RandomSpawnPlayers(); + } [HarmonyPatch(typeof(ExileController), nameof(ExileController.WrapUp))] diff --git a/TheOtherRoles/Patches/PlayerControlPatch.cs b/TheOtherRoles/Patches/PlayerControlPatch.cs index 07978629..8ff3994b 100644 --- a/TheOtherRoles/Patches/PlayerControlPatch.cs +++ b/TheOtherRoles/Patches/PlayerControlPatch.cs @@ -22,15 +22,15 @@ public static class PlayerControlFixedUpdatePatch private static bool mushroomSaboWasActive; // Helpers - private static PlayerControl setTarget(bool onlyCrewmates = false, bool targetPlayersInVents = false, - List untargetablePlayers = null, PlayerControl targetingPlayer = null) + public static PlayerControl SetTarget(bool onlyCrewmates = false, bool targetPlayersInVents = false, + IEnumerable untargetablePlayers = null, PlayerControl targetingPlayer = null, float KillDistances = 0f) { PlayerControl result = null; var num = GameOptionsData.KillDistances[Mathf.Clamp(GameOptionsManager.Instance.currentNormalGameOptions.KillDistance, 0, 3)]; if (!MapUtilities.CachedShipStatus) return result; if (targetingPlayer == null) targetingPlayer = CachedPlayer.LocalPlayer.PlayerControl; if (targetingPlayer.Data.IsDead) return result; - if (PlayerControl.LocalPlayer == Arsonist.arsonist) num += 0.5f; + num += KillDistances; var truePosition = targetingPlayer.GetTruePosition(); foreach (var playerInfo in GameData.Instance.AllPlayers.GetFastEnumerator()) @@ -58,7 +58,7 @@ private static PlayerControl setTarget(bool onlyCrewmates = false, bool targetPl return result; } - private static void setPlayerOutline(PlayerControl target, Color color) + public static void SetPlayerOutline(PlayerControl target, Color color) { if (target == null || target.cosmetics?.currentBodySprite?.BodySprite == null) return; @@ -1388,7 +1388,10 @@ public static void Postfix(PlayerControl __instance) if (!InGame) return; - UpdateSetTarget(); + impostorSetTarget(); + jackalSetTarget(); + akujoSetTarget(); + // EvilTrapper evilTrapperUpdate(); // Time Master @@ -1467,160 +1470,17 @@ public static void Postfix(PlayerControl __instance) } } - public static void UpdateSetTarget() - { - if (InMeeting) return; - - impostorSetTarget(); - morphlingSetTarget(); - vampireSetTarget(); - eraserSetTarget(); - blackMailerSetTarget(); - ninjaSetTarget(); - witchSetTarget(); - warlockSetTarget(); - bomberSetTarget(); - - jackalSetTarget(); - sidekickSetTarget(); - pavlovsownerSetTarget(); - pavlovsdogsSetTarget(); - arsonistSetTarget(); - werewolfSetTarget(); - juggernautSetTarget(); - doomsayerSetTarget(); - swooperSetTarget(); - pursuerSetTarget(); - survivorSetTarget(); - thiefSetTarget(); - partTimerSetTarget(); - akujoSetTarget(); - PelicanSetTarget(); - - securityGuardSetTarget(); - bodyGuardSetTarget(); - mediumSetTarget(); - trackerSetTarget(); - sheriffSetTarget(); - prophetSetTarget(); - medicSetTarget(); - - shifterSetTarget(); - } - - - private static void medicSetTarget() - { - if (Medic.medic == null || Medic.medic != CachedPlayer.LocalPlayer.PlayerControl) return; - Medic.currentTarget = setTarget(); - if (!Medic.usedShield) setPlayerOutline(Medic.currentTarget, Medic.shieldedColor); - } - - private static void prophetSetTarget() - { - if (Prophet.prophet == null || CachedPlayer.LocalPlayer.PlayerControl != Prophet.prophet) return; - Prophet.currentTarget = setTarget(); - if (Prophet.examinesLeft > 0) setPlayerOutline(Prophet.currentTarget, Prophet.color); - } - - private static void partTimerSetTarget() - { - if (PartTimer.partTimer == null || PartTimer.partTimer != CachedPlayer.LocalPlayer.PlayerControl) return; - PartTimer.currentTarget = setTarget(); - if (PartTimer.target != null) setPlayerOutline(PartTimer.currentTarget, PartTimer.color); - } - - private static void bomberSetTarget() - { - setBomberBombTarget(); - if (Bomber.bomber == null || Bomber.bomber != CachedPlayer.LocalPlayer.PlayerControl) return; - Bomber.currentTarget = setTarget(); - if (Bomber.hasBombPlayer == null) setPlayerOutline(Bomber.currentTarget, Bomber.color); - } - - private static void trackerSetTarget() - { - if (Tracker.tracker == null || Tracker.tracker != CachedPlayer.LocalPlayer.PlayerControl) return; - Tracker.currentTarget = setTarget(); - if (!Tracker.usedTracker) setPlayerOutline(Tracker.currentTarget, Tracker.color); - } - - private static void vampireSetTarget() - { - if (Vampire.vampire == null || Vampire.vampire != CachedPlayer.LocalPlayer.PlayerControl) return; - - PlayerControl target = null; - - var untargetablePlayers = new List(); - - if (Spy.spy != null) - { - if (Spy.impostorsCanKillAnyone) - { - target = setTarget(false, true); - } - else - { - target = setTarget(true, true); - } - } - else - { - target = setTarget(true, true); - } - - bool targetNearGarlic = false; - if (target != null) - foreach (var garlic in Garlic.garlics) - if (Vector2.Distance(garlic.garlic.transform.position, target.transform.position) <= 1.91f) - targetNearGarlic = true; - Vampire.targetNearGarlic = targetNearGarlic; - Vampire.currentTarget = target; - setPlayerOutline(Vampire.currentTarget, Vampire.color); - } - private static void jackalSetTarget() { if (Jackal.jackal.Any(x => x.IsAlive() && x.PlayerId == CachedPlayer.LocalId)) { var untargetablePlayers = new List(); - foreach (var p in Jackal.jackal) - { - untargetablePlayers.Add(p); - } + untargetablePlayers.AddRange(Jackal.jackal); if (Jackal.Sidekick != null) untargetablePlayers.Add(Jackal.Sidekick); if (Mini.mini != null && !Mini.isGrownUp()) untargetablePlayers.Add(Mini.mini); - Jackal.currentTarget = setTarget(untargetablePlayers: untargetablePlayers); - setPlayerOutline(Jackal.currentTarget, Palette.ImpostorRed); - } - } - - private static void sidekickSetTarget() - { - if (Jackal.Sidekick == null || Jackal.Sidekick != CachedPlayer.LocalPlayer.PlayerControl) return; - var untargetablePlayers = new List(); - foreach (var p in Jackal.jackal) - { - untargetablePlayers.Add(p); + Jackal.currentTarget = SetTarget(untargetablePlayers: untargetablePlayers); + SetPlayerOutline(Jackal.currentTarget, Palette.ImpostorRed); } - if (Jackal.Sidekick != null) untargetablePlayers.Add(Jackal.Sidekick); - if (Mini.mini != null && !Mini.isGrownUp()) untargetablePlayers.Add(Mini.mini); - Jackal.currentTarget = setTarget(untargetablePlayers: untargetablePlayers); - setPlayerOutline(Jackal.currentTarget, Palette.ImpostorRed); - } - - private static void setBomberBombTarget() - { - if (Bomber.bomber == null || Bomber.hasBombPlayer != CachedPlayer.LocalPlayer.PlayerControl) return; - Bomber.currentBombTarget = setTarget(); - //if (Bomber.hasBomb != null) setPlayerOutline(Bomber.currentBombTarget, Bomber.color); - } - - private static void bodyGuardSetTarget() - { - if (BodyGuard.bodyguard == null || BodyGuard.bodyguard != CachedPlayer.LocalPlayer.PlayerControl) return; - BodyGuard.currentTarget = setTarget(); - if (!BodyGuard.usedGuard) setPlayerOutline(Medic.currentTarget, Medic.shieldedColor); } public static void akujoSetTarget() @@ -1629,37 +1489,8 @@ public static void akujoSetTarget() var untargetables = new List(); if (Akujo.honmei != null) untargetables.Add(Akujo.honmei); if (Akujo.keeps != null) untargetables.AddRange(Akujo.keeps); - Akujo.currentTarget = setTarget(untargetablePlayers: untargetables); - if (Akujo.honmei == null || Akujo.keepsLeft > 0) setPlayerOutline(Akujo.currentTarget, Akujo.color); - } - - private static void PelicanSetTarget() - { - if (Pelican.Player == null || Pelican.Player != CachedPlayer.LocalPlayer.PlayerControl) return; - var untargetablePlayers = new List(); - if (Mini.mini != null && !Mini.isGrownUp()) untargetablePlayers.Add(Mini.mini); // Exclude Jackal from targeting the Mini unless it has grown up - Pelican.currentTarget = setTarget(untargetablePlayers: untargetablePlayers); - setPlayerOutline(Pelican.currentTarget, Palette.ImpostorRed); - } - - private static void swooperSetTarget() - { - if (Swooper.swooper == null || Swooper.swooper != CachedPlayer.LocalPlayer.PlayerControl) return; - var untargetablePlayers = new List(); - if (Mini.mini != null && !Mini.isGrownUp()) untargetablePlayers.Add(Mini.mini); // Exclude Jackal from targeting the Mini unless it has grown up - Swooper.currentTarget = setTarget(untargetablePlayers: untargetablePlayers); - setPlayerOutline(Swooper.currentTarget, Palette.ImpostorRed); - } - - private static void eraserSetTarget() - { - if (Eraser.eraser == null || Eraser.eraser != CachedPlayer.LocalPlayer.PlayerControl) return; - - var untargetables = new List(); - if (Spy.spy != null) untargetables.Add(Spy.spy); - Eraser.currentTarget = setTarget(!Eraser.canEraseAnyone, - untargetablePlayers: Eraser.canEraseAnyone ? [] : untargetables); - setPlayerOutline(Eraser.currentTarget, Eraser.color); + Akujo.currentTarget = SetTarget(untargetablePlayers: untargetables); + if (Akujo.honmei == null || Akujo.keepsLeft > 0) SetPlayerOutline(Akujo.currentTarget, Akujo.color); } private static void impostorSetTarget() @@ -1667,7 +1498,6 @@ private static void impostorSetTarget() if (!CachedPlayer.LocalPlayer.Data.Role.IsImpostor || !CachedPlayer.LocalPlayer.PlayerControl.CanMove || CachedPlayer.LocalPlayer.Data.IsDead) { - // !isImpostor || !canMove || isDead FastDestroyableSingleton.Instance.KillButton.SetTarget(null); return; } @@ -1677,244 +1507,20 @@ private static void impostorSetTarget() { if (Spy.impostorsCanKillAnyone) { - target = setTarget(false, true); + target = SetTarget(false, true); } else { - target = setTarget(true, true, [Spy.spy]); + target = SetTarget(true, true, [Spy.spy]); } } else { - target = setTarget(true, true); + target = SetTarget(true, true); } FastDestroyableSingleton.Instance.KillButton.SetTarget(target); // Includes setPlayerOutline(target, Palette.ImpstorRed); } - - private static void warlockSetTarget() - { - if (Warlock.warlock == null || Warlock.warlock != CachedPlayer.LocalPlayer.PlayerControl) return; - if (Warlock.curseVictim != null && (Warlock.curseVictim.Data.Disconnected || Warlock.curseVictim.Data.IsDead)) - // If the cursed victim is disconnected or dead reset the curse so a new curse can be applied - Warlock.resetCurse(); - if (Warlock.curseVictim == null) - { - Warlock.currentTarget = setTarget(); - setPlayerOutline(Warlock.currentTarget, Warlock.color); - } - else - { - Warlock.curseVictimTarget = setTarget(targetingPlayer: Warlock.curseVictim); - setPlayerOutline(Warlock.curseVictimTarget, Warlock.color); - } - } - - public static void securityGuardSetTarget() - { - if (SecurityGuard.securityGuard == null || SecurityGuard.securityGuard != CachedPlayer.LocalPlayer.PlayerControl || - MapUtilities.CachedShipStatus == null || MapUtilities.CachedShipStatus.AllVents == null) return; - - Vent target = null; - var truePosition = CachedPlayer.LocalPlayer.PlayerControl.GetTruePosition(); - var closestDistance = float.MaxValue; - for (var i = 0; i < MapUtilities.CachedShipStatus.AllVents.Length; i++) - { - var vent = MapUtilities.CachedShipStatus.AllVents[i]; - if (vent.gameObject.name.StartsWith("JackInTheBoxVent_") || - vent.gameObject.name.StartsWith("SealedVent_") || - vent.gameObject.name.StartsWith("FutureSealedVent_")) continue; - if (SubmergedCompatibility.IsSubmerged && vent.Id == 9) continue; // cannot seal submergeds exit only vent! - var distance = Vector2.Distance(vent.transform.position, truePosition); - if (distance <= vent.UsableDistance && distance < closestDistance) - { - closestDistance = distance; - target = vent; - } - } - - SecurityGuard.ventTarget = target; - } - - private static void pavlovsownerSetTarget() - { - if (Pavlovsdogs.pavlovsowner == null || Pavlovsdogs.pavlovsowner != CachedPlayer.LocalPlayer.PlayerControl) return; - var untargetablePlayers = new List(); - if (Mini.mini != null && !Mini.isGrownUp()) untargetablePlayers.Add(Mini.mini); - Pavlovsdogs.currentTarget = setTarget(untargetablePlayers: untargetablePlayers); - setPlayerOutline(Pavlovsdogs.currentTarget, Palette.ImpostorRed); - } - - public static void mediumSetTarget() - { - if (Medium.medium == null || Medium.medium != CachedPlayer.LocalPlayer.PlayerControl || - Medium.medium.Data.IsDead || Medium.deadBodies == null || - MapUtilities.CachedShipStatus?.AllVents == null) return; - - DeadPlayer target = null; - var truePosition = CachedPlayer.LocalPlayer.PlayerControl.GetTruePosition(); - var closestDistance = float.MaxValue; - var usableDistance = MapUtilities.CachedShipStatus.AllVents.FirstOrDefault().UsableDistance; - foreach (var (dp, ps) in Medium.deadBodies) - { - var distance = Vector2.Distance(ps, truePosition); - if (distance <= usableDistance && distance < closestDistance) - { - closestDistance = distance; - target = dp; - } - } - - Medium.target = target; - } - - private static void pavlovsdogsSetTarget() - { - if (Pavlovsdogs.pavlovsdogs == null || !Pavlovsdogs.pavlovsdogs.Any(p => p == CachedPlayer.LocalPlayer.PlayerControl)) return; - var untargetablePlayers = new List(); - foreach (var p in Pavlovsdogs.pavlovsdogs) - { - untargetablePlayers.Add(p); - } - if (Pavlovsdogs.pavlovsowner != null) untargetablePlayers.Add(Pavlovsdogs.pavlovsowner); - if (Mini.mini != null && !Mini.isGrownUp()) untargetablePlayers.Add(Mini.mini); - Pavlovsdogs.killTarget = setTarget(untargetablePlayers: untargetablePlayers); - setPlayerOutline(Pavlovsdogs.killTarget, Palette.ImpostorRed); - } - - private static void werewolfSetTarget() - { - if (Werewolf.werewolf == null || Werewolf.werewolf != CachedPlayer.LocalPlayer.PlayerControl) return; - Werewolf.currentTarget = setTarget(); - } - - private static void juggernautSetTarget() - { - if (Juggernaut.juggernaut == null || Juggernaut.juggernaut != CachedPlayer.LocalPlayer.PlayerControl) return; - Juggernaut.currentTarget = setTarget(); - } - - - private static void doomsayerSetTarget() - { - if (Doomsayer.doomsayer == null || Doomsayer.doomsayer != CachedPlayer.LocalPlayer.PlayerControl) return; - Doomsayer.currentTarget = setTarget(); - } - - private static void blackMailerSetTarget() - { - if (Blackmailer.blackmailer == null || - Blackmailer.blackmailer != CachedPlayer.LocalPlayer.PlayerControl) return; - Blackmailer.currentTarget = setTarget(); - setPlayerOutline(Medic.currentTarget, Blackmailer.blackmailedColor); - } - - private static void pursuerSetTarget() - { - if (Pursuer.Player == null || !Pursuer.Player.Contains(CachedPlayer.LocalPlayer.PlayerControl)) return; - Pursuer.target = setTarget(); - setPlayerOutline(Pursuer.target, Pursuer.color); - } - - private static void survivorSetTarget() - { - if (Survivor.Player == null || !Survivor.Player.Contains(CachedPlayer.LocalPlayer.PlayerControl)) return; - Survivor.target = setTarget(); - setPlayerOutline(Survivor.target, Survivor.color); - } - - private static void witchSetTarget() - { - if (Witch.witch == null || Witch.witch != CachedPlayer.LocalPlayer.PlayerControl) return; - List untargetables; - if (Witch.spellCastingTarget != null) - { - // Don't switch the target from the the one you're currently casting a spell on - untargetables = PlayerControl.AllPlayerControls.ToArray().Where(x => x.PlayerId != Witch.spellCastingTarget.PlayerId).ToList(); - } - else - { - // Also target players that have already been spelled, to hide spells that were blanks/blocked by shields - untargetables = new(); - if (Spy.spy != null && !Witch.canSpellAnyone) untargetables.Add(Spy.spy); - } - - Witch.currentTarget = setTarget(!Witch.canSpellAnyone, untargetablePlayers: untargetables); - setPlayerOutline(Witch.currentTarget, Witch.color); - } - - private static void ninjaSetTarget() - { - if (Ninja.ninja == null || Ninja.ninja != CachedPlayer.LocalPlayer.PlayerControl) return; - var untargetables = new List(); - if (Spy.spy != null && !Spy.impostorsCanKillAnyone) untargetables.Add(Spy.spy); - if (Mini.mini != null && !Mini.isGrownUp()) untargetables.Add(Mini.mini); - Ninja.currentTarget = - setTarget(Spy.spy == null || !Spy.impostorsCanKillAnyone, untargetablePlayers: untargetables); - setPlayerOutline(Ninja.currentTarget, Ninja.color); - } - - private static void thiefSetTarget() - { - if (Thief.thief == null || Thief.thief != CachedPlayer.LocalPlayer.PlayerControl) return; - var untargetables = new List(); - if (Mini.mini != null && !Mini.isGrownUp()) untargetables.Add(Mini.mini); - Thief.currentTarget = setTarget(untargetablePlayers: untargetables); - setPlayerOutline(Thief.currentTarget, Thief.color); - } - - private static void shifterSetTarget() - { - if (Shifter.shifter == null || Shifter.shifter != CachedPlayer.LocalPlayer.PlayerControl) return; - Shifter.currentTarget = setTarget(); - if (Shifter.futureShift == null) setPlayerOutline(Shifter.currentTarget, Color.yellow); - } - - private static void morphlingSetTarget() - { - if (Morphling.morphling == null || Morphling.morphling != CachedPlayer.LocalPlayer.PlayerControl) return; - Morphling.currentTarget = setTarget(); - setPlayerOutline(Morphling.currentTarget, Morphling.color); - } - - private static void sheriffSetTarget() - { - if (Sheriff.Player?.Any(x => x.IsAlive() && x == PlayerControl.LocalPlayer) == true) - { - Sheriff.currentTarget = setTarget(); - setPlayerOutline(Sheriff.currentTarget, Sheriff.color); - } - - if (Sheriff.Deputy != null && Sheriff.Deputy == PlayerControl.LocalPlayer) - { - Sheriff.currentTarget = setTarget(); - setPlayerOutline(Sheriff.currentTarget, Sheriff.color); - } - } - - public static void arsonistSetTarget() - { - if (Arsonist.arsonist == null || Arsonist.arsonist != CachedPlayer.LocalPlayer.PlayerControl) return; - List untargetables; - if (Arsonist.douseTarget != null) - { - untargetables = new(); - foreach (var cachedPlayer in CachedPlayer.AllPlayers) - if (cachedPlayer.PlayerId != Arsonist.douseTarget.PlayerId) - untargetables.Add(cachedPlayer); - } - else - { - untargetables = Arsonist.dousedPlayers; - } - - Arsonist.currentTarget = setTarget(untargetablePlayers: untargetables); - if (Arsonist.currentTarget != null) setPlayerOutline(Arsonist.currentTarget, Arsonist.color); - - Arsonist.currentTarget2 = setTarget(false, true); - if (Arsonist.currentTarget2 != null) setPlayerOutline(Arsonist.currentTarget2, Arsonist.color); - } - } [HarmonyPatch(typeof(PlayerPhysics), nameof(PlayerPhysics.WalkPlayerTo))] diff --git a/TheOtherRoles/Patches/ShipStatusPatch.cs b/TheOtherRoles/Patches/ShipStatusPatch.cs index 2af1cf38..01e5d84d 100644 --- a/TheOtherRoles/Patches/ShipStatusPatch.cs +++ b/TheOtherRoles/Patches/ShipStatusPatch.cs @@ -62,15 +62,15 @@ public static bool Prefix(ref float __result, ShipStatus __instance, [HarmonyArg __result = __instance.MaxLightRadius * GameOptionsManager.Instance.currentNormalGameOptions.CrewLightMod * Torch.vision; } - if (Specter.Player?.PlayerId == player.PlayerId) + if (Mayor.mayor.IsAlive() && Mayor.mayor.PlayerId == player.PlayerId && Mayor.Revealed) // Mayor Vision { - __result = __instance.MaxLightRadius * GameOptionsManager.Instance.currentNormalGameOptions.CrewLightMod; + __result = Mathf.Lerp(__instance.MinLightRadius, __instance.MaxLightRadius * (1f - (Mayor.vision * 0.1f)), t) * + GameOptionsManager.Instance.currentNormalGameOptions.CrewLightMod; } - if (Mayor.mayor != null && Mayor.mayor.PlayerId == player.PlayerId && Mayor.Revealed) // Mayor Vision + if (Specter.Player?.PlayerId == player.PlayerId) { - __result = Mathf.Lerp(__instance.MinLightRadius, __instance.MaxLightRadius * (1f - (Mayor.vision * 0.1f)), t) * - GameOptionsManager.Instance.currentNormalGameOptions.CrewLightMod; + __result = __instance.MaxLightRadius * GameOptionsManager.Instance.currentNormalGameOptions.CrewLightMod; } return false; diff --git a/TheOtherRoles/Patches/UpdatePatch.cs b/TheOtherRoles/Patches/UpdatePatch.cs index 70196f8d..f31b8a67 100644 --- a/TheOtherRoles/Patches/UpdatePatch.cs +++ b/TheOtherRoles/Patches/UpdatePatch.cs @@ -509,6 +509,11 @@ private static void Postfix(HudManager __instance) updateMapButton(__instance); if (!MeetingHud.Instance) __instance.AbilityButton?.Update(); + if (Specter.Player != null && PlayerControl.LocalPlayer == Specter.Player && InGame && !InMeeting) + { + __instance.ShadowQuad?.gameObject?.SetActive(true); + } + // Fix dead player's pets being visible by just always updating whether the pet should be visible at all. foreach (PlayerControl target in CachedPlayer.AllPlayers) { diff --git a/TheOtherRoles/RPC.cs b/TheOtherRoles/RPC.cs index 085bccc2..c4ce30aa 100644 --- a/TheOtherRoles/RPC.cs +++ b/TheOtherRoles/RPC.cs @@ -35,16 +35,19 @@ public enum CustomRPC SetGhostRole, VersionHandshake, UseUncheckedVent, - UncheckedMurderPlayer, - UncheckedCmdReportDeadBody, - UncheckedExilePlayer, DynamicMapOption, SetGameStarting, StopStart, ShareGameMode = 95, + UncheckedMurderPlayer, + UncheckedCmdReportDeadBody, + UncheckedExilePlayer, + RevivePlayer, + HostKill, + // Role functionality - FixLights = 100, + FixLights = 110, FixSubmergedOxygen, CleanBody, DissectionBody, @@ -65,7 +68,6 @@ public enum CustomRPC SwapperSwap, MorphlingMorph, CamouflagerCamouflage, - //DoomsayerMeeting, AkujoSetHonmei, AkujoSetKeep, AkujoSuicide, @@ -149,9 +151,6 @@ public enum CustomRPC // Gamemode SetGuesserGm, - SetRevealed, - HostKill, - HostRevive, // Other functionality ShareGhostInfo, @@ -583,10 +582,6 @@ public static void setGhostRole(byte playerId, byte roleId) break; case RoleId.Specter: Specter.Player = player; - if (PlayerControl.LocalPlayer == player) - { - DestroyableSingleton.Instance.ShadowQuad.gameObject.SetActive(true); - } break; } } @@ -859,19 +854,10 @@ public static void hostKill(byte targetId) } } - public static void hostRevive(byte targetId) + public static void RevivePlayer(byte targetId) { var target = playerById(targetId); - target.Revive(); - DeadBody[] array = Object.FindObjectsOfType(); - foreach (var body in array) - { - if (body.ParentId != targetId) continue; - - Object.Destroy(body.gameObject); - target.Data.IsDead = false; - break; - } + target?.Revive(); } public static void shifterShift(byte targetId) @@ -924,6 +910,12 @@ public static void swapperSwap(byte playerId1, byte playerId2) public static void grenadierFlash(bool clear = false) { + if (clear) + { + Grenadier.controls.Clear(); + return; + } + var closestPlayers = GetClosestPlayers(Grenadier.Player.GetTruePosition(), Grenadier.radius, true); Grenadier.controls = closestPlayers; foreach (var player in closestPlayers) @@ -2472,7 +2464,7 @@ private static bool Prefix([HarmonyArgument(0)] byte callId, [HarmonyArgument(1) break; case CustomRPC.JackalCanSwooper: - RPCProcedure.jackalCanSwooper(reader.ReadByte() == byte.MaxValue); + RPCProcedure.jackalCanSwooper(reader.ReadBoolean()); break; case CustomRPC.InfoSleuthSetTarget: @@ -2483,8 +2475,8 @@ private static bool Prefix([HarmonyArgument(0)] byte callId, [HarmonyArgument(1) RPCProcedure.balancerBalance(reader.ReadByte(), reader.ReadByte(), reader.ReadByte()); break; - case CustomRPC.HostRevive: - RPCProcedure.hostRevive(reader.ReadByte()); + case CustomRPC.RevivePlayer: + RPCProcedure.RevivePlayer(reader.ReadByte()); break; case CustomRPC.HostKill: RPCProcedure.hostKill(reader.ReadByte()); diff --git a/TheOtherRoles/Resources/stringData.json b/TheOtherRoles/Resources/stringData.json index 7e218e1f..386de9c5 100644 --- a/TheOtherRoles/Resources/stringData.json +++ b/TheOtherRoles/Resources/stringData.json @@ -371,6 +371,10 @@ "0": "Block Skipping In Emergency Meetings", "13": "紧急会议禁止跳过" }, + "disableMeeting": { + "0": "Disable Meeting", + "13": "禁用报告功能" + }, "noVoteIsSelfVote": { "0": "No Vote Is Self Vote", "13": "不投票默认投自己" @@ -1261,12 +1265,15 @@ "0": "Specter (Ghost)", "13": "怨灵 (幽灵职业)" }, - "specterAfterMeeting": { - "13": "下一轮会议结束才可复活" - }, "specterDuration": { "13": "复活前摇" }, + "specterAfterMeetingTakeRole": { + "13": "本轮会议结束后才可拾取尸体" + }, + "specterAfterMeetingRevived": { + "13": "拾取尸体后本轮会议结束才可复活" + }, "jesterCanCallEmergency": { "0": "Jester Can Call Emergency Meeting", "13": "小丑可召开会议" @@ -2363,7 +2370,7 @@ }, "TouTitle": { "0": "TheOtherUs-Edited", - "13": "TheOtherUs-Edited" + "13": "我们的超多职业" }, "inGameTitle": { "0": "Modified by mxyx.club\nBased on TheOtherUs", @@ -3582,6 +3589,9 @@ "0": "Pelican", "13": "鹈鹕" }, + "PelicanIntroDesc": { + "13": "吞下一切!" + }, "PelicanShortDesc": { "13": "将所有玩家吞入肚子里" }, @@ -4319,7 +4329,7 @@ "13": "每次击杀会让自己的击杀cd减少5秒,\n直到最后击杀cd会减少至0" }, "PelicanFullDesc": { - "13": "行动阶段鹈鹕可以吞噬玩家,如果在进入会议前被其他玩家击杀,\n则该轮被吞噬的玩家会在鹈鹕位置复活。\n\n特殊能力:鹈鹕每回合的第二次及之后的吞噬冷却会变短,进入会议后重置。\n注:鹈鹕吃掉玩家时仍然会触发死亡事件。\"" + "13": "行动阶段鹈鹕可以吞噬玩家,如果在进入会议前被其他玩家击杀,\n则该轮被吞噬的玩家会在鹈鹕位置复活。\n\n特殊能力:鹈鹕每回合的第二次及之后的吞噬冷却会变短,进入会议后重置。\n注:鹈鹕吃掉玩家时仍然会触发死亡事件。" }, "DoomsayerFullDesc": { "13": "行动阶段可以揭示其他玩家,进入会议后可以在聊天栏查看揭示结果\n末日预言家需要从揭示的职业中找出该玩家的正确职业,并在会议中刺杀。\n刺杀失败不会导致自己死亡,但本次会议无法再次刺杀。\n刺杀成功可以刷新能力,\n可以继续在本轮会议中刺杀下一位玩家。\n\n末日预言家的揭示技能有两种模式(难度),可由房主设置:\n-从模组全部职业池中随机职业+目标职业(困难)\n-从场上已有的职业池中随机职业+目标职业(简单)\n\n末日预言家刺杀成功3次(可设置)后将直接获胜。" @@ -4427,7 +4437,7 @@ "13": "分配阵营:伪装者\n\n仅剩余一名伪装者时,击杀冷却减少\n(目前赏金猎人与赌徒无法无效)" }, "VortoxFullDesc": { - "13": "分配阵营:伪装者\n\n存活时会干扰部分信息类船员职业,查验结果会被反转,\n尸检报告的死亡时间也会受到一定的干扰。\n另外根据设置,存活时如果会议跳过n次红狼方可直接获胜。\n\n注:干扰对被法医保护的玩家不生效。\n\n目前的干扰会影响的职业有:预言家、情报师、设陷师,\n尸检类职业:法医、侦探。" + "13": "分配阵营:伪装者\n\n存活时会干扰部分信息类船员职业,查验结果会被反转,\n尸检报告的死亡时间也会受到一定的干扰。\n另外根据设置,存活时如果会议累计跳过n次红狼方可直接获胜。\n\n注:干扰对被法医保护的玩家不生效。\n\n目前的干扰会影响的职业有:预言家、情报师、设陷师,\n尸检类职业:法医、侦探。" }, "BloodyFullDesc": { "13": "分配阵营:全部玩家\n\n被击杀后,凶手会在地上留下血迹" diff --git a/TheOtherRoles/Roles/Ghost/Specter.cs b/TheOtherRoles/Roles/Ghost/Specter.cs index 41a06cbc..0ddee364 100644 --- a/TheOtherRoles/Roles/Ghost/Specter.cs +++ b/TheOtherRoles/Roles/Ghost/Specter.cs @@ -7,27 +7,32 @@ public class Specter { public static PlayerControl Player; public static Color color = new Color32(154, 147, 80, byte.MaxValue); - public static bool remember; - public static float duration; + public static float duration; public static bool resetRole; + public static bool afterMeetingRevived; + + public static bool revive; + public static bool remember; public static void ClearAndReload() { Player = null; - remember = !CustomOptionHolder.specterAfterMeeting.GetBool(); + revive = false; + remember = !CustomOptionHolder.specterAfterMeetingTakeRole.GetBool(); + afterMeetingRevived = CustomOptionHolder.specterAfterMeetingRevived.GetBool(); resetRole = CustomOptionHolder.specterResetRole.GetBool(); duration = CustomOptionHolder.specterDuration.GetFloat(); } public static void TakeRole(byte targetId) { - var target = playerById(targetId); - if (Player == null || target == null) return; var local = Player; + var target = playerById(targetId); + if (local == null || target == null) return; + RPCProcedure.erasePlayerRoles(local.PlayerId); - var targetInfo = RoleInfo.getRoleInfoForPlayer(target); - var roleInfo = targetInfo.FirstOrDefault(info => info.roleType is not RoleType.Modifier and not RoleType.Ghost); + var roleInfo = RoleInfo.getRoleInfoForPlayer(target).FirstOrDefault(x => x.roleType is not RoleType.Modifier and not RoleType.Ghost); if (target.isImpostor()) turnToImpostor(local); DeadBody[] array = Object.FindObjectsOfType(); @@ -40,7 +45,9 @@ public static void TakeRole(byte targetId) } } - if (roleInfo != null) switch (roleInfo.roleId) + if (roleInfo != null) + { + switch (roleInfo.roleId) { case RoleId.Amnisiac: Amnisiac.Player.Add(local); @@ -64,6 +71,7 @@ public static void TakeRole(byte targetId) Butcher.butcher = local; break; case RoleId.Mimic: + if (Mimic.mimic != null) RPCProcedure.erasePlayerRoles(Mimic.mimic.PlayerId); if (resetRole) Mimic.clearAndReload(); Mimic.mimic = local; break; @@ -323,8 +331,13 @@ public static void TakeRole(byte targetId) Balancer.balancer = local; break; } - AntiTeleport.antiTeleport.RemoveAll(x => x.PlayerId == local.PlayerId); - RPCProcedure.clearGhostRoles(local.PlayerId); + } + + if (afterMeetingRevived) + { + revive = true; + return; + } local.Revive(); } } \ No newline at end of file diff --git a/TheOtherRoles/Roles/Impostor/Grenadier.cs b/TheOtherRoles/Roles/Impostor/Grenadier.cs index 7bbe377a..455a3bef 100644 --- a/TheOtherRoles/Roles/Impostor/Grenadier.cs +++ b/TheOtherRoles/Roles/Impostor/Grenadier.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using Hazel; using TheOtherRoles.Utilities; using UnityEngine; @@ -43,7 +42,6 @@ public static void showFlash(Color color, float duration = 10f, float alpha = 1f writer.Write(true); writer.EndRPC(); RPCProcedure.grenadierFlash(true); - controls.Clear(); } return; } @@ -64,7 +62,6 @@ public static void showFlash(Color color, float duration = 10f, float alpha = 1f writer.Write(true); writer.EndRPC(); RPCProcedure.grenadierFlash(true); - controls.Clear(); } } else diff --git a/TheOtherRoles/Roles/Neutral/Amnisiac.cs b/TheOtherRoles/Roles/Neutral/Amnisiac.cs index 7f435721..235490a5 100644 --- a/TheOtherRoles/Roles/Neutral/Amnisiac.cs +++ b/TheOtherRoles/Roles/Neutral/Amnisiac.cs @@ -13,7 +13,6 @@ public class Amnisiac public static List Player = new(); public static List localArrows = new(); public static Color color = new(0.5f, 0.7f, 1f, 1f); - public static List poolIcons = new(); public static bool showArrows = true; public static bool resetRole; @@ -380,8 +379,10 @@ public static void TakeRole(byte targetId, byte playerId) Balancer.balancer = local; break; } - Player.RemoveAll(x => x.PlayerId == local.PlayerId); + foreach (var arrow in localArrows) + Object.Destroy(arrow.arrow); + localArrows.Clear(); } } diff --git a/TheOtherRoles/Roles/Neutral/Arsonist.cs b/TheOtherRoles/Roles/Neutral/Arsonist.cs index 16ac2894..8ab56b8b 100644 --- a/TheOtherRoles/Roles/Neutral/Arsonist.cs +++ b/TheOtherRoles/Roles/Neutral/Arsonist.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using TheOtherRoles.Utilities; using UnityEngine; @@ -23,15 +23,6 @@ public static class Arsonist public static ResourceSprite igniteSprite = new("IgniteButton.png"); - public static bool dousedEveryoneAlive() - { - return CachedPlayer.AllPlayers.All(x => - { - return x.PlayerControl == arsonist || x.Data.IsDead || x.Data.Disconnected || - dousedPlayers.Any(y => y.PlayerId == x.PlayerId); - }); - } - public static void clearAndReload() { arsonist = null; diff --git a/TheOtherRoles/Roles/Neutral/Jackal.cs b/TheOtherRoles/Roles/Neutral/Jackal.cs index e5b67581..1fe57aee 100644 --- a/TheOtherRoles/Roles/Neutral/Jackal.cs +++ b/TheOtherRoles/Roles/Neutral/Jackal.cs @@ -40,7 +40,7 @@ public static void setSwoop() var chance = canSwoop = rnd.NextDouble() < chanceSwoop; var writer = AmongUsClient.Instance.StartRpcImmediately(CachedPlayer.LocalPlayer.PlayerControl.NetId, (byte)CustomRPC.JackalCanSwooper, SendOption.Reliable); - writer.Write(chance ? byte.MaxValue : 0); + writer.Write(chance); AmongUsClient.Instance.FinishRpcImmediately(writer); RPCProcedure.jackalCanSwooper(chance); } diff --git a/TheOtherRoles/Roles/RoleHelpers.cs b/TheOtherRoles/Roles/RoleHelpers.cs index f92898bf..4f248361 100644 --- a/TheOtherRoles/Roles/RoleHelpers.cs +++ b/TheOtherRoles/Roles/RoleHelpers.cs @@ -421,12 +421,12 @@ public static void Postfix([HarmonyArgument(0)] PlayerControl player) public static bool otherNeutral(PlayerControl player) { + if (Pelican.Player == player) return false; + if (PartTimer.partTimer == player && PartTimer.target == null) return true; + if (Lawyer.lawyer == player && Lawyer.target.IsDead()) return true; if (isNeutral(player) && !Jackal.jackal.Contains(player) && player != Jackal.Sidekick && player != Pavlovsdogs.pavlovsowner && !Pavlovsdogs.pavlovsdogs.Contains(player)) return true; - if (Pelican.Player == player) return true; - if (PartTimer.partTimer == player && PartTimer.target == null) return true; - if (Lawyer.lawyer == player && Lawyer.target.IsDead()) return true; return false; } diff --git a/TheOtherRoles/TheOtherRoles.csproj b/TheOtherRoles/TheOtherRoles.csproj index eb5a0b07..75bd9f01 100644 --- a/TheOtherRoles/TheOtherRoles.csproj +++ b/TheOtherRoles/TheOtherRoles.csproj @@ -1,7 +1,7 @@  net6.0 - 1.1.2.0 + 1.1.2.1 TheOtherUs mxyx-club latest diff --git a/TheOtherRoles/Utilities/MapData.cs b/TheOtherRoles/Utilities/MapData.cs index 46832e4f..6c4e27b6 100644 --- a/TheOtherRoles/Utilities/MapData.cs +++ b/TheOtherRoles/Utilities/MapData.cs @@ -4,7 +4,7 @@ namespace TheOtherRoles.Utilities; -public class MapData +public static class MapData { public static List PositionCached = new(); public static List VentCached = new(); @@ -251,6 +251,28 @@ public static void RandomSpawnPlayers() Message($"Span to Vector3: {newPosition.x}, {newPosition.y}, {newPosition.z}"); } + public static Vector3 GetCloseSpawnPosition(this PlayerControl player) + { + var list = new List(); + list.AddRange(MapSpawnPosition(false)); + list.AddRange(FindVentSpawnPositions(false)); + + var closePos = list[0]; + float closeDistance = Vector3.Distance(player.transform.position, closePos); + + foreach (var pos in list) + { + float distance = Vector3.Distance(player.transform.position, pos); + if (distance < closeDistance) + { + closePos = pos; + closeDistance = distance; + } + } + Message($"Revive Player {player.Data.PlayerName} To Vector3 {closePos}"); + return closePos; + } + public static void Clear() { VentCached.Clear();