From 5a84db26032be3b1a355d50cfb33c00f02a8b5fa Mon Sep 17 00:00:00 2001 From: Tom Date: Wed, 8 Jan 2025 11:23:20 +0000 Subject: [PATCH] Update --- _posts/2025-01-08-manipulate-pixels-python.md | 54 ++++++++++++++++++ _posts/2100-12-30-template.md | 4 +- _sass/base.scss | 6 +- assets/blog/manipulate_pixels.png | Bin 0 -> 51695 bytes .../micropython/convert_to_transparent.py | 42 +++++++------- 5 files changed, 79 insertions(+), 27 deletions(-) create mode 100644 _posts/2025-01-08-manipulate-pixels-python.md create mode 100644 assets/blog/manipulate_pixels.png diff --git a/_posts/2025-01-08-manipulate-pixels-python.md b/_posts/2025-01-08-manipulate-pixels-python.md new file mode 100644 index 0000000..9cdd024 --- /dev/null +++ b/_posts/2025-01-08-manipulate-pixels-python.md @@ -0,0 +1,54 @@ +--- +title: Manipulate image pixels in Python +layout: post +excerpt: I had a black and white image but I wanted a black image with the white bits transparent. + +thumbnail: /assets/blog/manipulate_pixels.png +social_image: /assets/blog/manipulate_pixels.png +assets: +alt: +image_class: invertable + +--- + +The way I've implemented dark mode on this site is to mark some images with a class `invertable` that means they still look good inverted. And then in CSS I go ahead and invert them if you're in dark mode. For other images I just dim them a bit. + + +
+ + +
Try switching back and forth between dark mode and light mode, the one on the right works, the one on the left gets and ugly black background.
+
+ +However for some images like this black and white png it looks a bit weird when inverted because the background becomes hard black but my site's background is a dark grey. So I wanted to make the white pixels transparent instead. + +Anyway the point of this post is that I knew in terms of pixel values what I wanted to do but wasn't sure how to do this in an image editors. So here's the code for you and my future reference: + +```python +import sys + +import numpy as np +from PIL import Image + +if len(sys.argv) < 3: + print("Usage: python convert_to_transparent.py ") + sys.exit(1) + +input_path, output_path = sys.argv[1], sys.argv[2] + +grey = np.array(Image.open(input_path).convert("L")) +alpha_channel = 255 - grey + +rgba_array = np.zeros((grey.shape[0], grey.shape[1], 4), dtype=np.uint8) +rgba_array[..., 0] = 0 # Red channel +rgba_array[..., 1] = 0 # Green channel +rgba_array[..., 2] = 0 # Blue channel +rgba_array[..., 3] = alpha_channel # Alpha channel + +# Create a new image for the output +rgba_img = Image.fromarray(rgba_array, mode="RGBA") + +# Save the result +rgba_img.save(output_path, "PNG") +print(f"Image saved to {output_path}") +``` diff --git a/_posts/2100-12-30-template.md b/_posts/2100-12-30-template.md index 7271f57..41a4ca2 100644 --- a/_posts/2100-12-30-template.md +++ b/_posts/2100-12-30-template.md @@ -3,10 +3,10 @@ title: layout: post excerpt: A one sentence summary. -images: /assets/images/2024 +images: -image: thumbnail: +social_image: assets: alt: diff --git a/_sass/base.scss b/_sass/base.scss index c9b90a2..3c11d4a 100644 --- a/_sass/base.scss +++ b/_sass/base.scss @@ -233,7 +233,7 @@ figure.two-wide { justify-content: center; gap: 1em; margin-bottom: 1em; - * { + *:not(figcaption) { width: calc(50% - 0.5em); } } @@ -244,7 +244,7 @@ figure.multiple { justify-content: center; gap: 1em; margin-bottom: 1em; - * { + *:not(figcaption) { width: calc(50% - 0.5em); margin: 0; padding: 0; @@ -260,7 +260,7 @@ figure.multiple { margin-bottom: 1em; place-items: center center; - * { + *:not(figcaption) { margin: 0; padding: 0; width: 100%; diff --git a/assets/blog/manipulate_pixels.png b/assets/blog/manipulate_pixels.png new file mode 100644 index 0000000000000000000000000000000000000000..f832fd74d34d43044d245fabb998e219a027b07b GIT binary patch literal 51695 zcmb4~Ra+fR)2L@H+}+(FxVsbFCAbB5f;$T*L4rHM-8D$C5Zs;M?i$=T&v#w#57Pc7}?eR!EHvgN-g_Bi`0-T8rBJ<~{z@ zv29j~kNAAz`|{9t8sj_BvCr>4As5f6T}?0dXLoChI{8CV{Lk`FaVLK{qJC5^`wolLisNydoinhKCQWw%_emuM6`BZr0nc{4#8IcvA=tk;J-b#YO-@zI%Q+ zoIT_8F4@c6LPoDO{4n5lSTC#4wHT&SQf7amzM??qk2@1+J^t%`JmE8Q9 z8@uWIQRm?Hf3M@i1cO7&$Db|gFEX_-F)`bv(HQ}+qJMD=Sa5Pv+DMCowgr$F@Y_E2 zqUQ$L;jDMuN{8oLUAhn~(CT8IOppktP&`WTI#J?4)ENWjK}^GL@p~w5Je@UG&S|}X zS0e=h=bAtMjs5a?~UHD~&m23(+9|Ylf%Sxvzw8qF>dP}Hk zcM#w~l+xHZmmDbU+ZWFF2TuW$t!A!#&xDJz7XK;3$`7;0qC>k)H#VdD0WcpPo)`Y(B&Okg8bZ(!na~2LaDJdjz7|vL@@T)vX=x|d#hRa zKl#P~eSW#MT?7H;K6-hzOwG?)#~<`fdhb@%G)4Lup_hK(;^1DYNZ;@POLW z|LnsKV-LhdojyBX=d-_6)wjsSX&_S%yE#1p2gliyufgp3%} zMS^!jXYxZ7GH|d;0;qO|f*}tbEo-J{sK;Oa5Er!JnSJGY))yS{yQ7Lno~FfEkKwPr z-@{n%U_XqT6cA?Uz$7Y@JMn+RJ$*aA`y=hztMZX7d9#e?uK3|<@wV`W?}ouY?JZ*H#9^G03xh` zjVEIDrDNXTUvl_Sk3W8W@C;Z$Mg91?>FOt%6J?hrw<^ZY8!p^w<>Z8BRortwYfnik z z_*SFbA=-?+5G<_uu>dCdx?(1^&@d4UP(DR21L2K{S9mo;YyJ^5^wd(*MVImQMaEbv zD%uv#SX_#Gg1)ccPF4e<6Ppt2i;NN#31(#R&ydgpa|Qc*dW>?uDnT7Aw0CHJFg8&B z(MIiiONy=SsqHV5F3RFdlC+c&e)q zdB2Z|Sb@U%pfcUl>|h4aiXMC9=6UdcZjQC5)hRMl%Tubkg}m zSopuZgizyi(GI$z{aeLjU60Fde}(PPkgwA=jz7`ml&8+uUNJ*kkP(Y8LFjAPp(1la zyXc1E_c~}H7WGzk*&U|syR2+zkgW8*Y6XCylan24tYW65IXhl?LNcdxk+QDQA6*8` zZ*_Ef`2u`=k%tuxF1YeH7*v_CVJXw zC*zKZ%=#*#?8>FZ-7PH_VZ-^-g#nxz)YYD8cVglLE5SdmHNLMn-Ix3-QaO*WzqwmY z;PvD=oVh|e5mw5DJCU?4tjyqblD!{vnOAz*GIfyLd{ zyJ7gaKH#NBK#bL1%CTI`8Xg1+nywXhuz7nJNWcu`^WRHACKmWOp3_x{C6_!5h1pFq zea}KI6UosBRlalI|D4`Stv`=^?`_QmFzGZBZa{o%zq~IV>SVec&*b(+^Ss3tsm0$g zS3@oF!aexZTw|ENtuCj{jc+axgH{*GUmY4>;qXI3cP(4|pQ;^w)?Pm)yG%FeGe(0# zo6{)eRw*>!!0+MDV(H)dhXs;y2QQztC`Nop*VP?boG$<)pI52NA^X;O>JAl;I)B98 zQ)O4920%LE<_QWF|K`_Yx_N@(eSKOgs5{XP6(J5Yk7hPY2mY&K=6t-9KixA$>dAmO zQ70A#qslm@N6RJ=nYhLocSKCl=Z0uv#KvV0N zt7Z=2ri@~xqm5QHYV_mLn1Hiqt;2acYO&WgZ2u;RV)~>pB^BUh;#SSOK#6_KLtygD zbo(5W5c5OGlV`#aH>1LaaG*sJU5EO{D#a$qMR0@T$G-Mf*KFKxCFmSvBk$|IG~ME_ zBq63hic?sOQIZ^%JtZG~%~X7bACOXMB*Pm&C_1jTnJr%4`)-Gy%Z=>a&`gS|E-d0K zP2iov4U0y6udq=N%i~ES%#{%PHDtw(58kGWSx?1fCX`2?A0~a0Q7R+v!a^A1t#g&T z_AiEIvs^LIt=q#ZWiCtltI?}mW6+uOD}gnYuU%lI)iu=|FRs)4>+k8pO+hw25_43c zhbugmh(DKc2K)_j1>xuNXIZ)y>+3SR%jfgM@BYS}D!#U%1O;SP=&J}tzMU}Tx;OYC z$M3n*Jj~Yp;6hF}IL3c_k0d#KEORbZnyiZ|$OM^V`Q6=3m%Mo;C(wMuN%`gND%+22 zBX&anx8n|-`r4<}`>HyieRV%(x8tt-fbt6{(dSD8oLPuU&Q&&X7`1W(rx^kpr~=fpIbHWWl=5gWUoM5}65>Dpou!QV&a* zgm)=LaNnBc=fAjPFMIt2Q+DNuGs&dM3(pN9%+^#Wq2YhGhM15PMOn+Fofk`(CNjBrZe$0C&ThZ)~WAJZ(gt?=wIl=xfM``-M zofFnc`7HB=^f?X>e>zATg~@jN>|3y}0m;W=9>FpoLvyTm7HIP%0iSx-1PiTe75G@- z(9SX~yj*A6Kf2S2@yptXSo{ONLhHEtuL8hn7cm&%3o^ii`&ffmgO@5mrWtX2Lfz%K z%22Uj-=6_zI>srxPHH^J2;(A8ADW-BH30?CXB%c^=k-tYZ19v}@0M^I*C#WwYt((V*^LH>T-Hy6j94G)6^$Eod$Lmx6N4Q}#(b^J{1} zzXcl?jfhvx}tX3jqx{?sLb3tj3(^n$G zgodTd5Lk~CiI0eK=8+U~>LynP5lhMl*@QgwIRz;@urUQn?Eye;!{R}HLXp+adG&fG z&AUmHY(2z#=riE?OcHE0p7hBkkc_Lt`?&g1hLURYy1*DTQSsLQSD#iX4e`pU!Evh} zWi37>hZi&OUK4(N+2dqDU>xFsMSdRi;M;4AwPBS8@(Y+r5w*Bp{EKKlCR)W>rOyqm zO5{t)kib{eQE(#MWn^jZ2v;2L-0igu15_$VNfmmvJq}Jj2FfEU27_rBQu9FfvOifu zEC$B?%X?Cw93qg9SvEnS@)*9)r}}|w`sqSM^YcHoeeVP64+-0QRi>+FO!$3>i*bQQ zY{kXAkoIp;1s#auGS)_B(i6!jUG{3-_LsU)HV70Lvdlp6Rx4C@IT=s6o_^B@&Hb~S zC{g^u>&S#s^G_TZSkzOo4uNv1q*U%$3*oB^u;u7<;0V&IK-1 z)ewQVS*(~C|^YEo|> zj)i9Xc!G@;3@HO$Slt}Y$K8_XN3O>ZeaQAwTW0$;?nX{HuE+6##LHZMr8Hv}Ws(s+ zA;Rt>+}x<{`k*lIF{I6DB-OYn0T}&i1`h}ETdFTH2;oT;RPi`mJ#`(*W{i3iY2jT8 z8>VrtB;PZ!NtwecXs3I_r@4QdYeUkZHX z0+>8T7wJeysCjs|YMjGwNZ5?zgeUPl$i%4NOZ&%)e+0;uuoqaB_l}N?V8!+YeYXLw zHlYj6>P$P9rcV;@H1#esp)q(%vkZM>6S_ReROJ>3Q0sAoH-JCys<|kP?4fPizmkE2NDS0z4Rs)YX*$J2=XYGnv@zVAq-;P$I{= z3IM~r;N1aB?s?T7AC1D_P6Yt~f@mc8cC1y8yoXYx7r`nLAFd=4M=mPb8t@X^_~Meg z0@Bg+-gZAcUslWCF!!?!jLL>`9#-0qJ3xBk;2T|!uBLrtKPD;wQegRAYmg*eud+yaa|Jss z6<)XB58FrKm8Vb1|C|-wHUDsDf06r3A`L&OJpbJCagSNYkxc+UQx7BCNm_G#Qn6+7 z8gKLmkIp}FD0p?Eb2Svm2iji$b!I{*HCHlGN(W(OJCu#?9<#}B9A-w@G&0TCh&=2s z4z%c#(CyBLZ5d|B`k0kmOtLseV+=m4r(A9_=r0?qKMQ>)JZw4GhYR9KrL068R`o&6 z!BpEZ!_Saski|F8wAqMj-?^S2UlyIxMNAZX{ML* z0r*zu%Wt;L9j3o`Cvr6Irmx_D+ziih&3f}5YcJ8&x#oapc?#6UjS=l}D}keoyOy0&B<4)+}{;spjPhhDfv$p;Ilul69c7ZJm-L zt{74u8QhEpi||Fgf80MjFvg$&Ed|BUZ)`4{(0T8NKIE>CZ)?V~f4^B2nf7`_VjIjy z{;BOTq^|m2;?t3{_Zj}8?M?S@;F*=Rk6R(l4h)wcXY2)u=J5KTZeV8nF%+tf2NbZ} ztl$CyIt{s$xyi0Ns!bl{W;)}OD*`_O))5yrr+Ueot_YzI$T4D|4K|52f=wAHpqmvJ zF(4O`TWfNE&zLrj$6^#Nm!j>lAV&WP@AS{`(ogIxy{TCYYQ;7RFd-if5tR*8X0}hj6 zQ0{vI><_|kHxBdeRCV+pn!UUxg?f*s>={ib)gK<0owT32e_i1)RU`vw8fHirNM~D-m~G#J3OGJrGu_KNmd&#vjBBcRRa7;=^FG%@W%^Kz z0$_j}(u@cs>6G7sHGlTZ9&HOMOIEJtH5aR-qKf=DBz&!eMSFmV8^174=cqxlOSFdz zQL;CM6r`{L`5Xe6wCACjkDy9W_bdPpSi)B3f%vFSYyb%3GbkKZ6@yR=VheDA@O$#U zO23JP)z^r(iQ0l29nr7=Z9v2f95>1*daNoBM=&YxRH4Vd z_Q()|mR#>iw75HyOyDuJJ)D2wWKjE68!FbOu@Q%g$7&=K9at#Mk_N+XhX^7^MKPh{ z0@$dVm^sZ@>j1Ih@l@UtFobB!*ixYG=1LxEvASY&F+0c=4|?Boy$q44Q?2oIA|@Mg zL*Vlwm)8}+5@I~s23ONOaIb8ur>X1vsGOvbS|d9}3FD@bBjT#;&+VVbp2T9LDluCU zhm9!e7p?{gWO<`i@IXbkk{t~#0MPj+1y)Ep3hkpdB0x5r z?R>q}8H>jCJ?+F`t8Wb@sn3riJOofxJ0kXs;ZOZkiq>%M7lgzrFA<92!oIkQaZn|Q zGUXYAC}+?UPaT4Hg_5ZhvY2hvUtHu%N?-u0Og2o9Yl8>>0hXJ2jgE>7X$yqbKuH?v zj^hSP=42Qo?e4>L`NZ%&MWX8*;C=Q!M~Y(s28P7>uE>?TDnW!M_aptH#^w$8-#A$iP;}X)F7O%p*fr`iJ!4z9io(iuQu!|D|bWU10DqBeLU0XPtm0xh`g`L zOe{64br65dC)Bob45nYVPUNvWz| z`d!GihZ=hZI&y4BD}vhE`EZz7%C6t0xtOl8?QXp++&nkfS&PZFwf>x)*yr3Qz zQZkL@8tpE$1*X1=MS`C#zkmaf=yJVC)9jgs;#js-f~465pO7hjfZ$vDEHxR*!!R41?>v-siIIS^zvH&?7I^m~)R=>mYm7X^LQW41QcN%4Obun@xs5Ylp zhX}9kJX!z1&6O#i+@VKkOLd#keNs|bA9X9rd@h~!LXI~{6kyMAp$GBZ)pzO(iG*XJ z%h}DO{BZ_%=KcOEkx1BWdS4=I2ZK6E@88BH%>|=ZMmikqFj=;!La^Uuas+Ulz8!Z2P(8-As!5NUELcfaO?iyODNoBa2 z)W)#khfl;R8&q67*cJT5V%Sz3p#uvB(#*~MM>#2K+UveDAJvriLEscGP3jKrFN?2kj#po zlSys}6Vx?I3^`qD%1na2w$0q^LflpO{q?38nLtEq!g;nrgGvCcdo*k3S=J2A8f85< za%870YW5dBtTU;=#mIqBSc&N~-lpyqli0+WB;XP#?*Vkz(?J8afbZQ)0U;$C6gyhK z&`3`t5{w*G7Defssk>RAxGTH(c`E?<+O`t9SH_RZC88y7wj^**Z}EvXMfEcrY$!Rc zBVUXkM`7w0Gs_|MEQH)PNjVv%kX9J!e+ZoW(Onu}Qkb9|QNWzencrm|YW5}(6+#Dx*Oml-wdbTb(+ z5S`QU{+(p>?V#axauVI}aMGK;-WW}elrJy>^`LTTN;E=c=*y1DjjC5X<1EfhZZ`72QY=^Po1kMSWi>e-j_ZBO=$Z zpuOsRbN};9O3(+t&Cq6TpX!nAEwU=0FusztC&(1=VT4n9KC8IHWtk&3n&>$W@+Ide zWtUq2vuEDnb>a3%#-}~67$? zX@p{mNd+&1qL03g#MIVlcle5%^j71B{oa?%@KzQOZ2>rYa#?#}LL%z*Y8_Vn4g7*e zyN5#=RbShWDr@A_X;4d$yl;#P2fUx#HFfmU=n!K`?aETY%1!rwyruYJ$)Iv+m9kim zH^{HW#@p&l5K7Y3XL5@rY=(C5_JZj8O|66@(lRt9-bl#Mspoob3MbNoA#a@_rNa(? zDi2i+pSC{<+sM*=f}?iw*ZgUDtsC}dl9M9N7b75N^6`(f!VI;g(R=vN@r0UpFXJ%> za9Cb=7nVlx59q94RRZ1SVjRkqnNXuP`#a%@?mxoIF;7_I^JH6#0w&%pd*BsQE)Rkt zDU3V+H1cJtwBD$&CuuXV1cO>$+E++7bB2uyK2e(4RfF>31A12EEc~6j<2LebdiP!G)Ra z4Q@vqiW))QLILRGgXXg5B!(hPc@Lr*C}K1MMP(EQ%)yJ3D5u1RJFl0_E}rXzFCCtB zdRw|1%--mPgY85J!5G&(+@3O>Sw}CV-P<4M)F;p4q2saNjBk&&(kVpI)BpM+ z7_0he8M+QIu%<9u$#T|x@cr!+Sa;5r-Ku!Ibbm}H%jYuBwedUbpWJ{)PH9Az$%WIO zS7Up5YDYJDRz7Kc|4qi_c!UhNapS6B7%a#uw?@UcbB76d0QpJy`j-ETd}b!X_V?0W zhHQhr^9>ajQ*RZ7o`=AHc_FDk&8zkqMf#5ODWlc0g0Xx6oY&hIw${eLsH|nSPtVVi zo0tj|HpD$98w1m1{uHgY9&sj%Yq;@Mqi^IFu?Bjp+K#8s7)PP;XAWpxvKhlDG_I$w zpChF52jNnNIcKH2pW{mvoOcKET+BvzF~i>P`B}=PzpA7YCNzz+Su>F$;@hg04sDVD z49KBMU7#2zg_zZN?KO#4{NY!@iDVa@!n}O2Wmz{HIpN^>y_1Zb(X5%LpA!Z3B@adTL;N#hh%9*rMQr$|eEx%Il zNfwzH@;EHYICXxX86`0i(e}_mDDi3n$#vI=3eRJaWjxXg7!~7uU3MctF2@te_fGMn z=MNvi21cU9gnyuh?r-T5I;J!cI$SX%$Slk+vWdEs;wy;y3#jLzhE%Kg#hBV#_8IBM z5C08^I0H$2n*`_I^edrz>r&Hddo)gS@QzGpqNnvD2!%H_fQnm765na*#Mxo|QV%^q_WKj3v9(*~uoMCyAa4Ln*`w(NeOGQF!F z*`0gYy*=Y5#2wY?=qRjM5+~NMNYD=)O-$4f{Ay>(I&}RimWJn^%N#m%!)&r>OiQ7J z!#yiMA2;eA9$CPP2w7>TOx3;)|L~Sr=;oR0yPJtwy>mMrHmM0Ko;XC^Dw0jX zqH7f5fzGtR6Ps+8S7;nN(h(voMK?K8x>eUYBIEx@X%|j zS{HxXCzSvZboug;^&UE)XF^@p5&}_3`R#(yjqZ1o@3q51se6ICfBis%iEIr=N1}B* zVh1NaW?cN6$Lt1mOSdrGKxavf^4UqD`TIbWOpvYfYhDu0_+6qZZ}S*?A* zRcXw|d=i?@WG~Q&JyO^V5!v*xiJi6QQBv$OQ_EK!(d^;dp@@D-VGK>#vlRNmmd-P^ znPT_MMuKKv?T7|O=EzEVg5a5gVB@E$igsSMe7}t75+3n0wy@QkaAnB`1--8?Vp_1W zf+1SiQmhD=O_ZeLqf1j7t5MjRbiBe+L5h_Z@&Yrrm|0=g4{p6I&d=7@=i>jYo?1!@ zYo>d)TKrlRRe}fK_O_PREDFRV{_Bbfa)_ST!6}l9?*L}$fV3AY=B>-)kpm6QsT1GR zXeh4xBYQmP!*xv6%=LQ4XTobSKlufYG=2b868zC^E2_v8oOZJ}uRDAaZ|$?0Qh-kE z8AAgu_ebP=s>HH5KxvF1+Zyl0!SuW21E3fNy!zRdaOLjy@Vxdu{9xy37)8$}$x0E& zLmOTdKK`>t5JsQg4(x08XYk#?u7{u2t8Ki6fhUjwVlL9Kgyq?_eE0_%?m}ukEoC%YYQyVeoI9HI+G1#PcPPv zn@1>n5uD$*Tbe{|ljg*TcUVXVo?4eIGZ>KO0KXske| zv@ZxHHeJzw;PQK1tZfSeo#m|PUyK|-qc{}>WspMj$Aj2yv2aK0?O(Gvn-rqnSF?-TgZTUj1-FYnaX9w@=t;OIEdWpkMjB`GiG zTgeGu5TL3qHm~@L2}c1ozZ97$MaYJ~HZ{a?NCIk7q-Pl4Ze~@mNKf?vCGznv-JOY`71}ls|2wWx-b$vB@AqhB z2>Z7o%ij1Zq$}As7MASqKr4nRmvud`Rqldm2!gNSnfOiPR>S|T<%|lbWx5aMA2A1I zhU8cO4-6z_lqAhDW7|7tDuT-YdSNVpL-ynWzOFM$Pn!@KYRAm);6}lGj#aazQ1+p@ zt_q#!FXp$h1)KsBG~Uzx>Q*sHV+|~MN1WsC?3N_Zg?_V3#bWYcu+x2_prkJ`gLh#C|{D71CKrfRP;Y31YWn)tjK;@#&8~NOS#$K>mIs@1(qy z$S;5TI{i^XRTa0f(af@p8To$HaMOU^%q;i5peT-Z#J4>^7nGiS8r|CZcQZoxkyI*F zKlzs9*IhMV8D8vg_pj8<*qh70p0^+Zm?kK1dU|B{M_tAo94#_1BoA~gC3s|Oy-gDP zn}SJ6Y0`8`&e6z2b#t!~Q)>`ax=SD$jW<70HEyj}eE}Nn7S1_XgB?tVs2i9~^t$fG zVjD%L$r}JUuOrLSRZ6w!Ufo}6lR>j&2fm@ z93OI*)r}<&e3J}Trz#ik=Fd?}^8TO11rs6Y);gd;ALYGue!Md@p6E^02gioH+*U_+ zZs0vesP~w*U@!v#9Dy!fKQgi6M!SfLqQB?4)d>>H{fhduTB7=Qr)Cwd=_eU49Z~o% zJ-)7Av6c}wwfss$W^hA&A4;Flvg0)9CK$2yK1wRyR+UHzMYAyYi3%3B6xeeJLh0H8 zl@yD3G4v-Vl$S3^E<1w=7H7X<{>kP^c<(eVAWHG7OiGG{!mxGAX_9oh9EN9!%Q^F$ zTu5pl@z4w-q$HY$na@=W$I@lQxuEY}{U_$FhQ29=R`W{pY7RL(c{b(w;ch z{7Sj0t}&BR09^OmNUhri9^kkYMS4$)KET0Wdw+Fwdt0!7=rI%7%>f7i3Lm+H4mkF~9m_T{KNntW% zotf00BwG!!{iP)*T_8%OAD*sYr|R`t}geDFAx+xH%K~48W~M_Nx0WeZzwh&nRwmq#|U1gP;C6*tbj1iUXCx?E7&Ss2fwUf8s5o-!S zOIDFZf2-B{kUHfkH;?BFbxX=-^tyEOQ~t{*ZIP%C!#0ybG-Uk>?vK~$NG?~m4uFpT zL*vlXl5RMjQq?U9oUQA3F17*sx;K75%nTXWp_mVis0SP)gaIYW*~$IyU>>Vrz&Eo+ z(|^6+^(V)y@@%2PrbgI^5PgcpQ^{g-7GVa7oRX3$4)P0cUUL%~+zcvM zA3rm*fbco;`t+=ZG6))xc}FpAeeZHj>x{|w#Z1UMqEZ92z?ULQ*YyVP#ROgp!n`Qm zFmpySF_}~qi=WL5B|)%tsrV=u15f>LpsumgM=?F$vaMn(vnsxD=dfprLHtMalT!C&6~ ze7)NFE{axKSbn>AJdH=h2&gAyvhbxP-1{a6zb~kH_SPQUVxHcVjTwN&{*SDCvs#E} zky1M?rt_Uqqkrawx==twv&cZp{L6EDs2EWh^5f)M@u>>)*RCfN=4QHlSJdpHkCRRl zcpcEcrgkF%S(`yo)Y6pMj&uCKO;1kTx_tdhO>0SyY3)eXJ+}w1*3+%N6Q)D3#f%!| zaki36MCe!MPTf=kCdP{L=->_yz zMWLyxMp(##_`taxih5yczC`KW+*P2C?J!?!ApgN%SzVpV^Cr#s;i&Z{ktlsGuh8hX zEfDv&6}M!0W5Ey*P*#?1w>utz1rW~L_ECX~z{OD1dg}&cxE00g<~uRw zH+Xw;M+12=M{^dgr}6XP;kAx)9f#mF8dqro?#7CxtRU65)eW7cuKhS<0(Qx>-~1oT zcwFUAPJ15KuHyot_F~j`lTF0Y-wTu8VQhX(6sDRoYBJ9Hh{9k!TMtCUzLwImG?K6M zP1Y`aTYnjA-SwLfnHv|5XRAMS_zM>NrI|A?xR6t4(eNdAZOBfgN`p73QIy(qmPnj= zit`DHP|@C_O;jRWmdX598y{{1M*k0^di^8pr$Vtfk2T2)`qn~&Y}=U0vFxNTLx2q| zJq)X{adqj}zhBdev>=Ib6~zW!m4su6x04;43%DbY7G??_eoU0p_k~KjFjk)2`Bd{P zS3CwGfMY9vGgUgg-?hq3&Efc$T=8=^Dz;N+;7Pqzo#Al(CskIhbRFJny2zcNZi8iF zu%-+blFj77i#4P+9Z+eW`5_3XLR|nyKb@9!)58n+3YxB@#2X(Hw!E^-prjfoUkr{X(d9! z&m%<(TM!&Ao2VZZ6d6X{3pBo~Wr(He|2$iXki5vSMSn(JZfR(0B?Bs1=Ia>qIT~;N zA}3#+t@vY$?L%|ndK#7tJEg>vTYLKj&ZG!WjXg96yPcCds3Hm`3iwpHBJ%}g!p2>M z`@RCT9#on#yy?8IY31MCj{Za=xe{JabH;e?SSLM#8#ErZ%MEZdgGszjHGRAbl~IOx zuwo0F+NMgBh{^xf_p^Z}>rza+_mqz1LVQZ^tjdS)Vg14Wk1AqI2c(ywWVsHRwCcyF zh?o#3Rd>mH6N`|E!{I^~g zwv?{~@pu8T4KyNQ5mZ}m{)#L}+(h<$y0k)2WZ=$k@H!;q_jyj5{#Lcn>H$5I1ej)g zxX$#uaO7@;b1FIQK^UK<3|Ozj%NWyysh`N0OP+Uzj_6^(r|WjSKS*b5KkE&xsGfjX zX)TbT$dk(b6As!|JedBhhRicSB2qZQ_ieLJ$MNe`2d+rW`5l6ACR@coz`#2#WDWc{ z$i6%M{e>{#bAs$>*v`(-PE?m69n$1lCT-8XT1O%AY_FKC`D-kxi)Rkk0jkhDyQN=} zY4=zd^c@6=M>wF*Ug8d6*6%qesm_8lP*y8**#A-dd%sL}WaId1BW$y{L4p8dMiLBt zvMp%jyX+cbDVvI`gg?{k=ByqF(~fj1=&ZAS{qO*Gz_+3bhD=KtWA9b zuG+f24^K|OWKy5zoClc-Q6xiBS&X&zGKAf8cf!n(C3dKaVQXI|Iuf`wq#qoI_!bYp zhtGc|%0U1emY+U5%FH$5b2kc(R%;&3efR#t1Wn6(ZD#;A<9L0~j~f>m>;&S*1;tgG zs;o&rS9=m}`C&WaY0a)BK?f~vIxo`M zOT1xN7|IiT2U(gZkgG_s1v-58DUI3cUwU!^uY<}b6TfYxU<^F`<>7_y$KaFtzIWEL z67=tiUW(Wu?3NyWbRAlpUP|LBwzTSSoWKKUyAj}r_O?%9eEkZS78*ItjF3s#AIyb` z{d!HdIfb}CJ8PGQp>YEu`)7#)gn(aM8fGSJEkFpNDl}FIjXCnaNRg*SdMjwcABRW& z0sj6@NR^(7I8kzM&dP(r&u5cS@ZT_0(im}uQy~ay;`LOh=i~Dm08$1f8TVmifQKiS z-$xYkxa^=RtZzR6m}qBh`Rl>ukkSDi_uAbc^O`496mJ@1>hh{W~y3a4U#FG;yN}1pp_a`7ir)v4;gpdR0wu$J(kl zXaKW-Cqe#Ypb8(;p*=GatG}fbsN-bmApj9?ko{unZJkn0OT>^) zS*LwwquIO2`h8}+@Mjd&qyAD|C$)yg1AXGunF8OELRmOE+^YN7l;N-ljq(TGB1M_7 zCk0vRc}}C#UK4M)`4y=}?e9Wc{+rgCL_{j-cDH_@?r89P?O^6K5+D|#JsMTcvOOi( z{6=GFLX^O+*JMkNve_4_8PnrMi8#vhnVR~3kK~BqyAqTMHiW3wBj!US8LzrZ+ou@u zesU5c5&@KH>VjzaOZW3>b@^1L$`|;q8p zXfxE=M;F$jRj^_k8|^aRGwJj_Pv$Q^{bZ>s^og;>JPMRa4<-Z?S;rC!;^nn&=ZYaZ zeEoqI!(|2qITgIiuW+%{tv7MYR~FZU0(uLPCzOGi*4BJDNv0Aj_iP|iaWY-Nzpnfc zxgnNdRe`8(TDc@#4B>6{j>vqIw}N|=Km%$+Z<^uhE^m9fb=jHQijddOI5Ff?^~1-3 zwcItq>0%|x(AVc}#Ws0FKuD~DUYm|A-PJGnE8bq#=2&Qfdj%74>d-5s7frL zPsWjCZM~}o897jFJpk&|!%L4K6y^PGTCT>z#N%}~(7mHAU1td02&okBv?;N0r!5Ul zT$NP@Zq`-64!Pf)e+w9ME+7MVd#^@?GC>7{x^aqS?K6km3agE7qDIrMsxoZPdppnJ zbBh?v9+3?;u51?SME#&jZuZH3Y0qszu_*#Z(B7g_AnDkgh}v_JA?Ok&D%jW8*R2r0 zP#dhLC|*unoM*EI^8_%kX)V5gn4%@}S6!i#zrk=?A`VWBcK7l+skMeR{_|Rm`~?)B zimono|HrxIu^|P$6Km@AoF^^xNdPPVJ4`Ia1dE_bxp^r?&;f=`i7+i`7x5JA@qUHq zh>X7If|a-Ywm>ky!iVT2>DCNcRlYWh0T8KMHwQ|d%-D!gySHQMfuQ1 zv)LSWWcr6O452_20Eml2=nhJtXz3YHPGjwIe2~1FIi~QNt(@|`c%@nwBG;i6KeAtG zBsmfsMt(CDuhn}!sMV~0ff z1G{kL|FHn$&5;qj_xK_R5agnR_qsxi+pOy8bsSpo=@GvhxZf143N@H692LyGpEh~Z zf)J+<>V`2)Gn@I`bO!#1{Tl2eYP({8GrRwBZ}Yu|#V79Tb-qtqQfF4*K`Z>Eg+$6G zG?ya4sSvmB5yomtqL>*ZS!|71M@sp-MInWrsUX5ro6gQJqUL@08oPuIIOGJ`F25m( zDiB)1A^g!z$~x1v@GC1*Uu=jAmHyp@Spf^2f{G>o9{|rlFu$kWZDj4mb>hT67MO>( zv$u>bIZ-O6eN%#93c#ZkE9t5J|9azBX|uDnID%f(2yTRg%ZxJPnuFM>`~kMM}BiCrGT zJo-5B*GpEb?absACh}COSXy%B%4(b~Kr#yt$`C+?4(N<{d2UM@vA6g_^Vo=Qdty`4 z1}+gd{VT!ry;UAtM$dn*|;#$n@{s0p~-CL`QJqVv5*K1FoKc(}0DI z(|{}&W*6f$pfv!jynrlK06-7`AcuRFCjx+V7uSP{;he@k^m6u+aR7h{i2{Hv^2N?p z@C6tEa1(oXdYQ5D0)QUAB9A}=nXqWM%v&`d0N^Mg@DG)F^>vv<0KmIU|AjTZo(ljx zJPR;IzQtJprUI{7K25v;1aTGUFqxXR;SZ?nGiUyCJ&i`60X^{CeC5g*$9oUrFc6c4 z=FS)wJ*``jwZ(!fkS!aSz^jUz;##w;eIkU>z71N`gpYdq{ zssW%a_a{xeAkpX$05Px9G%gJwdW`^9zirtKS})NE1=EG2z_=VUft=W1=G*@i{VMY5-}nMas5$7o|V} zra8mY9|)<5szKKE08A60$(EY32lz<5U^e2P+2m8z5nZ4x4tv^B- zL32U&YJ(adOYatg)k>m?^1^5U^qh0k@q4;#KPhp&=meeQVXSH zfO^_fs0#cM(o@&3-Gq&|RMMwQE#G_%?>SU^I{KW!q&wi<-~Pv5aYS6aX3aODs_vK5 zr!UH7FfBuX84;!`iv*eKRm4v9TiBaOObUZ)oz@wGAxAUG;+hFejU0$LoPbVn0xmtf zQ1;#42c|UaayJJzJlk0Ec@~gR_z&W90v@}6ROX$Ur_a*Q;12=QEO$dGnYy%uvDsxT z7x#k;+SQ%9a7|~=?4#)Dx1IzOv+(sk>Nv)6kt>G@51(9 zxFUiABqcy29Gi~Eka<8RTdpij354Wkte^2-V+5u&qDr0;aro=d25#KErO86s`3%Ms zgrmW(IBIK@oeh&900fx;;@KFu@uq}$4!>vU2=`(0Gyh+Uq~Je!5Gn{`<-r@?!(0F- z0B3lhzfnL18-PC#3-DJEHEA48Yt{`&!Q`I@5)AKrVlI7_bc1GQxTG*9#O*Z*77wDC z`2b{C78v0%WQO~g2aq1-8e6l6Lc4MT{ghttZU+O%c`q+BjhI=1{y2p>e9RnZAp6zt zGYdWrnlVhoO6W2*fN~$@mYv%%cPzi$!yi71ZMXiLYf`J~J>-%gMvtT6=2}N72*Ag~ zFrbF=umAvoh;V3}$PX|Kow&k)mJnh}h5;>04$1o<>>hx`=zSTV*5ZV3+Bsq$na)kF z0iF#};D|ksKutAQPuX|mPpRLfj-*NDB)9K{O4IinOV_5pnyPJ_#EfOk&m#(85}F&8 zl876|bpBWm^3m)k-eae!qf9BypC_ldx#L72>>R$w8D83Ln|8>Ev9r|~R|qH2h7anj zcC^V5`aNuDvLOM4-zKB;a1eh^uQi#}toFlkKFmrqN{MrGQhQ-08{fxg%pBFHzkBmf6x2~T+`r0!k z*uhoStXwZ+CeBrmD^{$q^y~4tY68|7qj8NTGSUvAUHBu$rk4%d+|bVveD8peFX)xV zD?&zgx+$;b4Tb-P)tw$~3&%tt+SDdwleU`7lh{NcYjvCJlE`PtsQk8hk!4dd5eSik z`0@v6E-w9Pfee~42oV7K9-L(Ukfrik{*o{U5j}__SK^sz0M?r_<_0x$-gS^>h(r;~ z((PBJ0@NHh?+zb1B@?GDMs?S4DO$7u^1!o+D^&3lIIOa1%MMkML!k+bAJbb(;LN|N z3P&?CTZl(5E4Cky-Cztu(#MpX3RW?miA2_+DHzOWtieLVVLs_($dIwJe8mRMZ?H}o zj*odvhi5iOxv3NSS{$Pfvm^C{A6~$`fXC^W5L-Um-<#tzP9++G)SAXIN5kI{2zDXt z`8U$8&%;M^^7J{Jw+Mu@FhC|CpWyYf#WZxAs7uW#RCo%qlly^2=*^Os11DsZczHYk zb7`Iqp*~Tsd=YP=gbxS~kd7mp%l;#K5Y859_i+pPvPtg*_uVrC0Fqv9VO2vO+FZsa z0i(l-!R)0-WG?YyD{+EB6znbDuektF(+?s!WZ=-Ls1hfc!-D>>%7&$ zp`z9;8>l@=8;rY8!3B&QiB7?${;Kuw(B(JM(tI>l=4S`uaO4W8qtV#Fc92YbM(@Wz z*4bTbLK+?#3_pdZj2t;t*8jW%&P}AwYV*;AH<_V!N2$6zZd4DgO%MSubaJ`q2kJL) zlIB!U8Zufy+BLz6zt5U}sB0HnJUce}82gP{3r{RQRN4&?fYTR()&!bQKVvl?k94h<0Tl(W$N)_8uiLnLQFt zimN}3lp9+YC{U!S&{#6n>M1E4-BIZUs<}lvFh_j#x-Ie-l0yP+UeJ&e+kd+tT;mKd z_@u>WQms}k*vt2#zhN+~v)n(vMJ_JuAt5(Wr3T+{%TY+OH5?-@845w8Fg(N2QWcxe z-pNe@&+m~7cqaJ537`wi$aL8x+s9+YHG3%qD}sn_9^7x|=px~MC}Og*uiQVh2{yb) zj`m-RTdwjbk^#HhGUxbqlCf!x$b%cA6-uN3=iT{)Y(qPL5;Qy>Z)UWGfKcVl@;G5x zQB4Ihf8sSC)59N2Z$N@MSNtU@3TmkMhG4bUyb_|-GXemkTI|i8UrXwe4V6(;>SAM) zF(X6#<;waYa((M};^gg)f{|VlfIRZF6>CbC_lHPIkJN@{!299BcXD!;yMN4+b3Y7| z+eiR%%~nD@{f|l5oj`Gat&(K?V5m6yWCy5NPUC^`{7-=Sm-mrS9HVv5h5C8Hei95{ zf=iYxk{t}~o~s;y1iF*OJg|3imw=Po^qIg5XT&{cZixgC1z);|cY8_pCX>Z8{~KUz zIK>D~&TbNV^PF5-(Od2u_+8wxWCn2AOU`EF#XS!IAUJUVV9hUPL60Zoq5s?4&CSYc zP&|KOK|ietXjE)|xVistC;1-@Jf@9r$c%*P^^5=j!V}*9gT4jDr`QLQskSeTSO`Qo z=z{Obn8vfJ>=feJ>r}utz@k?LY&g&!0%Fty{nIE zI!UoJ6GHI+Xg@u-*K)p(`b!McF+ShHa~tdn^5MAlNMiQRGXem3dLi}y?voEp7$WH_ zek7Sc94e7uwu|3)k-PghgX!HR^Siyor*va5OPJi=wNx&zL&n;@VDTzaMzVc04w5$; zn0&C@*fK{|?zC^Vko48MLZfh2b>Hv6YPqy}poE~!eIWQ~U zl1%Ro5=XC$xZhsY`->}jO2Fyk;+!tMWc?5x)KZ9}?p=nT`$D2$msABxN)~{LQ~Eq= z>xW!FDHp!$0j=OLOq6z#p?Ws}%mKOZEh+$=J|Zp|GvoeY;*tMN4AC$$4d%C9HVV9W z6nI7e0NIISiq|$ykn6upR412r@!C+SgTb_$A>F-I0;hWIeW>k-2ZNbYKyu&Rw+h<9 zU^T)PCxT@ZGDNxA*! z67hPqreywLm`dwNJynJK0ZKtv4$I}0zH;yQZb)t)@hbMA-23|n3B7$&yb4#6EcHgK z_7Mq3ATK@>cIOiO0=?l=*eU5MHbK?KNTmRy1OWTN^ z6$PFV09e#G9&Xq+3le#_`okFUdjP)5+jcqtp)Qhh?nXN@$e`-DJGNQQ&TkCG-2OBuky4@*v31@WMyOX5qMV#G#n8yXExU<`NEb-~s%HsR|dBd>z-~W1;Xp zAd$oLiqdh1C_uR1RXMk)4Z!07)PH!0F(%g>IV6AQjQ}o04geU8Qm8WyQr#g{M!5wa z#K|dL@ONMk1UzHRuXNuG4WPh7hu_0s$Fo{b+jndfcp?fsBLFbQq?umep@@Lnnmwog z0c{|qM_T0~)5)Xm3ybHQnm|Or&FHKu=2xUd)>8^-6j2C|8D4m6X9r75qbzvfZ6kDt zPuMxR7?K}S++_ZT_K|Tvz4Yp6v@k8do6^k(KSKtV1u(3`gmef-hCs?&roj(6cxC`T zP*X@u#@`dIlkH|31^yEXJTm~WW*#z^^%Vs%ZNy_AR!gz|JI#kj@25xD2qngqIY{T9 zdXE%LXeKajANT!?-O1D0c|&xX{tuRLoC@Wh{+N2K%~ zpI+8(^}yjG)*e6@8hIP(Q%A_?&ex?#o)AktfP_zKKI`#6i|-{10APrbed*gFI_S(s3vspv8_>6dR@aTI22VZRp6It{)w5(a|3|*yz()#`x0|+ zT*pQEbE9*xm&`*+@cD~Yss_-T0DvBUtd;k$?qB?6wyehybBrW*Qj(1lvq;wOezZ8q z!=tkC6%C0wuK4B=-@WEotqV?A|17R&&9mv&_r^xA#71fodtYpQ0alH_ETzyFAPjv0 z=o5(97a+0g@v_|a+yKDb0ESbJWu6Qbj0HK(!j?Q2Ze0k1zqj7#=Dqy6*{a)oul2o# z319-iDsAl1tJ~)a0CWbj@{HE4w-nBdxjAEQI2OiaQA@Kc4c~8F&ivm3f|&2&_gE>& zD4mURXZUW+Zpv|en>7TD)M#s3+oRYfPGs>6KD4B8oUMqNk{$OtSv?!iI`NY%Sw(tr zY+O^)%et&r%oK2QPjDRxdFJOLtKSZlF}LIWnt{Z&f~cNfGMp5QTCcmI~>4J zo}O;Hxi6rEGLMCmT$WpC1j^?M7RW8Rb7a#T&fB$_L7ak7lXwC@m+=h5Z6O{Hj(i zqYgVt>nqo8Yw!8fr_MoY8R5JL9P_RFK@FYpTD+6pe;?hVk3Xmp{X|6phjRaLMQ-e`pj=+51MhZ87b@1v*8Hq)Uj?I zi<5qc?|)SHZGFbNHh;p)5c?fwhv1FB{UzTo{}Cn8?`t`5GBPE(Gx{P>8z@$^koGxD zn>rQfKyUV=4lPPxUvxMAPo*^9c-JyCs^QkWfi*w>Hs zyM==D)6$k80W@*jIG=Bfu?mtUO`{Nk|hesLO4=A zFn>4vAxH%V1!WL9*h=0KC>=FL0$Zi0EU zPwGn3#_wq}7Ds^nnR8d9JH~n$8bh(y3ZOLl0DugO!W!qUxfbj#FnPuj*|1@&_JA1F z|4XS+v$D1dS5wDw*#IEno%dV-z|;W7jGHSf(C?jUcOY7G`@mCQ0bO|uzLHC&+c|88 zU3(8oX{hE+8oq-X01h&H&N7*gR#B|A&+a%4(GDyxq}pCI_WX9)I&DKmX-?I0_Ouw? zf$0Q<2H*n5rKHG_Ba61uBJ;3;$2UvY$W4?JBXhOHTrer zF60Ak*cpc!3QMD}Sh+#=qhBEzwqgC+(z-=`)k=&+Cu0Lp1L)Cjto*g>fC3i*A|o1g zmWK(HFINto--%Oa_2Sa}GZc0K0BrevuY8SG>{+v9P|(PU{taoN{s+OF*!KHwS-IwC1)cPu z;qXCUNe-+50oWbu+VRUl+Jn*E4Q<5RG?H2<^G<*uP;qUq!vt#8uAkC3U*25OyIX6l zVFrK!TXsFXYyj|r0sy763mAOVxH+g6LFe%u79^|f}aErQNM6DIUSi89!u*m$fjf8^LHXb1Tr zx!9nSEuxGfC-yEL@;jQ63>h(1d)n7|znb*y-SLrTmkBS$<9G18q}7E>*OlS3WY3IN zU?@UjDKnPR)kAJwxgs6A4U_Be53srFSZFTU!AvxJC^1#i0yw+(9iyeT39PBmCT!q< zj#A{cSGA~#+TW1A*Dl@w-6GJ#&r6@98RLd~+kn}Q9zCP>xHnY&9$i~WX*4B`LjMC^ zDFAwRz?9SivSd!L&)q{aj~i$YUZhYy)ud=DumLLp(GJ~mCry|ttJiK;kZKHYZ`rDm z_`|0{aNdG$%cIB6!aD*0q;E>^o*g6rt=9|(s2v)>?85J7Dv&jAT3=d!-cSPXV^2Uk zuyz{S03hLA_gpjpYXD$}ShfYP`sVA>69C{31~R?elww9i04<#$xptttZI>P+braXF zRaM%wgtUXHK*t>aeGhHJhQX}ZyYG-SUN9w#+ zReJaR5*r%bZWGx`E3T!Y1CQg=cIa#i1{0r}#%(YQ8H?jyzVa9Ob;}>xAeG&OaTOuGYPZA=Y-KdWD-hP3~( zh4`VoI(;VQv!p5KN;{vIIsq*$+;O7>fzEVZ2B9aQJ%HdSoS8FceFGCFP#VB*^5s{p zBmi?_r(^mhnziaB*8pmCbW+0S&Xrl$fqSDvmtk`9*n@U5qD8eFGY804+FQTx69BMd=YFW%si8Uf z!ta8#xEK|f3CiREuA`iDwWF@R}I6uldloRHO^b`SxRH7 zdoQ#vpSOl+%u*UwKig}NV9m#%Ow`lD4i`vP)ObH82%VEakUf==x| zkp_)EKm%4kRsY*|8U(+~U3v43veLg_N4_jpe@jvUAkHu@BdO2?V`~g*vYO@;qS;7n ziG>M;hvWNwLeD15>apMP{562J8^zt#O_rjSH+=#0=EoNM<%U}N{ZBF*Ex73@96O@B zlt(HrC5w99*)}{i+G&lODNC2Gg+Bq2g^2?mHvtx{QfE{9Hch1VJC)&`HY66euPZ#$ zgN9C*U$_3L$wIB*2dG!CCbR@N+E5pe&d2@mHBi-6=b+W$BEEz6^*!AC7Mgkv?%z@E za?=@?lm#+Ffa~B;n~M}?fA}M)_8O`%sxW;C!0US7Z3|diU%lqYmto&{I3Uiav#3?(>PXGWQ07*na zRJw=`%A>~3mSgDI7yz?{8WPPmrH2I|7zrSFeemvE(!FOpHJPYo@eex+f7ZIUMi8ok zo}B^4-tfOnnzBfKK$M4o^BFwO zJLTByI-I0uEhk-LO9-=e2*(`r^9KNE0N$xm$&v-5)iyO%Nb7-e0x2OGmaq6(rp{cf zOgna@0RVwe`>7(+gYA(ztxOm|h-eI=2JjS4 zKz@@BuhVBPNsBLfYkxO}8jHSKP%2g|EtwH}r#ep?nhwaHH*V98#j_?4fCi95LzNF1 z(l7zG|G8IkWX&w!d_6`PIH5)*CIGZ;@2gROe0g&swAveO&z&`K>ah!(kO@Vuh^+L4 zC;vB?Y;@#h%$OD?UO6d{Kacu*=%YD#`Xc--^ALUUSD%Ri0CyDJ$jk(~!6RlM?0Qg5 zK1Mjog61DLY$s>WUzYrE{tbomFdagl?Cc!dl@tIlX{K$u(b4xIjiMx!Ri(9KaD45- zqvY{t(UBa_KF~Ur59?mWMn4=&5=XWrH>=a)Z{g^Z!H&Ukeb;!8k>tgFVy$&D+7(|f z#peqE6XwXORU0Asy=2k6k-9nPT#I>WV^I8V+m@Zuqt94XJ$v2cujx?FaZ#LifICL>orRLghx9y4i9y1-%Ki1EFl2_A=0JiaHz5; zC1d(@GRU`s6fT%Y^8m~QmV5UCrD@ALEH& zPr`zYK89o#Y9nJOeGSk0F8%KrlLtyZBnQO?0Mr0-z>&Ck{;24A$0hywb88Ji!+`m7 z%Y-p~0F-2m$2YR!+i{WuNDvx6Y9`e6oAAzOmPv5drb4n(bhan*1~zQm32DAS$6x1t zY5;8&05mJ}f9zceoKEEzKA3&RFk@z{GnOosB?<|tkVHz9Eu>Adg-Sy9ecyMoZ^@pr zWC;<4BxT7qV~jDz>}E6m&vWi~XFg*#%iq>_`}xJpUEcfN_iWEO?|E<^as>YT%K_=# zXS9Y5-Mf7#`H;C7JbWtHf}^B%&8pIWV7GLwKgWMN3V_$;KtoyosIw9tkNN{-AE{s* z(K)(+tFJg`2bG;Q^>?ZXB!zfj?0E@`3$tV-h!5FG0hdCO)80+f&*>eSQcZ}Kb5Un> zP19LQfI{_i^Oalq@Nxtm%zFL2RLrwtwm;xL)bgF`Qbm6B>9FT4n zpwiRjWZ00;kV_|cltTr~1up!@K)hMJQUoC2*RVQIlqw>J|2nA)n$>@0%aoF7llvQ) z2!tiN(FpnZHQ#SXq0k~-&@b0ALV#!sK9P}-rT07Dn@X+Ez=^USblKkCp7KSP_oZUR zG79j~^0U~<9~lBFEfxuJ?q*D)0!YUL*aHs$0!eSntk}z{0$?GKdH_%Wt}YJA!fbuL z&IR1`)c|&{Hme`++yr}c=^pIi0rYZw4@s)-EO|3lu-jn6pXU_)8 zSAEB!SnGm%KCuXEPM$iWSWT}lKapoK7n=IB&iz>p=ynu90@$eCA?U5Q*O$d-c8WK4 z5l6u$6?e}iv!7ci?#>13=1-SpW|dickTh=K*lBv*_mZ=>Qop zY>J#m^&Ty6|F1hq)f&%XmI1_pdvNi>?_|czrN~zsC8;wer=12Q((K|4#C&{T@hw_V zVu3_Ex#yPcn|8^FaWi0HBBk_`C1f1Zgs3f(z>A^MZ_q^a6F4oUN*0xGW(}vWs|(x_ zZg>PT7oEBdlJkKVA@o<(I^C%Ppf#XC4I4d6cJ1D;Xnmia9grq{L1H6T-4=5&{nM^9*B661f?IW%l=qXIBuRxD>&u0@O1$h6tZG^AsgMWtA@sISbKHdw<1 z6Ld^Vpl(M2Bwh!Y>|8)P>~0||&ux@EsC|eA$XFCscxuQ+N*^P98G4;&^%9`z47h(9K@p%kbWIGx4+E(Zn23w`$P$?u-l4!`1e0<0|<^1TPQUJ0ipEL3jub)11MU!kSg0-^#D?b0BI=z>I4VO zK|o-L^y)W8JtkIa(#3xocu5`rvwt2v4s?H`oH-kym4OjaQ7Al02>}?!@G!%^Uw`=> z_ZpX+QcJ55T3MwAYettm9=NrsSqcU1`l-)<0?&*8a}n);)kc}0hkKl!`&a?TG%u)X~n{; zt1?#JD*QH-2WmFb^8g5heI(h zoUiCPV^SXKN z+k^$|A&ZCsWS{^{FMyViIqsQrzLo7i?^B`U!gs;qYL9BNlh`1%VChTXj>P=HwRMi;ag>hHUwkfkR8D}VnWssHMWGN9k5T4Z$lbpRAF?pe>AfV|1aNf1H0}5{O!jz{LFH!mc+IKe6)Zp zMu|d29%%-h0UG7WpATuk8L|j<06uW*Y3b-`u(m)K6ogiH_~H3f0{r)R)gE-IuB8^ zr<+~q4s)@au43xv8C`<)&K40hnq{Qk&u@-b<8o>n{NJ>8X1zVf#YN5gX}Syl4+nn0 z>Nm4uF8xoRvW$${9wQCL?YZW&i3gbBgz;>{YMEnAJ&)F7HY)Rsh8(=cx_L=P0+jM> z3|D-4nj2G#=jOq_~uCtSiZ25JgeAM>?$?xSPL6>7?O7E#s zw^{>uj0{E7u0Oah3cz}zQ?#xTKk|?Mo{Pgu>lv8<2L#vO##LSm4FQZuWgY6vo(k=9|PRV|Z-A`ENgWRQZUlY7E%60tQn zC$NPH0ErP*O>xCnWL9QOeX><+I9HWyMbL?1*F{p)tk-VuAAJ+IkWkss5+tT*Ump&EcxnY~v=zyE(-%lMx0|IpcA%ew8WbiGt6 zTS-QAog!Yjz2QlwPg;A=6oB#aMy+|86TuBNj;`2Q2g{D*+EvhX#{ugmyr-ZOuu6YGi%Owvi0Y^*gRy+GrwUmZ22BJq&xN_%)LeT3zR@yEVE0h=QH$Z9`yO+UXSpoFnPc4+w%9RlkigQWGrI; zx;5T}=M<&@V0vrso+$to7+Q1)kRd!4rK__K;dcOffBa_&JGfqdpSyfraeurPnoAhl zUnx68{m%hp8v|7Mchsg|w{y|P8yZIi80}F zY3B?{j0mNv6(^s<;{E(b@CuBsIO<~aW_%v60WJA8So6!f=SW;gfNp2CclQ>bm)hfc zz6%?MSlnB>hI|)Pk%j*Lt;7c$!KR|WB&~{~`Fhqj4FN8OuKNjFXlIPiaQmD~jC@nX=k%@d~Lm@{9 zl*ReA!zCdyR&u~ll^=*Eq{VB(jD;EZzJ((eDKH*c@f>d9wh#2FjQ!7`);|=*RTNA9 z+ZX#6h=&mSF?T9H&@XWx21n!LguWD*Fr!HAYSc|wR$9ZlX9^%Y;^t!$>Pf+RJtb$U zm*iSJiyB}^9o=B{SBwA3uO#kLgm_hbRqS&Ygb>XV2Y?yA4f~5{n@V0pJn0`kszU+E(GUi<_C3qgkaLzmruWlsq^uvzTf z9Hn5x0g@2vFM%5;sZe`WYb1pl^an_USREEWyMwbNAp|+UuD^u*vO==K`!Cd>x85&s z!!QVUlH`BoT`AmR0+d<+j6Spi-YP~b?-p^m`J$~>&^_WvBWId7~{F@sFH{h477_s|0X z3Jsw;)T0h?k37C&-1(6Jg!2OP-3f>H}5zB!uH$t9s#H z-y^$VF9lxx3eSH}-Tja~^Thw#fe0T8NwN2)i&Mceavd8mE^Zzp7q(1N_uaetJCeU% zFLc>K#UY94?%>GEN4$gEKX8}weT}S*WoVWxjj0g-OWx4E_&E2-1AwJRp~A5V^(E@q z5phBZuV1sV0N_I9JOnKP2)-u;@XevH@Nlb%ghyQ#|L=Opl>=K0CGbWc6*m9npUKt0 zbK+LCwD>j~Creuc3(gb` zV*JbdmqQ5*!L#$@Jw{5zkxde`nTiXflQlnv2l9m_q%>BsZPDI~rEGh~?aaVEQUFZ1 zp}6KsfSg<26|Va48cTCiR3dt7xWV*u+Bw0X2#*f1So25yP^4?8zIDc)|GxD~4c_ngf< zm{~9iLb9RA;>vH!<=l6@B<>!K@KtjX*+VaN5^sTG1Iwi`{e0g#>CbC>X=LupPD;csOR@ zo_YW()C71ewE*T6QIM^RYLb6$5ok@%Sshdq*2*F+cRQux&nVbQtt@W(JerzJ+2Y2r zn%+g~bJKqh`z#@^569B5jq<-R1NT$`{1+zF_Kvn0c$j9urT`wMuVowSEzUqnC16@r z*pEsj;4Mzdjo$RVsRX=}A>N&9O(fpL0Mx}dF@wAF2-{sAuo*D-0ysM%w8N&L8xH&^ z{wmt8p-kAiAHW0l3jg=v{3kpBbF&8pUdbaZTXt>v`TzU+y3Y?_=j7}1*S}73F329c z0igs?jhzIccXLUSr%GH!_n##6i+H&A0^G?Y|0fgxC7x{u$R*EhrK~hFxaSQP8{6?{ z&Vbnu;PrNe!B&jI6HDz0v0m)fmbK%~OZAG;mWCi{a|=A0Gn4XG{|N=4EyJ)i_joHk_v_L?u(ElAz zpL1s|m$@VdMPGq0zi21VKUd)hse&FRiY?Kg|e`r^=yr8(o3p@rO#n1_Ivc>b!&NtxtwRCJ-rG zAKBnCJE*Tw4T%4^UDRy$V&2p2$ZL22xzQFJya4F^PY>X$FFuxPPylADZC<1IAWozW zKvUX6nfAeKRLS0dN(^dY(Iu-8dm1XpXko{_gDFYAG$nJv4Mn7wLQg^^1~vK$uu(`N z+s@)hJ?6BYf5TiWrMfZKJU9==e)}7{BbmGNRKN`>*K^IeHvm-tX}astU=}ue2AYh) z2AQdGU;d2aHt%u6Je!4IR=7-B^O-uMV=AB2O5g?sunj#H3tpGCPywa0hLfBYXE@M4cG?XHQLgAG%c&j*I<`oQ<%tT#5QUi{}nXepkm|P=K@D#0_dbD%*H1& zlpq_Fs_;Sy@fv4zTITm46*^nBxnOK;(#q~kx^JKVVfq}=&4+DwNZ?8qA9gur_hd3a zQU@w&x~;&=oYUq!1P>S_mz= zeWXn3l2QnL3ZuaXK*e^aO2AZ(4Rd!4z5b8LiIeA4L3(?6NX4g1%QH`xK}#uD zqq8xdVvhzZTes~6_duw&PJgLJC2${H!2Nzx=3-`5e7rrhP5Cout4<|K<(&|JP5#B0 z{m)~*aNebm5GXHf`$i~Myl7z%eR|@%mc#dP))w!4S9=KmzWsmTT?3&+vxAqhm^|@# zG39NvJ~$>Ci7jA)VymymF#k`LEva*EtpsceAaj*;Ulf30ah$c?^AhxX&+FwSV@CFn zF<`kp`R^ISt;ae1pyY?|(6*JdY+hd%D!JBv+`L<+Ok0G$^5`l=Mif{UvhX}tdz;QP}8&YHVQ zzFo0i`3=k#+Qx24!;>QGPMg+^<>i;yLy)XJDJdTfQmr@aBF$__vH2H%IBgI8It>qcbwR5r!Rj)@$`&l9o+hPbP461%vQ{MeCGg zm0nogI?v0ZD@eT3p@H~;`307*naRAxTVgJD_2lKzE- z9-tPk1jatF&!@^)s3atoa3}Lmaq}5QyYpyJVo#SHp#SzQm>>5qig(J3=9w-aC-KL# z|I~S)TR)&*SE>1YB@L&n57I;T>^D|^-S-D9aBgilN-jk&FHb36tcWUsfAQ}SF!QjT zdYhJSC}{@|7kC35JNK6(phl;ckQ3p~pYR?E6v&GvoqnnW{PB(ch2nnaoj0UQ=QilM z5HD+xZk;%JzQ+3`TJ=R6chZ=V$%$>gLlJg`BQ&V_(sP)vPL`Hm-1M1U+JcJgG~TT+ z7@7y+oeJgm(i#pg<|HELEzELn?eps5D*>!<4|7T@b#Ca>13Vbdt7hWu4g8; z?WAdJH@0mXZQ9tJ*tTukZfvwk8arv&*xB+H=l}g>1OFAgx{F2T~B4 zQFpV=b!PMFoLV6|slH)FYuY=$P4hQ2ephCrawAp!qAUaWXzw<=7s=1yh_uK` zgN)IG)4D%&T^Q!JdgAYm(&DFAbOc*n$mbi0%E%T_p?y$+JX>s|4l+>BxSqSG!V3 z8dH-j`?T`A0fkMf=hOpbxg9~2__=dZ||51xN@cr@uI)LqouQks|(vd=FNjoqz(&6*YFh5iNlII?>W&J$=&*ZCL=m6bdH@$(wh&aTnx z05;e$Duwj*T&hm)i22gAckn9LE#DR?;XdzP6MPM`^zHVgv&pTK>%m?j@2#fVs7p3Q zL%RKAI{%Xbj42Y(?nlXnJB$b#ISsDFi`%8l(6W&nZ1B{ud|E8oFM>$ZjXV%efE;~@grYJuY7+sq&BC)O=e8nhLHfZxEm$hk=0`2%0qw2pdO6*~{9m)JKz zJPAyTj?u~Ln>j>Tl1xv|Y=)_wR1AUZTybU?iFgNhPdNVRXZU?Oy(*dO~d&G*?g z08T_LRNofHZ|{gh?OStqCP{}A%mlL%GkEq2B*XE@v6&O-dmPud{bOY>=S41JHw34T z^01xhpMc?lEU`^iA7_ekQLwK zE4B0CIMgJ!;kYQlsS?2!3xSDT4y?uF+*ysbnt|m=m(I4}OLUT9-z)57p8A)-$Vz7P z8(Kzz&Kc?VFLd&${w&^pg5^2^?9l4ZOna6JB%~O0uHQ7%fZ_5TSN3>NtXnykxCkPS z2Y;F1Vf@s#V*~9E7x>hXk-~lB<-8A*1Jp1BO}7D|*TtY?AWXgOEO0J8$8?NEr~NxOpBBUqomwm%5$Hq=neqt24>lZ28wtLzEo}oWT%)+!K%4kj44PzpVCg1;bcYv$(i$h*AS+FtqD*Bf)LD@T8TQj%yHZpa9d%g*FSldym9{4V7cf%NZOsEW$g4Qbt`2H@NgkJ&0wwvb0}=6TAO>A;?+AU`b-{1vQtp%l)Gk zd2Ff%j}93be(9>=n!%kB&nh{~2 z^%da5ANM?URsfK_9J~ZfA8W~)Pf>iRL3EpD3nWG&j;u)T;@o>Y;GPbQYuA&<+V0zh zCYjYz!CCi00Oov4B%sbyrT#qmmSYdaB0DInPI4)I8g-NKfvU9cDSCFBqb4K7^UE^P z$K;is{6?r%*$Vlx&I0Ue`7n|q1Cy^mPCqXgT*V!9N8QGl&S8KgF*PB4+9C-xiJwE{ z89E5HEsshBj|TY4vIw>9YM1Mohy$i+^)5L8P8rtAsRxtwZb@tg!W7`NjrFxV#P#RP zHtrqyB7X9_R+XB3mdo~CWkUJ7ZmuX+0q)J7n|PI zxVC^4AX>Ag36ScXL`}Wod8)j$xl4=;U`-~#I2_f*6aB*ovcm#`ARTbJh8GZ>Q~@)9 z0+5{g)o}{lghv2O8Gq!PXar+R^`{_H?g8v*Z&Xtt?QUJ9*8X7sLZiS-{Qd(`2WYltb z+Ap+<$;er)c0EL_qAsfStxXqqZ?WgJ&c*9R* z{!3z+kg3#jd*2mak;es^@iEnKVk|2auAdQ1g}ZHg_ib?4-VRtgMiyqhojFs_+DCO0 zFPzur@^L0!VbFm52+tDe<^zh1RifCuP11E}%26@FMq;q4M@yKYm+5pPt3Iju(o(h6 z0B16?2$9MrkaXRje)+q3E?%Kt7yDB(v=Xo=-tKbJh)l*Iy_j$CW06J`I0w}Z*=~v5 z7l#{*>T0NC)X|`6{q`FjMeiIP@vYq4KJZMj z%Z-WiF3o8E7vxE(fxCFUCbG@34wmDEKhdy8=v1?j9SJNvH=zBTC3p>%4J9uVvMI>v z=V`lIGFWy0O2*ix`h50xo4zKphe3Ito~j`N9%->X^`TK5lHaF%PyIStx^qdZ8G45r z*Y%k!d z+J96RKGLM-J%!|hWnDt&6%r+ypwltl7?Zb2gE5RwiaKgOzy{sm(E;G>@~c#t(7_qL z9-f@Mw(Krf5Go33SuKEdDm*eaNonKRRuBX%HSH%r+`mg4lKx0B4dUi{{ZZjbhabY3(rv)0gQ$cU{oaEdR@M4^F2vgf{3S3*Z#gVHhe-6W)nkV~m z)#mbM#`=wj_}6(}M8lgfHb4-pMjcfFau9_juNk%gRa9yJNQB79zLnp@?!GAHHLH;S zf_5?7mUKN^M_cKay~`$~v^6sUNWu39$>r*Tcg(FOH+|t!U@}i8;Y}DB(eea(>pUnq zieaKo+JChb0WcFW=RW<^*85RM6Qy*HNrrz-yHdQXWBeb1ha)gCsfjK+m(w?{(%>+` z*4EwE72@MkOg%Lw;mP(;*3O-#Bl1st8hsz*+gjX`3b|`$@?PHu zDF9o(iYOE$wl{Vp2-y;14T#ySO`-A%$S%e4ZZMG zlYo~5Ut-6`8aRIO)9E&rE0C^@?v`+<@6pPq`LZ}4*3Dgo!|1}o+XMqN0Ee)j@H{L| zmw%+Zi+}z)Chik%Il!n*%2nMJSWTd*zZnZMdCghu0K0(E{oU<~Jor}SIqwUxU2jqv zQa;NQJSwf)B({QuKC<=DfCL)ZP&+cAwLi0lRZ~y_07&IR$uhLRm-1Cw^1b zPKglg1^SuN+}f#;JxBu6Q^1TkhD~-zolX0Ro=st2yVG%DO-fG;An__$QC+HKo2N{hh(55*#9>T)WkR8xX=~ zYMP+-Qc^i)=)Ux=b8Q-QCC;X`d2?!7d?od*0V{|9~al~uEtiRM*MM1A;O?NvouWc#>xGbiWU|ww(6u|={zy5%fHvr&7qXkf3 z0LK+1p=M^ZhrsBv!>HN9_bq8R%Iv4}hoQ>;$1oTf`))0MK9uxEws2hn=`$ogCa6%b z3r@-C?RvSz^X(bAW|crn_JFK1?ZO|Fc0xn23lDiKsL4?0UZV?GgVQfZ3l@0L1sV+g z$;pfW%}r}Vo0!IrFyYfXYxz=<~_)p8#wjp|1_KALH&M9oTi?;kt5QdldJ1k!V|z(XNM zTzgD3%Q~wzv?<`>CR}rrtM^5sgOQ?AgF{%2c^A2<^y_VfXn)|habcN3v?YgBX3oFcV2grBPZ+j=s z-!Nr5$r1b^(@83F%@f%8j6l7nZq57~Iiv^b0U3X-=IgMpO0Z^^m8)(P_7%0x+hKY3 z*3F$GO4m}I=tIB@)D}9d;VYMn|6BJr7XnXL$ zY~yOrE%}*ro_#(}*ru`{4bR;xtW<~AVFmOu$pVK?L@E_a>Iy(dJiN-{@)qZ={y-4x zm0)`43Yo#%QwEXQm+M5<+ZZ@mG1Z2 zda2j7vA=GI71p<{pyt?|4AAe_mja*Gr?tC=?KBy9df;T5x7enHBa)$ppxsCm`!56^ z?U5g-=%g3X1`S?GdK#q!eEv^h#eFE|E4__OT13R(b73KJmxc7qEPkVBU{BVV=GQJ1 zr?Y(m4JEI?Rx~5086?k}kDqVm#CJF=KSgvke|rzb6|}sKX@(&>^hHCA^ILgrGC=OF zZkHtWQ1gt>sd!Y-tpINXMd8+^!tdWR>}}QkuB%w9j`0IYp}>nbWUmO<c%)~M~U9SsYtA3Qy zW>|B>Y*Q;4bARg*K&9Mxd?b1ZOTTe576Why4!7%{rGJwJHBLu%B0Cl9{Tj)p6(V`B zRpg6r9je9$h2q7+O$fk$?N$Wr*;uCQSv;$7z=RJ!x&yyVP_ccMJ2O$-Z8%mk$zs8g zG%a4$aUzTvBr7s4m-Kt0a1_J|%PDGtF3{k`|HpKS7by^G%UX)>LB+iC&9*rwCJjG- z5nINlb6>2W`YWh3_DW3Wb&B0Vi56Rl@phnnX0T8#2ajQwA(mE4EG=B-uBUg?jJV>fW}Y4L-eS|r%_N&PPm zy9dT1RQaD_RqU6%cB!6rqZ`=Od{O zUIcw{X89ZABE4*BhSO5>L)6D1(icThcoZC7uNc|hr^F*`q<`Ecuoyx zQM%Xpp6lP%_L17m(jCMYG)%^}%o}UBSfSt%rKzlg(_UJDb76;!O$6`B=SOqFF(QVt zc-#P$(4k$p{NiTpU3SeY!J!vjJAQl;B#+la4*bp9;yz z*k;2vEg=((`ooo{jt1V_Z{oG0ry%vIec}+>@{lg_pmiP2*x@74kC=WAocacsa@=%a z3ZRpRN}JjoVnp2aB<2{MVZ*2H(wRWEY&S*tP_57}yT0|I=elC4HGB(-Cghh-G4S+2 z@%8elP7iY(w(&BTm79n?o8vkW`cn5=4@ES^>WaDzmw&UD@{$>SjLE2+5-oloy!9fb z$9wofpiaYYpRJF3W6^>>_GhCv#Fnnyr`1!%;#>zF+Mc|}e&orbz5V;1&k0XSp2wjC zEZw;1A*vpwa!O^m1Nv&vlIub$+&Tx0Ne`_$i%L``C+xTuy8t8MBrz`@%ZAJEV&?~a zOkDM+Yvtoq4ZA?T&}sUtwsWbbXof#**2t|ljRPSObf1ve>3-Ifrs2+@Ba6S3wPsgV zFR|;Uf_PeKHlib1a?p$ridHVryBvuaM^OV7Hle&EA7uAz ziXFy^Bm$V77IbfPHQhlHHbeE<=0R6(eW{P=ocWG0l2=7Z@!}wstw(}moft|9%{DH* zi0#LYZmytrRWyw2f!6NcEj7FBt$T;|)B6+orjz)Op{s%yo9&pu9x4`8u{9Fpp)&CP-`%ZJKU;9 zf>kNr0gv0iM~x*3SpMz@ytX~pqf{OkNh(C}E?*<3__ik{jQXcKPj<<#Q@d4&W>(1P z{yd0D`RJDFq;$8>XKJmYD}e-~G+c8Xe6JH=Ml&fB`|>C#W-s=FQCttuv)>O>LkD zv^Otff!6BhyvBngHl0>EetKs#Hy1sacgM$u;YWY0K~?fl`uw_MkNAzG_L^(Dl=hH$ zIvRNvLh?wpt;7q`s+2Eb2kt`GpjL&}75c};Btl9fQ}apWe^RtD5SkQH1~)b3eXfAUm6hN?7!*=k*zZ6qioMpYM?WDhfrbYx;@Yq`R6V^CbBvk~F)}XeqFR!Vt4%<#hYCTdbfD%G4INmw)cFHb|8}9ZM zmPzEjX|E&VXj4cB;ZW#eV|Tuud#+{Pg<^Eua1G`$Ei_VK`EX$gC?{|2X%=mg9+tX}QE%R49j zvbUxOp86u{X4FA|AVBB9FQN4#*?&Hz4cO&dlMW@SPcBT{VxZ;w6nSqgs5ck%tr1`9 zu&T1`++`RL0Zp#*av&x?<$Z@w^AV95R7bmIpuq|!sT_suwU)O$BKI*>+Q*|2Xc;ZV z!vnr!QUiBON_=>r3m-SJ$3XC-EIWNc3UiP-@&yZLxNaQ3W$CE*P0Va259{c)cX!z% ze&472^OsArHZp9L{jIFwk1iqf$0iljlAmoS_>!ixzAqWUWP9!B1gPWnN#}u&m#gak~jX)Te?iOHz-I##vGN z81J{NDO1S@kUxXNSCZ_5xLj&#HcBlYBO7LzEn-?($9c^9S7!vlcHOf%*y?^;L2{iM za>jp7o|lw-A8!tV!tSd_KkHU)9IviYL_81&)~wJI@h#%Qg+BChs?!dE*GXyn@GCz^|_ULXx31}7?Fj)VD~@Cu;r}M9BKJb&zHqfA&=37 z5TanmMcVHOF?`zYs-svERl!#l&oKG$=}qiJH)kPDYMMmHeEeX7IdxC$X7T^54TU<{ zVR;O2*$wACVjvG8L$ z?flLXvq}~F_E`zADUfT&Xd0#^8UZa|%l>O8AsX{#{mC(A{u2irYsBNEbpf;&g~X#~ zxAAuhwj;1~Ht#29m?+T`02!^CYD!ip78+3R>v|*@zXrsD>(jm@2zGhQ8plTq>H+zM*|XV?$kGy@{h;_P9r& z60T}CqpQ~LcR26i6{!cA>Hm1bk!*r+zDz2K&`)@uueR90?Xw-)y2ndH^mG@&T(@?9#t3OYka=7({D1EjxItQZ}tW(Rne0;-+Q zR_ibMp7Q$(u$RV0^$r$m-e;~Tbjv-2s(JVRE?K7hUZyb~y3uVf@_Zp$&Kc=}i*5}hyKLWhRvP#MRKMU}H@Ll=Ye;UB^+TQ+od@l7S@kV%qB2N_m`%%U zr|gZBl63m?xPnwaNc*XJxT|scd5-O+VMNqqvp^oj!d)W|cDc*NR<@Aej;nV2B<+`F z0M%+4Cpxjf!2Y{7Q-JB{rTkSA25s7ID$!avhcM6HO>+XRj^oj%8xZf9_7xyk+MR$q z*J3^{m9*@JQC(rm5g#U4stBVgtpCHiO>d$}y%qk(`Y;dq!KbXUul=8(n%7Q=Yu)YP zrp?4x$E=o{ndz;Q5jJOBChASC7~w^Gp!JlO*1%fxjC>W-BVj8Hi|tpW*v}MkV!~j4 z)jc#B$Q39uqEMFKoS1C~)0Y8SE*{h*z~JlL+0N*@%h}Ort-x7CUZ-v_!Xp8xh+Qy1 zK7sVMePmNSp)gQ<#!H0bblLM+PDyk4OgQ&}& zMq!UiR`wD%{Hk-VkQ|=zyjA6+R(0+^Pt0h0${z#K)!RHvzo;eihFrY2t`Y|IZ`2O_ zKglzu*NX06UJ3zI&z^36mXpj*<&G4*MJ*2{^4fD~7wL%2cq=BkqEs^c-rt9Y`)Vd5 zRuB2{KP7~rk&T*7F)M4+qAZ|lpFN1)C@{{Pw%daqk5|NJ^HF(lzyrujSPGn6^OGNx zooA%bRV?~G!ZFqjId_`zKI=M7-k(p4 z7eX8Z<|uo9UExr>Y+em<|DgWWrY+4lBTy-jh|@oqvWsZ?7vAe?qsw1>Z~TV5AzC9B z#Qr9v-yy(@xT$8!&X4O{LfxOq1T6U_s$vlmkQX~k{S|I>=yYuT=J3?D*l6P@NibrK zPPp~mqSPe*!-VM(mAPPtZp~s*eJ5}hAy&{0O$%=8L>lNlAQ0F}SEZi0ejNZcZNRaFE%7%1`s%IcRa7V_f`u=(voD4X1 zNK?8Tk4z!5;Kxs{pv9yBTjtJWxlXjXwSVTVE?6;kXqdH~=0QLg^yY+o*kS$P-|~sey_R*6&+H zR}{)JO*7_3==31ycGj692bBakK`#>v`+Vvg`66CF-RE4vm@X)WSQI8e;HLm10@>>l zHZ!NOgjMa5Z*Vc;{R7+=))}=FB0qK}iQ0@C_SAFZv4qH$)xM>ij1;$*B27!m+KDbO zckp)6&Rd4X=^xKlGwC1Z?H+O@qhUM{2zha1AIw&A64YLi@Cg%>g-oOJ<4p?R1^aB? z`La?ZASKjxtKJU&<1;z3&~_lYcs<}LQL73ot#IzutsNZlwhC&A9pch}Cg~Sm!Q2W& zjNL)e%@BSphx>9zn$TDxUm(2Y%x?LIGDrBwMu@jcy?K86rgvL{%h?KHs-TkJ>({nu z5@9@vnuJPXKC50dm}KHmf$sQ>r~2u&YpTFg{nnQ)^820n_7P)AsK3pP&5WV)5Qe>5-d(?V;6!_CcSY5#qJp zBR?lXgosNalP_~Y=?H~WVlXvhq7guF;-C8DhzZgqNIsYDUWZ~e4CY<1nsH5eZGhS@G0TpX=@ce$vxi@#Z0t|K`N6)x|&+IdCHJE)+Gq+#Eay1KsHaohpxpfC-j=1 z(fsva=P)9nBQKg4BuXc!cYhAI!8N9Uf4Yd|h4|ywWT0?>xq#PM@heKzv(->q$=AKk zaUI#}eqpP3jKm?Q>ion1C=O~Rx`WZ-YqJso{$r2|iCZ}_SLZUJNe zctE$?RRcF^L@<2N^Iu$Tm{5oYVrVSe+|C-3oUK83L#gy9VKDwm&jaU3QUc@VQ{kj) zsHrTdxWjB^UDXD?Mk7kuWt^tarI6KUIt2KFBx;eqs(jR{0oQ@r4d^+}2dM{9+Fy0V zjC!t>1)0qUzGVU8f-1sM=%P-#w}lp~5F?l8GIOLd zH$g)y@V->71RM*ggZo|!YnD73=rim4JFopzxIc1lwUPA7^V>T2v&FUBPxDmB2fFh6 z$pk`Y&h_ODT~2zW=2VEO~cPY9rF#j~FvT1_O@z~_=E$0}K{*m6Q5VPBG z>iJ))UPh7{WpT$)V>VmAx}Ewx5*Uq$dAQCmJSt*_wWgKNvHA-2z`G$|aF}G%SES~P z*>2TRv&Ls-1pYuIztMDuV0QF#K}k66nAJbyMe}4ip~rT6{_d7!O%GvguV3W6>^G58 zks~YBBWf1Qk7{+M%krLpZ}3Tx3HZcgUtJYye%;DKi5w{!Jz*o8Toh`0%`Vh$V-2v` zqk9l`LtzKHkvvZzu%cj@5UsRvV9N+;DiLGh<+ERkz$ZE=U*8(Sz>fqi`!95`&<=?O zz$_)^_H@Zu(2g-TjTI+tmKBOP`HXAW)c;LDcLRNs=pzW5h1>h5d|Y&iIFc>9=QU|= z0jKr-Cp@qm&>IZO2Ni+JjXxw$e%I7U1Q*9Uerx%3{OeI5iEky7^wpjgfOt=ofBoM5 zLetLuDPt^YnQ#!HQPGOp;W&NXcp&y?KD;Pqz6PIhgNnj^Iu@u7t8_}+XZt_QF3pat zJf34nOl!?u_)+bs(d7hFuUV2YY;V`M>wyqzq{Lr?!1esLcBw)i>h$yVXZuOWmjDtV zaBB+G6{mPTxN1llSlaFUMn9KmZ^hVYerj|A)K2v?+RDw@PxbwS;X^kXdV^TW?zii&!P&9r#2%9S2j2#(nidWYA zI0;-vyX|}5lc*8?E61k?v&PJ80!`Lwl(Q359H4vkj$lrfFVz_*!ub(_3g`)P%-gTj ztDSpzEw>mu^W@;@xhp6Hc?7X;Vvy-)4nsUAy7)^^&))+3o%<$w(_na5ar` z?x4@G9IamS{I|tDaw)OHJcqdzPS}LMN3>Is(CVxMI(}RKlJI~JD+OD3>K>snnM>O5 zl3qGw15^}H8ZDKxGI^UhKM__`^g_BJLl7%u?+YmQG2(Q`UhtDaDHyQU^EB4mJYe7n zp!X`!%TOKal)ocPp@vPJ(*W?@>?g39mrf>9pSmZ#igeHn4EGD3a6 zK)JJlh~RJgZHrY@b&@D*3GmEa)z{nAAfA|eHH0}S4W z1HE6CB6&*V*c%!Cp;@!61J!5sh2AC|*7@P%WEIkl6hz8R$Fc%h?NEye^XQej{ep6X zP;(xL#DQP(VKbmE;}HSy$xQcSBbWo2fjQv9v7J>vsRS zEAWz?z+}g${j{J!JCTn-vrV0DV8I(ON`X3uZY23YO2TQeJNtCBrT%`+mMfp%1QeN^ zA=$#gljeu0ep?t{+A}&BJQ3J959&p=&4`++VsWf z@518r=kyUqNnr7YOzcDu_By}cyXGmGmBJYuT7J0K=R-42aj>Dce;Q>kjA)jS+)(C} z2ciO6zVE1z)Asfj;a1#0_fc@8tSy#iBuy$(cQ}>>m&mVd07J%gmFkFQtcK8WAZK0Z*ZT1{84;XUmb$}MAw#tjR|Map$n-;h%m8;O3ohr zZ8;HG=KaNrp!Z-}l2NhEQH|N-z7D1{%RvUkW>HsZu_49lS9CiMOw$B?{~N@z4Z8JW zfNok|Hve@!cUPs~m8qv2q{^eZ?vSU7K4{6{_fv3V2Utu7YX1IPMUT6#?oreU9)Nhk z;vEC3dlQw+7nYPeEy1H7K%|ySn}wso^FyYSXOVnj&}2+9@b8bqMM&=SJgrp$6sY0Z zJOZ}iAV^^Jif|WWD0^1ZHh)WI40@{%bcqBYekCyBIyzw<>+tWoimXx)h&IBz zLQ$T@u8;1P{?T!RKkQdqm8D`bfN4TvggvToq$1uZz(=Lb&S21H_m4Pa(6M~T7EvEd z^qKT*oixR5WISGO-6!#|hj<$gyl!K?s8=^^z*dxzwu=~NWEmzW$`os|QA|=#RDS6^ zy!s+vJFZz`tz5U0fgUd{MtR4To=fVC%>!MXq6CE&cJ2>&_F%GEx8WAltkbmt^el7;nNJx)Ce+07z`rpzM*NsF>j zgJ$hPuI`XF+uaN}F8K0L=fJ=x-%GLu|1k-e^jwjNAB?zNSn>aw-tjE^=jfcSw>ZiZ z8JL@_Ansq8fO&R4F#ompSyZ(WLR?>u za6Oq+I2PkhrIDBqDJOAJ3DJz{|1qNlA}Pac??%7jStSIdVB`PtsckeJLd^)2o2I25 z&*aKW67uaF=WmzOt4 zOnC1eSI5B)T7{zBcu1&5(P2@#RVbhn%oeaP7?!>6evrpZ!XNngHPdUEbRScn*)Ao{ z{|SHyFd}_NidBq1nT<(ld)-W}ija!%(t{IBhQOYK03v z4nO5Ak@nI^+O^K z0tP|+Xb`dv+-$ERBXK%d#E$5-`E^soTthE|ZZWkSeUZxM*-h~4iz-J1;QDMgRsGK* zhlp+!ja4f`WE_3rYii2(fi$uGQN=C`EV;~a7)+o>7HR(mA~3aX|udnOvMj`;PC>skrNY)?G%%tV=`9{$Uue=PE4_YDY))ZPtfdRKzNK@vl zNMxwOAm(4KsgS~>uwMb%>#WuXDXypgdhYIAfR&{Gsl8?3Sxy}-x^{mJVg3)M^9D*4 z2>DKb!3F`LvxU9We?t|A0Mq|P2|_=Ba5cApNe8@6chNi@SI$tM5D|Ne>DVZD6}bLc z>cVT_ldBRp)3!m)=Cl|bHejMhjXS(G$%<+uK6!XgWHcSMWT%(33`gR^j;)9{fn2H# zS!*Scevd`-O>!=ooO@w_Ri3WBpo)>iY|z8m+6xSDj@@m7mjdDXy}Wm^+|^L0taH9N zlRgfi`+g2dwH#CKM=B_D+&^Yx^0#U+q;)z*&MU=&wjcpt;IX25$wQDwQNk-Qwv^3K z$4n%MwH{CVWTm4|%OaIg6`AfQ=}9OcdbGXe560G4)`bQlo{Ob_ji^N$_G8Cx@A#uw8eQwWC+q(DX5B0^ljo(%!49QPik5yR!fAWUO@W{`SN}0th z*GzGc^GVcG!-*OS&8AmVuARW{6GZbO zOKhN!`sDZLoy4;`y{b87aa2Gf;_NVlY--~kHwC!klh!!rFMpSellg6575BKiYATBl z+r+TJ;=ud@=6LBxeksqBQB|6<67$OV5|oI|?S;3oN$m&pyQ-L#G7<9RbmwbU9jAH{ zbgr2AP=l#$#P`icBoE}2&ut1tUodXQ2|r-#ex;fYm6-*pmvc(T_PLYAS5czacmXn1 z!PnIFUFetGp3i2EL2#3Pv)zZL;@9AA&z)Wy;JKCKE(k_}6iZ^#V3)rr|)+J8s< zW&-G4@bdQ6^|2~@G#Pcqb~qVbcOE~hL@M#QaLOMvHe^rUJ_!K%S)FhIr_&G|aWHD^G4P54><`w{1`#B2VqI zAx?4f1A(3x_MKHQTq8yAVI>pigaRQ**EC`QV6ezPF{$m0YigW)sz1K4J8&tm;)tmS z3kC$+Q|H8~8{y5+=;b$nmsk>Est;n}VH**8lRgOw4ZdqWVq5q|G-%W(qg&$Ykf2K< zVjo=&C}Q+p|Cr*_y7LSTKO$mV=eSv@~1v{6!?fNo{@ z@3$_>lrhp64GWFmp85H!4EdH>NMFU!eJc>sbr@I=Q~|dbLtbAL0|*6R5VH6rV*XF(FI8;1fm6{K=za zV`5SMwE1<6ZKTK^@&t!Ff>UwD9a6W%S-!sZeUWF*AY{;%AgrSwdG3$=XF!>wpP#|0 z9h%yjOKpj#lcQTw5qbHK`J#XeZ3@!uq%trgakpN#;7y?&)i71_yWf9rBw5C9g@+6A ziEvEoZrYgU@Pa1{vcZ;Mw9)Ckziw8}E{Rb`EHZt-q$RGI(>)YhF7)4+%L&N!B6j5dj)uAv6DV5rz5n7D|Fo&$s;<8M#vS?DLyrp%Vd|6 z9c)B?#Sgflm@*6hZeE<2d1(}&oMxWfXQEagL;R1tsgLH_l)QxRA4mK@JPn>vazCY^ zbGK8;bNH$W-{C)PW{@n;VJ}T{sDA6wht^E)_g%qGu2W(}rpC^)##adU?h%s5f(S4Kbk6mwSo;?#X4OXtk*B#p*Pio!vYq9ejW>%<>%`X*e z{w5IKWX|yFzs~B_Ty;Obv%(c`)SqvRT>nDNZ1iZv5cdNHmlu+-(a1e})t>DB=uszi zbdfDP&BFAovmwDvE}%rQPS~my%Fq#Pna5(^-v4qj@fsDp0Ypczd0lP@L~x$39Pex+ ze>Qd}VaRY#+70j;Bw6&QnkoAw9IW^WDpV;Y9|e;wO?Ei>C~E`ss12WmiBkMl$_JxgI0=$fdSnzK*D)|tGw*Ut35VCDH^qfbCOM~ zkq)0;qx!MYc_jU{cs8Dbw#zV5PFlOBOZlQ8?c#{l_Il^u^z>{!LmWMGU(KFM@!S_F zFnfUN!@f^WS%)2y(hDXk&5vcx{ahM%2Ly>3`|1>?x+&vtAnE43>KVtU3|-*|T=pNd z`8bKspaj*5kefp9byu(d8xROf$=y*ky*A2g+rL!*5Yzfu|L&?+fX}4BV_8ymb(sND z87M0`IM RiQ@AZ2X~NY=u>QzwkNpFTJ;{Ht!qt^_lcsd@Vd6J|*T-3>w+X)0 z@Z0S^+1|v-GFIFMRf5#jf%?D{gAU*qF7Y%XT+aETCl=yNS8(EGnU|*Z?Ya;bujvohb*F|sLhu>jIY}F z#mg-D-DopQMnxJYi6%Blpm>1T&`F9^t;Kw@Ur)&>Y0%y&1Ne_*C6MP2c#Ca4q})79 zP`Im>zEWuq*_2e+l)tIA2Rbvq@`?qvP9;bjW0S^u0%p3OEB1XGfJP*a&*ZJZdEg`iuA<$Pa22X_EJskCaqo?rVOsa{^eYb zr1P;Tu`1OE(;NR|OUS&R{N4)ziA>g`L$R9lWCNZBO;;z!x!}39-BGRGBfhk%&(w&p z0P>GXaVkZ|5as4dFMqDi%D--okOt74%3#)T8qtPfU7sfeV0PEG1rx7)lC>GxQLl>n z`O#!V`7XqWz~?O6yX+OEeNg&sm2M1~hWR@&GX;NIe+u6Cha8X2?G5JZ4f{CktdMby z8~X7qvNF`&)@uFn@r3a@FCn5y=qHNzsRt+hmS?=SnLsg2x<@bT*Ao^5Q#?+Ad^oI5 z`wHl40`h+{0iN34hK*eZSaD@r=tm$+RzEGr4MJiM8ls4ck;2a92Uff)4xmw}0q&g_ ziU*irV&jxe5P6p4X!{|hCF=BFPzG+|*BDBme0`jc?zchz$l0ac zB+ zSGSvZ*Z3HvyhyivKS+XiFIDTEx5m4Yzg`c??&t<#y($+r43XgNb9F5FYJDtuU+#u^ z%q~Gcjg`RlQ^c*<jE+6-+6f2ohs960 z_2rbA2EX+?KG;|AeHrqk#H=ZN4ga;dxEEjQo+*Ir4(Q}Mw3=K!=P$0l0Pk8)g)1H^ z{>!>ZEXr_mJzhzCn~o6&&qDg%ahFa(&_9#NV~0TLK!olP6!JW|L=Opl|OcfopTN;)Np|0D*K9@SNRhPg|AerEv3!k^=~Rk`^qmJr@KzJXiu&ekqstZ$o^I zw7)ybe1oDP^uAK0^$dg(WsOk6;wol`+jtGJ&-pd|nV)oDvs;0uZEP{h%0bXBSTq z*P zVw1$T*${E`EC|FuT7PDy%p;RGK~htmFswkPsHYK_o}wrkj}^;Ysk;3Ggfq;@7CYipLh;0>z}z zTi7-m9?1A54nO2kkw{t`JsU>T`|0Tvmz>=dzfWmH--?6r| zc5ZnLB%d*5JZk5WfzVW7TIa)J=Kxla9UKE@p7=V7c@iTprG1U2Em5=J0yjo8dq!xG z5D{d_Jp9*}mF@i>mKnHb3Lsgixr2+uU*sg*-&g<)P})(Oz^-}oN%MzUUI_pmGy+c+QH8Mvnk;L)8%+nd>D;NhGBn*w+^ zzng8;wi&o9GhkBycV!xFH?hsY!#M*s1@LfwH`}OfGjLaCz@`B1$~4+;Vw-`7a|Ub* z;Nkpkwo%(=;I7PoO#$4MX|&zMHUkgm4A>OF!};B8qqfb!U6}!!0=O&FXuFAR1|H5C zuql9t^SjwbZJU9+G6OaRa95_$b`#qSJe)INQveU=ce9P!HUoEM25bu8u1urtCbk)P zIA_4703OcoW*fC_2JXrXWV`5p=z7kaE_dZ-wwu^yz%~O9&kT@OFWb>Se!54wREg_9Z}}FS z_BJ5!;rVp7k=kb9&SoGwDn_c;dRwv;D^~1!pPrq?76#negxapQ&A`Jn19blf{BLcO zAO(Pkupq;(t&14g*kJdu4JEIPx^*-JMniy<5cu`$H-oEZ48z;^A0Y(*NONIc5<_xA z7%AqAsvQl1(GVDdAuxBrDu(_^^S~~L7XYAp=;zMtWYE{u7=m6Jb@FHkjD`R)A#maH zb%vDm3Wgs)Kv(b~6#yWPAU_|&(nS-1cd<(mW7epe(GVC7fguzEj~_p0h>FW+c>nPe z+|}?F089jw`DagSWssJZ970|jb?RscjD`Td5P0_V1w%?!6~m*)z`HJy07d}-YY9y3 zuVXMW&>0QY(GVC7fgv6O7cO0A$jPr``0(*FhEK2-05DbQ$x*<8!4L*6?$I>@Lp%+P zI)4O)z_+j880Icm!!UF1GMv80TL6G`2?_EuSq02Ml}m9A!9m@+`x5U?D&Z004T~x=QHA2Q2^q N002ovPDHLkV1oa%_4WV& literal 0 HcmV?d00001 diff --git a/assets/blog/micropython/convert_to_transparent.py b/assets/blog/micropython/convert_to_transparent.py index 763e856..5b51cf0 100644 --- a/assets/blog/micropython/convert_to_transparent.py +++ b/assets/blog/micropython/convert_to_transparent.py @@ -1,28 +1,26 @@ +import sys + import numpy as np from PIL import Image +if len(sys.argv) < 3: + print("Usage: python convert_to_transparent.py ") + sys.exit(1) -def convert_image(input_path, output_path): - # Open the image - grey = np.array(Image.open(input_path).convert("L")) - alpha_channel = 255 - grey - - rgba_array = np.zeros((grey.shape[0], grey.shape[1], 4), dtype=np.uint8) - rgba_array[..., 0] = 0 # Red channel - rgba_array[..., 1] = 0 # Green channel - rgba_array[..., 2] = 0 # Blue channel - rgba_array[..., 3] = alpha_channel # Alpha channel - - # Create a new image for the output - rgba_img = Image.fromarray(rgba_array, mode="RGBA") - +input_path, output_path = sys.argv[1], sys.argv[2] - - # Save the result - rgba_img.save(output_path, "PNG") - print(f"Image saved to {output_path}") +grey = np.array(Image.open(input_path).convert("L")) +alpha_channel = 255 - grey -# Example usage -input_file = "simulated_display.png" -output_file = "simulated_display_transparent.png" -convert_image(input_file, output_file) \ No newline at end of file +rgba_array = np.zeros((grey.shape[0], grey.shape[1], 4), dtype=np.uint8) +rgba_array[..., 0] = 0 # Red channel +rgba_array[..., 1] = 0 # Green channel +rgba_array[..., 2] = 0 # Blue channel +rgba_array[..., 3] = alpha_channel # Alpha channel + +# Create a new image for the output +rgba_img = Image.fromarray(rgba_array, mode="RGBA") + +# Save the result +rgba_img.save(output_path, "PNG") +print(f"Image saved to {output_path}") \ No newline at end of file