From c7c02edb60df2d3c444afcecfbb6ceade6bd7f3a Mon Sep 17 00:00:00 2001 From: Mohamed Mahjoub <75433420+Probler-Yt@users.noreply.github.com> Date: Fri, 11 Sep 2026 20:30:34 +0100 Subject: [PATCH] Add files via upload --- .gitignore | 4 + README.md | 26 +- docs/images/first-launch.png | Bin 0 -> 271889 bytes docs/images/flat-view.png | Bin 0 -> 248693 bytes docs/images/hero.png | Bin 0 -> 244529 bytes docs/images/icon.png | Bin 0 -> 7703 bytes docs/images/keyd-note.png | Bin 0 -> 274961 bytes docs/images/legend.png | Bin 0 -> 45103 bytes docs/images/permission.png | Bin 0 -> 310542 bytes docs/images/social-preview.png | Bin 0 -> 97937 bytes docs/images/step-media.png | Bin 0 -> 275639 bytes docs/images/step-pending.png | Bin 0 -> 246926 bytes docs/images/step-record.png | Bin 0 -> 296603 bytes docs/images/step-type.png | Bin 0 -> 274718 bytes docs/images/step-written.png | Bin 0 -> 239008 bytes docs/images/unsupported.png | Bin 0 -> 356448 bytes docs/make_screenshots.py | 347 +++++++++++++ install.sh | 226 +++++++++ macropad-capture.py | 204 ++++++++ macropad-handshake.py | 152 ++++++ macropad-probe.py | 257 ++++++++++ macropad.py | 517 +++++++++++++++++++ macropad_gui/__init__.py | 1 + macropad_gui/__main__.py | 99 ++++ macropad_gui/app.py | 648 ++++++++++++++++++++++++ macropad_gui/core.py | 626 +++++++++++++++++++++++ macropad_gui/keymap.py | 69 +++ macropad_gui/padview.py | 398 +++++++++++++++ packaging/60-macropad.rules | 3 + packaging/macropad.svg | 15 + tests/__init__.py | 0 tests/captures/1189-8840-dials.txt | 27 + tests/captures/1189-8840-media-keys.txt | 39 ++ tests/test_core.py | 297 +++++++++++ uninstall.sh | 33 ++ 35 files changed, 3975 insertions(+), 13 deletions(-) create mode 100644 .gitignore create mode 100644 docs/images/first-launch.png create mode 100644 docs/images/flat-view.png create mode 100644 docs/images/hero.png create mode 100644 docs/images/icon.png create mode 100644 docs/images/keyd-note.png create mode 100644 docs/images/legend.png create mode 100644 docs/images/permission.png create mode 100644 docs/images/social-preview.png create mode 100644 docs/images/step-media.png create mode 100644 docs/images/step-pending.png create mode 100644 docs/images/step-record.png create mode 100644 docs/images/step-type.png create mode 100644 docs/images/step-written.png create mode 100644 docs/images/unsupported.png create mode 100644 docs/make_screenshots.py create mode 100644 install.sh create mode 100644 macropad-capture.py create mode 100644 macropad-handshake.py create mode 100644 macropad-probe.py create mode 100644 macropad.py create mode 100644 macropad_gui/__init__.py create mode 100644 macropad_gui/__main__.py create mode 100644 macropad_gui/app.py create mode 100644 macropad_gui/core.py create mode 100644 macropad_gui/keymap.py create mode 100644 macropad_gui/padview.py create mode 100644 packaging/60-macropad.rules create mode 100644 packaging/macropad.svg create mode 100644 tests/__init__.py create mode 100644 tests/captures/1189-8840-dials.txt create mode 100644 tests/captures/1189-8840-media-keys.txt create mode 100644 tests/test_core.py create mode 100644 uninstall.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fe15d59 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +__pycache__/ +*.pyc +macropad-capture.txt +.venv/ diff --git a/README.md b/README.md index cb9369a..0d1168f 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@
-
+
Set up your cheap 12 key, 2 knob USB macro pad on Linux.
@@ -19,7 +19,7 @@
-
+
@@ -35,7 +35,7 @@
> [!TIP]
> **In a hurry?** Open a terminal and paste this. It does everything, asks before changing anything, and is safe to run again.
> ```
-> curl -fsSL https://raw.githubusercontent.com/Probler/macropad/main/install.sh | bash
+> curl -fsSL https://raw.githubusercontent.com/Probler-Yt/MacroPad/main/install.sh | bash
> ```
> Never used a terminal? Perfect. [The step by step guide](#-install-it-the-whole-world-is-counting-on-you) was written for you.
@@ -134,13 +134,13 @@ A window with a blinking cursor appears. Hello, terminal. 👋
Click the copy button on the right side of this box (or select the text and press `Ctrl+C`):
```
-curl -fsSL https://raw.githubusercontent.com/Probler/macropad/main/install.sh | bash
+curl -fsSL https://raw.githubusercontent.com/Probler-Yt/MacroPad/main/install.sh | bash
```
What does that line actually do? (optional reading)
-In plain words: "download the Macropad installer from GitHub (`curl`), and run it (`| bash`)". The installer is a normal text file, and you can [read it here](install.sh) before running it if you like. Being suspicious of random commands from the internet is a healthy instinct, and I respect it.
+In plain words: "download the MacroPad installer from GitHub (`curl`), and run it (`| bash`)". The installer is a normal text file, and you can [read it here](install.sh) before running it if you like. Being suspicious of random commands from the internet is a healthy instinct, and I respect it.
-
+
6B)k z4jNILEu}!; z^4k##iT}tD6`a5nK2N5)b<1j6oxgHBQ%EhF0uwwiFFij=3B&P@J-VEyVS#Q7ki|vs zj~=~{+@We^rp>raE(O2;aCw3qDl}4&wULwK5?UZ*)N9l0 )> zX{dE$^~`ZytUa^k$@AHuk&=6AbbnROy{?Ug*b7GiZ&WI^+X&*m&;;eE_Wb3TrslY? z2@X8(V+z&FT<9&$Irw%TkHm*v^6)WP?rjEDG5^o|(!i{;F9=8D->05kLPdMR0HwD0 zGo-UE<7`eZ-BCE`{-g{VDq!-vWo-4KKYJ*}*5W~ic61(&vy!??xro$}!>lg$L$0qV z4@2i9FB=F6cns_f((F-Hh;}`n&4b>r?DOx6)6knv_eeP>EwjX~`h4p@6LuoPQD->M zjA?ou`7v3GRn_sG*30+iEUz>pCf;}&bIek(>8V(Db%rB+m81K$+VgnN*t6cCDX8(# z4%!D-iwI6|+)qaG@+y?0#xb}-I*obP>-h3jLKGSzz*`yU#zGP21UT+eyEwl)Sedz5 z3!}CL-CXhVnyaV)N671{wm{3AXHiiH2wPWubaDL+OM* -#cQ#QI1Gn?iVRob7v&}GQXHbW*= zh&$mU=re; ;lj_} 1Pn-%O#l~(g zV_WJ;vZQ~mDaXT+qriKx2Eg}WOif0@;5Pbfqgz8SIHTzB165fPgHjnVGiebE{Vtl0 z>~nuLr{mSDGoF6-M!Q+i=W79pnWymn8TTJFn5Kr-tnKOpff}GEW*-s*J>7@!`1x8E zfRtq~HS{|oMR3}c JMVi`BV}hwi(TurVc3jCE zJF9yn{*PsTt+~?%l#{odCh|TTv`RZ0Zpls|#Ya{ue7qA;EzTmVuaYOBt5u0IemE>h zwuFL$fk`r?u^NvewPO|SPACnod7_7<2oMp;m$KL;WU h^n>bY z`Sk680oX7zxzSH9gPd~5DQFum#?2C+^MswE5`qV$ao+1~Xc$~ZA4C&lltUru8C0|% z%Bo4{N0R;9)yj4mQ_^InE}5!DRAG%`UsdyXXEf6rfACBMw*|@4l^WwEw6u8aKhloV zUND?fvz g^=xinA&rl>!UUO%Lcd$=Y?=QJu^cJRo` z7A31Gc}#g~(?MA8b?~w9p0T^{6{*j-ji4f|UUDfn@Y6Q&dfK6s-E#p0V%l0+mq54R ztqd0GSaY)l&f-s3iKVqvD=R`y2O|s(x^}MwAb9HL$jMifHbESAF6o(MrR1tX#rwi3 z>e>tC{@%0aw%pF;ykyw-Lya3hOVy4}=(3Kes1Cy0779P-ZjACIbQrdQ3)l0fOK1Vv z84b2so!^vhhWn^F-2LiGPYr$!W$9j@K)rEGoZ=`qv-C^zuIO{@gMTQH`GGBh9i!bw zrOeIF3cfsaHA&^iIaasym<)bA2k+l}Xt`F0ot- 8Jb$$(uKnQ*?~Dbt zxQ;yi`cWj+pc&q)bu--&{-K!=;-&rhD~}u4?dk2Zalq^8z)V9~;3v?dz<;jH5#=fN z%KRsb=u-MzE+?-@jI;^ExUOiz20I`bnXCys<&)Gk; ~Q z8ryL__ABpRk#nKjjNBexR!btCZLWquB>OG)xZB3KgELWXpxUT6oGT>2BSz1G#EJ{R zcQb0sIzb6xkdWSjJ;h7sV$ItY4}cF<9pi^8>ZG3?MRmg|R2mxl3cristy|^y58KmT zU%da0KY$vg?sTw$DJ4n6DiVOxwrB6e4Tl?i!GG?$;&W4L`u?C?k@0?+=$g&aKzYLM zbyD?s$ZB#?(-z7sTVFmdNqlh6D=TaYH{yM3UWj$$Kt{v7%lUJzs+60MiZzDNPAdgn z15~WYZa3Z5= n4{$T{_449Xu_{NSxQ1;z) -lOIm!Sw|GxRA!-0Co zv}C>12)k}ijoEkT7|cW+bL%`E*Ck%Eer7XrTKDIg&nRUnUG%xhw~79^ct6{kYIjB& z3t5fxbLwtQ-z=2sHSy4zTXLYz1l4rhJEs=1&x@A {fW#un|{> zw`?~b3$hMs0^2D*o~%jKndy5ePxjV9{r^c4b%E8dAw=mSL{^r*@5=KjmK4iGuMwBW z3sqF9{5#@4{QYf+>wzeCToIl(=|Rp|8KsbDdPbk{|MsAKq=ODTn)kZ`mGA(98u~BZ zN_7Rovci0vG6f b~O^;SA+SRwIBA?8%` z{199+u6fEatZdtbBZzB+;}R5G{Q@xNYa_qmx6gKCyF%Xee(T|V;+N%~1`qmis*Y~X ziRMm+;^#_6htqSHPqV^fvzBDdNxTBhdQn`u9*fKl!C-K&xz!cVlc$FnkWzr)Mf8@? z!gjvA63V^E!gUW$!9K?=Lt07SAs{$~3Bzv+mNcccJAZ7F?vVRqJ@3ni6g)xZTDcTG zciR3SC7&UdR!YU~1uaXGSJddzqNM1&_~KNUso5Hrk=0h_f}i-sIcdI2-WTq}1br># z-77DCiL*%KJ*iv{Bjuh0y-4VCL&V9^S?O)Zj~;#jZL)>OUt08epjnknkFQQ)=IBw) zc@;KQ!Bri$jxjqw=@g&8a|k@ @hKiJ6=nC>0t*-f3w=K=^GNF9+z%k?IZlQYAN~Bj&w}R7d=iqs8EO@Ov z=Qyx|nn;)^9TzAfHYiI?IAtE~Mq7G(r6k3TsPG*sl(5oWJy5#U*YaxEZANs4%%J~j zco`-IYp#+J?+XQ7;v-$14+WUGTWbBO$eA*=k4tOLxHY&*k-7~8FPf6b$u>D_IX6g( zt6=~NpNdkj(LyY}0p$`gbEFuw&2-RqtbAecCeLX3kHPH%(=Hm!1$Xk#=9MZTRtl;0 zh5?A%?69G&HhW%0mh7WOry@;1Y%jJONV6TDS*-X9et^HCXWyl1>+b2I+q#MB5KRii z(>qMrv}*^x?5?9Amxrk?H+2CqZC%7&aGB!OcwyQ0QZ`}j)c9o+l4M@eE8pbJd OP|^AgO= ziXONYu(GHA)?{Du_GURv(7R%)U$7<)wAo~3;&OiALrtDfUiosW!M~zxmve@{+8x(^ ze};Fvra^LsOH6Bo+1v#lHfCQ%sx8TaCen|0!cTiGJ^1YW(JM_& }azC`DW-zwtLM6+cx(EE#OKqhgUG!KZ5Go^UYB84EFScNXaDVpH|?P9NT+Y0Ay* z3|F;q7E$4^rJ;fbPw3iwT6d^cPXoT)pFAwT$5|uJg+oshSMJ_LmR5rfPkcNJS4jXX zc2-+#gm4!9x}7gJ45kwI=tl+T^D@4qu-6B^HS*ij0}fUEchtbBZ?RBd^SRf~q_ghq zJ8y7)cDQfv3u!k9cCf%=xl=*`!omU}|E B|r5PC$u7`mCWvs)y {HxxOyJra^C4-o~+ zjIe#9&xnNGe;&{~G;Mo|B#ZIdFv}pv3I5&rfR6Bsla$f~Mc{(O<3`e6?BJSUw3=XL zHZ};&=2H7nSHoroYfex^csJnJCDwl)V0-r0+Y5*2^O?!V53?7Y+Fl55_D($Jy~v#R z_aAZyjiH8OKt}@yY+6-1!c{^b5rqzj`oAfo|Mo<~LDHgt4o{F$2!ZaP%7ZirGvJd3 z!ciH#OaEWtTgCjtzxyc|FEj5D{r9xJ|F_eoULhmu#O{^Bc2?FxF;~~YDJklVgzKA$ zY~Pm4CCdF)S4pUCUYj_Z1r3+;cFI4)3~Nu#%@1Z{wB^G=$r^fQWE765jJ(&J1$CJJ zK0gm-s~*~Pc3wJrSfs^aZvH7cHWpDmtR$ZKz4bqRkyA*&dnKBrLroWsF1oQp)^1i; z7vUI^Y21_%hgavLv$ri~l}@KKUP#D+^oR;pB<4iL&dyG9Ix16F*XZ){7fS~ ^*z|>f*FkAlJ9g{UzP&Q3B}8*sA@k zg+DbGC(Sg7BcKAL#k93aV_{>H<%Q+79m7wCCnoyNCR6bmy0saFgi;bJ_>`1;5q02M zszR!XJw5k3ySno8^E38H+J;tEzU|I0BR@sT9%f%&UVbahK#hkXnMId1q^{|PixeRn z^zq}wka^fZ9He?{!-;21$L=8rYj)^&3=~=GD=hfmk4+$YAOCi|DI6(6i-p0F< zl)91e$D^^Ke*noTElp{fGm@8=KOV3KbBCLfzm-1!wUwS;Xy48a&>PVQK%EH$0^fdY zy@x1WRmjyqLX h9)2k}Qp@IK&F7tv$Q;Z!qFU(72+) zxwp5MS2gkDM}`Y;pN*|OCeoOnpa1P=0GIv|cw=&Cm#VI!NREZY+ruL%2x&w=A3(Ho z@{D}ZG1XJNbLHDNE5jCbH5KIe#ARl-E=A7jdR$xV`87OsH7-djonqz(ir(Jd8y~}7 z3j{%wUh2FOnD3J# |jjSE))EDjY?V$c#EjPB_<(xp`j;l zZT%4M+2E4Er~m~Gjj6A1P{e@~<1psv%a^jBz(eCindt^NPqssRss{jYTU}vsk2rpw zvPn>MbSw{_sI+K?rKJs40FQ#Tb&tV9`)cl&FX7qQjB1XN!(ebn%S8WnwAz2VJ #AM(7upifPtG rz k3Qj(KfO`0-Vb#`?& zIXNQ~c >gpTxWJJHHI*#bT)qKtBS?AieH3F3_{qH|h_`2nIkVR&{n zWXvWfyWsuEh=#Nm!?rsH1|IcFOJFb#9^Uuy>9&@ZH Pq@cTq&?GbG! zp0~R+=nL-k`H1>##7^1SW|5JR5J<*HMB~C>tUE#ns_}shmmF7~8@^PvQ qG>dRV*nxQ=j!-?!WcvaaX~?W z6QZF)P;hk8Gj%SLRu85}PD3%Q_@7_@Fy{QNc24iN^L!~N$h~QKdUX>wua}uho>yEI zvYSb((W6e)3!w5Z6QgE+;DQ?zXt>KL$#aXlqazU6w>j;2*1CM;w@uS70Ko~Ppry^O ztVC%>C}cw#P0caS8ALmTh| @*oupj 5tGvQ&SX32=h%F7q-dLZnMqYEQQ&! z-9K{* T>~62Rapl>7R)Qb;Q5>O`2Rq&|=-T*)j4r+KDIeqC%SP9cC~@1(;g zU(egjx;pP(j^5vG4IY6A>uJ>J+tc!-SxxDm4hO<1_^;x4!l~fHBW&Rr-?z`%QJ*|Y z%C4_Z^KdZc<*#&iK%K&rLh4sh=jRs-?%H7>z(f$yjNyuxpTF|)Vi;Ozhcr)o-;ZNr zZsVqJTL&7tnsWaBl5Qs$UrI_AWwtQ%=9-yk)i;<)rkD{e5P`wCKPJY^s|IHCSV==I zHnw#<&OvYKMm7bQ+GP;daS BQYr{ zqIpS~o?vAurw?JF4}Y#kxwW(X(G`flK7YJx9|fM&zQr{rgdw`;665OU=jZC?hOm6n z; IqY;lc+4`R zP@hjuTN{Js{}A?;VNtbh)G#PYg8~AQN{e(i2#6pEN_Tg6Gk}zIcT0&VA>G0NLn9*H z4U$6-4Depu&vQS=@xI@W&%+=7KxX#d*IDaaYi&w9BH|}b4W;Rzb0NdyRo2jfg?Stx zeq9Eta+M~k(@CjkMqf60<539(&+nrcS~Dy7_@GNk1qCxQPUyX<>%>n?T#XDwZ5MB_ z0ZDPgry)H(XZq|A+WF`$2Z_Mbt%J?I%z6qT*H1G|-jex`G};?`e*HqJ&~G#K_0?tk z{%>c#EBv4MLIocOeK+)nS^y=$Dgy`SWNdo+H4CvBvq --P}D`z74S$tX-M9pgZy%)sLZ)M6`Z`{J*~p|DtLP7$6jgqo(5At51I0$yaX zu=|6jTfaxAhqrpSbZKw!!l;$|{^&ZQRBC;1n723I2%Dak!xohQHG5a{!pPe@!jg`w zJ%*HBU!-ImijK$2qpYGMZ)C(7viM{S=)yEA^qGM(%zyt}{YS#u{O!w^G(twDW%p)O zpfxNhDa(}Q`Dm5VObn8HT9(Z-9JG(k%9$aP*;q>PZ;K|fJcK*( n8Ty8);!9rJ4N6gwnTQwiQ%47C_TazY z{0I9#GVves6oP^jqTX5k{cjET$wwU)+ki%k*l-exkFwmyfudhQQZ`h#x`?KK;qK~b z?L36I^J6hAw}?SCt`gwo Oue= zpQ3Be-DUgeNmFx^=h^Od)4AHe0UtkKe77C$W&85&+saneD(Gtz#tPS=K0?jSj#HFB z7cj(s>IP{EW%t}AN<`Y!GUqZ$=t5eWW~-B93AlOgVfWj`C4{nzYipBp_NmCo$blp# zOV}eYuwN`k#7hz=B@=bqwAt!2S7A!Z%F6eCu63b} v^7G3}ZvoG(N4U7}h*Fb|nm iYkn`bp~6$c;p_xyNw zcw$NK(9rr|x{Io+Dtrx2``~}hJEls?cf+x1SW;4w jV?;zmj>ro+ zEbK_nlS6)j@L)v 1*@T~P<8H_nph?X$SMU+!|A(zr9VdTLy&Emx#0 ztX}<7@~2J6)hw_lVo3R8XKb9c(~gw(yGG5(z*EuH9XuCD#w=3JSvWdMFt-0M2fg?w z2ibB%IV^336r`kRQD|wQBA0vo=H?cMm%ctiNR&tE4kFkWLBiVn?fz_z@d`y^J5&oh zr^~K;5O7$xx2^2wTNK^gaA7f&B{elsKRr KF$WF>iGV(x;{nev4ZkevBm z9D=2!zGAkZ6a<2r%4V>$i{o*C zeCy#sf`S|UPPfVR!5hUGwuk=)>onnisxw3W`%edui$E|c6NICI|It5?I>PzRWigmK zi;aZ4dhDle8Z9HN(d6{_inu8Z-@oqNamcL8a#*9?2`Hmp$O}$dC{**ix?;A_P@hUk zmG<{04q$6@(o(0%@{cri#Gjr5?;!IKD*4OMTnuG-vEz<--(#LRyU~Z3**!gk&hgEF z_yjZ2@!#>6K>7>d0N-2a0Y->q6UV=|({%DbQHlE(pJM4R|Kf^sQ(7A7=4LLWu)Q7M z&>(~wWo48!9I-dsr~iz&ExPrWK!ZUizGAA+4QWw>$1NMkf*m|VjSl?=SNn;fZ{x2m ztwtD%t&UE%3GZ$ ng{MUBMVC(HJ9Aa8XXHm+XUsgMLuY z_7Ligj}H?S2KgWDukja>=)V*ZtU3URZ~2f8t{GJ~L2R#k8zO6(BEivnzIZEP^dX*& zcsdm;GUDRqiW(dfX`1S}h8t|V@2n_ST*ybUFj5MNIrx>%PjM24OdO^CfkP={2zg0K zNu$#>$;|95XcP J_-aavvrN@@6UK&+m12c0OB%#8N+Uh$aUgU%!(7^~<23peb8-HoYcE zFRu_bvS|&_wl}zLWASBXcXYghT<#b=B`4Qwx!r>uN(oRfP~ R6p(;e=zBDeE%M*k6@-!9m25np?U;~{=D0x<3HOW=ZeRG^`uz!% zL%?TWq}J`U$ FUi*?>Z}+_2G(o;)-tYdw%kegym25`OI}b67Q2XHVC6m z0Y(FB6Vc@00|AoM=zK~BqFGPm-#huE;6G7B6FUp7wOPC?2 06-xZzAjRRgEHou^;Z62)WlKI zvCaoKlpt+2Ha7aY?CFTu$FkA 9d)$ zv$OXfv@j*i%$_7CtNk-@2=Vpz_F@2Vq3iPpLw^8Z)K!% !o@#-9wkofp z-e=ZESd_P0)e|ds@y#nE)CVCCc=&h{-ZDI;Bsa0OP3j1Q0GyN<+;e*568s{daXE5- zuC=?5u%vGQ8$QH8+2FFNA@fGY)#<;E37>lF{!`WoLE9qeaYF;tpMf`G`{E5s%;~yW zZ6L|n$A%d`lVEBOXlW5~c6Js^hw;2)U}PXACpQD17}(L_M&9uwAE1Vy{wgqu=Yk)T z^g;mMBha@}Rd|R!ast5D @yZ6Z=19`zyk5d_|K`1>rmT_Cb6nhL>4FacQGNRKDLrv4>%tf~ z5~zme<`KQN!L$4hj%Uc%;QAYV5zOcN3r3)2AW8o>KiHE0lX>}=l5*QgAwUMdG+Gdr z%Y(OfdKhFxsyg{cSzTLEpDB3gtSU83mAM;0VbEjTKte*o<_XgFM@^bQ?T)z~0#I%y zHs+q4 hAQ3>C&cwoWvBry9+^GWaE)F5S&Z#NV z_~~iAQWqBDqUPqv{e3n=Hdg|ihu{pv=Nd?S`0yAE=NU6XU^tg8PKb(*8XX_&+v+`R zf;qAWQ==r55_ufVZJcaZtE#GlC-mBWv8iKg>kAv-|Kj~WY#UpNXQXQ@-2 FMjRUii3BOI9DLWA#HB4ot|A(Qj)nDFtS xa)>GE~ZH9?dRA2j@#U|otGzCU^kriD0r6% z mhNtPI)Z {VU8{_f1I7CGO zv8~(Unx4sD&Yj-T_& 8fOd7xl!oXp1L1#HE98>va za5aDl0Jiq$&-k+5kr0THJCt;B@(mqV^FhpO=Jdk)`mlusDqvjj-~kXkCx6iY5IC^6 z;duNQn7EA1j!D_rV1wO_4;PsEo}(>0PQ74eTLu;vb1gU6W87m+hyUhHy0U*NR9^sK zng1RyTNB8Rio$WZy=fJthA_Q&QIua5J~ubly$SM#rJYStNtw&Y*-7P7;KiV=Blc_N zC{Th!*3OPH`AISml*Ld8%c!_;&+BEM;N!)8V%*rN^XSB -J^e+hSA zT#z0tv=-&(#}^lyuT%-x*?n(%WH$R}e0=PWD`~)grkcZ5c5ELO L{rx2g z!dFpQZp_ga5|(2iG&rexOP>fJx!(&DZ$Va`nGxzAc!{yGK`=N(53t69@6l&5b)ruI z+y} Z Z^^JcHFdJW0ANWKK^Wkk z-9Z5IJ3avTEv&1H0aXyI{VL|BO)N*;zaLBpB{28YPJ9 cjb^PRxq9c zV;tv$eM(A&f1mU;*Uk@E5A*TU9c0VN?Yely>0I6I%a;`w;;0Pmc}@YZ>8|Fe@J~ *GhR@3?)*4+My9LLXYa{hT3KygAM2V~CT6b_52633%MxgZQJ2@oa z8dGK(0@6%>vIE#v*VNS=0tmI+$_F$$_-GBD%LL=Ryqe$nz~02`=;SfLZA`4K-=aIE zn{xFn{Y25zqXY;I*cFJi=VoMR|1Kq3T{ZDxK%%&`p5Wl(-J!qF9?>N$`aOa2^j+@a zU9D^$O{CxhG#BVrX?A=+A5k}Su8+O@v(dA?lSx a--u7VVq6%idT|KYNIj3++tF zr#uKkMe+9WzG444*Ch^!J-=_i9eG|Y61aT Wxq4@HNih@ZizbvIB6&Nm+#{zJIUT6<+`YW$AP6`hD)>=)UHs5KXY2 zxceD^g#<#wVmUa)hJXEv!voGUzHV4}+4;X6Y;E&TSo|ssMyWX~eU4u+V;N>pYT~|+ zRC<^jP6;`RjBqL;6o_VbyuDXTAsQDul$C!z{_^1;!8HwM<7NzEVin7Dv(75?`jHH! zYq<73;>5l)#+oSK*9M0iNDAZ)wV<9c$Ib2tavj0culK#{zn(AnQ>qq}KJlzsA3%5? zVWtiYfiaB}C+PfO0qpOa1?=jf`0>3g0GJhYJbV^v1cqR*o81>6DG51}*KnxH`unrP zVzTqTeaix1cZB>~FW|B!Dmvdx1<{-uMnB&_n#UJ^)IU;!=>4EC;$M89DbszemlL4k zz#-@gf1iyn;2`8sii5wmG_eGJxj{DP &hXIV>EO~sBGBs;{`i^!#%e;Ghk{;z zdFDmuYy2)McR)O}wu*wyNX&h7d?zq+LoT-~q-idD0JP<+=lqh~imC4ImXcOYXq>!J z71vtk)>0JX#eL`b+b`Il-FPXnRNYyGjRmengUO3)pFFfpAI8M};dH`sO0R*^>N9th zn)hcX71z9QYoCw99k3c-wQhJqrcLgZo&bM9@;dIZL7$tI(~|qNtc-bhiATXO&Cz&^ z_?^a)MqVsThXp)osyB*w0JQ_YO;tJ<^LXN#--z38Z_YjaTyUfH^z=mhZ(QePytQ(+D1`*{Tp;8 zzHeZBzr2sm@h%b64c3R)!1DW1PF7)QX*jqktU1R@)Z)eM?Mmo&k-(dZl!A0=tI7o6 zn95oo Sn1Snui;EHUN4As0aAsIiRhpxDo>h#u5EfJD;A&e6#sS zq+ HA(%S5rUog@!PsJ|vF6;Yq1Te;P@^-C@%6sXH}SJ6iW@GqI5RTIuG} zU7Ir0Hl!$^!2jx;BCDbM)}=MNLinCh!O39z;X5soc4WK9mQsbMF+p^uVI*O+pP7Ze zcbrG;V!Vox*`XT#0J_1AcKJY7Mj3MK0lUNP$$<#@y93Yc*K0Q38URv>fBhzgiWcnK z=*X5kf_x&Q7n>;|y#v6!rB4N5WB{o10#HX#(0w68tv`#4utS4T!MQmFJw4GdGBPlL zT FHA?KHJRL#N_wUJ|HMkp01t`p|qkH7z*O50U0GUQzT94cW-Q38v zWF-qS?o+qe(=!X+X)N)s&zu030h1ne05CNKi#a*2QgJm?c^2aJdi3+{{l6<+eTe|v zY`fm~p%V9!_RyHbg1H0ySv@m3K)g4z-a)`?g~-bbkT*qp#!8f2mw-E78RyJp)aVE# zpQYO^FGVD?&-Fk)r(Ht>KS7XNj3j_#l~c^lg3mEkEzTnFakAAwl%Zge{(S~j?0*b< zzPT8KhoRs&bbG5N$2sa9oB93aZ86eKH&rkxiNwgnJoPUNjR9fgTfi6ND*5pvp{ePz z`#HMtar6R6R c_Q7+Xun95 eTc1`tiA^GN_TzyQTU;Uq{n$)p;Xjrsp+lmT=_2 zL%2_tCchhjW@R%HO-wNM8`?|e!@V#?O&npxSp3+5!0xG>ondv&*QGAm$?Ry)E?O)S zx=oT-J4i4H4t< sa_2vAm-oj5^);Ym+ z1MG>Ab2MtUE8;q?lB9^0p&QD9kMrQ_`gZl3?P@iTTYG{gH@o+099Bd!#g+K|V(i=y zb|Po#Z4Tk4={MGFG&G&My~|zUDkviUXHlc0qurYxFOh~QC5pMvNe8=m-s!h_woO^S zn6)u949NArjCa{&i_1)fjh9V&B90!gvQoR>abce1taV(Y`<~C^gX683Bhc;8K0k?? z=$0+whE*{#aPo&JmP#z^>h&`)hiylPQG@+dWo2AX4+9R=(APE!BrPss;j*CGp%wT) zSa^q2n1JsEMs2Oz+C!H{|64YOjdC!56Tk)LX`uoX?x0~E2G9*KWgOYkzr$CLe_Q=N z6S0oT$}6o)3K$cb#4uq Zfh-?j&zx59MJ%w(M+%z$N8{_y_`o3A?FhZt{2VROgV<5KSHGuK*`}F_ip%lrg z`ocKzeoeb~*YQM^T9bfBoQD6$)vz6=BVn<&4O8}m+?$>q*@QpE*mjJX^9n8|qGr$W zBcDFze$65xdo^a@HOE^$71BDSBY7I={k31d55GZdI5&oycdnzkB-Tru=(=XW2RhJk za1+0pkExGDw0k M^}V*BA4C3tRg!qHi9hIoB2Sdeg>+vHnZ| zmVy7CEX^j6SpdO~JYU7G$S^;drbZy%dG3{;lf>Apv9=@OoF?U5c)5b|QeG%PIoot` zdV7-|(*;|N)A5Ni89GfubKZyzlCyRX-uF=Qx-3pjS3MiaZp6<5`9Id>LV_N#5R03z zJw+EpS>Xjoib6+6&L@ sv)DXkne~5}8#Qr@6!CzmDgWy| z-G^~1BjdLP-f$7F)ji~;gU7b~{jTutcd{edxskRIa9vIfH)AHe9`A6+7RNd>Q(0}- zh)tbHT$Xx2;Hi_Wda&@!WzZFeZF!$ZkvLqXA$H9zpC4>39_tmP<}cnv>&)9*$K({2 zmM2NXm^o#BUY&38Ka0~49WxdA1nuP2Gvt6DDIqVM?{Vu)t_!tCZ>~}2A!KRC=^F)7 zc_cE!pZ1{pZ26vl xv4HD_1-9MrJo8~*#{<)PO zy!Q )&$6ifeftV~JTCwKvq~}$1qhYfUmQSoxZ_mmh@&) BX^XKga zpMNCm=hy>UpzBXlHL%}LO4W#a3l>lZY<;FQ&C6lEJz(F1j!#usSV)vcezekkY_YSz zNZ-8B?gN|JBDEOFX5?p&J@CJv1cRu#v-7^l)Hc|kh=f~Z)YSMsOUhN!(h@9D%-Pr& z+KGgI03dPi%y096o`aEJNe=X4q8+^wQ8h#Fp793=x2LQw5-&Bw(f3cK#dRi9JkrV* zbBnvI3>hp)sk03E%wQz_FoT&cL?^+K{Y}WCcfnKp=m(kefzWs*uQ9c+F&fKnhdBi2 zlz8l5kB=QhrBhnhXXTX~mtA=UL*<;^KQ14#z-w?F^u+=tp5l^V zVa(kA9C2Vw `bisTulg<9v?U<&;+dBxR-Ru(ZhhGPpjV=rGxrR- z1{cz!$4 Rn5Hho`M&) pjJ1FLjx DAqKeCx0RcXIFg=ETo5#4ce^@t-KVMH(2BP*yhYKba-`Le_#?p z%Rr)Y(CEtXDVnIN$(m2~(S!s~%*?nU6rXLO|NH7;T4ZjSI8kqff
p=u_zt_c>o0tNNgG8-Sy>O*Z%Z2=i^R_nat1>yE$Ilaf7^Ua* z=sTxLdPI1NL=PDO;(EBWSTW{rc}8|Kl<>|4?54!MYeZ@qLyytbS)|ZjsAvcoj*? zd&7F;@K_FkAIJj&%w4loL}szIt~t;n{OfeZC~F0!KXS=NUQDJc6xO@XYkhp8x+yH% zMJS->j+4+u8y_285Z;wg8862|22<$z#M)9$-<$7n8>7-KNNWBuy$Y3q_Jyq?SRRmg z fGPo q*(G z=Zic`^^(j&eTTn@Flo{2VUe)a=M^n6(zn b5itu$CQZq6|11?9{c-;hQXR|;(I`!y!NY1DnRwvg+eZ#SdcJgoDz zo9xXWy`jFyk{5NaggA#T-lxglqquqG)h5E6(f)kVVtJ%~CXH9T9VQ@I#FHid+NG76 zCNT;}MpkPc&E>u)7QW-(Fyo_x8 e0dO1yvMV+`lp2&TK_7A}K<@ kStZZIJZyy-}@D|tz z;^5;SFLktbFAJQ}Ksg+n=RI4+oSi8&?c9O=IbRuW=6vXoIc>ILq5_> ? -jW=0*-#} zWZ1x7r+vLq?R3?wt>)%|6ELhc<&xuyr%QjEkkt H%VPud&C;oF*h*FVLRua4k+ZFs(Vq{pkW1CpOP!z}E3Ld`xDMxZvS+dbN0rL?7rRJp Dg*1S-G>~?I9(4&~rRqwZk)W7?$Y6sZs&=gsv?c`vq@>b5&<2ovha| z#KvsFny|c;JxlTRt6Ny8xl4jaJCa@KH@6G!=my;Z1i`=X)QjR8=D#NUs7D_e(%zQ6 zFvmY&_y09Ud+73#=kSlgN@w7+x-|jnedJ)la4BMs+mV=Z^KWedQBux^d#i@%Z%0%WO2?B`cbmte=Rjf#z~WO<6gvZa&pM1>nTf2jHeh7B5?^RhA3 z!nQk=sHgP6Po6%+NJsH>x4&5Rd*A)` dv+`&W*-C#;tymPJ^ qEC@e}{iM!Npx5Ri)IlkE znMFj>rQ65eqo>|=zR3IFI847%&41t)QiLV{Ey(BADeUISEm4a38iE=zGTGO?K=O?~ z%!;i)unR@WADKQ`0H?pQf>JUUO$iPg7I)XCIv@4RfpbL->C2u~+RD~%;QHp-9|J_* zkFg>Z9oGlZ{9DFe+lDNf&byUZMw}fZVY4k{7gH|7u&dIruLWVAW7kRWp_``Ey`7`# z`9l?-wPz5UjM52mq-(`-qCPuLSnlT|k%al&wj5s9r~!*IxMqSv&D`=Cl#hX=8R_`p zmuL6@<3OKHLq8(?c1dPHXqMb+b=beg$de3lV=(f;Q~|!c(SB^p)4Fk8m$%H+S5-fE zIY8Ug89s90SB@3K_hb}dXn0NK$EOv^i@&HqUXkmwm1CJ-;E)iToiT;Ur@tDeV%ESM z`<{At330J`WsOEIu#x+D=f>ap7P_@^M6B`RO}YN6V}9({>Qqvy8|(vh3@lqW#1nsm zk^ZX1wX2DUm6Q4!Zk4f5^?5ngw>tXeziNXDYEqQLQ2SoZ2$j6Qd9|@{XUN@VY+s+b zu|W&=31`8cB6VfUVaWHNdWxaotqmF)jImTVbtPoOfK5WQM)If^cjfpJ`00DLwkh?* zE=Fnc^aI*3P=hGEd&eon)ql}7l{0+~wyed)B@Mm^tPaCC0N^=aP3m-gF7sDdEC(3{ z0E{2h)fEA|H=gzlpf$y_St1mU<4pvz6~Q_e;OGzyC_Z0vGyqE<9bSdQjOT7ni3wL% zeTvmXjpE1$X_Kfkn(Gl8`%Z#_!>r%=vlY2TMLircGjfcbeLpV88?97L zKX7Ho0bB$gN-+f SV^|3pNhO &c|A}j8KQPa4Q+_VsUYnL{<@>s?Ozzlf$EV6t~T{Rbf~dnnGgK z8-{Io6%aq!^FP2n^mEXN=bSS1fXuHUG6GJ1El*}V)@8vkT~|Ry3Xu%NT)07!P~oz8 zC5Mc-P0)~K$~%$1kkOx8GTQu;5D+BidieC*AQ^tnc+@94B{90wd{XkmWnWV=nxfRz zD2=;jzIk|{L#Zqd$K&uYl<-zOr$oT<6Rn%W1!8`4vt}7HUU;m3kJ@3ZwlFgM8#22y z%iQo;R62DRFrk|yz46>9|DO$=%okCw012(9Z6vGI?c=s+FPNQ;;>=sxbCV&}9E=7o z=lecAD!B`^Jquz>c0=usB5Qe-0@U&rizUm6L%JU1aS@7y`bRn@F_U3X6qnDL!&MhQ zRyiiuAvzn33=5Yge=b?l;8awLzS0Mb`~gJVt+9=6i?Bt5(hfbBEGY+Xb=#~^fomoE zV`oG2p)0Gv0YhK+SiX8PDqsEkgQQZ~qPe&TqaG+uO-L&1TH%o_ZKJv@uK4;{Yn@UU z0S7Hkds_$Ph&bFYDED{45Ru!Q$+Je>*<7*}#CLSpkjbX= xsbT(dLFa3p{z%~a+(-#cC}JiQ%n?w8Xl 0l@Er6Ut4_^TGq!i@D)4uc#23lS zpKj>snYNt&JT&wnW*D?tI}(V<$_;MQ2U6RgKf*a0s&zn|PP_xGYq3m^X0Vyr++2MV zdvVr$Pzv@pfGPk4a(aJ$d;tK`-@h4+F6(fqZ|XasQvwtmf#1GF^{}DcK^Cxwyj! CMWm_h&wX0$@wvukeJd@fqi6m|ou$2*$?gqU=NwOEg}zY`aX2K1TAqyQcjy8Bhn z#nV_AW@w5Q=0nU7b*5x}gC`_vYK<;e#0cM JAibxH(obevb{rg%Xv7MGuP2xiTXN-;O?6u_l4^1y3_|Xn*`E?V^Li%Dla8 zG3ela^+D4V(kN}wjOP(VJuhpGAMO@%G5F`D+1X3~2rjX@K_>@7G7m!3Rg;9~ZwwX1 z35BYTecmVDnCc@lza)a*+)vV^B46~yKXgvpPDcx3%#!utsMvKV>0=7~(K*#iP}|@= zz^Fo`%CU{RRc{&fgR4W;Sj7yj%8}>+`H#_Hr|hSA%UB7(ZGno_ZXfeUeKv6<+PWD- zk4Yxo0ujOSF`c51QwAA^fElrY7H%8$V!Tsbol&a9JH;d4{K}BqC~hvF42jgo{yr~@ zEubwKP_`=M1zYvBH>uk5x=QJ@G{Wk#$L-6Uebx|F=bGQfsUKWkr7#j#X!e%2;ABzfN^NL%8(O7b-&UYE0Z+Z{ajn*!(LbQ*z-K zK10WIr*C$lvo^_+XMv{qMMGf^ljn9Z#&j?UovWb=MM9)Cf>w4eM@(d1rwS2~3d4mS zpGssD7%&%9QG+uW($zam^UNGE4*FL~#{KFf7o}~2sF;47_}U(mzKvhn;->N2gs06~ z9xoVMmFix7AjmKjYLwdLPUn={WeJ#yWyLeSBI--RBF1ce6)U~3W}wVH_|8r&^~<(g z&&KfRl-19fU!UG#wa$>B`}tE|wG|(ykeL~?bo~lJIg7FP#n;f(zm4xv7a}{&+eoL* zT_5_M&mv$Oi~<&&7-$D9c6NJrFOn#tIp3f6v0FixO8``qf`Zoj0dHcdj*!z^Hr0_b z1^HE_;dOOjL;O>lz&}})`85y0^K^wc1$Bb_1a)-l^(^cV-`C&rzBbI+iy_vyKXyC= ze4GVGip0LCZtLzmenYOzIJ2ig9RWbyuvbb)Lr$Iv#*}-{G6%T$xuJmU6|P5Tw*%f< zvl4dDw%&>__S4?ua1@q%bUY#srmYEm7t)n5H3B#(cqK%Qhb!Rtdfgy~CX@QjI2#^V z@{$c_iQ@m<+QQgY{aYJOJ!sC&7?ay&$P@PohCs|HnYv6*nv*xrD+1*XtDRliS5E)E zSL%%lbQCmHN&q2}ElFS^R~PxxwF paaIyH)IsIbzb^BvWwtKHsi^cF{r&1zk3yvB-eNK~>FH>6?z$Ss zNel&R%I(oQF>G^8+iDImoQ&_$xY-M5^oLBSYgnxrf2iy4NR_8g`s>%iLix4+afZQ^ zBnGXKb2F!09 !Zg!2sZ-|^j@n2QVL4shLWnt|sHgbaZx|sHCIbU?+3GigzH)q6U z*=KQ?>bIe3(6F$W{w;p-p%a^h k^&16#b5Qd^+$>1N%RFRKM zW}|9UckIwro#CX7*~Ymn2g4-iMv mD;_rsi4!oPo1 z4exzRR9lTYz2C(k)uOw4KKcCsyb`mtusEm6Q%EARD5$)rnPudO!QhZxHd;-dc}Y4j ztbg>42JO+^>F{LaB#j2VhKF}inLlc+ud^Pe28aH|noCdLo-`(moz#)Ts;jZpe2_h4 z%0z^n*Lk`lo;cLTBvn5Cw^BGuHuDp8orxL}C60X!^Nl(mof^H|=ZcEli3xXAB3nLT zhJx^gHi-AtWq9}J|A+!zw#?S58(G9}4n;M}+hSp>%R%^JAUfM=(-kPbUc5@7+f^i~ zcB#I&Mg>H }1b$CLIFd2^U5KRi*Jx0(zFFxNjR3 zM2P9BV)M&Yl+zT<%XR(m )uSJ<5F+3O z#s+0?PqvnWq)5a`-!ar^vnD1Io}8RG|NZmy GD()q2g`Mfa^hZd zd7Yf Eh6-qu6}^* z2^sA}yVof31NJ1iPn@Skn7!$OFrf^e*=plTdPf<>{e%3G+#S={j8-0vmclnwb}+U$ z&8#KFAz=@30(me^LdU09_mbx7IEi@W`N}>P9YsA!sKw(VI;xHK^Qr9~zA-N-y+yk( zYKKPA!@AL9SMW$j+*`fRtW1s8RMdNqf%EUr1OFG!liv<@I2_i^Ni+L?&)I!0DtiE( zGd0_x?vu26Qxu_Q?cE}#Q-u-3B8dXzt7soR62?kK@+NmQwJ@uG5O~|IgcbJ`^TMIg z Oi2_ciV6Y8NfIo|;<}r=@2 j_o>%NO8>|wuX46% q%s6Zi706}-MS@W=$JpIHbad1xA$%== z`ulq($Gw?Y-Nqv-NPF(N_yt&(wuLH|h^xYb)XQFfAd->EaR&Mn(3Ga aMQCx*s0fkwWtIy!}=n2p)4VT;ByLpHs zbDxqj+tt Auc4zFZVLOwuG;r*4H1*)Owib#E;S+ z2~)g$tY*C-TsB{GwPRsru&Eiuh>b>~{$87m1D&i=Zh&r(wWh(0X^6Z2eU-MmQOu{` zpV)s%20@~>6EYvRqlVLTbT1JLzH>9^gI&iq-&c;{blbEs&+)d}q0Fl u|IXq?6B2C>_b&Hz0Qb4j&oD-p8lGhd}EP_?K6h5nc=;i z+X}7C%_U&7x5}rCW>Xu|wDB3gq4I36n?lQuCCv5fz|5s8&3Y~(I_S$G$(2~}o<*5u z$Ex{)^M3ivNNlaoZA^j5qMyN)S6T1M6y0|D^KV0 Oh&v~0ykRDx z5So`d?fm51Xt3P9Klc#h^iv5T`!1Wza#I%=;>c?TZ1xJ7@mZ#?Eg8rc#7tlFQgKL6 z2y`ZXP5wQ5e~l_pl*az~UPAs42QO#X^`BV*zkI?n8G6xE!bPOWt4n(B-kJI;-TJrB zHMFi@CYub3`AN$P(k*^)S#xH7X2O$RH-!5)y63HPVNzLC;G|*6;L$zKBGmeV_<-%_ zh#q1QGNz%C%J-BJ*48nIEkWOX8SQ&Q<^<7bECflCENqjNG99ma^rGMYc&Q-T((|W4 zr(q^kz-xn)m5=@Uz+d{3-QUa;J&?GYr7;1E440uG=6h<3e40XX1lwD&`t$F6F>949 z32D?D!$=PNZ_%!l!UKK!)DsifzMjwfG$w(9*IG =Uhw@-H4bt`~X8y88-uCy#r5EwsOUDw9~MtoB)VN<@b8 s3tZBZOrQhH5ImqA zAzJ@xxm?+euNVfLbWBjddp~b~o$;ocrROZ@Lyj{SU4T>q3<+Ssu7Y!x8?^US)Z0JO z#cNB*(|*VI02wItSRC+S6=VqeqzSTLwWp}65rxPybxloix83gR+`xw>0n0P*D>FEj zzGny$-Ns8Xys+c R-P&g)z^#X#F6<-W ufZIbX_SRFVD0MVPD*cB2xBU9(S zTC$;Ix^TV2@xW>BQ%bMPw^<{F+=VJH6wJB#GX4Blz#Ha3FyvOy1blj3Ftr;)V%Jxg zo|(N4-UEtUFS}g=FGMxvehMzTL@9Tjza1ee+S ! zTuLaLF0(J;ZL#N>El~i_dq)JafeL%?73&A%E@P}`t4BUNmD-9u`!x>f?7ZH-n)DKK zkCfC8%6K7U$mBIM$F+_!IZX+!^p|}HsqYh=60n{LJ2t!N=yzo7;<@@X6)MXyt|X!K zt#q3#AclT4hX=g6N8f)@(5KObkK$d8VAak4k`N>F;>$BFq$lg|Wdt5Q&9VS PRxTIl`8g;&pR(}-l|?_?FZ3d4;S1%8Wu{BKkenro|O@T5cpci_-hwNVEOZT z5J9>{X^QYiD#N+)1rD#zW9Jvk72;g+>aTW+zIWGE?@LBM4p(1EAKQFYz5ebScB~FI zQz6Z0y>VHjsOZ33)}!5x#fuHdCoY1G2|QmllTtXxs4{)1x2Vo!as1%8z?Y5i?%!|f zw0qp^rZ(0vd79z^JLgP7HTb;rD;Wr;_66Lt&c5pxbnm&T8>@23D3?O745-8$ycf$j z8G3?}Mwe_Hpe(aiR>#j&%*~8H25X`-c&;=5GoOF-_*A@M4jPSa vS& zGl))(LfHLYKzh0sQSD#yFeV5J;G1?WyC(FR0vT_vd(`(@iIOp=zkjU6u6JF?$jLtt zg>-k{DXF@FH1Ori=fAiAq#WQse5v+Kdv@lG1%d(uNzKIKvI)V9n_%2N3L#k)%lwYP zss18$ASyN%emd#DKD?(>nD8Qsffn>m8`bQ EDFz77YE3c7k`Pkms+ z0@1XARgXsW4$w>M|1*03A>!?xvn73isWQviWLFE(Wm&bffz?hM(W7UJqVfa~ >!T%*GpB0=cC&@9__k#@3?bSUY-3Go@&@5rsh4RBwFDf>mrKV z%|79=hxZlZd22_@CSi^Y$4^_V*q%ake{WBx@+M zA-%JcXT}ImHT_)LYBV {EyH{j-m2o-V!;+|`4& aMx 62y7C>VL@!w?5?Sc7L_=pYj3t*Q(wPWmyIy?O+Aq~3K7-=pwbn}CJuw@U(fG@ zeDh vi+>aDyDG=2-q)QiaM^&&Gmxz8mfsqF1YR@U#|-RhnA zGM7ti#NYRB!oB^ng#6qGCMTqjmHk~^0@Jn+Bgfyqu}CF7IUuFX)&qfZgb<08PiA$) zQ$gl2VSxr5NVxzqGzqy3v}MydKeo5CTa9G*m-kRA;_5`sQMBJ&z6A0N+RTB3A=A1i z;y)vq`Nb;Qy$xE0;n1(cvMKJ25R^mD7RwrK p4FyWF^(>4?y>`LVbIY0mQxu z>}%i#_+E^{faBlepixZ^a&bRoT3@&mxQ9o{1DcbVGkhZdhp)E`tE%gwh5-=-5tQyO z>F$#5?(Xi+14_4ax3qLggOo@K2uPQdbb}n=UHClD`(D@g @^(n*zZTU>JoWO{ksGYLM-)ekoSfx&2MR!J6&vW&9 C2KkSt0xkTY0C7Y^7N(vvD^W> zOG%=vdZJ@}OOoP_kbe{#eKZ!oj_zM;Ho0UiOYLut_6hhI7OYj|^9y?y`w2fe NOmpqXJTD2&i4fF-ETSau_GiC+j)#qM*E-T4q;J> z(eDWHDD-@(8}OYV)vCELO;A5`L-Vs_REbnE+4pGT 59TGU?Rc9eD^rIf*m{>*Vd8~BQ6Y8ZS*foqR47qa$f~>MjLMZ8`qZ%G zCM=lTdASBfI@5Y9cdVzL4Orv~#@nyoAqG6s6RCH1)nK*a4O%sn;gc9x@wtpBr<0g5 zMT?vu>ze!vogMVWWq+NGD zbqy-?$hA}NS&o-cg$LkL_+je-fFFG(9L3V;l$0OU{b {crZU`@?Q>*HZf^f_3jN*1;N# #)(lc{KRgwWb^d(zy zVPQcTGjxA0kUB+n<}#bn@}<>yj!`9Uk~HNHf(z}>n#eQXk=x&ZYe>A=w+q#(Slry6 zd(qI^yriT=TU(nnN#!Js?;3eiGmI-?7 zk|JWEUoj@A;yP8cWvSR9!FsXXTe9IPgALs~O3Uv)OrluKM~v+cSM#^y~#Z&7)51G3ea}P7 L{V22L-ae-pYjCE4dEIQ}-LqJJ zWit%<&xD(wC!|NVgin|cqs3pM` 2Zo7A3K#t!&!ARS+N~%N -}clnDX?3;D~uvC8l0U55PPOv2p18JfR~~V|RfU^&PJ%HD*mcZ%+M2X$!)aa`)Ht zyB+plBxYDquNQ1~3QxKVNYiGPP-eM2hvPwEE7RFNhJMwSts1%GJ}mUT3}77k{tLdm z+U!fGqjJNj!f1jNsW%o`(7&C|-#aqg>)PsHwh^w+H3AMUutx;~xtv9AFL`7l_#DNd zdAFUp?;+tIMwYq*^HNha1&Gm>mzS5?ut0L#d*qBBFQqc0$${^qwSfp|s9tMI;u=b0 zuPpUf99*iJvgY+Z$e|n618AP5Ng_S*ee0xIV`meA{$hT9{J^_t==l14Z^y`a=ZX;< zdwbvV8hFY9M1$9Dn*p?)0wnrPtY%{NCARQqHbFs&z(*MD$|u__&}AzQ ek|e|G~>Cy~eH3=; <0R+iqA846!coM~N85>330q5fKtk}!b6H-Ir0 zC{a^xdTpD?>^MLfdEqMvba~(n!lxy;vZ%7gj&z~MEV#A0Rb>^j4A{%yO--B3xUzQt z{Ha!djZa`jMY!>^9DwqW@mxVE;5TxVvxpgeIp3?Pp>ed-HC&npiCkV^8=XI2YV&B| z8=5tODrW?b0P!L)s^LY5Co%(QrfVw$T+kEF2hW+02^sY=3f<%Ph 1~%az3}TwVs=^A z=4Y}C;<7V76rA>QbhY9MxjbME>&RlL(@>K)xT9~~ X^aZEnFsFYyuDl%@}OI=Yxf@4v^lH0cY?#7%FMHcg|^Qkph(1 GrBW{Eu=K> z^!JLHWfGzuOTOh`>uu5Vy)&0gdrvrrl&FlYwT&aRL?d&TV(A|GV02SYp-vgqI(ciy zTzf4X$^2T53E45`U^Kp?jTqHhTa->UpAEQ4H`OKL0T?QG%I>A$;n=_HB52 zX!pez8+*5!`>K!H#=bYiXu09vj=>Ddj1 kkj%N!2d&texqHqB};G0sXIe=ErKqiB}rJ5kk(MEq7Jm6dVsX{Upspj*6E;N6} z`it{AIYRLJEN+Mi1XAr9Z_VO*w8V>#PhVL*G?aV3JK0BccS`zXzTMpH$+m~G3b}j5 z*ZH8_kEZ;l+x_yw)qWQjRM0h#S7}562F{I>`ySBkmTsxi>GO*{HSC=o08V}!Grzsr zjAzXl1LmMEJ6Bb0Ih70}Pg>xkBSRPfV1Du2LCrU9;0G>kpkX^<%<|@LE^v{Hw~G#< zy(}tPI$4X3dJG;n!K?dFf(je2cAg$hf&-s%&plC{t+lhWas#nwQbbPfCD5~oo4x6} z+Yz2KoSvN>&tSKjv~Kz|4e PM;5P2`?c zwK)p?WhVJSUW#|W{Wx@J@%)EzBX4bHV_7Iiq<7|qA`+%d`22d$=QQOryu?U@j-9RR z#l!SVwk`ccaW<*Lvq5|mP2hM(9IH#6C-YGrhf9G=Mi+yt9V=L}I9=xBuMLmz GLk*X%c#%x7tDwCsm*~&5J3sr?zeN6o2H3BuGb*6?fZ!@D2!R?G{ zFZpUqG)$dML524#>zc@>qNrWHS<7z1cOSN4%K5~$Xh$|p?6_S{Y1<4@E(tb`;L{3L z( ~=@d!w ziSxxt-+k%1vXFArOFqgZj$)#9oEc5&)Gm(g(k95!Nbh_PS65gwZvJ)P?OXXQOD0@> zJVEi`;MjHA4|-SHiTgbXdJ*{0Baip-RSIOT0; zk^@DW^%N{%i3A#oy1HON d$>}? zoOg_sl$9x5e;6UPi$tItqNbt2!{?I>d?Zy%N&-^7e>d(2!9q;wA+55p<;0N2=Im;D zCOopVrM|@(@{C`|cZMZ}*u(vOKdmz4GW_XeAvpZq<;4t<(pRzjJL>MCKMVZRW#6We zX37!f9(S+^&5MWp)$NuS!XwM`mox2oKbRx?mcXj!s5;g4lWFV1oms2mkl;_3w`S+Q zlXA$z<*Xn4G(%}I*(8Rk^YtwprG7qf(;7 zU&zWMzPPU`KSuM{SpQS7SPIMe_2=)X*TOHF#j&aXWpRs&N=imlyy?=w0mc)ga{fX? z19E9kgiqvCx4|E`QyQ6UL9h3Kxg{N8!@$_|e*~kCKxCBB9#>Ri=jRVLtl9ikXO=~L zY;h`9pv 1KxL3qZjvgp&PI@~Pj2`_D@Pz%ZiRSIG(?$kp@*wYrHp?f9 z;#DIFxU1C|uupIO8ynS|$$3#ugVh;3n%XWUyp+& 7Xu<4U5dr@JV>XdX1i*UY zXyBM0ySge;r@c1FJh$IW1b%BhNvXSM%QZp93b+9}8NCsP0Z=;FMbQ-%7uRUUY?)kO zoJTb9?Yk+6B)O_T44u@*Yd_2(vTo7^ediJ4Uu!yqQshtXuU7$m^&UiSa2o;Iwq{JK z$ NE5xh{q!3;_2y65;p5=F~vs z42XcX>>|mc^|O>pP(dp*rM3EO;yk^KswS6$cIpV#lig~odSOw+%W$(z%c3msVwa%m zMZ^(?ac}e@x8smklz$!Xlmj!qUBA@rmF7$t13uF|nvm`ye$gzTB#u^EUy1lh(L|~8 zfpa62W(M3$q$y*7j;x_l4L-OfdAwSY1OHW|clL1kFp-gw+-dN sB30buiW_1E$qp<&jP_2oBYIf`$hB{Fg|#fxTKq5Z>JrsFCYz)3+9A1*do zjw)Bcw{h!E9jnB$#G4O_DWS5vyZifWtJ0byv+ZIe`0iSo5*-8?zJ*0p1!#T+)*}Hi z1WrUti@Tn|(e5A7_n%E0_5J%d&gy``oVriaH^?g*93Xpj>6-rVi5e)76m?M$d$}TL zB>sJnN*hO;USpQTG0XI WZ0_ER((=`0eb=q{N z7sD9amR5kieR4y-x{7PNS%pFg&)wX c#r0;!R z10*uQkPX359s0{NdsZ3Xj~3&(ok0vEqhsUsUuu=p-0Y8cfn$s;dZ4Xsq7kH3u}=G! zDnK%mXq0HNqqVDMIbnNLFony?b~*6XHJ(@nd#3gQXmRhlYheN>xYNNKhKm+Ro2g+O zcR!Nx<#cTasDbU|wu4oy jN7D5ecieSHv*mjG zE$WGjF*BRE-Oj4 Svm4>xC+ILRuoASqT7Dt?Q#SoW>3}+>1$j8Ap*-hmTro31vr#r`Kx*}D zV)6WUs0Td%$r(mPRVsokzkm0`{>ZA+b$i>RoukctAlzbVA2#?*4FjS|N+dAg!QNtr zemHUH+45xPagPD{^r2q2V=H&S6AL6JHe_RKOP(X^az2+;###LUv^ckGPhdRJCp8-g zKnVb=0}5_s8Dgx8;qD@knXV2(nFi4I7jcmh5-5>sCZ0wCsM7)J-)=!`OEuD-NzTpf zrBGh{{CvhM))K>w@EM`my$kOEArwgp_GvY8mJW$*Ave_Mfv@LQ6E8wP=z(>Qev*Ht z)pUh3jDYRgzHNq(4|FXUG>Wh+0?_1jTaUEm2og=5W!G)mXcA2`i8|$9>isPlH)L<3 z3(M#Lym))do0*jfhLOYL;{*P5*_COD8O&9go#g_i|MiqWljC&bC)kfx39!pHKi@iS z1_ma^#E~s=WAB$g_B`z7wl>Wsz+V4P!i%Zm)*tLPDlcD)tDr{vGU-Lg@zcK7m42<8 z4qA-koav-)KduHg#-y0~xJJ!q$WZ4BulMHo2^dK$W9k_Zz9?-t8?}Wv9z8xUySo{} z28B@yBcz)De`%SnW~DGtMX1u+=k8X7-}LUeS7~5;@w?{QQY|mpDW0@#{kwAa%fS jsXqWYUch`C zLSkgD>ma14=?c3hd5ej>N4vhpR*-@_pQtSK!ZZH0$iG-q1th^!QwzvF{Wrh1lZ=S~ z`vW{K-X&6&P}2azV@^S4nZz&Nr)-Wb;r7&h;JyIwI6e;Q#4hrFG(YR2<)bwqf&@SE zM2%nUlELhZ8}%PMm9;9ZwELy0mWz|V&abQ61C<@jynbrvt&d1@WMG!|;mB<(Z++|7 zkRjMLu?h-Ldh0E=>*M8e(7+4_3rta7^lVC@$&^mxDo6@JPt4$6#WF*6BS<_kg`bk6 zxHwdGjji6!C;A?MTxm>(x>?<}61146fTxv71Wu1A%7H*w42C7afX)C@7F-GEf5G)% zM)~iW8hQiw;wg>jNOAY{B$q*7clLJhcnm|TRon;<8>9xmTCAD?<^;?@J3zmI5`d#a zMc>;AKYp8KR)Y_T>GGa1_aoR>W8u+xW^E!^pZNtCLtwu-XDP+*oK>4@j zIoEhxKaWyG(Fa2)4A}rHQ8~&y3j1Sr_Pt>Z2JA*e(cC`RXNboB(A#aZeAFksIgck4 z9%e!^%+4@%WeeEbfA<5jpmVDtP=0@};dZM1@+GL(`1kK&we&GdGRUvsn*wE8*TV%g z21aHOX$X>|B=GUGK#uJ{c7JxdDU~cMvE+z$NR$&!4uO%TN&@b|<~k)s4RY}RR^VwP z{3p})BK$AZs25Ht
G4EK4h}EbRtthqxMQL@BA3B~P<%lnb<}*_C>Ki+Gf#ey| z XAVFd7M@w1d2Sl8uj}KmzWZz8Xu?btI?Lzod zJlJvtIzkXv=Beo ap^k!a}6et_JU*N$6KVyzFPy&j?qJblKkO;ttXnARkRqFlU zrTNba#bN(fSlNP_w;DfeU8qdUA}rkEvQY_$!~CYESM8lb!|!V5hSuuLV8EsMsxaYO zScnB%#_!%>M9gRjK*R93T`i>!p>Kr8b72YZUihkOSeToqE7OL65BjxuAvKCQWh4eg z_<4S3!!z~bqbHyir8bq+-o_5&-A2Upg5h4@aAYJ{j+}lp{MfJpTNHdeypj$vQ(tDV zM?&S&Sa4&2N(&&HpoFvg3PcNdc*K@AHlRA_K_r2MEL*OgX^TQnDgYo{*2tP5@BG*s z00UsozWvLYpWH)(xd{_HEP4#^aIe5_`Dl@ma)LZy3Y#<;GPi^C?w Bm_}t7&9P7G2NATN?x5JPG*xhnoPJl`PL~6<4H)$hov>S*) z<&jA08UtIdCe7&*`8 2$|O*1pGAg|AnVdv#lnRde`tf1U* zYb69qwk1-CHdT@$kPF!XrCtFyZteVG)?l`m4gjtGIP($df$+M>!^zvb`|U*{r3-j; z6a=%ezxDcbtOEM;e@Z*6a{QSlP!V`*L33o@L{)5f>bB(@+W(!O|18Xk$$vXZoUjrp zC)E`oqZ6HF56ViQ%D2+uwrt37Z)+ZY_Y_vw$t9B#PQD`pgX$G76TDdQo4p~DR?ow5 zEpgoAHsCkx=$HzUV-va4K3f7Uj5?V6XJR+^uQ>PBBvf!Af4}%1KpL}NXlRzFfU7z_ zNuKIOxE74HqwSmCjfi^uRbV0)`ZfButKa|{K-M4rq$2bw5g+4nUxTk`Y;62mLt`#P zs^-N@HoU1lOi(uNj}bsGHqmO-uYKk~X6Vp;H60KB;QHUH+<<8zpyeJs@Jk$~*~Y1{ zpTFVv kH#!LxN{$Gs-BJT$;-2a7^(4ox%V-{5g zY^2Z+DZ|y{PXP~%bwf11v2jQW23lk=LI62bp!>lWL)}wed(cz`IW!ijNjH*YYPg6V zqHSS81#iy?J|r#*n*bC(C>n>JJXx2OpI?rgSgMBm$NYTLo}KMmh_*uV#Ds>XG TIRa`8T^brGRuhu2 zyMOk4ESg-wjSBN}M&sPE1uY&Kr@RdQegs^koA<;A_Pd)z+83 z^pZv?PqK#lH3|YA5#EXlw06cDdm}t;r{)l3p@D(zx_g$+ySSQJRh9w#-28G}S-sY5 z)f$XCRv$CL+T44)xD@a)M?0|mf6jo$|IWaxltX5^$|9gJMU? OH-=TRV>>(JG8&g!4U^74Ra79W^jhM z(x}jpo_&tR>YX& $pvl3_tqH>$ zW> %`rB!3kt$jWk2b$`$Q>TY-BoEMI=( Vvc^N!P9$RH&20PCJ7^nlRqtWRuc*l z1~~apJn_rZK2(R#;Ws8J`a%;22Ph!@%zjr?KK85#R3!aB;b8;?Q?RZsF#$Oz+}-vn zOq(p=r?$aN7mKi#+G(Gsnehxa4K DxA`{0WmQHJUfiL3hlcCxgGi?2J%QZUxKZ_QI9Zer3{JO_s64@<6 zsDg1&apmqjaBKB(I*(^Hzw)r|64n0!0Scj!OsHDOv*I+|FnX8{+!DUud$te*R!-aV z%)=l^%?SFEB>Sjn{&>)`$;9i{#?~eO?U7S&vbn?N&24lxKeu>KZS zCPF8uw|}2m1*MrMCop+E(e`)|qV(eb-P&Q`&_!Ks6-#{P(sSrX8~)vVymxejVC?B> zITCW7%Y50$2VB}-^-OJ$TV`!BVhLNXdY=YMRu1erCrVR(+d2oh3g`&3-EK(Q#3-wX znjq;pbe%JR!ql>8>5v_sdK*#3KX(#9D0)*fhX@1@yqKrKW0pfZXh0YXyqv)|11&`i zn)Dg+Vd4V5-!>3SUki8q90J-9XCAnoNVU=*wsz+qO#)^<9_8k?MU&8-2V`sw41DK& z|G(0;S1%kPcpyrq