From b138d352ed09bf4c0bccae75fc74fb64f7285782 Mon Sep 17 00:00:00 2001 From: emexos Date: Tue, 11 Aug 2026 19:25:00 +0200 Subject: [PATCH] terminal --- Tea Code.app/Contents/Info.plist | 33 +++ Tea Code.app/Contents/MacOS/launcher | 7 + .../MacOS/resources/modified-icon.png | Bin 0 -> 129 bytes Tea Code.app/Contents/Resources/AppIcon.icns | Bin 0 -> 139339 bytes package/macos/info.plist | 33 +++ package/macos/launcher | 7 + scripts/make_macosbundle.sh | 29 +++ src/main.cpp | 17 +- src/terminal.cpp | 219 ++++++++++++++++++ src/terminal.hpp | 39 ++++ 10 files changed, 381 insertions(+), 3 deletions(-) create mode 100644 Tea Code.app/Contents/Info.plist create mode 100755 Tea Code.app/Contents/MacOS/launcher create mode 100644 Tea Code.app/Contents/MacOS/resources/modified-icon.png create mode 100644 Tea Code.app/Contents/Resources/AppIcon.icns create mode 100644 package/macos/info.plist create mode 100755 package/macos/launcher create mode 100755 scripts/make_macosbundle.sh create mode 100644 src/terminal.cpp create mode 100644 src/terminal.hpp diff --git a/Tea Code.app/Contents/Info.plist b/Tea Code.app/Contents/Info.plist new file mode 100644 index 0000000..72b54ba --- /dev/null +++ b/Tea Code.app/Contents/Info.plist @@ -0,0 +1,33 @@ + + + + + CFBundleExecutable + launcher + + CFBundleIdentifier + com.blurrysquire.teacode + + CFBundleName + teacode + + CFBundleDisplayName + TeaCode + + CFBundleVersion + 1.0 + + CFBundleShortVersionString + 1.0 + + CFBundlePackageType + APPL + + LSMinimumSystemVersion + 14.0 + + CFBundleIconFile + AppIcon + + diff --git a/Tea Code.app/Contents/MacOS/launcher b/Tea Code.app/Contents/MacOS/launcher new file mode 100755 index 0000000..b2484d7 --- /dev/null +++ b/Tea Code.app/Contents/MacOS/launcher @@ -0,0 +1,7 @@ +#!/bin/bash + +# Tea Code launcher + +#set current dir +cd "$(dirname "$0")" +./tea-code diff --git a/Tea Code.app/Contents/MacOS/resources/modified-icon.png b/Tea Code.app/Contents/MacOS/resources/modified-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a93df456fcc9fb36369308da27940d8e81d0ba8f GIT binary patch literal 129 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|tUX;ELo9le z6C_xBcBtfSz4_Pu+3HZ)L#xDAE9^?EX-nXEaH;3CfLcvgCnIw{!&hd(>54lR6^a-b aFfb%c65;v8lu`yXhQZU-&t;ucLK6VRPA265 literal 0 HcmV?d00001 diff --git a/Tea Code.app/Contents/Resources/AppIcon.icns b/Tea Code.app/Contents/Resources/AppIcon.icns new file mode 100644 index 0000000000000000000000000000000000000000..b9e20f6e68da2b8ce95e167a8a046eec12c98797 GIT binary patch literal 139339 zcmeFYWl&u~*Dkov;ouT9xJz&d?(Xgo+}#4ff*qXT5FCO83-0dj65L%vfZ%SI_nSL& zr)utx`7t$Bx9Zle-lwhl^zOBLt@ZS?wvCyiD*z^ww=w(31^}pJ-&B;OQIQCcfVYCI zjD*_TugHHA0^HlZ#OCul0D#>xnh` zPRCM*#Joj(-*0HzkPDq>@l!HJ^0S1x`OQ*-=q8zw$+zPV!>DZop07W|$grbDy*4)~Gs*5XFYZ8pribJYNV-N#V96 z^T|d%_68JqL7RW&pKr&aZ|^S~=~6}+#g%}?U*GpkKKUB#=d~R!kY3pd0r|Oi(6Dbr z*p^d_aT@zS3-yy)%Om^Ebo33S43+KhSfe?f+=QCe9K{`$oHE8K_hHD4+M8b+td{W; ziW5tW^o$1YW~u)8HrBIi=TFn|5GySbrxl-Y>8U=C?Hr%ADONb(@S{}i99c7l-byjtr zG#g^NqX)K$WoiDiP>B_~{B{QscY&0d;`MqCuI~6b6!F-a)npVAiukSvDG0mAe%#N$ zcEvnI8Dre`?$+{oQv(|+#>Ybr^dP+?(j0uUv@WqsLV=7(%Px+(7P$JkId8DoFu=&j zWa?rWiu^BUO#gb1cd_Cr>LOxork*!~9klqP3YGnc#Bv~AsmDFSM#h(=o;*M=k2I&e z05&XL&%N(+BdQ$O`0ove);z@&CI-*?GbMh}Wu#;xfG_3l?x%;B`~p#YIi^g>QS2DD zLOtK)WvmFrQ11Kvdl`<9*t~fN6FB!IiXTTEV__n%=6g3d0%7$qD6W|Plu=+(%Z9;m zuSYZv6!RM2dYDk+OV+i3+&D=zW{AGLs?eh+=jfxAZw{O>QOyt#%`D`!U)o)WRum7= z%6bOzT#=)Y6HUUcTyJ!7owMYB@^JkU+}xj#Yhu%w48+mVIfnMh!|2es9zX^#=32wt`KhwD66}$~0@oeMJVpk{W{xJH zaz#ZMHz71uuj+Tt2}-P4CUr!9&@E+292$*pSR24on5K-rj-iCLFKQ#r2fAJ@bgFlV zp1z(OO%5|fqpc^lh`{hQ^_~H0nCd4@n8s69wJ_mgy!oG{Q&bdx41b3EcD*+J6p<_B zP#cd0a15{IcJ4loN6UEPe4HSR>`(Iy<=+_DfF z1|4&u-gq0PDh`PU@&?ZA4d_w@<`SNEyZ$wU%vg)xz#II;Vh-imgURg^DT(X8l3Fyn_ruwvd`$YIA$ zpvgdIxb|o1R5Irnfvw28Z+ZlYN>;wl#{CuveaRKWj zP7(et%)~ELwpTcZ*MT#|`Uh}kswf*BVd;-zdtk^m+K)Bh@bD86@gGeB9o4N+;Vu=e zVAyaKd3lD#MRY7<;McAALxyOaJK<`0`P9Ksm1!XPK6USoS=ITEx((y-M9K!!UvC5T z1wcu6ux32BLbBNzsabjO`a+O5wryGY%!fT$bo0KaPWDIo57yhAiu`5KzoQB4CgF@( zm#T2l;^E>A_?X2>Fx>rh7^d%Yx+r@C`-UD|S6L{P zH(uCH+I3%huzBry)d*Ypwk_GaXa&DmNcIb!GLCU^&6TRJH8*>Wu`tpnk&uw!E+w)$ zmVAk5Xl`nX`u$rLB{oX^2Rndp>8pR6L@T>mpVvXT<|W`AQ(ds_{#-_`Ett6Ps5_wQ$3M;dBLhph%A#YTuBiQiXV=5?bj z0P~QDg3wSvw-^yK-F|F`+O(+{kwWFiLQq44R`|_O!~vG!eu9S!QHrrA6YiegP~c7^ z5ObX7+a0=;LXrBb=_B}0Ai>6=Tk}Ao$Mn4Hfpru~^YXvKi3GSSk6SSzt*4hcVFpWq z`g-0IH|{7IJq!g730l$bQy`44J@$+~kMlE7wsJk)ps+j;&W?Qd#N&0$W4UknIVCJ{ zPE&KG%|#Th_EQv(Djmhs+1alM^a~;s_uidiO|l_S)Z|XTu@gFK0Cf2rhsYb3Vhdi)Vv%=cmf4)wFS;5jYQxBE-p%{MKxLl^AK*j~bah(5u)mm223x(3d-8>%X$P}g_~Mk9B>4)hp|^H49n^AmR987jSiS%y*#8T zf-hFF|6J5Fq^71#@bIL=IyImrquTA;i%q=Cdbs;A`yvX(_)bqLIQh}vl!zr8E{c#4 z$J@zVOKonV!5tR**C|l%Qf?r3kZm&hr zm}1pn*n~xgm42vqE?TFZvaD<0-1yaWriG-?xq{>N_6FMqYHlB&DON^E_b@3~0Er_4 z{wEIYB43?b%snqA+znn|=z3g-h#&O}e6sSP+vC}T)5Q}9Xy`sKu#JE$ux5sU#mHjo zoyQIJu#R9y`d|2{SIFee zJ^$bM=znE=1pU9^qyI=2u#=)u1c3LI{~aG0*hLvEXd2$Gdv%iDcnbKLACEP~oGgA8 z%aN7S2qKipWy+z|kjWuK2cMVXU_OV5Jc)>HTZN!&#;f>=5YpO$wzxPH1J?wIzi;P% z+c{?-@gBHovl58)ez(y$dEES%*&OToPw;k?eZp|(LejV%6Cyfk@E87Fm8jqhY@5rA}dPIW_5DX9$5t1e5$%1)< zKL=-1w2cEQ`UBOL8tQ<^;g8LyO9UgSJCq(ShCB(C5eD;2r}uZ_yQG^Q*rA(V zlWRyU6fgkxWXIDa#tS4jSIp18W)t%cUg8-E%1SISyq_8m03)a3^BWR(+xry9KM3SD z2ZtUTfxv3H(O(3Bik~pjD{k-y28*7;QaSJ`^sikg-_*;3&tE>jNeXIRILo79%#0kp@Bs*9w-Oj84uX%Ig| z-dCH&RffOd9G|b}>moTGlWHzhRS>N#5p8EKTKObhXk{)?`jn#xnTRw100hq2>;I}9k0VTNM*#X&L2>9Nr z2fTTJsmeJjfsRNdp0cLJY-$XU)iRqmbn1uRc$reMLX`02)ZXfF|Lt$}#1@p3gB~Cw zV6w3m-*;^GvTAE7+Q}Af4vK1bk;z0hLmV=$uGR}*>+ChM^_JiW;Q$Rkyhv5SM+=uG zE+OXcjZU(B#7uh4`brJg*TX|+$*1SmuySg6!;))ba%`5QQWOC-52$7!imhJ>3R+rP z<`!^m?i6OIcY2Mw znO$&C^+Vp5x<*;onfVM(DkOm2wbo^8T5`C`;?bHNm`>=pNFQ=5Q!F6#tuAdFGqJC} z#1kOR1_Kv6C>PFFUv*(?gBcn7hkPH+jaS?+Z<2YGv4LspVU&zSgQ3|=5}epg;|UVF z-;4S2R&e)^jLIb<3pt)Kp7aDZzH;X8t9RuRHFhzi?>sCElco=F_qpjdKx72Qf7Rb0 zCU!5I%17ky+p}V4knQc@eC8+MJ@k=b9+63KrB*uAArFsq_Y|v&y|%U~Nj!E-#>itb zIgM_X7>N9%K3Jiz6;VVsKCf)z5|`5Q+0gu0vr*F4V)GAn4a&e}gz~5TRmJ$*m);CX zcTMw+?-VQVwmWcv#-e{i<@}8}fUZ;q6VR5x;Mf0>HN#xsiLgF1f(WF0rJE8*SmB&t zT_n)4HZk@{Bh3e_!HDWvqhK+){@&BVMXrK_pJ1xPi>XRUK5eN7p|h!*C3FOM5UCXw zhhY{nHP9l0K6o9Ufvw8WArzocI<1m%SEMmPe7`BN{ghi-gj*Z5%NO$( z417IfHfk-=MNSuj^ZPSt<8C$B-+VSrqh47C)-!LHJ-@5wnMvtJl#VzGuIRSuH?`UD zvl#x#nWVWpX?O-#QX`6PDe*H73ev)mO}5 zSJX;;k?_n5FSr0iObuDB#SlfKew{tGP#EiH7-;}#cq&sciIA^yjpLt+b=>}r1cVP6 zjBO1KiKAmn&jVe_H2uPVMbO#HzGp3`&*(ifA`S`^$!-o@ptnL80aIMB8l*ZvCRxbz zU;s?!9{-`VD;R)M_A2J}n#v4kY*TTz>6i?3JdU08O5y4cu z7z!mO$gGiw?r7^i$MFXm$mp@D}F zds1o!+}ptc*Or?pAF9Dn#(1xP=cL(f#gMt> zRr=@l_Nmi!b9l5ooD)}uihF5~sk1G*1q1z4Ns6=7mFGB~ybrm5o(x4{w`tnKBM-{5 z?QYK7X);o-==$xIb64#Q#Rqg4^0Gy=M_{NP17sWaK6}0zw;S12ZtxW-gcyWN1b-yvVnl|0q0Nzc5bBrPT^PQBc z6jRWpE&J!tF2RI!9$?nxr@jVvo=BychJP6$FvN%BhYOQ`#NDiLEW>{@f9sLQ-*pdH zZPz6vV0F4f*f@&_r+(;R6gNA5`TGfBOr8zLHil$XNv`$HYSgxr71GA*bh$eBYnf z`dN=@vLlu^uRL=K-$ck1B^Ys3uEDSkL|X56r%$ zza%e{3(A60~u>UnWUpp$KD4Hh}EWL^Hmh(KF!aTr`T2q!+`tvQl6XZAK#f{!9v+5JtV4-&y=#U?j;z zC|1YCa(-)K$>k0S?*|QyD!T8V_bq&Ui7H%Kx%C$B1omQvP%Z2QD)%95g*yYUj$~f? zI$w-XFB`vH9CqR+!~P=`IA65Vs0rzp^g177sEPQY;RA1iU$eF8f@5Hrn1~1bk-OJJ zti0EjY4V{QI%S`}m-wvF#MV{dNhXX?|5IVW4f`CK+E6TwlXk%_AN-i*XS_;^BsWX>+Yzu&-#w*8`ARn3d@OuLk84jpmaCW z;(}=t@%U7`e0?l<4JK=YAyEf#o=UM4Mj0`g>W{CM9U<8K%#`@H@P4;?M72-4*^lt; zyT$L_6sZ86-^GXcY3b>zF8_{>;{R1lC?ahk)9717E$i1j&1s(Mcg`bOy&N0fCC~*7 zc2~iX#g-irXe;}!snz>XV*=69s4h1r9(%1Dj~(d_&jXdhOxc3xkT&ysUfv`Q)Pu-y zgyg3#)_uz2&*1EWebj7QZjjLHzLaV3JN7 z>xYNur{CbaLB1CrRih7>fQBQoR(pfP(I8kZug&#eTieq}tl&t_C!c@KETfdMM6N%m zG2}v-UjHV=?h$Ty8eX+!F3r$g?tYIQuATIw`;yj`nCVTr!7H*RhfxmYdM((Nyk?9C zjQ6Ze#T2v5lgF!R__=XWMKvuaznT$4@G_iU5IQ``&s zzWSKL1#kqxz&yJgcZ-*tzW&*^Xnr~8NsK@J&TC52>Iqx%doGaDtf3Z;CxXP&SR-9e ze}gYX8T~g(=jFs}u6*~lA}Bil+$8*H2WuL1TZ;(jLia7({c}Zn*cubR!Ecy^Ut7Zs z#hNOUwdR~WTL`}r(ma~K46zsSJ>G77prm}96*-1y>7YkOjyx)#FDJ#he;~Bl>ooc* zd6Is8#xUy3{|v1xrxJyrrPP!fPwUKSlDmj_&FkFY{epWBq81sFTs8)}mI( z&bJp|KcvYzbH9$~1<1q13CzXPH7EG>(zep<1UwdD7lK_1v;yrt1H8O?OqEHG9&3p; zZqrtd`=ysVEJYug$J=Sr-Pg?;yUhw^mN}-`l#^{PipN+*ROnRGICetrn39W>#D#kD z8IrSK{p^99i$(C%5An0Zu544QmaWIo9BZXff?YN^D{dzxdf0}BdgBbvME$Nfbz>$b zMfCKQ)9KaDm*r2N3=LJwt6SR`%~OEb%911V3Y*sRoVMH*stWx@=OCa3(d52I6JeP@__v?3vd4OSpf|_)F`Pbn zetur9c>Awh1>pzJb*G@(!?P{rVhamY(uRwd7sGcsJs%TeeQ||+Zyxh)yAvllTWaqB zAd3^Y`dDH+rR=;rB+BW^s)w&vztXY>(y+4P2NKlRz)8xIu9SbVVud6Ag^-qyxJuZW z?kD+UK1G#hM`}Vq@Oh#QA@Gxe>8aIVGJ<5}12Kzcnw8dXLDlv6^E4av2#!Jm9zP@v z0c>XKCxhgZ&@-DI84LzsvFl5Cp360TFC=xaY&J3%b8i41NbOP%yr?e|B%9*K@{B?S zu*3hw9mn!@`eXkfCtZENfcgM2Epq#4DWjArs z6>a#b*CW8+B0{~t{qpgU*H(ht8YEq><*uHKLSY{UA9vqaNTDV%#m z_mrSPfn#ujf*VLg*f7p#|B!_iqOh8k$nMlx0FkyY@}{Th@OsqL%^PU>j=7n7CUFP|eGz$W&-u3(M92?ae9abrIOk1~r$%s>TpZXR%d+kNJlfQCOwsItV>JOBYjW9hg zx9OCPwb-l8UMhFgSRx^Maen>UjkzToA*HJ~U!hC6?~jAhQ@P=5>$%^dMOASgVl5oF zYmFjVJ5IRbfIzVm!y9PI9qlee($~~*vVEtO*8HD4w z*-#Tro9BdiI(E3TXqF&`TQHNe0yYrpejHci_Y$mjyg0{j@v;aT>(V5~UE?8hgW{-t zJ84SoMARDe3qdzT44RAP*@@8_C**q^$7j@Ie1h`NRlFD+udJF`h-NB1)vIH&`!|=y zJZPLTdPMHy#2??s^T^y@`pE{SzoRnPz^rnuM{BF29=Qq{`uIX;@lb=763%^(jP5c3 zl~N#XKF^!VG+>C4rf(q}?IuF5Ggi08YJs7mM}TsS?8(!$3;x&y=}I>*W5&T>^mo1E z`;u3>ID!oa=)zUcYS;h09?xhI(KTuiK+5h*32TlyeOWDQ(Yz48nWHO|F5OQ)*Qe>E zF`+SEf@GCid$53ZGQeb;3eM?=SYI4#^y8TFq#5pfc4*>W5tz?LWkd&735V&0wpOZ2 z?{e}#5q$~#)Dw2my(ldgFgm~wTCF@i9gW19(DK2}5cgt~B7&J(bq((HIAG@W+Z81M z2The5i|G98$EFk&RLTaW8qsPx;~{q~INyV^b%<{DsZ7tXPOGWay%bY1@^h##E9L2C zvy~ZIp_meRlTSMDyQh{hh*7UBIu08VGOeitR3YOj z%b_xnN>X=qKls1*wG}{s1yZqN=sV5w8;gb$yJEZMm4m9@BLPSFFT^pw{VF*Sinx^U z5Pg1_HIN~S!2tN3K~bH=RIY?Y%$Rqii3CGW-&?z8L~7|%QHi>)?GS$Z)s8XtWoc7@ z{Mt5Mt@Bx66^WL?tY+9}AT)oBI&?x7F2pAXyuI(G5sUy<57JcF8B?&)PJKa(JX9#% z2m)C4I;(vIbPz_ zxGK`De~n!3bD@U=q=Jw-!h0*poK>vp3=#E3J{v*N=#zct0At_oE^4AIsXJ+i{JG2~ zcEnbAwy%FbHX@+IhnFUHN1XXW(xbUvtAT~+Ec;@IV1J)d!jxMgYFyp(k%y?KwvtRB ztO~VT?HY5l=ASV66DPKjs=rZqNID>b3n4r1zjvY#h;&BjUh4?Lk`JH~@nD8u)c5xy ziSTDpDM637MFPg*p>f^!Cc%RkB$9ZNivd#s=$^{p?e)>VSVATWXUqQXH9Z6?^a;`P z^^NJ?@n5v>0c_LvIh&Pa>^eXbm;y-7wGZq{NP_;qxI}_6@BCNR(7Msw&t3j=g#ABA zjE`>-TJ-AwPZHxlu|go=zeo&ymtU6uo5c8EI>-wI{0|c2KavFi2?`$9x7a+v|4w4~ zB9>7N8u*QmwR&uZi5g&jW_BAZ_lU6C^P zR%DPDiUuMvn#^TXR^yjb=}*5@FfPN&G+>pPz}$f~u{jQ}B#hj7(X0865Wu)e^nlyg z-+uQ`I6#h03XY{XJngmKT)M0IlkHLh0aCL^y-0(fmtXQ3g3*Trz(uNor-A4>ta#sK zqXFR3)$>Zb>NW;~Xh9E=3hJ^je_TTczl))G)Ib1OUlnPeHoDagKTtvjPy;lvQ^hu& z5}5CX-VE3)E0W@&hsSh?wx1Z8B!UWp4{~sqFpcbt%v+=X2PFA@f7gT%EkiM~0t9Ei zvukv4wo*h#JQGad{Rh<{;Xs_r51K0@A5IXe#GhC_cXZT(V-$cK=$pu2@{vk>f<>gz zdBA+a5b`c|22*ZI41ktMc=vv3QN9QzScD716M5+6no34lA0F60ASaIPR=ax;i! zh63D!zGM?()LdYZ)6Vcf0W@#BOjxyLF)}NJGw5{X0PUvH4y|?qC6rVW)c5px_UH5% zI~a?0wK4~0uf}VaCLRL_7lw>@=}-vY#AATP$OOO}*kNL<#TZ@ha@$N_&XOwd#JVIm zi+;x|HM6Kb4=@8F9I@xyTO@36`w=Ckt3CXoYx6h%V3Ywsrf2*7&V9nL;;kiEWHan{ zt`wg`tR?`}p=a*+AOXVBKtKrihtP&)*ywSKc8XOB0K87YdpHLFHB>ARJGv9j$A;Ai zYz}0rna|RbzwP|>uz1eck=VXI8bE}qV9uK&SMA%IO4y|6q7yL>JNU2a%H8<^(#GX0 z2FOoQC}Ge#j-uK?A04m`MEVBMn>4B zhyG{abF#B#+JtC%fXcnZ2Ahl)l{`)qLa|ld1nK&X0;W$05lKep0Ss2AtRQ{Vz>O86 z>~DGqTX+|yHOa%Dv$tOV{?A^EaHe7JfzJ-JTWmQB?;sTwj2Xx&%=noXrWDT|wbEIt zo|<-=wN^HbpB9BkC0*pqoFSe(LsJnqZ*TNIHIb&oO?A)aT|WQ*bv>u+%@eOW;{Yc@ zWYN={?VNq~3JnPTU7Ly8-jn|ytUwA}fGmPZ*9f>Nmb-Z}e|ckS-$&MsMiGIudZv7m z%l}#JrbYtfaV!uj;6gK-J{lb%1PT$MZNg4Putti@c1I6GBNP4;Ogp^%(8B9_qgjfV z*;X!wm?|knF@C^o$jY!#k(MrLQ_Rd$_nMQIMWAbB5uXtlEGYseV>C7BaZ2VM_hJn# zC#ST~1oZU`+#pcJPoD;STW{rnMJQ(=D<*&uFfsSUXnO@u=ZCkIBuUPVK=Ub@l2}B` zPU#DB00R0H0vQ+`UM}$aj=~A(DzRo@sWTd`3rjk-SV9DxBVF&jkWs$%eu=fP&TS2Q z#I8_EH14BeiPA)x?yz6&htDWMdrb-jJ#{HfJ#xSo(FT3yjPER&Y#AAPD)VlLvtO8V z0<_beo=K4U6X<;JT?^g+&J?Oh;F!w*v$huMyf09?^>BV8`nHyi#_oA%*S`h0M9&D> z-uMp_3W^zK(lP03Hh&Zy+iMbxU_gjaX2pPLHwT9`dwWM6yQ32v!#LU`RCT@1!04Ip zg_}M?zeD1%dHIj^);Qo8NK6V@^eO5;_O-n?owfL0*mEWI_CWAL6%8v{)!tO|Z^3M7!wO_jTAQpW<^3>39OO(=?1y3Bj9DtQiu2riZQwXQu=Mfw5^NDnJ<`@dE~T74My{*p!380vN{%Z{WOIA^fm*%AXBkhv|6rbr2%Ynz88ze=yiV9e zj>ZM@3?^$vCeZ^zn>p)<3iG_!QiH-T5u~Ka9={NWOx3W*Z1u?ui_9tYt1AKXXCy*T zc>FG@zwFkT>Xm-$sYNd!1qT?q9Hc!iXL65fA@T zy5nxn__>!-xQQ4!)=u1h`m^m^veQV*V$uwwN&Mb%FGUNLwz=LMMGM;#iF3~0Y8|mS% z!JC%Tr+gE@!e2?@U82R|7uu;vuh60>!yvRS>^j$S!o#0Rd_%Kq9NJ zj^D6G;8s})*+xM4RbSGK<cykWFL0uJV zKe!mvTM3LRfSJn^x!a`-rMF`_au0@yn7wFdA6R{CFJz7Oh9?M2cB^gsIxcWsVCD0h z9-%XME|U(Sd(^n(6}2w8>}!k1x5$rDM!#BQLFOrpv{n*U_l1=NHsQ zH?zc!85x|l?6pE3?RAuK@*wB)5uD2l1}lZ(PlHb7wCW_Duz;R=Zm2^!i_gGpg%5ta zl9^O6oJQ`|=Ca=g4%A&`kBto6)mGJPYdh&XefXSlKxKT`Q1fLq)z{)MT+3pn&@IsVs{g%q|-R z5uqtnlt2!!Mvnu+;iL;FAZ*{>jKlvwl_JcYa71M^cakb+rDVQe+3=Ek2ax8)&wLlJ za5f~#Qovo!t&`7R%A{9J(7$S*kNeN@E_7b=It%hm7Ny8yf=D`gj`{*a|6TWf3KSw< zr*7njPA}1=fHzkQkoR$jKoc;c`ZNcp+fRXMY5Pp|sKs6Cf$~^|E{_XahMnW{jfLn4 z1=pp8S64wzaPO>sAMIRBlz*_*&U#|69o2ApBv4P?H6cL-jXk8Nx+&Sy^EkSp9eBMX z{ME>yUD@y#yIQApVSau*(rWTyHIHT?+Yt2@OCgOvHhXAR5Vjc`ASBGN^mRbhR%rbC zMQi@4;pBzSbsgRE98Ow=Ly#PZusirHh8|n6ZGp`uOV&k_bpU$rPHeM^jE)z;YXyF2 zy`_(VHR^TSR?I~cqXW1;FOAZ#erFr=cmLXQ^5-J|f|Mg$9|^cYsi+4Pq6^q#E~w|y z{0KG2GBWuonjl&^|af{Y^yQ+MkApVGwn2Hcu){k_M zX`9eDX;(r`dj>vu@_t@B0H=2H@h)J9BEdSfH-Fa2Hi+Jt>+Q6YK#pbZSugngY$5k! zIYkof8w8&Lqa8>VWmy&f@#m&`wI7Hoi-NkIiwP|asS;bZx>uR2w6?fWALrdG#K?F>3 z>{+`#NVA9ueok)qnlu@Tt8%Y4z3|$HvNW>(+{l{6RWOb*6I-);VxHtKgbjU!nPz5t<(+c!xNIWXMtge?o(jOh8o6Bk&^HAOPmwzDs>tBSiy=j)J^63Mn4j5of$z@y)o*oj88tl(i z*EXu^OK(D7Pyd@;<9tj-%d5bhGWA%`9(uru}dvj;NE)*5rda>7IAX zG#hqnY0PE<`;ftEiRs48$?2f!-#%@yqT{r(HpnHq=Nzpa=T+!;jDUn+I$4bi*iW?? z%#Z%D|7HHtF5fy1IYl`(`?Xqf%;#u(OMHS=vxQnwvpE1A5b@h0SHat z52$Qnw_g8=X7f6V+1p`u$=)Rhg+jKM>lYyi!;z)%_ zEywV%=?a7$+eZu6M%7v4g6SkgD4`@tJvPv54WQlRm(Y*&FMj9mb=d!jD)F_kcA~9Z zaxa`R$!!MLBcy1=(f|E66Tf*y9clF9)}sKEGIdk$ggBi(wkrN4a?@?4*?D@pG z*SuEPa=5FA5YopVLX1?gb?xS?4c`@rI1&jv&e$1*H>Ea!&W-L?{crq&7q6D6J**IG{J>(VT6KzluawmP;z}>cE8u zvfvzf1CG+F-(;;2JDzu4eby@1TaL?c?d|e^>l_#qz=tT9AL9CG4I?ERf-UWwWzJ&Y z_+}E(z+Zh%m6k!E=9Ra!+ zdmwO4t&u{gPKdyJg9+ilo(slp^a=q9!AFy3*D0>?{GOz0*i=1thjEqG2YYtarhqr2 zi-*AFPjwSYsKX}E8j#n=v_EwG?7@7@8p-c&?nu>DQ&CotUOIKG7Yojzszy5s({lPq zNd`ja?CQ0FFy&7b4RR=t^hJaZZ)Yr=A`a*YQxaA)xQ2( zI!;W0oIcbDYS7^__jF<;9Paw}Glq=#veVXmmiIr7L2|%;F&i}uSJ!Y5wvf0r6`g~c zWcKhqIUHEfVEYSI96A2|;XxMX8(6jG#|YnZ>IJqc%|h}~3O!Ie33d9*XKnuT4|bt~ zWUvA3DE6$Ph=X5M@tn`BD1lYR6@s{<_zLu!Mkx`%pbe4(ND_L)xg8Xn zqr4w7VI&eVgeBtDpJ%ga)oLW^@0~G$T-HIlYU?Lt{`U&_5yBpZLxi@K%tq{_kBhxp zd;ooD3~A?ZW)mu|p31I>(qeQEX8tA-cv^QhU17urrw4M_~Oki$_*o}mUBRE z9D0v*o3Uc_7SA?1G@n2KyIDJ##r974Dx7`$P}?{r#dg&Jln5>HR&sU4SIZOeqJD6o@ZVCQV6R8 zns0=;R!VGvOfc|vmf59yhn?;b-c&`KT)H0gF;*(@gS!uNgVZCc69DVV-U{Zju@K^w zvDS@e_l-}dnRXpl)A*NnR@s2rEvbeoRN(e0a$ouNip6*In*sa3U65{JQPFrS$(>wn z6?En6BL^E&W>S*oCClptqWXI9HpVFoz7NWm`wPulk5j|Uqzz%zX-Nao1S5f}vJ90v zmr^%>BzUo0LCg_ePELz|{+D{=V^<0@*?Za7ZQO!t7jGN$CxuQLJ3IS+-?tql<dJbE0M`^UE=$Ju580%t?_@_C99;LyomwZ47gd9SKfV&Um#aD(9NDi= z>XvIaQ7>qVtQ$XC-P8N~`#Z$Ke&esJ4m2CP$*`k+V6Ly&@s7+#86BpcrVMim22z#i zS8^}o0R%*HhVIQjmLJKBc|SK4-v6;}OePAkXS-)hnMNoig6WxwN`Av$&krSe#rsQ-%y!itSsNYg z74Z$Jty~y2o||EUVQ44Z8+R|29*IGYi4>{3A-G0dv4S_*9qTD#CXSBt3X=+Rz3--^ z(gu!?6;}Lw8oKN26)(9-eW!Ta^8Ff#>FAADKF=|ZO=fuM;Nqretr)GtpM`R-I{a(d z;dE$;o3NQ3+n$iLTB@t{zpBU#Bjt4-%H(m6)P|GFj^~z~B@fwVOziu__67v(0X-g< zQr&C+>i6#Bs|^%KV?4;^Ph3XWwjtVD6_2Z{xDTr2+`mk+^xbX09G07tfl8X+P#){+eM6IE zVR?z)23y!RMC2~TdvKzy&()$tuxTh}g;!|2YIsfzf+62oyA$V5H$1l=8D^_4`!TY@ z;-~h~oA{BAU?whB3pA~Q{8JPm3L#)M29OH2qFP$MGDI=Mnn)&Fsk850+Anp^lO$^d z=gdUaeqXWPa++)p-h=$3KeifrQ-~@qe9LWUqxR8saUKM-C;YIXX;5%!yv}43KH@mjUiVQz~iYWq8_p9W*Hy7ON?a+^Gvc9wiF+d0* zsvkRtlm9ptA$EZOL`qis|N8dc90 z9tC(bBGR}ZI+Y}IM$1E^5W!{~U_Eq8sI@cg7d{3Z1XJWqBxIoD#E}0mE6uYYXG5LP zYsVl9MP6~KGK^OBK+BWQj&~864MNBfIbrR z(aHN(^3>j{SI#TDHK9iRD=WM--G*cOok{xG>3L`PcF{?=eW%YV{3y8S6v z@NwL`^I^^57LdzX(G+Ed1sFQ@V5-(g?BKJ-sJ}tgJ=ReO*|`n1Mi{y+dML?ed&~;) z=){3+nu4gG$8nUPxF0Q;1!80_5Eow9KcSdO;u=)Vmohhm|6sF!6rwmbIUYur^5ZzY zOh$QAimuuzmixS};dQrc@*j;9^DArN*gnQLjBWl0xi%e!5{}<2@oxCUEBM`Phdf9o zSX)=*8gCXPcMtq|h&^IC=kb0CZ1y=va<<=^LyisN`R4ifq_2KvSA$&R{Q+(j@l;HV;eAZ$h7KZhVf|~y$HoTj>kYvx<^8$K1BKx{neFLK zW_>6fXmc>KN#OEI_VT~6_tsHWMPJ+KK5#%vBqdZ*KtLKqBqUTiBt*Kqq#MpbLXhqT zkrL_dQ0eXt>F%!cZP4HM-f{03@4fdM@A^)7S*!%1~_gr(%^~|}Rz1HbMitRS> z;YE2v(F(%%r2b9?!))M8HG*wkeR~1@L(NHblY}9Q*{$3HQxQg`dhQ_Uc>x`c76FmAwQQI+V#+y@|`U5LC{o`b2P5)ZU z3X7u@yBn*874c4qbo|V&o1q5O9^k8cPwN700rMmHjKcw&EpXAEAnDbIwu{$QLe$GM zdk^cYUUH*<&F7jJBwJOzk%EFat}&f~?V*Ql*Fz>xH>XTYwM};ts{+_HYN|K&?AQ;6 z89SFbLJ-OebKWzy_NLb?ECsO|&#PivLryq;IqI4gYq7Sb@W{%_#BonqSBO;9H2JkA zv&;)CSgGXVDW=w=1=ax+$WuMTaM<_+Lqdq>I&O(d{kGnWU}18B`DFwF;Cga8@F5mk z(!}ih^BS@SZvUv zc}tS9!dDfQHbhAM6d0hcn^4!zZyLWMIUSxzjzGV8lAxLvQC`-?`9d^$mG7Iwit)MN)u!tB0qP3mcph zs!r`ND8d)DdX}K3w)mco08wCN9y@5HX{t9P(_SdlYn8x3XIb4u2Rsq1$1+gPcxPfV z5cZrz*VM53OVCbaTG9h6;`%k;tLIn7-{V+N8qd#tRs80Q>S-Jc>Cw3M{qAjX_+f85 zu5QWVvfw9iP0eqR3PcrpHCk~PW@f2T0XmsqSPw1R9Trx($!^4%>p0rRuXt#6pi$+} zU3=QmnTcibTokzu3#E}tz)R(qMZ-)eUt=04n@KeHv+h?57s%`=ar!QnEfSS>-9+eb zzc|h>Q`b`v0F0GvCsChcq)8Ybx{?3-pmi-RYRO6$JdGx#TZ93V`h;vTI9K(aAyzHq z5eMevNUp*_42o{X(V)I?YG%q~A%PYBI`S4omn_2dZzuz%PhjRQeEpIJ3(B0se zv;PPM$r=q9Y4E({2?%eFqLXNS^x;V3LmkPef%mhF`+U!_vV^-CB}~<=SBq7Q#^x&{ zZN@Z&$dGe@hw(MtUK7jb8lMcGujA!r7{}PPOvMEm84G+C0YbBnf1cRNtCf_LJh!yc7$4U@86Wtb=ss6TY2{DxNg_%wBGIN#3ig_glWe&H zSoz3v5OQ8|JwZ9PD?L9ePFKgBJ;uxGJ{j}nWy6}&j&USNa=sT$&TpwjB!CbTqV<#Z z#Eq0p+I|77)%(MLrKnYvP5 zf@ju|)`0{1bTtCz&eTM}T`%T)lJ7O=9S7|qbQq$Xi0gZCkA1k1{l>)NB$;fKd;Et4&wKu03T~TKNWGd1l)uVlHydDfD2plt$V>iiF9C zZF+_{Iuo45wf%_~9dlY+Y>HQd5kbC5_gNcP)t%v3A5UaXk$|U}2FO0n^c~oK68l6V ze1Ovd%+`0@29>e%oFq;5;`ObetlZRj9{8cBrG`?ynQMPC@cA|Rr!RAaI45=lP=>qU1o;F`B}R%t8PT5vy zoj?&fAoiq3K|n{`&kG$wsqNQj0(G5YHb%%5p~K#ckZ;L)34^omI7o2MH!IZ-soZ)~ ztucXhNGW}`5n-DG+I#9o7K@jbXPSCGaX2 zDOIS&Z{u7qcxa4O-FQ^|V=`9z;p>j$?03@o)i(OU%^sUaAare{}es(3}dv(MM|nZd_0$ zm!o^GY{9}$q$xvfp#m_O$O}^{Zhv%u05;2lc(X_&=Os)ri}ry-BVE!{vl3$_rZQ!( z`}E z+gg1p%dMg7LhKJ{t586X=T>yaYR;HJJ_zh1kkz__a-g7mzed~*V=fvEg)d~q$}eb9 zAD>&}3ImQsEr+u8GMV52KPwC!FbwwE*B`X<8NLRPs5rLKF8Q41KZ<*?%0n8x(i%hN z{e)rMNo{Cw>(_HJjhG0QwI3l;cW|CQu|wMNe(>_q%!9+h8k{yBqy}IaQT8^HjSC6p zly=SD%J8i>WaWSDATTFr8#45frR$+q-*?NyyIanT+jHNM91 znsax$ZYVsdv^*z7A`zT>Xne`^K6&+L!G*j5J2mi$)VuN7rQ5yDke|u0C|o3y*RTs! z0q6y4pzb|o`*NBg9y0}Y;z`(DI%X!Bq(*%Mee;Ej=rmBIvAe&C>9?12e*0o)yP^X+>N z2hd&T1!1%I5ko6dIR9!e^E+VpZ}wj z{{Mg7z<-p|f0WXHl+u5c(tniFf0WXHl+u5c(tniFf0WXHl+u5c(tniFf0WXHl+u5c z(tniFf0WXHl+u5c(tniFf0WXHl+u5c(tniFf0WXHl+u5c(tniFf0WXHl+u5c(tniF zf0WXHl+u5c(tniFf0WXHl+u5cQVQsQM=9k5_bhf0k{1;Y0g!NQW4vP_-cMiv1ij7= z0bQa200DmlvMT^cfgj-B#ggEM|DTV)EpR==n}7cO_^(sIA3(v@)5}i?6n$`!Q;%aG z1k!aL794=kzw&+!;X(oztpofKFyJ!+TsYGUfpm0m{PE^141szu+221fa{@jb@5lu)6!3{k4T??T>q7GJ>3WPQP{6&dg=P=M$X?g^_gkk8f#{{ zk8axw-vf#ozNMB=w(Q-?HC^nk>tyn!wD0e8ZPf$?xkhExpZ-VAo#NC)k1|j#f8{(p zI{I(qyu7&jkDRBSp`T+%KshmQDj$xJx@m5}__&`x7mS`>MBIusSNYw| z!Kc6EFkN@1c6>}=j-O$B6rLbq_kNUSN0t4M6(`){xnA?TP@t&ps zrOpFz)t?)Y|D#TD19Z^p-ZTDR*TzKx>CQ-h*2X<_8an^CHtzqY*TzNqKdg;=)3e~J zxU4Y^;12h|-?ee;&`TeysLndtI-BKbOb<^h4G%xynC9na)Qu(iRTzW{LG}JMCiecv z`%{X}mWTRqpJ0Q|6|}FMolF*={EqdUb(%fD8l%FeO(~wn0;r8%@GK>|46BpX*^JY>0Xs@=b!pS1bT>AaO$s+N z4b^ybYTta1-b1)WP&vgL1*Z{s4=k24q#wpaE=v+LDD6EU-0~1`r$&RK38p@SZbE*B zFkA=B-!VYr(@2OW8j_2Y5}M0XrN72JKQ(N&Qg-v3&!M_i!8Cd;1Aq|TTOsfiZGqLn z1$U(Y_?|YQ#a-Mm083Nk1ij7r&!?DbtJ}0BQkLU7KH{0>iN=q30W4;2x$- z6EU(j#(NX-jMMI;ZAZol6$G-$+W5U&*PcPUESET^B!Mhze+q>IsDh|sD&b;ho>2o= zq4Uc6;Iu9VsA38KIsSnqcXa}Hz~ruvDGh7fxHP%!8eU}Fr(7Eqx1l&aeDdd5XR0~<;!#W zlJJMOR|}vl%rM^1`4JpG!5$%nPKSP1Tl+2z)@HFhDa- zO_UFB_=d#HQJCz@sdoW%_H%+GYs z3WR+hwwP~<)&a2gLiarjJmU8otc*FdC~qQqDj8HD-O$4?5H`Brr;Y^^V!79Ii74`z zQS%GV3c8K~<)CyWkg2LJXl(Iqbd@yh!2u z6+Uj8@RyOEQKBy_K7tP&n$*Zmza}g8GS{FNPqRby0kA&BA|Er(@98?5@^?@XLvyRC zuhnu%OES-%FtWG{*so8occsX?i44DpI=;0f7!lI!SNX2HZZslHDUi^8t+!V3`-qaL zO(jy4Tdmcj*(vsE4IKauWtH+@@|A(>Oc&fGt#4nX^lsdCQMl0(av3Z0uz@dT0P|_7 zgEBDW@2Oe4wb`IV;h5ul+dYM7ZmRPhN%>GdqUf=OjJzla#gdimC8C;Y=RAZQe-nOt zRzK83DFKlf2+QlQ`8lDQpa#faXAN_`%>T51&n%FN>BhE-aZc}}?~is+b=BGo{QyGu zD;OWW%smZuhKG^g8mX!D+?@=C88sB7vPzWHp7W4lmF4A_i)$s~veMh2R0I{sSfBl> z24Nv$Y;h}7zQ%w>B7O=Vdc2NAxas*!-S!O*J}ZLl<>M>7QtZ2`r=?-pJ!}~Wk$`(y z83r#wF+jy=V<36HH9;H_tVza{4pad8fLp>RM6GVd-K2pa2I!4h%H2asQQ~M|7*c~o zDFw=3pM2BX+-xYe$Zg$w&3I!aka`S%0T*Mw^hm6x#*c6Ctlc% z^9xo&XQ=xT>c;cR+ZZq`z?I=3h2dRKCA!52N|qZ!OdD!G+XOvb`Y`V`l3+ zh@3HjEQedqg28H@pn6h5v7=Z4==lcW*0krJU@w?zj5M2pKgjVKGwhw`E-H+oVyJEB z9acS)Nm8@N?QhY%8W+O%)jF6>2qQC-&OD{Zg{aAIyJ{!^rh)RF+4l2yZD6b}dYE10 z&9gs_{0Q!t-RxQ0m4`h6gxVX(szzV4OUB&+iiN;ufC(}~!R{Kmhm2|gpyl&lo(M8) zh<>^4AOL=b=JruWk)=!dl}FV_E&%l&;%fY|PmcYsaWEq}L`}#jN|JbS0k00kn^_oX zl)P_46$I@UbS4XbM1Flj9wW+n$nE1mQd?}a{@?3Tp^f>k>%CS?d}kDj3d{XgPI@eD z5~TOn=u)+jvXl_6n9(}=M?$24sXtTAr&&apM#r1m2YNyRw|cr@0h7B6D^OgSSoi!h zR>1_v(cS!^ZrSF-s763rK=G1CL%BIc*quMt#_HRsV&OR&>+WNL-2>o!yCCe2r@D;| zAgG|+O)f?!O@r*-7sArbTPn7Hw*O}c(t*xoFpgzZ+doQ!XxB%HMAj6(6>YwK3c2TS zQJSU=%otrUSSrEV9KA#$0?VG_Phg}#L)r-64~Y^VNW}u+HOl=XDzyK(8TD=tJNmO7gs;&V9j{u@Ejq5#xJEPkVVGKq{t@e9R*VfqXT1AqVT1|5m4Bj_#h(Fevv zVE^f`HYh3H%+v%CnHMX7Dga36uo2Gaq5YBR3;uI8UsR|LfEJmT_Ui#)K+M+m=g0wG zrP&OU+v2@u;JuRGRz3RPc!Ki+u3%s+Sc4_3AKHWk8^}$K6w(Zjj17>^PM4=%6XkKGQS zy&efg)v++J5L;?RBuWw}S?DYd?dp6rJ$02Ce)|+EOeKebOc7}W-Y7#(|E>uR72~Z( zJxvy*&o}lAr4$4AB1I3_Y%o=F#a1F5>D(ZV8pXk^oyM9sB2x5ifwC#Mtf&#kH5kTib zbct3d1{kHW!Jn=l(lFf)zYsKiFu@2VAw>VHvSCUv-$<%Yr}?84co(P?_ODcwe?na9 z3$U3p7*h)U>!fj@3Jnz>d*1|k2%4fFxW&oM;m6eQ<;J?kdJ*l*yZW!VMT;AB^&K$E|f!Q_-}(r&YVU83Dib3RPo{p1T4m+<Ks z+f|i7>{u}UQpKKvXeNwu6n|GU{c=I=%`@Hox0%lBTA8vK2r%GlXxe~O>*pa6 zs5xl`$7-Kf`xL7r1x99YdU|-u$2_+#*~a|b_vY*GI_n2|MbCO!m}mr3J)lnK-#py6 z^O|+mrD~>F+6k$b^o^WmKFRg5!hNwAzb1YNw%YO*nUsp+=e4fXaq|;=4cl|wAEP3uK{gOl_Q3j$~Svi!%T zUQzMCoI9vkpdDfWa%y0myhxmRM|oeQ>h{J_k(l%8D1MmN>RnA)Gfvb1lT<#_Py8#i z--*5o3}qDsSE@x>YhC0{o!b>W$dkXPw<3sp{rY&^t;4HP3KZG!$D2$i!xJ9HbpyTw zrc{-R>B%6-g$GnkB8`TqaeCF9)8Va|?;CydzKj|4_gWJP!1QXa`qhMTLx86_fm5!` z&%X20QDadSvWY0vgB_fc&CR2+)o0X=0(G5yHSZU_Vca+IM9x<&v@YBJV1&t8eh`|J zHfV9uG7`PfqN&06Y$8)tda~|O#brn9QqD=V2c1!9a!wIP-_}Nc|M4 z?tY7n%eNQIBcmfzMMruE$};FUZ8tvL0~2{NV|T_F!%|~bVfkuBT18)mIoU|u%%m&H zRJE`Zk=K*C(Qt@9TDPyB!xsK-Ci}{vwV{8fWjC|SwoSuoj=zPapOtpmiNznVzhb`6PY6If7f5I0qp%$ zZ~H<02W-Q`hpdz#F7g8^Q92`baS23g-eWXY`cKD}bgc$Y3kg0-UXx&j|5kTPNrr{Z zkiT8mCehrh+%p4WGl)-e>f4PF*Gx%g8{$}_iyT2-83_#|rK)51ATPm-Uw%lBR7Z2- z=CBD17tW%YtI=|g;kIxUy9Z}QKdqL(Z@3Xg`X{i-DS*AiwdEB5Cm%h!slx1BXC2)} z#s9m5wJ36f!6)OJr%EidEHC%;D|!WTL{$7l=V}+&N#MuMm76bi(}RZTz-wL!^i2K8 z?6zso<)&4Re7s+if0EQKty;PpU=SZ^ed@m3kD{h>wcPkRup4=B!FM6yUm1{~IbfomDpALyr$!nk+#5Zf+4Qaf z|H3{-a@259uC+Wk*;r3a2>+W3Hoh=>1M?C0(&%*NjJ|U!dfXTa90HF{#9}%r*Oe(tVmS@PCmsd(&oR{?QBQ9*h>zNFu$r4S1@)_vaUL!hJQikgDkv1m= ziYl}sBuD#~iU^VX&^Zm5pB3;eos&0^kc9NxKfe3iR)o)UwX$d3WYlT3QynojKE|5F z8oNbY4UU;=nwk#FZ=RDN{FcTTh3~gatjF_u1ePIVbIdzlgWbMwq%L;1f_u9%i-kX- zYWr!&O9rXNj(R^{Y5Md$CV2Pv z{0e7{?cDBcY3AV&g$5P+=AOWckm;2Pq8Vm|iY!lh1Jg}QbE|5j6i-WCnvb6e`bkMv zdS3RJ5UZ`Y z&uB9==!~ihI?}$&?@6QNCw_YLdC|y7gm5 zg54D*J78X^HV)RP2!y~+M_Z@)Hn^Mwu9n>N*q9?xcXqPu{8uQef9?k)XeK4aS8LW- zcTJvvj`aBjmcWWakYKJs?@3lR9gVPH`xiv2Hspt-T?eQaUAKS)=Q>_-2o5^;ae4##f< zo;cs3B>OXHP~1bRMUA~Pj2Fq%ZF}C2DbwHCwl~>>-@MYipw&oA|g;^PfFQK&HbHsLKak>_0HEe6v z+3l0~0`x>=#YCWL{ zxtfOWN@El8_;icn_}*7IPiP=Kbpset-ANDf52`!~tJZ@?bBPPGyTxYt54_D9e#=&C znu&|PR_=eO9wH#H*@ZaIOR&6%%c3S4TVNgAvnZN2t-7=Qa%W`eMJxb!M%M*-2Bmlbl;_ zV6UF5d}6V2vGnn)L1!=Gkh=H)FpqPsgMcRW)gzt>l4;t z*)yEBqhPrjH7=ht*7_lh?7r`S>0&M>T%0b_UPo@j!A87jWLkFN;4#Hg$a*h6t3j_M zfUK?QwRl@4fuKP_JVVhaBclH|Ppk#KXPHLqPq70g2m_l)o1Cw1>uV6Su75xN->a|* zNJn7X4BDZ_EEj>_&nB&(uE!1Bs9H=FpF758Te;B`qhOC7?0q7i{qa?F=(KcjOFX!G z%?88}3!wJ}8Y$%PCuxq_)4b(Gmx@IvRXIFKH3;&UJ&Kopy#nqqVN$M9z~(H*DLsAS z8vb=-(^bn89VeR|@?e2~R36{;g}|n*@am-X#6W|uP4g_%QKd-vOUu?UhRsR^p8Fx2 zddN^iYF6j+lsqXLXIgF3iY}x^AqG=<{Re)oLoLGGVVe)bK~P zJLpH955KG1I*N?b$+Bo{Y1Lb|b7`H&+Jb4!FW+)09s6{#UzTW*{(`cmZjMW(wnX(~ zTq817^?}Rn3mVHmI!H#Xn5r!85|2^4Nj%lJ>|R(d^gJ3>7&rOSZ(iBM;a*W*o&S}Y zo|j2E_ToXj8gpXZ?6m#5V(eWsK~pRk@S^>2qvbfd#`z+;=cz7o<1aGq3{L&WPgz*9 zNP)~+wfqIrJi^iHoxA9f{(N*3cRmq6% zZ$}Hn0FMJLs$lR3_xl#D^+{$4N{OqhO>Q63NhQN+IKOgWYs@I3^2V?(y*%4&$>;mE z^2kADh&eExH6p9>X?Q3q(h{{cHLn1>-CY@9K`X1&9d{B&JFNWCG0nqCQ^qXq2yq+x*T(1ay||BoS+OVe~H^gTX}k&iOnJX zArAW)x~}unu@Yd919=T!SDr2f2dsAFHYVf~l5`qgNt>C4B^|^vCz&LQuUanNOiST6ak4M^r!(C2^HoGth=&W{@o{|;JXA@h5DhJNEBqa4R5)mQ_DIj=z4Fant`#d9Nwi2>ron1fQ zM{BQjHyi77rt24q_i@Fj8y%5Vt-oM4NSZ>VIMOOqG5m1D(jOc;Ff*%}9FAg~GZaZa>3ZHRmsy2bzQ9tfFKQ?ISc!8)DLvet zX-iRv<~?P9UgbCT`!Vmgf+m>I2Og4bVbWK$E<3a7@s`BYXo*ZW=m3fzps})h367Rk zLEYU_d1e*y+l%cHmfxZT9&Yj(pA3oQ?=8|N<QZ#;gr_ezP6qO1_TC_gwIi zDvm%y>W}3+crog+yTvXu`9iHXEwjYdY}~rY!%*vEhW_;0W_1F$6}B@rUnC`uI;u;p zktS*uD^fK>LsoOsG3WZ1`Ofn}8A4T??}^PpMU?Ai9#w|}nA_FrsdQ~EW!=lQWl@AD zr_>=bI@*DZc>*@}|9s@nS8Hlqj!k({zD?$O zii-tPRJ}kiK56kFt49&m{!we2jWVv#LSk?H27msG?(&(5s4J%etuo;TIj%obL|NEgcp7OjQ73m*P4Iupl zae}YO?xVlCEdEU{yJj4Zemk{?LkuRftWqC${zCG2u>P1WE;=an7jv+J{-{Ih#uD5J zzvD#5&#jU8X^0OK{-yrm`3p&L6Xz~SpGR9&@m0VnDqI_VmsGn@Lz%5<39WI2@RJrw z=@F`~BlAy%>X`c*N3Rd=6V(J14MnJ}6qZ6))9PsWScjaiwNI9JQhHU+ zz$}x@q9mel^lM3NI+-zE$XxAZqobHq!oz@Lrgcr{J+V(ArFB7W^od}=`K=*W3$%Od zMnv)ON@ITO@fyG&E@~*~_)4#aUwNItqUUVSQIVf4qUawm!n;s3`JVA*U3YRuwzPGB zHSU}DNv0jMa%x%^ScbK6+>H*0+{Y6s1`lOvKDOt*klObjxG1-LgKqM4aFIBw_u!fB zi~(zLi@^lNGT zq;V9Dg{qc@?S|P#e-!rQyH~8`&y>wAt!gIK9=z}!h;rRDQS_~-Vtcofo}WXkl*S1E z%$gGbd++sv4Up(VfBjkeGpa_72mc`45I^{As(xe0WOUy}yG0pzAsIhLc4aeK&S6*3 zuiR&fvsLTF_y6uva8%^Wa z5B)*ZB!PChav#QxHj4$m*J`V~VHUq8)zJ@`?2Q$XZrGGi!QCx8kgz9_9Ew4EbH7T5IM zJND+uD^KZD-JR$%-&c#pqb~!l)D+ghV#|a@ZbHFXFxHZk2u*+JpkjFV$a)!vC1Z77 z8SjX)vVzT1!;^v14rguR=4B7m61BVK$!XvN)i59i7!D;EKf>>oE`X|`%+b;ECF zH`2f2{AYF}0!)Wx<0JnwyWtIb3&kTJa0=tLIG+N>1h;|or+>U$km4qlSbOs8Z{_~< zaibYbz(oGt8v5qTNXs3FY9Ukmi7~QgEuPpXy1)q8f+#s+C*EMVJ` za+9y$9W`mIiJg(=uK2ku%k}nc*^crK5N=JS+-Osup5d}s@DdRgF*KK_6@k>;TJOR* z%DbbB!Aa&o&lA*%)6(_OV*Jx@w*^&V@@5mfz)p?XEn?tk>mp8VX3cJDD~LDDu_6wW zB&;7>i#K$1aVeK(G~d~~2ZXUzyAGop=C3|O#s}E$1#l3}X`+EZH9}4a55O5|h=c^HE$FmN?2e|$D zoKe#o9mrotw#1~`k(b8r5%wv*UH(=y*?&&y{q3fz?(_MV!4>AaSSun zXpF&94fKfFTHGV+(#yhojfS<^o4>5T7=3dWd+$V2PTRH?k!5$8K3GJM;<+7OV{>G> zT!!Z|9URD_rf#DC$p~GoFLzLdB<9nW9w=8JD&1Vcfg;&P(9SA;B&00JLvDyhdObEh6pjOzr>Dyx)_*p78|gbeA}#&EI%)OyJ>sukd>fCo!`MdVBb57c3-LqpCvLKHT)bH7Y64 z=As&Rts`dp*Ol}!c){ZI91f1hed)$b!Wvcsg^pbUjs|scfA@><%R<%78!lyRfS`@t zefQJHHc~Wv{?s6Z!SbF$A7i|_SeY~#=2~QuA?ea6Scz+<#b9J-W5E-T@1j5ta1%h8 zuI!YS6zKNn9OvlK;h zvd!Wd!|VB5;L$Muj+jG@hU3-p(N(ja`Hw;p?@&faLSl{TJ(wI5Qh`R@db0C&c%&W6 z5k|-(Q!t+uduybp-F{PK?+G43A;Etdq|v`&l5f0`u0y(@D-~8Y5eSj{zRjFg1O~LI z&h2}MIed12w!uyp72L2R=VHF1UOb}R{aZBRY2KPy+St@YJPo7s@?-4?uJVyY9LZ>R zTeCs;-%&)=3(N|$rZ`e1HhRj+L=NTU3MqqZ$l9Wq!nm2#Aas1hA}=dWkxUT3C(N|> z6Tp`=W(Z0~lG|L;1*CElldACA(kX1BU_TBhaOmx(ML|3ihu18xIzS)3(qGyU!*dpy zyWgD!|1&PZT|mRjHfk6&y>-8A9?;O@?*Z|DSd>R#*<7yIBWw8fWI5X#AWIH#{vmy> zi-QSM@|Dc@TPsXm2A#=N05BG~MZrT6;8gVb_|9h&d*74m5VSNR&j&WdLtXvfV|ea{ z?Gy?Pk2Q*(H%_A3UPYXmMzod_h{_!(GLp;hKaM*zJDQ;g5zA3wGRywK*<-i-J3d~y z)#>S5QwhAtP;gj9=gnZJGAS-@Z=$_+s7cBJy70BX_B(JF%sLc+`y1BKX-61-o3^2o zeH8OF^KoqT{v)%N=h)Mhy&6?6(?`|IQwE-{#h&%O^=cX#4z0ljW|!~9>pN3qU!+uZ zzmBeIt+U?9oM5=4CV-ie_LSGA3vGOAYK}GDOKm({7l_OgWq8s%F_BYqk<6jWsy|>y zxKo0kcn>kMBX+jY`Rj1-mgUleZ{UQ9ZgoBaes0HJFl4EQVbOU81yzziY|LQDorh%28!)8&4V&JIg zM}->deSR$z96H=L5S(leIWOn>^-`R**GL&-wM~1^jIW0} z`J@)vXCrRjPWQg*nO$1A3m<5Fd*)*b#PFuYEq83A5r#C$pmWIn%thI!cZA9-kmzQA zp>9HoxiejLluv#C;qBZ7M}nc$2otJ5`PbY{2KDpR>7S`XoNNf#B(-Cg{tLApg6Y?X zShR+}v6G7eH1Urznf`zM;U_r!?6Tr|xYB7edvv4shAEec4(XEtdUt-DZ=Bf|rPrQn z*g1dQAVdfcUspq&+jMtkh|CwhtKja4VQ=*Doev)flCUw4D`LT&wpkJV7nV)FA(2k6 zOcdKYjkIjBbY6f?G`L4~6bU5_O0HSiu9?CQX|VJziT>y_4zHVBtM28$3as(y4t8$n z=#0#BCca)Icb~{BC|Gla2Z-3S6y#RkA%C$G{7CJQjTSFo-J`{bs~Db^wHn?E?&-l^ zb(?9+QNksz8S|$bt&DlD- zs+D|>?ayRx&rQF7b9}(_^D7-2kbX72SEkqepca0Fj4G)8=ze^qVbja~w$~?f%?IDo zCLs+~G~8LLo4@RAYpJwN%fI2-Iq+_aH0=Fu^E^`|;ir3+VZWR|xb2Q;=QhJlzhetKp9)Uly2rA- z2OK|zqnkHVWx-ai_N1B)*l6mD{C%lTs77X>6TV1RHDItK&Li zU|c24<_*%bvx;{E_hCg*z=M1}W<52@eic1|RvRtUmf#W}cmS3m5c|+wBfQX`@p?m< ziqX~8R&;}5(^!bC!9Z3`wT1~oN|)x5^vufCg>eG!tn`aKBNH>6zV*p{I^k_DwTn$t zjqikx%-`=Wetd{bL7pG!@<~uDz}@CkFVR-xXt(q03#m?ys$XHQO6l}J(_#SDh2_*>(mjt=ht2li|?qL>W0NkDgG%J`Yd z+OoN9I+2ocju5*MzsWdtb8NJ6@)cWerMK6lnMIIOf)o@@pSsbwy~QM1@x@CD!Bi*| z6~h^kI*WLRw1#va5)5%9OB10`2Fap8&6G!)ub>uMr& zRzX-XYTayMck1x40>Y>iOYVq1D=Q2l27JDxET3_6$bDuNUz#|mXLSj^ea9I%Y2IzP1hddwmhCwT1?j-x~Xts z*UfDmtgj~O7b{ZGKR`2-d1AZOZy!AV!Y;^Vwn0Sl>V>pc5WTCh?Yy4utV-bQzF!W* z<@d5KvME#ApJ^Zb_X)HwpY)cDyolm=_RYih53jH{bLF)`j1QzSEHk#!dW8)pKASiu zJd5L=-S`3>TskIzIS0BfJRo-@BCiZxugzq!sANo8O>td6*zSljlSsLiGW$Ml(<=Kg zgzwuHB#>Z0EWYYDhb*i$gxry~H#T|b_zJ!6;hDL)c~yw}=E8Qo`sFjaQZ5&88=vi| zD*URpvZ7EQY0aRm&Qx9p^KSPw-ukh;_@`kdbe?4@)+bZ8Z)8IB1zeaXQzEY=T;{GX zrsEVGO~#%&be)?Cxrjg8x3~%@ah#1vjwSemJ*Ra!wzs#%Am-0G0N=wOZz(zHIJwwj z_wTg>pJXvE!mGB(TsQ4amCqLqC9G}DTI(Fna$L8#IDp{!=e5o6GC7)EDKmO3QYoFuyL7qyBIkjF{B0U?V1qwv=c73@$} zbDySl$I-rX%B(Fe?Zbi@qxaG4ME-u-pYNb=vLMiRdWEK@{Dppj*&0?9-+OJ#c8 z(;ri}$|$V1j`_=>>PYS8e$;18HD^L~9x5}q6UlA1Y+d}`BZ^M)M@Nv4e??Gd)A1fO zlbC7&Q|BJk7aX0jnw}gfKe~EmA5U8BuO0qEVj!xTAA)8?HoD!glk0l9H+t9Y_yT{T zLsL`JhAzz>Jy(6BY_F-O1)sYmOEx7~LpVg1EF|n5hYcn_<@gLU2ZQFxD)sgkKe9fc z1os*72UmK-3p~P%Tt?IHWkf6vqC6nBuPU91Z=)r7)B=tjE5?-O@J1|9Lx!+7(K-06 zD8>qwvq{nSF6d?tQRxegf1$g)qgw8G{x;mifYaWzzPvuC3~Qupw;PK8A+;uta9pG} ziPv$YZiz{@O=E{*6fSu>F8LzVhCE}!1cmMac6!cHNIuM}9bn~d#~0B@`Gu)1E!8T6 zrVk?MP+Ucm@bSguMC`~n**WNVjGksnZtPEK@{Z8=d0eH}y7br7>Gi(9JU7y7JY4k- zExs`Bsn2`R7jhprVDcMYcy&l-vZW-ne3mG1 z_aIsW;aji(E$4vb&mbY--o8=8r)A@#giY{sy#Ob@89@6I6Z$usoC6tWFr!q0JAdlY zXg9A%q1AZ@{xM@nFQ_Fxd$)wi-G`u7_wr(-{*}?0?!;RNn>SisRXR$379OuADPbDvAOs1Lq8Xn(Ae*n&hZ~CZCxipZnUX@xFku; zuxS~4Mt6}v!Ckln4l8o%;F`Ye&i4h|Z{v1EJxPN_Nn2irH}dD~8PR`Qiwrg+A%Y4t*D@c&@%J%F0(qHxiZ5SpSC z5wK81l&T1bCa2Px7)X$pw+-dj|9N2E)U-g^lUa^68u`R{x0 z&fGU|-rRY^KjZw#$ti2EZ?(PlJ|6}4?|)r@@fNYYmBab8K|3I!R5Vm*f78lF`>lng z@e=hFQ$R9H zDK!-|-pu;dx7>MT7HaUfn)!e4|6T}-a$9}mpfxMsdRC;T-@k5PB<@W6VVQXO1E-?} zatq=FR=b)CB4&I*o6}M*P2$EspHZ8pPDipaYMV*@>s7t} zJ^>fWkwz3JwX_`MMI$L_G%i9eFLgu@ELW6hxem1&b`%kw^Z#=PQFBcGgj zp?=uUOP?x&yrYhFW=-4f&prG==)_S9Nb;iql0vPW`d%8 zr@c?X=MSw(vp-T{+_9!;4oE7w@3gOBJ3&^1V_Q4lKb_x=ss*50nz-0x*#4aF5kuP#_e85)DOrCNapzZ!x{)V}Z_oAA^p-X!a;}p2 znR~jQK^lQ~1xE4lVegL&Xk>3OQmvIWoL_DUzciZV?&8=ZHk|;Fq8+E?0B&ol5rf_D4nOiiDby%?}Eb{Bg+cVSCre3nM!C~;4aoMK# zXI_|hR97=y3d$U=^REoo4J%GMK5>oz6#y_$ZgT-FS=6w4Sh`jsmJs>5h3{$}HHWfy zQej^}yZbemCKuHV+_(CP!Ff`|MwNIY%>yD7FYgsfeh|q~Fp2{xT z{OP6)x0f~}Oq*xg$G%S0E10ZT(K6LqqId1iJbk9aHhyHO^r3S#U#`FxTL%@isF>L7 zyKd8ijj?1IE|U|+y@qijL5xpMHVNhwOHvkQ^0X^PJx+>Oa2~TX?yXXc5agP48yb|h zJd>{ro?c*>4oHDm?Wnrc8$h5|&Y(iaL+J~&MpcT73 zONohADnQuM;bCim%m-t$x{;35%WsIda?j4j`X1i8S%M^W!6)vU+_GucMpBZK4}0F4 zTy8yZg8frHeM}SPTbTT4 zye4+G`+RUS-T0Gvzl7RQJ>@rsVH)x;1p~TginaUgRN1@yPc7BUCX-5hO;3JgOq7_6 zp`ze>2buau5A|4y_a_4mR;-GLvpqUZdTfikr1RTk=ktcI&ioC1A&=f&QTar9RAypr z=6qq$iT=2#w~nbg9>X$xBGr8fMGfm0q*{+;IJS!zTr3d(|1B{ZQ_qmLaD+U!emwd)UG{eGy- zJ*d7ax1n@xv!ohyXKBb5tq=I6tTp%UecCGJ7b?Hf^^YNh_Luj=e2oHzN3~^AU&h=# zc{@G*oJaWRxLU)>Y~e1^dsJp-iWU~H8-@d8mNt7$PYN4#AL_^?t53|RqA-*zY&;7&&^}%!z)2~^F>G{-kYeSiGOdU%FLr4LO!67^+`7cq z1{sSLKYo%nXGf2Jb(`%gQmo3AQC@#7kuFPUpShivRN-sh@;;;1t@$i37`mRy%5>$l zXT6)s(+#2Q;#IR`zefs zUWM(Qto3*ImATw;Hia}j_v|;z;uHq{$r!o24k|Z$CC6BsL$92$3RQA20J1}dO&txd z^VnZwy9G&qe^u*)a+;}NvGuIB(XmT;dF&)?PhQqjZoaGEoShCUBHOsIDk5^eh>}=0gwaY+&zU!LCJ$R(dl73YyPiun0~XHX3NZ z;a87i`ZrO*Guf+!pk)DapLC zN|nHu*~EU|V5Z*R?<&pbbI`E5?cH*Yvm^ywJY#)#J(hd3L<@-f8q}^(WNMS1@@S?$ z&&k_lq&nZnwreTq#doO4eh%aTbabw}1(fObI}SG^ZmaCJQYo=YmN4ty3lkXtGG*yw z{H%DLC1b%Wep@Z^Z)Lt}#!c=$-%M6TWZzSz#9WCHZ}FbKHpns2@>D+Oj1z|-Y2|gp zS=mthukvNnLs=ESh!JZGUp_koT)+JswekJN85A2o{M0evWTun%)9|_+@-H8aSKQX3 zjqG?IYuK?8-O?WgD|7o?r4`Y>9{w%2oQF55TU0~kSJ{vHaaEkm+n5=xY*$)&m!tDC zzTP1Q`TQfZ_e*IUOblK>?s_5-IJ|mYU-y0c8=4PH09g_}u2?Be^Hhsw-lNm~&N5Qn z(XYJ@mi&m)bxl^Lt1w}iUH049gBSZ}2_+5PV~k{|-F7M97?p?rNoC@u;b;A$rNw+rc5+Pqg)*s{**`k% zYRY0)05b1ht3G&H*iuwmkYP(sV}c=#KKal@?K%VTeZQKE$9ux7ItOnwRBSW!Bg|C zk8cwr4kkRhe&$2ymmbq+DVXaNZ*j^+DM15^Crn$8S>8Nv#F3mke0+H234wdi8}~7zRJeVI5CpA!qbTuv$=- ztVmngQ~qqgbA$dt%KDGt52XU7P8iB&;V&tw4Dq>s;zl-QpQ?-GWUNg^V5baCq&9?G z1!X3Fek$jBQE~V1NtvCR4hHpVtGk^F)iYzV)iXbFGVfM?@fTJW`8=>25=Kp4}`>&)Ae4QqL)v_`*vt#;^_v67s3 zPj{!E6*T#uO!as_O+L$cX#{k}9f2bb(=lCMqy*zio;4&6@lQ!^WcY~dC0*(n0Z$m3 z*l@W6UTt-rtHZ-rHm_k&*V*nI&sZxp;Eno1cVW(})$!1Q+z%AGD)6Y*_ZD&17Oeg- zeYI9zPiUb}-1Mff7P-HeLsQA(Oey{5>WN?N4tFJTg91>ttNbHqb2n!7l96fl*mqGl z<5B*vij-fNfOq40wrcZ%@3t->Z^s8F(p+}v-)h_;rU4KVstm^@ogtnOw_?75x4Wh9 zg)`V5IdD19>9M>I^m6UJ1G~HHPqNK_bQgEfm&YQn3jq@6)Z!e`nK+47LQ|N7x2a`MUR0u#=Yc0DcT}06CzNdR33>Rzp+zBdkII|Ckt9nF9Kwp?y6Bg$++C9PQiX#qZg+> zbqd&r@2!}j>;mv2UyasODRzx7lMWx9das`^#`+6%UsGZrsCn!I`;i?hMj`55X81#b zZlsgpfN}mqKu8e(;~jyPnGpQ+5M1 z8ZL#4@d1_FJ;v?V^r1|uRg(K7FX7oGfGom1O@01?zUwk}@AAGfW z#*qYtY2d^)u~;(wS*9bUO(&fq-nnLHoO;QTM8ElaRLfXWnAYv=qR$R94F(6N z>?{F6E9^>xs%jh+psBMeIsjf_q!rw49em={uiGj`244!CUR(cuPzmYV3qMjYR&8r~cg@fA;CGv4^|Av2wV<#d@Kop3r%81n8I6`&05kb_ zJqSY%x1RtvCDn+P(Tijl(P{<*JS#o&{-LwGBOT?KfB5~}=n`^VXKTci_EKyY=w$FAm zK}sVExMe;V0LWN>HnD z=NzGXB=N{}i3)e&tT^?&+SVn0EaS_(rQNN)7oOtyO?n(^f%JHg_lW5uKx3|k0`Ke= zD(vvn{m5>}K21T;ve;BnCZ>6JGA@6**9&Kw<+l4&^7VcmN#VDib*M?TJ$xn_e6j?% z#KVI&(}PHZ%!)-sT@LUakJNvSId=|>l2r_)RjN@kgM1(ctrazwW-#}CXX{kx z3*1pd!4a@1%i!=CMGNR1tywm4>h#!twBmxxUzts%2VUMIFe?+w)K-F@kfOwseR4ZU zz{El1XXjU~5<8;E;{rj4wrlGrpd#_hWu;eh<5O$gMAm1wU3Z+-jY3;RWk$73FI7H3 z0C?%_tdHn?4?~J(ho$X!lm$FDb}lO9Fuu)HWJ!PO0&sXy#*&;MY(aeQSn4pYMvP_eH_K!5w5Z`i3L{uw*HmaiQ10v;A~>)^G}!6r^& zGSmU&F<5^x2l9jC`7_)_I}!9Ge3WXIUv?eI>Qn80W`qHCK=IIFm!sug7<80>VDE3S zXvknLLv`mjJJi;-MD7CyOv%SNSXDDYnHGlUY&#HK{8%%j{gCa(a3h>?Hki_XSUX&b=zsewgXU7>7a13@? zE?Y>x3h=J;V`b=_K^780xI$7jsNA9}{Ke_5ap~`s0(}G)onnDxuh0{7C_SxV&<9ar z9BZ?sgc#{Qp3E(uci@VAcU~l62MrQz6PI_1-%6G;(LpelvxWvTq*F{zu0f~fF9n&Y zlk~+qvipj1ZTmE;f#Pb?DlvbMJQhDAi~hQ^NOMV^;TU{X8&l%5XiPtI3ARJ3^6B)v z<{1z(s3^Zsc3DSFnf3Qx4w=R>LyBTqRo9TgJZ|0U0#VQHWUfRCFN?n!ItZR=#BbSg zl3|d+DnT5Q10MxDEwB(_UJ<)O7y`S^;i8WkD3m~}EErF#c%mPsM^GznuYh2~bC{07 z&1yGCJnf}$3?~N@F>Evth0{H{@x->#{4sTUw5A;BYbtyHns+6jK{L+RR?Xyynkc=u zphe%nH6VQb+O|yvoz)RnG>J7mb{YtEk zK)y7s9?8?~%zfZgvwDg;MEgXDrw5f59(qE|h&K;Jk*^~@^1(==`NRcYofM=5I> zPMh;|8xquy>M6VGE*z^cK032S2#KAxng~#O0KY{zGka3+V+~3}U9;-wOzX#9Q5i2x zaH-bsF)^LhukDYlRSYcCNfm+KS6yJRdP1p3zgxfTM9tl<&u{02K;MRQH=pf)+^G=% zch-Xyf{5;VXqkRLbmkcV{Ua3l4){?kVfFI?HD3O0S2FUuD%w(LqC;%S(Y^Q^Nk zs!ctl;^gF=`uj)DGI=W9!6Hcase<>Zg8%oAd;3(u`&7aERKfdH!TVIf`&7aERKfdH z!TVIf`&7aERKfdH!TVIf`&7aERKfdH!TVIf`&7aERKfdH!TVIf`&7aERKfdH!TVIf z`#i({OT^6kRKfdH!TVIf`&7aERKfdH!TVIf`&7aERKfdH!TVIf`&7aERKfdH!TVIf z`&7aERKfdH!TVIf`&7aERKfdH!TVIf`&7aERKfdH!TVIf`&7aERKfdH!TVIf`&7aE zRKfdH!TVIf`&7aERKfdH!M}Nt0PH?h@IF=WK2`8ORq#Gl@IF=WK2`8ORq#Gl@IF=W zK2`8G;o?43@IF=WK2`8ORq#Gl@IF=WK2`8O1@ZqEq|5&ks$gLNAbWUCS^D}{fQ0;x z?+34s@CXNc;Bg1}>lWcXPS2%BSuc)v-%2ZO+U=mXt2^Z^Tf zI5Gi!c>2G`hi8x&l)aEV)=vT8BP26H@F@Vhup9`&Vz$SlKJO30^66dx@bjVHy$48o zOHIgM0|3IC3OG;>d<6o)mq0N13s9pd;uN9f(YVVLu==YE|T`f&W-2455d>#TVHp< zJ8Sy>e6RW8(FLpN!E9l7u365jX@jmg(B6zo&&@3uC4#??lP)J@RW^Qq+C|mgQj7bX z(^MW;K=|`h;-}P-il>cKwcoN5V`{*ys?6P=7?%^{!veBPic3mL^V8x##nym?^5o5( z>!2SKJdpa4AED#V?}mT=lvQ0C9lx>jBd~;tKVo(9l31{TpxCYV3GoS^5)yvx3PU#^ z5&tpOoun#NzIgGHB`rNaIa@iUsAq!?w3|mT3%i?h54-@vX#8D=8~9~m=}kh`KQ#?=Hc2K zva7asluovipIuzjScWM%R9w+imY>lKZZ((w!Ez-(C;kJjrnaW0w!A1OC$kwOH0J;N zF+b$CWpa8>cBcP>#N6!Crs}k;zd+~aC2SjXc3LnP<^B015Pfk{K8 z;`$c<_~1fYDn=56B)zKRU)8tkgk;2puTK;%iDQwZVxl_!KmS4Lchf~usA6n(TSBOmTO-aK2fpRn_?TJn9 z2W>NJx!cX&S2ePAIs8e1HtvMdG2T@;*F>=2t@7BM zABDp%&t65UBpPLY{>XQLxK%W@)Uwj2_*(OJkv&b9qIO8*`4Ia^xC(kpr!A`H-SMsd zAJ@E(F%0;51X;YH>^s9EV8T6^I8a5z&|5{T_QZ4lNI$&@F1r6K& zhkYgNTf)8<{4aU|(_5Sg%24$#9C44Ler!pW&;6kQOQji+_@sN$%=O}*xWdA1oryO( zp0>oav~f+Uv(Im9K`xFeSpENTo3j0*#VLb|0^?+dF#p<&l{eUngK)m5Y%Tyf= z&GxW|NfCf(c_2Mj74b0!yvrA2yntjHB4-#<^yrwL9t+zte)v}*t5O3gpG|bR-(oQ! zXC?aN5Yl@gsvJKA-7ATl3PF*~#s;Lr-$_v<^Uy?W6%&X;59$vSn>-hm9@GnM&Up(o z;ZOX9>O5mLFS!KWLtXB9bQON>L47pN_lDAdx1%r(+dKl&FekA74s`-MK0nsAc{Kne z6>z`fg%qk>D-R8s{db#g%B!y{(0r9>nxTI0g}ExcFFV`YyrWDMH2IJ;*06GExCP?l zH?&xAQ`RO@q>|rfA-)PvWLl~(gXWeyc<67zS>Nyx?|XsLUZ9H?h+9Hj|AJyeAOLeR z#JvMI;*m|`#>QaXL&A5atZz|h%cj3Bm+powwqUbj#3u<5y_wLL;qbMgHkAGxbnU8T zP?EJ4w!)2oJpFxrk*SQmvdMR0o$1iu%(cZ(Jw`!L@W|3)80EVxdBEuoa7M1Xi(o$UG3`(u!__Lf13 zN?O=)Jeuu$wF1~t85*+I@73~eph!5#m$-qf!1q_+9oU)P<{f6DpwdMF`twOjq=huE z70`X(z&8&FaRS6*rl>c2uIz^|eI`;@hGH>DMl6Q4%j$3rYas@}HFrcW=Fz?OLF*2J zyblPKO#LTf{$hf`8N$;l%L(#u(9R1<^97T4{(a3wxElivFuv4%CpU-UMm!iMgHL)u zXcKUE^2+;XrV#XrIOOYNpn(@!6b=Iy6Ay;@;&LHF&n+PvE)&=uq_e>)1gEM1@rSn| z-|0Wa1XkxLUgItw>v4P)JI(x>eUATRju;#c6lI-n8>WT7sUx5*T(=GhlrGU`h28pF zh3Knd$ukDls_>9=@zPRV))YQfN2?JJ4N=rCu0(bFd9w5aS`P_@Oi|sY_YD;OT$#=f zNAvP*L{;G#*=ejD^mtMtzd_(LRXQuzno-=S0>`SR%T86Mc`eKzfAcQrkG*10>Tpn< zWBJtsf)E_0<0luNf&oxk*Xq`;vx#mMoCCiyz4rn08A(+r{*KIzv6`HW_=~BG9}csc z7JIp2r4C_NM0`Al(zi(f9d0PE8=#rN!?(^{`y*X*0S@U!U&dL9Jc`9^M#P`L23Loq z%ZK}GZgA5ugHg<9HX8)oA9|5*@x>|A{;kF?bIz{~wa&d+Xp&~beSzz1&NXZ?urPwL`KT>YKJw*IPB5P)P*lw*1?aTadWR1c*%5VUvU1l|9Jx} z`goSBx)*pG0so{J*?SU^$_WJ+asDS(GHjy6x!1|1LX~KdO05&MYM1_rxWP7$ls@II zg@C!IQ@^Te?g+brBf=g&Xv=^yzRLb%LyFxVatVmPl?-<3;IIV@eW7yB2ZiJ9 z(ECY;V1ex3v9mnz9OaEM@Co}=|B)dP^8|{_Gk*na7Qv#KNH=^a;KQmgGI$E))AtrM z^AAFLV7)0?cD}NoB_@8;0n2mfk0P)-bk$=pLJJdG8q!0d{85#Vh65CUdApV+BjV!{ z=p-<)R)K%R?>ch&uV^s%80q3EZ2z%q7^H)HrXnKsETjZs&L?(!5KcB6Va8i%2QPlx z@Z#aWk)C2Y5y!`~s#g(8O}WfT;$U|!EkPF!m^}@ejv^PBC95VR^QnRs+(2M*F<`3><>!Q}uAsL)W!#p#bPlBJL_1+sly8+E$ml z;vmH~&}XTxI#UQ)>-hCM#}(;c`+!0MD!Q}a2PO*#MS3BUe^>DyB%tcoKTyC4L%jU= zD@*8`X?yD0O1tEw$3WwoKK&<#7%eXu7yL8t&J$R|6i_Dc6zIwU@+dDu-i!cqxaC9t4h6O1a{(XFLL^2qMGamX5QM1%+MgcWGsAXH44(nZcq{c- zV`h?bKL0Zs3T;g`D@uHO{&6? z+o_Hug0j4Eq~~-7l67cPRQ~SuJ@O>;SPL-_W=-P345lRpoo|r`^GWraL@?(QS;Yc= zW)S+A(2|T3vQS6%FB*-cMCVxiIU9Lg+4xmM%ELFIaC0FkF^bf?5tP4^iKH9qSj&1Y zC-qk%4DLD`>j8Wcgt)`&>Fwz0p1P)B${YbUc|0fH@Iod9AkJLhb9y1E1nn_GA!P6= zMK8sV%u`{+wSMWSiim=G^pCbinCyr}*MkoKlW65&F_R{t#-s_|vytU5*$)kRBljkm zQe>y5s}B7VeEn!N_`K6? zP^qNS8-HHv�k?UE-V9yWw7T%97GC{gwSqkl zag-U@d>|*mI4~>OADXTLKfl(Q&{hyxd!q_XKV;?m18jvx((#Q?_1{B!=gR9fx%>-Kc-|)gDoP)v|gswtD z{YuI54!SG~I^`ny*PG=%R9>Gx2!jDZlR|n_1^uBR8Tc5K|$#K zJS=j9W}s^IL*}NkG&SsJh_G9Q^UX12o`-8^R3mt_q5kGyu=UAFOW7uujbqUBsm#ee zeQL6RzLomcx1)Nt#3d}6)fum)vd0@bg|JaaR0E22IJ#lH9l@N_l~eIjR5ctIZ*6OlS{ zSX}|of2BUFn#d3V>d`K3WiU~v36?qS72gbtJedP3Az(%>DHob+#fHS1k9J69#4LeF z{S=58$gqJRvcK?Rdl~V$p9igaw@hb^4(Y(s-%qW0(CDXATh%1?RjuAoHQN4bL9lD-Sg`@8dgA4FMy*+WI_e z`9m4d7ik{~GNX+E#~zFl{M>7T7zOtx2`FFTHEwN8LQ!?#n_k#=X;>35K6Fo0CG6u8 z(j#^$5*+~wACnLM8!vDyl*K3QwvMzkIj*s^IW?;u1(=p6i|l`)rTG>bI&^FIm>N{y zX%BE#4I^2uVdDA0?jI7A6u|N$i{uQxg=d5jKZ2F!Lk9n||Ljd4N$P&>?k4q(sBh;+ z#q~fnr6zSH#)>zrgN!#s(N`+Riewaz@39D){2K$33s*67B?g7E;!wgKukqAS7l1

s#CT+saC=1&WblKeR&+CZE_64rY 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

JoJlUH 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 literal 0 HcmV?d00001 diff --git a/package/macos/info.plist b/package/macos/info.plist new file mode 100644 index 0000000..72b54ba --- /dev/null +++ b/package/macos/info.plist @@ -0,0 +1,33 @@ + + + + + CFBundleExecutable + launcher + + CFBundleIdentifier + com.blurrysquire.teacode + + CFBundleName + teacode + + CFBundleDisplayName + TeaCode + + CFBundleVersion + 1.0 + + CFBundleShortVersionString + 1.0 + + CFBundlePackageType + APPL + + LSMinimumSystemVersion + 14.0 + + CFBundleIconFile + AppIcon + + diff --git a/package/macos/launcher b/package/macos/launcher new file mode 100755 index 0000000..b2484d7 --- /dev/null +++ b/package/macos/launcher @@ -0,0 +1,7 @@ +#!/bin/bash + +# Tea Code launcher + +#set current dir +cd "$(dirname "$0")" +./tea-code diff --git a/scripts/make_macosbundle.sh b/scripts/make_macosbundle.sh new file mode 100755 index 0000000..337c042 --- /dev/null +++ b/scripts/make_macosbundle.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +ROOT_DIR="$(dirname "$SCRIPT_DIR")" + +APP_NAME="Tea Code" +APP_BUNDLE="$ROOT_DIR/${APP_NAME}.app" + +rm -rf "$APP_BUNDLE" #if it exists + +mkdir -p "$APP_BUNDLE/Contents/" +mkdir -p "$APP_BUNDLE/Contents/MacOS" +mkdir -p "$APP_BUNDLE/Contents/MacOS/resources" +mkdir -p "$APP_BUNDLE/Contents/Resources" + +cp "$ROOT_DIR/tea-code" "$APP_BUNDLE/Contents/MacOS/tea-code" +cp "$ROOT_DIR/package/macos/launcher" "$APP_BUNDLE/Contents/MacOS/launcher" + +chmod +x "$APP_BUNDLE/Contents/MacOS/tea-code" +chmod +x "$APP_BUNDLE/Contents/MacOS/launcher" + +cp "$ROOT_DIR/package/macos/settings.toml" "$APP_BUNDLE/Contents/MacOS/settings.toml" +cp "$ROOT_DIR/branding/AppIcon.icns" "$APP_BUNDLE/Contents/Resources/AppIcon.icns" +cp "$ROOT_DIR/package/macos/info.plist" "$APP_BUNDLE/Contents/Info.plist" +cp "$ROOT_DIR/resources/modified-icon.png" "$APP_BUNDLE/Contents/MacOS/resources/modified-icon.png" + +echo "Created $APP_BUNDLE" diff --git a/src/main.cpp b/src/main.cpp index 8748b0c..82e1479 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -14,6 +14,7 @@ enum { #include "settings.hpp" #include "file_view.hpp" #include "editor_tabs.hpp" +#include "terminal.hpp" class MainFrame : public wxFrame { public: @@ -48,10 +49,16 @@ class MainFrame : public wxFrame { if (!startup_path.empty()) { this->file_view->PopulateTree(startup_path); } + this->workspace_path = startup_path; + this->editor_splitter = new wxSplitterWindow(this->splitter, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_LIVE_UPDATE); + this->editor_tabs = new EditorTabs(this->editor_splitter, wxID_ANY); + this->terminal = new Terminal(this->editor_splitter, wxID_ANY, this->workspace_path); - this->editor_tabs = new EditorTabs(this->splitter, wxID_ANY); + this->editor_splitter->SplitHorizontally(this->editor_tabs, this->terminal, -200); + this->editor_splitter->SetMinimumPaneSize(50); + this->editor_splitter->SetSashGravity(1.0); - this->splitter->SplitVertically(this->file_view, this->editor_tabs, 200); + this->splitter->SplitVertically(this->file_view, this->editor_splitter, 200); this->splitter->SetMinimumPaneSize(50); Bind(wxEVT_MENU, &MainFrame::OnNewFile, this, wxID_NEW); @@ -74,9 +81,11 @@ class MainFrame : public wxFrame { private: wxSplitterWindow* splitter; + wxSplitterWindow* editor_splitter; wxString workspace_path; FileView* file_view; EditorTabs* editor_tabs; + Terminal* terminal; void OnNewFile(wxCommandEvent& event) { this->editor_tabs->NewFile(); @@ -100,7 +109,9 @@ class MainFrame : public wxFrame { if (dir_dialog.ShowModal() == wxID_CANCEL) return; - this->file_view->PopulateTree(dir_dialog.GetPath()); + this->workspace_path = dir_dialog.GetPath(); + this->file_view->PopulateTree(this->workspace_path); + this->terminal->ChangeDirectory(this->workspace_path); } void OnFileViewActivated(wxCommandEvent& event) { diff --git a/src/terminal.cpp b/src/terminal.cpp new file mode 100644 index 0000000..500b744 --- /dev/null +++ b/src/terminal.cpp @@ -0,0 +1,219 @@ +#include "terminal.hpp" + +#include +#include + +//TODO: +// input is only after the prompt +// use ptx instead of this emulation + +Terminal::Terminal(wxWindow* parent, wxWindowID id, const wxString& working_directory) + : wxPanel(parent, id), process(nullptr), pid(0), input_start(0), + working_directory(working_directory), applying_programmatic_change(false), poll_timer(this) +{ + this->console = new wxTextCtrl(this, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE | wxTE_RICH2 | wxBORDER_NONE); + + // read from settings + wxFont mono_font(12, wxFONTFAMILY_TELETYPE, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL); + this->console->SetFont(mono_font); + + wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL); + sizer->Add(this->console, 1, wxEXPAND); + this->SetSizer(sizer); + + this->console->Bind(wxEVT_CHAR, &Terminal::OnChar, this); + this->console->Bind(wxEVT_LEFT_UP, &Terminal::OnConsoleClick, this); + this->console->Bind(wxEVT_TEXT, &Terminal::OnTextChanged, this); + Bind(wxEVT_TIMER, &Terminal::OnPollTimer, this, this->poll_timer.GetId()); + Bind(wxEVT_END_PROCESS, &Terminal::OnProcessTerminated, this); + + this->StartShell(); + + this->console->SetFocus(); +} + +Terminal::~Terminal() { + this->poll_timer.Stop(); + + if (this->process != nullptr) { + this->process->Detach(); + wxKill(this->pid, wxSIGTERM); + } +} + +void Terminal::StartShell() { + #ifdef __WXMSW__ + wxString shell_command = "cmd.exe"; + #else + wxString shell_command = "/bin/bash -i"; + #endif + + wxEnvVariableHashMap env; + wxGetEnvMap(&env); + env["TERM"] = "dumb"; + env["PS1"] = "\\w $ "; + + this->process = new wxProcess(this); + this->process->Redirect(); + + wxExecuteEnv execute_env; + execute_env.env = env; + if (!this->working_directory.empty()) { + execute_env.cwd = this->working_directory; + } + + this->pid = wxExecute(shell_command, wxEXEC_ASYNC, this->process, &execute_env); + + if (this->pid == 0) { + delete this->process; + this->process = nullptr; + this->WriteLine("failed to start shell"); + return; + } + + //this->SendCommand("stty -echo"); + + this->poll_timer.Start(100); +} + +void Terminal::SendCommand(const wxString& command) { + if (this->process == nullptr) return; + + wxOutputStream* out_stream = this->process-> GetOutputStream(); + if (out_stream != nullptr) { + wxString line = command + "\n"; + + out_stream->Write(line.mb_str(), line.length()); + } +} + +void Terminal::ChangeDirectory(const wxString& path) { + this->working_directory = path; + this->SendCommand("cd " + path); +} + +void Terminal::MarkLocked() { + this->input_start = this->console->GetLastPosition(); + this->locked_prefix = this->console->GetValue(); +} + +void Terminal::OnChar(wxKeyEvent& event) { + long selection_start, selection_end; + this->console->GetSelection(&selection_start, &selection_end); + + bool crosses_boundary = selection_start != selection_end && selection_start < this->input_start; + + if (crosses_boundary) { + this->console->SetInsertionPointEnd(); + + if (event.GetKeyCode() != WXK_RETURN && event.GetKeyCode() != WXK_BACK && event.GetKeyCode() != WXK_DELETE) { + event.Skip(); + } + + return; + } + + long caret = this->console->GetInsertionPoint(); + + if (event.GetKeyCode() == WXK_RETURN) { + wxString command = this->console-> GetRange(this->input_start, this->console->GetLastPosition()); + this->console->AppendText("\n"); + this->MarkLocked(); + + this->SendCommand(command); + + return; + } + + if ((event.GetKeyCode() == WXK_BACK || event.GetKeyCode() == WXK_DELETE) && caret <= this->input_start) { + return; + } + + if (caret < this->input_start) { + this->console->SetInsertionPointEnd(); + } + + event.Skip(); +} + +void Terminal::OnConsoleClick(wxMouseEvent& event) { + event.Skip(); + this->CallAfter(&Terminal::ClampInsertionPoint); +} + +void Terminal::ClampInsertionPoint() { + if (this->console->GetInsertionPoint() < this->input_start) { + this->console->SetInsertionPointEnd(); + } +} + +void Terminal::OnTextChanged(wxCommandEvent& event) { + event.Skip(); + + if (this->applying_programmatic_change) return; + + wxString current = this->console->GetValue(); + + bool prefix_intact = (long)current.length() >= this->input_start && current.Left(this->input_start) == this->locked_prefix; + + if (!prefix_intact) { + this->applying_programmatic_change = true; + this->console->ChangeValue(this->locked_prefix); + this->console->SetInsertionPointEnd(); + this->applying_programmatic_change = false; + } +} + +void Terminal::ReadStream() { + if (this->process == nullptr) return; + wxInputStream* in_stream = this->process->GetInputStream(); + wxInputStream* err_stream = this->process->GetErrorStream(); + + if (in_stream != nullptr) { + while (this->process->IsInputAvailable()) { + char buffer[4096]; + in_stream->Read(buffer, sizeof(buffer )- 1); + + size_t read_count = in_stream->LastRead(); + + buffer[read_count] = '\0'; + + if (read_count > 0) { + this->console-> AppendText(wxString(buffer, wxConvUTF8)); + this->MarkLocked(); + } + } + } + if (err_stream != nullptr) { + while (this->process->IsErrorAvailable()) { + char buffer[4096]; + err_stream->Read(buffer, sizeof(buffer )- 1); + + size_t read_count = err_stream->LastRead(); + + buffer[read_count] = '\0'; + + if (read_count > 0) { + this->console-> AppendText(wxString(buffer, wxConvUTF8)); + this->MarkLocked(); + } + } + } +} + +void Terminal::OnPollTimer(wxTimerEvent& event) { + this->ReadStream(); +} + +void Terminal::OnProcessTerminated(wxProcessEvent& event) { + this->ReadStream(); + + this->poll_timer.Stop(); + //this->WriteLine("ProcessTerminated"); + this->process = nullptr; +} + +void Terminal::WriteLine(const wxString& text) { + this->console->AppendText(text + "\n"); + this->MarkLocked(); +} diff --git a/src/terminal.hpp b/src/terminal.hpp new file mode 100644 index 0000000..898fe0d --- /dev/null +++ b/src/terminal.hpp @@ -0,0 +1,39 @@ +#ifndef HPP_TERMINAL +#define HPP_TERMINAL + +#include +#include +#include + +class Terminal : public wxPanel { +private: + wxTextCtrl* console; + wxProcess* process; + long pid; + long input_start; + wxString locked_prefix; + wxString working_directory; + bool applying_programmatic_change; + wxTimer poll_timer; + + void StartShell(); + void ReadStream(); + void ClampInsertionPoint(); + void SendCommand(const wxString& command); + void MarkLocked(); + + void OnChar(wxKeyEvent& event); + void OnConsoleClick(wxMouseEvent& event); + void OnTextChanged(wxCommandEvent& event); + void OnPollTimer(wxTimerEvent& event); + void OnProcessTerminated(wxProcessEvent& event); + +public: + Terminal(wxWindow* parent, wxWindowID id, const wxString& working_directory = wxEmptyString); + virtual ~Terminal(); + + void WriteLine(const wxString& text); + void ChangeDirectory(const wxString& path); +}; + +#endif