From c2e75206dfc98fffae4497f41f8316b52859b827 Mon Sep 17 00:00:00 2001 From: Array in a Matrix Date: Sun, 27 Mar 2022 09:34:43 -0400 Subject: [PATCH] Alex payup (#1) * payup method work-in progress buisness is the owner of the contract--> requests the amount on the bill--> the customer interacts with the same contract to pay the bill * added payup funtion and other stuff related to that in other files * pay_up works * attempting bill splitting * trying to deploy * map and payer count works * added demo video * final product. Transfering funds not perfected Co-authored-by: alex324998301 <102430172+alex324998301@users.noreply.github.com> Co-authored-by: alex324998301 Co-authored-by: BiPhan4 --- README.md | 3 +- config.terrain.json | 2 +- contracts/counter/Cargo.lock | 27 +++ contracts/counter/Cargo.toml | 1 + contracts/counter/artifacts/checksums.txt | 1 + .../artifacts/checksums_intermediate.txt | 1 + contracts/counter/artifacts/counter.wasm | Bin 0 -> 137561 bytes contracts/counter/examples/schema.rs | 4 +- contracts/counter/src/contract.rs | 165 +++++++----------- contracts/counter/src/error.rs | 3 + contracts/counter/src/lib.rs | 2 +- contracts/counter/src/msg.rs | 21 +-- contracts/counter/src/state.rs | 19 +- keys.terrain.js | 7 +- refs.terrain.json | 11 +- 15 files changed, 135 insertions(+), 132 deletions(-) create mode 100644 contracts/counter/artifacts/checksums.txt create mode 100644 contracts/counter/artifacts/checksums_intermediate.txt create mode 100644 contracts/counter/artifacts/counter.wasm diff --git a/README.md b/README.md index a7fcddb..f8d7cf8 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,2 @@ # DefiHackathon-2022 - -Hello +Demo video: https://youtu.be/kMNxAIWr4T8 \ No newline at end of file diff --git a/config.terrain.json b/config.terrain.json index bbc25ef..c49c951 100644 --- a/config.terrain.json +++ b/config.terrain.json @@ -17,7 +17,7 @@ } }, "instantiateMsg": { - "count": 0 + "bill": 20000000 } } } diff --git a/contracts/counter/Cargo.lock b/contracts/counter/Cargo.lock index 8b9dd73..6294467 100644 --- a/contracts/counter/Cargo.lock +++ b/contracts/counter/Cargo.lock @@ -103,6 +103,7 @@ dependencies = [ "cosmwasm-storage", "cw-storage-plus", "cw2", + "cw20", "schemars", "serde", "thiserror", @@ -163,10 +164,24 @@ name = "cw-storage-plus" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c1e867b9972b83b32e00e878dfbff48299ba26618dabeb19b9c56fae176dc225" + +dependencies = [ + "cosmwasm-std", + "cw-storage-plus", + "schemars", + "serde", +] + +[[package]] +name = "cw0" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d759bb5418a3bdf091e1f1be17de2a15d95d2be4fee28045c2e461f4c6d9d1ca" dependencies = [ "cosmwasm-std", "schemars", "serde", + "thiserror", ] [[package]] @@ -181,6 +196,18 @@ dependencies = [ "serde", ] +[[package]] +name = "cw20" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac49b013ca1e355fd988cc1926acc9a16d7fd45cfb595ee330455582a788b100" +dependencies = [ + "cosmwasm-std", + "cw0", + "schemars", + "serde", +] + [[package]] name = "der" version = "0.4.1" diff --git a/contracts/counter/Cargo.toml b/contracts/counter/Cargo.toml index 7f29341..9a0dd8b 100644 --- a/contracts/counter/Cargo.toml +++ b/contracts/counter/Cargo.toml @@ -44,6 +44,7 @@ cosmwasm-std = { version = "0.16.2" } cosmwasm-storage = { version = "0.16.0" } cw-storage-plus = "0.8.0" cw2 = "0.8.1" +cw20 = "0.9.0" schemars = "0.8.3" serde = { version = "1.0.127", default-features = false, features = ["derive"] } thiserror = { version = "1.0.26" } diff --git a/contracts/counter/artifacts/checksums.txt b/contracts/counter/artifacts/checksums.txt new file mode 100644 index 0000000..884699e --- /dev/null +++ b/contracts/counter/artifacts/checksums.txt @@ -0,0 +1 @@ +20828f78f4b256f0563c2fbb65b5361504f948dd4910dfe54e981aa5670f73a8 counter.wasm diff --git a/contracts/counter/artifacts/checksums_intermediate.txt b/contracts/counter/artifacts/checksums_intermediate.txt new file mode 100644 index 0000000..ff9a52d --- /dev/null +++ b/contracts/counter/artifacts/checksums_intermediate.txt @@ -0,0 +1 @@ +07b18dc271100d7c375e9ff1de8a767899ffa745dd52dbaa0ce9ab587346d78e ./target/wasm32-unknown-unknown/release/counter.wasm diff --git a/contracts/counter/artifacts/counter.wasm b/contracts/counter/artifacts/counter.wasm new file mode 100644 index 0000000000000000000000000000000000000000..d1b451202e9550c9dcd6ca2722597551e01a1ba5 GIT binary patch literal 137561 zcmeFa4U}G2c^QDA{L(S{O#ZOefRtSs_WnN4y}~Z_v#C-GY1an1Ng7H z&K}@z{886w+|~!wb;$u2M@4I>b zZl!VA<->Qp^F6y&8ee|b4cFhIOuV{f_wD=T)Bg20-nj4D_gugC<{PiyzgzB2^4<;C z-}25|Zoc9Ay*K}Z-Adt0dH1GwzvKE_s(bmncHeO8kNnuoo;O_kp56Oy{+ahmC)4%q zeYH3>*QHg!Te8aSD+ve6Fu{#k7S8`k1`g(kGsnzwb5w%T^A)v~>@UeC5vqE(u9 z72dO{*19EKT9s-$+0q!;cuT7!yp&;diB9!Ynx?v+qGZroj6eORx(`Ih~=_x;TEH|)mdzU$_9-g51%x@zp&Yj3=M z|Ml1IzU4-%vum%tY4`QFUi4EAJf0Be@{QIe_#KBe%-&&J72r~&-8cn|EHhPf2!Ya zK4Jcm`H1<7dF{u{r_3*y&zs*gUoiKXUo^jEmdx0ne5w5n^Zqf@KA`V>wem;wo-*C6 zoE{iew9TB;+f;P@EjxJ9lJ8scee8yvDAyYL@?xdfeW~#h8&ys|-Q(=#?7ih|J|Tmy zKXu00{84kE)6Tk9_%ICGwf1=Zlk%-M82QScKmW9PQ|Q~Zycy0IURwNGmA^gr>^DmVV+l?@zouLHgov;63#&Y!U7;PhL|{A4^g{> zL&TFJ$>e%iS_~4f<&t`k3WLG7WfxB@075$}-^Xs)iE=go1n!p!USgxl$)|gKicQ7W zt$adutNygi{C5|Z)Ig~jrCjEdp?}}|melJN_Zh9VmbFF@L2CdJ?tR@_gb#ctz>&_Y zS#z~Z-Pnw|s#?@jYUmH$y`=Il8rRxlm23IV5P!Kn`9C)O#HD_2kK-;~g*Cq>{~DKi zV6H0dLSNzD)%a`kZ|MwIb6#VaQh(9VrT#GmLz)0UYk4;;T3#30b^LY1veQ?YS4D#VXqWnFAP!;EtIP8Lou5wQ)3nz@n->iuvPg&R zEk>b3i-(&roU;lrT!y`qw>00{)U%mCcK4F9j0aTZ!~92`9T+9MX$9Czwb0kNoj8?0s}+W7x0qxW@bBGl zvzo~A?`oADu_h6+?e>)INVU_NYNwH?q4QLzc3LB88mKm&fNJwPQ0)|`xSVR^+XmGJ znE)NCx?v|Z)yDmEQ|)va)n<>a)v0zEbVaq%Gf;Aso&(j!lZtA$2_8gXlI;9z8Zcny za5&{8)&PETJ8O~(irUeo5NQ zMwOFK_jm)ciLa}3wEnbg`7hm7kx86{{+I7sQrncm(Tvt?Xf4ddCE;*IgV?53h7-04 zPw)~C*VMbAGx^=1Lix~HfP^cBcI98=-_4-zAcA54(&hWdeNUVFN0K;IwwLc;ySaa< z-wq;hx7A4?0)K^10&eHSr~Fr6JRT*>_aSNSL%^foc(ut7q+m#o8Pa2C{gNJnCg;Bh z%6UQ$c`h0FD>E0Z~tGDa_*< z>o729bkV}!(^wumFsC#b2d5X3IhXiA)f7*5OZ*fQPm$|WOieaEHuszpX=ue?hu8-^HzZ~|b)PCJ%eZc*Z1{55L z5D!Ee%K!`?Zz9rI1r3Mzl_1bzVAZ0a&mmpvfIf?{F;$Ft118dLQ}5G70`zI&?kHji zXqTCQe-^;M1)K=r-vg*T2kFS?g~p{8EO?8 z-i5sk>+@8jjawUS;NdoPTa6M~)h$p$*C??Du+cyXqR45DqduZUcA=SbEy0TRWqs>1 z{}3RroqyAKbs6Ps4`f>7+c?;lKh9hNc_5=a(CTY9w!lpkN)+2#hixD4^#SA9Vj)iP zDNy4c13LP+9+Ev*&VtiCt!K?)gU9dfxlNs|2 z87k|a;p(i%_s?j*ZfD=3Vd;6%KolZp>+BZ$jPwkM3yTUk^+(On90>i7`E}%U!t)Do z`*B^2|_ud%q11PBivaE@P`<`;o1WMKDXWaIMlh#9&be?q1^Yy?7t z0)DB1K|A~7&x6-J(Bm;siFKIVlL5%Q0>Rv-ZU+6_rf%~3Hi%<5Xp+peiqs{Aaaqys zL2O{pa)LE`m;DH&ZB?q$Pv%IXGK^!bjH4n3(%}7#>Ad6ymES&e;}6LZzcs9#f*3l6 zRa9W`*2>dOL)Vvk(?i#hU-{5YEoTqX8Pl0pGTQS@v0fk0HaSZL1VG^gVxY5$XXJGa z%w9vxzP`aItf}bR8Ga-5?QPgA$n$9UnlcIW?W)ieHcgs(OF>=LZH4iw=*+8P-MlK+ zS5$8GV}ImsII&ZqfoY(Dra=QYWO5m3;D*d4LIY2#p^HP?g`xE?0BBtfnOFD#6Zin1 zJA;-t3P)j~got0x@yqr2($^#pe24S`97t-C*T#}OP6mo-SRaoS$-6+f0ORi%j;G05 zv$nmqVgn$F@xHdo8fp@bfE>2K2^g=aTo@?jpZ?eXK`)X5|TMLiR0n00ll7t>(o@svVenj4aC$L)CyC zn8T)GDJgnP*OTNhj+%Vh863ovNh7RZ2H=vZK@Gj`ad zOvq%ukAdNTK+89j#{Z4sc#^>20%CCG5ahvkFYjxz>{cc`uStH^f(Z)9J3tS=0s-c# z;Y0J!>AQ-xcnhs=DREO8x&j=)HZ>qA$n0GFe0u2C&a3&cd6oZjP`EaZZgY^ zwdmJwvD4)Rb^CXeYuyD`H=cvka|m{unjGn}hg-RvgL2%~R3EHKu{LvS=iQfDbn$-sTMey2`@o?ntjRDj^7XqSB0d)mQlYJ3Srvwzv3b%Wd zIw7(!N6f4}0}hDr17+mtzz5YJ9)|^zIn+g-2!i2#<%M0_m zSYLx=jj#eua*9_R-f}kWFi2&E>txRa(RcQF{~kj@2mHhl`N^d_Y>E`TiD+)}hp=o0 zd)9@>w@q~#EDYDJ-o7~3Y74mHc?KyXtG8nUI*e0%EOWggb>oHUb!%vwy1!@> zbO-^6#B##rfvcVXt;|IkJ7WT=1QqJO$aPPl5(Enag*{fAa`rZ* z8jB9}6XL@qG+bVsiaAz!`I__>TxVflUj_D%py}GOqGxnac3N;@rvcP@#+=el`OeUv z_}L}prv)+c4f8q!=Vtve14Y_nT5BlMo>D=51FdOK8t6FdH%Be`yqSfT+@JjL5_IFR z=**a{Kp#IC&KSpEo#BibI1BU2Md(88Wiw{G@GRDEuT3l@EnsExdrUGHjSb|umm3?P zR=3+{p=b9~!h!a1rtPS31;XG*; zG?-dQf(Q;?!&oN&!$twAg&sf^-PaK?NHU11(?rh189x=#)aU$_0-SqA3x7I5Sh!yV zo{yctH2zbtCqbMnlAaN(ssllRgT9yLYUT%g9Pr!$83JjGw~5}6Xd z1ZyyC>$X}(bR|0)K5KE?$P-t`kl3ryONs_?SP{X30hl9%ari?m$*t#BoHW%6S68fW2D;DxRAk5@l&Twel>(P13dJLI^&nuqi$ zHJmZK`13Wx8FNi_a$m)>oabu(=iuLVfV<|+{5f1t%^0Ar9hgC>>EMD`Cc#oJ^Ps?-02g0*m6<+ZU_v{qqX`Wv{>p>~%{{gL zU?+94hKpslsY6j+UmMYWwyFCkBYh+q(Wvg{rRc~G(h@{Pyd9WDU7DaJi|Tk&+0fog zJ5(^CofNy-TCvN)1qxi@2|a}705-c~gY0LeMQgGsBf7KrBxt+3qC@Kj9a_VT=F_>D#ZNiCQVtY84){fJ(HYQ57F05!KF>5M~nj7OStzangpRbf@!K{|} z2XKp)w%VfBg_VvoTDvJ}B(u8%K`xC#y-YkhBY|L5zi2Q^~?S%ZKHIPHi7y9d6 z4~p;gqa&GM`!Kzs?Jz=Ut3qpNIJCwEcsMM;aV$XEUjvnJa~l23rBr^QxiGsI*c_B; zVh=V!!F0S~7=zk4?qXAIEC!+L!NmppGFSuw9I^qG+L)_x4J-~IyANn*=R33Z7-%1~ z$>V~76rZCqxl?p#2HB?GQncXJaa*wtsutg=70F@*E42W)2AfQcMjz+=x&`cYu?}a= zc&!;mU%+x|hJ&SC)I67q(WzZ%%!Br|(BfLTMg4I6p8DbNy)1-p=+CpN&mEYakcLaJ z4q*K3!0aenVIWb(1-c*&y&=+tj#ov0UKJa?D!Q~Ds^Wrx|DzZ`a<#hdywlK~Z_MN} z=*~B0t|cop7`iwv(RyvbT5YM(y(6fb(|Hai^b5H<7Xp5!>yM|2?9=#oLxt>kEA#_I zZ`FuCfhBoF7j*JD5zN4&h`vD(y+f=v$#{+E6TGEhKTm`EX2X7-(&bSU={2H5ODx)P zW0HOb8+ONSoY!yZL){Z_9lnyjb#7cAjMAjZh5iQD2cmBn9ZAOavG-_L988;-3AYJB zbiitJz}*akdMmu)_-zhA_hUWC*4@Y@swOO5~HI#Z>v74pa(8d^y=4Baa~DMY|;5 zC?_aDfJ)>uI^QVP+)9ZI+D`4=7JEXM8>#&3x(!>bDmU@s0=M!0B5|AUFUIC|u@MqN z7^NKu;Bd517gh6@(S#L%Ng0ai$24^L_|{o}nzS2o2G4i_QtI-n0TE0uL@y_FF&TR6 zQ)ek1htpczndSBB_@Z@;&5j3EZ6LEG+vg+ulMDSd0$Xb`ci}_DM$w@MKn)=E!Ve`e z7Q&&3)++F8)ZL!av-U*L-9DxvA3Z#}{W@E|Y$X(k)xvSvGe{h&n81H3jHU}hSkkEU zZ_fTSxiMLTI3Dw`o;8mJ?Xkcc)wHsQK}{=tN8h8W&&R;)f}WBi6^&sBkiCkUwwuvF zYzO8(?dWb`=}*+oH{s?nU9j5+bkWY-de`>pes~e~p|8^*dmEwp(|&5`CNXyH#vXDP zJT&j_J_z?)?UILFH(V+@9$VLj=XP5TL+D51xl)Kd9BPt26tPrh-WN#YF(Nlt(LgUD zZd&vy=syqR&}I-ry1#(){?xEAI7euVge2SskBwc!-!^$|2wH`4Ex1Uxs6Xi}xQBoLC3$LVD*?T_`cU=*2LaQ%gS&@ z&0Ja}u2Xc~L;)We;%3JYdV!S%EGhxAU1wOr?-}4dL9iAL34TsUTZHk_h<1?JUz!DH z0OQcJ(xq4dE$E~pu7^E$>j^KN1F-68UV{9Iyks+FI^W9 zM;EAvgU#f4u$i3v;F9uAz$@PXrB1M8ouy9f=T_6@Bw{rYbpXZpuLoUDN4SJ#x}01* zXy8EYr$w_{>vp;?K)3V63)Af&#sx;2zX-+7SuKhkM|%a_=^6O5YH)@{M9vi(OAD^f zC;au?bI<+wZO-oWc0VyL-7il0&@CcjgZ@Vdt4jAHXu~vvHcSZGFl-sx#r#KkR!Go> z5fGQ44buqP!0!V4ow*v0?Cofg86S`tQ(LpHC%HjLIP6|MadU+&A`Czb7!B8bzVT5 z7sLO5MUx0OtJ>1gFAvN;8s>rRJaLa|#Ke*1lMu2x76QtEDyGo7lrv#01Pz}lHocC8 zNMkI7K?oTPgD*Z7B86zZEEb|2V<9?-FabwZ$3o2i$KU=}pZ&RS|J$$p7d5L8ZUsFa z##E{9UTW}z2DpGELrDh(bdRLl=HF;6CsdZQenkRU5X+q`aL?J~fWs0#srC*F1jn3I zLnsdxXvaDt8n!Xfz(d0Zmkui$_8vk}tn1aw-wS|*CjcZ~6Lfk3q$ChU2HeYk?VQHL z2n_*R?*S9n@+S@q%l;Ot;35xI|4|@gjOSrgAp@2W8&`n@cS|;fQH5dm7*)vdp+;0; zj8tMcAy%assRR$RFbl?)qTi8lLdKWc5XOS9n*o6F)BkW%BR~{n#)QDZ7xY~SsgUmg zIX5QV_GexR3n&$!XBew=$gG6k$+T#P{Kh)Ajb?f28KZj``1 z&$6y;6QmC2BY!EdQqJAj!@rdt9%2Jz)x&(eehDUOXx?FqMn`+|FH?IKhxBh&4ypSBhE(;otI-?LcD3Gm z-3)^NOW&GDG0GNWU0)Q`uf9ET@{RKc7DM9?gF6#|BC@$LvZx2?LTadiHU8eH`@k}7 zG56?MyGty(VV&=xgThgbU|Ivq2F&VXuxCPr%U*(q6&pCn2FAXZFA_j3gA zf2xi`MQbUCShvRDeT)TXH}V5CT8n2ezGLtyiTh8GDSQ@Ub^-9LA;$o8608d z|KJEmU*Xd_amk;Qtws2PND6U!y@R&o6W!%VNsw!4g>g7VJy(5S4TmHv&Qa%uJ6UPh12Yu zZRza!7?{WkeV0<7oR{LD)rV=4Y`5#92mD-fo-;hQ^m1~T9iTZl%@FZ&UK5f33?kCXzpeq> zk+OW7Gzm9Nee;im+hI}zF99fcjY|TP6s=P*~tVeG;NB+{av> zZWj~KYI>ErBx5jxq%tuBvjbn$Og8)wq0;%mikfp2Tfx$;BnoCT2Qe_)sXsE?)J3mg zMFw->z*7miaDd1SMMl~3zjUz5h10@u`YQ*kBo7d*TQ8elW7CLULz1+#m^3Lax|{$( zv(X7cAU#v@#yz@BT#L$$mY?1`EZVNKK=-Yn)96@;W^@%~MkY8+RNPDwa%$iSa%%9J ziVUDsol!$TIBAFvJ3-Rpsd!0brr`D#54;^if7e0Cmo9C}aL5WHOy3RwYj0Sl%K;2R z$*K@`P>aKI5Ig9vdPzg**xBzhFj$&(?Fi?cWpGZ+fYPQjEV1`gZv+JyU>tA}bSX`^ z5JDdmE7WTR?b?e>GSX~8`@xWb8V)}1IBQn14oXrv>N-K1W0QJ0ke4(TA69i+#inC_$EhFzVT zgwS_d=$rs>GgXoasgm|Xwx;X2t*D(7YWD(FzH<0i`q}4Yrr6*4;F7Xpjto7>)|I~s z13~tjzJ>|e$c)cDqs_vO!S66C%|#Cm4`fwN&e}z&%WD_pN#tr$GOkVMK$j_zfn+rg zj|%Yz^{m-n4eZ&GvXx7!9v&U-;gVUi8P7QMtu;$% zwwTScW(toEX&BP+O2sgmEoKTUAsP`S`M+RGfZQWr zmsTmlkS9+LG5XjokTTBgfkHlgIkNt7Xtct}Sa6EbuX`8r?9oZ-QgPj$+au1{pTQAk zU6SY3Ct-&4)&6-r#xnJWW#b((J{Q6KSErw24hW{7Ly#hkg9CVpZ<8Yo9^N2fDV;#1 z!FYldEoPw;KRWnbAeL3QHan06bcr}LG38w)Vp(LoV*)xx8*avcxSCC(YODNneCb@H z#+cbam1B+*k{oj(u&j||jt@7Lo#i>^I+A0K*};No=oJ0a|C=$UO4yc2!Zw&)MiM86 z#D~G`0@pX;R+u)ivgFYpT}OT!=>iR{1(MASFTd!9Y0i^&3Fi0@Ql)`U%CT+w1vDFs z(JP0|(+JBCiVSI&X385BqdmJ1< z7=0;OzUW*qw@2Kg85mBlT)G__I)!XgTPn9>xr6ta-pdIkp!4y-IFMlwqRn34R%RC~ z1g*5hhhe$nZZhXh)&2&C2%lj}%K~0zPs-16rpwHVWYvI#O5t9~GRWvPlFq}rjOmOF zGQvnyf{M@w;BGp#xXfU2WdMx$vFO* zR_&IIOtE~VE&eGa^+^05d=xgXMpBOi88QC-zy9(c)=51Q|0LeZ@Rq9bdB9^?LKCb> zT8IT-=y%NlHz8gaq)(7`WOrf{Q%FBVt_;(Op`18mB*2sU@A%C@belZyH;Bg%Yte;U zDp-HGr8Z}W)KCjd3xe^4S+4_^+?;SX0HZ|wq6$#{5DSOo2K8+ z%p7J7$(b`4{hBGL_%&jCa(pfG3~ReiP_D5yA>tKoYa!w_achc@@d&dB%d?Jn_k3Rh zRAZm675wOKDosqqBcMh%y8W`Aw~C+eUa&)quti{QqaWm!=@totBH~~hdm8p6sd|M& zW?1-TP!MJcPxor3vY`+);$qJ22@aVYwJdY^a+PiY3LOE3(Kf_$@+GvP;Mqv;FvgJ4 zv6jM7@O$h8KQjq5^Q!1c&nw4B3`XQK*0nIgM9Bt32fk{2eK$^SO3?)G#w$KcFa=>P zE%D#GhMOs=BA%#G?5zA`pKmJ?0t*RH?YYNn5p~7_1Ft^!*oI@S~15c{pamRdKW0a-_<|6!!*&!q_ z_0!h0gh|^TqvH|3P4%xVm|?ZOlw8}<9Gc)%zC#3FxVMRR?GD&3(MRn3KS$t1Xxyx1aaY?sg4M| z)yp@>wa59^d`V6qyp%Uy!UhqilZFF_A?})zNu`p3c^l}Hp_?%QmUIYIkMrF{l^Ld6 z>PYE0`rNrhBnbvdOY-Uv!n^}Ezj6$$IAWZ)^D<+g28@9{@viS8E{K>pCcipEm+_bD z&0308k~jTOmGb(pl8{&WuhkGKCLz!N2}m#WdoOeH@kvFuW&9^`I{&iCdf|@FKdrOB zC3ynGg&Ho-NID>CM|{rwpB6ep!B^ zSTMd5NC&#Nx6azD@DSR2zEV9*;iMohT{UYCVo|ma%hW%KNCfP~q8{cOXajXR(1z}; z2Ju8fnm|9s4@8Dgh2)z5T?fyZEQjyBiuqgpK`4jJeE>J-%BB!As&uQ zBSwhT4B=(e;q$p`KBrz0uZoUe3qMrA)y>weUTdb^-0+*1v!hTG)?V>^lKgn%hs4 z5VxO=ygb{#Nw!}AZ*=>S7bJ{vV4z6~Ap7!koJ+@o5u+Vf{EchDmd)df5`eJFcsn7K zKB@LfC>-@bq!QqX4e3q9Y>s>Hu+S3USs`F3pH!_d%xf{kf~X_-T|MW?i1IISOq>CP z@)69L4nq>?Q(@PvQ(@OYYygND5;cX+mLf``r=a(*JJrZogee5l0qF@Ak-bBtLyIQC zmJGPk1~UnMV?yCM2^L=E^Ee^P2}wtQ*XbeC9Z8^IwKJphvM!0sunDmfAoXDxEVm}U zF0=~?pXD(%#x#B6C)jOC%N8Gl!qbw&)c^)(Rw2uyjszTPXS`KSR^B>d`ASWo>tCe% z<5{<>P1mCIT?ar_ZCoEGRUpQ-#-=Lpv(RtXV`@XC(s|=xjW~ z(GwoQf`yYwrW5Bjx&jff@f3hWP*`9PU|fhaUyf? zJ^n1Ndc11Ar+VD?l2J=6U15xnBcT$4ff-K-t(6H49D%b#r!Q8Fz6Pen-ukiqCH6+e z^T-Pmyjt@f|J16(sYY8h=o4g*2m>Pwl;T9V$7z(ULyRcK89n>r=s=g4aO^_xDbB)g z5$Kx_H!H8Qzq6c=C$IOiu<}=GbAZD@@FZ|l+=n=7wZ|EZ+By*IFlyx9!fW73onf&( zk8Il1H{u|Yd=Jt?1 ztFCuIw^h#=TCZf*Zg)nC#hE(E*j19*Q9OTRrm;xZptaauYX9z`$F#<8^SzxL86Ra7 z^@}U6CXfwHso!b*R$qcXbaDN1hS6wX=`$6b;m5+2S6@6^e_?0L zVFq$SWhMs zaJVYUXP0?kn5+t&r?(IDtw5UNaC)gTrg3b`Ql|ZNLVW;ukm?Fe3GhJE3gB`0MIurG zyb&DrD*FP8$RVRl_&<;AWDbevkZo`m((B-4OjxaBV3N{;`t>c8@w%Qt5@uc2l#h4m_fUSEibBsfT^Ukz$g(WHi~2r#>Yl$_Nu|LaQ%r+#RD z`pz`rlEKvCHAtrCJi*imYX|`S+Fo3(-uVvQDD$`%_4<38xqhk8bK4)6oICoTwZ-FQ-Q>okEq6fe{v4ql`9p*T(dXrQ?`bwL;b+QR8I;@}zB z3`Qmq>Io|SqzZe-oR*-$KvD+6|L2f78jcF6M4L+H=oAp$VU0)0N{K?0vJa``kWT%* zOk9v7P8>O;Q-C|loLbg6WjRb_l*X?eLu8M}FUc*<(w&#Ow5G6F^=R(yvIOIt>W+>sXm@q5}5ebd}bWH&E z$8!N}KT_x?%bg2QxHptbYGrZ--9l|UdZ=Lx5>t_Q{7Hpg=&9japy5xz?PcvSlv_d| z5lvpvvI9QVY-5VnkO&Xq`qC9#I3!amwHVCQO6`N>XWc4!l?P(TP8N_ondx<`q}M^Y zRp`xd;83zJkPL)5*C>amH)-MIq$Aoh4fBXfnIeNT-qikFJb&TO1rVMw%*hf=cBQX?k-iX(|VL)sB=?%`b+`AD3=GKe7yNyNl|S(et-8Kh-#$+n={tVoCwpTrH?T()LyE_%SQ zj&Ng91X&KAz5`QlSZ}M4I;RB=1 z&NHBh1yciAP#}dL*y@9@U*t{*jo3LF5WZ-tqMIvr?j_}begV7XtnbOG^&lqH2Dv?pP-}*0Ecd|cfc)n+F1whSV=v&q`~*ni2NwEI-Hf#7@vt-|_Bx)F(c z)e=%cA^-?AYmvhatUUV9uSENIK>ww^-7jiJQJc|ehBob6>8Xv;d=-O3V=}mhLvF<- zn8c~2e}I1d)<0GSBydq4)wA|kc=@;%ojuclVOd0JFZmiVu(*`=n4Y!V#YMClEjJuM zj$BgA=MLKkP9xUf0N=v0p79RKyoBc>Cvz&YeIhYneD=65JG15vsp5#WX;TByxxa+7 zl%y$x;ST0=-z%Wpr0IoPfW6T}4`7K97^ne7B!#{Z;x35xrlCJB^*hA*7pkWC3~Wy% zLh;@MvDgO$cr1zlQz!Vu4or^0su_e*xkxcFqf;UHx)%J{e1awE}9nzErs)ky~2x^4d$19LBL@5d8SuX})3%$;M z?7*dEYr(ZDA}6p-BFB=M^z?;<#SY92*_!Dg5+%4Xh8aug<+(liTk+W@8RB%Xo=Uc| z17^-UpX6^Yk&!#aP&T;~Lzsg16!M0q$dcD{DaO|kQ4O*lDWLD^_ft)i9m0-Y< z9+t?`4f;J<6HlSR)snZk8t@{d_zDCclKYXAv=3kNgDex%Ut zFIWpYqG7RQMdE630hg}^m!XFYVc;5a*K_?a*Kv35Sx>kY&jXot-kddzLz(XtZAchn zGEAl1m^X;8tR~QvYzRiVE{Fv3BtT8d>m1jlqjK&g7c10~SckGC>+Ubwo^GN5D!PgG ziZ*8N66(MFXW%*~D^@L*eZ9U{zeyhj*NRvoa~aD#;8>G&Qj@9tguV~Oq!A%}Ay+b- zCOGQkC`hBpD4YiI3-90_fa?O8PcWG_p`N`3C?K%+uuK)CSL|H_ z%)KcRx4u}1y;*e+BTmzis={e{SLK4ty&{*bTkEn4lY8#mTa>#A*QqGk+6t#T#Fn0A z0%;%@!U8@=e_5eKE07DWpa9Eq!gW?cKRm6)8CF(NxMVQp%TYlBlUn(Y;mz%Ew}mfj zvL8brI&>=h=l~TaLT4Sf4p`E0RJGa4n-(Q%R>6n3mZS9X`?r>;ztx!P_dwDlZE`{%ca14Mp?Z)z=R-IC$x8}}x z2dgRt)r5xv(*ekTT7ga=3pyf3XdV(mwwK2|BHH5#N{(Hyojf(<>2_G<#AWq*Z?SXb zx>uCwc1{hq^N z)<)`t{X?XOZf+f=rN-7t3gfVK9UkPeU)Z?z!an*|iGQ6%c}>XWZvCu9_I2zQN_$|T zS%RtQ|tC`+&xY|(=2F6`^0-lb?y5E|GJ zWT|MV+CvKxn@?B@JBGlIu%^fv(%0vMYQ}^#mPW!tMxeTe=Dv|}85AzXK;eT%@D67@ zK`j6ja%AzetYAri16j1=u!Zfx+@T{F5mPB>LgGRCdN?c!GvZT_QH&2Jl@BtKlX|Qa zxafujgn}x2JrjZGc|}KW`~jnyWBIX4TWkjk^$f>amDCxoo$JF^ZL!f1b6@_5!JDw*fQqut4o(+Pq$;kEc860O(D9JI+74%^aB(;qlRTG zf`p>6pSl`8XDgucN82%aP)8RW9F`4NPLxEK>Fvt9UQ)P+i1(M9M z;9cskj@7!7`!tj$R8yo4HHBNQrQoho9>JdS$0Ca6Z1VShBxowg+T+PfQ%=F-Y%01A zCP6tR%G02nqVv@%_}|J1|e^8FNO{>icBi zWgo9UIs^4MilV{Fd{QB&Vv73Pkj{~d9HqWfzV%5;dn>OdWr)PK9u`=&@w z@r2ZINpZA-^-2dE$2Rpi)5)gLv!feSnoL>qCxaT6_F?cKE!Xw`4W0H~c7HkMQm{S{ zWIL5Ew#}1`M;2ffdou!<7%hi(mTACCq)3ToXxE|`E|q5Dd#g?X%|H}HLYTVf4d?in z22%iYBr0M^MU@ogg1{>Z1Ce6cnMexw$*De|XYE<+0d(6f|1hEwrev{mM?1Ys8>(#> z<6Rn5sR9&frP#%OOZHMkWR`r(U| z!pR9%SlTrRkS;}##TJ7A2mmE@?d%Zu5E>=RaYxyowY%sC9PK%qVgwaV%brl5-q7{s zSJ0YLGKX>&Q~?e#RI?JC1p*kF&a0+-u_k3al4-~lRXT(cQJ6z1 zg1w5$4>~GQ{~eqGtA}{hD{ykWT&i?w5NG=;s&vM1ME!nvA*lF+mul3x!k`%D0}iV4 zz9%Io@ZJ-TLV}GPA@uzKwy7C7%ca%vsAtR(kPAJ7z?rl@1aJ39fy6T$W~XH6zxk0W z_EP)bs)(4+_#WN865k&BuijPBw}dHsLjWfssBC+cUsSJ|tZh6v903txR1gr6 z%!tP-0VqYdEB<>}mmTFDMk@W$2-zDr3h@g(&Jb{1$BS+DHm@@06)X8xhlhHs-R{3Y427olJ<>yhPij$uw z4U4ti4#6McbotsQL2tNQ+Aa2^krb~~TSCuahNYsMDaL7wL^Kd!{aGVMU`X@+2?MB- z94}^AA}JjTJo%^OK1`rb%TFjQpD`3=Hh>S8u^rOoIt=cJ&RHSvq!GnFE!*JHAD6GY zG%V6Ea9ZxLyxJ)vbs!%z%_8P$)n-Wc>-Q7o`?7 zeB3~Yvk=apu>lvjm02)QvoqLdkXJ32w(xV(X)*PVf=^H`FH6t^!L2JfP!wzkj8%%s zg`>{UWkz7 z2uV~}j#6Cfm{ld#m?d^d1JKq}3(!WPHfTQVVWjda8`L67TV%Ijh+_}=F0$js8n zwIe(G1eq!jP3)|BT+fViDUciQC2Y5K4}n zperG*h|+0LAcjt%4&mPp{fR|*|KsXeGxYaXSEtzU@rq-x z{yrPZ=~;iw#!6=XUR%{SJ8Fk+y|i_Y9l8nm`IH&D4MG#XZH5lMO+pwPD$5J$L%m4+ zT*UCOOuPgdLkKtt5;Qeq9y?`oe3uY*pbL-;O9Si+2sZNc0dVnJ!p;zE;Q7e;$Vc~a)Y|@7L zw?uqq&eEC+Qn$gGLfO9Ju=yUSAF%bskiV9c*vQDA!x1P{m;*$MdlrP-pj!u`T#6Y9 zeAXGip(u;$B@pQW5?JCzfyI?{*dF2ICrHbWHpsN0%*}m<(Ed0e^pqL;Z$s4E6o@=d z(Z96g1#=aAUpcK6$BWAr+=M7oG6E42lc7vtq21WZ!lELl1XYb_Um&C~#xwX4A>EPd zO3}rbi>S2_%RY(|T6@8bv*I8HX))#=rM`;P{ay;$QAV-@up%P40p3UCwmWbY>lO;$ z%IVb0 zf^mQzV3cu?E=L##fC(9kGul7#p(W*C7mo2GA6`=a*!!1M{z*Cq-Mysztk9HYZbTox z(5#bOPKy<*37?I?YC;ziSWP))$bb^Wsl;FwwWXE3<}&7C`88aP`-!B>jC)*ru07fNjCJD0pBw) z_mZ!aC5PTg_{p<@p9JI0hk^IFT?+3`Vl0a!t|w|{&OgI_JKne>d;36r2a`W$X6=)K z;X6FS@EyXH96N_b7(RiBQ-%y53~fkdVf_(Ks5&VQ8RoDc$F~Srdy*{Q6q%&=mP&F# zy1-_Q6-r7@BMpeWdojqmq%JakyihVxv_iJ7da=~`#XvK8nOLz+y^n>E`H~JP?H0+7 zhnI;^iLNgo1Z%V_R5;m3$z)M#19oBJ z#s7reEn9vorrsi>iY!jxfx!|h+UyxS# zlox}wYceA4>(vLC==6iy=ll1a3rzq8*jp4wpfjmBbpaRPUr+4afsKHOyG>m}2#4G| zFgq$t*v{>t(ENs%4HIbBd=8O0#Dp<8XmB`C;s#J=+FF!^hG2SbMCcL`m^Tx8sqnF+ z32ftIpiaLPJ9xSAfSD^_3Lfx7gldNoQzY(>W5fk9yd#F&7mEfK@V*Kf;1EGLRRayW zf(C(AM|S}z(5KLT5v&$<*^W}#3X09r-;}1FF+)mI@FgWdnP$qa^^rw-!bAoLYMolb zf{OAi#wSwNX%SnVfwU7u82&zmSMJe6$wo;}@E{*ScsdNHigk>xwy0lz5Z4pT92`%$SY?+mt9>bNSRIy@0%H0~!?i>IS z)M!}2Gs5qXBA+%zf(%@yU_c%Yca40aL^qzlt%sa>Xx`m@u$b<(GoKY9@$}2mVBObq z`ZlPsLCY{)=rctMhWy2?Y=^BpW`_P45|l#Ch`odyv^w!7n^>vYzAs!CIyjmTSqM#&_5OhKiYwW;0UQ0Xj>}37yvHDpA zD@CxvE{R-=J)kTEep}A}Gh~8=v2Msh_fi%j8becC%R)y1mq(*4ga#oDEmp$NlPj3& zv%J$}s-@2nrW(C)`%jr#7=j#4Vd%(8VdxpNTp0SVsWHLaA1Z&aq(L17Re8@wwJ2^Rpo$XMt}=xu5#6!Gh03K;O^47vx2J^k zBzc>obY1#0o(o6fH(V({{|-Yq*uA_Rpd0OdGJWJO$R;pgS04U(`GSqqXd%R52& z!8Y?Zq16*2zA|bbZ-8%-$IKH@yF&MhoapdRC2tPkw3%28Ady%L>K_p{}f%x$> zr4UYd1NixF>;Nm8Fj)e^^<>$Wuxzq?%v^k8M6R_9lxstFLZ?KoHP9awDMS$g>J)Nq zwcVGI;DD@!WfXRukVAGonImr$C7FO21h@Me?d`z*rO+=eY@p2J&N|N)m(&1jj%F z1zf7kA2sS4Nze2k(oR&y$_H>IW&Iv#=&lSoHa^KeO)=QOK>@jkD&-Yhe!$F{tC5ri zRY&+$z7@N2Yk~S{vRmhwo2<3eq$GA76+|O;-J=U+Lj${uY!u*uHIm0OJoQmvDyTd$ zQhe+UV#`soUTkGD9)Acle7$UGz5#<fS0{JD>ats2qD#~|JAsjRXj(8}r%y^A zsxy$Yp2YA%&24@RyRfhJ`(Cj$Helku#vOs12OD?5-WmTe7dwuD_2Czd_;el#C>ggs zRFVrx|6~@5d+ro5;%Xei2HIehfHW}%$F=;+a6`sZj_$ISQdTUywv=VD`hwll-_Dm>ZGjflm2yT5yezRvKUy zniG7hHk^(ez_)mZ`)F9Rj)~A#!L;h|sj~0HUB!NWS~Dli3qiCa&=JFgGA7cBI3soz zTt<@$gIAEh3Y-q+ioeats^Hfz6!5Enu2WJ2DCQS219O$g3ua)Bo09E3Xu!PkBk+Xz zgghil4nR!Q(0_;FR7lkbr=#Qb?t#GkDJtZeP-YTzA8O_o*#T>MjkFK(G8DC}Rv4`= zhG8FyJsw1c=3ue{r_h`r$I+aiZcGrs%?avZRfAHzs*cl>gk?`rP;nHc9?`Sr9;#>K zJ_BgAl$j)s^-=!l{Ga17iYkJhtSsMKl~sJeh!eFLmko~+atw=gn zD*s22*H806(cp6pq9B(YHSql>JqzFtkZB$>qKQ3HnYB1!k>rj?Nv@(-a*BxP$pJlJ z%86NvGfIrjLX;+iC=xk7!~MCsR0|jwo#htxQG5fWLQ|`ep8*;bojF~3ZyCsalDDtspZ>GY{qdiC;g|mG z&sDZn(qHC#m=+%y(qbxD?3tG10Kp0Qt`#qbhaGP=OK-(0m!LkElp%9pSqHkEOVyR?!o zxfYW5b{tC0xX$HZ3w#Hu4_XL2^tTVoHWH=SzHzOh4gPfTh=j)+iQzHf#)I*Ovq()S z|=xKP=i7Y)Htt?Vo$jB0&=C*mlE2&ohC*#a46B^&E6#4qQA$T`!+V z$aD;y-UJYtE!7k0hD66!YDzKu7s`^(u#~J49HETQrEyWxoY|cboV$E{sKoxLxsdmf zPXuDaLDj1~36R$S>3SKtLoEI;^n7shDwrnT`n|j5)yEC{GPc z2Pnq`gDSf(({0eoxnbF6ZIm80LI^S%NzusYSfd-<*p)vp9A}na##1BOw{MY( zOmaCe-z(y?P|p3$$SKuD%zTOn!Zx5ADOXV37pv07F*psroy|ai8EvLpH`8e}(_O6@ zmlR{J>ykaLb9r(=>f0o)lTRQdaJm>{eVf#!nHw9r%yq&DKrUv?wCf`R3_esKe;v#U z(LkQ$K zi#!y_XM-4rvWHK(8k%v_n3ODKccIVp16^6lF|0v%*-~=l$FK&y#v1hE8nEv?b=?g3 zpSoVP20g5S)BxHpiNM;S8lCVheVn%9Vb%&DgTh?`GCf2(H9&@ePZgNRG$N71M3Wh_ zS%ASIe*%F4QTTW;a4fcC=ZGz37fIB{wkcI+{yCI(cVk>Km*PPRa-I}SLx?wB=JgO6 zA#l$EKv5h`q1E=hp0$oi2#i2(iaiF%ff1~-kPs8X0nR;cA&Chg_afJFu%-*-rZZ-T zXTlZNsrDIhm)z&=n9soMkbQ1d``lrGi5{Zt+m5io5y(3W0^}WJg(XyNu9hd@3RWio zIjK(@dNa@%b~+FscSR>7SUadL!)S3zr88y__n1W);vS1vU$21y5ffF>jfoqQ=0FLF z&ofZuB}xLB937|=NE}pTys@mP<%fY{I1%L9!mFS_RoTU#X~f7OrSQPylVfsV5@{5k zqGm-KDPzVQa?V2c7#TDqZ>lJh1r7%Avwljr6tFD-#9Vllj_@jAS*QWh0EiwbgLJkT zec;TG-)hk{e<BxWNgwHdi>$nVLuEfA^%Ia`F8>ls>+1ZM_!oD6)u3>O)A_H*AOF;3nSA1O zeod7&In-N_JY3aD!V?$S;#(+Rl(rz1!HB_8B?SJD0i}c33O!uq( zZ+&%1`N`@o6u(aU2XS|Ob=S(>lW2Esbr)(Pr~Og9J5}9=2$uUg;(HtGFdf$6-{3)4*5T~e!#Y4~i$!`055X<>hW^>lR1ZCl7d(Gv zwdeV#p*!Fjo_jot-&j)qf_gmC-eX@wX=dr~=r`*AkVPB){rht~&%^Tv&?-zr&G9zI zQ}5|dXZMb*RSnGK?~xP%0G$$`!_Iydv$gqytZ_?_t8N5%{bY3`Z2Kpw8)3&kR^12y zdN|(5h$V65eyYN2B&{X)CmVShQ=DABaDRlm;B3z^@$;kqha%QL5`TQnWb36{`VM0N zsAlskCfhJ_JCrrxlX`J)%pO7komZ=naQcPN3uNvL+U&*8fY44$eF<#)(j&M*(v9MP z4+t$e-xm+A_<~lU^YroUuPpC_#;5aqacadE*!1&#anFiTk=&f8kK-%)pbm1A(2&Um>Z6Oo1Yq@ItR3oTZeui zzc$BTbXfqaOmeZqnR$!QQ{#_+9fQGFTacL%FM?oP!Xbd}?Cjzb@iX zp~j#&3@7ZWfcRyT{d5z;&C$cP<4r+4Y(#bKr1du z4b3-aA2rRsYG`JkAQO@NpKmKy0@(9`%Sr%yg@DW3o6AuVrv_A-S#HFm--u8-2v8Z9 z|C}Hhm%pwp`m4=CqaQLaOQF#RkFG2<`a!MJhSsstI7YRi&fghzifOIvW5tyz(fPqc zO~k7N`o09-;ce0Pg&Jw0&{>M)WuotsVv|jMU-n1Fv?Z!U&@t2=$`eT{3~hh~YmeeY z(0?KYg+aPrV4{V1Lw^9Ec8&r%FnY(-1%l16J4_=7FOK#>m2nJMUP2`RhmwKW41EJ5 zf{Dzo%eq4FUyV)k-Bc<}QRlO{fa(B+4kU@28JJBKKOID~po>H)hM)`;9jT=sJyLlE zp`A)~XhGON_2;2DeO_gpK*=PG4tg3Ip+V9DU;e=_gL(AFzPzOJzo{~R9M?bKPlfB- ztF-Vz$qW@|W3!=7f>lAHO&e-m=!@%}u4WNbx{zZH6Y_y`ekbU4t$bxddRRD^FsV`0 z>|H2o_B*Q-HCwHu*_ANVowv3aYAL+b!euPmhk9wSjx>6C2?fd`j}vQ_RYlCsS#s@_ zT+(bcqVZTbI4hS&2w*)Czz~xkk0L8YWUN0*-UboluLCUW&*qU=@@&3`Qa|4g^GaoxUQ(%_YWGG;{lx7<5o^iaF|vQ5)X(z$d!eO% z4%zAqlS)6Z3Gu*SgnKRIfHHSt#T2R1f~w*0I8*c=<4@Kv!PB~|&x1G<#G@5*7Bl3~ zDULQ)IR%gjJJv6;u2t7Bp~clQVJ?d?!KF^}+#r<_456^EBDMcWy%3@Q)M+5=0V3Mt z*?<>AWs6Y2nQyQN2^@;Hm^xii7%h(rHUg ziP1y5gOv;Q)xh+U$p2N*rB_1HrGG$PsO-3@b}Riy@?x zbR^_th3{=hqe>Mp0!`r|4VR=AEl6-Z4V}m@aF2FjU%yZ0vDZiEF+$928+AGTJ#|?% zA8@Y>;scM0j`8*;uW!3p-6-7ib?}d-f8|*<%$IJ-k8T3>zS-8;$@vuq!E>#IjcO->J8d0!HH?3NAl#(hvbyAd6*} zs5oNT92~urPbhL-g&hMdS5iydF*d-8bMb5mL!q|kMK^`5Uqqs;Y*NH?N&`+qZSp^Q zF*uU^?{hJ@FTN6r!QD9=PgGaRz`b56|DS$G?~FCzp7=HB!Ou|xjvt2VZ`FsP^jrPm zUwG-aCt=kw`QLxRrQhNQaBoG$ZIQI!1WR0C!k*HVjQUw!KuGjafx^3}ZEPJ+$Ck|SVP(!bp@o!7DnwqC@#=mzs-q(rzGb%|e>ok4`7K1$h zCjGknhXF9SVmWzpvC=}>Q2Y;+P5aN{jW*tZKG)(t+xa%ynP6gY`p;_rdAzw6Z_?8V zZ?d){EA|<-@tl`MF^*C7ohv<_#~5a9zB#~Z@!n9gr*PyXkUZO13z3bzlD zx!FR00In2i{=|C|wKt&R6D1y14WTM+SObVoIKsgFFhf^Pw||EFt#n0vf~xw+#e6TW zh@&lyxFY`D5&d;jajivhEd~Q>M_;Vs`VU@X)*KjP)@!w=><0f;sM3so?z!ilv$u)g zzS&&|i=N@n-9 zTX%m6ms{(SE0Y6WrLGID5rQn~>9@TYhr{2Fth8=?2<5FeS0)GGJ>wGSE|dJ988?pa zhov3Dze*f*EL7V4%yp4S0G=||-}495PZjNv2^inLt?Z1q6ilZ&&3vcm^pb2I*=@`M zQp-3|k|IF2)c&vSv_Be8!q1zE^ZII0U=So)X0v z%@rHV4ia8XxXu*_6EBip2R@Z!-hme%yBrk~oI%aT%wLF{t=Z)eEnNSKeoBCD!y#l? zCKyvXe1lTuy7}kyTi_EyZGL@!J?^7^7#3s<+k`h{HuB{K)f=YqhHbPlUAVRPjW;${Z?qb3aG}FUH_bn%-%2N}_OKYs+!*o~xD?BOuviZ^ zIdkK~GI#6eFS^^Uo4@$(gYJU)AHMsbo1P!seb8-~FYi9+E}Y+V_d&ODe*N7C-KP2c z?t|sJ`5kzDaQFNo|1CYI?mFn!%}<9LXMg-Iw{E^8S5Lj_u7h~kIfS>LnZToI{C>90 zj|PY47ysPi?v6tT4<4LV%6CwV2Ch%cxr@DNHTTSS;V9-3-)%hOzV($K3(v+H&$wfK z<+JcCYdqs#^-+*g+Uzx+ahLka_rtS(;~Dp-ul#s;Hr{x~o#`t-5uQyno`pSuFVonN z`_XFbNA6q0SK4mmjoru_GYJ^vC&Mf!8_(iytO?K7G@ixXSR0-jry-1L4jnRA(+Mxn+88TQICH*rP3+tXR*pZa;0A3goKSbnrp zEI;)NOUnPSKlb@0m4BRtM4a*W;XSEa3TMDg{+{Z?#P$87%O5`+ANwV|U-;8MA39?3 zyW0_p(7D1{H+ChG;WrQSU=BrnHpD}8aD-}?dH8hV2u0xvxa1?SrUiFe9JH;`Q`HX3 z-UJ)Wu-r)u?voT~ChJXI}D)#?p7RppI%s-omT z{f3;X@@qRS`V4f{No*eT7kR;r?1K0i?DN zy;NA27W6#6auiS>{>Kqe!684r9NwO&;4Q%C!Rr0Ywfud!Is{;DxxQTe|J=O|m|a(0 zFTD2Jd!LWl=gjPUG?``sU1t+vs!bZ8q-6xm8ca$Eu@x)&`o7+FGC57=%w#5W=1kgn zV`hL@0#>bBwY(RhO0@wSNwrGx!ey#eiWV$dFI=n=AV7hF0gJa@3%Sql_g{OTea_6Z zNk6lL?-(J5~G7+4v3)aK`cMiaH!j#65=;B0ettp+T zU69|g=lVD6T!G!q?RZRQ7Y+b8OJuE3HE&qe)`Hm`R<(ZYO3&y0q^L(aZh@~tgt=Xq1!jbHUox~wWhC;Xp?>= z&&|I$`_98zFFkf{#;hhoZ7wh?F#Z+xXC~}xrcc~t)*h{`HLyQaYJrJsky+U=thO3q zQLs4e5_8NpTAm1+nXW?i^u3;30x=KdX0CSD7LMK-z7D-2fucyQ-RxMedR=gyTS% zn7^xvlD3f}5As-;4urV`yQ<(kn+_!%2xxF zuhvt(dI9CD7gD}j(;-Q%$xBkh=Gdzh5+|?82~=xx0@a#KpjtzL>NQG9g3!_q{xV{w z(5Qvmkd)kEfX6ee%%~<}rIp4zQM&-rxwhKg`mS{GQIc6&tdJHxk@c-_@5#0BU5i*+ zlp-70z&@O75x5q8(xMRA(1!N$T#L}P=#>^hWDB-nZv}J1O<2P2<4CL0LPxe}i}s#e zi=t}*okQ({$Xo#V*H7iGN;dz8+w(_i0bDU!+c#Bv8doG?$|`&Mzqs#P&wBRp>?);& zm;ldIid(yH+~0lUboY&;DgT!B(S76o^agi9?E3g!`_1w#6u>K4@} z>9#2tZFLJGL}3SFP3a*;-=MH74TIFOloSl&2MRWeyC5l~dhY=8i6kJ}23E-wB`6ug zgaKCD(m^}_J%1XWO9z{hG60#w{TFW-w@13-Fxv!PWw$OHntUeI-6D_*rzeMr5-oH@7IrK@wICCJMdQ!iqxF zyu%J3erJjO&ya*b%r{XbdWq z1h&70m2=_aP5kXZ764?;q&S|06#h~tUJv!?O3*piG+AHg?uJnLJ8KNOCE=Il^^tBt z%Nn!ZV_-Cw8m1xHwK{bLgSCmlq7LpFFr{Gy$H4hZGm@Jw!9Ggbo8pcEhZNEzte5Kw z4#@8;D7(%s05Hfcybl3Hrk@=*}60 z0%ckNIT3{XBfu2t{$ju8gU69Qg7Zgbl5AZ~5wYdWfu-#I?}sRY?T1h0ft}44T><>x z@wLu^1-#VSB=aC<_3dZXu53O5D$fQoAO6sMf}<0}VG<%qFZVSfY^_PRbeLK+;Xh@M zp2#Y%!sE+6c~|bb)Uc1|uODk)z@KvXcGv>~A+>O^;i<)2_zNyD(0wt_03+(*e0smG zNeGdEEboaUyGaNEv+ql3K5T4MJH;kO%=F)SSO#q3^Z?q+oMF_1Jh;Jl_Kp*PxiKD6 z+`P)5@FK#JHsdeEcC!*NivGebnvK{w^IYu5lBJb7e&`-66N3%Z#cxOwVPHR)OC|G_ z#0+?8#6q^ZfIL>WtqJTpWp@YKJHKT|1|#Buj%BwCg17u_)xhm$jV+>wVd4f~!)*#o zP)K}95JnVH6ciCU6an5PBna?AW|Zcd=*VtZVken~eegt9u97?J{;r+%;rumf{^qam zYF}_?-7!Buzp(7if;k-6O>aZ(I&2JJer^n8u6>G)@z{T)jltz2+RgR~V7n9|?%p!* z?!pvgGU4wBt|QY_xlI5Q@{;@Iv)O*}+WQ5`0zaGEFUU4vbX-h)Bq2(vN_Z|?CcjYO z`7PAVzyI%lf|0!yn`qGqCY(AKs_O`MUmw>g>GG(9BoXW)+ij4;`b~nv9~@M86S?O; zFbwOPAr}BMl(EX0YUkh1Q3wPR`Ee-;dLtLUuaqiEUi+-NaL};exvY5K(=W(6??*WA zSfpLGxBmWuvRBv#e_yCGqwR^?TOQ{gK02%-;E>hTo_PPSe&1PulNO9n(Zjy8?| zLroS3Q*aYrj?HPq3zJ+7uf^~nG=yT8lOp)r#P2P7O8WsFsp zFu}HJS@vyFra;^%NxaG3bb#uSHmE@H1uRJ3U>%4+;UXuD=77P8b#AYx33q#cwmbfh zY_Fc@V0+#BfdysnQ})RZIPUK;?6)7Z$KAE;HxR58dciZ>V87pvUiUV@4-5z7Z61g> zFeYXGQo6UC!GN@tv?ADQR>+p%PheIEtGgnuwxf8FT!zx{1^6k|)>v>Qz;-5J1(wxj z4HB{ktfa?VY3}M^qe4Bs>1|bmzdx=M&!uEX%vP`!UM`gcdAN@I4fpELqUCWPdZhqf zDHYhF@g0N#Uo50@VBNK70Us{9dD98wqsJM!#kzk`*z@%#Y^F9qn2D6rlVPQ-&$bM~u zTCtL5GZRF;c=BMr1-deG;Au`qWl&eW;>FFX*7l2o4Pq(=2bn!h-w}|PY zmf2F%-4Idb+9SDc)9&X1{d;_Zq&Ej02g{E^KR7zmHNS23XjZyXZZ^mAKb$yh5vCbCW;}`JmA`x;~lPUw3QSRlT+1u)^Aw z+5jvemM1_@SW`^E%>{Q)%H5^r0{5*nG|(kuU6h5DVuQb}it4FM@&`qnC(e-t=!F7i z@fCQuJ==!J`vfA|M#$z`^x^N)rvw(Jix0L zR#%k^n3==zkl4511xRVRGF`~yCV zlr6J=(Bdw?R>T6x>ar>*j;LUc>WgHtUxZBUq4BDTTrbfco^HA4?z$%JYsjdE^HyE6 z+z|^a7q*Ys5sXYQ3+jZ2mHw_H))NDd&ZW)TI0f0eaL9Vvhb)vz4~ub%rN?yv`8I+| z)Kg}f!6lBFJBdI%QB9kEDk)2*|IS(w0}Bv_*W)%hi<=AhDr+K)kM+%2v4VGcWTS7! zD|Zm>p}cv3mT7tOCvmN}pl)ygiw5g#2OFh|L$K9q=_x=l2l(3_^I0>ZPo|FY5i4c3 zwN==2u9QRU6FCg(d*R3t z4C;G)!DlD^3@0#uglwLRn7hvu?SF3c`Z@|C;!8~3lz2~RPs7IA4pV{T!CT+T;uA!k zuv&C#%)HU7bpRZKLLg;0{$kUiP`G<*wvE7$>Cz!Ec(ipPu+T&)rT`wuj|5ffSjAE( z?i0EZ-4Wr=Qu-*IQb@<~7aEb!Wgv8p&<*ckdrTOf8xsiwh^>63 z7Meaz+o~^+zFv@j9JL>>m&X|_ zf@TVir`vc@`4$2LP z-6DT-XWa}oZZ*=AyPD;sKOW9&76(k+wz8eHyj!QSNGMIUR*Oj9G8`hlb(dcY3A<&f zWRl|e>}+H&3ffbBv#u3TzD1T?VFo}!9he_h3t;}D zT_p(@0#-^%yF23%_m|M!x17Y$Tl2D-K7xT*L^l}Jw>hMLtHV{d_#mN!*kNVajZ%rN z%pUYsQ-<2GU;`9i)q_geum8=5-dnh`26tIWu4@BE(d3_z!BvzOBU45mAs}7u`oNw^ zvGFm=Km7cyzF^~995%k$ulZ2tWbfgeeg_!`1D?}+C`sK)F$SvczyufToBhl6T|PpK z(>ebhHyF>D7FH%U6?ZOUoJ-Uza*0SLZ2TrC;@*(EKWJ zFdLvt_ldxL>@FX%%^9I{^EhatYEj-3w(C3*D3x2t&&0k_ue*Jsp1`IM#QCpY9&-jY zuhQGbm(jNBI-=pqI`W-FqS3bMg>sX8B`WLi9DxrFHma|J84ot9NAZoS7e!JKllbdi zzahF0fd%y$LGnImfhfmGH z4s~TxLU%g{h9Ta8_ZJa5lw4Yh(A_2z;ZA<1YQSSNn9_+bw#@z($OiNF8Qm(&~2OIPw$V2IMwimceg)DciuvQqZ@%I8j3(mjO^ zg^3&EIcgb9rCOCO{~t$TQY8iV&s$;AgZJ{RYg^U!94SmHqQyYPT2v^^A;haQeE6ez zzTXqkG1Iza$g#4mx=K1*wT#AOr957l0^^x$OfsJF-$`Rab=cPN4yB0|rO8$)GfQko z+eIvfueP8MG=aovLR?l*yBmsbzBkZ*uu9my^abPf2A=lUs7$!IK#to5=?w_dsm9Bc zw>7J)1+c4^ZID|SNwL;G!S2Qi`37`hY_aGYv3w(5wn3jX=t~<^d!@_X)NBCL=_wG6 zC~q{e9`yOa#r`Qxu;Ef{I$A)$~$o2 ziyKI$;avHu@>i)LCVWX0=^Qc51t99HA)C;S;MBy>={uDy^$JwUirErnK&#v6at@-3WK>$XgC)`Qc1snyIx6yFq2m=f%0M{E6+QZx*CN$hY@ z?LyOUE<9T6M}Zg!+^jeZ3!MiZsyMv335seh@eyaqfN0ig)_k`)s0^g?_*UO#_N2-) z)e{u9=$oCJfmzw&7JbZrhC^pLTskrZqI`1aCV*nf>9Q1#*%~=M z{SAZsh2o*Vnt!Eb%`n7cK2rd#aGnmn6a^)~>C@zr83(8r+Lg@syTyF&p5?4$C^3oB zX5M(}@=`37dm_5|U*bG}H9UXUqpb2D!*8(PXuA=vtMD~Okr+hH=(Iw?YSxFA+_$Jd z!I+jsJuPHCZ93FnDrt=i^qI{ayCOgL#l4@$+?gcuoW67Kv-%E;Otc~6_WZ3`pPSQld)htE;uDK{ zn$LQA={fhrtd^H_)q5FipU6l5P}VIwZ`da+RPt(+CPiv{#4plu*?GiuhkJMuZo)cP z5=LQEw8Qfd@|-c|)z_}% zla;3Wmp@)m7C~|-=5sHrAQ9mh&wd>5#830iBkmobmUh9d#U-#l4ci7H#@j`Mh(wHM z{{Y{~my1fvW-av&(1r2r(eC-ARhxbl4-hw7Y1ntk*oaHgs!ey{xtp(hPSjvL`>!nc zbdF;O5-^_q2Hq(x@s8L)I_K-kk9~Hzck&gd@)fYsu`dM=R}5+aeO8tjN50C{x%TPm zNgZEqocTR-@`JKxaBPfcZ(eR3`FCz}@8D<}&z{B>T)D*9^Y1+Q$NUa-8SRo^?b6Y7 zodqWis^OS~w3;3A1-^T6VZ6>-cTXTAsN}9?Rq9RInUkv2xBNNK1d6o20H{aVZ{3d@ z2(I}}PoDvuzjK%CAx~@jC+>29YAE|( z+~q|O*tGr5ee&*$A)aab33oXt3BG^bU0yD!ssCv~8oxx$&mVM`R|tP}_M`Ij3Sn|S z2Fn^JO?c+A;iJfvk|n^Iq7Z@-`Uo#y|-MfP6n`Ev+apu2Fw z8s0&|0A{+R`~FtD65+^5nPG2eB!OMK(|RUo*BxJ3WFiJQ`!mE(r6XZ6_RtY1dUCEYOKA05j4UOInN)?N$xaeR0mQO1_ zW3D)BoMCOkE2~I43q|2Ss4I~<9uIw^Q3Tut!${I@Zp=l`d=p-kR?XH-x8rg{0TM-l zM6nGCl!QjIDFk%G{XPUBAaQmBebEg!KrHDhhG)85;L)F=f>e5bWsMvF0|c29fFagM zsw5egcglgSP*8@oZYP|-*Xy+PC=kGOW17L;}xEUcb0QFX*4rIdoKFbm0pyqXh_^Fa|rPhB&BSP z%O-SgoO7mNBnM@WeMG^=tW1whuB>`EhXpKDkHF2FhJP2#=smRpLMA=L4_R*}LcobM zMYsoRz3*t3Uh6p7*tRx7zx`7ri6rTtc?(wGAjs=$A75tlI=re-Uj@~SZ{mc z4Imel9RyCqH>*r*C3p+OwW90(Pa@I1 zMV7wSz=$XXSQG@{ON~z_i>obqeR`JkR?~xuTc+G#qOCHV@!-GY5^fckBFGvnBQhui znM$qQ1O7s44ETJRGEHp8$D&jL4fa@x;C$rUs~gZM*`6IP>!)u&I@joZvDDM(TlSxO zj%wpRGR=ahpf0yBCBZ#Ool}BaQxBlNJ_+sBjfB3t_*iH{e2CvJAn8|V-;-WmRV|p% zzHhEkLpp9~){&1C1JBP;N`G9VR^|S6Ts+-BY3!|9wMx6D{;E~0f>mK37>Pk$G2(Xx zt`4=0xrO2y7+$15DVjj0OQL;F&20&(+rfpOTk{H<%lFPY8lT~kP?M`1+8X+vw7B=ZVJPJB6w%~X*++C zd5Zk(YCE%J;3!l$Iavt2dlt>_^{=XWNEQr^)7?D#L4RkpNaW$wkRY#u{ZVmmJao8` zg#0`4z!H?1qSv?c52yxj8_)J&e5jCz++FkY_p9yjzd!p!JCP@S{>)iayF2N#hz`~u zEq*t^tCa`s8Lv5{`gv72m_1&{8QM4*F4?g+va$;@%U z==92%2dl7+L4j)pq#tY~JxF(kB+n!cnpumnp8ypooLCdHf}kUk)1nDnrY3{ZKLK<8 zF@XoR3@CV^7UIAWGkS=~#^@#JlR6~uA+B6NC5y98tC+!csTkRZAOY0uhk+27sE_6< zgnD;VWLFxKvBL1<8jyd=>SnS6vP0#WTrlCgtg>Flh7Z6k%_B~r5QVgr!V3hB#W4j|h9C`% zUQY3+gK_kC2)n8b69I-Mh~x!r{2fC|MXznQmvm6@8wN)N;>D;-)~2A^fVauVg7Y=H zVgCUYDV}8?-(??f^C0S_fWjeVItr50bU3&pF~TK`N`@oy34yB;-H`4O&?^%WD$I$v zz~uaVAmBLW%DoxA*Oi;t%%WtXO@;DQWMINUJ3U6e0{34);6^qAoH|%Qs3@Y^BquyC zl9ug*PMXGkeN z(=z0?ESEKqLJxOOoKINiB}( zoe+;-q@eUIY)}RX$W+l3hSlZ1vdC+5Bdr`4%_85IKZ7DnxVe3x7TTUvbY{x5Lc@UD z>zPc7wr678Zf-K;0Ta?1A1r%ldv=%r=2A(-h`gR}fLnm=*$FeEDKzXx$J|J@VW1p` zF7EnRiY@{h$rUpqcEAb6dlP@$MkW|{N(9tMi2J0hFN95IIcxA^E*Y20wG-le(U?=P zF{*eR)jE`XG-f;rH-Or&g??Y*ued=FnGioEygc0VmODA=0lTW^>p9%H1{}T}0EdtC zVG;*{2lF*lQbn#_fCe3c`$WdMQq~Vjp`TXQ5MreovT#*&l)>Y}DLm|I6O2=$%Iz4y zA*Cr>EO~P~rwq2p~EMIdLGMW)p-38zhvXkN5O?Ww${}$Qyv|SVs3@3VJ!TNZrP2 z913>vGPAu(zBqm?Y}f?*p@idDfk;B?Vf+Si*CF|yWR0V24ryQHuB;7fmB49^OnU_H!Om+iBBd3$Wg&J;Co8 zJ%PJ0a4`o@2yN33O@o;N1`n}yuwU^aIIA-rs5OX2CEwK?{gwh{g zSc!~uXVf%Oj<=fhA}B1j`7+aB?|}A$Vpv$Dc`6o*!fsLkHz9eUE2~8)C5v3!JSJrl zzxJxzM~DvKi7!05I_G!r26UOv&o{V1_=&>v^@%TV>ih(_%mg+SXx=QYNsp`-wz?CDSadFaP_h*9Mh|U zg@e>f?zqj|Lcb=&mwoDn{pQ#1{$gQ^QV~@1c+L3n2fgT;bCLj@r$DzL0Mn&Z;!D5s z_t?kLn>??Bn;+Cm3l`_x?Z2_x-_zP1)`5Tvlb zSgE8se8o*k@9@yEJ7IbQ%)rZ-!1S7GR~4+JclfenciJDCZnxBF%Y1pPYCfs^(WGy9 zQ`cK$%=?B1yKV>QtZz8!x?RBSYAz*wHJ1{;nx%xVG9`S{duLLxYoLp2kFtm!3O4S% z8_L-Gjt;Ny`XZQgmWo*pKxKLL901glwmdHYMR;p5fS_wx0zg&XJ`WHro^daSxdiC? z@L&<>P#n@kwz4dMRU72aA5pw)7_dk3w-?Ps-v)}n_+V7LHxdzacl z{df}DmCFL?LV5KZcF?-C<#_>U0BP=YI>6dm4MDK>p^s6WIRBRpmk}xYEC2!@NjO^-k?As?eW)9WFJwr($9VSk z?&;i;PA6|vYyWK`JJ;ydO2b>;c+i&@j1MLoB!P1mW3S51oJL*`&FJvJW;STq%^7Mf zKo&1VrqJiQMF}ncD&$M;>^2Y3GUU-745ENci{6?aLE+PfBTk(hfDkXzZMLYz6QMH8aaVool`Q}W=)dJpQOT0IqUE#f3vMa7i zc7EWU3f69^Kta!3(9`KJ&C=A zB5k8t(P=2cJnK&;x%vlmkI*ggu|ZvhiE(IOks|@R6fxj z;0@H5aC+AsH2&hr?mX`_9(qHnDEeA)YK9Z;--yn4*cV5q2R|X2UTyz&vFbK;hc8lt zi{Xnhn3~)5nM3b~*+))&e2?q2{f4NIMGJ>{o$K(>-_&MBw3*(=9Dq2IY#kT)q zu%!Ru!aw4jOeOv-{1-cW>hNE@%lG`8|4ZiQB%u~T67>4Y*IpFg4{aNFmMpC6H0R#^ z8IHH#!mZ1N0#yBVCa`|X-q^7IK^#X{g+tMZq!3boqFVGBxx_5d>1pXS*CjpdJs23W zaD~TQBW)iR)5Wq89#yF|Q$qxexQRjNwa&q?(y)K$W|svB-~b^c;wV=T;Us9ncoMpx zx?N7MX!;T2Fl7LcBh>b;cM%Nj0p~lDuDUvaQ(d;xD{A<^pZJ##{o36h{J_OgP2Aq$ z_b7%)=a37nvRESjLCfNbJ3AdtYpCNu6Z93DjIUxk<+dre+F|R3mI87*jDmn7 ztFS=GBo>SN_(YIfYM-KiuHS$unf@1IkEQ~;{S_3j^Kz<=E_*aehtZy#Q*{WMX?Kye zp-CI1_d2Z1RqIEz`f$huQxb@o#88P%Q&8N8s4SLxNyiP>c7x!sbqKf;(+JiA`VFh1 zpAuwkXmSIpBTj~gV}FBLf{{tYht(;@wdC@_HOs8PW&&M@z2(#b+LRjc%`l@;2tJBq zNzbP8Rl!yp+fw{F&v-ktziY_!6#tW#pwv4aj@#AlR~nDoC(i!ohP`3h{wy3Cl)G(p zYn*jr{G9{F8#fA)v1emR@hh*||J*QY=K#A){D!;Ru!kG*Cq33eF*-iuVJjI=EI69} zS4yaz6eKj>_%vE+_dbq({6(lP$eC!P#!awuAn}YEPxLq+e}(aso(bYdSzILj`D;>9 zz_&)d1r8t^K>I`nIsS^rZU03tNk3@(#xC45e*6uO@A2^C4c z;;lmom-v$&8HMPvnvTW%6^|#8q!KpDeg{q#0)4>lX`!z>p-=p{a{!lcvy=(OooR87CEQB~S!iONy~qTpx>Vd*RluzUqxL3h++H+&(0bF*rL@NFYZ?)1 z?X~QaH{GYGg#q6bm_qyo&t5d$s=-mlgRd`_B+)d?W8JVfe3<%?KT;=t6_uIj5Q3^a zI5V17LS>5f1qW>~-LSEI;K~6!7=RMedaYW~C~#aMbl5dH{8cS38gP5OXu1`j^3oYk zV{X1t@#npLox|Q%^&!n*6|s51L0yIYfx1Qhj_E{88AcypMhD;W5`GueXCnLL+X&D^ zncymmLk_TBHGmzDd)O8QqvD64Nb}t`1$x4>uc4roAAcR(>b!OmQ~W79#Q4@fn0TOT zj~~5HHEN-rvyaK*B^vavl`z;l9Mo{r;xp{}CNO*mTol6d0(SQTydw*67{L$1n}FQt z3DAhYia&YC#qzoQF$Ler|B--agMo_AKbRAPoh0sp5-6+}sRL1hAjqN|b#PYeloIcnu^teO$l?Q@)%U%K+yTWY|khIcYHf9djyv|s{ybV6WsC`sc{hh_;X&v5z97hD>YzQ zi$CYZ-|WMlEnhq_AK$ zwAa r`ezRsD&Odno7r2A@+@HUA2p716 zClBT?K7$L~!IOvc7pHK6J9zR){^C(w;0~Ug&R?9t1@7R0RxlcP6D2l&mJ-G+;s-4py~&2GoVt?mhavu4L}@hPep5QlYwt$O!+!Op}%^twThustWX3ZYL#r^IHezRtu!Nr5_34XI?r*QGG zdxGDr*`v64#67`p*6a)}PP-@g&6+)di^tp({ASG_&p#1bFYI9GP*j_L_Dso?zzqlv z1KX^~!Vu>f-}E$0IBxVf`TB8|v?LZ1FHflCfZPN5Oemkx>1R@;Q-f(99J7#e6OK0; zcqOES`~pQ17c~T z9Lx#A2FORr^fYQIwgi@EF>PR0kY|T6=>gXHbwnbiU#*oLw&mM+*OXb!6PUNWvzkh< zK)qJg6m+wAmJ}Tzl6c&XH4;b!Z9p4D*1<`aKr`jWj)9~Kq}yw%CZ>2HP%Q{l{S>NU zD*Whl@kCxQ-gx5Sy*^pI0v697&(;q?L2mK-0Gd8%gWHSu6nmu46tH+e^P%yVSUisS zYXW9e?pR@ZLH*u!>^@u~7j3Uuarx8YdbDSP9k7CyyfoMfR;4O}<+DL!Cq#g+xkiLhi4bE!}t2ZJ1> z+t8@(Rh`mxTtGPaGNjv7<_g{9A%2k8k+4-VrH)&~u4iRKYBWSN=;jea>mPJ%A{5(@ zqD{yRi7J&4xgUcNAb^H*`=>lpNZGVhI(Sy_W|)@}evU;nQ6`;U#qK*{BzqjfmoQCW zjZ#QK_yk)EY6WP@Ht%9m=!d|fsa&g+$*Xx;FTh0k6Wf6rJ)ExR7b9xHKmdc{@X|5D zrIm9lLO90}PT`^*-^*7Zs-`Sn{uMB64vx(2?Wg^M!QEAr&pZpzBFYKsEaOL?4G<&> zCh;3yS~<|D_)A3dJU86CsgA~{C$;h8Z{n~!7WPW1B^g*B#mB3fQz9QKFAHO7c#?3zi281^;W1pwyUYvSlti?!XMz=k;Dc1 z#FSuDy;=eOs0dQTDDX`vSN#F80itke;-M>76%+%;PGb;73_mj(0z<9{)C4HGhHVY( zvOd#2(SZsZC9pA^%LjFA)b@df>}1p&LQm&;*JdQpfa6@9U7%2ki|5Q2%B`kG;h){F7Ko7ZA_98^W=>m18 z3)EX^!blZ@Ab^>|Xlpv|B*ZFHFHpcj(=iW`17Gl9X@v^N!|{gmxsLc2)L2}9pQDDC zqwB)ekPq8R!US%J7&n|)y%tw0?Uc3TVOL;%Wl%dhr7?{@jy!0eIOzBHA^r&e8I)WaSLMZ@z5wsm|sw@J|2bT-+9r@!g;(r{g9sPFEE6f=cpMffrx>XIlpVrD= z4(~Hu0eXtXcpr>@C*G%0i1rS_`*`{J!}|bNiutv{CmC;&VSeGKGJsZ>#r*K0aNNjK zV*Xq^!Tf3826nL}mx*E&gc7)!$Zip7uI8n?B~?VX1;31|#Nh$M2}wbB7#ueWY+J7T)H+fNtkP|D8FnEoGitoiNHiD=r@zVxWZ?8U_DrCHv!yc$wgswGGIXb? z0zoVO8*d!!fYZ*UVAxgFB3RBz;s%@|U6>QLHd&O@L2dePepflnY9-=nuq|kkQbVg#LY$z>Y!IE4>j4b zM{3$0KefQgw+n#-A!-TVPtJvHhpK=q&4CU zOiJ8!keb^>(G3nJLGTdBhk^2c>7hXMaCX{R1uQ=8RUuw|(Sz49ocF>V)grw3$7=;s zLm>n1K#2|$+ModwRbaw#`{w!5j)5vQCki4bab^*rT&a>8hc^jP z^E|}I;OSo&Pn12tNLzZO#ozEm7{_*RHE@aLq53-2VZ%QU(ko<^4z&z)2cglT$nH>a z0|9BLuz|w4Ko2YjUN{@VHbT1^{&*BdG#Yd9^VeP_5LpmdqyTX`+|_9;D5S-cDGo|=Z zjJ%373ln^}4Ix3!ZQ+Zaz0n@#Rvo}r@UX+<`(YaRTQK${*6<*8_t#0CTm%0%n!IWK zjs~4KiS=*}8QAW{XHvU5^0mc(j_Bp+KXqf7N}|DL0gKoluuq&yJqf9>BM0Ul9s7Lx zh*}MpKOM$^!N+*5 zsh-Galz4@QK7)(>(&c^(;h_N}T3O-A>w{W_M#J3{^9`-HtLjB6lGtOtft(WL8;VdR z6}?aEK>QCRtXrZ)T^g?-*lHg>MPEry8T=P?TN=UwQvSGyiK~weQIaWKQOwe}aoan^ z;5z4>;?r*hu1>2n@05Ocr@-L=l_JIFk2wTJW3qHhM8pLg9oty};ZP;bplB?RY|9M~ z3j&U#aJk>_a(x2Rwkyeb=(!*2NJbh#8X-?+7e1eNi%Ubx?}i`gi&O`oDD(xC0Rb9s z5ojP*z~v?f7)Xnm+m2b%ZD&cquv$vdUhF z#|L2@y=ePD)Fag0-Z;&etBoqKdfIvivj?6$aQwb^WfUp6p@RG07QF-?=QD5Gcufnh z2RboQg^qWq1&dzDL0TvfmU>*tJ*LBCrW(Z5D0)XP!ifPxBM2K$r1M;xqQJuaj`P=+ z0q#yVt#qR?GHD3IF{^HI(z|Q#NzoviuktRsUf5(5Oqibcq z=Un@8;w-v_2y{Zj-^{1KhSSSnzgHUZyD(Z0j*yJOhoA_p)NkT3!}ogKJiYjTp(gTw z?{Fm)A41Bfl5r;IMYwF@nWy*Cg91UQ#xw9Qbg5J`H$eaZVX*lSOWaBuJOjVO=iZC( zx$+@A1zx+$hj5*opwBpxrR-;wQ3ESHrEusU`{IJKEA0GfN0UG8vS66;#D{-7FlG@e z46la*JZP{v!9gL4g!&z%nlJ%u4)CafM#tVLp7uE}4FjbXyxQmu&jcd{3a89-hDh8# zh?D4)zHi{Kpa7>&8dcs<$!N(u2c;lV=;$c^F8z`DQRMS4z*8(cfMW4t{F72fheM#)&}_9Sc43UnRvPmBc<%Yh^m#7%u){^`{H+xgsc0&jDRwHe zxCBlGY5Z)aetV`q{H`m;w@-XUX6n0{!g*F^>I15SynzWDN6=Th`7R;LiSM$U)O?^BW{RtoQC{AJlAEN*(Dl0{=}l@q zret*k8j7+#MMrLw6n2SG5WdcICVZtcnF&JW%PxV5d<~X>^eYvlo52WN#*$iv0c;6t zhL+pOOPKgXQka-ZQ&PqO2^CCf9M&<2{d0|^NYaYlX=w;C(~_NgeHB@nfI7Vf%pgIU z!v(=~H6I@*t*W#zT1gIg%G<%WT$-o=3TFY8hvYGClD5zSOyrd_ct!q30UcA^9?V%4 znqr!b1%0RaSenLfrV|lQJ5vBJ3Kw7x6N4WtglYVl_}gg*k!u>WE>X&EeH}}&g4>4^ zbpgu!0cMT$@P`+fDzdM^B^Y>JdN)AiUM*l2CDx%{@TTp&cO@W!h;!1IxkeJgqktOw zN>aFrxlGURWyt0906@~V0*B!y1fOtFJp2!A@;Q-?b855Byh z>vlcKx}%3`9Prg7}OgCgCnF0dGTnX6T;_S zTA@@sVv3<29=-Z&qAbT2&kaYkV$dAA;Xn*p4;dpwOf!e%vWv7w13sv8G@vG2O~T12 zyALeduz5RRrR-szEaqH|Ydu!gDwdq8Yyx{D9?NM(Krf=tOiv?$^RE3S{S)Bbi;)M+ z#tf!$PXk%5ptoCXeE4G^9Hu4T5rkl%TV1ka>I^Y5K`V%KG&U+Ln z1dJk2AV?x+AcD4L8i+7GY&9kUCJ_0f@!hBKdH_`UZ9+dW;ec-DL%2Ey5z!T~~;@j~tkvC~&2neGCqU8-)42|5r}@_6L7=;gi=zXQ2etM_#1t)&@e4kwP5nxKRb55F1rkqZLLa z$d_#c0=6)y`|WohT~PMyqYKKE2CTNeDGiu{EV?`R9vhO#6bAMBj=T2lcwKis@S(^@ zGo@-p@B}3=cl_EDXzq7^fa%|c)LIkT%Nq8>k766qZ{T9xFIfYTQV=JuaIr4c%J_+q zunyV3&5*jngr?_me-KFJa^K*-(@ugmLvgoRG6zCT`gQH{2)eP$4IgQZ8|kpoVo-0k z|0c5w2lZt#ZIEx4cYtEOh$;`E-8#NOML)e*+^7i7MgqePuI?CV%UH^@ zq?*jE084g$(_=dC@`lRZg5eD0Efk|<2%%^-EJ0YHFbj$e?W-F0jI5-Dw1)O(E^WUF zIql21JexULEEMYMU@6;6h7}?AaNPHbF1unVA$CX{DGt8@;>d)`Kpv@;8M9X2NQTLj z?88{Z0Eico$Trr!^@YLHkV5D{3|1Vhwk^Tjf)UUf^&1+CUjb(+E=>liVlfp7m*{+m zrQCt-*$xXJwPuNOQNxJOss)xjrJ^AMWCRsDT=vGmXeQ1z0TN)?9vGZGK|F{;1Q|oT z9V#hk#Lkut(hPwymedE@_*Yg#15=6Lo~CDENyEKHqQG>2bnXq+z`{X1*ABtg*;5!D z#buAtkMM$uER!xl+ebeojSxBenMW5?d>a%PWIc_xkEVA{!Wl`J5)xa_`VD({8otbF zDobpzoddii?A^4tBat$h)r7?@xDRh^B!!(-NjYn8lo9}bWZ!Y?@rM-oT+R=cQ4n6< zo=J*!ZU)66zx!`DG^Vj~*^>}YLieO;=imI6qc;*4LWz_3rT}9Lzl^9*OzfV=93~cc z(=iZ>0zU|NH)1bz&H`!+tgXxfv{sYMH^@v-JqRv>`e!J4zf$r-?CmqkrBB6y!tsJ8 zhcFD0KG?pQg4MjP6>x)_ykNW?PINW}_+5FVRo{?Pt&Yhs-K;4NK=BgV`&Glz#1Yy@RD)OqHnNA?e!JbL!WO-O^;HT?nyIXYqdpU7D(hP$ zTAH5^b_{^fb0NS~_y$Q&E^%ufie2`x+!pEHF5eQe$9?&2M*>6HBM*EFN9rl}<-Tl> z$Zo;Dl-;r++bvK?z78&y^Iw5Q-2^U0JREE=hchXH4(;ZYh#saDYoiLFC*G(KcFh7L zxYTn9Nk+IhNNGZd3YQ4J-@aA2W5-emB?V#Q!?)lecxdV~N*XyI*BYH?MK#RbWJSRf2`lP@6%Fwd*Py`i z9V<$6HFV)2SW&*IE{8qX*^oD9xleL~1mJa!bJ*a2_fEPP^o(BxEzex>bGxSZk0>9 zRsN%{Rpz!5DP*09A(GoAx3mU63i;(l;f(w+^g7}wd-MyrB^5r*z4i_nTIXvR{lDW{ zwnz6AYl*eN_JZ`l8gXtpUj}8Bho>7=0E9+mAdR*C_FXbNr!I8ID>`1#;ha8#<%3uD z>K|d$kcR}~M;b`&KYaG=Tfg_a|M>Y8Z(`Vb2){3qE3`>`d$<7;{P6tzQMQ^-+J7JU z*`zdlTFocr;nV6ZcUrGy|MIH~s&T1OKgi5kKhrR!;afhb=9hVXBc3lDef4tB590a! zpMLt%`8(}tbzt!aT5RyZ2X6nq5-qkGx6!Dwu5TBPzIt-Gk@^O`PmD)hKm(Ff7{D!`M0zU|I9rMdEb7`cC|Kg-(qv*h zDWt=|fV-9$aI;4s1IgE7&%6RFjPQibJwI=@VZwGd3Jc#$%Ro!#6RQZT;$%Ga5+_2k!`(fX{fJ)u0eh?>dx z_9a{N&CD^;&_|3nJU?%K3aT^EN;Ry8|M?F-bKkq){gDTMZEje_9|J-%^5Abi|NhT@ zrHS>fu8)E3@4nlv#Y$gu5iaTJj$?U0GkFa}*VE0qHjwX#r9lOF^77ocT9 zi7DuiA~Od%XPwg~wKWTUk6uBSG1qV43*+$BKh~a+J{te2((gEd|oc;ArY|1E&T~3F~GIB+N@N zt zZ;_r{#4KfFl#$4;%(M*;MlV)Io#1riVV?gbykrKB5;o4%2AxehH4Iw>K^Ju9ZyQoT zh1llN#f$p3Kfi>~FmN3Fp1R?hr zRqHdr$SH0JldRYy#7RZk)Rc{WRc{Q(!1*4ay!=9@4Jz zP+-bb{;(Is)wo_zAD8wd+OU2IMUI$ZxrhwPA@ba{noyQIZ4tVGwkQBuWEO0VK^56u zdQW^~pms`Nf6hE!axOgVx0wV)=}@o1eWw;i_Hk7!TAlYV5Ylb}6fRyD`ktq~CH@5p zOz$Iz35rY*e}JmHAU>&~fQRSvUaJq<;*4yUht$zpY<+mg)QT`%d>d9Z9ocU>>skO^ zRmu1}stgl{knc+|ajFZQO4v^wZ|G7}LaS2Rs&r+QzB?#tkgA3?3OPZ`h_1&?Rpd^b zyFMh_)3vgFMAdwo5nMO-GR*3}7b<+m-HV6KF%iAI@!qiDD^G`!iHFagJ$v?-u6rv_ zg>kdA{{}~*V)x_C>ErL!>cot_XGvM5cuLra^98 zvS{|Z&M&HSwz2yXfb1KbH#qko>Z@e>#!aD7E19s?2fHSAoMypDXmLySamY2I$j!N3 zExY2d`n1>5%dKTq8Jv84ye~2ppi6$jvqxd`z$d;ak>xgO)dG7_P1}p${0F79D3%T) zv4IAV@A%#V^XA#8g)mXba`a}?)Z>d_5l z@~`IwptDZ`KqW5p(*Ou-=KzGa03gyWY`U7GQk;b3VL+p`)y!DXQ7s5344P8~QhiZr zIa1Akpw}v;*DC%16NJYn^){H(u_bC6=`6pE-;i_}6oj`KZm^i3lc!qZepD-3UwQ&iBf`$i>xo4q zS(WZRNgdrex)@*gfq7w3#~UD}k@2JV6m($@%MQ!4L{=R_CD8!x2dtx+x+c_0u>S~z zg}RCAiv>wShfE3*UQ#kB%ROyMc5Zul~P2Q%$r)7f5f$(bPKe9aZ^MFq2On~KJ9M>-7Pi&xRbBDBn~Pfro2Q?KbHI^CZ|Etd;0NN{ zk9s>z!S+c>dd-69M8a16NV8g{4}?8~O6uOU-F#KGLMq{!%)Q?D_Lsb!%_=d8=IF0# ze>c^70mbvAr4!)J~~3*eYzz7=ID4!wAzk(Ax&E%jQ6@a0mbFW|7em z4RIN#XArB9AkRc4jNDdO$WKbQ_eaI!SE&~=!HJ`$=P1i0GqzdyI{KS1E>{9%VU(r| z^Gi|W4KB>T;4(uvUrcD*p2p|#oE&E3O_~OG;IvW3v7fCm8)sQ zr%BSYUL<94s80I;47mXuN?okqb2LRp*f|x#(lagQW(sv(A$NVTUm8|#G@(onvpk%X zOyQcQxYcEITnZpDQZbx3oD@v?nj`=kKXDip0k1IyQ~s#|TFC(#2UCJ6ZkVE!BZNQT zasXp7hL2`dus2Imf|oEoje?mJrbH3e8QM{9z>hw&z`~B26!8NKV%WCI6}rq`#)nA` zN)H$SmokhQZ4YDp)$rN-K7Hw%OtFTHI}s?cZ@;Ke9$M4BW&&GoG`cuxu-t7>(aqncg!O`|wzqXMqhwafmK}zJ>_XuyYMq%vk@Hm1%*jQ3^Nj4Ic~# z$C6-Jy-^Uvn;8a%Z{+;XbC_DgGu|lL)_~8kYQOR9M|S!1GO+ccMzv?Y%dpZ8O=|RO zu7sADMBpt!SpZa8vPHos<}thp#X!y(h1*-ao*rG|F;uiJy8ga+S+w%7Bu?s%G^?Q6S8!Ett+NeV0estRjUS6qJl1g_E83^nQ=i1k? zGYDZkbgq3J57X_E?w*&!t&qO>61Pj{g|&l)Cqbbn2CTaZdy!F0!YlOTmqAW@f=bOIZKH;kOiJ}zgvEbM0N0VOR2z1y^&6|YAOaCk!K?*M8 z51V878+K_Af0vIOPQqbx)8V9tgx~a-;x#8ArX7K9?YId@< zdtz#Id~|BE)f^dZ?W>RN-PdZ3?XQpS8yTCtc5Kf~eR5B|dHw9SrOSf#=!guO79++yjW;Qiv?oqM&|CCa*N~v{9 zsr35)?Yh3tU8A?r*_qbV{@o*!}~6ZMhi zwIh4>k4>f%W{cSadq!GydBCUp$M!ZyTJ_2L4cCrN?WtcowrBs$-m%G<*2rXQY@}6p zHz!7R*C*;X)< znj;f8j2xPo8sE16K(GJvNUPNx+dbQ=&)D>@@%o{IBNMarH`ZqkOij+z z>uCFIV1L8LnbuTuWN&@rfr;6fjhi=JvFW9R{(+I!zD>;;wOPl6^NW>IyWHN(?a!In z-P|Ibn^dWe_qKIi|2X%X?5#J|n=@lmlK{xrRC@u&Ca<4TtKA+Blu{QcrPe5=)+(h& z%ny&v9GDn6WXAR%n5gfsPqs!{V^fo+S#QlYC+mC6$fO})&Fp0T#sl@yR(;RJp-Y>y zGp*4}N3Ym({pj`e&6jN%xqQnNn_uyY%XVLXS$+4Gm%eQG$et@M+g!hV%gbLndfDzv zC&qR+N1BH&9hsPz8YNI>TFtS^y#R~)2|rdll~Qjg%lR6;;blWZukD;vy0fpHY3&&r z!jjGm4ehGW%#7@<@0h%PYWLLC#3)W%y*V_re`fE{(2n+Q!p`h?_M@})<{{pd^CG=A z>ocrZ12jQ_F&$~7O(0YO!ivS?WCchbWgpe^Rum~*2u)wBZunEnY2Y`gKe_a z7mdu#ciZH_to=-Dq*Wgp`Z4@0GoJIC#_qAnk>;VHp<({M#^E*W7yQ3pDRrU433=Q& zpp+UNnV6{WG1m!nhK6P*Z)lDj7`*s8Gc}3rbKSOP^E$)Brq(N^jKj4rP>Q%0|A2e( z58uMS{bMsTW0QN$^<(vkJ?6UW?hRw&-H(Ma-`O*JU}9`^q*YH_D5X9V#>B~Ko7u_n z$*CJA&B2l8*vMqdTzB0iCf&jq!;`LkwGb1(k4+vNnHbw+etc}QwdFGNl9!l`=8{58 zT>q*<%(3O$y!2&Pn3pJ}t}e)T(>5a$Gxg?defP-3$mD393pG12J2?XEovsNs{>=rM z(^f}!Mu8G%HjPaUxmDi0>7|=C@2|J^P3@VwVY1#lG&O5RF_S&@15-0&Ewf?sCkioX z&W}%y%(nJTHOGFYzUNUlpVJytN~zsr6B7qU4$U4IZPrIx^^s9_Kch;;ScRZ##h7$$ z8mHpg1KgjN6a^+rY*}f*jR%BR=g_WcZ*BELx1Lzbi`;sr>zaR7Q%XGxTDL5|-B+JD zP;Y|TsXTsNME`Fu#_B&QdQ)@XXQ^ zMM|j+${zof1r>$gr<8iJviID&prRAyXNucLrexrId&+`C1pke+}S>t%3i)QYi=z2s9up z!9L*rtCS+V@egb>(EoF@Us}zPvDVC`Bcr3U`+0KJo=Qyi<`>+z#z5RBM<#?F88UTT z*Y}v&$!2|Ibl=GCiMj#bIAoN1uoA29&ykmIa#E@a>Rnr1o}3I;1+AxTo{pTn!L|SC zs-Vt1JYW5+P~Gm4nfjK?z|g;Z(`FvAJ>-xDPB&KtPJiPGx=pV?({=s#o`^8%^UrrZ zKi&2GYhBO3(e?bFyPp3`*YhX4o}cY{9_r5VmUQR%db^&l=z2a0m@0ebHy2d&rAiJ{ zEXzozGxt5g2>I&`N@dr9r-<~^=eWK&_q^r_K}er}f7f$dgTYRpZ|ZuE>%rXfjh+Z& zY5SLV^>004jML{o>?sAtBYzD+G`+sk6G1k;{z*@fNl34+?;6jIT`TjJuJ6CY6QLn} z{}(+4jg#83|G?DD%-HUU`jFW_JJT|xi2Ftk*3D*6z$?ty<%D{3!@l~Y86BAzot+qI zfrXr!ZE+B@*I!?6y3e#>_3KXHf93>v@#(Bj0uOC!&g@7z%4@cR`fOeyClwS5j4&|T z-g+}rNGu+^8}!WB&(w48U+Nf=JmmwEqN>91r684&4Vfob2ow9v=a|x{ZpFe(eH7B7 z@LFp1%2@rh6B00z{52Sm^cvI!0>x`bCMTy_rdc1^V_Z+!`lM|^xxs8*^M)V%;WrMM zH$h~V&4yQZ*A3J=hp@SROr-Cjp_zKi?4E7m-u@|UxRIIqjB(7fnVqS(n>OqFrw-N) zG!ONWJ)6uMrY83qaJ7eq%$4;P_m6yl;>(P=zB#p@4Mz6X&DabFaYKD#BIN@iFt(MY%p0LpGLus`T#`;x;5u;#A{a)qyS{Ja;26d*b$!Q- zHkoUt%z@@qt3KM|%ba1WIW-GKWr<&}X+Ma{; z$+7z6XuW2BqHgw$?cE1ftv)e|=>ztyDMS8*Y8YI-c4}rn^hTGM{UhTzsI7ftGiLu( zvuhAM%^u5cjE;JEn`j=c9Izg42+#2>|vP+VFny<7D&hf z=1d5LWP;(qOwO4ca84GOV9=af^4y7#-cpI@qE;MjIJ zN~Wb_Swt%lLaWf~6Ze9_yc!|22Ce?p{l}2w$~vaxa+!=e4&nn`0a$E^dXwOAl@^%w zq9;04baj<;NZDK-CyVWhg|72Fx)RFvdI6WXZ+dk#C*z#Kw@3hMBeOkD7OfA=|Wyg9l zMoP>5>7x*Nft!dfmRz2TvAo0COAR8ix5<<+Ep% zH=5-?zeuI@RL0ov2AF3zfN2vMdf=(T$d8XBgxcpbM+j6Qs7AA4Hm4c6ET|A@XZ0&- z4`K-Ix0=|74*cp=(TVxYptWusLyrT@y=Gpo?KH5LXz@s@7GptGXLZmAKxc3M`> zF{d{GvomQ9T0=4+GT%;1)!HJoSzI+j|6ZfeJzkf*IGNDZk^Slc-Nljsu*Ktqmec6f-&usMmaAGkm)FLZ zAFWlW3Gq^`La{Te&l>6~OcOn6u4lcT){SJm$T_8s$&0xW>O_77E*DFjP)nUcP1tR^ zksJk}4aC^2?X6R&LpZ%57MHV`yb+(V=j#wM_h!xhow|`Jl?TAGt)8Xtdk{i{=I-d- zhQX)~0pC;E-2F_78&sr>k0eq?nb zVM+wEf$15%yA^*evOukk1-)f!A6C~{Y-jn`UrL)tV^!PusrO#;lfty_9JqVE2YJzzM3?l7%k%~U>aYb)~U zB)CKDQl~dzu?mi~)hwM)jp#XlU|b`U?$m*Z+~TVBcXTf$-*&! zu(#J8Fk`L>-IGr<8KNlJ{REQh z^1uzUm;pOCA_mOm0kHWnSSK7T0v%RgkPOH?vC3aZh)Q5-nOdmkSdW?zeQ6n_+bX|p zf-F|~6opHt>!A!FlvV#8Lev8&EklIPD$m7;hHXmAAX!$q(gfnHvSU_zD3`W(VU|f_ zwRg^{FP~KgZxi|#F%;7p{je~=i6txyFb!0yhMv+OJ;$hQVpgm*z6IJ^wcnF za&~`eBr~qItC`VJfSKF~4VZKiO$wb~s)>aZx~;2H-&edrDKx67;f|3cz+UD|+~~7S z3Tm77j;MP8dwsNtSthe-TUO!efFZj@0py`DD@9!?zVPQ1{bKZ?x|zxSQB!soE;?)R zlBVXCrLAr49bTV55DbMQ(b%fhYu2vo?pfcvVdL4GKGip{`JBNmTeqFNW9P16Z6u!1 z$C7(498XPLWXx>WZ#LY1?v9 z8q8kxX$<^-^sJcrsPez^Z%F=EOifL#{98N!M_UwhX^VoEwJ7LRvx1H`E9lZ@1)b_p z(5ZF>ooZ9isa6G@TB@K^EehIJf>uD#<6JJkQr4sdl&-Kt|Bz-VW`J| zhuJ#TU+NPNqhk3|4@0x8`j2mfFi+3t_PTxkh?xRmIuZIlNCiyh)Cnz}jH7?>Fq`DZ zGDH6%v)KybK;|<9C?V_1%3AE707Pwe)}lJxmr3hZ)*__3z+ut!)8i%<+wxWg*otuRWfp-eoS^ywJwmGzepfAkdYBP!u+Fi1q zF|dabLVISt2W09Kr{#>Ma+W_S`&i0S-b^HbIlyD30BI)3M&qS4ljo176I-mD&Ile& z(X7b3d<)K2p#vaeee(#DOq|tfs6IHxw55d zb}W-0PXM~JY&rO3YD+S!4r{q#H9Ik$1RN}(@1rjP$@VK0J?QYWD1qW<@?YU+W1cOs zz+sP(NdW>)QBs=yFmvA^0z}=HS^Jhk2$>fAUTazq&j9vPu#Xl1H8Wd5&@r3R#>W8% z8>Q1#88AM()i}WAXKrPs3nY@eleyXGjEVh01O%{1masr$#4G}BVmNM;4=|nZQO?yd zKSM&nhqmMikXpv{Og;ySX9S@AY$wA-^)z4<6qN*=lr>CdRfN71fd5Muq1OW}A~f8o z7U|o9Y;Kk)6jK#J#z*qW@dV2kg?U(K4}KwWF+vDrN>x?0KFH_;x=;OLvkWK^L>bjf z?Cth;RlP*LOuekd-qOC*z6NBeGy;O7xR1lKEK}|@CW@Nf7l=KNByyYH{c8S1A#y= z5DJ6?kw7#M3wndTpg$N027{qsI2Z{=gRzh|qiG!lz?qrRv=8i)p?p=dZ7iAJNbm^bE&`D1}t zFcyl1W06=i7SrIT88m=2swKxE^xYcI8-}_<^~Dgf*8QKDo!3&H?MDb5KnPt@qI+lT zor!n76k@zlPBXe{XzAUM@1Pl$0?E>;c3} zz+{Os!1IDAOY|R!vhA{Hz?hIMp;2s?DJ9L=-=%`m1(+oZ@n^M#<+?4UGqUFM#V8Bx zJ{Dzxv~NY3S!B^ZZClNdiD$w{rgM6G~fkQD%ZxflMaU)dpRHR;XVF+Zp!x6efzJv=F8sg=U#R7_4N(^QC5ETrgu-dJuA;Uf9R3d4qbEY4L9EN z@MDiZ_4G5}|HbQXOd-Bv&Qf16(%H3q!^ZOuU3=p_4}a~k$DjWGv(LT$2I5_1w6?RW zyJy433ljRF8*aVrnP;DKRV?k^usxw)bHhDfd+hP2o_Xck zN@pU=SFY*4{)YFb26yMb_ssFv*wZ^8T{IeW4ad;RIJB zW8T9Dd5Oc4C{@@8%I8R1C62GR+c=q%I5-1NUf>)eE}JKGaut#&DAIO`Nb_6+{93Mq z!+eEU?(F0nmJF#We$SG^_k@EFakb*X_qZL>JV&*y(pl-;BihAUafj3<^w`^ZCyzOw zqn)o69bDml(Jn4rxry)Ka`G~+oLeSE8qRK-E`$fSc zbV;OazOC>t9XV&=C$&zYFeMaTalYx|4qd}VY?J3z7XDQ({Gc_;*~O^bBRj>MqmkRm z@30lFm|t(NvTfoEpBL}D!&%Myj_{K&H%U%GD14=2GNtTmX%#o|g=_f26I>lv?m{BQ z9Oj8E+lXCokTPDu6=aSux1tiyBh{qFRWCHii}4=rLUNQmPk!ut!S)mKB6%5~5MCv} zByXxG`FF_wkUx-jv9q~rMPL7Qx8MGcqGSs%U$N~s$Dijb=Z7QPwqJhl0}p;9bYjkD zK6mZyMezga>+4VG=Y9Rrx_U{rJ1VQgvCg~idFiLN$n`heE!n$Pj3%$UF*Ee$TRTT? zxwW}v>uraR{L>wG-Tl?aj($gUIOjEVuI%1?=UqSi(P62kcF~d*E1!CrSI=6~)Dnnx z_HNuXFt~La$k=dPAH6WU@3PB3f5*KKK6LE(0}t;1VLJ1L3l?1>aC`?h%3+VYaIk^% zmDlr&ZH+>ku#PWlE!-bBv42HgA=%kgF5$swjW9;Nk6( zOlA7w-YE@ihy+{#$t~L_o6hNLkz2RbS618l_{Q?JWi^sr?3J5sdB@7t ztzws87dMMoP&lD*)ktHnY%kn-!J=-5U3ATjN%n9%uN00gOAI=DZT6n-x?Xv(AvP)X z*c-U@8zNkpY!_paeKK5AcodiWU02*Xns*ew^ZBEPJl8#caQ%^gI~bE%c{1E&@3FTC za}PeWOFx^BNfoPLt8aQoKJ=4T+n3*-T;Ss>czN>b&+!)uF3u(?Ul=a@-kz1y)jfq< zDxKSHHHFViuIH{?Q$Fv?fwsa69b7F>CMP-td?hNpxO5Y5=gAcn>ozSfd~2DA`K>}- zkW7}f^9koRd*Oj-gR7mlNu*3H+;YWBvWs(ZIp+?^S?T1XvR!PE7xhhUan9p7L9*3I zl8tjoOA9|(Vm~B)pgK0y@(?8EfJVN2g+lYV;m3=R&ux{#m4^Ipt9%Y(`Q)Xh&83hS zl1b^{W>Pny=r7Rwd?-ILl*>>bVQ5@WqZxf6h=(|YuHaR4gD{NFpL-b1sXpB3R8KU% z)vmU+dJnf{?i_9>cb{l)eD_2LdjD|f_Nf!0_plbm_9NlNE-i9j*{e~{{Dm=Zz1H)a z#v>a~?$P@CGe`PvJG!u6fBw~e^zy<1bmG;`-dDB3U%hr@%kf{nxW8E%Cr_F}v^Vo(tEVOZZ%dr~481piZImu2Ma3^%; zWo*NCQi}}Wa2#$V9Ckoiz=X$@q)NolnqXeW5@#okxC>+K#5UZ5IUM5z4)YRm zP?|6u4hsaz^(027$7sO47(T{^v5YrkB01#|Ol%HuBdMd-QKSqD@Htex*oH@WEMh`P z4dFS3cVR+AT#gZkxCX9)G?G;WOEM-78}8utl12Dpjwd!Oaz7&kW-0+eB8zr{y%j5Y zuY|FHTWn6E@`PY6is>}CPMMIKIqbp`49AhDJF$T9w-+Mr8a%8bF-Z`Q?J5}{2vjAm zAp*XM)Xs6?Cb`Dp=DZjf){NJRU}!n9j6FDjF-M3%Fm5F>eiN965k`sv-Vc5a|DAw1 zOa#7#5KU%*pd8H!-flWfCWR zTLw;611ClLbzOqVe`CUn1d}?lRfc|hfD0nVI!AacAR8vX!*+r(kFVzm;jwCO5vc@- zgmb$vK@t`*KBtOEK<$7?zXd2^+zUftM3B%WA-s~`4FATM;{{nJQX~IG4n=ssjLUG9 WfXk7DD<}m4Nr*>MN Result { let state = State { - count: msg.count, - owner: info.sender.clone(), + storeowner: info.sender.clone(), + bill: msg.bill, + TotalPayers: 0, }; + set_contract_version(deps.storage, CONTRACT_NAME, CONTRACT_VERSION)?; STATE.save(deps.storage, &state)?; Ok(Response::new() .add_attribute("method", "instantiate") .add_attribute("owner", info.sender) - .add_attribute("count", msg.count.to_string())) + ) } #[cfg_attr(not(feature = "library"), entry_point)] @@ -39,120 +42,84 @@ pub fn execute( msg: ExecuteMsg, ) -> Result { match msg { - ExecuteMsg::Increment {} => try_increment(deps), - ExecuteMsg::Reset { count } => try_reset(deps, info, count), - //ExecuteMsg::EnterCustomer {} => try_enter_address(deps, info), + ExecuteMsg::Payup {} => try_payup(deps, info), + ExecuteMsg::Createaccounts {} => create_accounts(deps, info), + } + } -pub fn try_enter_address(deps: DepsMut, info: MessageInfo, entering_address: String) -> Result{ - - let entry_address = deps.api.addr_validate(&entering_address)?; - - //load and save with extra key argument - let empty = CUSTOMERS.may_load(deps.storage, &str.to_string()); - Ok(Response::new()) +pub fn create_accounts(deps: DepsMut, info: MessageInfo) -> Result { + let paid = false; + let address = deps.api.addr_validate(&info.sender.to_string())?; + BALANCES.save(deps.storage, &address, &paid)?; + Ok(Response::new()) } +pub fn try_payup(deps: DepsMut, info: MessageInfo) -> Result { + + let all: StdResult> = BALANCES + .range(deps.storage, None, None, Order::Ascending) + .collect(); -pub fn try_increment(deps: DepsMut) -> Result { STATE.update(deps.storage, |mut state| -> Result<_, ContractError> { - state.count += 1; + state.TotalPayers += all.unwrap_or_default().len() as i32; Ok(state) })?; - Ok(Response::new().add_attribute("method", "try_increment")) -} -pub fn try_reset(deps: DepsMut, info: MessageInfo, count: i32) -> Result { - STATE.update(deps.storage, |mut state| -> Result<_, ContractError> { - if info.sender != state.owner { - return Err(ContractError::Unauthorized {}); - } - state.count = count; - Ok(state) - })?; - Ok(Response::new().add_attribute("method", "reset")) + let config = STATE.load(deps.storage)?; + let deposit_amount: Uint128 = info + .funds + .iter() + .find(|c| c.denom == "uluna") + .map(|c| Uint128::from(c.amount)) + .unwrap_or_else(Uint128::zero); + + if deposit_amount.is_zero() { + return Err(ContractError::ZeroDeposit {}); + } + + let msg = CosmosMsg::Bank(BankMsg::Send { + to_address: config.storeowner.to_string(), + amount: vec![ + Coin { + denom: "uluna".to_string(), + amount: deposit_amount, + }, + ], + }); + + return Ok(Response::new().add_message(msg));; } #[cfg_attr(not(feature = "library"), entry_point)] pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { match msg { - QueryMsg::GetCount {} => to_binary(&query_count(deps)?), + QueryMsg::QueryPayers {} => to_binary(&QueryPayers(deps)?), } } -fn query_count(deps: Deps) -> StdResult { +pub fn QueryPayers(deps: Deps) -> StdResult { let state = STATE.load(deps.storage)?; - Ok(CountResponse { count: state.count }) + Ok(totalPayersResponse { payers: state.TotalPayers}) } -#[cfg(test)] -mod tests { - use super::*; - use cosmwasm_std::testing::{mock_dependencies, mock_env, mock_info}; - use cosmwasm_std::{coins, from_binary}; +/* - #[test] - fn proper_initialization() { - let mut deps = mock_dependencies(&[]); + for index in 0..state.TotalPayers{ + let config = STATE.load(deps.storage)?; + let to_be_paid: (state.bill)*(1/(state.TotalPayers)); - let msg = InstantiateMsg { count: 17 }; - let info = mock_info("creator", &coins(1000, "earth")); + let Divided_Amount: Uint = BALANCES[index]; + let deposit_amount: Uint128 = info + .funds + .iter() + .find(|c| c.denom == "uluna") + .map(|c| Uint128::from(c.amount)) + .unwrap_or_else(Uint128::zero); + + if deposit_amount.is_zero() { + return Err(ContractError::ZeroDeposit {}); + } - // we can just call .unwrap() to assert this was a success - let res = instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); - assert_eq!(0, res.messages.len()); - - // it worked, let's query the state - let res = query(deps.as_ref(), mock_env(), QueryMsg::GetCount {}).unwrap(); - let value: CountResponse = from_binary(&res).unwrap(); - assert_eq!(17, value.count); - } - - #[test] - fn increment() { - let mut deps = mock_dependencies(&coins(2, "token")); - - let msg = InstantiateMsg { count: 17 }; - let info = mock_info("creator", &coins(2, "token")); - let _res = instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); - - // beneficiary can release it - let info = mock_info("anyone", &coins(2, "token")); - let msg = ExecuteMsg::Increment {}; - let _res = execute(deps.as_mut(), mock_env(), info, msg).unwrap(); - - // should increase counter by 1 - let res = query(deps.as_ref(), mock_env(), QueryMsg::GetCount {}).unwrap(); - let value: CountResponse = from_binary(&res).unwrap(); - assert_eq!(18, value.count); - } - - #[test] - fn reset() { - let mut deps = mock_dependencies(&coins(2, "token")); - - let msg = InstantiateMsg { count: 17 }; - let info = mock_info("creator", &coins(2, "token")); - let _res = instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); - - // beneficiary can release it - let unauth_info = mock_info("anyone", &coins(2, "token")); - let msg = ExecuteMsg::Reset { count: 5 }; - let res = execute(deps.as_mut(), mock_env(), unauth_info, msg); - match res { - Err(ContractError::Unauthorized {}) => {} - _ => panic!("Must return unauthorized error"), - } - - // only the original creator can reset the counter - let auth_info = mock_info("creator", &coins(2, "token")); - let msg = ExecuteMsg::Reset { count: 5 }; - let _res = execute(deps.as_mut(), mock_env(), auth_info, msg).unwrap(); - - // should now be 5 - let res = query(deps.as_ref(), mock_env(), QueryMsg::GetCount {}).unwrap(); - let value: CountResponse = from_binary(&res).unwrap(); - assert_eq!(5, value.count); - } -} + }*/ diff --git a/contracts/counter/src/error.rs b/contracts/counter/src/error.rs index 4a69d8f..4b1dd3e 100644 --- a/contracts/counter/src/error.rs +++ b/contracts/counter/src/error.rs @@ -8,6 +8,9 @@ pub enum ContractError { #[error("Unauthorized")] Unauthorized {}, + + #[error("you cant deposit $0")] + ZeroDeposit {}, // Add any other custom errors you like here. // Look at https://docs.rs/thiserror/1.0.21/thiserror/ for details. } diff --git a/contracts/counter/src/lib.rs b/contracts/counter/src/lib.rs index dfedc9d..da2e1e4 100644 --- a/contracts/counter/src/lib.rs +++ b/contracts/counter/src/lib.rs @@ -3,4 +3,4 @@ mod error; pub mod msg; pub mod state; -pub use crate::error::ContractError; +pub use crate::error::ContractError; \ No newline at end of file diff --git a/contracts/counter/src/msg.rs b/contracts/counter/src/msg.rs index dc8875f..cb76d78 100644 --- a/contracts/counter/src/msg.rs +++ b/contracts/counter/src/msg.rs @@ -3,28 +3,29 @@ use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)] pub struct InstantiateMsg { - pub count: i32, //what do we initialize? + pub bill: i32, } #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)] #[serde(rename_all = "snake_case")] pub enum ExecuteMsg { - Increment {}, - Reset { count: i32 }, - EnterCustomer { entering_address: String} - //we will get user address and names. Then divide bill. Then take money from users and put into our own contract. - // + Payup {}, + Createaccounts{} } + #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)] #[serde(rename_all = "snake_case")] pub enum QueryMsg { // GetCount returns the current count as a json-encoded number - GetCount {}, + QueryPayers{}, + } -// We define a custom struct for each query response +//We define a custom struct for each query response #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)] -pub struct CountResponse { - pub count: i32, +pub struct totalPayersResponse { + pub payers: i32, } + +//initiate balances? \ No newline at end of file diff --git a/contracts/counter/src/state.rs b/contracts/counter/src/state.rs index 1c4599f..9a8447f 100644 --- a/contracts/counter/src/state.rs +++ b/contracts/counter/src/state.rs @@ -1,23 +1,20 @@ use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -use cosmwasm_std::Addr; -use cw_storage_plus::{Item, Map}; //import map and figure out how to use it +use cosmwasm_std::{Uint128, Addr}; +use cw_storage_plus::{Item, Map}; #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)] pub struct State { - pub count: i32, - pub owner: Addr, -} - -pub struct User { - pub name: String, - pub address: Addr, + pub storeowner: Addr, + pub bill: i32, + pub TotalPayers: i32, } pub const STATE: Item = Item::new("state"); -pub const CUSTOMERS: Map<&str, User> = Map::new("customers"); +pub const BALANCES: Map<&Addr, bool> = Map::new("balance"); + /* add states: @@ -29,4 +26,4 @@ add states: 2 - how to display bill to user Hello -*/ +*/ \ No newline at end of file diff --git a/keys.terrain.js b/keys.terrain.js index b3428ae..a0ac290 100644 --- a/keys.terrain.js +++ b/keys.terrain.js @@ -2,11 +2,8 @@ // to populate secret in CI environment instead of hardcoding module.exports = { - custom_tester_1: { + testnet: { mnemonic: - "shiver position copy catalog upset verify cheap library enjoy extend second peasant basic kit polar business document shrug pass chuckle lottery blind ecology stand", - }, - custom_tester_2: { - privateKey: "fGl1yNoUnnNUqTUXXhxH9vJU0htlz9lWwBt3fQw+ixw=", + "cactus wash reveal certain neck guard finger dash tired injury piece remember never load illness off butter lumber velvet off allow control anger return", }, }; diff --git a/refs.terrain.json b/refs.terrain.json index 9e26dfe..9185c8c 100644 --- a/refs.terrain.json +++ b/refs.terrain.json @@ -1 +1,10 @@ -{} \ No newline at end of file +{ + "localterra": { + "counter": { + "codeId": "13", + "contractAddresses": { + "default": "terra1dazgw2z5sxe7hgt43p0e3xyljnu45tlzwraccz" + } + } + } +}