From bf44795bf5e43dc121b71a3fd33492834fb56cc2 Mon Sep 17 00:00:00 2001 From: Chris <185133702+chrisriv10@users.noreply.github.com> Date: Sat, 27 Jun 2026 14:22:36 -0500 Subject: [PATCH 1/6] Update main entry point and add icon path in package.json --- assets/icon.ico | Bin 15086 -> 370070 bytes package.json | 5 +++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/assets/icon.ico b/assets/icon.ico index d58056e67acebb393f80e01351266e55dba30b60..24db0c86a16fc54c4c94ab0b3251691cde2096e0 100644 GIT binary patch literal 370070 zcmeFa2Y?*Kl|DY3CBW%y-`)RwKKtym&psz?A0`M%Aac$*=bUVe;~Cp`*gpRq0G|yu z8KD430ttbH2tuHMB$RX3u6Cu>t~P1&?##a5_f>UGSNC+!^vuq#7BM5$c6W8vt5+}8 ztJtwvQLH@n(T~P({cP;U(pc>JSS<@QvqknQJvMAn^L zEHjTNlIKSLy)vew8F(iNA8^4ysRWa$fASRvn{)cq`_t&KBLfoGplkS}$JO>6a?b{A|Gw_}vV_rjx zUg(XM2bGWakcD8J)95erWXR{Y2iZQ;&U_Z(C5p#6AfOp&~NWK70=yI7V!^fSmDY#Gw!9S2o5 z>JEEX_s0um<8d+Bcz%T}KchtEom4C@A73G3zZ#P{Ke|ZqM%mMR(gEf2*ZAklrSjC6 zR9##yo6!btyy(NS6#l?;v};qw43mim$7J5mF4MfAZO#YX9e#Jc{-D&Ihc^3yBB{Bg zLK+^qL3-+|q^Ge~Hav8fJoTM2nSShWney$JY#9H0jRX9oe&N7608(G$cImk3qq6sk znC$)Y+0s+9Uco19@|wSzm5b!nlMa$OCzQxrr+!2_YBs6(M1SbuwEclf13wnx!I zmFvhuqNiIL=1i0|cO4>&Ad_p)E|G1QmdnmdV$yim=i&QwYx?CZi_|CZzzVEXqGPW# z&-}Ag-u^||a7s+JoEeiHmzPWJm1WX+d9k#^$LW3G*zA0ZbTl#b-CHNEFWe{Fum306 zf^w_RE0X%F%cbEOlzVYZS}uYw_0xZq#G8MRzRs3@)*becbVGgnI`>N3gnOj+>W|9G zV`H-F^diu?LUvqIDm%}K$!_>?Ek8S0dghOnz8=U0^DuADba!kq^7GgH`?F*x_`Bki z5}9)2mxl=Q$m1!`_kSfETabEVUPwf!4+H z`f(*P75?}9lPje1cNa+KriCn0{Zw5kZ;rp+2ON~F;%!bgz?8pZwKQB_By|@R%WU*D z-umI$(zSE5Q!42UJe_ih1Ajd=8)Vmi9VK0x-c!$gQTu2%Eu8WbH7lh9zIO9fC9?J8 znAE>HPQgr|%mjJu`0R{Kv^PuZb3c(?mkgKc(_+%IeR*EWkKa}#9oH90Gwk1<%ZEwZ zqtWOLb@maP`ao5NILHNq_ji-I`FRZ)(UCAsZ3hXx9Q!|ANo7G*VQVCC(e|_jp*~- zR3z~`N~P!a3h724sOxg*J3Y~ltZ0||qRZ}JL zzh6Yk=dgkY>e;y4-Bb2}-Z*h|>;2))LE}mBjsr zN#Zt?g?g*L;H|j+@i6IIGEvJT@a;=D{%H`*T;hzsOW4d`wOA69Zj!|FH{yPgj#K4= zZ%ms@85#2sHu}h<3Cpqr1o>wZwh`c;`%jal4tq`(a(%^65smy(`5F=pO=@<{k&App2{fYA7-3W8w5Oq zao6)vy_kR7@|*Ky&d8X&Ho8crjVO|_UuXXo{pyA~Rgd)ZX@jrB#D~9*_48%pm7kWS zV`8%Oj8cpTl*pSHcbk4psf_(bOrAgKGg7jRW6&*Ki_a( zsjND)NS2&dEb}m@ItybvQ;#W^XAdowrw^%+t+SpR5_~YYw=Z~3wqvYq`?GTc@9y*t=UA@A!=D#u!KKRpnB1aj{gLjxo}e6?#1T#4>sPw3E2vk4m%cp*!WBqoLPl z4U^@VQ&@(v$F2W$tj<5sGUSYX_U&A)#{Cl0?#37^#*|UI8rv~4VDNTuW*zF@o+K-7 zKU5ZAes1~MWwI7Fb|Y-nHjLj^UQ{C8+gCVsaO$3mY-Gw~WM{?ml30#0G2-p`JDT3~ zee_xjA`|ayle!sylhrqUSr#3GHtobBSp&Q`oew(;ylXDS_%r7jFs9k{`a>H3!D!cr zBXMVa$aAX>M54E)UiM7>wQRorpVfT8`ZJ1T3+*aG)y0^nBi>gQOVjmb(smujZy|?? z6;oZ9ndsQ>_rRIBI|0J3XcxyCsK&8(%l51OPR-*~p&i?Kd8zEWyhL_ihB=KZie%5# zCDMFdskB~QBwZNy?!5!!tS|qU#y#qKm44$7-GrPs;PbZIg0#@qn#Y`{E0(>1^yv~R_HRM*}AAn})eDt*n>jvNl6{fE5p*Ry4@G(T{T z?7pZ>wYSSLf3*&N!Ht1q9)HU@ z#Zvd{Gffw(&K-}}4Mq!#qALHn~A_)i{H zER(QS;?2`xcmDca>D;x&L0jv2pnMzKg_KCslk5{o=vzV{vZ!qvrJamG@uZ8c)d0Wg)HeXdF4QP|fw(0et~{~uu0Z*%DHZ65|q zmROIKFG%9oU)1yEtjArLujl+d)>XtYj~-VzBOdpO+i~T5KHqarA9yEziM-1vYrOMG z=S;ASEu_4n|CN~kS4rIWd0h{zg-F~9`rZYe@OlTrou$&pd#+Ewnw7*aJ|~H}54&rU zXr~5JZ^P=N%GEN(^-+l> z50;5_4~fY)OXBDMpCs-@z_KfWq^I?4`@Hyo=Y)nNj?a2q}F+I zjvl}6mPYAnZcz7(AF69W^Tij=;bGKE^+{`9eOg{S=TkE6w11LK)1Fj%KtjB))+9$A zUx1Et{S<#4RcmF{-J@g{=0;~=?ch|bqka0TxW8_+G;Ut4(kL42FLr_B_Xzyezw#GZ zcKUExfOTREurA`Q6N=?k%+J4sb-2%bGbUpXJ5bh5)bp*(^S;*y&UxWq0&6>V{_!$d zg*APvPA`$=XO+rg><6EBQjyF)zDQ=^T!^V-O69pDE99~Nz?$kGV~()1UCY8i&YMM* z-yG6uU57rm?vd&rjgSpkN3!|+GFgwcBdakt&NV%YPt`Pd6Ev6(nV5ogv{Q~gNFE0b zUb=h))|Kn^o&!4fpF`a;*+a@LfAN;xQuEz|)jsU)Sj)5(>wPw3ZhgbqF}0Rv`I*IP zZOuDan>7n-R9?h-mC0C#JN1|k$x~mC$qVOvP1@^f968w6^GOkX9NH~loWMG)+Izk& z+ri_iOUk4Y^WWPMwqZ_qGxp}Iwd~M=C8+y?Q=RqrM`JDZNa(^*WuU=9GWKA|!377S zjohPYurKBUvyu<(&k@PAj|U9n8{d}ZD~qJ@+G4B;#}&n=a8T;Gp#v^HX0=-xR`>-1`^#y*w- zBm0k>E%Bd!O8RP+IlMug!|W7&duJ^rD-wsVTRZb{S$5;sWG>pmMJHmt@i}F(=A06o zTZVmO7nZ1f4b^BvYT!dP{_!kT|4{gT`5LHa${#T4>ui?ztM_8MDR{ehL|qTc6~!9OaN%~*%M{UW_Dq84Wg?YXKL=T(9K zKl~!}%~?khRL(%vHxMqWL%+=UWoK^4c`W>=+>m`#~<@I)Bz1X9;0_Wa~{8(s2dW<^Af2p`-tXCW;15J80rqZ^WA)*9O=B z^*Zc%IZ!s83||=gF{-f6c*iB!58&*7*@^umtaBaqlr*S%V;|X#SbKRR)+=IdZ|_Z5 zFSmNSBWHkb${I>nCI42vv7e*y{&Qt3u{<}a_cp9aee7K6tG4XRP^vR=p?*Uj`6FMtR=qBbzd1pwvHx{F_DyWS zmHR&`q0`k^XU=o)SpPcIZx7_Ufpy0|q9&|gZUO(fAE)z<4@>XFTcmII2F-JpV{~mO z)t@-A-r#-b!sn&w-a};<`nf#+aTWH#tU9Mu)R=RZpKv|mV~d6$NZzslYR*_VAy2dBT^Te)1Ce)J8gg|AyYP8!+!TZ_t;Z7~WxL-_GV{gkkjDKu$_Cal@od;d2QSUwX zen&dreGcuK_JNgMbL_~Fv~fn}9DQ%T?|7+2e}5Owv)qCDu#Z3Mm?C-YxFU@6VP7nK zSC02^f9X1$gSY|qf9tu}XY$*VrE}FANuNNi!DZW?u3hK5bngvr1ATRLz8CFU9eBR$ zLhO|XZ+Ae>m!Zy+M`3IeduV23oR|CH7Qw$+3_oY>dBbJbpRSOuZTh@H%8#;XlM{y!Lp{-E{=Bk_r8A#40~ZCfFgH~yQn&Uscn@6)ki z;sq>vSG+8Hxo-^nQR{H6fsL=mIQQg3WAfs~U&H=4XWRp_t;apkRz{IsheoVu0(-uj z#{E#L&K)LOp;PS(U(oe;`caYKMJY3zG*12FE2c>Y`z6>%%>K!4wC%fL50;NYp9bd| z@Yjp|bCGS9Rd43)STtE`Z~dH9!DiN61p5j*+p%C0UnTpI`?CItl`l#U$9--nQDZ)& zK^=Ts`ae~-eOcmr_4sv0|0P*(N)_zN=7rMqt1(gwIJM`)Kfs>nTKdgsTRL#I3V)^_ zy>ILP0`^RCe--w9aqk*v(FA{X&t=$W&b@@Ue?j@e3Srtjwi`)X4_ofE^U59~5&fvW z51tKQ5M!wDl^W?6;#>gw$a}6VRWLgjX#Ll405co8%~x7S{u3*(Ukm$!c;+nkz;WMS zE5^WD;LkUq&%OukVm)j^%kNK-p3Uznn?YI_oYg(+y>+p){rMbef{|F8x723v5Z zKnwQTwUDOh7d2f|s%X-+U;?u_bllhVpQ83XavvJ^r*RKpC+K15u=m;$)B*h(v<;2u z)3^P0jPxv>rf~-idzVj_jz1hHt>AGh`U7n^JEa|c-gfN6<6cOHHtY{;MPG0)=+Ok) zbPuKazc)ee3;TWr_O$6edfacQ_fBd$sJfs|+z;A{J|9EJPrrchMQMkWDFwI`JIK%Kg<*H6_EwxSCr7^Gb#X_9+U zac}mdazC-zliK?y?9s(}LfZF>=ttyIuWa%dAC$7Nd=mD2{+rT=KJJZF@}TLU_Dn)1 zOg+^V^iXw1yxLa@dg*k?gR`@FhBo)K#((}fNi2O{*PFNvwf?Yb)3iSH^>j#L&i#6i zC2Us$`*qbGUbT-G_jmZ}$~q(TA->P-<#p9?&+&#pwgMH-p_h2W#i$K{&dzsuzycpkQF#IMC%0B|koblO5{sHAc`FSXx zbRhm}4>HbSzxN*`0o`Ytq3$Q$h;{^fk<~vZ?fbRfem)sG7`-4Z@QseXdW4WEs@+~4b4sNV-iwhO#2@VX!a1sN#F zz>t>#-*Eti#}60|~%Y&XgU!3i4H;S3w2}GEk5K?B_4c;T6Wo_k($Yf*kKZ z_PoH${fC$PvW?~0wD0?~==THLJlHaz`L54+!WKn!W>G;7J^(fado#_sQsjH%#ud`A zZV7LdkGEfapQB(GJbt@AUrwJj)=^(0D}H~IyfC^#o;#vU7X0_M(pIC-ZsYkAMn(qP zE)~if02}1!Jas&QbJ({%`#X8<)W4Id-;T-jql)FlQN=R$>p0VI)JJ9Iqxa#=>JBE= zZ36dl7xd`;O9ORouh#kIm2b;?H+(~0#o2wYAB}Sxk1v&%@m-Q>qY?0po{5K-$fIA1 z$<*_{D!bl&P04_=1u5U9*k9Hz4Xt`4@~LaK&f^UF?GN83bH~KwoulxriIesBsa`)e zCa>Zg*H@Gb;JX|+)AYGf!{o_t70csaFOvE9-6%b+&Ds`F267w+8=8Gp@_uOXKW}!{ zIj@O~YhAZM*4*%ASu`5w^x|7Y@19a3^G+<1cM#q>9^c==8NRLz6v>p4F(m`zMjRlI zd>P-ZI`fNC``%kg87TA-2B3Y;WBaOoJbg}k-IV`dmP6NzoWZ*S?qirVIg6U`r zUVyEbJgP*V8#zoSj648m9cx?g+HI#uS7W_n3wWOOP^7~L6DM=lUWG&kE zjrcCXI-J$N250K7J`?Bk<69*BHsR9K*cNCR;CC8r8F&TXYkUbZFlAIsCgFR1lSU1P zEf_B2M;#=Od=Lk8YHk$pmp3qS^@!v?&7u_1o9_62;mb{b@03T(miBWVYQ%ecdb z%VY2f)<65_f(#6zKVo>_{_Z5H1Rtw>ytie5-z26CsP8k=7C17%?=|VR0Q~~A1Mk5G zyo-LpT=))e!UoJjJD~l5BGm>=Jd*N&@Ae*Do|J)SDFa6gmnXl0wr1+%1sNCw8DQU= zzpgcJO7#W!UI@OOu>;@cslxXMs_^YOedRsv0NMlC17!yw2W$&y2R6b6tOx(;6RtVC zR951f?MqHCmWALyzvuK8zH9XwY`_es4dAzq#*JWqpaktgxoQiH9e55hFk!?ndHP!= zvSap(1sNDX8Q|C(f4w``N$oYCl%3#h%_Sx38{F0S-r5d+qYB@T;I#@@hDykRk^!XM zhVNG?e*oX=+jxGdtVO%QZ&WS^ub0C1FFvhA=AT@Q{-7Qgq#sBhU^3c(3DEzikAPnY z{=afe1?)hDyy*A@lSUsP;}0*FiAR1|8rLpTII4N%0i?xXw6Q~}4DDZI2(G(T8h-dq z*#$k`g>UBYJBu|8_%;*2yI6zo6RB^qQyvhiAPYtYw!t23<9A4*_v^v;&6j^dDt~o` zRQ~#GS$WAPWg+@}^EgLvlKy7>tN0evOBh3<{*(WYAI7oa64-`vB?m8!p$rT|doWBU zAAO)qJhWJ*p8h%MsNbn&V5oh^AW$CPCvyOf-EVpL3aNuHUw0M06@+h#*5aG0yDr7I z79j&W@%ljOz26M~Zu?~)kv-4+Kzf^M6`%Nr-|MY==})rk z+AqlLBVqrc^RqBN_!8y`4ga4yoHBs;5ze`M-Nkd#3^GAl4rgN`T6dt zn*T%jTMmJ;Ff{vz#^39j^O)>`J+HsIRO+wP-_hNDIlrC7Z!_v(>;d_&WZ;rg@E?6c zwCz_&%68!GVMDtnTE9iFC1MeydM-UXg zaE3bAgWdRsTrIxSxa)H89{xcMY{j16pDx|zTcqRxd6A)Aw&kFG_YRr&)ALjx@3BLQ z<)QDC$it9MVgQh5vOMlAmN^vomsM)w=GOYhwu z!*>+%Ey-K(ZAo0U3=~VpttHY1xoEqgOgbmrB7LoTT?W6gH86CB4~n(J{LTHz1@ac= zh31`FA@4v2-hnNcdrCQ;%keFAtR-hStz6zkSa@2Qyo=}d&3cbPVf|PH8E|wzG4%%$ zzZTyZ#kV56Z-opXbl!$hpxLnA@TW-f}W5i{w3eDY+KXzIc&O+@0{C38T>W9 zH&f=HSS<5S##r$wrO@#*A>ZEv&zE40;j**JWCi9F7*=Ba(du){WHr7Qzxw+eqEd!liCTQz=bvGl^{i$8h3^tI^m)jocsSm}HOn-ZmL zJB{Hx;`pNf&W-H1e>n;4jl*2mtziTC3wCHJYRDz<`%I2XdUJl)+21Z zxI)&SiayD>A1hc&p6s#;_ulalP$}`i5&GMy-!E6+5mmNe+4G8iuC32M-`PGJ{;;s# z_ExER>2I?5+ONplu=(%8-Y+`6R2C!9zAp#w$@kUgmMET+-y5+0Xd~94Y`zd{Q7%Hb zxKy|vrTWe+gb#qIRO;TIwkhk?|^6ES2#a)Uk(l!XanD_ALF*3G7R4VlRv_3Ui7kT``IzF z68ivFpntvwe5T({KCc6xO<0dLLmO!05wxxs%U1B5`mXFe=9y{d4c|E**+9O7=Pl@~ z?nP)vzoq@AQfbHhRL=t^YX0Y|ZaLFB|Gu+_=KaA-*~UEh$FwPq&p^H>x;mtJ&NH&@ z``?z;Sm(F)WUK`wZ!bU}4Se3jfHgu4n_<(pfY0Q$;>QWZMpXSA2)A zH!8jtNh{_h+AvSmf%&RVj8*sCRwg~<|IFVJ72uWGuH}uM{o%#?F)!uE=6hR{G*7=@ zw%qi2SqHvv!XB`#@YT0qE!bA@c^mxlZRD>CSRaIWB-->HTtfmrD_@TMHvSxKyxq1t z`p$W2&P%poe#-E@`=%m{UzJNQ>_G2NzJQ7BX655>oVvgKRW|bd$e)42nSFPQ@A1Z+ z()8@TQhEJ9$`*{jY{9y}t>}|)L#PC=8LGhR9b7YL)(5jK;OGDSJ`_j#;$HDmN@38<3Ge$X60gS`wPBbzh&Rn9mR9- z9#&P^)}GqU()`42QghWuWfSy$Gxh~-!x&5@#$u8@=UP#=-Qf2wtR3X~v08-P?5i;- z9mhIDT=zIWyz=AGzBgKa-CpwEY2!Pg_g&z759TU+Z!A)LPuw+3663CvL}OKf_j%U) zgwronOvj(@%9Yae@Kxa7aM_Oaew(q*pEiCAeD$qd2M#-5MPHq~SL;PxzSm)G5ko!J zne1UeTg}h_pS=pkY;)%dK{hwI)jPn!OCw(Pp7OscV`uL^zg4IGC(7k(V~eZZe{`A=J~ z^ z-|<)RJqzCZ$0luC_kq1n`trK(PMUTueOVgs8zVcx=W49;+=V{bR`~L3xW^A`#Mg7L z5BR?sdp|V)+1~3mU)ccI0m^`~`>_35|KZDnj|>e6jkNbFXx@|m&EWOkYtf&_I@DIk zO&jb*&wXE)#DXW#$7t359c>+bku3PWKk+v5m`s#5LHTqJ-+MZxd;WN7{OLDkC-(8y zU>`5}UIRP75$!zp^{zrZ_xG)bTx@_0Y@!Wt{QOF`0SNT@xM#%d8K4Xp{?~z@svStm zfR=?OwEN8%$7_N-v><;guI<0WSmp9*+V5mTc97I zdjAJ_TZ{GGHSp=GVc)sOe<^JLa@c{D*w?$7GQfR)hW|+$;PT(K0on&tZ2*0I_* z$bO$=2X?U^z&=3I4`4fhHN{t!NIl*)fbWghA1G~)T_f?D)e0{)j!XNl?0os2cDAeyDu%3TJoLt8@#N7Zf^&Vd6pB;Z=ekDOb=}XFs2I|unzA{ z8=!qb?F-oL0A+xFfZ0RD{R6wf_d3W3_nOt;^hs%d{zsB%+M)Q)KdN1K#v1k&P4`Pb z(VVdeTiX1alN9gkE-M4yi=pq}69VmhC3s&6-Yf#&xnG<6_PKw5G0yi=Hh_D3;S10Y zpf6}-!1M*S0gjRZ@LrGqa6GpZbG2ww(6;PA-n#F7UOH#pFNwBBt?y3Tp0|043^s6I z$<;nBSB>L{v^{aF?1tXgUtTV?;L$GVJbAwZww!uj1)i>kzH^^G&ue%aYqI8J&Q`Yr zjtqc@t1;%c7HM4>z?cB!$88JHAK)HA&f7y)b^(6lz5glgbDoxXS9_B0YK-Z9NcH11Z1M|=xsCEGJ zx@-rQu|J^B`Ec3-p8bF^g3Yk;TOcP}F07FH2QHAFt@_*sGG6gpo%vkw=>|;}XOFW*eO(Bh=h<95pW_v*+n9AM+X0;Acp}gBEK>d; z&v;zo$bee6gEhHpaR%fX$jQdbJ|+!M-XT4^Hj(A(HxzujL8JG+)bpUS9oyga*5gtS z9xL5<+I;H1@%3r!8E@eSEM z;}MCs?^Wd_$LYxXAbbWO&YqhdtTNv(<#0}izqWDTQ~FjxvCD;Q1rq3ydt2RlmDl+Nw7A_>OtFL8i0fyXnv3oT<7$TqK(@KCuby zQT?B;QTUlPYJ-j2kSx#9|ITrD%3kPuGv-?wxekN#a+s$x?SPU2@SiqdD(wDaICJfp zL-FkvoV&Dp;Vey8%*CjET>D~tmUhPBJCSL9^GT_?>=UvLK55lO6|xm_yXS!`2Z8_Z zGyl=i|E}?ONE`gVy_jch=KMS7VjUTvKgf1~HlPM!8Txro@S9Cv#XQfXzbcx>ySpO# z*ZH5rvd<0bu3RI#e{rmA2fuexXMC92uY;*iAd&_yQcO-HEZBS4YO=ucJRMT}|%!4})&sXlLN#@t5e>E6o#s zjQOcyvIFBwHQ;+S#u}^Heqp?^662GN59s#4VE=9YgNC4A&-fdq3p(F%L#ec3eHGVQ zHFFJ?-4-}9P>nIXtr!cKdcsGfskTPZe^AG2$#=)rQ|3D6Pmo==d`7A?cI#2IT)tMIPrflD>6%s#A4m)hWXO?iz8(h{E}MEQ*$1X^A@mI z47*Igm_`lyu1)t}tnwA~-_`#l|0i6h)=l@^QYu|oPu&R_pdFwL7(2jz0ewO}K7e%` z=oeOBe2{dmaQr_E1b!e~Zv96TY z-6}Y80l&5RfeQ=#_uDXWyl7KF0T)@nINi1-Ezi7TNpgwcvHR)T^-ytPjI_kp|i)2I7Wm zJ=T(`E9Dhy$LeribuDZ}3+9{n(_;g!4&+^4{WKoR&ldj^;CBLN{lss%*GZPqo$uH#+jEWEA&YL)^gqBb19PF{TMy)$+i31edfWS>u&$J>C!L9sbA1 zUn7eDcY^=7V$U39fOY_Ff$|5846tuNpTOxKD0=`M+XEY{&IiXHfM(FSw@R%$P%2Jwhwb}n>3HmFoH03E zn&H2e}eqK9an@nK_#eN^X*H7*H zVcB*7KIWNwL79fKz`bIW1!W(uMOy(mYQ6u=_YwaG$v-jtAA6}Jz~jE}g8z4b_XxZy zTj2Nu9yx$4@O%Z*TkXlBEEsu!OmMGG3vD&@uNi&D7LG0b;@iS+3G{WgXg=U?UuUay z&wWxles!p{!G^TLXKz<~x#3e@k9{7LHz!c`RG=IpbaKzHbI&W&wJ}f*lq_f&Xa@hA zfJ6HOXB7DFwfN@U|8G$F{paC7pk}L^>Y1Oxo}H7ioiR@QjX*8*#oY#~&QN(%z8A>gw1Z zwbvK-?4OuGJUX%OSJ@}Z0rF6G+8{>?7nIL^L+uZozEAnDd?C0t+OC`HAnCcE@8%i& zXRj?W_5$fco1gezi6riV9k{Cqz5t$S1K1wmosj{a3(WpOH~R>V94OjTKS6t=ukO{^ zuZumK9XLChV@n;>bMUuF+phhsj^;)$h6)<4g#h(D@|Kab^d3sQ8U^WX6(m^{@J$Zy)m8=)Jkp|7JT}vs`+A`wfYM?tOQ| z1~AYLn6|+91IixYj0NK#-imWpXb&I<$|it6%1^+R^3Y9w^WF(Yht0D}W4%lA6mg2r zPP@Z0jQ!y?4xX#P_YVKfRhJLByao0Ky5EjAr~8+vTjerc*IdRV488Jp9YQj|Ig?A(v;}=Q3sn08um{E#7+GMupyU8Da2o>qjE)?5bk@>O>S&V3R=kO` z`K<2Q?l^&MP%?n;3CaQA@#@HdmYHJ3`yR9{y|+|I*9-rpzAweb-}F7R>LcZi=RVsz zWZ;4>9BXy@XX+f-zZ|XoLGU&4y;9{5c;vvyLQ)361E+mZa^UccJk-Il6X3bxQP7oX zk&ht`yP|jtnCycj`Hpvi_mlzJBAinnhwYEU$LRk3XxO!tWV@b1I ze~1hypA~#h+zwlXv&zZ$o*#co`W8K{Z9REUAIBbZ`XKQ%>$)0xIdXu$di>>|O5%qf z()Qp^$N|O(`q(!#{5My8FF^Gbd~%SK2aA_Uxlp?9=s4e-yw0@`R|dl9OOXMG@3#Rb z^f!C&JU|lDe=L0+O>R4H%|jJzewH?bdV_H}K;DN=_b2c@lH@mt3ViSXm;`7T zMMj){LQ)QD*Gl~P>$QJCIe-tK`;B`1K#d_-@}T5`;|eB@yjDC$oZ-K*Bl!MIA3}ou z9rzx<`yfd?cb)X@(&y7F9F$zLor;KmAzglGMY=N>dw?@q5;K2}{=z@&b^&8{Y77}R zA;Ga^^4lK_pAFx6WjkX0OTb9L*NETyDM`$@SNfWqvpiX*lEe2a-_eflFLG$`a@GIi5`SAx1m&D>H0dp@n z4%mwC;5p0OU+A~L)I<4+SjU0-C^^72QMpJGlW&y7&p)Zg>Jk_mOki%I?{3%x@)|tv zGh+&n6E&W9FTOGN9NLqrMVjB_J87iWjTHDkkl*Ajqmc*Y&N#ai< zCGq-wlGv^HjhZyN5BGj;+hMCdNIZ^G*Q6fPUvy=`bFcge-`c<^u=n#cAlLpSPf0#Q z7AO~L?PsA~FW8KN-7LsJK?a7V4D4rZ(0=YS3{4p-=yriG1sN#FKtToyGEk6#f(#U7 zpdbSU87Rm=K?VvkP>_NC$UtFTb9(uSbXIg>Olbd_XDaZsz|Q~~DAQcA&1Maa`ocLY_-7w*8pH~}0tE^bC{Un4fdT~z6!^eV;7hD= z5kfI9pXC#NrTSw1?SCI7Km9yz-sm?ji4eaR!21n5#h)a;+2EWhZOD61okG&2;1*I} z4=kpM1`nySr(d$HXk`TRCnRqYb`E%@&?=;ilyp(biUuon-wpGbfO7I$KaF>geg(y8 zKKSe5eFFXy^5(P4|vz-S_Fr z3w!5{cVPjtrH72S-X(dU10#!v{(CR2!u1pT-vjq8d-H4h2F3Zy&GMPG zNXlDq-cTB;e3|nb_~CG(!qDl0-~`2)ax-7e{Di^7T!ZOh;Mrv+GSJZEF;|q3k?tm~ z_Zkg1Z=UpJ1t9G zd0_?PY0_lF>;B|1d81r2@gRHq9L|ee>d!j3IHrT`m5uPa6AKrPeIJ&Ga^}ifYB}lN z`C+@(|Eaf`r%}L&MvPi+wuLP&?LBgQzozGK9yenyy?sH>Qqo#loaR_*z|PE z^x~Bb?_3z!*=;*tHgxgk3$9~6(%AG%=Wq9?EM115_BiL#Cv)c6UshPWKV8_fS8lv` zgyr$e4{^vA4{y2o;-Ob3!tu{ndEs#UGz!DT#Al{QdfwRO+4ly1*wyA6aj>7m^7J>} z;HPEZOT%1b$;QXPw&MokK3e;qo@d$MHSm1N4p%>&qw>wjxw(eZfGJ#g^q1$)$F%;q z%+KCDhQ`rgxp_0;Mm(ayw0%0SUZmE=EkE^Lro6%LO+BLG%5qH}gM*==dA6_Fz_s&5 zz4zn7e2mMrT)QrW69hjUZg#mrd4u9yc;v5w5GvRH{QhSbmdo$pG`g&y^mbfOUYAC} z@~GeIcR~4W`2D~4;*bfqDCOBaw9~t=Q+=PP^#rz|ytT`+?+H5yr=U1HU#9z9aIs-# zseeSe@YBPKTED32(&3yf44WtReOMVx6V3lmPm?hCIzE+8QE+FE5?W>UZ?lqQVQeJARt)OZxh8$%c1cyuI~R@*I&?29CL=!y!`|U9K0GbnyE7 zE{J}1oWa+Q>u;ICI-un;lYH`huDF=G85EChMPCu;9{;}W#>2E?yq|B2`?vVx@>uoS;sTcJw3g>K3-V;GRbi!9Kzt{8t=-3 zpYGmgKi+%}inHt%usKb!j6 z`TV@M;n??f9^U)&`QPW`IUjV+1y4w7R`#`jb&aAIZW=#N!s@4J$MGK|@Zjfv1}{DD zL!SNRrqAOmGX!RO7}4+wf`QUiol@l|7resqgvIBMcTiojqkDeK4#LO84OP4heqq;v z!aE4Ak;5=tyzxqtBk7_yUwWRaIgK23K599sdX@nv-?(&G{;>FHc=caD$5Jx(4CSI6L0HPsJ}&9av5-JoM+uRF2D!;PSG`uVJOH zw_RTT?#ademFuUQmzQ4tu`GZ3Fgh{bpVqE-x_5RubKl>38aVbf6?ZQ!GvUbhL1|Lq zdg*B65O$vnjC6Uz>_ECaLAV9gHz=Lq7q8|QlrAVP(HGnox6=}4I$5>TntRsOuCIM> z()h1IX>{3!r?$-4_vXFZ?+JqCFE9J&RGrKohQ`(9t*%Fy%;X9`w|uN$syrCob8&X* zZI|Qa71N~h$c4do!SoEm!7eA$y<0{wo|*F7?+GilUS7CS@%5+kKilP+dtDbV9n;k> z6RrmCKwfjf!Ommf+jz3x>FRE$je1WWq~k+>%1j403_mJ``_9XEH{MQ@%e^12c{W!+ z%v75Y#v>O;TerjDlAo!t2_uNlnalL!o%?f8`KE4RIGgwOH3(;u-~Y}$n`^#s(DV$Z zvyE#m_XgKo@}|!dE;H%#rShEg&Zd1e{9!rvy<2YoakJ^hd;VPb-a3TIfs0#ycnb_d zaUgE#a16uU#G5+w2Zn)_%hjb-`Z@-|Hn<19GjTS2``*0I<;rs1vcq|t3r$U)U|hq? z3aba<1jEXn-rh38^}?Gjq@2+9#al;1k0>z1>PZ`u$g=GNcZG8wIai(}dM0 z44z4Eu3_o?@!om|*U6Q4zW4IThNp;#KX#mb9|gB4_}DP_$9r2|Gt(@b-ZpLWPgl)t zyNoFJnd+mVMyr!er=YT<=zdT>Hmkw$!TJ%F*4tKi^J<&pjSGVlB|ep|+10_T<6gY% zcd6xg(?-G7pN23^;Ja+f$VOhWh3&^Po9ArmkPY0_w9)t+RsS`wy)dKZP1iQ0;;rQ- z?{osPc3IiOXMPt(Slxr-GnHlQk&R=f`%G}7;A^L`%QHCf8dQ$1r%MkzuetZ<^U@~V zUoiQjTv>*{oJ{$M2Y;E;MSY*C{3vB*f3zP-%N8EfhsmJdCb)IUEaz@oFJA)VY4a`K zF^&D4tdp??zO>2rR(w9=@*&TDT4s-*rn!NW4Nlpl%^ok!UzQQb+cZ4MHoXV809o+7 zPg8ExbQ(Y1R)*tJC!Dy??L6*ajE&ddS|Cicki#K{Y=@*rktR(Y2*6M(^Ojd zdEq{%rcFnebnjf4xzXIfHnbtl&3(RLn=*Li&wfsKpIi9`zPTD3k?MDbm2K)D_MY*n zX}sm7%WJ<&g%gdB>GEkBD^e$E9hN>g-mMGY<0%P;xNG=s9Ql+Ruh`!r9Jf51HbM8n z_`0~bd7|^%%@YI%bpwLoX`Yon3bnjfe{q^qObH2;;^GCxErgc!+{`~!|x8LsgpZg0xfB9`1+4tG- zm-%#FyPk+iV~d9NJ6lGwlMR;^h9>#r)xglqu4^V-NsH|05rngrl}u#?z0a=f=;dSw zH>gh0;`&pLty`o`AS@&bqMIFO;H0yWcKU4YZCPSDd=A7jpsn|(LrpT)B{OcB=@A6O zkBglq{9V+tqNYnHj%eCZun96Nrn?rmJt z@jdljfB4*=yxG$!ST{7B)OtmSpKV^7);53raKh5rc?SC4k5kn0D9oAC+Wd%;J`=p0 z-b2StzHI58DZO1kmf@kL&z9u7{w!PL7o=luolV{Id$r57?=#DU!NbKrdLENE=<4T1 zP#VT%;%QjEDDgII`#vbIuD|waJ#rJ$KKSJ)6a1)kwaX?<6M}F~7pH_Df6}EH@OLaf z4>+(c+2R_7A4!;&O-jZk`JR2*G(CPewm#VR>C*Y%xz8?q7nU36rprZ_GsAJqbm9By z9h4?ly!^0pg%g%9pSb2Ks{>s}x9*ww>!x-28x|K8?7fc&YIvI;fgP?Rladx@6-D?_X zoWtocFlB2Q3a3{%KCJ6N;*=XLv)76ImE)(Ce$JLgN!_3^$1i{QMWs!&GW$FK#(LTH zv+JFGoulC#1eg3t$0I;?c;G9;H$E5y+h0dMn|iwC60Q$6BEsN#(`J(|9n4(c4P5yy zeZ07Z#fQ_&o8OkXsCkBRI;BKO8THmRom_|4N%Itc)5ze^d>2+3^oa`eiN{hg4ni=Zk`GYWc>#5q@eJ>0$cMJ+brad%HZ|+t2A?yEG2YlUf$x>9o=M zH8%b1`&7JA;RWO5;+zU27+;tF_WN{jhW0zZ?E0TIk5cKGE7t~~lqOsJf^gAsq;oK>gYxu;)|u)QR9;Y= zi$iq0gW&k%T)1AjB(0;+J4zaVnNgpkz>bQizs#_DGhGy(Wx_2A3@w9(pTH;!nIxX+ z>R{>{4G%BxP2OCtndoA}wDI@i8EoV2yu7#b``>w=HH}Rf=ITx3r9n3JNDn8PJf(vX z{LaXY7w_P-nbSnkqad0D#q|dVlQ*Am4NU*lmLDpg`#zfdx#{h^srROw^mR(*Crq$~ zQ!3o3#w;u`+1RC2b15;lbS}`B^@6veGrVWIO51( z(0jL@>G2E7n<*}=Ogmp{8n4aC2EQPFW|QB>%f9!+^*`Hbz4yU1_om67?x{3mIl3&q z3$L@6wqbbq^GB<%x2}E|;bmpUDGID;IJ*9L6qtUTQA4Fe-n=f|4G+BeymYbO5sn8| z#JL|EM(TZdd8uh#+4JCGwJquL^yeM<6_sZ!C!hFbQ*M9isPlUHVd`P7;DBS7z3GC= zwee2o59O7H7oIM-yzuk}Pydy03@mf?rwMl9q){PCW33$I^P-2LhN&*60qs-GLD z;b{D_gPGbMq~Z`n=b$(jpHvt@@6y3Y_bv$5V8?~YLO$^}Wq_lOo;%kRTOY*ppg13# zr2gx)ro3QUW)CkIP8bf)4{&?!qxcr z^9H2}hmn~+#5oLaZ&{gPne^GhGj;Um^FJH-`MrAiZg7cO2645O{g z(I0R9{qXuDTZHA$pN>|kxOrvH56i|in|GPYp~|{=rl*g=L8o_ZUb-?2uDqIi1&6W} z?^U5Mz1>vIey7kQ-md44O&xNODk~rCM`Wq1bviASi}&Zx?b((yFV4a6bQT2NoubF7zPp_X{di&oS{`=#D zo=sg%J&CkCXUDns{&@d$Fka#Cg44U@(azZQ$y8pZ z_o?M&2j9+bmF0}{CK7S!bM&6=e)X(zGV8*BlgZzT$yPt4yRa;Ijcki`o^YC&^>(Rp(;uC8aZZJs>78AF``*qM7H_A?>Yj3gu|4|p z{57s#APestBQJg@CNGUBk{QRA$je8U$h6T#^1`ShnLMgko*P{*PaaYtPkbdNuU_(P z*)@Nb$_pT&V}yCfJAxc&q;ip+?0J_B&BJBV-)8vn2)Bj)@?Cnn^>^dEa7ibf-(30L zzW1iL%Su-lJDq*+mKP4!PM?qaT=2BZ4a3>MHCH>2|K6s*eeX|~>vK9BOnIJqs5V>s z`dxc=$*SL8Bd?4qkynn0$!o`z$}H&qjH8R><)ezA|L_Aw!T*O1m@+a3J5VYUM;#zf z99$%if2~+%-+i96?buB4@B?%oLd%dVM?v^$yxcVYJh{@su4hoWxxx+07gmOeH`k#2 z-gh=Fg7w4jG6+_*xJ+eadJnvm-xwiX(oQpN`t)wS+;og{<4F(qoxiSLItJ4&U4B12 z^BfIsSa~`=wH|i*@H!bB`hR5^PC4wCSib(w8IQ_4=lrA0JS-+}9#f1)MBYW^ zv0tCve1k^^mv2$aWV)zngZN|eYl^z%>$Lu7mnK25g5rYU+HIgIhvRi@pZROsvO-pV ze~i3|_IwWX{hgCa<*nn3U;|?E`mr&YbqxIbW6%c}6O&h9170$Ifawby8Iy@el*+in zhsn4j50odrQz4IhIVLY(_8r-?V!kRvjSs3a-8!MRAu`o}I(X&RTTU+g%Oy_`fBF}f zN|)^LO3m-Z$M@bD6H*MsA8%SOO|yANc-f?9TI9$&Pq+-Q{9qiy^MsdgbULU`LHr4d zGkL?x4~sYXGGE>LvOQKjz?^>7xL?ZL6Nk$?@aY$vQY!OKES9&AhaEteeH?8-k+K2G z4}cAr315IV!1e=PfZdpMWRXl9Q3e}OAEhh^3=D=<-PmAFPuZ*&z&oD z@d@Ka<~oJ*Bwb$8G93?s@}{GI@H@MHx#1avN7Oif{ep4Kgcs{zLZ-Cd_x|#8#XD-g z;B*7agWPE9rBg88(bHr@XVvCAy5G5dm8|{l5i$>Yzwo3IS$Il`EI2VH^AYBr5RHI;rT-@cgZgxF0-NR+gv20y$ zQ-7A@(j|ZOF*0nfdhL#ZpDXSrfB&v7P6m#~CpF%@ADC;lbob+@+I)wRb<-Y{C1)HY zi{aZZJEK$EP@>0<-~~6L=AJ zBxwVVESCxN0ni^9%W&j}w%M>4IZ-t=DH zxV*F1=Vva{&6nS_NnD*azk7G3Y`phmS%fjXrKc3jveQds>8VBX9`t|F$uW5sfi^(d zfs=}49)h+3F+CoDF@ZPGA25EvjAUOx&kGnE@chUUdG^Q(89xFx0Cs>j;2HP=V-Fv$ z)(p(Ja)dN*U8`(>+aJhW_hfz2%ApHK^WH0$jElxw7mi!5ft9Y!56TxDmx=H0dsA*O z92dWR^FFGMnRMnF1#fTKa5@-TnQIi-xu)^rM0tuTQyPDN{!DnVP9|hZYu+mvS8I86 zU%%#_IPF3T9^aC&_FtSW09yv@Vzy^$CfE^e&;s6;p621V|4?cbPM`Y{N zCy1t6FQmsKqsy<#M}LO-BiVzf>AW}$hCD^X--{RX*tpsEet7BL`O}6!r>9>gnGSxR z3Nw|TOyi~thNEc{^ez=%Djmb?93`#BFQ{xAZV(UpgIj7|mqw~wGp~oXf7eq#kmc~@ zS3FdzN^`vb}bK>t-g0N2;y z2h75lfEo{kAKn*GX^NURKAq zepu7q)H8^Fc3d$1eKZNN6J~D^ujbz7U8Z}KlFu1+76CU|^AEi8(M$zaS zhF2~$34>+F8@lxmzOGvo-r8lSyAP(V=|lKsL6;wt#~bJ40c9qRy?Xfd?%5&RetfJf zN1MMIZT{*ri)9sbovxO`iYI>klRap-5d&mgIj{lj3%KKf z+7Ecy84pbM1EBw0Crlf_@c`2wpdA>`{s6`Up267QBVR9)u}6GNDqow#>Uq`hKvVQix zUEi>HJ5Bh#=4oaah7LhINX0+AJd-vP96w)8`6fTFL2>qb_g>e}PVdUHsk{H0xef-t zt@}+gAC`4zRLFYx@*B@7k@aW71|Y0MSc|X*`cFHcY{8l67uYty84qyB1kAXg84u*# zAm#*=4RGfKY#%_41;7t@f&Bp30FDPv8Z``K0_Y2j9IpEV$`=?eV-Fi9PalD`0{>Yq zk76Ie^1uF)WYInV?5C;UP`JAM(tPpDkNq}Ui@jYeP)@N%FXmXU6}^w zbZOjoM%II5Jl(sX^x<(qIAyM5Q2BZ;BzJxU!6e>{4}KS=Eak6qJ{|jZNZZ|y-6iWW zSGN(q{>HP5Wdrnm!&xR2$@;U3lpR=u_|?#ThE)uX4Ok8zfa3vbOu#oDumEF%wjc18 zGbYG60W}tYb%L*OECAspj0v(IFd6-T=hZ%eGT4LRNjor+J^+H6Bcu($+TkY;J3t=# zBE}kic!?ysI#e61#syI?S8l@Z4X@MjH{H9SGO|ezE_(3H#6N%f)bfMnA~l`2+@SY% zJ?#6Sw2|Yi`m!#W>ysJJu(Ay;%{45YH(p7EhbP|mQSdQ5FxMz~GN)lZG#|2u>!E=& z&X?%iD?5I5wycN0zvY}#*>rZ1Y=qvca5nTGVI!~5f7*bxc(+Cc*9NSFPr$waZ2-pw z-M)Yx6MUC*0;(^7@c_&XurJ`X0WmceKpQX}`ac!(j4wd{ITknx;f2u^GG+8Ic^8cpdWr^aEyKJka<6Q`ryTIDoPN#mWXuhW^tA zJjXGC5wrtXE1<>$uvUP+z=#ja!x$HwblR7sW&3)v(b=1v+TXJ2YTw(u;(fYz{&%e_9X+-d!=%MQCwEnDYJR{3sIQ}#) zZT$Id9CPO@>FX~u>^U44KW@>U?K<1A?fYO{G|t-R*W-LWJ2y(zEnkw&XqUHLP%2xX zuY3XAuk-l=v;iC+T!End05c{Slf`O{fVKhi;S0>g zynwO+&R78F1h_6>Cc-P2bC{06egJI%=L4R@KB37N3wRMez!Z!LP8wOEY=D{{q%Uv; z<_Ni75H^5w1AqHkkxUr#PtvezAxQ>50CNM5JQ?{nR}=5O=70Rv3qO_LHgDau;j)&Q z=c#36&g005Z~R2j(1{DiGyAfFak1-b-)s26d2;jF((^yHY?mi?U4zqw;i=<;^8~}U z%ktibl|eYHThM!T7AF|kwQZSHUiHti1$tQt-QRX@OtwPDsry@@^II7BO#R0@2HF5) z2j~Z|U*Pr!*cZ^_0vr=iHo(jcsPzHp2cWEl$_K#O0A&N%576_1dW|rB0H+@SKVUlg z0@F-C0Di!8@B^ld#u-9Kp)UX%Fd0FO3p#6s>@k6{BMy?szgdcPgCCKa`7#VR`H{x!mUyZhv3}$xSZx(d}fatkXfs4IcApo@oAf;bg+wexD0{y!pLl zyY)$}uX$(ZH*xv62GK&p_2Oc5zkAbSsk-7HWDDl)wx3_3bblN4oO-{Nc0dJluj97_ z*Z@5yU~B;U0y>!ffVKfxCxmkJ8X?*MtP_L{U|)da0cvf4(+|)-0QL(9^aG}-xqukv z0O%8xD;vNu0o5PC+`x0N0cu=O?H|I};9(dOz}*f;RRw}(m9>=(2R$iu#YAf74U z_>=lBy)T}cK1{B1i_b;Q`;Su)9dg6J|G4 zU7Y)P1~-14>*q?;S^Hlu(2?1lj|~H}Km5HC9MJAlV;C9TVVM z!Q?tYtPx;eU?Ii>+_3=T1Gwt~I4AfDeE{?UxGv}goE^k9K@%|_z&XK}jvkh@0UQ^c zL>u6&6;fk^7!y!70CNLR{AYzc_3d)0ob{ZdL86E2gi`67j{b({=9(^T|KC}Bv)anc z{EkwmVA$E=91TWvT4{J>jvtSpIDeXKp3~D%mv8VkR|DV9Yu}sqQLi>!ea~{eb)Ee_+#fY`OP(5Sz+%?e7Z7Cnsir#gSonCy|U-Vr?)3z__*h%C>J`igH=mW41KpXJV(d7sgsz0FT2Qe-PJMcWl z201QhY=AyjWVk$meFIOx22{P~_yLX$uxahRcljSgXFILwmy%a@T5lQ`UOJv;`>sE2 zq>Za7*N?OR*`!N<^~<&YIh+BK#l{BhyG8( z`Jpq8p$))z00Mo1DakPbXWcOT0G=nHZ2-<0#QeZBhgL}S+tUL5fH0azk584CDEzni z7xg|LaE+|7Oam{hu2Jv`&P$pAy5r;8Wk!LSOPX|L1mozp9jgv2k?y%s`&xV3(y8Y_c!AGdiDhzA0W9t0CR#|Bc%5Ya$eBv8#dzrdQH%5%m==q z`T%+yP>lm{O(4bq^qN5GKh6w<{y&4W#a}wA%(4Maf8eNLGMQ_II7jIC0<-}s8E@DjJ8%8G>_C6N`V#0q^m_-xg|Gp* z+Cl5SH;(U>U7!yT*dNey1g0OL^dGvvfdT#hbsP)eIzclpsMZGPu>g(->a{_7j{x@x zzN6*>ab_6C0bVnG0B2pWUK7ZEzi$60Vm-iEoH0Hg=LgRiQ;xa9GMPp{06u{02bgsN zSTl%qLT0_tM4T`9%po{?eDueqaov)n4TwV9C~1P^3!L_hZRH9l2zFRpf655T8#OKn zAG0^o_y9p^`V$v~n;#z2L`mn*r`l8eapQya)^E>(pWVFv_bz<9tnhmZF7tTcppJC4 z5?!rQ|I-ml_iHXKm1^ib_1+Fu>bc0V1KJN@9DM>E^u4kT)PH3Mv`=972h5y+StG!4 z0M!q$^xxP3*9Xvj0FDE4udv=H>>UH34KVHhbetK;c>wDF^PC4j`#&D-|C5K)FDOGg z-49TG0n87+i0_N&zJOx`oVfw+BjmWigpmi~d{L|^Jo#UxZRd7v1JquKaC%4KPc|}^ zn=JbAbLA-rzg)^NauozGD30>ykwK*^>G2AJ!ajfYN{X|IQe|*dy2vD8^VpIpzy1U0OkidF37dR#ty&+JUjYB z^7z-W@95$~B;Kyi5y|%ZV_qI=KG^)`d;Ws?mb;whAEp;a8@{)W+2L%%=`Rg{p+!e8 zzJyIY`-5u`ei~-Fa#QgLf)h2)mYtwHcKvi(t9)m?ujQG$r3Pbd)cu{8#AN5i3`J6n zYqhy1ZGy1_#y8ORz;6r8xPY<&mMu_rK-mB@H|VSt#5e%^0cu?U_7Sf;w^Y{Px>|)& zS$SrO+9$+50Na0~|9VZZ?gQ}q0k6XUSMz{sEildpGwnad0LG#HXCL74!{8SjRf;}C z1->;_?$`kM1IiBA{Q=s6R2%RNY{1-m&Y`Hne&V}BN{(!v>wBB_LA=Qnmy0gsk|z@$ zLGRPaT~NJ);)39sI4G{GyUB5upfPlBpB)@=^Vu*m+-HlQo!-7T_*(HT(eW8}O=w@(YxI zplw4He1b~!3(PnnZ2Jq{z~}r%Q3FE5^elST$eIn zE^vu;hOj;>3~Pb#j^7VZ^MGjk`Rx$x|5N|5{>SnEssB$a{g0s^P%N{KE64r;_yH== z7tl6fs#+&7Osx~(xS+BD+(QIkfMN2{AC|GO0m~k|hw3JA%nPQ|hcJFnZcILNWm@|_ zD6f$>a}7!p7U$Ow^Be_MCcM(y9K|0Lp^3Q$ zrD6X%FdlVDPqXy0kcxA9-!X}!*~_uJ;3u02H1is2KEg&CaA^*ssHQ;IDtL@*9D->-+XSdY=++R43P~O=iBj< zBV_lp|09iWO^}xPQ>1><|H}HiN62D)JK#OE?>sYT;c2BfKOAQUC%+w_&kN@FgS7tZ zb%3`1v;R;3|H;E+^0z}V4sdjtynZ~!0*=L;fMW+on5@ne z7!DhNb45mDJm4Fs!%I&p9@_hb!gw7$Udu}=f3uhC=w(KSos^>i(nYF;#@k#CZi>`N zT_PR~T89kHOxo0|PL~>=Um9s2B@^#5y*D_e(%Mgx)cOR$HgMG0Js?D)tw9>^`46c_ zJ6(TOiPT+AAAkXNzzInkKzjgxK=%z?-++CD8pP{9g4TOIPT=Ui85?x$fYN`*_h@s@0U`(dKB1f&h79;2_6IL}&9mL;%14CCUcMh< zFqs`yxyp67A7K0eR-Y-|2=-tRU;_ij6C&i>SX3hxoE#J4|ILf>!x#EaeTyMG3uq`whp z-xuSV1b&Z0-b0c;Xg?-5t#GTqbEdoZ(BE~p;9cLFaPIGh1MvHyat>Jc0A&9Uwtu$% zC;p-PF9h~4KsX=x|K|VTZ;dZ@Hy*H;yB2o9HCPWYs87KA1H25#&JEKJfNzlR5B&5s z&vKXkHNH!B#7kUzYC`u>Ag7v)N1Uf_F2wnG9nXRI+VW-NjJ%c>$4#H7>ehP7bGuue zar@QR<$B}1)*C2Ke_Q6FU))q)baf7Ank|tH#b(;Z?or|53P|Qx9E+2gLn9_5YjxzX+a_Z7c*0!a#IgDUV>HAZ_PJ;%EO zJ=vTnr0)qjo|-xXK5*3tlXY|%e~LWh7^liHUokK9S^m_sR6R}7s@fvW#dahw$Jl?n ztG)hVxAWNFb~}z*-T{jYw3unypQ zAhQFw27nw`%X7ro(_0PS{iYB9u^YSYTR3wtuKb}7z4U%fn$N*xAHrm zbT_@}Iqpj6L@(+Mi5@&3_(tn-4Zm zyXAX2J}=JIKx56=_aLvT>+fw`s_SV=r{!a;{(-u_3TCrCk36k0E%9}zFP~r1ffqJB z+nI5@KKpXF13tSQ#|*d~Mrli0Qd)Fk3i&r+5#KB z{$I}+^~<>d`Ul=Wi0gj025bEF$Ns+Cb@}Judl>O@5%$YGu)=jh_FIFfardTG?!nI= zj7SNAy{{z?v-+P(v{}KP+fc<~=OYq+Ce)tXY1JoC2GJxv< z$^h{TM&|^sge@TN64Ngr-x$REgs*)DeuoG?#5cXrO%AQ|GOd|yRyA(%*y?=9*GJrA zP)oX~oEDdhuS3~yz|&Wx8s9|8IJBl+~>CAdOKvn zFl7Mk0@?($1H=}fJpfw(VGH*O7(@mD`(^_$Mv!#?_5b?@aCR8DhhJ~=k%x6Y_wzkUW3(viM1uSq6j_LdxS$dDV>$KOnpFk)72>X0Le&qnx z{`?&<;=j**2iO<BrF4Iyy--VI*uc{3`kDo0J zji@sr)8cmQx@mjb=RB>fqe#EiTNPXWrtOyNDbv6_tgk#SMH!V|Ta?=(LcV9RB&0}3_NYBf{0FiY_{O)V$Lz+L~dA@H~Asv`vTq{@M}3I zL|Z_E$pP*YYEW75^VdDo{rJV`_f_8$8rtw(X0#+%&VbV#@5rB zuDiZWc`TdcM@yccRc)5j%e=5U%5i;Otvki2hw-?@qx`$U$u|M-_W1HqkNw-o@DcZWzZCYwMFdlZ*tovcgLp> zbw7Zf|G~@p-S_`?(0vPf`kSx~&PDhN(!U8Gz%AH6xcPuV>;(+M9}vj^=>OjU|JNW; z4wx*sTKog_5$G9W`L+Q4gs>&9d+Q6_)bK`WKlDNSRlG0qgU_@6`TnqP#eDI-<+nI~ z*6g}z{V5sIt!%1H7~?=+eLdasvF~&5ztY12OOH>WE&bfa*7_Cl2fFQ9I%eCcyuJ4+ zs>j>?t!uvQ#(>rF69(NlFh71=pBqKkbu4f%asb!BK7-f-wjMB9Ao^eZglYqL832F4 z&=LJ^%Mk-^BXGar9k3m~@On41;tqBPf9Napu-N<5&5;h2ry>*6{HWt|Tu=Er_*ZnV zKz)R3ulu3<$$rmw=lwUH{TX!Uz8L;L;Q#B4UyAbs*f%iz--va9$^h;QTG$)*0OSCI z$pMMYPl$I4`7Xh)5BM#2CDs`a{__#S0o$)A(;52Rq_4ftgHV56+xje;Gtn4@Hq*~p z*2b}W8+m$UZbWSbI@nfqd+BykWkMaHA9)%=U182JtuBAnvvhiX&WHA@=!nw;{Y}c1 z+9%#HIJ4VVyXlWS*G(J;+<&MKYXHQ@6aT9JDF;R&1I8c=i2o7#10--Q0Kb6P0O}Xq z4mlwHLFj+teu(>rI2$wspTh8`UgCD&`wO;c?@^M#ZF^aauvaKrw4x$E}d z8-cN2UyFOnfotEe4}!M~uwO`D;We+{2ha9#*X+NqyYdx~mv>zyyl5f=s>j&)Rpw1R z=4_~{jv~L5hvoXJ$}_!KhvltGFP4dEwX)SQ`;zKUD$V*)_ssHGT+Ca%w|wX~`(B(= z3vk~XKLR~5&+2$@-}9Kc;BYsEwfydr1_k>QA6g{w81PT*k4eBa?Ev@&%nqP$fIb5H z1BT5nh((xNd)y0bCzYE?kd$&9jgD^{eomg5zH7W?R$RZo&Sk z>L>fgepnyle5wBNc~yE`w%2RpTV1*OcB?U^b#{Bs3DiAL9ew#{MP00Qr}&&N7th%g zJxsF@=bg)Ss{ZPF^0Y@~F~|AWdE#a_1-(9XVxOBlq0jB6{zsr4FfMigZ2|fOR2EPM zXz*(T?+;L)Ah7+JS>c^>y=-p!vk`F>XOBeWgyBEkpt zFwYb6@1cv%a$mz*;46PMfY2}4zvGRx0S3he;F%!GfSZ7Qkp+lvfDE|tzo5PRv?sqS23!XktFP;El`c1zGEHcid!GCl)YsEX-gN)# z>rczmZeR@Im>z3N$9Pce^{gPilW|MXX0r9(!Lj{r$FX=v0B3lI58um8UUIVQ?AogHnr#tRqTkrj z(AOe;G3~uv8~)i~d|j?1v>iXo(Lw#{&q3b&rH{IQ_`^l+YcCmeci=q&h9y`7+=4X# zZ2-yu3nmM0J_z!Ff%bvOhrN)8av~pYdE-8iBmM5~!~Ov06t@VkWLz+*V%p>Z{)^Lc z^h*Bx`ZUhFP}dx|UhC5NX60fU^Zn^wZ^*w;wsx6^MyJNzo_D7?U*G)m2OiA1F6tLx z5fF5p`!97f!1MIUz`p2z!@pvG@c?c!wgmT(SA}`qybndYtQlWT4&>W09$L)0tbR=+-mFY(_qhAoLI2%-9s7fK zziF{xpZLEO*k_w8Ajkm729NV42k-5#7dvA7_JdPl zvAYxU!Tjej#`gXz13LZqEbVkgxum9__m?bTe4Xw@w*wGbh0YU;yr?7;w#alKA)Q0bZLu zFn;0yX{43rUyE~AVf%sOOE8g!ynuWXH zyx86S=0SJw+xBsH?T5Y5^G}!dxc1m{GEQ|S8_M@N#rNLRV!G?wu=XwP))w>C=grTt z`n-Fh?@jBh=S!Inalg`K<8@UiACEbX>mfbY7)5=C$lm zfY^<A?1PuP4)8pC`haVn3>olY ztN|kI(-sgLz{>%-hL2zp_@9KoZ{}bA9Qy`0h`txP6Z*cYKfTS9s{Vv@_NS^XOYfd1 zT}Rv7|4YAqs=F5N28nJb-Uasq65o#ffIAM>Ks|4`7n}pv_exNV-}lzV?tWq&v4leg zfqM-Py>lP;zyWv<;`{0c$jj2uU-qePzIDT5cm4-n)U{*0wYYn|`93KAi)rcma@~PO z3KFBC80YB^Wh`HLUOYYIZMnaBeQ5O8$Ho4lZ(NU~)9thOlXZXRv;o%v{xcasIe;)7 zhm-r^9~^X(wDnJUmTO)AMO2{cV(}vu*7#|finLUZS-QOD=XmDFw7Q-Y597MS^8{_+ zk@^28*DrH-9`bCr1m6%7-4B1C#DaUZ=>_-D`PB8Q-+_1N`1=gsg7-o9;9C*iw%9%7 z!^3aGH%lc9xQE}4bbMQR=?7ov+M`39nmS(5{Fb!nKJL%c3GKF!`P+9 zKQW$#bwg-V^VZjwYUAHhn&$^>eqz6~YKd!~3e2C@2isq<-?o^x0K$v}JcoRk;l2R& z_omN%qnq8joI@(MzO3e*CnTySrYmYyaD!_ixAfAD#iA&gVMbFmLw!{lGi}_4|Ve#JXVo?St--C_IX9 z7c)GD@c26!2Ha!s-rGHNAkI)+c^281``&@l_Vk%|q_3KD%WAOTimU#{PS{s`R6*XL;HEYat!##GS%(-HoWcMzT_yi{m+2zryL;m zJ^qP(hW4rbg8dfG|IK{z-@DE|-`9p9K~g%uy6u?WdfUqSQS5({`zro)E1RR6YgnB7 zp^e19@%78yJ;%S;-TE55uL~buhI{P)^Sh$Du2+4}^}E>hf_v)tLEv6>J2C$#gU34Y z9xy-XmIC|B@SU?K-aY7+AG%n6<8<{Ie*r%8EMk}+IapfL(nn(4tuuRj&AovO-|J>aHwhjT_w-3Mqob0R2IXt}(y+YI8OA6vzo_rw z8@6`h~9Zz@>@^;*Dzuj8)u6rLo*+qqQow zz7_jo>BVxze8uNg_tj&n^FjP;+}~rT@HaWM(XIUMKf1f#`v>l3oXNcn`+TxbCzv0= z*&haCU;X&%$J@)>_@?XmTO`!)u;roWiFL!f=y>RPVqNggZyGb;yGJYD)9+RyW?1#U zz1%8%7h(9k@NOVYlB#~zrC0H^u1q}6`T5ihM@pl$*<{>$tG`?ORnO z>2j&MQfYN{Gkj zt-8+B;l}_vj)>}Pe8f$izL)BK*#2$czx5I5eA)tB_y6PXxz2+Zvs>r`Fi)ESok@kc z(%NgeI6trL-eRN8?k%=-?F;(AvRK;_NA@@R#C`7ZFC2kA{AY;1UxIUecjBC$`1Zud z*AM-#xWDJk_)U?w3iy&mEX#Rxa?OC&vZ_ZW(|sC($u;6 ztF8^(pLm}=1G*nNU;O(x|KIuc0d980zDY@2Kdd>8t|~sTZG9HxUhy7TvbkEMwcEY5 zulaP1mQM>fu)4JG9`_>0)c&DuyW_qa+{2%I6Mhd2@8stqkZ-4gV z18(+H`?}5<^zkottsB2c$*KIS(fM^W#$z5|TN&ex@zr8`KHu2tXFa@@Jv`qRw$+)L zcH5Tx+&%iy*SID4{=fM2VcXxyvwHCD-HG$}cZsd=bpXn<v-DrV&CI;44~sp*RO+pFM6K1C*FP7#P6gc$Tw3D?{{1At)wA* zi)s65f9N_BBN!dv5&beg#r?IksyLH{bH<4Bw5t9%J&bEveuRACS)eWSE##}mbUe>c zqvuVtdQ$w0>x*d!eX=&nak^~iXIx*Z?fCgzuG8&;aot^7k`&0i8-}u3~zB3lf zd7s&{{@l&3({FGE-+r2Aqse$-_NHPj&GS9cPtu|FYMaG=n=haF_{ZPh-hAbE-Mz>C zrTFr1e;wZ8A-3@z4|V)K2jksagnQnESZw_P`1Bcod&E4O_aJos!{X1^-x((Em-2TA zCG@)|-q|nM7aJdTzS#Ht{SpZYeV@ZTe=k9CFTbaR@21MPl=)57qx$h4HTGZeeFpw< zEUS1b&*y<}8{ejJFYOh_h(lxTRQ1Q6r(>26b;PvrLAp#xPqkT0v-`MitJj{{y~cr_ ze7ep<*2BNzv#R@a8=()WHe){9HQ)6i1+$O*#La%3Hviu8ZNKS@ac+Ow|294HbZgJ> zUZl6G99pdHYgIX`zp6cbPV5)(Pi#c`erDIO+xU|&xd)E?6L%}l?JoiD1>f-B6Z6FT zeOS|LulO3SHU`KCI*p~mkg!4Ek3>o4it@%^jg4f)!Qx5ndCY-KG@Q* z`EBl%^XdHO^Xfe5d6ULYJ)Y8K()E{VU8sE3G|rbk<6%B7w8uGvhFVvgB71$apTXY$ zz28-t;C+1Y*u{LPq7N;UupQT7^suftJ+7PA_E$_VmaD9TbDjN@cl5Nr>8$@Lo-uX)YOL?+*IO$#KG*jBu<;pmU9Wl`-$8|r=l9VW_}z5=wh{xso45nt zP2=w@@SBP|JpL!Xf4s1&${!o^C%#VcbR(+bND|ue_t@ zYw~k{=4L+kN6rmB=I0W1e(>@2!W&jl%-<_b#qz!06Zf$%fA^Zl-P&_cbPv4i+3rr9 z*Sq(iKG^NB-QlwnTpt2C@D>Ebg7vq0yyO01TtED_eyr;?Jo@&2`1ShT<2m1+>iZ{c zjStMP1l|qzs}JRGm+?0ZfqUTHFi(G;+4o!E*V~Gli$D@Eb`pzfAXr%2I!TSdon-gZfd@CYqP41rtAF6<&pheVm{2xCUY`Z zM^bM68KJ+|)7b%7N5$Jh_UHooR7Vs?ssdtIN;wVs%_GFI}t zT^{$a_s8!0ja&8EgWN;#(>;Lq@*ajBmoxU%;lw-cAHf;AN8i@x9%FcWpWvFj+EV(HF2DV;&PINx?zUqAbwo#_K*VT2jh3o%b##TYWjRsRmtvW?Z}Bzr75SsIq%oArTWrhjg*GVw z?4TV>-!pM~Ji4_N_b128Oy4ViI#avd_8TsC%T9lpd-#pOHr|t4N?na}cEtGOK0Jo+ zjX(Z&24Wt0h;Lwd8T@pn)8!iXPatqDza0KM#X5a?T-*1#mENbfI$GPWp|0op9zifq zzaDjd5%*r-n=jAoe6H=O=lT0;qrf@C7_KL9=6W~YwVK2?)h2NsV>ja6AHsK5VE?yo z{~lSCv)j7yH1#~k+lF&tJ~Adn!(7q=R)h^b&f(^BGVmuZ6Rrat-EmaR8{fy*bKyry zeg)c%wm`SEK`a&I4CyGBWBEeahI6H9U+Vf#dSnle@8NlR+Y`Ioj$fVUo;cyZxQC$Y zA32EFrd^KnHo*8Y35$Sj;2CG;h-nRaO>EOgFZ=Vr_LI=%x{e3dfpft+@s1$pbnraJ zJlFNIZ%@nv>$LI3mk-Pf?h&gmAHR2Ec0T?0-k)baJ=6Ep@5DTHJ%eJOxW_lx@om)^ ze3NMg-&~u7JQzE6UpKpXnc_e8*ZA=yk8~W>HflNsz2@Vj=(S8Le?0b8*Qs)GT6)fc zKCx+II(wbR%%3h}ZN@amG{x6(9+BJ87{&Q|zs}QUG&QLwrm2{}_^fze%s=1zJl#>B zcutvtgMh!*@FutQNB`3;Kkg6R(u09-tml{GZ0&Nv{UWyU;i95_NtF_rN#xJTX5B%v104x`pp7&YprZ8dwvwzWH|VvzeQ(mb~nBJej}OGU+)H zjV`M^GO{TS?fuIU*j5NPY~Cf-t)95vxQ;k|e%JZ_7yBL8t>3r}xSv^huiN&u_v3xoXSm0)wqFK6 z-jmSxE3kH73ET_Lxh98h*Pxgurq@`Y4hQZDyqEo9ev@gj zn*hD7AD_k{(leZy{!|&z1b@BEges zb@MvDk7;|lUxNcedma7dvFOg9s(v?_bEGL>zBo>pAN1vm?Sjb-{!cz~gWLMWH@mg( z*~_hbGj%up>(KYK-fENw)%XvMHv<Sm(Js1l8|8=9)gnJbe1<&%^H?X8wHWdFxpqp^&#*lv}?4*^%(ChPSq8s zSsiiO!dxeKM7no>v`D zJ-!b3mwh+EykdI;FfUj?Y!UqN4Bjt~c#~Xfnqoe(<%?LyZJZ!iJ(ozw8$l@H;2>S(`p(Fb(D zmh&TlC6mMP*xR_-GrNB(;uIat+YNI%UnZYkHCF>R(pWE-%h!v$T3HpBueuI&=j#sX zvHYlSuUKXw?qj-})Mw+FE9d7S=a+=SybR+|;6dSBerIyrjo)yA8~Vgwy7kznTLpbj z`+f!1_N#z*Vt%#hc-ry2Mu>I%deQ5|yXp5uz_<_4=hW%E-%Q<3eNO*8bv*8=+qckn z=lyqEfwv*NW3vshVBPQ6)0da|^QiB!#@~VOAMe0#8}CHSVE%mZ?QsuZ{QBn44|{pE z^ZC1q#QqHIe1HfAJvNd6XhTsd~gmmISS`B7Orvv+_a1Z@H>;o~r9atZZ0`GTF z-vjrw^+yc%(EW05$M5Cw{EnXC@wPtj%>6sr&-1oE*Z3{y`xbEDCibxoXu~(q!uM6% zzxs@u9rM5c$uo}8m}S4uV4gaEE%48CHpD;mz1sGQf7S7-*NOiv(C=Fjh;`y#Fz@4S zz&_ulCDyk|%xl&Af^p)UI-bGsE-`F;#5;+7U|#KfVjb&yV4p$G>mivc{U1n%+81;~nN$dlGT{b$!%@^v>mv0ZgO^^EQDSIkG@G4n~@vW?Jm zj@Y<$n{x|2hpb(tvxvFgF|*M0S$*|0i;Z-tH@df$NCfHgk%?RidzdwJsH^LzEQ|7HIUxTim#*td25 z2H;=L+1XkivOsh{ZF~mN`zhQ5=g{?rb}xafG`UvxfoJMDU;?_|t-yQaQJ*hPJB zIv?0q{PWB%F^~Ow;@$`9eF^mMbDe)OzOQx)*7&dk+K>Y?U&3#$-hHu~o!Kp8OdE;s zHN@{@8BXRq?i@qbQLLwU-(;+frc~bi{3_!k|GbEofcvI&)z??7KfWhzF@5oMoUi^m z)qX0i$g3uKie;Y4`{Edv=*?_4Kd)@wG9&(48yxy?lC3Y~Tfo-&s{7%ur$5iz0H*)B zwpSTI+a8!F?rHP$8bS2E#1a0z9H1;1LD&TuFeWlU?R>HIp~n^fz&o%%NjU(2zwYbN z-#6%{kj8g-Iwvo7o$tQIbynPf#gP66n|@<)1``nTAH36Xwm6!95zm>Y7at$TM9O6A ziA4RVb3Svd+(z&9SsgJQRkFbHHsyomkL#|ww!B3gr1D$d)U&5Dt%^_GXqam`sh4Y1 z%v<}LS$>z>an`%wZ`;Rh#CtbeV6$&|-=NzF+;5~VhmL zfL)OR!2c-L0HfUFLl{FCXMp~~2fb%HsczoQXTEW)n~rzWeBI}l$${Qw&O*^pMPnVGZ7f(8lw+Qg{^osX#_Rg} z=F|TsW#j(W<u5J^syBRk8 zD(v6$T^u{7zcj-?YydpdGrP0_-~-I?4<8`PhBW|v0F(t>`>P*dllTFH4N$_rU?1xa z#$5CJSnL7Z)5cdh0E~+ahkO|D-1C%^e5b_L_n1(*xmnclnZ7RME0&AytK>sGAM3{2=t<>CrCI)}ILw{; zxn5O%&!sOMJ@tHv<$Hb{18?%_ai5EMQf(FU#O3WeRnDF<1~+nZQR|F(gnmT&es+4d zo4oB3x9w9eb6bGlEx_{@;vIYU#60yqZT-!}GIac7um|`~p1hZbcq!h~Tk3rP#J|Y^ z>VMq>3;G5LFZ@tdIjv$AHa2h`uu?V_!@FS z`~lwf7ds$Y2gEX9?3e*J0ql=+jezzi{{BC>Hhv#>F)OB%u?cU;48K&`hoF}GBD34@IoUf`rtF!L;o_J<_ZCZD+Z%xZBM80l(ta{$G zk9B=(T1VDT>MFrKWd!Es$~`{1BidK1t0^Kc|U;J0CL7RIs+i*cw_wII@=2n{F^^OWr5*8to{8N z9`5~#J)pk8Y|oFlhc7_zFERk@0xt_jur}b@pTT6nE?kdc9WaJ(bB!I-FPI-i{>jh1 z*tKuFz;(bQc`Ji*l{P+Y{Q{0+oW;+2xvrWgz0_fOL10GXLeOUQ_B`JrI;@U3W}jsq zrt(GhleU}SyU$ZqM;%Y=p2als+Wv~^cAu)Nil$H|jFF}7iI}w69vuA^m@SwBcgIl08Z$B+m+oArsjn~}hu)bKFZ#$NA z;w0TdEg&9 zf4$fH#Q#d zZ~qhfb_Ou`0M!l%`+$af?g>B^$XWnta&0z%#(M4tn5R!Lk^#J?3>X2+PsP3DO_iT(+MZ~a zJh6IX{uF6UJ+m~6t)61py8B+rupMiwSZAz*=(mn=+m3vu*!f$4 zzo8G{_bBi!+ac_~ZKZD?X`4mo1OLDT{rj~0R{;C>0sHs+@Br{nJ3wRrztM&DfUF7V z1Muqr*$c#30NVr9vp{^ekMHvNy+Fiz7C_(U$z%ZS4_gO-F4_Zf&X;xo_W}{*tRG|9 z6QEB({Q`O(D9C~s`?6nnL_f~>54c^B3%jt_ICA{6-1v8ncJ1{K%RG?rh}K9&KJ&iB z>j+1w{7urj)!EBDY0_SkJT}+jw(I6#lRB&Or1fES{vf-W=CS?|63xnJzHVdFtgbS> z##h#lmKxDyeTZp_uZ0$3A9I+0?aj;G*m>`F!|&hAZ3B+C12fwWr=1VH17i%Efj8oQ z3)cFw-Y4#1!*4*~@73Ld?{wUaa4+8HVc@s6DFYq?_EiSZ22h`Xtpm6Z$g=>n|Kqd3 ztFX?X4Iul0kOjIIpt@i5KWGW(fnkq$Ik4Hw09gx|3=sS)_T>zqmjT=t2x|ha1>g%f zYCr<*9r9u1)ZcfLKmU|#53d$Jf&1R42mgqzJMknvwoI>j)@&TD-qP4r$PycOmW!`> z&p)eA;^KWpow+i;o>E;kWs7vMzPkRT@)v1%YVHgCs_0`Adb{zfNgWH-XW>2k(tdKf zi7UQV#L$J?>q35@MfObB;J-eVBHf4Hh{&T6UkX3rGK41}2W%hE9^f-r7=QQ~x=bf72CFS?Gam(tgks+4% z=^EGLDbJ%`^3J!vxjEi|zjGOjJ=ve;^e|^0>y7*FvESbKxZ8fppSms7`PBEYn}!#s;S(O;QIkw0}%g3J0SB1f=1E*v;i1w4L}A8Y-MkGYW( zU*Lu@_qPH2)c30MxwbdlYs`H;+uKv@V_gosu7%!S0sP*2fQBW||4VR9S#XEg09XeA z|CtN`?qwYy`+|Niz~euh34|{IxK|rMaWDQr$N=3J)U^P=2@vlG>KS3IM<4^#AL!Qs zkZHCzxREjdzrVKydl>W)Y(?Kkj(w&Z|Hff%X60QnuVikCKUBXzT%HfT^SoR~dJb00 z@42;EmIux1DVIyro9-8EO7n>TtHnI^&+>craoM_ZbIBK%d8)2ceW>HL=5ID;)`xN% zQF-(84X?%fxPR=1pl7+CHw-&&U0IuJzYLR*0Vu@ml!q)R95D7zZiUj_Yr3o!qi{T2cLlmRLSZsJ-%@J}0Hk=g)Q z1Ki{H1GyKVX9Dy*5YGk4Z}*^H$^bbN0KcNVBZzi&Eub>M{DI~RFu$Pr1F8Q7|FG>h zz>mq_-d&G+htQv$pZs$-alReh zSLe6-rGH$nXj^gNJ1 z7l=0OT(G_)Z2JO~0r~F)*t>$nKhFsAw|6(--9vukoAPNj&KGU|^vm7u+kc2Nx%dr4 z9Sq&OhraL5$NZQyndkX&$d@lZ(=o5J?E-#F=kjZ?9k-L8fAhEJi}l5AHMuVGJjK&g z8>zHndjODNC~l)kxwsyVNv~z%@^#mwE2fQkt^Ya~!hFf+RXl6mytWYXSGLP}g22D= ze|dwP-`71p*ut=rL*RLyJoW|uqW^>5UjbaL0se1?o&W3CA-r~x$N|~`*TDwhI)J`_ zTku@{fa(W`Wq{ZK-VS&Ob?LcatO0<1{oTHl4DdcdtOIyX(7p#QX9TftxgOsdkneg! zUTr>nFE{jsH@e*q{2Gix|Iv3jpDTNK4R{vmOdB8amw(D<)nz&k4eImdY<^abRn#u? zuX!2>$!rjqn5B3>mmFV_26y#0D&TZIe0FyN*O$F&k-HMuzX~$oD&U{;;5XO@ zP#d7n-2^+p_5$Q=fcFKc48Wcs@GtKPKn7&zgVDyLXiI;~SN8Zy5S2>bFD2a1oIdPukY#Ci*S{&zv3}bzE+K0ReJRp73=PHACKum z&E0NoF5L5Y{x{=^_OUm+#CSxbuA3~dyxPYyeKJoP$cFi1HRf@#uK2zvhvRbLI`kv% zpYoD?x95mG_S>7EbVEnrY_ItF^^A|{eB0}nHNVGye5RLseAN3Zf&G=V{eidZfcKxh za*_MxtNYv)uVJ7Z;5q;@fa?Irfg4~8$eti%#S)$iq7A@3K{*>_X9I&jfae3b7I*}@ zoPqlS^84LrpL>I{C&=Iag#Y3R(t+ojPW_K==$EHSD8b)OC0tm4DMWeb?=P?i}V`7V72Xa49eF2aG@CV5GK#>F77Ys7M&IeEi z=z9Vx2OgJq1pD2xcMf7dpx-?PIl|xmUis0Ny0M%1tqnb&EAtWS9R6;2aUAD+A9!7! zE8zBmw?}&G+MI8HdMW>Op(9UoG{;2_>AlQ>NG|2e#N#B8V0ItEGxoQ8pS8V!IkUx! zbcK4WY0*5SsF)|NU!Rrp#AP&pl!y5DYyXM!4wF4UzPF$0eJ=;XUZ3CZ^Y|CLAJ{ki zQ}+}94?v&)?C<)3e+DlDUZr*b{QbRXaRxW)P7 z>zMbvu6tI@TfA>twrRd%{pI^;o^;_?xon<43-P@7eii92-Y-0j<$k8yG%T0#OPWk? zFC2Y=cLjPV%Q&_;%Rch)zi`{IceV}R>LUIvsO_)c?9w%V(EVKV)9$D4UyU_CvA+^H zybCz~$=^}`_hAj7GT`UHKi2|k1L(e>t^jCiv@N58l0rUsl zi#G0iOTWASkO6l;&JEp*wZzhQJi~4I+6Ua^llk+xWuIPio|0$9@zJ!ojgO6aJV(N~ zG^Z;rpSmv6oaKq+UzV1{H7PC3lVrX?bE+S`))8pxt?f`Q(DU?2EB7PCC!@6qzbePJ z%lKFu$dXV+FYa>Dc7FxLL^KCj{5uK`5=LpIo1A35hkpMRwL760(N0iSok zuXpJy6#GAg9Y7gyIq?4rkpb`na2>#XLHYt<2k=|~@qZ)AsSJqT5r|~KeTNLX``vxK8^TD#!8^_>m$v%sp+qKOB5^HHy zaZF>X4=iW(NgX1y>g7`|f8%-6y>C_ZR;62?<9@~0eBP9&R#%faPfs2Xp?#T3UB{h0)bEeuroK(a(~ze#C$7ydPwM;h%f`{Dwyk|DyZV?@vGbYODcn zhyMQ|@c$EF|HlYs3;Y~%;1{wd;P(Zw7O?X{*V7+J8Iail-WI?*;Esa_++A<#cXvQe z+>Pf;kN;D*^|CL!nH~PO@Q4Fh+w(W^=EjRMf9i2m&fi*p#G=t&+rf26aQ-v-wi+B5C0a}hYX+{ zKp8+g;Bw$!*8!0)5Hdh)fc?}La6Rn#o8S|avq5hhbW0BEceh~g;3kCoPxwo>^;h3^ z?cJj$pn-Sw0)Tz)2Z%2a_`go}1+f-5U{GYh^{>GBfY%MUM?b!w+kOY$xyO4+{G*SAYkTwQ zX<9Va3pDP%@HHN@__|m}iPi{f#k}D@Kd&{NJP5z9wBwdb@jGeHaZ~qP!zSeXavdF^ z?uc(Sw9KWhxs>UZuIBkuJS_JexiXnyV`crY`(m4hr((L@v%J+|X-(p)_L`Kf%9EoN zbn%b)A36G&@=dE9AKHlZ^Bz%C>{TIUqpdIid zZwt@{pil5}>j0h$xC(k*WWav??t0+9l!F=kMI?wtVSO_b7ZPk3)V=J$$3^%HCPZmGk(H z^?vbrJpY^Us#rc%CO7A5WK62;+|zX0^jf}-R_iMn+-toHnZIiMj6Sy2h(?e9)`q3{ zhV8y?=i&Z$E-)jq^tnr3 zz6b#_05N5P$$+2BnE>nuytdz6z2AVl04gQP1`M&i|fc;gZH_6!AY1)_N-0@Fi+$5 z7EsnT<%RX3QA|C8&a~FyJ3k-X$Bp1S_VPP7!2b?}Vb}q-9O_X3E2 zV4uJ7cMEjU1;GEs!2ZQv4*ZZZ0Jgx-WN#2M0=E6tujzNccqz^Ty!{W|s*C=`O>I}7 zp5UHyI5CeK^{s;Uz4Ecw{M~4qbA8~0`1mkh?UAi+%USPpPrx_20(+xt-Z|h_y{+Fp ziM`Xw2d~%pS>PMnwbyjfe(n#Iyed8F@!zWMckYu%%6^yt0a=#lu=6~1jPc0eQp)GrwM z0&os+6VBM{egNJ9z&c<(d;#m|3jp@lBhUwMA#hI{;3CQa3D_3|{<$CUlUEJ6OI`xo z|A6PZ)t7$RwZ?YIP>_CE*ZTRJ(plEWr&FBfcX__eiDugR9Dn?cFZq#M|G^iz)xi3i zcL4V|^SBbcUx|1H)$@zR`dYV4Z)19ct@W1w9{ASf&Zu}^G*Y-&Ko*nD}lL7Pv z@EaiV9T4sdM7{v719H9q;D0TB0e&Cg7g+0m?`4ny2p7V(zvyokxgTK-aQSNo-H)O3 zuRHvuZhYNxlBvEtvGIG?Q^t=fUKjb$i{2=fwYC_uy|~TPb(|KLZE`JZ9>30?-n`0f z{^vIf#@FBs^!j%X$hVc(Vhy$i=O0(U6Yn{~{-3)4T9Tak2b#1qmpr}ntCzfaS`2Fz z?+M#G)E(wUNXyfc$57LLSw7U-RSsF+x_0a4WL-Hv3w;DF5&lPsfBt4Q@V^WAAAv7` z-?-n-;AMb(`xi2RzJTm~KraJIHUQ+ngZReJ_x`%iUGUe7B&H0whzqPs+?>Mf(J5Os0_%GG%`P(EtO?UVCTUB?j3j9+B?D8^zzJMSD zbYH;ifK5dkz^?;n2XGy58T9?PUaB(SLf8T4zZiDFtDft|*FGt2>u(1y1pl>;e4oqy z9-AjcURb*DC9;v@`YcafS<5rGSaHw&4gO6(d9U00$yc~l!1X%V_Zy(|<@>6@yx^X? zAJ+_Pf&X>bcbU5XHxXZ(&(*on+k5>au3KBufd=`y)$_0YJnrkBn=`$RLB#(||33iy z54zn)FTxrCzgvxUfZ#u}1I!;7?+L^*K+Xly58!2BSm# zoPIpoyN2Di^H0V%74~v#@y!z2`trUta4tR<#Oon>!-Tk)-Q{#efG1uuW=vdf1T<7wfDO* z;D7R%MUVmb-D<7_C+NHOtPYe4egi{h<$YYojTzitQHfjSh>m=kyVSneA0~xryWY-SqLm|1rQn z?EqN|s2rd_(0qd86Y%~3o(-T4z+mqP&>zU}0`Ob_!+LzDgKL2wy}aLj<-cK1@Ss0- zGvi|%!e~E#Zv4smksE8NIytV=W-f2H@k`5xV!Lx5C;B_Rtv|E+0XO`)*9))Ku!xy>cgSVd>5&0gmc>nP#R&&6Wf&Fa>ER@G@VS3f8IJpNbS?sgyF=Vm_C=O&L` zyRi~AFS8-&3Ou$O8DBU3>XJ{I7pczuSm?mnnSvK>AeL|EuPY%@vCS&BgI4*Ae<%erEN} zHJ(r17=@$`m`|Nm{iv%meirx|c$G>^wNsT()AMtV<@58p{9M{F{I9yhO`Sme!+tyt z0Wx5BNe1Y8!0Z593vgf1-WQVh1TYun8==%w^iRVU;5Py`K&P$1Hv+!>SD3#K+$Qve zZ}9~B*q@kZDPCAwzK?;Y_Pi>#`Yo=?H}~|=pIjZpr1|w{rrgA}-*7`Gyg+cj5%}Fq z?8BDYawxvDj9|Z|%y<)UFM;X)dLw0l1$^g}_@BJ{3LX0b{&RGAz0)ME36Fc@V+C(| zps5MnnrC6!;+$;4hvsxOpR4n)GcChAd}q;g(5l%&!-4K^*B|&5m$Q5p$ItfUb(;P(jdgSwZ-g(|`u{dJbD3RqkuM+OwqU=Wzbm?p-&(}?7Pj&oi^K5E)%QUb zfPZ2GkdF*VXOMKkLYy@0q0pD%fg#DJuJ1 ^!=am{7Cmh_Z#D9SsxOZ;j=ie z_50}(D}B{ipD&%(cjJ-8RrOXqFQ=EsE3PxnA796Lx?ShW0ss8#th`0=-~Mo)Yx{M; zG;9Eq0o)f5e*ombnD_j%7x83}jyv*^_V}G_?nt4W@~1C}MN_C87H z$(!8NhZnid$-uwZ0E^r-d;w+$OqoBxUqJMko)fZf3E6r;_6h0R##|jb z^Tn<;v@*Z;>IuinA>*r zvjz7<(9zWSe7915Th04W4d>MV8Xyn&jPGDd3|`@yVJidjNyy{{teh4cJgb7{ImRAU5IDGl$<=tuM>J{gLT#AxA|9>=c#^{ zq>1yDa|QUH2L5MH1^!QhAK=7AZU(*plL3?i!7tb+wgByb+!+Dv5!!iSeQyx&3}AkW zZ!oe0=o=9K0DN7v1GXIbyRP-1-?K9OKsG&9{7KExR9cZ9<)@zqeh=UF@;b0TTA z3(5m;7i?h+{BMo$PdStv^B!euv5xAwUyX_CGCIyx&x>sr$Dr;$H$Lcds*PgWeA-i5 z$OFoiy!}x}XZ$SRewm+htv7BXzRvXj@*7qE6aSC{ZSe)b9{?G^Jptn1Y=PwdVB(z6 z4$RZ|%&@&btmg%wzvv@`4A{uMZk%l${r)L#)_>Q_&cemC^17G)@2R{wno79e<;Ji6 ziW@%V4+Qtau+g_4F^Jz&>yxunJN#Nn@$J`5^q&CR#k66RF*#td$OGU$vkicIlL5s4 z5YAgn-u`2q>+@PuHJ88nIa@B5dY(#)`P%JyoVWhEjG;JxHU8_%#dQ>~i***C+kKdy zDl;s-_jsvJ zjH9$++%ssJ$_14L;3@3^hQmGn@qRG>s@DJIzSYkksVk{J>&u09()o;+AzxW`=(D^o zttuyD64{L^L(n#P0s7g6d|Tn3x%jM3?u2$jxwt--jmyW^alVDQPSa4XTX|Qc&GKdV zf8qu=eKPF-)B9cL6v_bL-`fF{0W;BhU`o~keJ+*(wie*`1MJLjCIdL1y)D4+3!0xx zzAHpO0r$PIf3^8AtY7gSEBC}kzW65B!8=Lv$FZZF!rH+8jDFtRb+HhMr~fx|G@u@;9vEB8`lyj z184)79pHTevM+EPWPtetvwZ=+KWu(M{|+(dGv=oSu?HXzC zhOv*ggZlo118(G~emy4*%*vVR2;(DouR35JJi>ccBe0t!O|Eh8^D|8X>ydInM$m59 z4tWt|0&N4V3Fu!S{+C=t5;J=9{R(}QJc9o)uL5sUX`yVKuS&PXd750;k5!7E`K4L^ z4YOq$(Er#25dBXX z5ZM4+2V`r3_#7zPB+fVx=#Xaa9@whi^ z%QTPU=fpkJM?R?dmwdP$MKGBlc|{gj9@-5mKWHb&x&rsQCh+p$NbD=% zoYnNLKM+2NZD;*R#HGGwd5Ur|@THocRda9d>1>N38}p35a-Au<%Kb}^dAB+AR6JMu zd!;Yruj3K?w#DfPY&9v|?XCv@f7`0DMkGe}J43i1r6K zm#NFV9FT8|csrNt-OM(?b+%T3JlKBtAmjkn2UrsfAM+eHe(~w9GrU&j1bQ!Pg6{LY zdOjD&Hscd;T)OUZe^T|Q_?oJZyiV~umDkdm)-CyM{r~tig8vTmf1Cb4!#{8@c7T@yvqZz_lPmy<=p||!sGz)0)3X*%3>d2PMeJ&vC4$t5955tUK;nm zAP2U6U>`Sj&S7|W`5v1lkORQ8>>1>7Z9Ghkg??*mCbKn}r@j7BH*vx7Zs+m8?RH?F zauo83-$xk(?#0)cVO((<I zc>oyz{?YG9`+xGL^MxNp{ck+5dD1M-^RZi*p61?yV!Dhw#j9a*w=~KH#5!9pWF@?oj`q>V1DjI{-33`~f^8Tq6TA-=M7tFrWE8 zvB?5CKOD&dIYZ>Yq` z*5_j(H+WAU39qx5*EmPz?-@%z+61gKinH~B$O7P=GJtl0*a9jK#P;V3!4FBvO z`j!rJpF37x{oJf-x3_e*(X^dnJ{i->{@2ry;UiJL?wRqXdz|P0d}!_7miE=?wphw} z{oj80N;kvxKkz>b{8I+lI)M8Cyl$IKU~2-L6QmsAT0qtV-Y=m0gZ{iA-XRcs0P~x% z$N}QPV~KXM>Qm@F)2WaJDihQnCO$F9gjfcsZyj_0=t1BBdu`CsT$k_u)StQO>(6nW zG5x-Pt_`5W+Wf6B{eFHX7szz{@vPp=t>1N%|MW69ihYSu>`RDVK5h{762FRJ!8vL7 zcor<eG`d2Pck{6`6(B&HhufDPC(t13tTIh9U%Sz z@&-ZtkdTK{H-B6DRn-4Y=gETR%l6~*^L=63DBC8vxt+jnzTH3*uDqNKY5BbNyd0C+ zXv&93w{~s6TvyXJ<9ya<#&#V)ue~<>KX{qg^|K!ta6AJ<8DK%|0gr!?0g3YgwjP+l zyF)xPJY{PFo)y6R#5_AJ^WJcQxok4Pbf>O`O&*wCt#+>11!5y$?tA;d;!)_qQTXC$ zn-jk~fq|VT{l1&L^bFV8?7uT6h~OwQsJ`!PUhXD;@(K9#Ug$=#=P&_#V&d3-&eT#G$GIee1^p^Oqo)4U_<@s0Cp*pXt=M@`D)ss#u)&hyDk8*`MBcr)BeHjE+#R@v=;RoJX%EkH>!p_^1Bw0RO~$ zjQz|Wz}esq&j$>;4ISpZ z`qFVPc0;fkY)vsn-y8$h2xG9{<(tM|JJ`+Ka=vRX!x@LiugCuQg>Le^ce%0Sp5aDe zGmJx?OdL0W?;jzEE>;{H)?;k*xnLFas~*>T!M0$SI48C}zUdbc8HjX#TPeOTT(drt z2O)5 zd%KZmH@9`^0>7JL{Stqu$9L{JvWsXVOEx?X~|r&#m)9CX>*T(PaRX4p1NLzW3%iDw_C z`P~#;+rFs0FNOS!%SHcmG<=7N@=$~mTd-}WhaN) z_gtiBe$HHsGeE%k>56;Gfex-EO|Va!K>Y*eAI#1OcpE_88}irU7vP#ezNzPVtvJ>+eWv-5j=G5*(WzNk=-BMqKVu%R zgB5?O%MFvIxQKc5E5VNa`?CT%lX-TuB7L?VnZ>a_0-L`bR9-VFL8Qp&`bR~_sNiSyG$=W%cp7I zwZFy()>Tz!Q4VywPt%p|W3jGY$`=`ldgZGu# zeXx&=4#*_Zk2=T?exI3vGEe-H-rmX9L)fR>g?*688@{e{v*G%`IH&USx`>VRye!VG z1-r-W%-7X~9?K(aD3nKi*`9>fo$qh4y}8{RPp$4)Zshw@UBA^)mQU4Xn$|7(cvc2; zgnym8FLu+=BeS2_+jTyQGXT{2AMt_M_xR7&0+a!AJ|L_GO6LV*S%5PGd09Z40Kw}( z^A9i%cnsI3lld&j0bVOMGI@dLYL^ELneCpd*W*7+W4jhW6J=9&k94u=5eJO>YvgSq zuZDnmdsm_qqYlZ7zRUVZ%4@ld7t+3`2iIyVksinbZ_m(gD*F+T0elBbd>F^=9x4FhaJ$N9Uvi(|9F4EYytBJ#P1Ge@_@F11;_-I1C$4p0l<+3 z+5?>X#2e@Q?d??Rr)}d+4r)4B9EAQ*^`K`RsK&e*fYqTA@tuGQ(1udE^|M|oyi1ZLGi3|K`|-zf~4Cs z<}c>edy^+YwuCwq=PV2CMM3abxL4eJyhnZx+y5xVf_L;A^(gkiFH1wr`pgzG8IiSX zGRVs_q20@`-N$2(Wqd#7Mo^#8}y z7N9TC@NY4(FZ%?M3@};1c-HR|Xd3Ja?it#?p{xni4k+6M@%q3pNgPu)C{B4ztQuxD z-QG-mdX1#yxG44Ci>3T{GREd*pW#<9$!P_G!q+`;O#6zj2>o-pdRr z&wM@@_KUK>)*NcnkWTRI0n2GRvo>A0>``E=f9^o0J_ z(QMD+I*rD%jS%P#`8)6j@^?X`y$65n+Mj))&QG2Tp;X`k4Q@flr{)(+?ve3O2UY4Lvw?)ACI0F*QQ+c(wXJra4w@~ofO7FzQ6 z@|z5>b7oE)z&S091J?YlPrb;s@BX3VXkp}m_v-ULoR7shS-i(oj_?p)+q_E0#d@r* zVtR~^Cf8Nv!@LdHOW`AxR&2Mbjbgt1eVR8->gtxK+jG(p_dicpd3<`wo7Kg2h_?l1 z$G5rGrN=_wV9sIA&&vLQz9S^~r#zqx5S&vkAozP*3yAKI@@P6RBXU6F4F8cF$oz%C z1+mFMj09b5GQy`3Hy+0smJLtDb?&+8`&hns>`5J{i*ksVWDtB4=M4Vd(`tJjas~p= z>f+g&=S5j#{Zv^2+JO5>ybm>r^UkeHj>CHk+d0L>hnsx^K`glR{LIF;Lg(f2U!F_d z%Re<`00%#B0J95X%w;(Am`}Pf@3$F!FlB0o$H_&B7gd@-!64FIeQ9e4)1sPj!$iT=lZ zPUjc!O}v*dk9uaMt{^MKPKe5qCfXrvd-hbUzdnrjvZ3>*KmQUr$ILO2Z;i`4er4N^ z$z^`Rcv)b+ zfI_S|L;Xm%YhofEFV;tGq34X+6l3~wP#jGzzZ)#R z0o?nzgni0}82_{f4EyvCcsoF1*)R0Z(T3?d~`E_lvHltSAPl3s{E? zi80Q7OOZY7r{F)L+3xYo^m$3wquvYr%&`e2OhVo4~INV%uNr1LED=2j&ytS>o*M zfcXf4EAtJgd@$Qv+sR}B+7$Ui?3gUDG~8#n6-+Y^@r}5Eee=JWZ7+2iwiy=!_cXF^ zBH@`~U&{G*4d;wgGQs3mCL2ii$*}R^*QagO0Z%*UzShmIzFpT}l+j-2)2Os@E5_aD zL3LTHYa!~ex)vga%Bk!x>rc_kGW_e_e#n!mCoW%nUc^kQy<(oYzCCr_t<7%FyV528 zL2nC?{|{Z}I$!)V#UgzHe20+V5hJ#Vci02Y{DPDL7Pv03Yl$ffmMzF4 z@&;X%qK`Bc=}M*L+b;J#|2*`kTYA3jP;ZLXs=D%ZSlglBRppwb_d*R?+TBGkIbb${*#S)F`2jmaV0!~%6A)*R z2ODjQT*MAtDk{k7Q;xjHOgR-d+Svd7jg5=Yn<8Q{wj_oCBbYsfXz z3-W+%iY&s~LVbInmHw2^ywG)S`m%FVqq@$rH5YO3$H&HtOFpNcp& zw`}gE+o$xu5jH4tp$AN*u@H zyRR`W;_Iek+%%ufp}PFxSz4Z09Sar5_z7+2Wlm+f=VxioX6gBQg!hRxMs;6$;XyBX z%XC%KP|j;}q>3-0uKIOH8T;k7vbxAO@1K_TaW1v}vy)uw%-?ct`n34%0N4XXIgpb9 zW(VYA>P#)4kC9f86Nc4XId4QFYI?iTRX-n#Gw(-EBIwG5e;_+!oRbB} zi+jO21+qr*?o+EUK8_(&1PuBuQz*|$34E$ z(>e_@@W&r=v*3mN5u^D1CHXEf`Bj7K;@CAAPmD%wootU|TQ|N+XnqbBX$f?9pJUZ! z1FhOOy$`hIX$WnGa``lyi@lYr;;YQzXnd?6#q>N4RkZb%9(a&1SKqev+v0rLKxen- z#d4azil$JnFGn9%Y!6@`yM5)yT>I0%EB1h_-??YV?~cd#$F^j;1ZqMU68S&^E)|2*(CpPnxh=2JeMWlHpl9N?Vy{>;%W zuKlaexS3D?Ut$l)p1SNCVtpKAAJ_4HW)DQ^8U8)aO)d!Lna}WVK1limJ$}U(7h~9C zoXuxylO<%(${6X4V1J|1z;{rmPm{=Vy6`S&<475#3h`1Jk0Ud4P#^1Oima-Q^< zaU4oxk!+W;s9Z-%$8hea=6|zxbgrbzm;02TSH099>MHjsJj>U=C(?WEXRrC|Xbxjn z)-!QCbK`4oyrY9lXyrVP?E(0_J4?=X?JxX4dX9+xa@qp6XW(Ul=zouS!E=m%k8!aJ zGOR0pO?JfggOvC9FX0&FP2XqvybKWR+qJaA^#%fT{p_jO!w2SD_%_$f|NKultNT^w zcKi2ph&Nf^tNhb3Q-0VuSX?)r3->IIb*mqg=~yM@#KJvepUeF=yjnb;_E^W<>M7He zr=#0*!(P*T#`{!kb%kf$`qb^Y+9YY*v$gs?(LhI2-9p~!Sg>v>UtAZ=;QYXSKXk3H z{~gW(K!;-?H*$!4$Bm-i-o?Tl$#F;H%Y24TR z2-fznC5ZVJ-p}cr{YrdC8Q)Qz8fQ1PpP64TKYwB#R$bfNNsm*r`angXC5LBEUoNd# zomKSKrCVR>^6b%PHXeJhzs3EUJ<*@^T&Nn$s`R>X)-vgKw4BZD1sT(#J;3o)@r zlLoF+n2$F88T+^vzLnBhaSLadpiRa-!~I;wpl*B?=9!IQFLShRPIRj$g^f@jd6egq z@Un!}e4fx|RXTaaXLZjPhM$3!a(yvQihPfs)z!ggRyN+x2s|ve+pWI*^D>XDJ?3LO zz0jJkJ4IWeJ?@{t7mh}>pZLEs^aRcjd{WL7iX6bZ{IYMzwSj!27`Ws&$)azQ8t!A6 zV3^l9k{`r$BtJ46!?5mUinK{x4_jZp;YB;2-$l9l6WGHGzb}@0A2;Sll~UiA={xsV#%+J<*49oq0N}{S+_lS+S0|U*TC{&h^kA)|amHsp1LS34E#R zcb!bADi?UPaQzAVD)ZfFOpU3$XGmFKw(I0Be3$S7*ZS%!+zj^AxHb^n%l8SPiy;f- zd&L=E@tn9$$OfjzA(IzA-R>3hs_RAf^IHK}=eN#&h3nk)9XGpsCrOt-r8oWUoo@V| z@4N~;)^RJ|cN^F4`NP<;v#I)&3+ZRf-@T3IbFOJ!>3r2RlFq9BrTRSAv@~5!`d?3b zH$EHQ>gawd`k$gR(3bBb-+#&Z3US|AdpFJzoP@LTzvs`;1LtP||M=aa*)zEBrnt|2 zuiVQ4)&D`~2doEKA-+fd?PIGE@~kNiVtTE9mgS$_?}<3oZdE%0TSZ>x??auaW6JN_8jtq zXA*f1fwn*24@MoWb6?@wcbw;D$F>UU#S%7|M0*f@P0?-RPd?Z@j(HMar^@$|W^MIS zW>4p>qN$gDr{=BIYjN}X=0B%np2h9P*P5rQtzf&yb?xcvGJWYeyO4CG#x7O=oM^Ls z15N_@Lw`0t;5xrJ9c%JGfFB=o zbH(Ydv*CW!?sYw{o&sIZ?xgtCEp1MGtdL#Z+Un&w>9WvExl~^3qs6H_>9o1=)at6D zzv&#edY;;NetkAt>-sp?xoUNXxQLp|L|!HR)5_)Q+bNb$w`Fyt+f3JC zWk`2Sd-po#(}#T7xLujZnQT{%++|C`PR{eNT=&J~^G zX3lxF>wIEgJ=25rJpK3bPTt4&b<;d+aLZTR?5>ScM%uttQ(fPkuYu+qy_mPXmL-A3 zI(W}|_*Ye5H@;e(aryY#p3gU~S}V=B-lu2z^jH;X?at?NJyyozVx8std>u{aL%E*n zxx8od=IOV#IOpv;#NH;Lt{J6wPxd3m47i@F<`_ zQqQd&nuvA1Aj!-^>YnwTjj@WCvuCvt?(}XmzS;ige;fDDKZEn}@#7}{2i^@5qyD`F z*Oym4*m^$2t$KjpMcOMp7j8L5CkA~6Y>b`Ur(?jSgS)!YJ-5-?_U=mf$w_-h#dLU_ zW4Q0WRWHJ&y=dQa%IGPrH6c=f5(>of6hPegZ15D zjh{UdUG@+>(SAgGd>(ml_dNiA?|Y&()bpz~J6f+|lm4m?Bk$pvK9lD^zenWx(csWx z{rDKazN440qI~iJwP{}YLKr%BF>Y`^$9SFp#@c#wz6;OskW7CZOjZd`qTqA9CWY0d8{$IWwM532eZXL{W8v$#$j z|1_TF@GN$H-@5K>zF7Y8bjJ7Jeip9v548Rrqt>A3bSXU8 zoZCF=^I5Ok{I36~ff0Fro$tr|5ijH4+B;A2itg89XP$~j*X}U>j(QdAH}aMfH$NjY zFY9Oix;9%+dfx6cezbR0um8Jnt*=){_n@9%_u{ISUS7`8dm(soAN0GH>~}Tln$dII z#kmqkwefQ$|CH0g*8XWP7@HAjuH#O1vsjI<=O?`0`T3b(UivxO`-Nh_AMsIr#6)Mb z*U?Arc4MPDSq<9H&VaM?&-}~w$-C-o_ZGGN2(BI8K3A{dr{1gP)A$N2JKKG>zWfG< zj9Ygf_tT9pAbp=`YivhHStIH$Ly}pefl(Bda$R>nX1cYrQtMXJ2Bg zv)a$!2uKI{zj=)3tMjWlVMiRJy$WYPtACf@i9Ub8r9=q4LsqS$0Fz682J&uZ>l;|zR>A0vwa^IuOls)f0Ni9 zW5RP1t97AQCi%$GIH&m;zvtB%M|`Yet6s|W^*DMjDjtZ{-~Ye$&t{XZOgHTlPp{pt z!T0`{d8zmLv#s(Y)}t|`AHcbDAO3UR)~WGP=WiSLyL{%m!$~LV_I&62Le2^MZ#uU< zB7GO>My%HP`7*pVtR}mTuqYll!1euWF^L=DT5KCroryM^)7ih;bHWE&sW$nMc{1mw z`AfYWr#jOZ_vcr&X^(dP#4FRl`=`3nXBAdYzs0I^ysk-Z;e zoUi%u-1`;h-RHmiC|q(s_qsdIwHT{Yxb*h-nl|s7=a%clyAH=LUKZE6AI~Gh@^R<2 z_2wKuyQhq2UvuZPEz%I}33qyi>8GQ&!?hFBsnv~{)|2?&`%inL=a!%M&#&RP>}UO8 zago;_pT;G;E@n4ws&Tp2>QBZckHu$Si|$`*(%8})b-m|x=6pT>**eC}`?%KqMC}ts z_YMTdYRt4*T+Xq3tUb$@da*}4mVLkM=YpgAv8prSHtEqxY{f4=gV*%=W$!AE7hm)_ zJkng@N9C=?p!p=$=XTah;im@pW;t3%76X0R`FS7T8Ls<&u3_)%X@9Tcb^N{4k8@x6 zE;KJa_ju5a(VsuH1_z9Ha5Ic=Yq-OCnu}+0*DBAL*GsX8r+m!w+JcqG*ypYn$GDy! za-j|D-uOIM@@JtEox%4$@gvhmdNih|^Zn%>R3$Io4Uz$B~P@f9lV^<}**in(JQ~fBNbgSAD159-Q`A7q{n; z_I&Oa)nLv2+;8#!25x>gqBoDx-rD!Oznd6?e^1jr<@5S$;wzl(-16*T)?WKs0sf!o zOxNn`)HzFru z)v=wL-m_Yhy<1(2=D6#quCL?Q9_y)ftdvRRdN0KYPVDB4a?bW?LiS@_2I+ugRZikM{ACoojEiKGZSy=e<6- zUnln4;xd$?R-_Zk1iuLh+t$9W9IF~$m{&4oY zBh|mpLG*~XR)?;k=Ms;1fMC&gh;zT%I*jMvLlc}yY*btCfrsA19Ce@*n8`>_YRE)r_%PuAiGFxJk7$6WSUSp7`IEc$STXNfqt_E*c#eo!$lK>6&hC#HZ@sVQ#D&+D zFPWD6d?#LfT&MrI?H}n8P4~XLfsf#^ChkdK%kNZ(C+{N9_4)7m+r5jP|B*JUC&$@y z^H__yYv8+v*SL>8ZdEXS#T>5JJ@LAFE`3Jay8I+|_txs3@)ABd&b+6)y7HRv=B$@` zg6n~&x1W=x`YQm8E>z72cL3*Z*lUzk9A$|7hBgpQ?oPcjpwQF zW`--AfO*Es{gc|l_k7H;P4Di4>!4+>}?KrP6`#LS}E11Hkk5$#lKA)t{ z^lpAHe!p++3C;OW|9&j@*aP5Ftkk<&BfFbjo8^W))Wt~q;Eg@3IY&5S-K~Y1GRiX( zVW7Um#~SA6dv)v!9`U*0J#`MQ8c*|v zPbdDIlijc0*Yiw|j>*4^uBeZ{;0O(Vjs3}J^$H)tega=}$?&+A{=1IYFS`7w$N2RVx_6!ItMz)nQ=CJm=jPXl_xo69=TB%vjjxYOL{=ldUyheM@awpDB;NLY z=3&O^w4c>ES|0qM-6yIXVE$0uGB`Z zA5qiqPu6D)>6eImv=`Ms$4MQZzx$cT^7mOeKkMUv-_FjabW9u)6-ouB$VPUHQ46SzOYHpFOs& z))-Muez(o@BCLGR`jE$U-?Lr3d%C>mIqyy#;>>@z2cn!^*O`OlAQruWweZ%l z=if&qZ|BONhpeZHgJvBAUf`+EqPhO;T@~FsUfvzRjWE8yC*DT2PTWrC9`kBE<;`>b z=l-s>i;Me{c*5H8yk1%N;t5o8c&_`%pLN!E^DCYF&j&->#E)I)%HFhh^i?s@vpV%d zW9+%H=1<)E{#|jyne=sxg*ZP-p7^%&yVFB6KAzun4er`+#$XcC!7`#e03*TZ)E!x*YWW^sp|aX`543XL!GIbeZ}4F z|KO(kj-%t$)4BV(*L8JLJ~7sbM|Li~#NKfneB@eu?;Up7kQ-aEa6{`3C44!jP$4!jP$4!jP$4!jP$4!jP$ v4!jP$4!jP$4!jP$4!jP$4!jP$4!jP$4!jP$4!jP$4!jP$4!jQh&pYs6+K<1t delta 63 zcmbPsTI^k^DFXu|12cnw0Ekv#$Y5b$Fk@g~P*8yIR{+K50mTdqpnO#Z1~*ZLjj21W E04YHUWB>pF diff --git a/package.json b/package.json index a8f8859..afce14d 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "soterios", "version": "1.0.2", "description": "A local-first desktop toolkit for system maintenance, monitoring, and basic security checks.", - "main": "main.js", + "main": "src/main/main.js", "author": "Soterios", "license": "MIT", "private": true, @@ -33,6 +33,7 @@ "appId": "com.soterios.app", "productName": "Soterios", "copyright": "Copyright (c) 2026 Chris Rivera", + "icon": "assets/icon.ico", "directories": { "output": "dist", "buildResources": "build" @@ -41,7 +42,7 @@ "assets/clamav/**" ], "files": [ - "main.js", + "src/main/main.js", "preload.js", "src/**/*", "assets/**/*", From 382cb53b72db6d3e2456be02635c88666042305d Mon Sep 17 00:00:00 2001 From: Chris <185133702+chrisriv10@users.noreply.github.com> Date: Sat, 27 Jun 2026 15:15:56 -0500 Subject: [PATCH 2/6] Enable executable signing in NSIS configuration and refactor icon creation function --- package.json | 2 +- src/main/main.js | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index afce14d..a05a7d8 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "icon": "assets/icon.ico", "artifactName": "${productName}-Setup-${version}.${ext}", "publisherName": "Chris Rivera", - "signAndEditExecutable": false, + "signAndEditExecutable": true, "requestedExecutionLevel": "requireAdministrator" }, "nsis": { diff --git a/src/main/main.js b/src/main/main.js index e67feb7..e6c6a9e 100644 --- a/src/main/main.js +++ b/src/main/main.js @@ -31,15 +31,15 @@ function logLine(level, message, meta) { } catch (_) { } } -function createShieldIcon() { - const iconPath = path.join(__dirname, '..', '..', 'assets', 'icon.ico'); +function createIcon() { + const iconPath = path.join(__dirname, '../../assets/icon.ico'); return nativeImage.createFromPath(iconPath); } function showNotification(title, body) { if (!Notification.isSupported()) return; try { - new Notification({ title, body, icon: createShieldIcon() }).show(); + new Notification({ title, body, icon: createIcon() }).show(); } catch (_) {} } @@ -51,7 +51,7 @@ function createWindow() { minHeight: 640, backgroundColor: '#0e1117', title: 'Soterios', - icon: createShieldIcon(), + icon: createIcon(), webPreferences: { preload: path.join(__dirname, '../preload/preload.js'), contextIsolation: true, @@ -74,7 +74,7 @@ function createWindow() { function buildAppMenu() { const isMac = process.platform === 'darwin'; - + const aboutHandler = () => { dialog.showMessageBox(mainWindow, { type: 'info', @@ -130,16 +130,16 @@ app.whenReady().then(async () => { const heuristicEngine = new HeuristicEngine(); const reputationEngine = new ReputationEngine(db); const quarantineManager = new QuarantineManager(db); - + const scanEngine = new ScanEngine( - db, - eventBus, - clamEngine, - heuristicEngine, - reputationEngine, + db, + eventBus, + clamEngine, + heuristicEngine, + reputationEngine, quarantineManager ); - + const realtimeWatcher = new RealTimeWatcher(db, eventBus, scanEngine); const processInspector = new ProcessInspector(); const systemAudit = new SystemAudit(); From f0bf50683c92c360966534da1f3404843d7de630 Mon Sep 17 00:00:00 2001 From: Chris <185133702+chrisriv10@users.noreply.github.com> Date: Sat, 27 Jun 2026 16:01:29 -0500 Subject: [PATCH 3/6] Refactor dashboard page: streamline last scan time updates and improve element selection --- src/ui/js/pages/dashboard.js | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/ui/js/pages/dashboard.js b/src/ui/js/pages/dashboard.js index 843444d..49fad76 100644 --- a/src/ui/js/pages/dashboard.js +++ b/src/ui/js/pages/dashboard.js @@ -110,13 +110,12 @@ window.Pages['dashboard'] = { let isRtpActive = true; async function loadLastScan() { + const el = container.querySelector('#lastScanTime'); + if (!el) return; const latest = await window.api.invoke('scanReports:latest'); - const el = document.getElementById('lastScanTime'); - if (!latest) { - el.textContent = 'Never'; - return; - } - el.textContent = `${new Date(latest.timestamp).toLocaleString()} (${latest.status})`; + el.textContent = latest + ? `${new Date(latest.timestamp).toLocaleString()} (${latest.status})` + : 'Never'; } async function loadWarnings() { @@ -200,7 +199,8 @@ window.Pages['dashboard'] = { healthDetail.textContent = e.message || 'Unable to calculate health score.'; healthIcon.className = 'status-icon warning'; } - document.getElementById('btnRefreshWarnings').addEventListener('click', loadWarnings); + const btnRefreshWarnings = container.querySelector('#btnRefreshWarnings'); + if (btnRefreshWarnings) btnRefreshWarnings.addEventListener('click', loadWarnings); await loadWarnings(); btnToggleRtp.addEventListener('click', async () => { @@ -222,12 +222,13 @@ window.Pages['dashboard'] = { // Scan buttons document.getElementById('btnQuickScan').addEventListener('click', async () => { - document.getElementById('lastScanTime').textContent = 'Scanning...'; + const lastScanEl = container.querySelector('#lastScanTime'); + if (lastScanEl) lastScanEl.textContent = 'Scanning...'; try { const res = await window.api.invoke('scan:quick'); if (res.error) alert(res.error); else { - await loadLastScan(); + if (container.querySelector('#lastScanTime')) await loadLastScan(); alert(res.canceled ? 'Scan canceled.' : 'Scan completed.'); } } catch(e) { @@ -236,12 +237,13 @@ window.Pages['dashboard'] = { }); document.getElementById('btnFullScan').addEventListener('click', async () => { - document.getElementById('lastScanTime').textContent = 'Scanning...'; + const lastScanEl = container.querySelector('#lastScanTime'); + if (lastScanEl) lastScanEl.textContent = 'Scanning...'; try { const res = await window.api.invoke('scan:full'); if (res.error) alert(res.error); else { - await loadLastScan(); + if (container.querySelector('#lastScanTime')) await loadLastScan(); alert(res.canceled ? 'Scan canceled.' : 'Scan completed.'); } } catch(e) { From d9d966afd1e4aa4e5d798c81f52543203e1a9348 Mon Sep 17 00:00:00 2001 From: Chris <185133702+chrisriv10@users.noreply.github.com> Date: Sat, 27 Jun 2026 17:21:30 -0500 Subject: [PATCH 4/6] Update README.md: enhance project description, add license badge, and improve installation instructions --- README.md | 140 +++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 102 insertions(+), 38 deletions(-) diff --git a/README.md b/README.md index baa31a7..7783ec4 100644 --- a/README.md +++ b/README.md @@ -1,67 +1,109 @@ -# Soterios +

+ Soterios +

-Soterios is a local-first Windows desktop security and maintenance app built with Electron. It combines ClamAV-backed scanning, Windows security visibility, process inspection, real-time protection, reports, quarantine, password tools, and safe maintenance utilities in one desktop UI. +

Soterios

-Version: 1.0.2 +

+ Open-source, local-first desktop security & maintenance toolkit.
+ Scan files, inspect processes, audit your system, manage your firewall, check passwords — all without telemetry. +

+ +

+ Latest Release + MIT License + Downloads +

+ +--- + +## Download & Install + +Pick the installer for your operating system from the [latest release](https://github.com/chrisriv10/Soterios/releases/latest): + +| Platform | Installer | Notes | +|----------|-----------|-------| +| **Windows** | `Soterios-Setup-x.x.x.exe` | NSIS installer · requires admin for system-level checks | +| **macOS** | `Soterios-x.x.x.dmg` | Drag to Applications · may require Gatekeeper approval | +| **Linux** | `Soterios-x.x.x.AppImage` | `chmod +x` and run · no install needed | + +--- ## Features -- Security Dashboard with health score, scan status, warnings, ignored warnings, quarantine count, and real-time protection controls -- Virus Scan with quick, full, and custom scans, ClamAV definition updates, progress, cancellation, quarantine, and saved scan reports -- In-app Reports page for browsing, viewing, generating, and deleting scan/security reports -- Process Inspector with risk-first sorting, then highest CPU/RAM impact inside the same risk level -- Windows Security Audit for Defender, UAC, Windows Update, BitLocker, PowerShell policy, and Secure Boot -- Firewall Management for Windows Firewall profile status and rule summaries -- Network Monitor for active connections and interface activity -- Password tools with generator, local strength checks, HIBP k-anonymity password leak checks, and XposedOrNot email breach checks -- Real-Time Protection through a local file system watcher -- Quarantine Management for restoring or permanently deleting isolated files -- Tools & Maintenance scripts for temp cleanup, disk reports, large files, browser cache reports, startup items, network reports, and Windows services reports +- **Security Dashboard** — health score, scan status, warnings, ignored warnings, quarantine count, and real-time protection controls +- **Virus Scan** — quick, full, and custom scans powered by ClamAV with definition updates, progress, cancellation, quarantine, and saved reports +- **Reports** — browse, view, generate, and delete scan and security reports in-app +- **Process Inspector** — risk-first sorting, then highest CPU/RAM impact within the same risk level +- **Windows Security Audit** — Defender, UAC, Windows Update, BitLocker, PowerShell policy, and Secure Boot +- **Firewall Management** — Windows Firewall profile status and rule summaries +- **Network Monitor** — active connections and interface activity +- **Password Tools** — local generator, strength checker, HIBP k-anonymity password leak checks, and XposedOrNot email breach checks +- **Real-Time Protection** — local file-system watcher for live threat detection +- **Quarantine Management** — restore or permanently delete isolated files +- **Tools & Maintenance** — temp cleanup, disk reports, large file finder, browser cache reports, startup items, network reports, and Windows services reports + +--- -Soterios does not collect telemetry or analytics. Local scanning and system analysis happen on your machine. Network calls occur only when you trigger features that need them, such as ClamAV definition updates, HIBP password checks, or XposedOrNot email breach checks. +## Privacy -## Requirements +Soterios does **not** collect telemetry or analytics. All scanning and system analysis happens locally on your machine. Network calls occur **only** when you explicitly trigger features that require them (ClamAV updates, HIBP checks, XposedOrNot lookups). -- Windows 10 or Windows 11 -- Node.js 22 or newer for development/builds -- Administrator rights are requested by the packaged Windows app for system-level checks -- Internet access is optional, but needed for ClamAV definition updates and breach lookups +--- -## Setup +## Development Setup + +### Prerequisites + +- [Node.js](https://nodejs.org/) 22 or newer +- [Git](https://git-scm.com/) + +### Clone & Run ```bash +git clone https://github.com/chrisriv10/Soterios.git +cd Soterios npm install npm start ``` -## Build +### Build Installers ```bash -npm run pack +# Windows (NSIS .exe) npm run dist:win -``` -The Windows installer is written to: +# macOS (.dmg) +npm run dist:mac -```text -dist/Soterios-Setup-1.0.2.exe +# Linux (.AppImage) +npm run dist:linux ``` +Built artifacts are output to the `dist/` directory. + +--- + ## Usage -1. Open Soterios. -2. Review the Dashboard for current health, warnings, and real-time protection status. -3. Run a quick, full, or custom scan from Virus Scan. -4. View scan details from Reports without leaving the app. -5. Use Windows Audit for non-firewall Windows security posture checks. -6. Use Firewall Management for firewall profile and rule visibility. -7. Use Process Inspector to review high-risk or high-impact processes. -8. Use Passwords for local generation/strength checks and optional breach lookups. +1. **Dashboard** — review your health score, active warnings, and real-time protection status. +2. **Virus Scan** — run a quick, full, or custom scan. +3. **Reports** — view detailed scan results without leaving the app. +4. **Windows Audit** — check Defender, UAC, BitLocker, and other Windows security settings. +5. **Firewall** — inspect firewall profile status and rules. +6. **Process Inspector** — review high-risk or resource-heavy processes. +7. **Passwords** — generate secure passwords, check strength locally, and optionally look up breaches. + +--- ## API Notes -- Password leak checks use Have I Been Pwned Pwned Passwords k-anonymity. Only the first 5 SHA-1 hash characters are sent. -- Email breach checks use the free XposedOrNot email API. +| Feature | Service | Privacy | +|---------|---------|---------| +| Password leak checks | [Have I Been Pwned – Pwned Passwords](https://haveibeenpwned.com/Passwords) | Only the first 5 characters of the SHA-1 hash are sent (k-anonymity) | +| Email breach checks | [XposedOrNot](https://xposedornot.com/) | Free public email breach API | + +--- ## Project Structure @@ -76,4 +118,26 @@ src/scripts/ maintenance scripts and registry src/ui/ shell, CSS, shared JS, and page modules assets/ Soterios icons and bundled ClamAV files build/ installer resources -``` \ No newline at end of file +tests/ test suites +``` + +--- + +## Contributing + +Contributions are welcome! To get started: + +1. **Fork** the repository. +2. **Create a branch** for your feature or fix: `git checkout -b feature/my-feature`. +3. **Commit** your changes with clear messages. +4. **Push** to your fork and open a **Pull Request**. + +Please make sure your changes work locally (`npm start`) before submitting. + +--- + +## License + +Soterios is released under the [MIT License](build/LICENSE.txt). + +**Copyright © 2026 Chris Rivera** \ No newline at end of file From a8feace5adcbb77882599a2fbb1bb99cf836eb05 Mon Sep 17 00:00:00 2001 From: Chris <185133702+chrisriv10@users.noreply.github.com> Date: Sat, 27 Jun 2026 17:31:11 -0500 Subject: [PATCH 5/6] Add GitHub Actions workflow for building Linux installer --- .github/workflows/build-linux.yml | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 .github/workflows/build-linux.yml diff --git a/.github/workflows/build-linux.yml b/.github/workflows/build-linux.yml new file mode 100644 index 0000000..c5cfd80 --- /dev/null +++ b/.github/workflows/build-linux.yml @@ -0,0 +1,31 @@ +name: Build Linux Installer + +on: + push: + branches: [ main ] + workflow_dispatch: + +jobs: + build-linux: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Setup Node + uses: actions/setup-node@v3 + with: + node-version: 20 + + - name: Install dependencies + run: npm install + + - name: Build Linux AppImage + run: npm run dist:linux + + - name: Upload Linux installer + uses: actions/upload-artifact@v3 + with: + name: linux-installer + path: dist/*.AppImage From b558d0a3d34f21fc77a1d2ba2d9a70073ada5d10 Mon Sep 17 00:00:00 2001 From: Chris <185133702+chrisriv10@users.noreply.github.com> Date: Sat, 27 Jun 2026 17:34:19 -0500 Subject: [PATCH 6/6] Add GitHub Actions workflow for building macOS installer --- .github/workflows/build-macos.yml | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 .github/workflows/build-macos.yml diff --git a/.github/workflows/build-macos.yml b/.github/workflows/build-macos.yml new file mode 100644 index 0000000..2a094cf --- /dev/null +++ b/.github/workflows/build-macos.yml @@ -0,0 +1,31 @@ +name: Build macOS Installer + +on: + push: + branches: [ main ] + workflow_dispatch: + +jobs: + build-macos: + runs-on: macos-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Setup Node + uses: actions/setup-node@v3 + with: + node-version: 20 + + - name: Install dependencies + run: npm install + + - name: Build macOS app + run: npm run dist:mac + + - name: Upload macOS installer + uses: actions/upload-artifact@v3 + with: + name: macos-installer + path: dist/*.dmg