From 57100fe4ab531bd6ed7e6b493910425273439bc8 Mon Sep 17 00:00:00 2001
From: "Yangkai.Shen" <237497819@qq.com>
Date: Mon, 30 Sep 2019 16:02:02 +0800
Subject: [PATCH] =?UTF-8?q?:sparkles:=20spring-boot-demo-ratelimit-redis?=
=?UTF-8?q?=20=E5=88=86=E5=B8=83=E5=BC=8F=E9=99=90=E6=B5=81=E5=AE=8C?=
=?UTF-8?q?=E6=88=90?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
spring-boot-demo-ratelimit-redis/README.md | 296 +++++++++++++++++++++
.../assets/image-20190930155735300.png | Bin 0 -> 349453 bytes
.../assets/image-20190930155856711.png | Bin 0 -> 302433 bytes
3 files changed, 296 insertions(+)
create mode 100644 spring-boot-demo-ratelimit-redis/README.md
create mode 100644 spring-boot-demo-ratelimit-redis/assets/image-20190930155735300.png
create mode 100644 spring-boot-demo-ratelimit-redis/assets/image-20190930155856711.png
diff --git a/spring-boot-demo-ratelimit-redis/README.md b/spring-boot-demo-ratelimit-redis/README.md
new file mode 100644
index 0000000..b5fbfbe
--- /dev/null
+++ b/spring-boot-demo-ratelimit-redis/README.md
@@ -0,0 +1,296 @@
+# spring-boot-demo-ratelimit-redis
+
+> 此 demo 主要演示了 Spring Boot 项目如何通过 AOP 结合 Redis 实现分布式限流,旨在保护 API 被恶意频繁访问的问题,是 `spring-boot-demo-ratelimit-guava` 的升级版。
+
+## 1. 主要代码
+
+### 1.1. pom.xml
+
+```xml
+
+
+ * 限流注解,添加了 {@link AliasFor} 必须通过 {@link AnnotationUtils} 获取,才会生效 + *
+ * + * @author yangkai.shen + * @date Created in 2019/9/30 10:31 + * @see AnnotationUtils + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface RateLimiter { + long DEFAULT_REQUEST = 10; + + /** + * max 最大请求数 + */ + @AliasFor("max") long value() default DEFAULT_REQUEST; + + /** + * max 最大请求数 + */ + @AliasFor("value") long max() default DEFAULT_REQUEST; + + /** + * 限流key + */ + String key() default ""; + + /** + * 超时时长,默认1分钟 + */ + long timeout() default 1; + + /** + * 超时时间单位,默认 分钟 + */ + TimeUnit timeUnit() default TimeUnit.MINUTES; +} +``` + +### 1.3. AOP处理限流 + +```java +/** + *+ * 限流切面 + *
+ * + * @author yangkai.shen + * @date Created in 2019/9/30 10:30 + */ +@Slf4j +@Aspect +@Component +@RequiredArgsConstructor(onConstructor_ = @Autowired) +public class RateLimiterAspect { + private final static String SEPARATOR = ":"; + private final static String REDIS_LIMIT_KEY_PREFIX = "limit:"; + private final StringRedisTemplate stringRedisTemplate; + private final RedisScript+ * 测试 + *
+ * + * @author yangkai.shen + * @date Created in 2019/9/30 10:30 + */ +@Slf4j +@RestController +public class TestController { + + @RateLimiter(value = 5) + @GetMapping("/test1") + public Dict test1() { + log.info("【test1】被执行了。。。。。"); + return Dict.create().set("msg", "hello,world!").set("description", "别想一直看到我,不信你快速刷新看看~"); + } + + @GetMapping("/test2") + public Dict test2() { + log.info("【test2】被执行了。。。。。"); + return Dict.create().set("msg", "hello,world!").set("description", "我一直都在,卟离卟弃"); + } + + @RateLimiter(value = 2, key = "测试自定义key") + @GetMapping("/test3") + public Dict test3() { + log.info("【test3】被执行了。。。。。"); + return Dict.create().set("msg", "hello,world!").set("description", "别想一直看到我,不信你快速刷新看看~"); + } +} +``` + +### 1.6. 其余代码参见 demo + +## 2. 测试 + +- 触发限流时控制台打印 + + + +- 触发限流的时候 Redis 的数据 + + + +## 3. 参考 + +- [mica-plus-redis 的分布式限流实现](https://github.com/lets-mica/mica/tree/master/mica-plus-redis) +- [Java并发:分布式应用限流 Redis + Lua 实践](https://segmentfault.com/a/1190000016042927) \ No newline at end of file diff --git a/spring-boot-demo-ratelimit-redis/assets/image-20190930155735300.png b/spring-boot-demo-ratelimit-redis/assets/image-20190930155735300.png new file mode 100644 index 0000000000000000000000000000000000000000..2018be762e578df7541f20d993dd6cb8469fcf85 GIT binary patch literal 349453 zcmV+W{{#SuP)H2onXz#Y>qGobEKu1)j8a94sARQ0YRZ>$V9((13{W=#FDx2jQ-~uZd9g7XeP)(8 zf(tQRA!xC5hr%oMy5zm=5GVBzfckxs^-V0XUQTGH1@K5 z`Eb415|Nl2tHITUqNFGd&u%_XmA?_hEkX%9d6-8ipByt>i$E9_uC5*H5K59Y^ VO4aAFuSiWot3#7*!ZJOGb@*AO^7a9`YSINQJM36BY#ghzzygf7DE8REsV zuj*leiJ%Kch|tuW`DM+x9c1;wL-9b!54mwBZUS8JaWE1a4~DV5pq8V_Tv`3s+<&X# zi>_ vj96o+}g< zE8mZRGgCTSCe9WWve@v=FJy5geAh874>xx|0F?hD>etjOrt1FzVP5!4S8yBvzjCO| z{!7QR2H? Fc&NWWuOAA1nWRG*bKIUo!}?14>W_r-~>1WE`knl9o&Vh zrw2R({ooB4L=c38&=Ce=j94JHh%@4W_##0_I1+;-AZbVjl8s0Z1u_@;2B|<+Bh| 88#m)$11TptPyL4zw=eB3+uz) z<3yZ+vv3! @rQUn{+U20m=c@`{sb;zG9jBVi%>?W zBy1-fB%Fp%QxD+{kw|0`?TJ3{X-p&L5a$q=5jPU|5RVf(iQU8j5{YC?awY|m;z&GF zA*qbCfwY@+jC6(6LwZNnB3qC>$PwgpvV^>tTuI(VK1#kqenK9k=u&Jc{**Y1fHIr1 zg0hX$O1Vtwp$t;>sP@!AY7#Yvx` zvj@ zt@kv2niGvfn@UsAmeY37j?-?_UeW1vJ9-E`onA;^POqn*q(7j)(`IP9YIC&(+6%O6 zw41cAXg}AX=-BG8b*Af-=v3 ;3tE2 zgMLGO!*PZwhQ)?8hDQv$m>AQJ$z|p-S1|W6Z!kZMG8@GnB^ Ij#Q`FSS zG{JO^=~mNArUPc?W|3x6vkhh^&HBul<{{=e=4;K5n)g~TEP^b=7HchzS^Um2WU*O! ztSZ(iR==gGWt64Da*JiV<)D?lRkGD$t36itt*O?&)>+nTt=p{oZ7ggi+RU|Su(@MP zvGuhT*{-)eYx~yD-Y(VdJG*APr}jqnT>BFH2K##sbcbMv0*5+>YmP)mU&ma>jgB2o zsFRnI$f?HZvNP)J?JRcQ=-fGmFvf3;WK7+dn=UjLwo8#qgUdr#rfZDrV%KKZ=VNWg zrjK1U_UzctZeDJAZrj}My6d}7a9`}+>i*Kh$%F4v<8jTC?it~^z_Z2k#W?42!f~6% z-ST31P4xQCtIg|^w~x2XyV1MX$Hphar`G4DuYqs8?=s(WegwZzzXg7W{oea~`xpA} z^ZzrzB_KCoSHRQp_Tz=)w~g-(v $&|Cd?w7Ba4MP>ofusm{V2vMMi$dL5uG?;;+l!~Vr^q3vCVNH zjvKco?tZ*|d_nv#lZcbzC)G@PoZy}?H{om|BXLIJuEaM k(+8%6PgysmXR6oKvZ*(w*-tB;c7D3a z^t|auX6Ve|&Dfto$VkoDmGO}m$E)KFWO6fWGyC}*{(Am1L5N_jpjQ|uTrGT(6_~X; z>uGji_L}ToQLv~|)F cv-H|(#mzuXHpPZkOe@LP)$(5X%X+E=f zW~bCyS|;r(@Gn?b&@YRYZI>hRY4Vmr1Gr(oq;ODtt9V!xR8&*+ZdS^y{l$94lHyCV zon|kc{iGzKL5p_}SqF)!g zEndC&^*5>Cw3eEcE-dZ-HuBqsGVL;1+0E|)zT3P6Um{-8zSMK+hNYj&1?3ki+$t(7 zJ}%=gyYRjH_f_8yEzerszQTLOrj^8%l9e}B1+Ut h3iY*EFqVtu0^sdfkk5 z=PSomZeCAauUOwz6;su+!DhqC4IisT)z@o6YxdNd)-J7myHT+5%BGM_jhoFjS8V?9 zgZPJATOzkK)!EfmZY6Fl+WL4~%C@sV`u k_D?$`JGyoz>^xQPQ(wQ!bk~Xo zv_a9(yL;;Hj-SGQYH4(7+_Hzcr(!SItJwSd&lx}8*cZL8ZNKmS#sjtoY7a6FmNy|y zvzz*xMa^9;X)T?HCLC&O4QM_1i|a2t4qG0sIbwKZ#Zl_f(xXGiN{$U2mmcpsk$s}O zZARPOlao(gJ2mN4`|0S@=gvf&IeC_S_Sm_=bBE9SpFecL_d@eU?~6^Bye=L5)$7-T z?cVK8mwhg`boh0&c8>2ndL{VEiK}5(&s^hPyLdhJdgqPg8@Fywz1ek3aO>&qyxTAC z6x|uTyYL?2Uip39`;`w&AJqNJ@n3toyt|G(410L#QR1V!-TdxnzsZ05*i-tL{{Zaee;rW3-L;k$fKe@l>h3v)9%Vn>OU+s83 z?seNh{J?`Z`ELf_mcKK8xAVR4`?DWXKRg+n^^x?k>XYNA*3Z$O?+xV-4M}-2o@y(A z!GUIF0q}AM0Q5Atcjy3sIz@fXQwgFzo2n4_Pgs2xREakLJ3;_RUI;)8+@oxQ!xmy1 zyeqfrNg)9B^c)!)k!N{&sJUqH#6x&DH1x_008%RepJYQrgByp2K5c`^-Ui@!f%<%@ z6e2tu{NSoY9X-#%*Ya;)P=8u-zlv@E000SaNLh0L02U );W4&zIpnru%%nHuy&WSpFby82{P$^E|<` zml-_!bYA<9$sd!yo=0r{vH91_4DtkJgO?emf0+IiD<^nu`lsoivGT$6Pt(86{xJK) z%LJbNoWZkC=e7Ts{bBZp=Ml3%%>M8)gFIpOhuL3#&M^Da?9bSFg4bq$n*A9oAI$zV z`_t@Cvp>B|@VX@B0_O{#&TIcM`_t@C@&b8eAogcC99BP(rluzK8zHaJPo$`*NYc~O zB`qyY`7cykTN@!TW~{8Nl=k*^DJ?CP;^ILP4tJ_j Cqkj2Iy z=+G^e0)F9%JY(`l38FIB 66uPlBMBW=s;jHje}sWZN=iy3KR;hGGBPAoRaF&X z aFhC$uM^bga&93OCOnEpw@$+2Pjx7i A zn*B*p0GVL+H|3) P_ 0e|BJxu@9Wi8XcJwxbO)kx(Lvp<}Mty}`yIC_} {GKp z%>FR@!|V^UKg|9J)^yGOGW*l)Z?nJ6{toO-TYs?i2d+ta!^yFQ{<8Il=z2pB8{3|L z2KKeBKXA14;0-^F0)^Y`?{CNcrc+$Fy+b-XI;C(>fiyL`ZF91+vLv)^+qMY9n~WVZ zMw(k%(SgYB6#`uFP4GwxJZ^Cv(I48&NJJ)j)3Dc>hg}cn5;q#~8)=RiT!w%LqHl}3 zlA1~LGIFHWVepOq#(x|%7!Wr8O#XlkO#a&ZWAm@+AEtj%Npvcv>7S;5oBd(-m+HxZ z?P&IAARIvtv%hWq0TkeL=|)E|bp{JDw*C?j0w<0YTYqv~V(Wjl{z=tZ4_kk-^>4^V zTYtiAY3nbx{$lGdff7lT5|f14-)4VPQQ#awYs>6!5W^`?W`C0sW`F)E+TYwBXV D!&qQ~iPf48=FND8*C;chso-~ayie_C8ztdm_=1QAHo3oY6j zTzIp=rFjPs?R0#(&S&J3sE-J)SSC;{kbzfS7&Y_)))E{+fg?#*Py-h`X`&c>M@tYY zIE?-Q*C;)V|J($u;|^bX78`$LjzCAlmB}BIzc&9kfob!v=^v(lnf__|x7i z{%GruI)zfDz=f^9*!qjDzu5YV&XBhL@Na(oB|9ry9ZW)>eg0Xbw6s*ZI=Oc$ z1^_xgsvc2+4(3T0>;^yJc}gW)-+)xD(k)DASr-?`71DC90&cAnt8h>$50S}`szyEQ z!B2w^q8a^-|NLli!-u0oM+(1f{F(eQ`D^o!&A-$sC>Txuh-z%6f9VvdN~I{XQ}0t#Qy5+3L~1O8%DIrPL=(a!k2s@!TC}H_oQb3q=Zr=H7&*Tf29V< za|-Ei_P34#keFvjYg>PSjIi|wlRqYZKmjKcPSyNp^4H`q^&gvmZ2qOFp&DZPhv^@t ze??cb%>IE)F#SWNqt29+koNow 9k;YB0clCp z<1T!Cnj^S}n>wgs?*;G-e$Zb5JxEs4l=S2^{*3;{e>VP1{+Rr=`Nz)-!Q`NGuFb!g zCr$q_{mZMA)Sq;K1SB#27lZ&sqPjMT # zW~& Ocu-#emi5{Av+ DX)4v=qd`tQ#-%@L7X_3&@ty?20si{E5^@!^jdR8;+ADI@DLeN{9 z1Kg{&78d<@rZvGgL|NRkIM41EPfo?wdqEioNpCr*t|C`TZyJ1~zww_NLpJ_Q{y2%L z-zI-;{=sCbZ++{eYV)t@ACL_AS9XYMUi`%$rhjpXS7~GVr<0wIGt>yvImPsEP(a z7^Z)^_Q!wx4}T@iFbrE-n!zh6_)z~${891Jk9*9Q;zE{0>*D^bt*xzc?AS3)%gfJ` zf`S5h^p}qy_n$8PovCf@H~ZJ@U$cLywV3^H_P^6j^xN!z=nH25n*DFjA2<%|`HQW8 z+4>h|M*Qn=P>l&+`im!9|FZQjTmRFsVe6kxccgg0!L=6Esog{xO{46v^@oA4Kd6qn zXV30PINa&p5+lLMiNS$@BXC4v7x=^oVv!((G14@jGOWMnOY!W4ddmKNlDc8Ngm&zZ z(9t6jX>8O?p}aha3@MYyq)E~>YnF748siFo&G3OJ!Y(5WGua6LTrgG46i!G|n|4d6 z`U^>^-6D~;atXE9D;|-I0tsafldhs^(p5Z9x^l-m{80Kt+TRy^vaw_FfQE`!01Btw zt$So;?H97Kaf=*mEtk5m!>=%{Kt^T_lNq^FWpU9tGBJBxcOkuU^dBhvf%d<_@16hp z>VKpEz~qndpYdOB^54c^@AHqzACo@=(f>^Tn*25So81059p|50Z@X0;KIl|Jrx5R4 zLbD?NH`7w_asu=4@Ok~2Y2LBKpTmfZ(g-`Sy1H6;-O 4evJj= tx@kcb%sDf^uWMp z1<(lS&cK7~j1l|}9XcRsufHmx)vKj6KUcD|b41e9xf -X|&hpOuuVRZ>!vCb>D8z%NZg*f)qrq!UEw z2uo9Qn^e_?B~r3jI!E6uT{)v2{w`P2_V)$f(aQ}QPhV162@cSE+V;y+70<}WHLE18 zI9sxEawHA-aWR)iC+HUjeyz>T60UBM3kEHcJBQvP 0|2;95b;8=>?er`^wYCuYc?4 zviZjm%j{3kK{>+apI{Bs=3mDT93Wo4+WbR#3WC`DWAm@+9~2Eb9K3w+I)>iRFOC<} zKTQ8Ref7_D_ )b@6ZHr>&E?5S83ANWXNqJRBI>+55on@Ez+Wx-a`-N0@M*V~h z 6f)V&xVT>H6)vr91lB%1$C{+Rr6>=7^t zPO +e{J8kRkm&02KGsntFFAl(aCX% z=^w$+G5rg3Y25nL>8gJ=H#e!=D=scpXFDf{z|aGb|E+DUQd?as#U;g(fyKNCWojSm zU;UAPt!;1utf>~_nx2vAYys2%Rr;v#vGJ$0F!^)l$RDq6^=JIkf;Ic!3A`vRO#Yet zQwl)%oBTKV4+_})XY=2gVt?5D@1`%)e=ugj3}1)+*_Zs|nqgWh7Pz`1ZJ<7*cR-5* za2+(-A70S}Lf!MK>nX2<>SXK6r6X!d@jGuxeo2u?c9t`qshIHzL&AfV0*OIIGAgT8 z8eV)>svGMieD$?K?h}Kri=IJA;v0c;2x~}z(+uCJOWXI1l+-*U1tan$l$8;KUqa+u zBFbe9%9GLA?NWc_QK@RLLo}0Ha4*0urv1s_Ge}<-^D7xZOW>u80ffK>fe_s`Q{*>C zo{^`TUX=WiMUv_1hg)QZ9!Ky~;embypkEv4_y5*BCUqUPa%b7is2?zb_S0DC4}3C= z9yqxxHqNE;w>Fh`^k(-x*T3$r`$iUnZ}d0*Qz>EN&*YEE-@fNRn}6J_8=Ycx# lUV*e z_0-c+S673I+&Iv)+O83Gj41{_r6r{@Z{9p9$j|%6?Vn9sHpv&CWBXMY*;ik6rNU=q z%s>3$8EI~65=0J_apT9!?3uHo_Furw-9tQR+sVqmojZ2QTi9|)^-rY@=?;3K|I#xv zrL1g-lnovtLx&BKQKQD{yCB*#0I2;iK==c(Keuh$E+2mQG0=&~l1na;lpI7D?SY)@ zcgHXMc6Z%3N}YlB=eF(J a+B$jqx4*?2 zgIhrQ-uM4ZGSxZ2ty7r(`OWK}%}ven#v5 JX z=*#Z)pZ<*hHaL~M`R1FlY13wGGghg5fT0bCwc#>#+BCUh=~9({C(8eAZ5^oh4cWAL zlT=qxt`e^l)H_tBPMs=CFTb3Ng_@p-|NbqEzy8o)2Va8mXYD`p<*)U>GIlqM$ILOj z<9ZlZ#{U5|0*-+U_tbGT0*TH*{loZQ8Qb{Z4{;m+s_&31x<|Mt4oA9;f6|3ItjRyq zf5-}_)BMLlOY7G^|HqW9HjVNtY#S%uXy=fB2k!rn?D_wnDtyv6EsVFvu>OZbznl{U zl_N4sRB-4ou6wvX;awWW$iq9lNL}% IX5gVY-KBn`Q1m{ov$7 #cD#1Xgr&8h4XG7xt8+==5IDckP*(hiR)AM ;t_cU9Rp3NdHFFTk2d=G`Ixh z!*)X6u_PX^D1t;CH&F!{I}`LvMcLmRdr^ui3+3t(;D>bIer<0r@CVxeT7Q!EE0Wrd z !ve+&%czl8F~#vg>F$sZ07{lmm?-27wm*W@o%3)QtxLjSY*$L1fKe<5F! z*dJ%g{6iVw5ARe$8-lh34{m{zkIy9hE`}5Q^pT@va$c4Ug3Xr;yCpp%O Uef>A#)V zA$j}lx8<6vuaU*)o{NNUZvJEBOK*R1+gNQ7+MbTBPMsayg 3!jAcwZ!(S_Grw`{==9uXOXhu*i{cAJz98KN}oi~bzzq&V|MFOc^2@jq%- z!jN{n#y>6{O#Vm?|AY5Gkb?&fNPa K zbk9HUJUIT0R=k XgH%^Dx@5efti%=X Vy#Bd&5$#6?6`9ib=zz8Zk`Nd;E ^Xv6e^ z?Mi%Th5Dt;z*nd;u>jZj<(CqfHCwv!vBge5;72R>#PkVT77J0$`z3wbLo%c+S3(FS zst0jm{$#lMI`oW+h$ivF0&2tlFQuz^zC_Xsd*pI$X2#$M;1dLR9mby~0Hg!ToJ3)N z`vLjey+4=SvLcW#Q*qKh@woZ3uh*YhL2z&pBL$8#si5DgL!ZgwqI0A$tw3S1xWeKY zKjPsNEj@5{pj-*Pj!DyO0gYY0pqxJ?p}(um)ot*N{>Fc9^l&_J$k_M`1W1gmp~O-u z#iW`12^hxH#>-uQHu(!mD3>^jDDOCF!&IGz@MZExN0!qGaB1=<7(mJ|yjD&z`9o5~ z(1c^i>$r}Cm=JTA`~fkPN{%Q>yE9Av{O-5E)2JKV9)|}PDgBw(g%}m{p~U}LW{O-e zdZf&{=g(xwWmifD-mDLAUN4<^c-nU8pfoqsOVzO|8Q {ZVCEO|Hc$1+ymOffD zSt^i6sQ M+*pn6zZ=M|0f~$N#RrZ@&F>%=_nm`4=g#C|BwiLoS_v{&_NE)-1eg6p~|=NAXfu zm#km6PR>Har=p@@9Vw=*@#Bw?OCJ8k!%_n$B;L!;$&riE$BPy%l#wGxN>x=Q#&a{G zI@QbO&6{QM;>D0N9K*f0zqPeZ9)1}0*1%~6@LjzZ$)bgeWCZI)l$7R{R@7T7o57ol z7cJ8H!S$0T{OLviC{{|(-rG->IaTua+u}cKe?S52|31gR@xP6KlYg=Dg4buZ{t>iB z=kvbie;fZc{%!o*_*V+_Vt@2ze@5laX<&ab>Y`t>GX0yq_U+j}DXG| HJ~>{!z!!;x;*qI@>4x2TjwjUf{D5t%l`k^aF3cX%M8!Zz`UV zP-&*y7KitUkQNBw$Nol=9>guciFsKUdyQM`w4yH7`Cmo@KjzW9!KHQ_aEO7g?I&)| zi8iPyKp?oOwczVy=x^}5``-;5qrdTA_xQK*7l<;GKOh99<%!L|D&xUK$>u+kzb1cm zHs>U6^S>%FHvicC6G#Q8|C|2Xt^Z>#@phCy^MNR@J25+jBVjq(h6p8_w@AbP_*==# z%aP16V 4RT7Wo=cu8k2Jy-lODT#_%s?$7*(T-<_XD7J98 z_ul(3rv3cq>TSX{G%vjHf~;M;4ha!#P4fr&o1grRq^2-><*C=dNh{qV#!bq=00($% z%-At98qq@3(}iiw$D5~s{|H|VHbB4Tnrmd%Y;4DaKL-ze0tX#Ny-m4}nl-Zg+GTM1$?28;8#iu}dN>xu>VKa9T%%8%{@@Z)%+dc_=>IbrJ{>$NDk_wG z#l Al|8U*7)XTX6QMR{kG3 ze7OAJ2lq){uB(%U&s}`3Jn`h?8foO%v19TjUea2yU;%K@k(+e )q|D3M+UrH*pCLOPC9Cs_7HvfDZ^AFcw;F1xj|L7QoFIGfo5Cqp6 z-WPfF*&jS3bP_@)=B3mPArx&0MrZmUL>pmYrt5*TzvOSd7jxD;!Ec|DW%19tSZC }_^d^QgN++EOL=)Y9!8^{1ornpN4wU_#toaK{7^aI&}FG-`$;(E z!CvU!*50m8G2B+B5&TB^UkfLT>gpOe&M=Y(`V|f{H8oWlouM9EmXQAO_BZp@)z@hs zlHNza%Zd}|kgWZ+HMRP%zmvGL!||zasFN*Qw_!`7-BI{jfm=CYmZb2LwZFZiL%#R| z&RRH>i<0#J%1=J&_xeK^b!wy((0|>Ub#n0F0Yv+0(KaN~zZx5xm3|Fy*z)|>(%gbb zE1SUcn}p5`U5KF4*Zj-K8asFFl+|B-CEKu#OC_QkMX+@iD%C#{C=vW{xJwQnJ}j%( zuEka@SP#N)(v^AHZ|wheMl$MU{e{taHX-`P#tj>#3QiIVkpy)_?E#;BU4!u%4u=Uw zI *M@K<2FXhjkg+ Rb}r|I4pmj%Z7eOMt(A{W@(& zvi5uVw{<)A{6hbyLYm%w+wGE@hxIJTU=KelJ5z2&x< ;p5x&8LrB|Vdob-U!9KfbN?lK!#qW82U2`r&B+{I9hn zkv|6C=x_XoQKo{0ywLajn{58mk&b#2$zLyjoTxm0{omk&_9_dF{!p)!6e{~U2jJi2 zzm6QGi;X`>nz-j*WD=7 eK^uvCfKhYor5jQuPL(_$$f|VXZ@zUV4i1SJf9%Itbh1a7C1Pl+t>u zyPU^0XuI<=5Av`MR^{vG57fmvE2=)15cWv!4ZfC(X&dQDW1iug>EH8d-ItP4f;W^% zKaPbcF1*GM{`)i}`GaY$g}jL?k0aAj7wi1A{tFqGH5v&)9^@o^msK&*`dRp7`@b*x zYkLg7>m#GT@t=)9lRtqRp!`?)X!6(QAC(K3nS;rmGd8dFuNVEx=HK4+KOJADe}I{& z^- dqEl*^8`fCFPHOLW;^`3IXd!UygYnXD)J#dQ3@4Q?4a zdGZvgIC2CTLh7h7WXNE}gX5sNr47*pp2b7n4MJyu;5{|9&!*3qA-CLei{#{FqrT(q z-x@eFJo%d^)Dgrjf++$rY}jzQ
0=w-Lps5Z`dHSu%!p{$F`r2G|xTrJe-K?amVor+n<-0D>vSFBg)K<(qAD0 ziEw9!y!Y<=^5KUcsPl!xnb@UBaq%E+*Sz`j9Q_mYKObE1;kIIqwzM|4$s>>aQugiN ztGqgQ?tIYvcKIKF_jhm%2p+1V|Lf}O<-h;;zf;oZ=M~6L5Wyz4{hKy#)&8gRgG+ak zAssw>{skAvl~-PgF#wK_>Hmr&;{z>mlX4JMa1q_#;PNdg&E8a>PZfAg~Z{oH28z z+{k6Xp(YW@1vT}u-2VA^`9>4xV2ag?afN%#1<@jGo#zakW=^uUck$mvM z`|1GZ#x-5PB4}fpoQEx3E?;`NWM#pTASg!WdFI(afEPAN*^p9=6!gTCPsrhe<(k9y z|Ines;e>FTjKCI59=;L?zv$FOp5MG_OHeC%5q(4W!-tQQ>#n<2CQh7moc_nf_IKZT zN8WkoZIv->KkLrMc$|0kd|9^a8u@Sk?f=rcF2DRrS-SMHp#JXh&+VZ&zU#rO8hSyA z5mASa8*aD(ygJ9xC!lWSu}b;-zyF{3C344iz9ZYVZIg9yhN6rk{N>B9mkTZ|?REUo zk!d@fLD0q$Y>hJ-TVj#7h&vBnr$T }a?&A*P0 zE;+*Oc5rLRupu&Z=rCmiPk$|fdxZrBGJgDc*|KF5oY-pQ;Gsi+kL|9K=s#>%MFnId z#_!-EWh%Q8!Ot%!l=0)nqTa1i4Tr*m2M@`ZF{6Q*AOBH=anVhG{BR9P0zc9GlL&t7 z_>1TN-sGRbH~ND~lk&gupRGSAe?Vs0`Zu+!#Pg5I-{bXv(#qyPoBvJ!puQLA8E&%0 zZzMqf)x+jr(?7le{l9zeGW+9n8Gju5So^~t7H_Cq&>G}o5pU3t3*nkKym8OGdei5{ z-IVP+u!w@~aac$t4bS-aBlg;-`7`eYawuA_)`5it)R~H~oE^ZSH~3t4i14+Npf2(< z(GJmD2j|rK&3M~`Z(jfwKfw_dikcpCgZF(q0_1qt%S&HJZce7wtuNH{0-tp$PAKRm zBOs;VoPx5Ud5dHfI{LXqAHolCz&VNvlHw2EbL3+IHk$cezhz o_<^D?0K1?~DGdJ5l=$zR} #9{ H ?dpUPrHRKC`958_3i(MNmYJ<(*nZD* ztdKaZ_+*8={PN3DP=w*<|1cu>(D|npkvqQo-Fp;13+eg~DkJ@yn_A%1^N2<)iSPfz z<%i^7|Mg$xKmVWqS@N-Mi>H4xBBMNtzH(7R$Tr{_-UM*MKXmw@JdAPl@BiZ8%ZQP5 zPC*NCpZDm J{LAnE@O$aRSmhCgkDGi8Su4~UaZ_2-(Vyux z+{T7wkZ;D!8H$(Ugw)vf&&1ez>+QE$J+`Q+#5YTIw?9gMRNC6ygeWm=0c0!I#XSG9 zL_GX_L^kp887XPhsF98)NR5ThJk2dl>R87DjQFIS8_+)%KG)yqprtfMUOJhK9y3zm z#KZUWkIG-tA7zMpJbcf8p8m<&Kall5)@|^O{>Fbc{!IR0CX1PWP5xru=D|syN&;u8 zB=eus0(2tl&dVZk^S{l1pdx5#^FMfrJZ1Wa>0hS*o>Kjvp>iq0DZ@?vo<{OFmC=rA zF!MkUK?UVS@ROrLX9`Vc$7$~|4;CCWFVaGl#{^cdmT_OMysIQOIVPRS-eW`S_4#6c zq^F~9hBI}rlEJ639brTj tvPRvLpJ>*j&H+6?zA?gtVB`Z159 TD8rmI|xs<#0Ty@O!gAnT?CP{7W+axpfDl33&Ub7!d{du#$GpOE15ItzF<; zf@92>F>=i{S4(N>V10o8>Z`BH{sa55RYtA6_WG-G=Uv|oOkV;G$&1)RrU?(aQIQmv z7R%LFFVn4f>Jc&H{rBIO?QjU-gK#}S3lE?6pMy`VK~Gi}9J>&OV&le5`m4COSgyS4 zN;zxdWNcs31ZS6x^2Td#pm0RqeDh6Nu;3gx{(! v8eL7bBX*Ol${|1;>^B!v1e;YD9FJgYxz}Z^^Q2uZ!t_6baTp zK40~@w*Q=S7NSq)Yc!L6*kbABS6&u6!c-!<$lGutxbdc&`e*+TQN>nJ-vT&TYy{3> zS+R1ZOqehUu(U&>@VN!h=U;rT{6A*QC>f6EIqTN0)A8!6(r-Bkr>B=+dQsb-j=sBQ z*|jom`~)~Hgk>wXcUrMxg*3y7VI7=e&OLW0U`^0Exc #$u>h>>Hkc(~-!%Vg&CnUb0o(k+NyfBiLCi*}M! zp8rWX{f#efFZDJZp>U+7rO6eDL^Er~bhINR8?hzLn}2)@4sl(I@7Z(C#@H=GS;{$< za5SSMS9)p&B8!}-v`SA+m!XIrqDRd7mxu4ypK9xBqwOz+yx|c${{8qHRE&ELlyD0l zg&(w^Wn$%DF1D>9Z??8Ii;hb;?tw5`J|2DrBI#&Z)J10(9*N+S*7 pl?PSg^?BZPjG(X^3*7P*Dl|oPq4{BT6Y94H8PtO^%%cNOGI^yu}@tC4_|<*4-C; zeMt;&^SQ-EF4uS=rbL(eaD(KhBJ8R*AP&gM{zP32Z(ZM61G3>q68LJkvyX`r+o`lT zvHl-O`whO1B%{CapN&70KPG=|{=tlI^RG7+s1yY(0lFmCKTZGWUH|P(|1|x}^e;X_ z?y3Jfql4p$AAh*FKO-95qX`fAno$a71>R5yNpo9=G+|qu7CiW5i7Z4g$%b } zHgDO2EoAno{X2N@VEK!`_zTI&!Ztd u=P$!n65tWA9g~ZC=S6+EZ+fO=w@18%C$x|mQe#H6GOD>k8q5^sPso#R6 zaDsW`k8;oV?$-8~!wG>0+kf3Mv`eF+V4J1fT)E_uB@#xvcJA7Z=jDia)7Yr=Kd%2# zz775P=p(<9y?gg5+!?cG$X$2Axdc4s`@g7g5Xpmw=I9UnrDvo|DIVlU$f&@RbYlDI z(BL0Z-*)RQa?XN<%1g{M1Y3nnf-}U=e)bR2*4ic?f4oA@J@0%(q#5MePXe$HgY}Q4 zOA)aJTg$Nj`BjGU uc4igWy$aA -s!d%jw}L?ig+vOV&6qZuutqZh+t3ij zx%1}B+_`5n6ONFK9yLlG3*N?7Gz3nknh6ue2lY67T;483w3#j6z58yhhwY~$RB=hM z{NqDENB>4--`@S*@Nu8?pA2WBOuT?}%gr}Sc2*WKLYY#TGGz+3xcOV@Xm8UkSD3Di z$N7yn;B=(zh+ylTJAgB`Pa =BDFQc&)4DWgPdLMZB z{&(<6X&iuGS4(FRcRv@~M)eqf$mRP#6SU#hM4gBpQ;RaO?LUtHf%wp&LzMTqozrJ< zY+AT@A<%L-`|-a8TR!c>_#mB#A0wC~gAXJX=1|DQJt$L$t$kLlS|y7XE!OtqCL5$( zvSsTQICbrD_2Rpx8csC$i-*s4ll~sQUV;B?{VDPKANw3VMM^4 z`i#GyTK#uQOTy)HyD}`VZ|N zoBzJu`Hv$jjeAe4k&GYukB-qj_t0s0G0Yi2F~%kpI2PnvV_HDF@l<{hAJ*^A@$g~O z5=nO`?!=CU8%j7H3vQm8lY;04zT$^B0*R5*Q&%WhiiN2CoI)f~wRTf4@Cn^5n&686 zC)ode(Z8?u8+@a`@t>2kHvUZhnEd5D?;aZUNB^+-Cr~AD!c!2?uBZNE^DpRP`cG2* z)ATRXzk29jlpk>)KFIRh< cY7Xa3eSo`b$af>wt--u@#<7SRXg z$QKYsF=72|C;P6TFdvay>NNU+ixUu0I_`v14#S5}ojOG(PdV#2_;csZm3Ofv$&rc* zr57t^y#mJ_-~O-GtdX aC?^yb`p?}$5 W* z{&cWWUPZKzJ>Z4z{%6Y^|D6pU8%5_5wwBEg&a5}K{R$gtdVshM4fR2N&e2I}7&HET z`$?FboGdsFwWCY}Dg|}eXQ(5Q{5$u&bHV?6wOud1^a8e&3WLYa)rUu9rPZrf%L^~O zfU>UtiBd~*Yjpg3{*Q%E{)^TN;4i)SA|ktl5yj?w7jXxbtXch)JpaOruFb%Y?Qdy? zdm%fMsRYCi55=9-3FMEq2kA-Le?0#uZ@ Hp9&u>!yrt`YlA8z=acH<8= zVp<4qn_*{Y%#|1z`t}mT=tA*Czv)oHg)>SiK=9E4L`@@T6y8L_3J7XqP~@-iV4bYH zFZi^}A=uP_4#0D<1{fj@%LVD!6BtHw2oXIJ9=c+{+zAfeOL9cGc!;{`8rU0rF3PbQ zHTwaEb~(^>2ht1D3UvQ+zRjXYCxLfD$*7m%iVM_KH2{7gZ_QB-{6yT zjsC`eCn tO#>z}_fBe3IfwDz?UnNEMzw9zpsch?NRxx2>pDqnE^1p5QtHSg5|A_9rsJ zkm~FR%NA_4(bN7z<-mz@y%5d<%a>m#Gw{HemDBz@hUgrG!#w- gX}v*8JS|gtTDU88fFRwEs#=OJq16jvvH!D+r$vXMdqq)`de)v=4DL ze%v^9fZ@aN4Twy!W5+f*8%`TjCQX)cW5)`e2ndsf`KQ;cq*wmq&A|Sn(TQueKi2+? z*MAz}oI~e=Ttp@H?XPAu6Cw-vEr^)05?i*gQHoAbA%C?YVh4ZnA$x0Et7K(lXuDFd z2-FGK>#^+#w=9~6cG1yf+<3GrI~OG#Zr$|nx&H9z!@raxN3qo{U{0Gl70xB!!FDNd z!eBWz5e -vw>Ji`nN`F>>#!s6*72BvV z2yEa$q_y%^M5d$s`|rJrdm*U?FLe<|hi)(QM@i)I>n{@~PLLsk%XIsaRfvSbtzx)Z z!?qnfbWjc)1b?CZ=fL?T4eJ|>BBI@)IY<-GF>d{#5&d`g&>=*NX;Mdl)|NJG=hO(2 zp;lf00sd$YifJv%9~jGw@H3!8PmXrD_sAhex|eS z#{dUEh#|HqYLZXEtEkq|1&K^&HSO45h}ZS?jnWQY&CJYD_yk4z55xFnE$sh9@MGH_ z%YPYgobmA65p{=nIrzu-e=D3}*#0cQ)^_!>{>H6*RwJ6ymQ9;9GR_MxK95K*uSsrB z9=4lm(k+?T{_*3-%bwl4wQU9YTt7<=pKX{kXD*yb*2w0~s25Hv&p-bHw&QwT$G`R! zoK#rHcto|?wP%lB=j9<{u@@pFecbqq@Bd`&cm2tc3!(!?vhjZ+^alyFKK8BR!T!_! zKc4;uA4DR3jQ+-dHvUZh^fLdbtmMQ=KB2teH4l^jHvifDkKy1Ps5vA||4|9y=wSMn z>7S=a|JDe8uuaYWfNgUc${#8Ra4>;kuGSd2z!{^^A)rSv5odlOPw+EP#CgM|bs^lT zAbhLPNY+EOkmD|Olm$6@oV=nEEgRfL=v>zA7W0zBr}3zZ7%0YT#Y-(pl%a^rz@kV8 z7Ge;RR1c4yhwGZ@?j`zWKA+d0nGXw_k&NL1ZPY|d2%kmR1~LHYsAsBZgp03XnFvwZ zaYQmQGFfZ)!R+{@`IxGW>%Q%;G?^LWjxg{Wg}T{+y}@_=Phj|*ME|o`Z}cZ>20wZK z8~rJNjQ?!>nfx*N3puItiJLPxrS+wM*!*MjujwBruYa2UVfsg`{zYA#AC )e9_&_NQF;&Z4aWNbgW*P!hN4Fy!;ipvX+arR6B7D!5FYXod=v+k zOJINUepg_xj2kyWYuC8|IPTuNS8W;A_UAwTb2yn4(AL#@Xn$3zlYs)kTmR1i7N9C% zX9lUw6ktyLt81$ }t!1c>u&u|cjz!zQ7qs28Z!a66`8<67 z O?;5INzmtG+wMvmxde*(6L zUvZS%2N8luHt3!LX9~87X&ydr^O}jgCe3@aKcIiLcR)ZU_7NE)mj7LSB83HoQTUaJ z%;EcA;i44b6cu6HoFx6v@~oFARaI6w`fL9yl8QUOV(IVrM5|W(QGsrK!-y3%wY6{p z*eo-qP1FAW1kpP@|1Vl}F0(2uPk-NjN0JDlsO*&2UVl}$qX7hfc6fODDe+K=%TF9g zMR(=`UTRvJZbzi;4>B zgi{0>DjrH>MMsH4)VZCLZ$I0j?MHeQ9l)3s345?*&t7iZqbazV5I!8@s%sDxWoR%? z6@*5|VI5jm0{BGIw?9_@C@Lt3!f(J bdP`Ffy55T&sNZf^vfr&kn(`%`A^#& zVD5NKbW5n$Uwu_R#`qy{I_b2+S;zII$n4p(WbvX!@{3>oQtM(Qo@DTeJL@3--Feq{ z!5gp13dkG6Z^hP7EvT0V@t!q%rf!|Hll7uZA!twhSck*+c=_jO=lDNS`&rh*Pc;4# zwO 2+sUE0sYU$pUEGSzo&lw;ZzrE|JnR^8qWWCu_%pUd{vAF z7CK)Bp{=VO#!l2}ngW-}DsF>o+{6){I8j )O?~$B5yvY^hQ@Hv?#mHq<*l}Nq zm*Pky-A&fP>sGue#JWkF-r&2%3E*;){Xfw58+>-0(ckzlkP{~;e{KA6^dy)6eaT;w zKPG=n{@VOw^N-Cxswe-c&%aP8XsdWzicTf|pkoOgO!#q!vj|&Zb1(+TVJ2ca0VmPw z&@+=x 6ba@rl==0q{ M;~Atoa=hnUk(7_ zL}cX1(GEQ-Qna0jeD_IzmXz{E2PPwu1Gd@Wwc?4adYwT3&>P6Ff2 EuC21(u24 zcTY>z{#v+jfy|yYOFsJeBUy`RA4d`4!MA_o#!c9EXOmob!3A>d^5xoEBAyJs+J*`p zK=Fh1XrKqQnUvCkx^T*0KnQf-2geal|I)#OnajZs+RXMddO_i!K~eb3!#2j!pHF}@ z5xvCSiO7OQ3uWf)+4Av+XxDnzE)SpW;)h$(EWiGG#gUbhL_B=^*-paemMSAhk9OOG z;C|xv2W?c$T>Cx!oh|GNcIo!OgyPyCJN`QZz9)QN#&NrYNvd&dB!=(mXT3@rME}rs z0F`+AzlZ+G+%f!5%+8)SS6)M;ini8v-4cclCe3g_V$=y9+y >9n7m6-`gfdV+} sStM%Q`?Y<7i~Oz${VE{? lYYGWhZB_v=pu z>dfZg*Voqp3_FAHk%mj(|MhisYzfjsfdgESk7PjQiXJXw;itpN=X#8hdFPy?QA!RY zY7BXB?6|QqY2qYd FKB!GV&a3m9%@;ZaG|jSjhj3sx$%X zdxHm;%4e%kFNuhw01h#VAg-B27{2|Q!8HZxK~E-Ve=K~hO!*#k>ZSeh bxFs}SyK7N>oN+)Ev$Q1f&=ArHN*YV zx&flcq3~kvI|N(;jN3|tE)CC^t+@0CpNKJxsp5`0C{X!LdBG~fMf0Tc&~uVk$~F?O zAaC$9ik9Z*z2M-b&(0+M9o$Fdl{Fm_9zNH>>jgeC1oU*~v0}*lpbzn0ls`|N+J(31 zN?|0BegvVoc%W>LtAZ*1&}Q(4wkb%}-^dI4wO2LEf(gK{5BLPeEDD5ItS{gPFMN-q zKe9Wl9AorGf2~~WOWb~gZ}d0*v+-y0heFuougyO;|C;_mIY2dx3LW%=c>P;bdC&AO z$_vv!9iNbC;_aUk*1y43VQiH^ClYm5C$B+&Z%1Scrtw-ImZ|}Qo54ZH3x2%w3G?*# z;6u_>M5W-zv3x)HA6fhZ?fCw``s%A>^Ons@i;wYE{^G^wiaLn^AyTLWkueV)K7{BZ zDe|Kq{!lXTu-)k?NO`yGrw($G;B56Fv)u|3HleaO$3AhHlqBOX5UR%)aZB8gvq z@hX6?r14Mt6-x(}V?8rF3lTk*%F@f1N)sX=?A*CSK0&mPJ$rT&4LHnvq+92V961WV zdLRGf1%(y#1 fwaLCOA zKP|h4yo!VJ3Tcek;o L3qhJ6i=R6%-xTNKLSyVMhr*9pIG{{Eb_0xHae__@COwS3Yy~T#W$)= z+ V4HTACVX&~x>v%lnTUdMhkPmty_ zvMl~t7wZfUALeo)O<^X0&pCmMDZJ&{f;028B&>|i?9mb)v_RTwvClBl-3J%E=Feyv zfAsvsHbpZA_gNR~?93XYfO>;Z7>c`cDZ}vw2|$={r;N=UCFd6|z%E00qXqT*2qY{Q zi>s1G?=w%&dp@r(%eq+SxO6T;_70zm2HFUofKzP$>&gl%0K6XbXBx{ bpyLQ_3-1KNbbrlzJa}e$?BVnDb!Iuj<@P6Ehy5`G+g;4Z zTmEYQ!6}B@v$&_k&i*Pb;r1^gozO4%(B91@I3cYs_$72u&_+gN^;d`@fgkbX?@&d# zI-xjYk986RDn|%|c>Aw6{>#nD# cHZ3DerbPqJ@B<(*&u$Vn_w*2UU`(+`bo3Ks%Ke+#3Li(RQ z_iULpYql)87!T`_k? @7yT;KmBy2 ze6n&Skcq%?rC6p;nVPiy9)5Xwg~CruPmvpMx>?4J9jne&Tz}x-p+n#&kRZ1G3UC1W z_u=yLX!{o}S}Y6BnJ)!}c@8CZ2xz(g-~olNzytW)`X)66jxWfwcFk(3uXpQ8p8uGa z{r};IAK>zM{x8AU_Wi$Y%hqU=nSs#%MC=d3FBvje$+>s;9;wCFMv8mf_+PhX9Z2Bl zKV`~fB|&fWf9L*{efxH8|B$jW88K`)Iu$ud+c@}y zMfltrhjsq?SHH&gLfHO`nKeJpj{mEwt7O|YI1AxtS=kWhgu+a5@Dr`S^#$LJrT`}D zPXzx&=uddQ|2_Zr)_#Mpo$dPE=x_X&VEo(oqg 9A16zkd@=n8{GcqsvkF{W|EHNln*52+KT(G`(&8JiKl (KKKw*#aKU@{#RM`r-vZH_yf4yr +fmsn-NDA@pfE-l%Csomxy0;T7w`DFJ+~8d-ST3uwJY3il*#8-9b7 zZ&@p2a@r-7iO{{g>2fP>QHKq!DDI1SnL*1SJ3`f#S9M9-v>SjQfGU#6(+hm9ky({! zPNmT5&=w}$UUH*+vG;GJExT1RK|f&KUAJb$m!1>g#w6YjaBKtpx{kHV?PC#cm^EoX zAWtvw6^Q}#zhX6j_8WY3pwVC1NcoiP8t{|5zz=0|oK9l=YsJR@N#&1?KO280e<)*c zP)_iKFP(Drf+?J2aWeS>I`q{4Koun#$&*O`^7oVJKPG=bIh+5LO>F#qyYlDUbI(PD ziAHIH4Mv-S5lM7RyWZ*X&3k+R+>Grwb8~a`Q&UqDjbg$F>lxU7LG7m=C6E7+pP#SW zuTb#zOa3C4{!u;$OcN`Au0*tq)nBca&TxmUha J&f8gPV-KmF n)v?BxUV0hZLafrZ+<4OsvTy+$JOE(Y)amj*oH1y(z4PunGIiQi;X`p2 zB78=AdHKbc)b8rGzg(p%|FnJX{d+FJJCiUZzxv;g%D%n()N$v&`|i_+xUA1jM2I3n z#}?Ysn17h=sH7Ln6@?!!f3 z z;isji%49qQr!&ssL*=?v%lQ|a&%2tRr=v%X%C8=MRBEyH2O~24*T4R2ln>#d_@lCS z-#$r$!_vL?{Xj+_N&@Tk@ELI;y8fUIb1kE9hKEo0F{WN|)fI9O&NbV%Z -9d$Q*Ep0-fs{8s*s0qi_(xc0a5S#3mlv7DNH5t*()G-+fP(UUqp8 z`O643D?eSO@VV8`#7PqrJ^|>OC;JfB&4^(0>Z`BHjW^ziTl^!8i0t3DU%vS4GnBzr zLFwr-Y0|_fd|t3!%*(#?{ZIL?ca%SHi}*4Reh(ipOh%6xE&KNGllR~Iz!gRXbk0$` zpE>dG;p?^5 Rt+>XNM?O6D{@7vEJT0D;bS)JzN$$<+lf)Xs$7yVf< zC~NTD_#;`3{$wS`l>s*?FU88=D4j^IfQQ^gP{R1n#-GU_2yc`BHvg%#)Op3rO_i=T z|0+$~Ok?w}J%6O`fCDGfKTb~navP(-Mhw 8T=?Tmd**HJ+s z>BdO#Q;kEvS1rAY!b68j%k?)&!>cb!KHm1hiVu_!FcT|eZt@ii_c%1sr7$lKEGRV8 z)S|8%r4u1=ff0)J4PP0KGd>j`1 }lwZ_5EvbV` zK)!T Q-Zu+wx{IeYMI%YYp{jL&Uo1?$M2jSR9B(Txn@sIJJjX#q=DojoO26IXv9XV^* z{A2U4=^v(lnf~eRpKnJ0zUjuB5Fwz`z4@;Se_)BI?g|waXsC7%{hwRg@S!9fOc=q0 zkxDu`I;iBTy31{8Qd40IBCpz$K^g(j6{_lU1OD|gjCzE1nX=xH} z$;0Rk#EHm6-0FxUh_;_CL>t+DW+LwR41*25W%Cxj$A{{dUV5oI6*M+9$qqPFuwJz_ zQ$uiAm=v@V#kE5KCpi1|YX;h*jySS@!v;K*KT4! GF5^NbVcFY)QXl|4pTeriJ;A1@8#y{>)oH$Y2@B7~&1!|#f{Nt7`cYgOS z`R9N7C#l3%F$WGFkmsI#PHw;BwjS;0Hbz<&@SpzO@AN_aaBM3wYSd`7FeKMqd!20K z_ATKqdF!pWK!YPP8*SmeBiNSZT{s_g!PaLTOO{+J1$hN}PYIL)On|Gme^ tz-Eg2~6X`yT`X5^}uO?jw{~&=6GAM zaDnCrfr9qCIusTwWIA$;968cOw!nD(&2OGkdX$z8mYT|Hb&}$CPKr|ipS48wFG2|D z&$EZ`+pqT&d3@=al>p|bkx}?xe)*;3AZpFHapNUDJzdsgY_0m@Go>TTDC-g^4z~ZY z%Ptd^X>DtjeQ5K~{{Cm$cZ6AS^oTSzGyuO8_!?kaVd55r59Y)FvTMPs7&FZO0(h0< zan`I^Sib2}zNOPiU1Po4UvuZqRsM^j4)}@auZ?5%>^I;U+x~9)JNS&A^yZsy0RJ}G zxOuZY_0&^xKKLLvHxH3Ow#jRdMG^85>>s9+|Furk`{WZ(DqoYwT3cJx`H5m};ev&- z0y3a8r3*CKCy)H{5t(!L92q%$q#QX~As>CT0+DDAkc5&4ew#ZF?F#xI$jTE>qTT}s z^?oZ}Lb~jVr3!!H!iDP06M@X%yLYcV`pBa)d(Ld-89MQN%z81-*e`j&pW9f)@;~Vx z-+tF2Kw2q@`xFZO;D44N98Z6q$sBAy@90lYE3K2D4ZhJIoD%Q>dBpe+V?qhR5oF`f z -#_K~ot(x{q8?S^k)sOsNS z|EF2t^*_q7Sp7$BHrEoYV<4OME9*oq6m%wqvp>|v2>|+h2LHt9-`N!wuKsCfIU^ko z%C5gO> nGwD9fk3w|`*jVdrG%(vG#LVzdn zzP#`fsp+hj-yeHb>Bqge)p%BV6WZ|y2LY?#hmlK2zuPjGp{|Ru_}jDneZlu#akBkC z(DoaA*S|*pU|fC8 aj=dGI3@Ad~(5I1M{9Y6nEdda1->eEl* z_|b}or+Z}W+SM{=&e;m*+H0 xmyzH`SNl7)xk zk(l|P4hoEdPy^?bdPLHA@x_;cjk7a}79*OB9z9w%tlto%qisIiFYzTL<$n^=;eYW( z7t5wioACf0^&$$)GtWMIJpDnhWmjD-#e>{7J*uamF0~WcOY9ULsFV7OvmYH^Yp~sj zI}+1B8}{aP%a_Z1L^tr|W9{# vVAFBy#DJ zB~knH;)^bn&6_sK5j?D}si~6Z5PiZOJ^TOaW!GRU8MnQO*S~n?!J0k&bFhulJ$K(D z|NQ^_i*z7b%;#TzAtT^GasK(-M#i;m=8PHgIdG%>zklCeeD=Y~BTs(vlb@ibkPOBa zCd=W3@bb&A!08~2tytE|dPJ2VxY+)mF>RV$bm4`rWkLUwHeB2ysHu~u$c~*m;cT>B z9gZA7qY~DGeB;NBmnD~69Q nMyWkd%D;pgS$$&c>8 zU!HvYaX5h0NONneY~M+T5yxqT1%-0k9k 85dmQqyMV-~wtqURq z=~y8u5jp>Y3uP`G-N;Xz|LCw+am+b^k^YoVY!T@{WawbI>6V)zr+%;W-@apq?7+wM zqR$nQL4yVfBOuYS&-Xvqf;j$MO(7Tk1+V~BhF~n*eACVH%pZP_`y$(R?vU-^1=iaw z|3!+63+3K>e*j0ov?%}k{*Q0J@*nVzU4QGAfBonGSow1z^f&m&uYVf-Ph9>Q|EWk& z`D5eH=~t9_eaU~5KPG=ve~NkjWb)VKual;x|EQ`@8;aU3gsJNFRAF)S+x|y>(?6-v zJ3CLWXq52)O-=ro{qb$vUwmmS^??T-{Am~7UZB#XhhDfJ }#!rxz>|AMqF`bJyfKs>}4Ob4Cix%{89~SMBFhZ3cs%wzyYp#=4EVQvc9w!Rl zl?!kKIIV?v69rTj&YL35ks@h2v`%tD?UI_A9^i-j%#-K?dbHOz$-yI?Qaj`>X&rJU zvL$YRU+@6|II*-l>o<^di?<@vvnNYoXP$gjzFOK+IwS-13k7dX(V0a5cn;FI0zk#3 z0rcxEZ VOC&iUH)Pvbu~?vm-hHvY~m`9lMi z4^uPoVT6KgJpAW}*ZeradurtG%9Shdu)Rf!3JYcNqD5*~xpCV)|D_>X0wX;zngIth zqm?Yg%M0Yc%*-q~=bZT(afOZ#bd>S@$N6IBjG6ind&0yCnjAa-@=gBv^XF=`le*ek zY&{ZI_*q$*a@JXsu _;5=OmeIvUd=uuax88z?3-h!l4}aIrU9x-c9 Oc< z4!POwCWWZ-Wf@1Y7fPO=bGD=`sq=cAoye|M@$<{j8O#vGBR2)#NE~K!OuU3${{H zVg~RjGcUjV3c2!1tR %4>56>JgYZWT9|32o5yALtP;i9G z3(AuTpu@fQ-lzOabd=)wBLAaFsCN&>NRBMKW*Hn&5aowh117hv8Zly|@&}{C1SJ(^ z^8ZB0!27;`uap#HJ1dsq9}&X8hacbmSor RPYVrc>W{JjsD~}$8)js?}?6o _0UJXqsP2591a6e1Mf<*S)Z%O)w^-`Ljt41wWn%vej1jO*OSj?c|U5SO6j+wKh zW$ES82?N?61A*^7; (RKFyjHhd{*#o77> zT^jIX2x=bO`#cQ%S`nH$T-_pz^XJPgCCg=OI`C6rMWZpOJ3;&Vf=?J8FP=%X6Y2kf zw%_0z{f+-H=7KS7 V9qhNXXL{XATMhF zCxhRKb~V)3BUouOT9u*^OLRL}*DQjK9(}>@ZT%q@ej8}WcPANnflfRMDp<21Fv6ij z0k_;?)DcFXp~F-%_;dpK`9uGJ`zdgASSA-;d?6~p%PXDjQgy5vFNKhQN}{^E>MH0r z!aW`MzXfXs^@uc^o|d8X_w6JtVh^9rGm#&N{uxHUGulrW>lP*0zKAr^)iYG>;l#q` zwNFn5f9uvA^2j5 9y^{f# zf*(r*PnSgPH~s(Hm;Wci|JMJfkNoHOxAAB4$K*}B+ z4{B1F{C)E986MVGsMV6M@HPjN>9wEQvQN_M*GfhM-f-(UA}Jkwdjq%A^CgmACLQ^c zC0uy6bYzV_srL5;-&2jaC2Iekw*B%&(^}cwvP}-RACdY_hhITzz6{SOlWB-}a!&5q zGA?tp;@$n_=s!^S1MPo<-#h>H)&EBSQ#<~R{!U^flRw6P#($@B{ #jotlZyk}-SwsWHv60FKPPMd|L%9c(`}VF|J{1qZ8ClO^d9RkbcA^1 z(MPbY&khKbklcIUy)p&SLb?y5|3K)kbo>U^-%S2Hjy;p)pC4oWS^quR@o)SG3fTCA z%s2i2bk+ZD{P+F*%jBOu|LE=cqv=1U|BwQv|3TfspHhOv;9>gD8L$8FMH0Ls!Omre zx}J4=X+yQ6V+a4ZKP>)qZ(ijA{MNj@Pd?y%S6t7U2UkcBj~FE#a2|1WBcFnB^|DUZ z@9H`=@Kre@mVpzD!q=aQq;zDDmT=Y>X(=OoeDvh*Ib4Aue)5HjlWBin@O}H0oC)Yp z$C0raaBdj{S}AdXAdqo;>*CUpS#jrm&7$ZBH;{oalC{4t_`E-m{vT-j4ZhLe_>c1S z +~sV3cwp|%)PEX`g&H@#uaax{jEHHqWb5kk)!3yFTSKUCQm)}ly1#4YRqWi zwmFqm$K=EJKg3o+dsUur`y6ha<0OhByWTMR8~@q(JE`$U*=F{So1e}8GyBi%KePYL z{!?`fQ-iZvI7d+D>h1ZT>A!9cIZ^%B=3mo4O#d?d>vUfK>yP~B`e5q)_uv0hhVIl= zlE6%-LZu5S!Ee1sgB?eYd)}(&4P3j$GPf_Y%Z+cW9$}l=;0Q_wb@^1y%hef!4;qk0 zMt|c!jtYJ-Frq7$jys~X32q~kjX%)B cFuYexz z#A#ILSkph15T<{c{vFjZljxu6*k&OsGfT3vv#{kw2DWfXm-JM;v5=7phm#CR$0vvP z(lfB#j2d?VZ=q(BKa@Dp!{iT0p)BGIn$ubSG+|5Mm7lHz!Vx)Z(qtJsc8u#spl K?RKOHjX2mkH|QZ%T@>|f(Q z8-K8M&HlIb4_p8E|Jgeaz&MJlk3W?=l~b1`S?=Au#IajcKNbYI=uILrLHZ5PByh zR0AP|-UFfc0KqoR#s*`9v5kALa#8O(>7;M|bK28&U6XVt{l`A-?(Edx&hE_4ynW9; zbE^Mx{)h8Fod2 `lPmh zz+*q#nz9b2KQ1xCYaf*c`a9+i8sx7BKx}{Np22Oy`;X5b)eQLjZJj){_ciEuaBpDC z{)hdqF`nS~gX1rbKkb7jjH&ITNj;FTKQh&>LyLsrqk?n%&G(N`-@lZq64ik4-~0QY z(csW3RWRdFhu1!Af4u)x!w9wgb@uqLrn*LE&YG#3Zk+5res38J0TVy%A8j51*#0%9 zfbajt#zy&m&Rm)I{ah)lEOQzECz=vvpYapqsH2aP?5s@kXZzE47{~t{|8xA0o<= 9KOFyK zv=?Ra7x=g=ZqcG&Tbk6%yj_w+4an3JI1ZyzIQv-DaZT->t&gS_Wn)(_d?J`qp{7G& zA77}UxvG~PwSiQfvujORkAR^DNN1u)!)PeXpZwYWc>nSFqo0|4{%Q~J1!DJcV|M>pL_dmY>@%@kQf8F8z4}BVXcCP<` z1YGQ_f0>d@l5qJIm*3soY*W%NdT64qB&6V-U2BC}z3c)IsHVE?_W$aPJ&x8kpu-_f z+v+Ixn$=0Wu!)MKSA`%*fSBr!a?GFnb(>=Q)AvK$AKrg@LA@0SpFj5JCZE6d&d1(+ zu>ZmB!T#4i7_|?=IR4O&Om%~B{KfGn$KQPa;QLqWNRscLc;V*zx9S@?|6m_MNAvtk zvN=i8l~74~db*gCQ}lR-??39g+5f9y9^ZfX{=@e_zW?(5*WR0P{ekN*od4nck0PKR z2%P`o{1@lHIRC}@ug;zSN=QtQxSxOdxuvP8sr5mu3ZO>mj^P Jr~Tmx8XSM36R|%u^mD`h0O9!C@kF&hKNKR4KkUy_jz7RbIkk!O_{(Hc8ceRZ z{EE9 r%LxAm_vJ~VuFS@lhBPr*K1QYx#It!`tm zV5DutHJ$}JNmY*4D(hhObFGELIpv}Kn7;wI6{npF4m9Uhh~$rlE88FMKR$o>{B3 MXTLJ)s *a*a5xTye^trb7x*#nmU7KlwxLE88C! z@cy$uG4x+PfB5`m|HJ;5;}4F%^njD&PmaIsFA};r@co1DU#bllZ=rnuv`=yCd!x0_ zw2!9k@7j8w@87Du*r{;-!G7;>{( l^HkJd6|Uy`w&kSNqMXQ?OrXc(o{95b=6&rNikC!zqG}We 3Ew{*`N7pLN?e_F6a`QtI7Pw0kZ-(~&|h>9Kgv;Fb@ C3#Xfn0VWQJ?3fEt_{>1esu0L`8$#^Jo{fX;Ofv-QAAz-p|SFzOB z)#-r-)+*GRg~Op)VWGml#SDe^Xg!Z(bx!rjcxi>R$G3}(7*a>AD?vD`{@KIX!y~b_ z^!1+dV*VP7{$s~Y{&o&*f4u+n1Eci@;q!;jU-m!je>wi(_>1FDbc!5* ^n0{1zsLDEMS}B>oPTW{Ht6xR`eWQ5`k7&L zrLA`k=U+Jg!uc1@zi|G={?O$71Lq$&|HAnv{dQqj1*&ccW6;F+@1FMlotl~|am~%m zN|+msfQ|%6fCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14c zNPq;|2vk&5=mTXUr$(BZn%d5Aj|5171W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14c zNPq-LfCNZ@1W14cNPq-LfCO3zKygXD&1NGI5+DH*AOR8}0TLhq66kOOTeof%{OCx4 z1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-lk3ga_krR8RW{F9F1W14cNPq-L zfCOTeKue30(es$C1q)6BBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmt97fYxAw zKXfEO0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsJ- zi$Eg2Amvx2zVOhW1W14cNPq-LfCNY&(gZm6j5JZEM*<{30wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2J9ZLXn`|;FZ(y@@4Ith>f36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^q9Ispop#QGIv`AL8TNPq-LfCNZ@1W14cNPq-LfCNZ@ z1W14cNPq-LfCNZ@1W14cNPq-LfCNaOg9#)yH#gHnP6tC~@+3e4BtQZrKmsH{0&N6n zBBzZ7_eg*QNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LAQlK{6FHpVkA+LcGLirZ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011#l*AdVfOu8<6 z=1c-4KmsH{0wh2JB+%0cP{6sTU2)cz1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14c zNFde;XbmQDadEL;50;+ v;>v?ZBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsHX3k2eAHd`!|lVv0U5+DH*AOR8}0TLhq z5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TSo}0#II(7#|-m6f)@o`pl99 zNPq-LfCNZ@1bQd|YB1@c7oOE70TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5{Ov> znA?x%1b@t4KNg$>NPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-L zfCNZ@1UiL4BDI%v3TI|Q0wh2JBtQZrKmsJtN`L~+Yzibm0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBoKQ9w27SN=H}QdIZI3eBtQZrKmsH{0^N|nYx7EF@#Z?0nvENf zA{R`_aq;5;36KB@kN^pg011!)33L|%6-^>r>P3pIBD>YEPEA$T+3dATNf1ei7s)e= z6slkUWRc9o?oxBsg9J!`1W14cNPq-LfCNZ@1Y(B( >yZvQm1xbJeNPq--3W4tzE|S+i_)O{> zf}EZ0B0wq0$#VY5$I5~Gj_;xpFk2EJ0TLhq5+DH*AOR9kg1idC+KL4EX;-}bygNZw zl_yA9gMW#I?4%YMnPrm+c{bTEzgdQ5+Qfehk_G{2CHcHW YL=d>PDHXB-fVI+oZV3zgF?Q#CRE-oFE4% z$+kn%Ofn{!Q~A+)ZCNf7AOR8}0TLhq66h%e@bPFO)R^!q(w=h3Sx*um0TLjA?n+?E z$~E%bn;*nf_3G;Db(u5L(q!z&VKG(qt|)AG8n1Pyx^zWbV4fsE0wh2JBtQa@Apk8U zA8s(o|2CUsQ?;_e5`=>Q%8xq}_3vLQ-oUhG`Q3m LXwG)011!)36KB@kN^n;LcrP_C-1IH zl-E`#NwpF(iG+iI%CpOp Y~xqnx! zJY7;J*Yrw}i*u629GOR0K>0He36KB@kN^pg011!)2_z&WbexGCXhyNwY}Agzc18ju zKmsHX(*z)mi4HS9KDaL$JG;`GwiR`DmJ!Qu v1^A8y&eUB9K$hfvrLE+l-F339 z(Z30tti%KvnQE4NbE2dr*q=$&wr1I7ZIV^BRw-}tuJNQ?J sgTh(1sf$sl}wBp+RbEYo%VPy|-Ge z6f)_Kt&?>k0TLjA9zwwAjLl}VBqt|JYHF$^B_%~=?X8Vr7%=bR8lmiw9E)^ub;8cx z8w>b(^A9_-E=r&~)uoFNGFuWL0TLjA9!4Opxmt3!UnJ)GpLNZx$rGfc&&$#hpVq@j zgkD`}D!FT6ip<}or@}%{D8QIIl>p0qza-1dt%-8azIBpjQmf8A$dxOzHPbi8$=bTE ztMs=@uw`4l$aMo+B&%~Sd)HN#IY$Knn8UepTaA3HOxk#J3F-rugR)ZPq`Y)Fu~)hb zPBD86=J4B4XO&NitK_5IRWhf%R&46M(AjNO0xZ|4{64I(%F}% BXRT*JSSt} hlPUb>T3N {QjN+4WPs@K?E7sNwJ zFPu1QYDI2a7bkyFLMDS#!byp7=T{`i=Ot$OL2Y+5#7muO&IRTc8Jc2~qjH<%xL%D) zkjMY^E^mr!H%zROUT3w*g #Dyz74yTxhW;V<>bCm0xidFsFGLur^yg==RfD1io#tIAOR8}0TPHB0$jI_noGfg zbRvPySkKaeEZ1Ip?cI_1inOY#N^34DEG(2ELx$+Zx5Pw#9?*$xhFOsS36KB@bN~VL zWe_OI%gfWLmz9-iO%l**5>4*oncwQ-nAPOoq*F>H$zoGNFd~+$CjHy7);^n>mDVKx zxOS8DQvR^|)4#wf{qn8y?JpT!TAgV}PVLhCqbc*5%hjahZdU{KL-WmY#OT=nLKy>G zIA{c-BLNa10TLhq5(tcd$+}Xqci*N0yDr?C8 &1o(mgeqG&C!- zu5qr V_ias+oV&SNb~L$O2bjINRSA~7wP!y$P-!knZ8d`v zO8pUczl;>QqF;_Ash9bMm33lu(r8kq%;vnWG@0y~oFD^DUH7~TrEZKv0wh2JBtQZk zL4fPl9YK|8MmvGdSkHohNqi)}z=nDuXfNsAySMb|( 5vV0^!0wh2JBoGn-^l|9x z(C4A=i$<4K&?t#!*GcQV0c~X+J-ALRZWDTwMl0jwbR<9mBtQZrKmsH{0#QhyMKX(_ zrNni7XD?`T>p9m2%_yuymlX-ZC4c$RA~28B)vijF0cH7Fm8rWr2pde_94`%!A3(E= zq94lih$ $$IV#7y>6nfvduOEy;ga8Ptr3{Vadt=Mq{-ST!{sg|U;;st zNI9g1G?6y)aCRue1*$CHsWQ=#011!)36MZfCct&;o_zILcY{Djt!F{DBoXFu!qs3> zQ&XeAM5S UcUPw-_6)Z}sWf(XMQYNp zt6jKbk*+R(XXM|V7 >S!6$&Ex_OdZ^Oe-49_}+t zPd%} 95|xIPM~2l%yplR{Qo0d6 zH)n_?fmxg@x7Db+x^jnEo9V*~lt!11YiKaL^Tpl+ Q-FZ(HE>W*VvbJoU{J3Mj zEH7ChC3U4zR$rzsV|H@3 biJ& z^vy!YdG3$^36KB@kN^pg00~3~fw&f{WS0EB-NGPDed@t#cB1QrhTAP{Ck24UlAC`@ ziweyp?p1~+6O`?l1FIx0g2DjqT0El7002M$Nkl y`eb!YsRF0U!=lzo!CX*>#qPFtAW$_&octAiIV zF;Z|A?21=Yp^p!*k-e1Z9JG!#%H+<7)YvzZ18pG}Z>yCmC(R`$HP8O^s6x4 3|x<$%6ZC}`q^7rjV;1V|uO2%yhfyLPRh4~&GV zxk%T0?SgdKxjtD^(rr?{( ($TmWX`V{(mU5G%QvJ*d3F2hjw4-0_w>RM zc6CoH){nihfS))2SgmV!s!Ob11D2ZvNPq-LAo>ZURlF*RjhovoXkz0gv6R0mRhgHx z8@49|z{2+3KU-vTb$Ei{gR|mgul#r!kP$B#NpVUOfk;(Di|nXrkrgG)vUImiY$2}W zqilEooGK6QSFLPU$Np8BUl}Lg*}t`liOPIe7AND=T4Yj&+oXO>l-{+Fo9f%%_13EQ zzEhT_%d2}-g)PAG_~s;S=EgO*;E!^Z5Y_elYb8nDjxe9|h58`kfuXfBJSDc-L#E`9 z+iPXL)%79pj1n%nxRZoSoUg{EDo;F0E?u$R;SKF7SE(|-+BdaZ2va#K#vKwM0TLhq z5@?4&w69yw`tcWeZ`K^IwU|0_oc#WTBfXxZCkcc~AkynunA=ZGNJx;TrqJy&LJ|z| zlarG}tyj#&E2`Nck1TvtR+p^_s_YOpd2qoaGIH$*xqjbkmB2~wpyD$y36KB@kU(@0 zK%a-c4}D;?I%qP%&zFNH6a45%fCNZ@1W14cNPq;Qk3hVwL^8_$6>z~a%AS;(w3DSd zAt&HC-8JB>ZAtReZr|hJ_Ue6be`RiDtVu@Z_!m$qt!t6@S2f9hmN$kZXo51%QseQX z`Zlyzq^Ld*(>VXx3BxB{?~;`i(6Drqtf^|024@u-UW)dnD)YV>Hfa;j@DeBnyo#)@ zHP~T|my?!e$nAsb Yw4H}?hLTk#B z>IN5cIVdB_dWyO)=tzJBNPq-Lpr;Us_I2yBs%oE?qO8KMmE30lo*;n`2t;~4OADCb zMhoXFQp62MKqUkYT^eQa?j`cTPY)|KtG*uq?G `p_t>R+klt9NS0Vofvhey0m}g7=i>yfCNZ@1cE1!S@yWZw*)@# zfUt;DntM<1nRTNW*5){QVO3}!KqV-7k{c%{$uUD*7wmoE$w`Tm%l0 ZswN>)M z8vm2?J5-rxmBh(WInn#kKp@vLBe7YkZLY#lb?QF2ZGEbISDq+$4XTksb8vN>U2c{J zl}03-wWTecOA71dlHPUd9Xb*zcU>A*RsM&IU4?g!%t@2!!wWnL^~~#U%Qy3W(*6)I zIrrq_ wkzosc|~=NSATkvK)3`Vxt;~B z{)wF65B!oqxa7`x_egU~a4%-wa;UOa>$L8ja#yDanUt26N>x>r^y}A8ptXjM1bPaA zy1F_kDk_q!tSrgN;n#dU<+}I8dfs^7(=lG{HdVecUXg%`Us>NQ7rne)HkAbS_1?_o zH8OMg29LA{=9=W?i~2}Lvg@R>M?iXz011!)36KB@#0&wGb)}?Ly%ThK)2iN BWI1z4 zT`&nPv^oN|*~-nU- N?T<2` zEW_rlQG!SI`Ri?}tgluy%4J#9V&Vdi2P8lOBtQZr(18S+Y&NC+yhY3=&v8{{jc*|m zUjimbuc^r<$w}r8D>c{BIt*>MOBiOT6653J1v{ZS2&nV~Ar+X#f##A(2$vYFZ7nu= zV8KK3=pm0tZ;PjtyAdvwEhLeidg>{eGiQ!0T)0p+ZrrGoF_}y
^LU3%%IQc_YPfBMs( z T3!R~rCw5|0Hpa>8Yg0lh z@WjG+IcBKm $#P7;I!QOREm#MeMpuRZtT;|8ofg_V zx*X6}vTrW5l~|Ovk`%R|?>)y=l~#44eV&!d!pUdFBB$oHAJ%(LUGKY(#VS8l`fj@r z0(yK)io8~oB 3r;YIv0#k=+pUnoCgq3bj!5WC_|=oBPYa zUQ%H8ehnZ*;_je@ Y7@?Z_D-_vT(^VdFgGD^fZf9`S_yQJr9)S z`T@Ce&xYMblJaC}gPf6`AQ`xc=tzJBNPq-LpqmrGykl3-JwEx?C$eVKRylOPz2(Ts z`$(qh%d2ba KT<9h*3vp_T`^Kjqct7lzKF!Vp*5JmL=K&Q0_ssDk1TvNEVDSia)2fir2X(A z52)#%$PDtgZrv(po_VIsn>WuR+eY G>Ye+e_jR-92gLmP~!!ZxR*fhyz`DgLroy=zWeTz+i$;J?!5EPK!S%HX8H2v zf^xwb!X?;WwrrUeFu{IDxi{Z@Q_ef@JS83K`E0AKtdwuQ`9}XPyzoMK`Q?{8su)a{ z1W14c+9fa`Cs7_aB~Pw-YnRy6L}f58K}`%IF4CYQ0TLhq5+DH*=spBe>%Nxc`uQPO zD7pRzNvZu>>QWC6IgMD2`03_kHE$EzyvjMFy?+Ua5!xqfn&iiAHfgZ6$R52C zt*vYfxLjYUI-K0ASz>kF{q+2Ld8R0}U9P1~@$$sBRC%r_MGnnsl;7nv$f4O*v3SvH zVu|;hPiZ#;KLN&AJcTU$1dr-dZ&WmCArqsJhA@Y5?7sCif$vMW#67-o>`S-==bOFU zgb;dpW?Px;v??ho<;vCb3uV7Dn_5gX5dI+n5+DH*Ab}1fuw=~!S-fhU&f&A!^X1EV z3uXMsVX|!9MyXW-BX-v!jaIAJl(GQ0gv3NKnek2%CqFM=BTH6qkny923eu`?unV`A zSJlX@`HSSJ{U_)+;r{9DwY1}oJ5I1heel5t>vc-!^7~s??TmFr=dy4=Fan8Kg!MJp z4I~Le;w6xt7Y!CALPKkQ@ouH%5Uk? zrE=I|he>g<`UFF{MD 3v_5g>fBVZ#P(a}E#hyY5nEnfBVt zMexHTQU`e$=9$ngJHq|= p`qm4UE}mrjuQtZ%XLR&%fmAQ6BIPA|Mf>^3*yEqw^%K=!Jk_aAOR8} z0TSp40&y)?$u4^!?4*%KUGjm_66alLBJ2#JFagLo%-EU~QpqezSY+=4?_U8vzQ8IU zuCh=1BJqVq&9Y=yv;6Z&&%AnD;-znTylkrqesO-rwj?=gNNt2ZI|>Oy(2 a*{HE18pUN3V>{^X_Pv(m>#Hu#me85mh!Qdz~cm(c4veem}HY9m3EMs zWu9%)TmJP*qsbS_bPj%|xE2|0X_9g3w^v$|^fTKe->fttnSyV_-tsd164i%$-DUj$ zL6vKxzkP6?z(kHOSD@xx*Kgk9>vTl?3-dj-Q=?3`4N@O7tS)lofwEtb)iLvNj!d{i z0wh2JBtQaDKmg;8t{QvTl!>}Gzxc+50!-U1SY|hyhqbGk@=~d(s&ELG7=a;VV#&yo zw5)7tRDvfz{nln`&j|C;H}hojUVBJ}rF{WoBaXLiSFEMMx eoIpBZ;TylNz!3X7p6Hbs{fBjY8%$Hw&xvW~{`Ji%%#Dl0OkgC*U zp;PeYpw;H&lTX&>l5qaH=bq~l0h3#9xkZjV^2iP|&Gh!$Z)@Qx)N$IhX `=-nK;zoJ@m#TnDaoU7*!H );;my9dg>?Z6-mDh^D5^l3w+?RAyXkcy;^j zI%OhcbB%w^7QP_#&xjLm>%%2=E%K3*aETFr@lKm;tZ0@&nVyTvz0*Vqm>3}g-)^c- zko8rGGBmwSm?iMoT@&)BN;QAg0WukR$q90T5-K@SX)EcS;`^Fb)i=rR8mkP+b)8&a zRiOj`f-Kj9%6KJU61w^DuDJqjx&Cc%wJfeS$*xAvHrW=+bFZ-_PRB!B+39&cQa+Z1 zATLOyGLCRME3D13R{ac@pyt%iDezn%G0tN *#gGAki^+D*=iv zx6>5Xmamhdnl@?gc7lg|8hNZMUoXS5hK8KRj2Saz)~s1NepXhN7B(0*Y?w!S{rdG2 zgdH(rgp`+;%j(suW%1(0TGNSp;N81-%aSEaBsn=*pHE9uvn5`fA^8M>B|~Uw)22<@ zBnqU__TGDMu~;lFF++*tl7KpZv>VD^RaK?6cVuK_xCik#MjX_sq@+ap_wO&zaslBC z!x`mrmg2%bBnzGEXM{Jlp~MT6uaQTnTU>JpADwf~IXVf{- D8 zUN8gXEL?&UIDY!+r{#bD`=4yvwoT`Ub^u{4cNb{eGPI>Q+r0z7va&LPa2MKz^Evl? zjQHN#Rv=|C+MRQJ+z<2T&)1r2^7HfEv*a-ekU*FO-k4u0Yj#;B#T2i8agwZm@sgGt zFCz;~GCbcb=EUFxMz23AM>dx>$%2jkRijTFlp@z1nG J}wn;(0DL$T6UE3O^T{ zV@kjTT0eXfa;{nX`_N7@B~NK98IUFi Aww{2Eq0@v|`x4;lULD>9$gCxP^xr{&e*WYC7zT;$Q z|3Yuk1M=(4wKQW5%(-BOAJ(;uH7?^kj&a^t^YXQ>Xry7Rztz{*%g;amER~g&dM$Fu zkRe8rKDS%8Y|-nXSSLn4hI7u}@WU4C-mn;fys-9$c-h%K !F7pa%6ecRac2O;SwW2US6JDdF7Rk1^6$%_`*1)w@*CrgciQQ z4RXX0N63K(9w-prfWX0*Uw-Kl76-7I1vN!er%shuUwu^u3>YAT1`QI})IwYcncRN+ z?b=L>5jm7NMqJ$VM<0E(q^GCLq)C%>8FO-SWZ!-F71-+X=CJ5LWy%yCXTSaSlVgrK zM)uruPXUYn`@jFw0s)8zjTWfOt+(FlNM`KVvD)u~3odZ@x$guMFIc|rd4+O}>u5MU znB5%&FCf$bp_||R?su9E%ql@B1%gQK4%$*6ID~79Yl-Utp(U{T?z`{YgX`n-&p%&t zG*nu_6A$96ufAI6z0W@T$g#&BD~B9%h<=!(4a1a8pbi~};fjj93x=6YCVh 7fcyo5({~p za>^-MD-rHD+zZeYvvA=;BS~&MfIv8XW=F*BfGT!sk{!XMqtaZmwLv~#TB9|Nysm^z zUiiL3p8Tdv9{8d}E_!8$9QNoIxnJ#XQ98o|EklA*PyM%(a;1N^=SzceAqM0m%HL1U z6@(2m-K}Mfx-5rH-=fQgGNP;~GX!OzHRUr^m&IEe0!}l~yuF1p>f-Gj{Q|$PWJOkN z18f6q1KqC;WR*WI@h!ehvzon_tnlV%^tDI}Y4()1vM3AzlM*H0``u=n$8W)Q-`Ygd zeOMnVt~IVe@Y_Wt%8-bfOpS$Kxe`*|*5Em>5NxfXq2#g=8S?RAg))6&FFB~dzi>%; zU8AhtRjmZ2Z8Ef%MG1O)YGTkDOoA*3>Vi7O0(<8&s_A$+W@(O`y&_BID=j{MD6A1n zlnHYTNV1z|cP@9V?*E{KGo0N?dF^YJT()X$hY6RUEW3(Jq`cC%+9dZf&Z}vPxpp3_ z?S @QrtTIw3SX(wrs(j7$s36~h rmYsI5RjS{SfzWL^xf^|xyjrBgm zAwR4?W8M4ELl4z)CQO*1 !id^04+jPpqMZ-4un;0FK8U;biv>us=ckp77$p6Cz=F%m-_kWM@I+;g>Nli&aT z_r@vt^wUq}?6c1nXvuJQwY9Z^#eKwu1{kv!wNvhKyd4J;FI>Lf@(tAQmtTHy1cg9| z;c#8gI_oTX=bd*9FUJ-Se>_m3S!CwSnGQ+3H{N(dF249;hdCNY1hw vy9>5$?cCX> zLly#F|M|~<97!f6CFz%Tc%Xy(=Rg0cJ0(YeR)6CdW~<;rEd#FANhh78B`A$F4arU8 zm|GGcfzBadZEBGZ7gfvumetC=C*;V%BT@s(I5Q<)rk|cCm%O%9s+5)yXP2(Dqf9?N zUozA-P&a#Zt=#!ZiPlsSXdH$k0TLhq5+DH*=zId^#+8y@{hr^9&5546G)#%E;|2Ew z(yQN<%Cxh^YHIru%RNkYIbK~6`t;VaVw>DC+jZgCAD2F9@iMws+vKJZwoZ)!VLB&N z7fu~Q%`?<^Ta?xeOl*hZ5|muZfdwf_TZu*XS6WM;y`(+YsBGD9E3cQTh9;#!FhK?> zvp9)9B0|6 OQ<$X< zuJ`wez5EN9tl6+h=KcI@hgPAgrdHnl>`S@q?9;sFgEC&by3Lf@Z`KfRT(7CqlLSbB z1W14cNWhuE!TXGr9VMkQOPR@W9*@?mbxCW3l4^Hzdyg3 T9Yc+2U$hV%&%!a@vsxxr7b&ptIJ}u$GH;D)%*Gqr8Evs~TZ_Z6V;{%`IQPT#h>G zDA~Aiqr-{?)`Jn=UFibiLr4U|ELg{NcJt=V)5;VK0U76Wjg89ey;}dnS|&cqk3@Z( z(~s7DC^3k~MU8~iO0-ro+;WxFdAF5?bZ?q?gM50@hb}+&{M^sqG|^SK!a00tz3;r7 z!+G1UsHkvANI~sSpk^^(G6W6Y5HNZE`RB!1xa5z2{G%4SfPe %u#9=q(a%d{WTf^fl_ zHEZ-SG-O aV%HpAU>&pq1j zl1nZzygasn#ES%9kBr;#z{3#N!dd$Yv|bqQ-~ax%L%0O0oSuC0NdXIJqJfqVI0)Zd zbImn+A8id9M{q6RU rDI^`p$Di%nw>yMOpb6!fXP(glD$opqYYT_= z2JI?=IA~ijgeuS(oOj-N+WZaDdho#qweSX{6TP`m+Lm)VhHweAz?^#Osq%+E{6P*n z$ll4LEbdxepkW1^;lL30Z8&8>T2Rjg2PsVmaye_Q(I@yPq68w*cSbUeh*r)^VoQH1 zk|*w+E!CBFNn oF5U#;Alx?aqjd<_DX0JjK-)^!A zgiJzpWvUKUsxHyW*|}WX>eaoaDjLkMcWR nXS&0cUIK_u5qt-y5e>2Aj-l5xBbAFH}w}lWR!y&4SnX0UYD^_)=RCS4F z)-0RneNHB1!ZyG*z%~$C8!-C6&e|rbKKGns4wGxoJ5@5%+DtjtR<&u~H_CFx@xPOY zZoOVkI{GmE!#@1nopW5XGM97Safi#F&pSoZErET|=$@W&+*xaB#l^+iDhAd@4F}C1 zIL7a;yY32UJ=RFe*h0Ah)}O!r`fK^?U;nB#i{KnS%yzbVfiQ+}Npf ;jF0GOb#*N=Jo;5@+)%5SqXu{VliLq6Jp) zaDrBeXP Qi`_LP)_#1LlN| zKmK@a?ghdSP+RqnfBZu~Gz|eC2vC40;= kdv&o;+DDzx;AX zNC-*5+zzA+@nFV--4KLw1ajNK^+cP%H8fOwRaaMQp(#Uf3IauF%TRAMZrnIW3Zb+u zN95KWw38QKd{LVXf>%mPitcQ%4-GNSf;}I6@PWRMaLy3^3AYUB%pfp?>qbWckt9%2 zUMK&1e}y#EH_3nBUM6Q=x{tDf7|9&EZ(3?DRsQ;UnGDP|$ =blhX!;g|$_l?x1w0&gY9wye0i|RUOYRjzFXdj$vmJvCg!YnmPsQ3BBjbWoi zU51;&Pbchxw3EQDM#aFhNqWSBmJyh}IeDN(CM#_v!MsA$D?yQM>OG{^YX5>TGsPtR zvr_!NhpeoCgpNls0`k}u0h2!gWfb8+C*;)0M l-KH%va>yXB>7cAXRknRKy;*&CHKzUIdrga;BtQZr zKmsH{0__tRJAANQe%f*J&?|PU0q)vMa_Ci}LDJgM2t@i_s $_p&7&W z8H80n`sgDUDLn8rgiDM#uuldxQh~Vf WB2CSKOWU71K21(mzf;uj)O{=g zkJXyg*JyWtS}MrXn}eyHQN7Ko+)1+Epd>k9Xo?&(JVo~GV+uHraQGT!3MUQ54ZIzZ z6 ra zf|94W=b$7RSJ0*jz+eq|hKJ`{rMNak$p#}KwXIfl=?aFy=2@$>Ao%;2tT0_UDnmXy zqPIMxw3WaVj`xwWQ{`KCAtb%4szKK7u678Q 38Jr10w(^-_4|qCXB%W2U>oSHHsG^!?1U5b*0%AP^SThS9^Aj5Bqn&iSHN$` zfc`F}Yqqs% Uln z&AX^j*~!^bRAX;&9bJSRl~<_FS!;>Abd|3(aowTy0uDkT&RS4#b3vfQ-C+?OH`6!Y zd?U~dftv{0Nel ;l0CXPz)m0}UGP&fp1u z2yPhCeu(eO1Pe?gL6D_A2UAXv3WOjD+#7Gap??qxfhi-T5A8OPXbi?dOUeKJ-~Z_! zq!RIPhn+NNF@X>V+CJJLRAr4AF+vNrII{?}Z8?_-T1YIGHnnFshqevjD%1 FFR3gKQ>$T>YL>Et50uf(vJj4fCNZ@1W2G`2xQj0A*QA+0VVFu9F8|XZ;6?j zHcMvBf22I^LT{&I-mlK)Id>7sO2KmBZBvwBZa>dSVC3_}0;_zz(XM49+ #m#v`yp(65csXeOs2!-Z8QN zz@Q2_Wks$uG ?WWZr{WqeNv&~4+I7}iTA&}0hf=@2 z_ukthnzuFS4I4H%!Z}+TaCoX6Xg_gxXP yS8V6 z!9CqrKi1;b?hF3GR4Saf!Q|6bVRKV*d e@$_+! zlbqw@O#9w2^8x`1ET-cosjI8g<~jVughmBJiVKVQSm-vKzZ;>ju+RvmrM;XN 9hYoc kb@EYR%!~y;EgiPJ&$XcCjdhB`)sSITdo)$YjY% zZF@0r3E*~MC`56S%XACXc37ci`k$ZErb5v;lWR$kr_bpn*g|J`py?U$J7U`%u6IXp zVVWdB0wh2JJ%>O-bE#xkJ`-?-y=g1)rq#q(g4vZ%OJ&N5VvBG4_`_G&So81bamDY) zn&gN<-i1q^S=1=+uWI|MFkE)1OGnoy+%h75i`LBNJEc#z)F`t!X_93QY~0(d>b;|~ zK}u>|1*Q9BCaW=Q;1lU9%asNbw=uZyQo5c&8DfFGYpLx=Lz5ciAA`%~>h)RD*b >vu?|U2{^f@uD$&ux-PVnxel scrchm5Ctv^ct0UP2lUc0?wVA8iv~{~IP^R=Ij@#1_20QTEv~9bKpGn0v+`{Fn zW%6F5Bs;_N!$%`bpxe$~OLG?Z2(*lWh6{9!*|6q-bd8U`-Scq&h#co(`2toJ{`ki~ z%7O(89PbQRi^uPkS6-1(qef|yI|Bv`a8EL-jw3Y=L^_G>EhtA-&AXs5qjUF=--_F` zW^`l`#^l=VLxqwDq`x371 w)M#e)64;Khl81cMC!oogme}SX3HW+VVL-lhOD(PW5 *|TSBZ6DwSsleNBzg<7Xy-5!mX+t~7v}x1yA;LpDi8r^$ z9(%~kFTd=tlQw_;d>t&5w&k3@uY2L}!w=V-A=wB4pr@XCN(}Qj5PE_J7sG{924DFb zX>&^g!4j~kN#l>+SgP(p@1OE**-$P&ez!^XKXg#ANq773`wU2uix0?<7ru8D_NY>y zMLw$pKyEtPRWnJY^8anSRi+F{4v5XX_4Uf6O_F3JyG|ZI{avLXEq8b4aoMfHCGKZ< zOadf80wh2JB+yj^a;yF+@h!f;ICn3XH*F>6#K2e5kylRT6S6z&F88Ek{x~Hea1Oy% zwoh8ToHwTJ>qF=Gk1EY2A4O2O1Zj6 %CH-um3|;ls6A7ih(pJ9n-eaKHgBaUcu 8GD`5->00Pr$_4G}FwPGxfdT z-hPd;7;OW`hTu;qZOcdxTk!GbAb 3^}_b`DTcQ=mb?PrlMeydfJ z<*r|}ezK%SP8^piqY6v{*`1G+Nt+kvR>^7mSY-dffvNspw#_Q{{ yG2(IF!?E#oaAny)qg3)%IHbOHGWEgOrfTQGG3PU_r8&lomt?v~RDd zm-0GSvo`T+o^oJLililZf5q#&KxZUgCM5I0Ce@lM)xZ8cd9;O|Ue`CwuIYH+H9~ zU#jeC^wM~Zz#Y83w0DifM~U{tNK`dVwGU^vrMgyDuH7KD$`nq$`axwq_Axh;s7zQx z*kt6;L7gIClGiIo>Km-Gc*QC;SJx<3rE%DlkSHc|qNFA#%T_ndKxyjM<@=cP)#N@2 zkN^pgKzAd6ey%I}x>-N|B5!>DwFgd1dZtvBl}fXdW;2-6`{yff=$}V~R*!f!rm$qV zey9lTD3AX8eYyJVX)=D)Fkeyq`giqOn%}~8;7P1)8V+li_)y*5z4g{x?q2fmfB#!n zuU;*C?X{Pje){Qh;e{9KA3lzM@x>P%>#F#G9^=AfHU5f5XWSQ&x;Nq@l~6RoibR=) zWet@=OPfiUNTlg44dgL2Ylyc~0sCEl{q c;N--X!?PC