From 61da1248e59101c1305abac0ecd4f464ac232286 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BE=D0=BB=D0=BA=D0=BE=D0=B2=20=D0=9D=D0=B8=D0=BA?= =?UTF-8?q?=D0=B8=D1=82=D0=B0=20=D0=9F=D0=B5=D1=82=D1=80=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=87?= Date: Mon, 19 Feb 2024 20:11:12 +0300 Subject: [PATCH 1/4] init commit --- .../test/volkovnikita/HttpServerImpl.java | 108 ++++++++++++++++++ .../ru/vk/itmo/test/volkovnikita/Server.java | 30 +++++ .../itmo/test/volkovnikita/ServiceImpl.java | 46 ++++++++ 3 files changed, 184 insertions(+) create mode 100644 src/main/java/ru/vk/itmo/test/volkovnikita/HttpServerImpl.java create mode 100644 src/main/java/ru/vk/itmo/test/volkovnikita/Server.java create mode 100644 src/main/java/ru/vk/itmo/test/volkovnikita/ServiceImpl.java diff --git a/src/main/java/ru/vk/itmo/test/volkovnikita/HttpServerImpl.java b/src/main/java/ru/vk/itmo/test/volkovnikita/HttpServerImpl.java new file mode 100644 index 000000000..e4bd4a84f --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/volkovnikita/HttpServerImpl.java @@ -0,0 +1,108 @@ +package ru.vk.itmo.test.volkovnikita; + +import one.nio.http.HttpServer; +import one.nio.http.HttpServerConfig; +import one.nio.http.HttpSession; +import one.nio.http.Param; +import one.nio.http.Path; +import one.nio.http.Request; +import one.nio.http.RequestMethod; +import one.nio.http.Response; +import one.nio.server.AcceptorConfig; +import ru.vk.itmo.ServiceConfig; +import ru.vk.itmo.dao.BaseEntry; +import ru.vk.itmo.dao.Entry; +import ru.vk.itmo.test.reference.dao.ReferenceDao; + +import java.io.IOException; +import java.lang.foreign.MemorySegment; +import java.lang.foreign.ValueLayout; +import java.util.List; + +public class HttpServerImpl extends HttpServer { + + private final ReferenceDao dao; + + static final List METHODS = List.of( + "GET", + "PUT", + "DELETE" + ); + + public HttpServerImpl(ServiceConfig config, ReferenceDao dao) throws IOException { + super(createServerConfig(config)); + this.dao = dao; + } + + private static HttpServerConfig createServerConfig(ServiceConfig config) { + HttpServerConfig serverConfig = new HttpServerConfig(); + AcceptorConfig acceptorConfig = new AcceptorConfig(); + acceptorConfig.port = config.selfPort(); + acceptorConfig.reusePort = true; + + serverConfig.acceptors = new AcceptorConfig[]{acceptorConfig}; + serverConfig.closeSessions = true; + return serverConfig; + } + + @Path(value = "/v0/status") + public Response status() { + return Response.ok("It's okay (c) Tinkoff"); + } + + @Path(value = "/v0/entity") + @RequestMethod(Request.METHOD_GET) + public Response getEntry(@Param(value = "id", required = true) String id) { + if (isIdCorrect(id)) { + return new Response(Response.BAD_REQUEST, Response.EMPTY); + } + MemorySegment key = idToMemorySegment(id); + Entry entry = dao.get(key); + return entry == null ? new Response(Response.NOT_FOUND, Response.EMPTY) : + new Response(Response.OK, entry.value().toArray(ValueLayout.JAVA_BYTE)); + } + + @Path(value = "/v0/entity") + @RequestMethod(Request.METHOD_PUT) + public Response putEntry(@Param(value = "id", required = true) String id, Request request) { + if (isIdCorrect(id)) { + return new Response(Response.BAD_REQUEST, Response.EMPTY); + } + MemorySegment key = idToMemorySegment(id); + MemorySegment value = MemorySegment.ofArray(request.getBody()); + dao.upsert(new BaseEntry<>(key, value)); + return new Response(Response.CREATED, Response.EMPTY); + } + + @Path(value = "/v0/entity") + @RequestMethod(Request.METHOD_DELETE) + public Response deleteEntry(@Param(value = "id", required = true) String id) { + if (isIdCorrect(id)) { + return new Response(Response.BAD_REQUEST, Response.EMPTY); + } + MemorySegment key = idToMemorySegment(id); + dao.upsert(new BaseEntry<>(key, null)); + return new Response(Response.ACCEPTED, Response.EMPTY); + } + + @Override + public void handleDefault(Request request, HttpSession session) throws IOException { + Response response; + if (METHODS.contains(request.getMethodName())) { + response = new Response(Response.BAD_REQUEST, Response.EMPTY); + session.sendResponse(response); + } else { + response = new Response(Response.METHOD_NOT_ALLOWED, Response.EMPTY); + session.sendResponse(response); + } + session.sendResponse(response); + } + + private MemorySegment idToMemorySegment(String id) { + return id == null ? null : MemorySegment.ofArray(id.toCharArray()); + } + + private boolean isIdCorrect(String id) { + return id == null || id.isEmpty() || id.isBlank(); + } +} diff --git a/src/main/java/ru/vk/itmo/test/volkovnikita/Server.java b/src/main/java/ru/vk/itmo/test/volkovnikita/Server.java new file mode 100644 index 000000000..51e1b3ae4 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/volkovnikita/Server.java @@ -0,0 +1,30 @@ +package ru.vk.itmo.test.volkovnikita; + +import ru.vk.itmo.ServiceConfig; +import ru.vk.itmo.dao.Config; +import ru.vk.itmo.test.reference.dao.ReferenceDao; + +import java.io.IOException; +import java.nio.file.Files; +import java.util.List; + +public final class Server { + + public static final long FLUSH_THRESHOLD_BYTES = 4 * 1024L; + + private Server() { + + } + + public static void main(String[] args) throws IOException { + ServiceConfig config = new ServiceConfig( + 8080, + "http://localhost", + List.of("http://localhost"), + Files.createTempDirectory(".") + ); + ReferenceDao dao = new ReferenceDao(new Config(config.workingDir(), FLUSH_THRESHOLD_BYTES)); + HttpServerImpl server = new HttpServerImpl(config, dao); + server.start(); + } +} diff --git a/src/main/java/ru/vk/itmo/test/volkovnikita/ServiceImpl.java b/src/main/java/ru/vk/itmo/test/volkovnikita/ServiceImpl.java new file mode 100644 index 000000000..274bc8828 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/volkovnikita/ServiceImpl.java @@ -0,0 +1,46 @@ +package ru.vk.itmo.test.volkovnikita; + +import ru.vk.itmo.Service; +import ru.vk.itmo.ServiceConfig; +import ru.vk.itmo.dao.Config; +import ru.vk.itmo.test.ServiceFactory; +import ru.vk.itmo.test.reference.dao.ReferenceDao; + +import java.io.IOException; +import java.util.concurrent.CompletableFuture; + +public class ServiceImpl implements Service { + public static final long FLUSH_THRESHOLD_BYTES = 4 * 1024L; + + private HttpServerImpl server; + private final ServiceConfig config; + private ReferenceDao dao; + + public ServiceImpl(ServiceConfig config) { + this.config = config; + } + + @Override + public CompletableFuture start() throws IOException { + dao = new ReferenceDao(new Config(config.workingDir(), FLUSH_THRESHOLD_BYTES)); + server = new HttpServerImpl(config, dao); + server.start(); + return CompletableFuture.completedFuture(null); + } + + @Override + public CompletableFuture stop() throws IOException { + server.stop(); + dao.close(); + return CompletableFuture.completedFuture(null); + } + + @ServiceFactory(stage = 1) + public static class Factory implements ServiceFactory.Factory { + + @Override + public Service create(ServiceConfig config) { + return new ServiceImpl(config); + } + } +} From f24af1ba6e708e434adb291cfba9909c7cdff16e Mon Sep 17 00:00:00 2001 From: ravenhub Date: Wed, 21 Feb 2024 21:03:39 +0300 Subject: [PATCH 2/4] data research result --- .../data/stage1/get/Histogram_get_2000.png | Bin 0 -> 110189 bytes .../data/stage1/get/get_result_2000 | 81 ++ .../stage1/get/profile-2000-get-alloc.html | 389 +++++++++ .../data/stage1/get/profile-2000-get-cpu.html | 518 ++++++++++++ .../data/stage1/put/Histogram_put_6000.png | Bin 0 -> 109731 bytes .../data/stage1/put/profile-6000-alloc.html | 502 +++++++++++ .../data/stage1/put/profile-6000-cpu-put.html | 783 ++++++++++++++++++ .../data/stage1/put/put_result_6000.txt | 84 ++ .../itmo/test/volkovnikita/lua/stage1/get.lua | 7 + .../itmo/test/volkovnikita/lua/stage1/put.lua | 8 + .../itmo/test/volkovnikita/report/stage1.md | 507 ++++++++++++ 11 files changed, 2879 insertions(+) create mode 100644 src/main/java/ru/vk/itmo/test/volkovnikita/data/stage1/get/Histogram_get_2000.png create mode 100644 src/main/java/ru/vk/itmo/test/volkovnikita/data/stage1/get/get_result_2000 create mode 100644 src/main/java/ru/vk/itmo/test/volkovnikita/data/stage1/get/profile-2000-get-alloc.html create mode 100644 src/main/java/ru/vk/itmo/test/volkovnikita/data/stage1/get/profile-2000-get-cpu.html create mode 100644 src/main/java/ru/vk/itmo/test/volkovnikita/data/stage1/put/Histogram_put_6000.png create mode 100644 src/main/java/ru/vk/itmo/test/volkovnikita/data/stage1/put/profile-6000-alloc.html create mode 100644 src/main/java/ru/vk/itmo/test/volkovnikita/data/stage1/put/profile-6000-cpu-put.html create mode 100644 src/main/java/ru/vk/itmo/test/volkovnikita/data/stage1/put/put_result_6000.txt create mode 100644 src/main/java/ru/vk/itmo/test/volkovnikita/lua/stage1/get.lua create mode 100644 src/main/java/ru/vk/itmo/test/volkovnikita/lua/stage1/put.lua create mode 100644 src/main/java/ru/vk/itmo/test/volkovnikita/report/stage1.md diff --git a/src/main/java/ru/vk/itmo/test/volkovnikita/data/stage1/get/Histogram_get_2000.png b/src/main/java/ru/vk/itmo/test/volkovnikita/data/stage1/get/Histogram_get_2000.png new file mode 100644 index 0000000000000000000000000000000000000000..35c61018059c220529dbe0efb9d21a99651870ee GIT binary patch literal 110189 zcmeFZcU+T67dEU2qM%?2ARToD6apemIu?rbNQ+b@(wp>NT~UDm%2K3D6=~8!FO~p` zN|W9@0Re%~+k4{k?o)Q3ecs>q{k?xhZj+h0XU?2+o$FjPPc_sOj#DvF9XN2{_$|eo zw+|ek)H-nBQ2mj^@FY-OIrzW;L!e17G^LOMs~IxATP9^0!O)+a>&jA%DAszg@yVP~_h(;cu7lw@dgv<@_5Z{EZTR z(gOdUIJDZ6v2Qjhv`@?IZ@#^^`{S{Uio`-WrtWx$yB^1nH1=KY`H~K`hq}@mBM&>4 z8rfwwTx7oFJ!|MA8xk;d{AHV=_QxYa@L2NUixs_vQt}EHC$>9?b+LG6rEqYHEVZv_Ni~E zmOFvS!F2HzO?P8i^(2yzTl`h2nYUOa>v3!G`aYiD7lpW;=Cd=-uAaR0Eh{MWf|1OK z|DnTm>tEe!1zDY2uRSz&bF@Qdr-&QKHei`!hKQM>8Jg-+!g+-aOd%{+NUt!V?zBd?T8(WiR7zdO92IJDJOM$Zd$jJX0=h!K|PT0+rTzQ$Me{dw(r&7!a)bK|k| zZ}#`LvpUoy^4v|!17{U25)<^bsb5c`O*&^YVvOQaM|u`;A35XG!S-74wvBoktl5i$ zS{kf#lFXL5MqGcQ%4TQ|Qgkjnd1!Qkqt%QwxeZDmsQJoM&eQ~2t=?+=n5uieCNJ5X zr=Z$#3(Q7z;u|{AyWh5qE{D3Hdim4Y0{pCK|GvmMDPrvA%5;`+w}Ig9O7cFh(adV# z>{p4!gxU=}KRxEoo4eOMC!Q&^C+`unoJSuq(95lF81;S9uRd<+(5*IX6`DhQtiTX=(+MF$?-@SJ)1xc$S^ z(;?=m4NlCol0WK8MuV7XPTuiZ?W7EmdXMs%xxuc)mFV0a5tCmr6-SIJ@V+4TY<{6? zk1vI||&4Tf&tt&ZeOwA6aD@m|r4pJaZx5GF9}~I4LMrITL&m=Et`8d%&nF#a$=`3L?-d=5gaeueY#ONC?w%K^AJ*FMcV4PrA zF&T|m;mWVsoQh{?nfKoAA2#~DI@)Kk%~)}YV#kFvHGzlI_Ru{Vhf#Z3EFQu(T%K^3$Ez~?D>8WZ)FwULh8z~XYlM5&pvSfzQ@4|GrdeCpFv_lO zcg>`>py<;jIR|myQ4IX4+~V0)e7JzQ5f;2wndrMQ`Zz>v1^krx55^pacO+MPh*nY~ zVSmnezw#<4ZyNT#aou%c--~DWz`BfMmSY_`(XoZ5l!P#7l&lVdrKlYRrS)7 zzxXB_o5Xg5->pV8c`X2pRU_uaLz~d6Z+C$pv1iI0&XWS=15(2MQL@q40BBO&y1 zeRa?w;YEx0)RT^q+8>T>atw4nPXb#X*cQ~RT?!sHl^Ff?^lb#PnO<&yd#bC9n;T{; z?BTF)chyi-?cQoZcu(EymG8f4s$DcO#JTgCA=I1cqfxve=laI_ta9?AQ!i^8pYa`9 zNfJd11*e)KdLg_NBk*Gu1wQlEAuFHg^&92eN^lywel6U&4KAr~jQis{TUNV`>$qRZ z505cW&FX)SDsGXk;{GmgZT8YSJ=JJ{e}R<($DPWTkDn`CeLyU2)5%C->dsA0UaH|< z2r@2_r+U4le1v`P$Kw!_@iDy#cLZbF8>T#^Yo&WN+*CL)&l@L;El|JkPmd|Ctx|NN z&oVou@5n{=?KSd0`M{rAy*;?dw&Pkxr!~&NaIQO*yDl9!EW3j zXO=&fCpZ+q*|MbBeI`GG$Qdw^Gww}2LdQdsQ-a<+Bhyp2w>3wp9ugH-_?#!0ViKBP&StmD{IE}Eq6Y;~X4=uNSE?|wCz)XcTZ9pn?D*#SqVllxn) zZJ}o&?hV7VUD=>3!FYd5*TFm25!o*`oe(*+hAX2p?i!Y%YBn8i9)B-IYi$`^Vd{(%6>5z6W?ZT^31^ z;AGf(?7;=yXbjdQOfL76j=lzV%=Pnl`-QNl1@A9Sc~t}o)w1i?G%TS`Sj)>`w5@Ux ze2pg$FDV}^9J{>7LrpZTi!t`yG%>~OFy>^2OD;E=JQ}+YV{qjvuG|bUpC-qf79n~2 znFE*(B6;{nkm#`~_1wE*sfH8sHiIk_gd$d_&jJL1ZZi)w@AoWfBVRSh0lvyH$uRF# zlir+oYixJMGPkf@Ovfo&?92++P_v0j;X7hcGas`7iv7`O?7jd4M%bmgMXsY!W@gg$S+Y>L=^t?%`Ovq@_LZaE~IJ=8Ebi zy8^AiseFHMBIiZ37`u-VcwegF2O)(p*-{TNPZRdW+4p0+jJ)RGE(*{2)Q%pVmHi`@ zk_{qNmktj`96h0^dhwO~v$Me(rXknO=3Vm?SR6h?bcPi&6}fIVp|Nx_m-+i2v}j=8 z+1RA%)AM3-y13(h>(6bV9Ureo;~9{_=KxaLA1=6Kj0jGZLr8qRIv$#eK9%#{KU5WT|fJQXf1*OOvat3vPPamO~_DZim^%cuHZ+~~~ zTIt!GkI_QLbBzp*@~A61HgX~7?ju^QbO*ca7a4tC53&hU@vrtb$SFT z!`?w?rNz?8edX4PLgKE4k=-ll2@};h8iQ;&gF)&e=+ep=^^@g8Qg_W|wtL@pTkEdk ztwv}35MRf|QT0#f<;r@^;>R}n=-w~6*s6?`bF;|btF$Sd`tp5xV`)4@f2Z4TSGVxE z&FAc%qIH?QahcnncZ=ju_JBOk?1%>^7WnPXQP#07Fup!d#~7ofar_}xbf~=Nu$W$M zW!RXHjh`WNvZISTA~3C~s$Gfacx`QZU1(+sQ=Rk4I&TziBO|Eju5>%vIwVmuOAR?h zYqibvXp8%L%%hquRQ)GofSVpO>1l(KT!>!B~;o0#&|`tTv1s z@N|R={2sR)d~;t9`EJis>ee)_n>*br`jeXWEEyC-Z!`+ie;m&caJ5c`rod4%}vEycq-qf@cEBP ze!tC;ZqzY}x!mHzb$00~diyqQ+&g&M4r~40Vx{qlmrK>3EmmbL!nNO^j)ey5^^Q@l zmf~M=XYQ_*)v5O*fuWi4j^}USV;HC{uHJD!!9gjudqsw!hG(aS!KDh0*@4km& zVMkJ(FEkO>A&RumHZtI!^l5uKV7V{LKP%%EYFK}F7i;OA?N2*tRV_tKXk ze>~W=y`LmkC`r{{=vi)nW$F$NG?(lan9?pmpESrHz;>HN8AuKn;qW@SO9_n@)_J8m zs1H2)J|{2f;PLziev@lnE=T8;Pe$w0Br)hyc7I)QKTBnesz&MxHI({7`cRgh{9ejy z-3K6I#5oU1N}OvcMv%%-`O++&AMq`JEFakw_26W3Q&|xnSG>g1Cf{cPA!kUVYD*&N zf&&MM#Wawgcppf zf@ShgSDX^l#Buk@OUuti2U_jCQwWtAI^9g)-`FjkB~r`Y!bh{dEXC`%HsrO)IRrkBH@vu;OC_$%)7)=RONv~DC_3G7Hg|Rkk~JYW zTT(tCP-m@Q?S|(!`;BLMycAu*^k{&TY4KnBws%TRl6f_V+3t)8-o!k>UB|BX9OW2e zb6dlfbX|JF8q*&kgnxYpxNtMFgJgH8gmS=!?#Z8AOby|?MCGV1x%9zAYEHLL__hYN z^XU@r=SxW3?hY|aM(R6lUs?|i5IxedqKB&7+sJHQDIYDSExj(R7EJeSX`u5GGB~5~ zdI>LYXa2W5ezN1blKSm6v(!i5=OtlR=8^-LT5e#q!%TCAT?Lb>nB=-F3bBqACT`_) zZ9AYs-6^bZlmdUR}E+)dQKGQQDAx ztQNdgSYedg=CPqZ=>~q(2a(>T+@YR02_4SvvNnWPOi8I*XP}j2vluQf-@eerEjJLU zzay2DH-Mz*+!~}9iy^NC*hV8ECrx}wd%SmS8xmFTrO;W6RU_@;Y33J^VQ2rCbWZSr zGGP1IWnZ!vR6=PfOcdGZx7yPBPQQGD4y}_1#oAY!yRFOES+g&rl1}HaH*2SsQgoid zRQNn#VcyO58L~?A36AnaafH(AKb0Rv20to&l+9h)KwrA5-^xc|TOHpfsQc+jJ}#-1 z8y)>{TAgLbb!WH!5G~7&xXGFEFm2nmPf_`Ww${WPa0^seRDx}ZHki((`dIaQw`GF1 zt_peX_aRf~fCI3q*|MImm`-}wG8EeVTCxL2w;Ouh`*Ta5>wIZ9eTxTDzl!?xsyy~X z+FoysvbZ^z=~k-Qd~pPrvApqE@7qF`^(bAViVveV+xWM1nIlQBsQa{g_(A%5-c|(* zMf>QGsL87Nyldyude6H`pe>&1L%P#g{n|&wA+K3MW~=RN%gubB+GRzf^EEA^SNvFS z{3*LJgzRRW@$L@!6*>#~Yr?p*SUP{xen=8EbDcw@u#g*F(ut04sSCx(Yii^fzhr8$ z&8wMG9A%!P?Hl*VL}~Eq+q6hP#{0~!s%ft9ouH0qbe_ReCb`c=vihdhz02a*Fn%0^ z)Oe`i;l+IjQx#}i-F}m*Z_8pSlS<$E=7TYGi!ysl;U?4*^7^}yA#}B?`koC`^=Ly; z(@($Qjc~q`(-t~Z-3%{-c(mjxXYQwwjNRK6q$#JQ7*w!O@}Wu9T<7>Sua+%MZ( z(?hiYyVMvA9=v_S$-Xl}sX1ZNYvp(G{x1c~3HaSHmGe&R0)LbRK_-dNa!Nkfpw6Kg zP)M(Z3HgXdq4O<5r!-n!82Yl5E1+q&B2p<^UEc0#Uu z*&|}S0jpeS>OAkwd@+g{c^&WMi4ivFr4gS=aejA{i`Q`z-G;V1&AR&(iRtfbQDe}W z!%8nbRZn;CvMbgD7l06Lp5|0w=TuKJ$W7o+#u{X#=t%@|f0Iv0+t`Fm*6hcfPp3Im z6rZgug|=J3ibnIOTW_;D32f=wy=QY0@_ovYB*QWuJn$5giuW?8F6b)q*V+Q!dY8ozb6)mtAsGhgj91EX zr#J33(H|gDt4+JJ$sT1u=h3z3A@z3!wbDjbtA=;&nuKSQ=fw;hcyyjMeCl-XvfL?K z{=`FT=hqv`Uee8Q{`atUoG|^Cl3g-=Mr1&su=0}59k~$ShOQ3^Y##TQTo82mkWzjU z#QAzd1hn1SZ1Izx5J%m7s*N*6T?KdFUb6Qhz0k@wue3|4@QZ!Pc({x-9v4SqRhL%B zl3FU$)xuqpI*lZf?rjz)@7ny(f4|B#bxo48IDr~Pu8rw@@3w` z07fa3Q7qlz^SRb#T0|yDbz$ky2KN<6UleSP8sv|JEaGYB#viYl zh6F0-{t|NCs3co6D^p^z+UbGz9dG{HF!tG)M>*(>Gjef`+XHCJ)vmHyVW0J?VPyVE zp2pNS+VtXaOApt!Y%c=M`5qxx=9r60cPA(ti=$hgb{gG7?GH5fhzsfD%P(>2Nh+5b z(BaCXGR~`h-CDvg6{;>)4Xx&ned9)dpii7!(I5BHw=LD)0>>!!J%hx{0jv+#?hjT=)Q>n;mG+y2gm6^mwifx4~PoRFwSQ|9cZ^7MhH)gk8` zcTD7ZXOj!`x2ee;R1mku?-XE5U_}us82!;AxqC>el;O>!&TsIeb-Y z>}r|h=9TxxL^+rAT;mANE?p$BZ}&8|XUXgm-tx&^lcX9q?KcTQ2IqyHPafOl`J7fR z=C&~K7Bfrz`b(^NVbLaV{Aa2gn~m0roIhTOLGZMv$>k0MA#(iAMdqAs>*@E3Mw58D z|CfcN)V69!EjrKFR8P>il?|WPV^_51QHaXz zh0HIcGrsV+gKgW{;24xQW4_$I5!e8%%eN6bCK+gVZCin%NOftCA0_BsI=K&E>!YGn zmr7frLJvLeUnr}V&8-ZXzSvdvM1S6gY2I9r`ZY=@#Dn2cS`q$JzdMa7A}sC5X&(D# zdi|&cU^X5a>t1}dH^xxMy`XJp$;$9Fbpnc3@lffhJlhg~tf0qHc*?ZImFScXi~HeR zjFr9(KkFtv57&C1b%78hFb1MYhgkIU<$Zrc`aV53WtdA0t>!kS-X7kW5`DtOr};XWyb#>2l)Ndd-tdp!$P6)oiw(A{A_2 z$b_Ui1DmTeqivX5<)%aNT1C-&)m*d#-J_VE{1Tf&TT6tsLPzQogR0vLneld)l7u&a zsm1ls2U=^S!y>KclIN}tK)To8DdSbBBol9_f%Q@dkV-;%4S7t{@pPJfO?Z*| zgvsH_Sj$057LDBJx%QBaI`~Q^i{kQYpbis4=f5P`hh}7LIfm877PgC1>Af%2St|w* zi^v{}p-X+m^r#ly#;_uY;|ybA&2H+kSlF4j_fyVFa8yDa3)!UCF9|{+;@5jH;qNSV zHkPzARRyw|ZF3$=2;?*5e861rl3Wp5C{7RDSHvKvwGm1fIiK9UQ0=%$rzA|NeePCR z?Bl@)^Xh(En&J}?H-e*b3mv6^5j_S4aQ<{gL9W+aRSOg;VI=x(B$v7xFsHgp2J+ZH!pMK5rOOB)ZUh(P;Q&DZjvBDQ zaeQ=1A**=_w+_@E^6>OEgRNsPf(tv%ZBTl+o`$Qq>dwCyl`)LU8)H8Kqq3-|hpg`f z4HQff_)nk!$Z%h5RdT7+ECCLv(c)>IF)l2d@nhIn@ z@juZMq>*nK$X+XLIb`Ebdgt`|a9?5?2p%Mm?T_ZmhNTU?m++QjAD$+DH*#3~r`Dl8 z+&y!SRC^`%b=Ts?cRT)T%g|mf6oJim2NR(qALI|n;3elF>=2$Qu-zJO3|D8iE5GO2 zC^3Y})te78u^L&dUinH0=E+wi)kt~rN^bW-6}DsaF?$jzd8rMBW$>J{0 z1gZShfJm?K_f(PQ?C+@}*~s5k1^f5!4M_4l|MXS&FI=|n%5?_aK!$aG1t%123<;o> zQq;^;xn*5Y*(`E| zmc)g{TJlP*5n$346US5`o3jrc0gQsAu{Z}a`v$Sni{rGK3@AP zPb>Qvyt)L-fikXERkHPAKfgZnWS@2*N0M|59PlO6NnZ3kw{_9?9tlBAaRwb)#>!U- z{x69VqN?#C$V8vDUdvw77*>{dAR;Pu{w&alFis|=CJ^&NSdFT6yzE59W~l$tIj4Zn z6=pbc;tXP=J*M_IJ^E{zJpze!UVB&Q=@Mh; zdeNxgXML~(DoIlA1HdWAe}!yyZ1eSWvY+pY_>|IL&E0_j8i*^dM}};V5?|MU?=9|N z9^Pn3-QHfT+rR4|Tq_N=Jbm5Lu%X*v6kpxWG7)&WeC|xP2lWRn8(H00 zu6#%f6Th?zi6n2*%dLq>bw1Y(P-_{HxZB{o0O7y3S5YXfx;i-%v0!Lw67wa*nnfS` zHw+z_s>&puu5i*mS0vA#q}Zwi0b8)WebGlwOAux#lZwF|pwa0_bQ`*3L+K6b2t)yt zwOiDFBJu=VH&RmA=cBy-XYm|Is~efVO`+T{_M<KNe9290XOgP(mf0E6dJ}zIN$w_<6VH`{7yU>o$^v&h zPahj#7hGi3*+1E|EIUXy*Y0T?e|jL`9_%XBV`Sv=h$l$DMbKaogX;<>v=L@ z1=ah21!xEJ44LPkr9~tRi{qbU7L!ZsT%?=wBXctrZ;ccs=u5T%% zP*bRh6Mk;WtXq+s86kX?+*o#*+S~l$p#O7T?bOX8>0f+S;)ipc?F4Do0ty&|^Pj~- zi^#Eteidj@MYa2rob1rVDa&!2O#f=j%uMUaa~$@LPfHwd*Jbxgu6GI_Juzbji(nTP zR(sMSt$v`wsRM)vv1}lUEP>o01ClA;wFMNp)b{t{kZykPDPu3Pwfi73jDYMTlbA3q z$(88%>7urp?WaPR=0|OES58NWzMvR*5PyloFYXh;QZHjj8RonA{&wO68M;8W?huk#7E^wuP+A_%um?$P{P#H23j0pJsly#n&vjn28%DnB5Al7>t9VcQ^UOe20lke z2%e1;6Y7mOQVx+HDY*lA$(Ip3g_L*->E&nP>7+^x$t@GUX{xJ|xZ!hyHNb$hdkt?7 z37LOQC;?q#7A9N@ca@W>2*r(Ew14yVF#c0Vxtfmzh$%ZjajWOO9b&v=0@A{yPS;cH z8+~dEK|UND_FEiJf?5S&@dP|Y7w#SO=y?COV>Rq(Q+!xkl>;qxQ#>0@Qofsk?4GkE zxj10xc(9lLV+*e2m3KydCd4FhcpwFJu&wv--db4}=%mGw;D#)xKEEJr%@y$Dwy@fn zZK<(La-Bb!FOt&vQf=sU0{HAiksE|Vh>@A`4 zY4rVpUHNDbDJo_$+gA%n!OY?vc=F3l3iVc93cL*afC3g*8a-tE??b49jpZzN#yPbS z%siYz#SI<|{pSNE_=fgX=b!@tB1b@=ey|q_)5Ld>eWQ|x&9j3U>{E0sJ!bGChhL>2 zpJ(SFJg6E^bAt!=|M>t3-;j{@RPdKw0V{~NpA9BI;#}cR>ut!!F*v6LYZG;^Et~CR zgpAZF?!oVu;DPpN>kD`w`kxPAD@f5_9=srX_cQoA45u?VWKY$4%37n4*ge;WFxx@g zGdBvTnv#vM3BGQ(;f-z&*LZ1zKed`5Rz<=HBexa?=U}$G&%fFyKcYpap^dU2IG?DYlAZP|(S4tMQ?F<~Ez> zm74qGlkI&ud{Sc`G-xf^p;$U{d43K*dHZP>6kfTrdo+W}au2Z>k|9rPXxK95QJ>~$%_Eck z;bMKCm=h1SC#s+@Txkf)>h&wJfSL3_UM{&(`|j6B>f5>Kop~40bTM^4mAU*nRNVTv z)NVmvVp+-;}it43+j^Jg#F-j@KR0>%Zh~N1D+5Ixw_3Dc z__>kOORM$k&2~}nQZ8Qimvx0j zGG%Z)WETk0k1SRBJ`aaq(eavq@N2R|p$F{+vZ8q|H_zWotG`3fl-7iAq$M-dOj(4 zE4PRlAu`Qmv#)tnY}!~?s&f78mqRK}imJ=*3AMCG!4^Lbo^a?%q|qsk)|;@~Dx(_r=CZ2sJu5xWvGUqecU)f_m3!+PMaP*z z7n2yFW8^zl-+gHR_|9f%KvW!4KpPeDeVu3;Yt_n;P;Ia)?bc1Ot2nT$0yz~wu&ZK{ zU2!@CS2dv;bWL<36XrJ)RjDCQHW(+mF1>NzbEeIM@HSwd&6Ai-Y|RDhDq#2co-MRu ztX?N#y|xpY+F5lYQQX5Iu86oHMSZsU_9 zIi+{a4cvChvy79q*7ZDW5{4B+eE9@Dy!FgR;@Z|Hv%=UV^Ym9TpE-yHLFP80nl&+4 z#tx<~bF=LXoH#!R7n{g67s4w%f^qwtlz(VZ42v#U-oF|J`#0wSlS(|f_zO`tnaiTP zi}T@7%bQPUOrs_Zj)O{J~E&_Y8MJ>i7jUc6e&n7fJv4%p3f0 zf6v$9YkfEBu8mp9^~nx=d)6YmUwCK2ZVxoOJ7cNh0gEX)X7gJfINUr37i~DBqYFOD z3zKFJ@kbGS6#d&u8)Jy!wKN59OVJP_&-6@g-%c^~5cC@9ed))>oglwN4C-g+p~{9L zyRp7xc%i{lMtt+ub~(a<=<* zK_z7q-05a!er&k^&PT2;d8K~|zj}{u)W;Y$9WMv>m`QSvdGHkx;$i8-0Xmak=J#U- zHH3U}xl@NOYe?42Cvi2jHa}CxB2AlZ?_ws+DkiNF=eX21>X7#+%bx763t;IvG0eR$ z_3Oiwp{}rqPsUrd2FPr?$W1k!Y?^zbGpTA6EFb>|JbF$xg#prTud_;9ivF^i6y77& zm$E`k0hL}kT5=C}6XxXCPPuJ^lwOb1Eh17ICH?Kmi?LEx6&Z(JQw{I+{VL>B@zgTI zlq)^z@Lp)0y73;NAY_qY*lVjaKrc%k&PRRu8jo`w`f|is5#kNxliLuGiE?L-LnVz0 zf*ai%7A1dKzaty<-RurR!E01a@oSz{`hH;Cd%;<4B?>7oJe+p(!ZY4~-LUp_*TLv- z+Ld?xRzmRXXs1pR&f|X0SEYhbhW;t3vX}zw=q=2KoL8={Vr2zkp9l&Y@`xVX1iuTO z5K>SlVBEixdyh2#j6x89$#2Fq>B#QgXZAeA{!q4fd5T%4f*Q-77(R(*e+y|eb z&}_?&)vSzZ`^!iv`;-W#exen*Co1KRM@I;z+ng*7V02oP6I;M<6XACN0NTMzRmcsv zA3gCSpoN9wGS$KTG$AUXtP>k${yPG6N3j`U38wM9GC@XSQL=8-p(6H`URs_CDW%XyX>I<{F!WJ3ZtYBd zg!dBk0XIASk3L?-iLNB+#fIR=uJO1)_^Os-nELMUG^NY*iQXg}jQp+z>xuOVz- z>37ppF=Z9{SZ!Ent%E-NFxL0sJ@}yyv;W=4bJ2B~o%`Z5A!Qly`+FbGxq0{J=qgiI zdwdbPw{sgagVj7r43dqiCSXqzE(COe%jjaRy0H%vv4_ojcJlX2qf$s~ev?DPQ1;)0 z@oQ?KIMMDQNgh_mE#r>d-j&A#_h%;@2z5hJ=WVNcsXFZ!j*&@SYPA?5&irtWmsJLD zs*E-iIt_+`m6~X-AG<@as3Bz;x@D%`9-p9zW6JOK| zysrA}WyEs4j#ch8&fY|G_s5e1VRcjJO95w7#JI&QI=5}mHZ5|cyY&lcm zaYp}tF<1ZqVk9PuedF^%vQF5UE`sJKxG5&WD*&3*KVP0oUmQyOTCtNHVjzUu7#zj( zXxF_EJVJcx?`OaDOGHqc4s2E(JJC5o$aKsP3bT;-hd0+ViU1+>zde6Vi>oJP$V zVV?zhcoF2YR$3@YUVwC)&vN~&Y>GAbrnxwc8AVzc3>#H+zH1^3rZQqigZ9X`sW0z~ zr!v-k_M)A)Wu}f1HUZkGWU&%+OBQA$z3$$uBw7Dnjb%-t1Th(Mgt}NJ)HX!q?c712 zZ5B>wXv~LQodKs|i}(>x@Gq!u$-xS6hgH_CIf;RL#jMmtF@iZ+X!E8=lm5cq&y*L1K?9^wN0%qYgexlXo2JoPs2R8*hCCmY)#e>(Y zVHB<5l)Zb5Owjx*%llrne-fk?8TEmWF8a)K(PmKRCzUqY8Z9SWBw(rvo^z_AUq=}} zu>GCN3ph-nW8^V;INbRRDY4QAP*66WwGN5Pb=hk!2n)5}<-;Y{MwY~=+Xbd&BJ!(T zW>#*GciHzi>WPnFJNjFx%YLusov?tTex<03jVC!;=SV|jySB?En^NSDymcv3EI{_T zDCfa|HtMG2wtg`|{(!n+87|fbpKJ*Wlv8|He(bv55v&6%b!DIvc^1#^2Y_WjXg zN1B*B{Oe~ZCR%3Z6K?s-+LIVKvjJk`Cxh6!H+EgKZbKj7H+> zB;#nLb_*`*yz0VbaPdV+Z!RzrqWIB;i^q>e)T1eOyaaWwO;2+J?G#!mAgT<%RBm?x zG)xC**y!nRzA()~Bs45fxXuVh7#e8%N|hl(MwQFut@P=u)60IDntbIF_+m}#ekx5( z@$vJ_S*ytc87=ZQSIPCxj||6ml~-E%frs1+D`+c)*jm!n-3hdoG_+6JUNA={(7xWW z@5?@rL2q5jJ>1C&dx6uUj35@^p^j8kNOm#b`e@Itm%hk+>^mrhtZ(?i~Ts!37yjo{82Q1 zje;G_MpvXh#_K4&UEM}Ox{lGpX8->Pz3-3g5Gx;doHX9o_gv0?Nvo0wIgoQZrHEpS z$5j18P0F}x0Uv-G5u%-65+J#XJ@o%AQ*T=#qdq*Fm1X4awl!tCZ*ZTNIj>lSUr5$UzG zrl_-t;3f)0BZ+}>zCBXNHI;QkecyU(UbUE>&_Kg)l-)DsHukH-4WmfW#L(D({fG;? z;94E5>IRCbKtW^w=!sW=9rUz6FF}e?4G2Yw{raI9f9T>srT!Xewc|CInz+gLeD@Qa z>o1mNRI$fOOnhHDwAw*i=Q3Z?@0vs7rR^a|Ws`NEAGT34*#Y^p9QN`7QwXws`Usg! zIGIraC6Fn4hw%%t^@0@;x6)4hkWosLb)q^bV{w`C3Pbr6e>gplCW)(f@?lxCF>8F? zP{y`)v?zpbc~NaDvhjz)1!xjKmHrtLXehnX{?}Oz)ale%EVP-RU9TKxs zxG5%~4h(_$0Jc&LqL)}$e!D(djN$f!tsY%FWLd;7=RXL(fh#{4H#?eY5d zRW|@sE3gn#%U~t!@yhm9u%VrGC5b?0bwPOoH`K!ld;1D(xJq7*%8t_zAGzM8M;Zbb zTq$(9vhzv+^I}5ckkfZn!pAInnu^98qcr` zlaV_Def9;46UzRuf2QEtks}-I8Kf5?p|yyBdY7`#O4~^fl$m;#+}@}f+g;!4;u2Bg z;g@mvMz%M|D4cj&5Xk!foWEK#xIGo%e4v%z?aR|m+OXA0riTH}mqZdSz*p88Tm8mmh{U=~9>4vjh=3Z$6}tAq zMdLclhf$&sXI_RvyYg>Ez5(MCPhxz6;724~P{3zWyU7QF)ZsunOa=t>aNvMR)R7oO z#e}qBKg|9teqS-m*m*G`Kx+C$b9w>m@^>N2vGUC0=pi9&`=cu`!K7QgR;LQTF4U&Mte}V^I4nM~*Uq9?FKx(zei4NNl*YYageQ;hF zWzM3@RJEABJE^KEX2^RQ><$u`;%x94*$I5nFTiK;jsz+D%ih)yJ_`B@HJFX>*X`<6 zPe3V3*7>OoICtF3#hid)_r`I&ljgKk>4OIbkz82i;hi3N%LXRRIB6Y^4(HnppMkx; zf8zcP8{jo9NhlK>>lG^8%TpX0z~RRofr}rxMh+Q+4UTZaYH)H?-o(MI^|!8nso&rH z5osB&J`}sRy0PT%=hK#ubVv%MOuXlp}0dG5H$5hMmX#Y|4!ZPUe-n>`p<) zX5Z|ix#qWmwe>_aJUXuEF)UyJy)?cRE{TREjc%)aa2N*nkc0W$L9!d(RaO9!7k=K;%Vln%IySsZ8@7MM(9Ma$M9lgPf^R`*eocv(d`WPCe zeQ2eK1bl(ya(yTb@zRII;0BzHL6d}*5C4i}*-B#Ez^H##AKu1)CVpvNP^SIjX;rv8 zWRYmvPGI-dAteCKjhyy+YTpn007Tuo{3__1BTSW}iRcUlKq5?;5E*2uUq}_|UrAo; zAS4URnU#<${zkUkXfUG_;3q9AXWWNZ) zqeH|>boM+ntngOoHyo@14poI>2h*26_WJBejyE?+3HJ#ya{808!qz&KGpQl%a3fA6 zROR!DaJVo1qGo0~RHP(oK;ZiGQm8m-pDmL~sOd%ilrDh8I|je$H2qbznZM4v&wU)* zLApaH33SG8T7#6eVart>;Us8!Ji*TG5rCE8%QH8z^`HH|D06vFFA|EZ*^N@0MGjGX zb6b2P-*>;^8*ck!Je20|v4b^BA4xr10vtn0;=u83MMy(YmybU>5D)|t!))SsBEXyc zXQAvHN+E;$HDA7JqPQ@t$HX&BDA5{EL~Jiq@w2-2+#?kj4Zm;N`^@QgkP4+?FSqKu z|D(zYJ|yh1EahQx6XDtL0*}jvzVkN-Q*|gU1W2bH@xkBdbkJwNB!~$b!ZjHL z(0lUeB&hwn66YrA_Mx8@e~{jHBjmcdT!#-}}AP4Ax#!xJNaDh-JC{%0D zr$9~U*FjY;1K17j2VCmXU>BtA+!>bCN!shQ~G9JDZcr&Pud*|1qMh` zplckQP$kuxrN9V1FI!X&IDoDE%qL(@NEP4H9G5Qviuf5#{iwX*5RVdrk^8;4%lEE> zss-d5A;*Y~GJ6i2(1f9Nr*VXo02)aQe{U59j6wF0}3GwIfszWkX(#{C}$-_SykVkd7qA=W+e*aBG|X&aPAPwt?qcYNI#krz8b60Zz@R#@iI#5{KK*`uV2*>+IpNi{3m;?_=wn0-=lZKgObhug``GbFPOzttPzCAXqSf+v1}N$|r_G()05H_%FU=!F-Tm z-v--^Uaq_vFhoysV8KY=@j5U{9z);FNdm~W3{fgla9vtE2sy4^t#{|Ml4KX|gKOnh zOV;|V`CWgYZq|S_sQqO8HgR{(Aq_NZy<~^ z-TW3Zo%heL1ckb6W{-DR8384Fp#j%KCXPC|nco_c&Jq zOF6kkJqMFX7kUL!^C>#i^v#tizuKwq&fl(}CB+Je)+xPY;a?bg=q9$QJ9fkQ zgeThheRPz(YEpaMoTUEo6_WDxJ+)0Cp56j}5dk>ZivFI6B3at$SNyLUw13J5VH6o< zHS@NXaAy{C^@H52$g;)VML02A@{Wp!cP-O+yRW-_b2>ShQ!N3Vt7Yp3BE_=u?fswtTNCcQ%VY{J2eMACVKvBg3%7t)~$8+LUNI1=F~bdR8x1ihRnr-otu zKDYKi3)Npvxm)eMBfiwMSMA<0?TS#gyMnP2A0IK#$lzL25D-4hWgjPOZSW_ZRvI8l zK%^=h_F(AM%(w7=mA7gk`e?#GKhk31SE-|#DoZv zb1;yDB*{@wvY_M)5(NYlL^6D}?dj?1J2Uq_&-a@@+L`I@efC~!Rn=Q>y;Vz^`EIui zYg!Ob?Nx>NE9?fKC$WN7mIVjDT|Gqi`E)kRC5jfGjEg3A!5U{br?)H^GnrM0?Pl`lB zgH#P7p8VkU4fJysLcaxFrc2}Cf(1UNh>87{y?~QL#xZIQgLvtYh~K;W1Pj~_9&&|t zclWkomSFxep6K@y1O)&b{wYC9^3oI{oas*=*Xh@_jyHEc=hM^jrn_pTB-RQj%NzJE zKB%R(IW9f^)8H0KCJDSNNsIkwcldMly0y3+fLFWsZk$ji1sb&Ew@gQfhqOz^rzc@N zlJcT{Z0UsWt_uX$i=}Ev2&)7|;nS$B7=0%hYV69w@~kMxurd&p6Eb(tZKr{%_R_a) zh!(5I^63UV4%Sm9e!bhRA8>QRemep_`Iy9&2cV=%3HiMFA=t9ZAXM@2oyfu{=L$V< za*3vnP?85={txE6`LWbTqOd-feMnw?gm(qu*8mm#$z zp5FquC7XDCDhL;HpNq2Q)pn;QpPLRB;&Ip!czd+}I(+(d{g@RH$MlrF5wcbY1$noSlA z7uRiUVay$Jv`V23xh>n7D$G+9kqq+So zIt;5DiZ(lwgq_=VMNd8_>_~L3&0qCSrn}ZTs%7MwV(cnT_TEcT*fsE4UR+pPOJ-Hm6X@uDQ+kh5-hS%y zls4M;6a!YD5c8f#+eH`6J&~kDBg~AN7)IZ9$qsuTvbDY}x*`qWIqqfNAg*7;L zuIBI5fN7;!b|vr97MZtGp1pea#mxNt>ZZ$lVDG{HZaWM?Bh%$6|3Vy`9LP_}fThMh zPkVe(-1oYJ{~9qHH`(^jx`dhF=L2oIA0AS?Dbv-=uJ&}lY1NaOy~fX6Dee@J$uK{{ zCT?&0O^BbBL)`u}#f*0XLCf=xV;OGfZ{)_3eVw&x{HSB(+GX}h)qt{B$g*;@@}rkW z%H%98(m~OEqtb1eL&WoEC?&V9`qieDv8q{+yG3+~?soX__6;TGY2_#H`ecCsFPRn) z<4ZRjO|9~FoW2^q(`&0~?b6eznVW$EY!#S!joMC5pNaT`;=Q*oGaLAYl+u2QX8G&8 z$V!^l@okiSh@fHS(VxE5j?)4?b?Z=F zKC4D|z~T7zjGX$lBNc>dDHX014A@Gy5ZA}-;`R-_miA+?HY;>y`xpk&d_0=$A5R^x zp)hxN>Pb?5ai`))(Jcy?uku#U@U}0fM-fu-^3^GiZ`}#@7BDTon!la*)mgon+G!{` zxOcj$SN5Kw!Lh$T-GHDa_)U`O7zZYlo}#jznpB+O7QTRbK(EC`G^z4+9E~XRa6RJ{ zG6rls|Fc;RW^vz0>ziyr+xCY3*F+rCX1GUu>$kgv(%%3maR8k}zn$Y%O z%NhL(K1HA6e>;Apr1o3o7}6(3xY73xO=mIRd8ohD92IcjjLx^P3(L232s>;a;UE~1 z<9MH`!L86KR_L!^KEJE7G|*N+wTz8gcYZ8~@4rRRqOfO?=#N+Ng<8D63UB*|eRCX! z;Y9|lm*=lw4JMp83N`wj8P}ZEPZUaHqo?#m6uy_9l>f}_U*Xrc-8wb5*P1^@i3To4 z_7s^|%OW^sp5ezEl zjXq%_6|cX9Z@+cihHVzj2;v13i_?;@adE+8rLS+)4i)?FY$UU))WsD`2~dzXtA7on z`{gTUEh{UZq3uChQCPH0p7a8*LWVT7Cy$%~t67@#%I7qLn5YEraoB7ouvUS*+b=N; zlQDQ$Z(kYS5CwRnbbGa&3Diup!{_f!BbD=gHDsbjWtL>F#T^|y&pghPSX;KVKJIrj zS{`|GcH%iTF>OVlR3P9VFk1an|Ld+y3aeKfCH>A&Zxng$g(DH_kc>gh(~zi>EVI+b z+j7n!LMMoL>~ML{FgN7{cXnH#flYhhli~D<}$AhtMYI$%QQIs}*IZHVLDfwHUNsC$Xld3Y6tr5ofc0dOGkKhK}9O)+A4-NYS} zW;5kSv@toSv1yy!?_@MTQewxSqSbVF7QV*j|KV$VsBiB_kF5=kaLzQYVn1BD-PfVM z(48LdVyETPHD~3z;H2!D75zai^YRzwd!&CmY-Dig2vJUzeQ=x>f2mzVX~Oqdn~$(l z<5v-se<`jyR9{uVjox#f=0ej#2s&_8R^{M5h$vZW=@TxSU{v42wE+%X6dfX90MqN(?NXT!uC)3bVxmj?E$R zxLFu1Ugl8bB4W)+SKijN(M$qjSk7A9Ynms}-CCBRY2DQGq6I z??KOw0>Ov1K{3six`P_WI^sL(tdjOMFCOlFc_Q?MD^%wsgsgJ$|Nr}cIploez;3O` zzNN>(n1*V(^TfceMQTP%O6MIepDO;aj^pF=G{@{-JPuC~uZZg)1%tT7#LlFQ??lFi zjX299?u+;q2Ap^r$~IF|_B}p^!8jhALAqtN?EpL@xB<>hzl zB9guD*j1#tJ6nx2@C`~`)*A))WzVZ9j$8dU2aYlTPt4(;=B-Zz4@>}uS?ZeTc}g7T z_qm=QhdYLU@M;D>SdDbj=nC4GrXL==^y+1lW9c3a;{;%Q!$^slXxF~(ckdML>Et}?{n@a z@jV`CtNddLvMI&X$0{jV)5no9X#U-)e7WgYI9~kCyQH8!JQLv22fuVw?FQ1 zX_i?EH+tb=lms`dNc5F>-c#ZXjP;K=sE(j8+N^NqUAZ%i>0#AQJ~?iZhqol0=o>&=d4Sv}qrHQd(|!N>mkC<_F|*A|Qc@QD&1QzPpEw;1=zo4tVdF35^}fCqpN z%##@XpUv|^#>VRj{qqhAhl1AME$s!hLt3-q5(&@p|7jl(bB|kHFh>KRM9o_8HiB<4 zAxWb}lV+;pNcv<0uR`FFN9_J>h^i7PEE>jq?ve&>Z);-6uWO8BKSlct|Mw3W0+GTO zt-lol6G5o-F6H8S|c<}k))Z^ezbl}0USyxHn!2tcbA{A9{ zhQfny+0F4Pz=KCVe;j!_ySHo69^DY$Qg4@F(Ymxbb4%JYyDs9g?j86iuXwWbYvV@m zj9!aA7Y{!NfSQDqLG0+2u+sp;F2cc^o|-a7lU|Yl7)Dlki$sDrG~vaExULHjB^|I1 z-roM+*n9@wJ5fK$&-xj$TJ^EDPXwOfRtKNKAr@f+YjMSnw*7<#ZuCK0*GxPFtB*7- zYjE=Hk!Q0^qtT?F4B**g!YwWcZO3 zEC6Z$11f04a{mD!TwouS%0dbaDd2sG42(%Ci9%D}3zt=ut6w~q%-Y_+^7Oc7j&6K4 z-!(03EhQyyl(e!U{J_9z%2dFJpI^vusR+Uk=*ww`O2ZGlwkT8wC@%$2-ssF(IDsyw zwd;Iq6x+@7Fbp_6IPW~)*N!F3F7uS$5WLo#@shUxP4>kaPohcdNS$)z64*e3OK_|H&yw1SW)4v zH)Cl|Up@&IS^KD%h3=H_nl%)3s@7P?Z~6iF;=^N6q_4NMiQMoV$jkMMoEoSKjc4+Z5n|o?f|c zeur7y{;f4tkcK>NkFB3H8W4jFm9ZrM!h7glMP-AV%h0{4{rm)ckO&62+pY@}Yt*Anb2V*23=7}R&KdZM4;^L93#QRFa* z`}Qsna00M5M)t5NP6zhzJS+>j^-;Oc((uVW9F*DMv;yncC5;R?4)@$7djomKh9pkd zX^9-XyDBLM%V0jD?a~4UK6CU^O*Fh!duibvDR3N&!NzAHjf+KMo(kV76eg1qJU>U0 zF`W>6a#H07T@3)*KU`-<1odXpGbp8!Tz+Jc%!UN%zQ>Z@wBd$ju%{0?DFgP5?s}^W zu_|w*c}kL!LF_yhw*Yp17f#y|R!aao7(GDN1;X_(zkuBs_s1L97h`)wPO!bJB8 z+M#N@)g0f1zI;Z9lgnIjXR``Vz7HFQ2QKT~!at7*O(6Xgr|Jct;zP{Na037zqo^8W zQEYHl9yN5P!bhY-v_-7?4Se4~XQ4gVqS7~m^5r3^wGSQKDy+}wdR2tV-car`&{{pf ztGN6snEX@$IJq;43(vr9NWTqZybc-8`FDKWD9i)kBdqWIlz)bYGJ)-+ioUkK$R%#? zvU1Mmq#kbXeZT)^-3Z&}ft^h6JFUdex9mmhJZz8Ljr`LP#9^@+?xbG^H*%&=@hPD; zZV!FD(*<6$64v@<8IAye(OU-qeIJG^K48OYtq*aI-VIAt@~^Ko8p) z{zKB~0#lOKzUIX{?%W;$b`^@$2y6U{JBWkKQ#>-i64wtpO*)t2dqzbP( zr1?~~2w(#5rA8Xa_Mh2uN)cQT_eI^epazqX27hF(`|di}C>xx>`{5SnBEaFvjHO1u zAZY3G|G?^3Vkli*%C-2S){;M(#*3f0Qlldy6znncESD4w?4Cl7cII{1pqCZ}d?0LzGVr1yS7nA=Rde}vA>^u$kzAFH_mLgAtI`m){1nuT z@h?Z~IpXGFJ5%A!C9L_V zP#CuJ@aBIDMsS*T9h%FPe50Gk4Nq-6-uD!UvZ=(XWczWk&_YNI5iVW?6Z*MApL6mi zn9y`*t_83Fd^@)&;K^0+S@FG{iMDN|6zJS)pUu%2_PO6j; z(kZ>>EGm3-`IqV6*xOHK4cEku*;B&p-7q3bOEX`~cs$oyJv+kWH|cG(xOHBzJ6%TO z4GnsW%0>SO<{tUveDKYyip9FPQSC9`r%KAWy$hI@1)w>S;MIpqo)Lh7zCvgYj+Si! zuzH#*#gD#l#_zP&DeTH5Clm=SVvi+`$iERPE;O2XW(s?F`9)wPDX?3FiHU>&J+KJ$ zxDGDp_(A~>d~*Ul1zY(e!SN`PljGs9LZq#t zvt-2KlHsivhp?K#cql^5-NqQaa~Zm@D7khb4 z#Q~|Qsar2PNYh~rdW2*}B*4EiM8-8<0e7N%GmG^WxRX=?XK*J(h&%a2&<`iZA8{v0 z=JyX|`+(8d%h&B2hojL(6-4^?6CQo5!i~am5uVkH*vKH&02#Zk;G^8P1Bqbk2@)E@ zBjE$u%AOE#aEbep+n&S@}P`^vS(^0e{4q?6h!?HKa0E92nY9LMrnBqQE1t9!Y8$B%~F? zQeRecWI$nJ5$j=3N)2HE>j@q1FptN5+y;h?vSJ}iN`+g5CF9XGXF0E)VR;cz;=x3k z6!x>7jIa0)O#6h?Ty4o#GH(AP*-k(18D6?dV5>j z%;L?t_UA#wOi4;Ir#!aboaml?v8YdidC!GB84@6W$Q-}i7H9AUCtG*ck^!>B0YJ@z z91sffk}~YkT$GbM^8cEe<1}cp^ZnjxCdU@=W-n>E+c07idm=gU{mao?6=YOY$CxIO zJwyLxg|?YaBn&uQ9vH~*u*afw{cZe%1~bQX_OW8T3WR6GXs`2>$GjP0r#jgcF%@2P zYe4vICWq;<*;}5&$<6B945W|o#N4Oqrm!ZX@SvNuqH_JC(F?cUFJKIts80N;1^5Qo zp`7hMzuCR{pr=n~K#vn$Hts36wzf8vT`CuI(Fw}bZBUb$wl7~RylK3-GPVYDcUz%U z%d)+_U1T>RkfmFaeZ^s1KSXGeZ8JX8pz4<>1E@V>@Q)mQkM1ipy}1peG*9;w`qIBQ ziru3$zeWQ-o5Uc!$&7F?G$n&IFI;QFh)n9%Fl(KW}o<|=R+tO0o%}b0mrHau1nF+$Dg@;`+>`1FZ&|tJmFV~fTJJK z?;lyq%hNu<@uK#mWa2anNJ$9fySh5|?3_M+-BvB#RH$>3S0wS6i~dFJ7Q~#xXzXdP z?r1@00S>u%M~43$IAr6*xDWEc`dAoc5#ggbfGg~q%z14$QflwonQm2PKQ@{{1ml4( zZOSx06*c!dP>5Z(o`kv6`l2xTqQ%`;uo-JNtPWQVGJ&M$?K^9?7)@Q>MNyN=yI-z5 z3QQ!~%)vm4aOq&`R=7sbeCOu^ukYSH$7EyIWMw*Gw_GouD8EE8dO@dD=z#XycWrHH z$t3OF=Cd>vcysi4#27kK}ceT2>H%sM* zk9h39vAqadzBBk7opIEk=)Vz6+Qc2V?FzYqko)rzCLE3ma)p{qE2ofkgG{&yAy40L ze!P{`l!;Siqd3+;6~|8eo+PCx&%^|>O&TQIjHJ3GD8^){#}ZMe zOWzmJY;ViS>Nd8SgCFTYPOL6lKQqck@bUIDh~&~G5w}tBCz9=kLF{cQRV7DZXc4Cs zz;kk*qLy3t?f10n^MO+H6!}Iz8&Sf^>top`MYmq;k~7geqotpp)dv?1_gm4l%XY98k?MR5#fG1)brHxLn#szK<>1uP$k6~{@nJi=rn`0z3 zUY#GI{!w17mX%A{2cOLOb*&I*uK{lK>$pTe{Ud;Pl1YLJkpHE-gbP77fl#KVQB&nl z>f!RrnZ=y^Xnvdi7MOFy2$#>12~iT}>Q|`337yvT-d!$hhqC?ItOIZ=QLw(^Cj@6m zx1p$hp>xT9z9Wta+@oV%)xgjlk=aPKQRfps_p@8)W*+ejH9T{81qib+r5n3WuD5l9j58Hz>3SoYU*j>kh^5j?wB+I4nf$8}SXAyI=p1dSF`u*X{&csUC&EHfQ z`6X_+C&ew`xR0w9`2x_K6udVEcL4E3;?U*6s{3xFs(XYMY zy`C(M(mkK9o-A+D?`rj_qgx9N+8A2+$M5Uc-5~~(?$P4_|y`jjQq425d!&Phwe3*W^Lc-j^8|VEb@3mI{>8OeC1frM8 z7y8VTWE9yNv;OPAyXzKb#I9$?tw!B=swQADe=};o|56`Of9fXfmxXJJ*WrJ= zAoazv5a#mnoHv!SwR>xF6`&%R1-)P}^)d{^3q2{e_sQpWfz801BF_zLM**FrfifW_ z3IV$|o6*xV18Xi&N(Dtxn3C9j?-;`}M50}n;sGTI34eXhg|s5)c|}3c9GbU;o;Q5F z=6#MP`!`qu_OAZ6f0|g(wJU^w8WS?I;n+pw7Q@7pMZNU(yY)i-CBHL&ym6b}@rBSWji`oVC zK6d%Vrw&I3_B>T!k*j9l%!g{`>9)%8)XbPadC>VK>H^^p$D%ZViQP?Vr93E>nda@` zCvxXvIfFEppTvUFgHAYe+IQmC7h>7~ZEoZ1_PO>9AO0k|Kf(#0BQe{43EV1(Cus4} z*GYkML;t*#(b3u(2FR!lMzWEXJp26mX8U@V7!M*)8e3K7KD;`S<~eMY(F&9J=6nyC z>AldP)3^|DlqCFP0#*(#G%*`2FzHTLpfSQrEQE_{IX7KD!_|rLJf=;2fWv>>apXeP z0Y~!&4fWO7&=mJtZPt@DaCeo-UMQ_#xkst{na&%NcUv4Rfc%J=W&}i{Bl>c&u#!``jar zjZ``0&F7&QHF}qyVbVZ+bC2AXC;D7~WqTPMbWoRJGv*I-Gjl&I4(GO9SY;eM!Dm|X8_gul1ycc^FG zn|Z3Fp}0#_57cCAoi_g4u{;G%v$7R1p38ixKhFtfEVh6+oagM>vr&{Q`t;Am4$8fJ zNNBHq5^?vVpAQ@Wd7rkdtZb@QzF~Kr-=S>tuU$O*t-oWxugNK=^0^~gjq;v`U zQM)-O8~n{^g?XDH^f>;QbHs77rW-GK@txG-Nc}?UYmrhs>faOPuAExX6OCo4B?adv zi+DX<_t8es#;!;fqToTM=cN=PcW&wwTLkakI8R?pkhuDh?vgR?s!}F$*(xu5ZLEMA zT~tHEb@$gU^PNfEZw!PtTYL8H-Xj;rhOwrmc+8!(0@pN|2?U>F=Yykgc#g#1B78~s zH8Dj{j(E21@vBw*)tXmPKZR<2?J&w>c0QplMr;|c-C^RaeH8w8x$ zl>z|>IFFEkqpWeS14dp>_%MF*pf2&+Tq(Nu<96I-(??ZPtr4tM`R@B0mf(k-U^28E zobb`r>KW70`c#>S8PMfN_4cYe3J53F(tn+%-CSagPgnylP2UN%jgWJJC#UV-z9zu1Ci{sfUTAta8y@fgTu3K3A9r7d9;?CpQa$ zCeo@Wo$l_l2t}dR{SZw{Q?Y-?rY;}59&`<~W;(XN{@Qf1H7p>(@^NeHXf)<)JdND2 zWZY9o?4)QKiy{G$%9cI;zz&4~atG3ONj&@s(9&!qsqf<>i4M$?3rFB}BFUwBVO8XA zWgkjWvlh~`So_4?U6|N+AJH{0QZ*BioxUs3pR}qRysyMpFv6m)T9&58ST=(0kO8 zZy&8+O|UWY{_${^E(bJ{WsfKd%+S9;sztAL^e?6$3H#{W)-G?{+Q!Z;vK%dih%6@O zG-)@XU?~PtC`Y3kIxakd#H5j0R?r_36Y8u4Y-v6dCy^ zb}zyl{ripekt$E)`&<NXMsr|VTH0^p7x60Hh55ZYynYAX>}+hA1-On5`Gvv4*Hx{$2kk>*m@qB;3l27cfv;DdXtr-IqO-5HI=*MImO$$pPN0n3!Kl< zqvc6~Z9!t;eb@wvAifkCROO82)?nJ&3YLcPXJ1ZwYj0SEDwFV7s+)2U3;a!KGR0^s zD7_Y@evVwo0X`)v;vE+dwbA^EPEZycR4)0(h=j%Q8ZS9%=|`h*ccByHd6hKTA3l62 z^4@mZhGCSmub+#Cg9g(!g+y~+UlbDyGN=?ngVaY*tWfwg)nOTqJFy*C{8ssm_Z>s> z-5Ra8;fBov*er_PS7Epl6`!9(r0D|J$z^rLdx@jnM}t4T%_a&?#_`O?90bM1r~o1a;iry|QVLdVW&Fv8r!;OPJT7_xe_d zpulY;7%!aZWLcbzF}nEh;X_`l?hCb&C90QCe3C+n-$EaRG$1qNa1AK=%JRa~S9H%e z;<&G)Bl!}d1Za*Ps#Ga93_z=Q1xxfs-iE@><;=Lq(@;<)gyQjWa*zTDM1_-zPvQ`? z=;rV8^^-(AG@aIVW22w12mELt=7~g*%Ff0TRXaOv0B#LPQuYZ(%1n?FsuZwu$Xq8_1l~jBt)o6xa(3Q2nQ;WIOB90oe(6f`DB(L}?jKP0h3@L8UCWl~El~RvX6&*y*MV~yi=^XQb6>t4%lT>;XiM4_V)IcSi;N- z)hnY7;i*Ldr@7Cr3R4-B3IysOgVPhaMot6SEc2SZM+?YiPSyY&P*!o-T!n%J4k*?k zsY%;(p@i(tW{;>?TmW*LoZoQP+Jz z`YK*80O`2h(pIwPu@kgxa1GmCP9-_Hh>86bcPF@ts_pz^TE;xRvS>j5vL+@k5n2*h zB<3J0p6Jn0{WxCprw?@_ZC`<}XK{;)4~HNX&fT%aLYx_!@{Z?X^vSvja+Cb{I1V-G z8QHP;vn*xzhp(JgzKo^*QK&8lAU`cQA86CK^w zqa?-+w+JO(od~0DZywUFnY>SYTQJg;RM`;D_^jT06a@%8hy)%oTQR-R^{tIBk+S#j zREeDUhlLL`MLvw@d7*3HL6vcx45-Dw`2>*vWF_?8$3qn&=r<_*Wpl1>i7aHutT6vM zVzxbIwX6*|s0wHqoq?;Ac-8%jY{@}w)AUBo8I%SrDiWP#I^t=2wj(Nx^C#lC6NsKN zaW4#)#_uh^2@xoJGE70P%#I~mE4YCE1!bD@OaJAhjR+Y^)PP$LgA?8gx_2|+d8e*@ z7%q1-72KYQ7#qM_m#Du0Wmx$|mJ&1w5|DB%8G(9RS7=NOA{o5gkQf)ni16+#8@vjs z87#r@H-np=ag6~)Hq~il9{^HgnwTj-8^khPcGt`i!5U3A!it{)4xUC7;ot)y-rx9n zb-)c@W39MOYk%BPg}7p?_fcutlO6aFW-L)Rds&-LQE@2}15iO#&@*}f{_r|T3ay-Af7#2=1k zS~Pf)X3FD6)mh%BFcstj!=L@{(&~@v+3w53%)qE+R0Ez=F-2GzA@>#9jU1T$9v&aR z=y6f;hPVczD_K6iq^bkDl2N+;^hzAj_Sv09RiqlisJ>vu{#%?O)yUPit(}sF;+Sbt z^=$h;wNc%NlmAFQ>DA5;4GjS&Pc~$>JXYl{KkrD2$|eSPgn)Wrk)#n8$pGEZ+2!tB z))uV9^=yjzu03DHVn8pto2n@)%s8!W)0;u5Rb9T%Y@UEL*)(L!QApl2I zlrshWz7dB9n{~X-bMje$u+00^E&@w%x3M`2_s^2n3w?%Xdsp+fYHV*L+j6mmT$y^o zqOZyj zyfift?k_l>i(@~9F@h4$!-*rBFH%55mT#G>P3M1U&3Wwg`fMF>nbi4bbdgL+dX_my z8f8h1O`kx~*odHE%VXLG|M(+u47e(^OZpXQz|%dlM1ZHy0Im!^)t1_L6uf?l-$8|Z z>?MhKtb@I(RquUqd5Gj6-oKZ?+<;8rA_j;MbkaXdF(s4jN)8vwe$Lf)c~J@S-SL0n zOy=U#@mQP}+&HiL*&Y}0IG&HQcwkvsAvOVu<$(HO_HC{3@^qky2FGqBLD)c!>`Kk1 zA@Cs17nqos0*iUCpsW$_tSP1)d=8A}xoDv*Kf(QuE^KjGOUhvp8_^V~))7x3YayK- zFP=-}zmGx3(NN=XARBD@9}39Wew9V|&^AaM^5k0z#2kR|6s70`4{-oZVJ*Peov)~< zKng;&MtudfYKm_mhW))U;eK0JSHjbo1{04WyPGm-F=0LpgzLVNmm(uc`bm}{bM(%` zhTFicfT0BbWhj`PRlz3+@sR+C9_GANhRZvy2xVH#g zs>`=Qm7<~|lrD1*L#RH~6(d19``pah7L>lQ-Altt<{QT_7|~U z>Rco4XKr_9B9Gi))EqC5hY3~qEY9%@G)N*3VioH>7rYy|KMsf)r~hEjddR` zq?p}Q(U}>v)?r^85W`08lyq~7q#XHE{P3;*g2)t{{LL!Jy{%nAe?Yy28oCbkK z#?7ttitV6s;;PbY0B!-$as0T+B9bG0BV`*lU^$Y!EfbwTLZ|Wl2`5ck*mBOWzj)Li zQqF(KHM1e~zFgxIguMY#vo&roTV6v`lLet6fob4eanFkO>+b1EgONo}&<`tgm44=dC~bbXs%md-2Q3(j9*)9*Syh zQwZh1M1}fOyo(0oyiS#Mo(ohTpmPHuj5d70BWC)kYPi%QK|YQ*t()TK*UyqGb%(xi zGpb@*vlC!z#4gp!v~xJXE~69+PS6pAhox-RjxlW3RbF}e+GfOhZHkWW0)N!1Lf;P| zlaHTKtt})?m{`zk$gf`7V3q{kgk;oZJ17H{y2J~e5`UqO0PHspf!;FO*<4-KOiD=L z1o}C`b7L`Z-5?8$q}Z}68v4X^HktF;(Ni;ManWsRA!2hpa z8@G3t8;bjONSf3Cqt<7)4enLBsAcGpcKj^w4OP`&KKD%^!(00`;?U051-Hk&MRE@S zH5aU`tbi4NlZBYgu+E}vI_T2UFPbJ?oV4^!%(pMUcQ1J+fBdY8v;BM`tJ+CBtuYtb z#o}A_U8CCXrL&@;dehE>*R}~q`&yynY1A9M?Jw7%urLBXt0Z?CspMA4>@=PfyQQhw zkDp^y<5}{%1aSKUk;mSTW~580g~ANB9yxVM95}E~H)Juug`pAh6tcg7co}xc{vyCgE?;o(7*o&Es^i6<)@&a+1IOBDcR1BTVa7GXJlUsX}B00 z2V>qd!*5T;M+Thw^e4sn53xN79L`5q!g(PUTOe>Nop-t(Znlv_>Ia<>8LmtH!C9F| z@u zNX?GlVPr;wfuKM#3ylfSp)r9Rg#9vzus^m#@XpsyFV~=K)C#@iERBy(KF_)|PuN#f z#2Y8*Z1LZI`t(Po&nv1G#$Rc5N^03uokr4icE9I&R;ZwUwl+I22y}rmw`MP(Ed%| zD%0kWHJA(pW*VKQ8)^6NjZuL!^E;QGU@Sm5pR$`ANG_A$}PZf<$A+Bmm(-1?#m_u+q%}m z^!ye$PVVSeE!s~H@@)Y0WQ=T6d%dGgCIFh%2ueD1ZxjY&Z=b5KG zV2Gbz@s1Q9dY^-l-sgPq2syO#=j;9Oni0v@FGMnG)U}y)4{9E3P=Rd)n%4||CpCZSaXeAjgxKi0Hk?2Zs{tJ}%7{E;L9dVBu14 zVkUT5_0V-Y%J1PRptU_eExIk(5FO3I`@>(~N>i-ILe{$MR=u1(*VIe(|10f=Q%1q5 z*-~KAI0F?e=enC4d+S|g%KqVYl#u4nt*BKYM2$wsI_Z3Wo){pgf#FHbVm;0*H zy~q{@irEt}+D!FbbT+yQFGZoaK!5pc8#QdDLJs>C&||O?W*&$BOj%+;f-YWrMx($j z%zi8GiY~Dks0=uH=8`xv`^bmI6TIn|sXg4}Su56eC~)a^3&fO%qj>29pwzxIBtV(> zM7(;t;`WSwT$Qbt*@nWBMi^nEkX+O=k>^=!67{G3?>U(u-FffuT*&Bn<(+I?gTBv`P9Q>U? zhFtPj;&zDO?{H?h8Mt;X^qh#Ny7vA9Lb6d)s5`P+eR|~+xZ9`3iAzV{RWNT zpOXg$m1n6TukTabc z7I_K|8)0NZ>v1yp-9K9{Qg^cBvUpw1sIm-1#x9*|lYqt=ZD+OZTeSW-5wN3VL$xeF z_)|d<01$v>J>V34C_u@~iH}pr9aTEOuZ&#sl6V@8`V};^N0(vt7QPwo!*(-^~6~ z{jVd$&9}FAAKT1kxob+x%8nI37J^`A1+Be`=0%!lZ;DJVY^`FGF^J~>j|RLBA>+@l zq>yN~SyBfV8-~H%ZVI3PJv))enlCmzYA=a%C9qIs)oa$ymqi_G>!RzLZMWnTxEZaNZ&4}l z$)HtK%yIa}E6Uo88?(g?UI}R?Jqq4PGA8S@130oWw&@{g@jwzOV4RW0{Nynvl`7NvOt(j09?mzK-`i9Tsthe@`$ z)b_ULFUpE-o}gE4zFRv1GjAK0Vr3-^{<}I?8RA+wCFwtT=ln&3TJMVLt*Ibh(CH^YgMQ(GQ&Z1Q2prQ zb!c7mU3vfE!#hklhysZJ>Sz}Se))^;pZGd&dN<1*^s2lz{akTCSmhel4EtD@fQAL! z0F@w2e7hhbLdT4Lb{ftC((Wb>X94N*Q8o74_VDcH@YvYr5A)>fRx?|BqHm?1@igox z`9tw)XhjaxdN%zJNX>)HA$Zj!h}mO=?>_y{@4mVL3M1efj$rOVy-fDpr>g}1hlG0q zVsZoDA`vZhcz4YWNaG?zE%}>{L*ccBwlqtuTuae=T ze*$H$(N()$voen87~uRU^RY8u0)6!vezLP5k3Vk9 z!F(Q9kB_+1?wkjGQ{)<9<^e)NY3t%J~BD-@QeNgptf{V+f z4Lx?2{Hgh^FTjPO3NvMha1r2HIWlx5c^-N|)q$y3LYUV+z&ML^w|zK>Bj+>h9=~x~ z2^~@`@LBcy)ISX>_`|3?4MR~INd|H_I7nwfJU|nqRaFu)?3V?6S?57l87i%M6m*qb zkgj*AThMMH$slMb;fxr(shFb{Tq&PUwI8cQOnQ6c(c-V=kufo60pp2#(I+@x7BfOdY_+R-Y_>YJSByvQ|)8t(u)MF!$r6yH8K&dC55=ROw>GF;hX`PxK!=I zj*SkO$G71UIZ%HygOnf~R4i?f15x(~g}ahsy<5Z0Ax5_Zw~nQin!)$Y(;sFr(H~l> znN{lcbpK+aIXj zmdSSk=0B!BP*CatSU(FI=_-kxkuI3~Wd?}@DBTu`y6V0+5Fe5UYVk*AzmHYN&YS-!0mnQX72}V zwQkzC%M>~WMM0V8=R{`UzD8t>(snF2 zhp z;;u<(pUuF^-qBZ-u6IF}A1FLI5G%_(;xLW>leJQVCN}_`AVQD=2&M5&_Vj?u_H0Z$ zT(HO)!KxH}(V+5%h0v!*i-fF+4Dc>d1jLjV9L#EDE zwz<)DM8h5=1?yLe*R#JqO$Juw`&1AQ<$RT{pO0_ohI1noG-Aa8mXTk$;EHB1Kw8Ra zqggq9$0_1UC4;ipHs1+`N5`L@QH>?WUxsFt*9Ps{1prc{{aFgo&|(>kv{(`Whw?D~ z9a1(Th1Wh}qG=h9G;JI`d5#Nlkkz1wQ%!5*$&b&uBZ)-%l_r}!-ICP3$EiYn1>u*_ ziL2L_dorF2m#p7d1o`#C!KzdcrBt$}&(@d6V>Y?3y1?R%o$MktB0 z0|^zmtJ@E9K82UE+OpcHPK&H{x@wSDgIw#WnT18AoMSCj-?p#%{Q6ouk6aKXH;4YK z;y@w0;VV|adsh|G|9nhSi%c~5lN7z>55ps7!oPT^>Xy3qizR)&b>Qv0&JgoXA9IHj z-rG*Exj_<&O6RBeN=jkXNBRrz5&(09QZOb2#wrt-0)MBR%R`Xdy!V)01Z4y>KfgwZ z;M|!_{(9h#qF{jCn2&Xz2hk5i(_DA6XZz|z-h#Ig3w;$qx?<9zeSvVwOUcJ=Ah)H$ zhr+LtS#PGw${{`0eiYy6>>lK%?I5{e0^b`0x7QMcwDt7+NAR5osj_jDxK&n5i-_2` zrtP4fTMad|>lrerGLLZ(J%xt5e>V5yHxj^bM@%DU>NWWPCXqG_?wZq@x!UL5M;#yU z4)?W*vL?BNSO4smTbbje_aaDCP@NA{pLd3f!dnTbzHOH^)a_hVN{p_n-Gt$Mk9*%3 zR9(-l+h2BA0|l5Y=yP^ctv}Jj3@>mU@C)@9{h#}i$9?zv%s=5T^Xcj3AoI4VdoZ7j|Zq(ZJ-M(le z$HT!9e%Z9Cd;rNuel86-)G2W`uRmCH?h=_7-KYIUmOc7i$4f`8{20FB>@JR>l20DSLFmZLx)sWzu_c`zH5`rLT<-GO_n5;;IcLz1! zEGTbCs`39WY?Yz9x0yh~>;0`e(?eQ+Oqx2C`~Rctz2muV-}mt%(ITmYBr7XKNl2uS zommJeBO}?eX{RK~%F3RRl}&d;wvv$*70H&7Ugqz3>K@(i&-?fNe7}F``RKm$9M^T7 z=XspRah!JE0bE)^AIbLYJAp_*^sLF?X#kgjz@sRJ9-C<>g3`wYO5gESzW0$eZYo-B ztUSK(v;-l!59*!!0PoCWIEg$bl8Y`XSu0)V31j7!@ckyf3kx202PFXoB|y9|rkRFL z@8RAweDVbOfL)&tk9H-iu@qso&boV`Q7}E$-O1cZ8h}+K%jNw4xbJNro;npoikdvz zI=0up&f!l@R_S`a)X9xDX?VB)LK=`^Cpm`{!`(;?$jp8BOa=OSq5i{cIbDV~C z#4wh;YsuWi9=8(Kc;qr zAl+=TS086Qe^ioc7MV-MQ;19&ld1;88F*HpFRkSDOlgMdVvUxFXM{+57SZ_d3%f_K z)vAQ8md6!*gQL=_u=N-v3err|+x(aNsshJm^~ISC3CRILX!HRG=)NyG<=Fl|F!Y({ z%bS4E=H}*Cdj_ogDg5r-Sz$sQj&+0gYE_DQ{JD?HPJZ(c@pPRcmtYx)d9%yiTC2VR ztjPE8Kt^cF(B1FaAAE{~latey-sUF(b(7-}R;wgjOIYVY`eIfz6TXo0{Zh%(>u22b zj?KtixO_WpWgG0E61gS*6}HOvQ5h;C7a`zo`_H$zihEj090xUA zL7(pCIvo`-#gUh*%TkFjvadN@(*^0QJEg97&YEZAdjknu2Y-s!fjr_+f@bvu(UAgf zRH@}mGqjoD>3;8B!GuAGfY`u02(mV=#P?|-p6&^|f?*?M412&eb%^0um@%(;$TJpn z6?iDYO+K8XaL{$qq-gO+XFtS!X%pKr6%2)6QgYi8M>Rswx#)N8%29{x&NY80WKuDX z&e8VWJ#Spu@{t7FH;4_qIvmhLY5#J7Kn2i`u>K}2;zqlJG$$PXvwyBCHPzj)bl*zs z9{e~S%Oz!KBKF1^w?4m3deIOckzS-B8#1pCUKA(2*|4-|B^wZFn6bTEvaQx-v;(>Y zh-lK0XQ3W{#(gw@66?E$*q9_Qr2!vgfMOUXpJ@E@##qdhkp5#dZa;h6w9JSha@v8h zk7fFxh)a?HmUeMz5bwfIl^=~wl;gAp11;ZU_b9)v_8OFra#wTg@ta51Aj`IYD;MEp>k#f401XgoV56a6;DYGm!-dK9mYGF30<{n9o7AqH4}$mKbA+lliFvlM$@3z z@)A6}NDLYmKKF`h)?MIIImrxw4Iz!Kh52q-W3T)!*M#}?ZP+w!F=6{@Po4m9Lu8_P zD5N{`{I0LvJ+b_CTh*oj!CQ|8BfkvQ-j~Yn7$525@=4lv-43TzVTi`bRoL^ZOp^A& zGigVg#`^VenpktIUJGihYsjw@^H>XI7myv;S2CDaq0Elo;}os4h@y{k|Ni|$u(e-u zFT$h;4ye_Vl*6}l$%L=-;?I+-9bJmgd?Tfj#1QR zuVBSO4ydxMmR+C^D#aY}G#PA4Bov=j#QgWSrIB}icnKH=)cx2Xa5Yl(GepA43XbHS zC||HsGVyyTX%sp)X~3LNd$ffwGGu`xm;LTV;59<|xy`}K0O6GlDi6XTDGUwg^)h%j zv2{D~ZXV#>@H(+S&xdeDyeARhGOzqjyK7oc^qgYaR}?PU=dQ!O_LZl2K7^>NGw-Kv zJ`oLchHxo#z=tm?OU(H|u|yhO3u;_b3f){}%jvmUOXufD;jB}+^ES}4BA{pg%L}<< z(L&_qj%bj>i}^yTdc2(Sz{1>Ptc>I3i$C-kB;E4ztl9*|rm*<52^Rfm;T@%e$OhPb9GN5Zs>Y1a9{bRL={38jo8skZX1yy2ZpCb@Gb;Kfl~!nBMrNy9IQT=2 zX{nUqSM)pBW#ik_Bs@4@Otm#o1?Eq#^+n@9G4gR8c` zPeZ_9Ye@I>E{oMGuO8a?HcgvvusJnoeybHpYPcC%cZHzepcL(@ zz4`KBSxg_v<&->sf2NXN&2=u(TNbW;TzmFV%j|~HknPcb2uFYdfg}DW6!<#N5>~bJ zf`)sMGCjPpiK%!X56ygJPP~UJpj%gG%4m?YLRG}U+5bE%=Z?iu+y@)(gQtlqB)0!p zspDTYl=u>6*{%D^^*M;wwhmk;+cSDSnQDjfnw=W*cma3}v?y^XI zoGOjH<)cXK6O@E;cW?uVni=oae3?rW`#yhiU2z-xz}RjfYMA3cCPq!z&CTMlAJO5G#YCe6>Ce?MuuP)0&O+;M26-CqwAIY1%*~*cWVmHn#t_m zjmIZkuHtcYsE;OukyDk5ESfVce)UUX&m8=Cd~U{isNH|zGK>W8;AH&G?nDpddBUTF z3$8X>_L!`KE<+hLYdvE~m3>rwGihp|1iMPmJhz3k3?w(r_5=2vT(n6Uw2^e-(GIk* z)nYnA*lHcXBQc8HNp#zOy4Wn4Xew{r7Ajl$?QL8dLFHUAyqfvRDz)p=p?XW?Do*n} zALF5o`K>@*2W{+{)nd#D(}d=@B!pDb3(+p2&zWCiMGDG5V=b6C<@T#XnqCpKpOK6e zJTCezhu>TNY33Gi^z78Lb47E3t~u5hr@b#697GHK-M;-dXnBuZTj2N&zC@lBfjp^Q z1NUO_g{PAqCXk?$gEu9I4xeRn#^unV!-0ebtb^ZqxzqY)d~bqS^Zj(1Zgf7E$ZC# zzyt+_?@MVVgV6tJ6g15M*Y%aU9PXGnH1kN zzzT~jQ4hi*iw{}$)(d1x69$h96O?V1YGp{XT~|`F9Xhpw1}<3%>S}9vh6gSDd{MPK z1kBr7M%AKn(1m}$l~Z`{(2YRpzm|CKZ#lA*JmA5?*5hC7IM}rQCi-{V%%^7B)N;fl zGEg{7iHqO{@^Awya!0USwqD#=JGu9yp5C675^~Ylp?L>kOdC2rw7Xr`BKpnJ=OLrcrq?SV?)1$xu=h3b3LDc@fmXu#gSk%MyXQtw8&$HX>UP0Ed*!VQN zwlAi~=GNR)tAB3aCHI4xR@zFl+V>WI)>NMj!K+YWR0%H!qHZL{Q1>VGbU(Y z{Z^5!CukP74iC!muoC2Nsz=T~t0@+mUY-S{EfDI;7AF9QcHtT{g0Kol{|LmvG+vqi%i{Us<7Qz%RHom7H=e zqBWgOkYO z&Bla3OmCBtpp#LXd%J09QP%j(91j37;t0xG1~2tLxxCezcPv-yF--laNr@e9Q4Y<% zYM%gK%IdHt=Ae~F*@Qi|Ry4Hf0ap0~x!UJzfrDL*P_j@!VxhogMusK?an`+N{5)U} z73MJYEM};kK;NNjxjV~9$|b0U)RL;nh51R@F`B~L$@B<47GcSWKDb==ji-@?6kw=+ zT>RK<G^XAF< zU9I|HkbwU=7EXW0*0(M~RP7m|3qA3t5G4Pd8(3OO!MxS(+oEsg9HM|VZP$eB-w~y) za2nVEFf}D12I2yIG>c16wj0}H|WL) zG%Jd;29qxxS7h{c|Ri$qcTimiFoZVUDm zi(=6T27)!hz;W?7dh=|?=9(a1p7bGaq5AIh!42T&m;_EUG?m`Rnpht14I@JmBl*?p z@@fLT_VFU4NWaq`7+O$sN`mjR-=%I2121n~I*XpjtbK1UQT|co%n9fCZYiMut?p9N42(M8t(IuD-7QaabL9*#f1=QRW*uJQ1>_aWxz%$GCu3z0Vs-bLy{Lw11 zZ}jx+ib)CBRrVhm-ZwQR05f?I8al9KPpw-5sKRNeIa}G!S!H{#Z)4wJlm1Dhf!w;S zDssJ}%hsXBjhTl>wwT9!IJso2tzTWOs${moD3epFd|%EjQ`|w0@B2(a{G^xLo(*l- z>4UZ%GlYqDP4zh>puVdp(-=2aH*SHc7ax)O+`YSz5YN39lXm);U5q|$YRawUav}3^ zDEf#fO^`>uLSE=m9pCeu+{k3wIwKpg=FDdUQPZ${>d#j7P!T>`)Pnf&3$BdjV5S{|GL%# zr9g6*AJ~AauuwOx((dPs8dr0oJ~7Z3Gw#(TC`I*w8^6V0GkL%SI*^+!qo&L&}kC z8h@8adF0}k;mS^t#s{h1-vr=BTw{5k#Z>;-FXOPA$1G})aQy2U2~fZMabGxFqGYW{zmVm+<872KiqtfN(=qf<=&~_px1k`NJ2L1eLCne#uIAvvE;-v`ruQi zbW3#7+`~GGEka%d-?`6{_~w}1iZ=!2v0tuEzg_Er7|UOIJP^Mwp7?d=hVq)BN$v+c z8f>&UbjtpnEWHAlOisKpdbB4LeJINleinWp67|8}Z5AatIf^zr4Y*^rj@?eZ(5%AT zpGU{Ytz90%`uZ=!&fl(q*-3TW^^>8Me$Iup?0KcxG#t4!8nN;wL(Qqk z@%0Rx!PFvLTyVsUqbWzSva!h&xTwxW7L5fw_3HH$O`^4fkM61O+M)Tv z)LbOEQ{W=AsjkS!h=t}bKYF&4s74AI2z1S+G{O!a`iA=|-&d&dK0BWQ!NYC6?c=n8 zt}U4zq_Jj5F5AA%eXWl;#gZvbnPDE~q~o9YMV2Z>0IO+;F7C)SRBV2l+3`uPN_YBh zs9zVVceV=RZ|r%e()3;t@F4h-OUs-}Ayov+s$#62Zr;v~a$X-i9n~iqd}Q)ldwl~U$O$i+ z$`XcC9D)-q_cV$Ye97AL3*y|ei}T<2^}D;Bcz+|j`qJj6^?h6%7oM$HM~kRFTDM}Z zU4Kvxsdjv&!hTkat-1e4JCulQ^u5v|leE|LeISnM@9!tTbVXHF)vmAF+S+5QhhJRZ zUl!0bE=Y*4mtW<(hT_mkmCdScwUA&7KNzS^WAs(@b$aMsW^b@ZYlVpxMH$Et}QtbV%q{vRtRBJq$)nh!60I(^we#O!%TssRFNl4`7o(^hFeqd^p+M?x3C6 zi^Xj&EFkUUvfhs78rw+?9i9qTliMCeHr_K{l)Lo%!aGZ9zB3Qs&^Wd^Vq!pbb6SQ) zF)(A#7t{1BT7X~?6*L5r)WVjoz}VsFP|iX0Gr1A8{WRA-O+tLC%rGplF%To1cs)n~0!6x~J`=rR({I*04#+rIACV`XV=PmDQwo zGxrk4xN(?2oEv!pACGrV_RY+R@O0CNDRV**QLJ`<4jU^SXPDvZ1Kx|GG+GtySi<)( z;7!TUFna#fz$t(xT`u{PSE1-UJP|IeFh>RA_qEiE1BT0C1qNdtZl=mpJ%iEgYF!<& z?wcp$7pW|EqeP=yEv|0~Oe&9sb<=UAoNUtOO6O563B@PSVhBepex=AY;eJyIm$8SY zwIS7L?eGv52H>?2ow9_&!k@SJ#mCQ$zKg#}v~!d8y}j9wJJ9taf9oZKB!%^$Kw9i` zzfJS~X`k*SCS;_|`F-^l?oTxC=H$|E99NOdbDGqA$>bZ#Y6~9rCuc&eUi96javSpK zvDIs~;PG#F+HtNl4t&$19n#fX2m%p^X+vRIPckwdLWOVw7H{s)hZb5${X5Hd&E^Y|@`8qM!zI~A*$3{uPNz)>gO>=BWAWGkq=^Zyo z=-k}{v}h==o-ol+tOmZ0hWBn@f3MXafyHVa604ry=0v#_n47eJYL`WFZR)! zA9$A=`%+8A>n;PQ|1~t6WnP)_;nn-&)dz0IVz~9e+B6bA3pNP{FlOZqGTxS6{gs|S zBoH#e2*Kb5*T(dyn)8-5O=n z4_Y`b*I3Dj>eTmS8-}+=x8s->7k)d zdTwlabNkoDH%5Io4-hoiuFIld)^sTF#krdIsT zCnYs~HIy4nI>#o%uIws(Ru<{5!7k!AU9^7k%YN=!U4Ri8JNB#0;Y{;bYbpk(bN_AU zld63%c|rQ=UI=Ath&VlRVS(Qo?iIq9C(e?P5PcDd3=Cu?RCE0`d|3~{MJ%CwBC-e< zygQ|HL+ONPO*{JahgkUQXdpAiYI~oTqP-2Pt%hSdGrllSVjRsgGjMGF^*V7j? zl@!Hmsd?RH=J%(-f+KrnYH=PxKRZ4#dleR(PvPE+rC4xYuMVJ<+Cwb3IQ_Vs91Wr} zBB+`ppyL%!L0DD|Ha;(K<5Hqsh4P4#5Qac_(q7?RacKOw0R(37#-#tea8%4?>`ZD( zifz_74hVRlykwKr6Ct)GUD64f6>#BoeP>o$n&R4Ji=u^|1p}e_sE*w7ySv`Ld+*(q z7(q>Xckx_v`W0lJ#_OA5IA8Ry>-1G5;;@8L{x;s>qm;Gctq>#!t1$ovT#b{3$>xzo2srh#-PglCR{uosedhK{Af?utt zRXaymvxQsuG4IM(vVvcskXz{idbs_pqY5$g$Nwi65c-u2#=NV^b1~YHn+rj~o_$@` zTgujTs4$sSH5*GN9POT#{-I@|J{jM1AZ5j5wKgF|lM|o%_iI_` z)<0{dtOJ#4D>m>6gZftIk443hT*7E9cceX69v!S#V#l36`gg#^aqz>tk$^AntlGIto&vrsu?g-#dnF5lO># z){3B-`G%PBuWN`T93O2bL=r3r&~vd>j3_XI@e7FTaAh*gMwwjUgBJyZjU@9S>X(olvS?NL-2Wiv)o5XpA#$(rk-@`u=-d`EpXvaVHxeZo#U+SoSfVCy z8bVMd*Dm`in-547rl0~0QeLHX(UP6rF0XFUj=ed;GH8wlvaoIMbHPjvemYp>a?PNG{#UGbR8g+q$=bM7yy;yd-r*AU2L zJf5|p3r=KLr_j71vM-DbI*BZ6Q*cE6=C|_CNrv5E)!mv>e@p3o&*`!FrH_Y;V6tr0 z%z+?!?z1cvH~VubZl3+?`PZjrWITv?BN*gOKXNa1)-N}r=CRSU);LP3I~-D8mN_B( z_!1!s?~^flqf$+!H3tCS2Vsl3jVo>Inn!r0If%@>YBxJJ-;#cul5!&Y^5=EoB32

d|+!5$WrQ;53LXWLDaX)*@+tJBq#NvnWp~NQq%VCiChi8}>Pt#xcVFCyw5u+RSGQstYX1>?atoRIdh5<- z^^%)GvG12AoEe2Z=Nw^uS#}u4rs~h^n#){&zXQLA&%CT|FAT-L*2v3>D`vwEY}_=; zi$sM_!}NeDMuT*9uE%KNa7dK<>0@%U`smeq>d$%1N zZ|yrT7AU})iT%md`We~@`^R7`2GpRvN*J=05_(3$OPlC`tw<)?GDmmiMZ10tw;wAS z*fle+eYN$IuiypaR#6Zq!wzXLyLIGN$jnh2?X@cBO*Nc;-ez0-Mbsr^d^%;INA6MP zajyf+J5A*Q2D9~>JE$PYBwdXkIe{PpTjNZ~iQakmJPaUQ`hdkLC(Tlz+vZ5~%%|xFP#5)FYNVALx4|qazSSgHd|{?#_r`?V&{ z&cR-8CM29h@?$J6DTrX_K6CUGNT>aftb}e5EIrw1mLk5DxTULXFd{$b>+7ou@S0{2w|bL1He!c#jd3i}luzG7qo&>G^obnlL6McybA7LJ|p;+RV@I=XU*EIBBw}6It3t zIw`k`aj#N?F*h^Qx;q^Q(>WVA4(>sndUa+Kq`CaQ|E`C@BoX~sUr6SA6_ZNbR}+&; z@UfoVW=ZO)sZn%AQu~U;-3mThQPzcyywon|&Wn>U>0fxt(z!lDlI-Zt6kEimm61{S*+U9eo8~P zOvB90@352psp?BcT-7c0<&i7*vH_#w)_kc+Gs9t?JD}vUGGXG3ZVNSxt=>cqZdtvi z9OpxD39H;$Kn$OEK7MjKTZV9~cZCQ!&AW%>r9CiFOS;!mr+lQTF+@K(i82ju&WT1b z%0=8|sJYs6z(P(=Zs&V~6*yi#pE*Apb#)$Um}{!lXJ0f{ZsyNsXZlLBGi<-XpUqB@m1gHul0KT9pQKxw zN}jt848j>N;qhbX?Sh797Td0}%(x#2fkL)${J7&0>M)jE2v^=OewFOqnMuPS{OaN~ zyy62Ff3tb;ygYbi>B;W5Pw2KhL$7#_u)rmCqdCJuqz(_8~6BK-Oz7)1lEh zz-J!DCbaMk^*1F?Hh>J?U-0hUbE(imJ5J>J`@BXfsdsRJ&@M?HcB0m-t*!71trlg_ z%e%lz9KErrQ?+8p0X;=`VFQiH7mJVUIDIs@4DUz1Jr|ryh*>aDD#ul-m|?I4ypz+6 z#&;6U1)Yy>!%yNf?JyDJj)S21tol}|!xOTx4bdwz1-QaaFUro>^mj-J1aD)ybAI~{ zdsiz`KZ6RLe)Eg;s(|aqlKT@7)0(dBJsS(pHQR4_k*E_C9^I$di@IPtO-w88Q!Qkv zwQGB_&%Y_Whx^d=v~`RlO7n=hsBu@b`9;*oCggbYOzM@Ik^|oS4W< zt;HX)V38c9vv}|Q)tku;M?*tn{QTAr_Ec05)&j)Hnqrpa+W%2*zDSJ+Kx)IVoVZ|a zr(So1KKcQl%j`vZRob*|5|eS{mWMRQ8v0!XPU7d8pV?B+$y9rwW8 zC<>WG!}}?n`K1SnMKj+`Cl!oGjE5M?7^~t%E4`bp7qpCeh>)@!#vG#}@gW)l(nmpr zac+pp3<7XnO|r{}#{A6~>AfTwOcftneraCzZftlno0OEK2#x3#jYE(xn=CIaVz^D% z+nF=hq_t3<$#OQ9i{nIyNVw8XtkES(+v^dk7io0-pR& zJpM1NVz({$xVD1mfL_FE?l}0Jd=UyDow1VfBc$G|G$tro2rmV$1Y1aSYY@!)pyF2k z=Jr3HK3#WoSualsCF1oF{>-~YkI&ccb#=ZVni>?WlY9NLHZY@4N&f+(Vc&fN$I|vu59m!NOL`UsR6hYDcQ$f(uOeE+GVGoZGdXFm zpr%%!9O&!>07h+gord>TET8o=6F)rWE-{&YzPrhe>1#n2d;D6*2XbNyx-oSJs?>zt z&R7A>%yycbj=GDlAs1kE5uxCjYIHeN%~D?6IS>Ya<3QP<`hGID_0!9ngi91V#(vln z?y=YD4Y`p;`RkLCr4~~OUK(un1c-A8yJY^UgwpQEH&9nv*7@>IgA?XfpPtk*CYX9( zBF2!%Vf%<*N#8)vrM<@lE`bx~QFlp2GGJPKGALtrTPLs&>qv1)E|ioHw)MHK3^vzH zHm?BgY4jjtWw1E_nc4)8v?)l71B3Za)r1M1@4K==;LztZI32hc<=TCbvuH}V4NAR4 z)8nJ$F==NR*2Hb=^%d0fc5Vam`c14LUc1avGkfEa3D4AY(a=|=bz;)Ytp!gO`bvtv ziZH9o_i?dZe%1o>-V2gP`~tv#Kfb2%nI1mWlQ;6;Y0{?NPUAIAQa6iuMnP22XHVP zi`O|H56h84$}|cJiU%Pf&UJBwWu?~vTf(C6YhCyo4@p77iDK8!fAD}4=Vr9DZ_gW~ z2ASF1)qhSZZ+=HEuJ|(Y?yKzsY3!&RZKz?9_-knb{N44>s@(~&z3bN`6Uwv@l?5be z&OLT>0O4A`xvQh|%870vl->R1>1go7I@`DL8c)-)4_KAfcFVJ!r!;t6l+OsT@OLm5 z{1j}w@Y&0VR|?TQ<}9MQHK2tb9)kiqkU-w$OMiqeT3xhYHw8+kD>J4};OnU2(4H~d zazPf7fgqT<)euh67^BlGG|MX}7z$~Xf`URICSS2k&6GmA0W|5ov0`%y#zCuJWcxVO ze(DUX=w052#9=H@cS0>t>dfoeM7Q_TOO})W^iTfE7tvag^pXAydWxMy<_h8W(8(4D zn{}tk0N#j=mrivBES3TDGleJ?ifYeSGnk;jUNn@Jo`7U>67plNQbBq)P}ylbcvY_I zIieOSR^}~N9f(RLf3vk_VVnDTuUv(zcgb14cPbR;i%mNClpCaLi;>i=b^*Xd1Uav& zl?n#+zpj&@jdKvt0x|rLb+(TgBcJ5(1wg9>7w_TLHY|ElwVD@Oa+LF<`FG`Tt91dB z&b)D#9ej9P>4#4ldG_y0!}lty`ElHs>M||9(4FmBvc2$kk!zIrbmC@e&sYdM&Ft`Q zYA%G+qe~O&pUB%Ue#H8Z} zaU%0UELL(V@xQ!?bXUBH>QgM5<H~q)LX-o12bg(gxySLm&>4IB}vK;w?pRj50brUJnEU+o)wCBe=r?xONWA_lRM9 zIIR@Goqw1XaBee|1{$rqopd|FD~ew-iF(;Q%woWMeYkvSmt(RewPt(_GwHV1TCEl9 z)=OquJIl}%`|Ud89+s&2b}dMsKT%|Ju9@FoD|jQ#op{ zCj~y$m1Y%>QMC3=CSpRWKYmuE)}%AvxS%*mcSwk72O{FeoxJ=ME2es8s55(WK`;qzhYIum1D8LW}CCeNmJmL{(gNO1e_Ny zV-H{*9mhJ7KHXxF2dSF|+V+crKP>eI;b@tF$vz^UVp+$eE%2xhchS7&0p`@qSeJY0 z(gUfo>?4^eG0`2Ty}V5$$a{RF<8=NAId#lyZ^h~hQmnw0H#5=e;*o#9X2k?c7Movg zYDnDoctM0&gMH3R$d#at*K3s=CA#6eeiqXGNxY!2lQlIBK77bEe_ECJfl_a@g({<@(iP zFO|)NEc_^_2u8_JLmG$~Z;Z>h;$wz2YjJR2jW+CRk4xS7+@uJlL6Jw^1s7!@7;y_P z6#uYqy}c=3@WFa&#IZu5f3rgV4_PP*K`n%Gek3-b*qoT+TKfz~iTOOU^zw?adGkVv znY?=V#vN0MTQfUZaxbVlKe}5{l-pO3^`*xwqpt+h=A#}`@PibvePj4`PZS!z@s7@& zMO@pbw;gUyvVdo_9rqm#79n(Sn`a1HQY>B4OO~bG^ahTBCMG6p@;Qgu9!DaO5p=Kv z_$S|Ovgi)kQe>?nPPQ4O+f>b!YP}qW8I(Q1h%{ zF#o?XwVSBKtcF|Cx!|9C53*-{z#fT^NW&iS#fvj3SMj^Wm2Wd*q`T-lWs{{zN&De1 zwI;LWeqm&j9i}DY%1=&lNj`efKA84@9!B}8@mBT>S!0~`5Vezht4>8ftsR#R0_~1-zU!^xN{<>(6nG| zCNwKSs5-g9Iq;6S8P!)t?E!iF8Qx( zMg0BiH?Pq(Ao}@?)coxa_;`6u0M2WiJlXrtzGb!>%*#74%YKD)^!Xa%=m=wzT$!G; zE#`>(ox{RTDqTsQ-XD~0%EQK`Xj~Yp$K_UfG4nXAJohJm=|e3%c_RbHk44#+zB-P? z;0666TG9~jAWV~6+va1b*w}ri(T@BUcR{1_!wX#nZ10tHL%C1UC!&r;+{`iUkHH1&H@hT3WvS=vBjU`Anxb_LfFf2;Nn_< zfn>&}>d4_vV?$lP882gj=-hHM0|`m~dQNq6GKCG+-NhnA0456D}VNqU1HbFf|+j4!51v?b|tSkK4@VWrBRCfP>^d!^jgt4c)%SF0Ur7&(XhPRJ_Sk?tNA z)SGaFIuuQ2^+7f-FgpH|TP_nB)p5b+zLwMbsmiXPYh;A3@AX2@2obA2a9&cM=^;3( zP)f)m>)z((Z+#0M$%iK>QfoVs*58ll-Q(U}l{ksUi4fED*aP-}?q>C&R@DtQ=XI#T z_`fDsF9(NOrmHs;_+mjkc$?C`VvqH9p9LqR>2xdjv-B&(IJv_mxlnFx?XAxL}kE=+&Hwxi*Vf{H#(cQmr%T~Gb@}u zT%cjLH-H(qT?XexY*23OYINFsSes-_a9Rnw z9h6(;dkZ;{Kh=@6i_!rPZ(**jB7|TUDb_46nO=nd%Xw<80_%1**sW$~APTA; z`n1LsHaDD-l9FjT?eza*GA_}~366VnvL`?B*Zmo%$yoce{NiHI-EHi6{ehFYMM=nu z-~XZRoPZKW!|Pxh24-InKUAZGmLIp!T0is}Hxs=^TK(%!RK@zYwii34AM);P!HALK zgiE_p#4EC4n=^aT3A>t*85i|EP|~{K%eeW39>Hr|r~6z6Yi0bclwqm<+Ix!{yy@kJ zqFDyd4)0HhNJ#$Ppyiz(Z{)vlT#B6cE%L-~qWgL8K_d72wT?XU#r+$2VGeIgDVR)dxuvodIWNG2IvOzB=ia}5{fZ>~z+OddV6y+ZR>j|oZdot0 z%GZZ@BRfv#_q)#waq8;oPGYi;L{c6*bBd0(wgSP7vT23g)9L@g4PNS6HSfpQ2TGFZ z%-07)6fmRfD~jz-(2ub8K4`qHA1SOod+hE_IM~)6i#v{M|KG1ok(%Vh$3n+Mbpol0 z&slAQAH-B2f)z#B!@H#IS`cgUO`DoGkF>i1w-a?VBGN4NVOq&@_j7B&Eeu-l z?_H2rEVv6B8x*R!A11s;`)_(Oa#pP7<3}$`o~=}tS8xV2Y*M*>YmL373GG} z-sYNhG8JM4MH?5|?WzSE)?-5I|0B2dX)|)qJ_0a-U4&wV*P_Wp?;j7qVUZU<8HLe% zU4UAfa?RCTzxazfUI=8QJ(Pq{`-bB)1=TAY34Jzx6^)$&72a;9b!=P%EkW58qZ}aP zRP#5q)cnaCUXR5?aZ^SC*GvSD_^;~@5PdJo$;N`{8-(-s$kCy^x(waiKG=?J9q3Mm zN0WWelc7?peCQmBiLFIXP$k@Q2ov}CY1;GizT(`^eI8Xyn;)yH}fnt__Ae-6eZBW?5^TI4P%1%=bO2Y zO5o@3*ZTPT(Qn-7N^c>^Ax96<33TEFA*{j-UHi8|03~j%L>Sp3J1QPG0ZCL7`Nw|K z2h+6hX8)dPV5rX7wq$pEuU>xE+~;QUn6Y_6B9bsRQz}@stph>%qP+YkT0{b>@9lc} z`0e;@hjHZ4u^!R4!dfK=hQL1M5iupN3@%NE8oDXC&5rSdv6*U<2pP_H%x_0s_y7Vl zB`ClSST>))2vv4Wnv5Ic*OVf&!vSKa`6r>PWS}Tmc&exKyui+d+E#l~yGog0`LdBW$=0+QXfUtkPb0cd)DAHVBTgQ?pB)L+(4LtQaUIR+4`=P>kQ@b{Zt{E-x*|4x2S%>qyQ~i6 z%s`&n>K}Q-6S?w{-8t7l;(62Y?)@RMRs!Ju`7LT(iWzK+PE#;MO`vORf@Iqjqg9DH zi;M>@*lMjF_~H}Q7KOr+Xo0@WztFfH3(q?IfG5BR8_T4k-_Gjt-T$1`DeY{fHHXj` z>pEe<4I?l*GGYB4Fh;z~#Ixx-XhAa4W*a~+3jn=LXwBwBSFkZ}^e|%F+9bgaK`)0N zz=mD-Gwb#y$$iLw!DWReE&*G#B@0>rmt`-k$3A!x9z1jBhc$s8{mF>=`r%Q;vrxqz z9NzBgu61{kyIKs2^Q({iAS-=w8uv4D!D6p8?q|1v5)-hA-|22&a6jMKla8+0{PPCx zC!}i&IATGVSRgBRZ>MYBJqHJeZt_-CL{*dhwfz9#A7V%#9IL(yW%d7C-ckRKE9Yza zmciu@8tpmze@Gd+6&g{Jj>g-rFUNek&$ z3|5H-&`*#ZUy}@*;igvUXsE5-?^Q7bj(j?e9>xjq63tAhwI4_gEe%l;`bn}SNg%D8 z519<|omg$}aJgHsZ8XR$V0%sU;x-|{!il~!41l~rN?Iefy|wi?$mzn|HCk|C;1;3w zdk5yszpkN3xquQ^c9m}e0=o*@Xvnceu^1gAcFd$d?EMt$vjaXKmoolQ(p52B+JpXW&}y_v>@``)uEn)EFHifU~&wl{MNRzq54d zBoZ6T_uA8FD%GT&^NL@l;7{x!@jLF|5xIdk^xxRIXle+VJv^|*cNOXOswjS1>D?OG z?(F>m&QqW}faCQLMs_Uu_c519!OgAsjD0odyX|#jR6jYuN>{tT_dNU|NN!y$f*<({ z4woy})SRc$q+HAiK4a&+KYeV&qbK33NU7m;Su(vRQO+*@uk3rRmZ^cpP-31U4%6Pu zAPBn&8Vb;ALSpO<4VeNMG+jLvz>@nhs5lgjw!NvIMLSk&6UC&LU3vF`oDAwU)^oYRLRjWu>P;usAa^En zd%V2@b0%05bXRQs4`O(Q9=>LkJP-i0lAta_Wk+&c}DJ!iOf4 zHdVkL^(TnZL?ee)`(~+-2&Zh{Cokr{$d8-+D=07QvxD2y?~FhoID`tp9sgfhZt@hW zP&HJc__}U@t<%~{A7uU@8rnRXNrfy^!=+PsNYjW3;-vR6OB_6uOHXWDVwXdH-tQ(X z-7mpOzG*&}Fhc>Q_Qlo|7)N(HOnvQoGWk5_)SJ8f{Mvm1ixM@1WsKhrst#?^eg0$N zT3x;K4ZzmN)+#W?A_V@fnB0Qu1|$`Xi@8QrH@8?`w?cXo;_fpSTCpID2&ZWvgG!q-ni-Jb*`T-ktb+vSI2bRqh0fFnlHfBVr8-GFAW z6q> zD&-OFJx7_v*Wnx<=xOIb0(rzt3tXL=pAiyDS*lJ>jI8-`+-I%4*f`9seop?GqAU}kK>K- zq=gQY^2jd?fXQM1rz|FuraFHix=f@*bZeag$1V<^7Iy8JKK8tF;peAHMrS08B?D@+ zw~-aR>ME?U0Teg8FnB}^%P5lN6gweF-I+2Znw!A8^l`SF3%(EcF+yGoRH5`X`;SFK z9&09I$4@$WIbaPFQ-!LZ`;zw~wN$peBp@ff4a-(5e2vpLj_uTC7$2@2fr-Dy?R+*VNYLq*2jjzf{-GxIbQwl3Fu{ zxkE)yBsH;rgj?KgHPa+rneet1lcEUj#cOC{yf|q_vtm+2ml(4Tn>wsxWW}TioBG98 znT*(+oF>T=gn?DJLB-F{8&dTPG9knypCrsa!T;$ZZ@Vf5Nox>HdyoAXX=g{{l2xZh zhnI?=I93L*2oiG)Y6-{X$jhH^zuEf)+_cD-?gJ%mZLlcg0z|kz8?z|u|}@;OeNB55#3GDe79r!?Z)<_)|@Po8*o>Tx|%KK@U=>6nWW}2 zgR@y#pr~)ltha=>l2xIFjqcZl*R;5AyQc zyPBs}7G!QojEH36^x=7dXnwx$v;{Bx1nKtet7Sqacy}kC%5|WvGFQx)0Iv~vwW%Df z7b}s~!olIxC0I0y)`HVZqhIyvHeEj|!F3fUoHrW$&QG3y_m*&ebpJWFuya_t#g%fJ z7}!VHLV}@Ncr%Gm$IS~h!Fz{jyA}_NOC7thF_2}Umoj#Cz#5bnjuGp$BA?VEo~)Dy z6483BEFMcU-iJTmO>>Q}BOg~DePNvTb@mBwf5ameZI9HK@clXu)*CNeOXxBL(UUK=McN_LB@=hn^lp2IkI z@FV$eeCBTV=Olt)-Lt&p!XRd!Ft0a|brZXQn5ILtXIBPtKoRvII(nDt`I{pz{^WQ0 z+%B@C)}&mv2(L3JlrWQNFix9lXinO+e^b~_{*>Kk&v|LtCa%pzFl(PmEIA9A%)ZPF z%V#(>+{+#5GZ2AWLt6kVOXAdQiBRa<_T)^F28dlFPcL>J#I*A#0t6L~m?-`S1^o$G+3O%8SP7@tj0 zxBDT4->?6^9R=V&}+T<;XZ6=qUKcN0Uu;tBfRUZRK z?PyW{10c3E8=~EwIJ0*m4ZcI*`HVS_c+7$#wyt?v+6mr_#8{+4X~MD*gW7h|TD`co zZW1=7ikS7%4-ZNj=3w%cx7F>Nk>m05$|lusBUQZqZh9bHP`HmRuvj-Rr0VN`g60DjAVKUeB_z&L#59Ut;gsCWz zHWRkUsx42wf1Y^oi&1Fckn40Ryz57wy>6lXrLG-wj`e|oqK@|?M;z(oj?=8)@a+-H zbp@V!GAzL3ou}BGGo-Ad&qVCR=G~wIdhEfK7(?VTR zj==eVI0IytsI`|i6n`7zb8c0We&c;|Zlsp2$n(W|qJ>Mn@Q6h;lu1BbRYP++f@0e+ z*W>eE)0#=={*G7Jw>xS^j6nzyx)?W22QI}ru+&k{P+;F`hh2Fgf-p8=E5rK)`(hc$ zavzvr&gu3aeId??VAnYW*_-S9XaV~&wKnKC#kW6HQmyV@Iy#uBYg8RJX!V*@*mKN# z$Rx4mYTL8WaTf1Bmv>A;`yQQClrC7{zAi7+3ardZUhRtl_`e(zh0S_+A*0_cx+vj; zM9!uJ5JU$H!BQl1;!eM`h=)UqbHf3_|bRvt!N!pVEYR<1xT`mN25*#oc6-$PFw0dt9q(c|J znJ7N_iX3dpT>0h_elDx%zVpD%EZrU42l#+4lAjMb*dyFbnizdg+8js?f*^Gg?i*Nh zL3;V6i%KStlrvp_wxMNO8ccE-fx=!gVk$hL*~={a?Dz7=88iim5jk78Z7cE~?Wyqo zcJS|eydNCXbg``Bgt z^w!il0Mnz-}G=`tNXy+@9q^h%zQyj<1stExHj z*$Y_g!SxsE)3BP}_Zql#bFz3ZWIK*_Xz%h~`2O<80_=^eA>QojVM5RVZ=cVR=`W7A zR%3lJKd1edZ!+zLPY$TMzZKN4-DWN-a&~>*<8+@P(z}-6;(AaM%o;<-uKa)Oy=7dM z>AE*8wsB68x%=uBIL73XAcFG;$V&oQaX!{|7ZZ1 zm(x+N;~o^8Cg;A1i;Fv5J{1%?_u5tAmFtyds$ad2Y9BiaH}=LG`YvF7N_3f5^sZds z{N{7|Th7O$J+441%p@Wu0TJcsd=69#Shy`jU$)NpL8@hp^iM(k*DCq1{>adB@N$e{ zu0$b#du-)>JbG|=*zJx$Ce?x_d@E{ zn0>J8SNE?i0;d32T>rz8P1OqT4z#Z#%_J~_Tu@-8xEGl;QfSf7@({>*{6W5;2!Y6c zK0rb+5;=f{1V}a=FmAr1I#rT$-ru+|FNITTyXyL41(Z#ti22NZ3$uCbnYDBEZN$Y7 z;7HAWjQIE%l+WAY!omu8hOyxu?XU0*&W29VT3UiUgXP6UwW(^u4d_O6AkZYZSd0LC z0T^^}r3e)DJ!kBZhwztOJ z1ISw-h14+Gw!mt#cnMO;>rY=wUWSxY#Oc?iXY!F8=`&vsv!##H1%g;4YOuiCg*p$#%a^LcAEx`UzSPAWgP|5!T0^#bN z70NsioxcRhLn7zf7CD}{6}E>GRC9WnKm8QnVzrlhdFC7I%qQr5-zS{xr1-s7Oc6wPI)f!Z*quf^)+_WDP%QW_v=l#1zCBr%>4BEW zR>r5U_llPW6hd2U7B26sfJ1y@q)(l?ZGYZEY8)aJ@b$mcT~hx?Oa-z@uaQp+@MS>; zln$aovZ!F$98y0PKB29!cF(I%3msMt&+U!5EO6T1*EAoz);<#5RW6KDo{^@y#3D%z zDZ~4k|FbI>C8-!Lu2DmuQ)gN#4Qnhfvrv&`IJHRAL1C;TL_j_$OC7L3Pk*BXDv;W) zBW^Edkm!~j(Nzt$|%YfIGyCq%@fty>DKgXgSvrm z*JBtWnA_i*2_y&d0djDN*LHUUCa`R0w(5Y^@&>Ji6tqC`nkK|50DtkSEDTlecyDew z0~u*jMwf+X`I*gj9bFpvSO(lDFR6&f=Uab8Nv=YgGKxZT7;0pfUyF=0LK$Sp_bCe~ zSVC%K4@{(>tmH)s-1Z+41hH9@-c6PBg0>ZqDdPCJ`5&l9`8}`FI?iBoip(-~ zTw^cMp!OSk?qOY1{dF~szgJK@le5|YOMt$vw&W8xIzp6i=c=q98XE8ZPi}huL&t!g zF{jZxyXd-mHm~&ctE`~tG@08b%-sL7^$0agJhu9pB#lW40>$mW3-SIhQ3QW zJ`q_d4xQA&Mb-PuX?E>RIY_E#?f}3*#8B=tE!0FhVt~RnJsWkS`j{6#tRw#~!S$Eu zzco~#!g#ec=gEtr)EHhyM`D>-x27u|@U}kT8f`z zTEwG^rP>fm5y#vI{eBo*nDjS8su;=!hPW&RA*_D{0ok@Vh|CTkwXx&x&4;kOjO>am zZ7Rlg`fzugWt4Bz>*)?gfKY6d-rv1K8=<604Py>QNy9G@0$2^=`gTCH>i4cPFo0UX z0D{?-jZit$rswsSuivmQx<8{|aZtaNiXPTJtJ%cy(Tv91y<3N~XUETgN~)0v7mp4+ z2HhlXOcd4V%1La#dz0?n_@MngvRs(r2l>8}$( z=npaJpwwO;k^E3On-2&?!b?&L4Z_&YtsT(p@^E>k;q)wIXYEa8O|hx(|7^75f?SUv zFcwnIyhp9nJ9b&SND;6**q6#8npbv<*7zbuIV@?TA2sF?5Z}d#!?cK@igQWQzd_X{&WWwF6bDwQrXNit;Cq_D4l>7k@RC8tMj1Ff}nT* z#!~013%Ets=cM|(Ax>|0Fsx?-iE(J7zKAHq`w5E(wvni)J=_jA74?iX&Ha?I{S|{z zqv>Lv!m@JC+*~j+SjzN!ZgFn=P24nTPFuwOIu|5ZltAPLww7>Fl8Phz`TOq;s3mdX zN~D2W5e@Kt@3?6L?l825dnrO|c*r-@#D@+@mf20wg=YX<%iXH)L>KD~;MRYdraW|nrYtKZXr4=wgr}4Gl z3WJk2@nK;|1k8?jdR8zyE+V$URmLnZJE)*$@B5k1)a*0&?Nn`{*!id=En4nyZ??R) zh*Q-Vaa}s=CWgp~$t4rgQ2Q0Cs?7Sn^@AY!t1$j&lK<2093$uFH5v-1Mq&qRJzc3E zYfL#YeT4(Q&1d*yVDI-m{$_Ces>Gc93(O0|VF7F9-Ek^D4AdvgPfWJ3Cx5KG$QPNDO5 z@v6)n1DVvZt$mj04fFj`l~}&EFswXljvB%Kjba84sd_2+ZozNhTh<`YcopJahk{4Z zifdN`$f+%}3%x=pCnSGAH?}~I@dm-`a@prLknn1Hv(@&(pVerpw5OcaeLqghZZ6!K zzDmOaUvtVBdx)(*UdX94ew7$#1LBO~KPRg0^twUvli?~~t~dY$iHu>v#$%CQr~ z4(JNdat<)GURgn^$tDmux&_RG!1F12acGdVH}sai|5y`#^+H;D>dm8g?hw4%h6kzS zf-WNfZT;KlK&IY>fD3WjlsK3y0OY8S^q7FjQVk`PA=Q^yqiB_&v_-MDLQLQJf$DA5 z4sw(ChJ218XzRkA3@dvn1;#T7|6$HsWkT~oxBC-rLN91SfOKyOsEd){7bj_e{{Som z+=v@Akhy^XH2^9rLt30HRoL|nUB0<%=BeoX+X!|X>(XA!U?f)V_k=6TziI)@IUFt1 zE9#`tYB7{0^AMi;mF!lFLj5u0?LU&=KYs&&wnH4HBjBGU0WUJJv^avnlmq71NKnu_ zHM>w)@iihnsUPt>JUr&xQlXw*5L)2B0qG52XU*wh6W02?B%vRKidh z2q7UYC^^f%a6ORrP7YAVK+x;vGteE1CG2XdI7gE@qt3ZFQ^M)C8NnaKfX`_(jemi@ z&MmHdf|hUW`kzp6zml+xpy~jG(EL~a5pacMKD{6X*~$UWu@OVo53U9Q$nhP|_e46l z*&}Mp?u}~!flam>@vk%$FP4|q^yP)R4}E$c7(ttECJ926#yjCu4hUC`sU$7<9r*k2 zCir^7Z(6IG5@G)rBG#*H4pQz?m7m>Uz}iu~W;=rKWp6fcMdD&jL9&Al#SuWkKDt^_u*;jYLkB6W5YO9a z0Cp>|Tjq{Sfs`!Ki}qhxI5$906c#H4j4?A>pnBfqBqb9?(KX7Z@4pDk^cH%CKgD5xjZvD6gDZYugY9$^NUJY%Q+3U_KCl z`H%ygGa~qKSE~LV#-Ug1m(LVqyFp2I6%Y3#3!OJ=%h}_+`<^M7zf#+pW?&X(F9pv; z>o+*NLO^c){kJ$wvk)1>{?9^n3Uk1k`6Y!EXeZTl@b;mm@v>XxEZsQQQ9>B^ zB|I&FQ@VUnI0wcepou_6{hXT6kiPK**yo+YZNFnj?t$RlVP+#h5|uA|p^^~pc z4oUV1>+u$M=Bh3A#^Qb^M!nbNB}ESCnS(tQf;kDaT&3kaJ&eU7F6H0*2_^ljl>blQ zvJ~G8=+iiuf401XB0GCJE+Q1HL>b~jXxg7{`SQ6}5EX$avV}==3XE7pkv-g<{c(uY zQ%p|xtB|@zurNAg(@xo}UIq;PT3%T+;-CT&K(O&|NC5v$084QRdx!;iF(;HSeXYg7 zfTOdnh&eZrYSWwv@l^o7^pQ=(*tSC3V}RnPdgdelrWS0S2`26LP#S31op0XH2O^My z9uJyd+%HoKveDkD01+55ajZDlGZ1cMnBS4hg&k6kRSY>VwBuKwTh3R;7X#9_)p@Pt zX$EL-DFsX@1XlM40M7kf2m%UtK61|h^PgfuM!Sm!#0M+{qoHnt0IWFkrwv|l27iq$ z_r=8ZS~=kZJ4HE>Osr4Ock4@5W~3)z=0W^4gOdJPKA^#K{{%J!!F^FJ?LMe7F@$ai z7-yXYl{Ygc5Pw{P;7t*FdW5eU$(L|fDrs0<4q8Zc%27LiJt6eRLJYBU@L&8JJV1s< z0D*tP*Zay^dO^KJy_xn93cd}QlrtEZ_aLM>+n@WhqG(cZvV%^C}HxMl=dfL zdMOg^BZ)tx(c*Vah$W!hF3~$RM-<38q53i!0EDkPXOA=d2YI-m7pi=XjMy zZ~*e^$-55>J|Jf$uw-??NW6i(rNF=5(g|O2Z%*^uyum7(YQ%XwoVV;M-8gwgZqM#n32T@lTx%VsM&-yFIu7UWpW|lV4p2U*w7m zD3;JPa}5r~1MB2#Jcbf-2p%TFE$$#zUjiS}0CH0YJmBo{l>M8K&ia{o2NMX8o2dN3 z1bPxDj}Q96=TrzUp=d%g2-N`uli2eY0%_6iIWD(2xt*5T^0ZfLvImFj8??ZMH-u5R zUEoriUAuNG7;g3-Fe!(Q0m;=9ngfE)HIPh;NW9k*<}v`V=@rQ$7w7G!{%?y%)`8|( z8d3rLzL|`UdFeNbrltI^Dm{TV3h94nqX>d_iW_a6voTO2j9>{th)^3yuG0vyGb^D^ zC4CRGBeM>G2rq7bx7b;d9=#XS)+QIu=rO46;*{}54n7~PtmNkdpKnN1wwnfn`r8>L zPxvkM`|oD>`>D^$f)G;%U;_(rtJ}~#`5*ANA2P=U&My?bM2DpTd8nH)NFLlhpaGbqv&PpsP*4Peu&MMjr`;qP#u9>TQ-jNr<*!<#N<2_=aIqp|Il4p4}=e8n0H{*^;PHcVxMCuU$7;@DPS1u zBjP9o%mv0)^XLTsL9-2*NKHZn1h+jRNtzr6D$Us*THGfC@FUgXpdBoF1ZSKa`T+2K zZuqx>bf1wD7lYpvfB6m4KhQ@KrY=n)eOdsIkB!3SN3GQz)t;gf9&3u?G!B3!M9MSG zJ2f!U^X4Sr1wI+ym47D7YCJi_G4tKn_1QeXSZEJSXI zH)^1Ai7)6-YJCPbYxmaHL;k2K)cT#6d zO+B8DUCC04$Q~x^HGl#>V}N5!amwLl+hzCz0blhmzd?`( z5cquqLHGbD$Bofg40D+@ir+R#E?!s<8N80nwkst3dB7=L-P%O0)tF-Oh@1(k-qFnK zOYKo!am9;~V`e<;0qRf%%*0FB)(thyW>*;k)Idi3<+mFAz2LbvX#c4PeT4r!;^~=u z#YyPu2!{lwW{}9C^TKFZUNsDkLehvxdk2hK9=&dM{rd;5894s+#jQ6d*;;{qk{3VB zJHo%<4@h*aIU`@+wjKr7>>Ufux;asI^x`EYCWbO5aRLoX(mf|hJyKeR4+7N9q*F1( zNlEOpl(zEc#56xdDPxjKNdH=ck;cOJ&sDj1O{w~XOV2jSTloh0NQ-)I``1%HvUO@XgU+cyqR(Gog6)Oio_k5?#&B0X_hcEX9b2uYny(? z2jnWL=jT3)ve$0k8wC_2RLeU1HYzU)mzeGAgVvPgQ3I|$cd22t1?Qr&P}IiAmG1F$ z`@ff}P`?oOVk;e@d0La!4p9Or45BP^O2^&jqJF6FvmHh52fM>C7Rk!@f>XW+%oO!1 z^Lb)1IqjeKwXDLVERcKeAg@r*T4`{(Z~OzVS)?;c5UOY=FA8s;k^=!Q_iy@#^Fl?}mEcs-9RvWI>hXTL{KdZ#;p^T28%>-D(p z!0rHg!^MAI#5UCLZVK@w972&xZ&j_cPx!@Z5l{sZ$at3H;JmglWP@9D**1Ih9@VJ$ z{nKasrnE#!8l$_cmX2`_Wx5Rz8XM>RJJ5?e^QtRl6@UOYa#E zv!iR>X{#!ZTn5Zabo>{DY(t|GQ)n+?!-5H_#>=qa5W%Gj*kZ6CMjVSF2Q280y#UwM zsOYz?2Ee?D*e{gupT^xfbF-`-sxp_M@uLI)&xWka#?SJfBzxo)%9txouVmxC$msg5 zV?tv=H{M!jgkIV)Ux!DQS5aQ+5}JrR%7Okq#uu1_%_8S{%r?|hECtUCkC4wRRP`QIFGNZU7K)18wT8?V^N0zuMsOAK4Kz;io*k;-2NeU}M{$oFHChc9c$K?Wy zGB=x0)5|Qq=_fZVMkZAUOL8i?W#kOnA3Q0SS?=m7I0j5|>_sMxEvixei%;0;6V#$( zn4WT^{>0R1BEA#{CQ-ONQL8MFnK$7%0voS%VPl3|`Z{D7JPb`P%Yw-_7S>y+Y@l19 zB!``KVOKneH`sIACTOpbDWS2R5BTLzqMlP7< z*jSe2Qtb(A48V1CH^|NfTo&CYIUm))sNz{JGo9a)NdvDXd2;rvKMCweAlre38g@i& zmIZA69@)_cr7l9uFC6&*5>f?MV-09n;Z7zk7akM?!cr$7(2?Crub9MpdVL@~XxA!8 z&+f=bx3t>md*Ab(994;`nI9Y3G7TdIs|M=iieqY${&UnX^gOpee-KUBg*(~ka6W-* z#GgBc>L;T{XW2AEdJxl(>LZ{C-;4!*C=TR5kfc85wLaA{%9>Yw4<>o%4;PtMkpraM zs>z#Gz?dm*I;)G>6%g=d@-c_n;gGs}%lEpWyanwe7~``^mq+?Td^EmwOuJ8k;2gT{I9 zT-U90^JclgXs$?u4&hDu!FUtM;HLHBtpMQau$L)RVz`8SViu~JDzIqEbGid;3E*mp zI6>fQIauWGqADK>`w30`2?M6(f{Y&r9CIV}RgA-5Qd!%J%f64`FAszmS+p}a-s=v& z#~o76?8DL`_w3kuXvE93_@_X7KTk#@I+kLbvS4}%q?fpbT{fId1UVT*Lg>^4ut29e zqHcdpMZbU3_u1DV)?C8(=pJkPtcvwqN6c`4%Y$MUM+=Pwei=6++t9w3sRm*o4aJyL zrF)P~2QnSth=Vi~j~0Z1aAPneYeDe^+|-MaKB!(-CZtXzf2y2-50W?o;c>f`q{4Qp zn0p)^{I21p7q>cjokrX(o0ABd&~&z{R(FHqjo^w}lVv9Y=taj!WFw{+w1KC-&G(eu zg9m8}nJG6Xq;~JQ()I&9bj}kuGwg(cvKBGn9mZd14t=JV)eO75zLy-xt_?j7eJs(> zU1n@ASZ}fEdTtzH`cWvH!2Cu=?f$K7Dtv*I8r>tb`Qw@g(3OXfezZRPS!1Z!d4NYK za)>Vg?IMk`pt7o)pAA5$2m{t&J$4UudVTB5jMHw;#Avw;UfYi}TW=lS6i^s$HBvb9 z#-A%;+aE({Qx!e8WhSC}4UbTbfgTb;FNERaZiWiM@Nqu)xVXy+zxW?P*RM-c=fE@c z3V!=R;YEUX|83-#w?`g&@n!cbHtJ@CVy`&fJ^wsH-eT07%%Q-EZRxR^f@k^XFi~pQ zG~@4^{tm4E`>Dq2j;&8kyr6~KsRq7lwyZW|Lt&GMdg9fhsGGM5J@!lb6sm2L}|Pm-pWAER4;Xg^z-j;$*?UlbXZ=`!xLv9fBkN=C4L=h%^EZ%Y)4qNurL@3u`a0PK=r~LP zAieEB{bmZW*#Fe#(UW$LMW zo_2xO=$g;uZ-#F^#|lpK1#*2NrPy@!EH(PxHD~VY4sfGCE+t?9t>(iTo^LZxV_?1` z0|~f)6}$4pgo3VFde{fKxTCFaoa#3HsRiQ>BQ6?s=#GR~lB!*>4Diq62fYAMl=wD* zx!??Zl}nAATO5{qa?(4kQ3~#`L#ew98<$Yz3?)enc*>Hb)QLK3`lo|{Q%GQ)fMk_w z-oR-7&X44~-fTLBNpkc;HUl4Wg$hFZbJdfb!x`t_H_AUg8Jdg9F1nAYpzst2L?O`? zKZi?TFEIRWFC+q!Cw8k|1@S>AD$YaaoCO65Ux9@2I)&$BCdl{F;~osAsAr9P?DemF zp%ug&f2B1D@A13&Q~=L#Pr!;>5O|Vd8Y5v>3&d3cB`^7fGjLTj$HgGEPJIRBl$WyV z8OR4o0&QhHzhOJN{%)^mIZHY%SEaSPs;mG5D_eW4jo8`Y3xk*Utw^;xk`>N%q?~gt1vfv>;DS zm=}V!QOJ>P|GGi8ed> zo*J`Q^dv;!U$=K#s#IwB!b^QZnh~vX<-J3J8OZ2vGlBb$fuk`A*!5UrKwER`oPKo& z7J2I}I~V{IMiLi=3r~Cx1QabVH8&OpW&rXE>w(_ccbk`+oZ31jhB=BN!ZJ(cpH(^y z3Q%b6X>2^UQn3U@?lV`N`3*=@%vF>5h7%f ztEae87|1|}#~e3Tz6|iJr#~Gyidb9e+yTb!%d~c@+8e{qemEuAWGxyHq%f9ZmcL-} z7GCsms9ik?e4P25QKc5}LfT{s@EO#-#20Y8ZmCtL@uEZKkscVCzEP*oD#J%;*nJhU z;VeUmsfLn30|9>RiNvh%OipGCTF2l@kG)re_kKwPWSjXp;VO{96IexziL5M0IliOd z+1g%rL>`lFrwFf&$>6K5R*S(b<*}0~U*}<`SaIxRaU$|NsBAh z>ZL*lO8mFOih}e*TpK?E!VV}zc?XI^)47*AczbB6ZiKCKzxr0V^lGV3+`~J2)UhF1 zKv`<|d~s}GrmNmjIvt4%k4)Mi$B1_swAHz=hE!1DGEG-{TWLUSNIss)hmC6k{l2_F zP7Z;pCZfs5d0K@{BCC$UiY2BKaV57T$$sdL?ye4HZR6jx#cz}kz>3e^J4@~Uh}h1P z1jGb0r9j{bBP_r${=Wd-ff0hbDh}LQt{Q z&aJY>HH!En?X)(*63d|tMyJ9HReX3^%$Yg9z3V7YI44A>2{YkhRQRSH%Hh`K zF$e{2ECNaO;R{?~Pk=Lu%AE%5qX4l!p50A?iFiskG1#|pGqv{(*|dtsezM@N8K{zbqXS+)Gt7FhSpuklgoow_*9TSw*$gtXLP;o2OJDB{8kM- zx7TgnLso-YAINr!N5A+i1|}{w@CF9qalyt{4`o5?)fQ2K7o%#}&QP*~=p)C`oU=-@ z89wEoDgT%1`{aE;^E$RtS*j>219^R=w9+8!rN|F*3r202cTE?i|k^ z`3(vmG~~KFWF6EvOGd}=>Xjvq3*K?FEY``PDf4WI1dD^8k?=iSM(ae7W|}6@(ArS% z_k9p4`zy}IVBy3f7S0xj=>9g}G^7j(IWSD#5ZnH$1t7{=C+E-sGxP)@(AP0PNx{Yt zW7ZX)yS>Xu044LTuYBwXLIahK7H2b^PU}V=vu)V%5*oV>ZcfK=CM}lWnUd^t8~n!s*&o2Bm`uV{_+p%8K50icT|@f zCa||SkEFM}<{8n+BTTIjIzdx$W7++m!H7~L|B3$C0e=N=)iI(k3{BpOgKl7;*5U|= z;=&D+oEFsEguur(!}KwTwV+k_=N&5Uzzw}+5+DQ%_6At6awh{!z=HjZSg@~B<7wsh z9AAR^r;Fuw>t^v4SdF({4s#nc@;4BvKjF@1`%^@)faq3lkT=Bx$wPu2(vWfsp11#g z?=T9~_KC;SS29Vc-BkpZ9mu`Z@Lnj%Z+z{2h}pvoEU-Ow*lcRQTZK<6KC~?UH+X79UBwqwfo}#OX~c7?McM;h5c!6io;LY>OozITU<*QJyQ8_{95qG z_5fzswQ8gxBe=yd9Im(S9w>((N=-+zu)QN2ZK!)aELdFcdOrO9` z(emVwdwc58b!u)TpU=HSu{JKUg$5Z7gl!1U-T~FWI zfw$bLSkH2Rb1Yo+aEXrxi5E|iCoYO=B$$H<#wqeZJ|j}E4xvt#?2+U(tg~#|cRAdz zjK01slVV|FA(=WMqBD9PtF&yS#Db)NhqCeo>X9-_3Pa1SSXiU1Y8P1`x^yw)UXDD0Yj-76k`Q%G(07{764>M(h{DW20pb+ z3xBUHpr9Nf4kPb>IE<`gFFXzp9=YD@%iCNn7qMSC&{#KN42-i-aBLttXXqgFT+abFrA=BCLI_*I_RgGi`qf#(5I>kj7N!I>hzL%_D*rW>IoGb5MGz06P`y7_e84fs){*j^wy6FdS7r-?5O>PP*eL`OKbXOC*eYMEtTE9{#mx}_i8 ziuf9LZOTShzhpl%)@{VFp}Djntz*n1C$`^z2)p;yJ?xb0=zzOzS9@t8c4V5pVE!2v zd8ZA1Zg8}P^Oi0;{9uXRkDz3B19`mL{OTg@3ny69T;%w?2#T5HX77m!a9Nj^nDLfJ z&GE*M7$f%USlYKDMA(Ws7C*-F6j}43Ep#7P-`iLkkoz1Ry2_r;jPAMK^P?6Ci6PRf z2Q)xR@Rb8rAE5qI>Os-q#4;?<${m3K+(!f;#KcH|=%sAc%!tALSEtS-dlcQ;i$mYq zYjZ0ky-xG)T5mu;-)+m15aUO&6-Sj$W_Ngo&X#1%8TS#q?ko4N6k3t>0pfpdn?m*$ z?4P$Ts=AzTPNV0vHBjPPjx!KD5<(BeZ+UG2AB8;)YB6Ti&lGs<9cBm^cJ8y8CJDPT zuPyxebke=R&U)#nUnSNWQY&v2ID2^}HeYo@^Fat9U+poN2`da?N-F1S?h+st3*Xm4 zdmuX=O|JL!!NQprTm<#Op-4aGM+r{CJ$g`?8V!<$XG9YSQMOf+pmtN;cBURt98ID2 zvZjyRO<%X&kK^62o(jU34auNC3g0*2QewtdV<0Rmzsr5bF9awdwL5{$7F_i&oGQg! zw_w#UDeuxoNg${8o82FoKtd@~l8%6@-UMk39XY)q2=Tup@!LHSZxZi*cu*Zew}{%? zuX@OPcTwCR$TC-du+qUy>zjdhNaMm0y%I&AA%U7f2J<7^zA1*M65^4DbfWu>X8C3o zMsS7iPo2Q`2TPwg`E63>OV|Ys7YR3=4?OKDtUv~+0pI{)sojQq!ERKhwjg^X@=?oZ z%00@)AZ(ux-ScQ~XRGO9QK{w55u;+bX#c4`sW<&?d(PE_7>d*uwhiy82^oR46p|%% zlOYCp!D6v_|} zJNq=;8%(0G69H~-x1?bJNqiWclC+1w;DLch9$LG`{KBZ!fmG?jk!+F^(5oZC+wW(X zGDHie(h>q^?qJ^lN6ml8v+I=>uzJBc2J-V);iUJDi`(A=iPLy5%FO5noYe31sSe0O zB!Lym_J;$SflIRcSdmMC=et^~YR8Q@Za3wUs@hL6Z^9WAdGJcCTlF(YFq7z%=F9z6 zCd}|qP2f`nuzgq$1s{seR&7DG08V%h&wif{SVD$UeU~H*$T*C90~k&X&Lst}j0MpW z2Bi$V+O4`6ONg|N>Qiy0k62Hns7j39^KM4t7#s|m@kFfU@X~N#t0gGe5}PGwp7Qbo z;fVw+&alE!5YD1SsK$ueOe!0wMhl-TFc7pLaREl600>V9piN1}G!zKW7|(dTTAOsX zVol)~>pb^wz8#s(Dz%U!G1YZ6zlX>#T_^NC{H4L?i)6iKb|_#5EjGT6!UM;LvB#!9aE2Q0vsoyDU$;S zqzaMLOW`LVB%jbL)_@y?=Yi8GcT+ce!On)`GxzUpFIc_84Soobz}_r_=A zvdrs4!)LRl-%UDlWR7o&;ae+Zmd_*RmEcuUI*5qMe4XqmNdgrvnLJaE17S>}Yvm3( z5ZRGOB0IRC!AVYW>H&Lkf?5^01oo&Sid63_5@0+jBEU9RSUdW_(xS$-IRC<}!wEB< zkc>jD=k~)`Y!NVo8T|@U$*k* zCr4c+oP4Ho>ZCt|lm_tAa#vSAHX=DLQpTLs1|lewkZ7QR5XBAW`(`@8+VKc$!+B8P zaIjs0uGeE2MSyNK4AbiFAXP1Z2Gar9AXe~a2_O%S2=6T$j#oV(2yd;LT&i3*aXRul zzuEPMtEg03cKfwkmk#^ON^+S#rIzPy4P>yBZ9`GKFRUP;A1s?abcRzpZ}w3dz(#5f zrP~|8D0^3wKD!Oh*E*Gi3mD)1;P~lW=XecDK>*X_<12GyxQu+faLqf@i;up(b%N0d zJ|+StA51s9w@f&Ka}0}S+4WK{I9d$mOE{se8CSjOwx zmy3H9iey3=v|*HoUXMf7N@-DZAjK#QKC?nbjnzQzb=CMd*6Cu%boxGa?o*E+eiC1# zS)&^~>(uPEk^_Of#NxnPXZ*5`8H6PXau&0m2Ej=w<;biYQIipns!RySF$Mo*ACA8#+mT5r(&oU&o5fq3tKnW(1>RG)NBu$XNTcG)NGw+Z4s5w7H{PT16?7x%oN{$&tq zxNKt4m6_wtQ-Rv_+^!p8stUHjdbUlZ1AuZ=-{kO?Z~jCPl?M+W@y3sX!Q$&KrP$RM z)cizWVQwdpq<1IfD1$$j#7k4m2zMd>&v&5?nl_78q6&;yEyReWZ?`>jGrAr+{Br=s zzZ51E2m#VYj?F|ZDK4eUd?K&wrWMo%9Av{>125Ty$2PmK$a!70g@jCkdA$Y|pMu8s zeXt?mv@4pm6Hpq{mOD3u1<_B!C_h$!a@JaP5v|PKm}-J#`{S$Z8J&{HE*v zddqRf&yP9&AwOaJ9A5Ms!9{rjpf04I!4TNJ(fO;H3q;lx=OsjsgVeeM(jUWH^#V$U z6rPZ88A0qAcLnCkR)3>G>a+oH2Zg5bZUf{z7Dh1qmEcv1bnr#5L7At&LN|XYN}-b% zebc23(HJjo5L)sLOuf>WD8jDisx~{HVDiBTR0L?;%>jhxy6f;_8UR?zr^+)gF3w|S zy9fg3FCiS{=glOL=5#?UZlLI`5JAfUG(e5&k4|&}n4J-zK(dij{f`}@y#G^3>0kR2 zWkGV|_o5c)P)%gp@NO$TvK)@2<|h{cn?>(#D&Xc61yTxd7GGC;mL~@3RFFRZ{ErtT za9c9xWp=$p-=ko5d?|pMw3d8{vCJ(%X50-WAr%I-03bH%&?~A`?w+ZS|wQ)>wT4+o}lwF=(tZmw8D$&me#2wWPTiU<}m zz4JeXyng+=fJ;E7=dvh?y~1#B!|d$MR>t@t9}2V?)Q)vzT>-oi3jX^Eu2ul4JW%7h z6=uL z^Rb?A+iHTrzW?^}2>q(zygyYTB+_7%LkS?dHhps6v*zP+T>sKEP-rY$X0V8XMR^B? zyagDfn}GxIZwV$v1td0$Z=3?{za^VDd?XVcguDHb*d0G1&f=5#W0*Tjh;4)I&xUoFkt8i`o227jMPGzE%dY%s|YKS4$ z>K@;?Luh}7GVLe7V&Ru4n08bQw$>-%qka3{_((Qg6E@w_Vi>S8cA9_k*b)Garyd*v zh~wB2fWNZF0^Co3rfLho_L&06vR$4HRC^5!vI_sG1n|aTi@{uL3hUyR7aok+mLBdd zY3fWsMc8tms$xmMhHl42=SiN7MmyDd7Ci-fR z-aB~iZ!ucF+0Mhc;Cy@HyaW3q7{;&(1Fp-LB6+PxhImJ<3}FtG<3t%N%T8^craJG3 z(iz>Y?e(b@C?78ICuXc%v#mUPefouj70fluDjo%J+MntoO)(zLH+J9Kx^&n?-T2Ex zNy4vtwQF-+jG7PLS?Ovy+OtJ1Wl!2d6fzei(PF^*BP10qN+tnm`^5FsAz=XN3=b^p+0jSPsLL-vxNM4wnxT?t2~ddXXFkXaw0v z_KGsNmGw(`b*mwVAmKVjxakEu1?DIt^IJ6lS<2QG@VZ!*2LP!J4b!PhVMJo&!=QUN zZM#!t$wm!>ua6OYMXXQj?j%Vkq{tAoXxv8Bt~k$~`eTvxmGeo@tUx&jku$HzczK4T z13Y_Xm48A~l2H$UzQu3&JbpB#u(9Zyhg41;OlI)!!2Iy#@dpzn@W1iHjXV$ap^NlY z>{ZL0OG5?8&#sPdi;C6f)x)FSIXc{`8^<>#4HtIX9XfCN>gC4gM}~|Gb2`N+-B0D=@;0~3p#VBBn_p)o6r$xRGA&((~~ zxgPa6I*?cq38#G_KM9ZLWKbWTqV`3#NSG(|<^zArfd#m}6{5(P3b%H)vhrzDlk?YI ziV;hEHNNzdi>1(FM)K`KsRu$!447^*nqQ>(sOGiwQFGwiIX#ePy%_$&8s?-5`Gkm9 zW{N#fg&9>%+E~^|>88eF=_uMV(!gEd_%l%^)U8<$m~oqnc0-#vWteEpbItT?8kDqL zbp6mlIArlAXBh~Gy;n-aHhmatx4P}s-K_2FGhwP$-=?$j}hPth=D@@oonP$=MHA+?K%hAdNHgEYWZ64pU$KM ztIqVytlvhtf0}c&5{bX6Y)vufULnPBA$V!Fb#Jw*(@|rB^~bmbYw!H*91u>In?YAe zm_}PSPoPHVw}AMqjjZ{f55Htm3ARUg^j$&l86M;eRX?=f(qkQEx$P1!xVK!C14ghD z%wvuy$PFOtWX|@C-*T&q7pQO{G8uiB6>ItSw&{sr2m=d)LGxXC3IgAR0rddAwG1T9 zJHGR9`lWOw)qYzfVnKssV&CfAJ*r&FT{_I>AVc~X_6pNeWowddWD=$6MBL;uXeT>J z$fb9O^184~={+pC^SLv~6b0>J9dR|j^G0Vo&h}U2(LZdTP)l%DxomEJsbh5@ZhEFJ zoAtaaJWAD2dv(Di;EUSgsIuWK(;KPh5f#L=rcf#R5Kz^&5e)VOrwcfPtkj$34Xcc7!> zPA->s3xr##fFpM@*2zJNN{SXeST$?7Bnx-#Vqoz z7LRzDn3**_{ZQjyb5IGwytBtB&or6dtAuVza4CE0OHitN1HWa6cKX)(_!hCo%2>yYkV! zNw2)5&BtKMIudYWkjFB+z(;qzf%RWv^9T@=oxZg)M((_x*-)RD_;H+_bAZRH zbgB8a#x;Fs43V`x_lZIK4TcY;Pqq05A6I-lby515*CQ}^XOo*P!38D3=%DKvx7Gf;zM7o9+xt?~QT9fo7m`Eh%Qu_JqXi2U$2QsG}?VLo1*SF4Oh>8{| z1cRrvWoC?Xi>)fvxKN!$cK1t8lAEeydieushtkxPAJ;g#lSP(3EFl1%_eHLgiyC}J!71L6}hRx-T*rjajRoh>e%=uqjGFxjo zjQ-?1-Y-jSZ0T1!w7||!@1yUsKwm}`Rc7kFS>LPgtl!O<9%GwGud;F6OA~bMQFO$E zF^CI{ht!eMM~izUs9P%ivv1@$_BfoD6G|Xr*4)W zpO>v#Wzwwp>_cHy)WK`d)l}jUvf0~fry4CO8)6})I%}nMK$usRr@a`d%8!fs6zO_E zxY0iFn5_B5&6#RYrj z!8rqx+vXDcnAKEe55^rek-iMpWzVwoN3*w1xEo%IjEFC_U5S*9Y+)t->Wbdmd5#zc zrHEmW42A(0v9FF;7L1wH7K+;$zhocIB(k3!GSNw zD#kt z{~oKBu9EJ)Ow}BSqo!S7Qr~YD&n?|GM}&^U!)i{9y1CN$&Zyh8#3nz@Z^2fNYxd@& z-$oaVHuVRYKV_+m23+I#(Iwa zSs398?0>;7^=P|AWEm!TGr47MO*zh<5?WDCuR-o0-hJ1+%pt#aa$ee!KCPJQO~lRq zy1d%mMK9N%5BN!icSKVQC*~}hPBzK`EWgqBFKNf?mfFk9;upbvuto-hbLsLllq412 z|NO3pN*uBOdN02Cbg?n!b53-|Cpq+*)YA`D*){y%B6j1h+ABk(K>gkR*QfV}ub^ukJh5n(X<52T1Rn zSr;`{qH&gEa(*qauB-t9SiiRG7msdH?X=F2zvWR-5XNbWdXXq>jDQfaHem$W#d zRwvI?PzeJth1MI1$K{=NgVHHB!p79IEnfXNM}H2Z4wMcU_ZwIKi?>~CuVNVpZWUTB zH+*XSzFMenZ(Ud97L{Y4@@kNLM^JBMAgK9|xz*op@l}bpM=ZAcZh0q`_2rplE% zFae_;Ykd55v;pSUuqjp9HG&gfS5APEnKKE@nx|9`F@Z5)jvn#X9v14xY{fnJWNT0j z2K<9jfVP+QIJZ?>y|vJr?jSQ^<)(buc`w)GkSU3R#DT9kDEWMT16vQ18#5wad2IA+>Qxncq>|Cb zy7RYD_H$p1VKq zne#(at6uKQQg4ro)L$pYt6(}PMkH+Iwb!!sYZWVVTnuf9IXE~^cVs($GgI9}tr*|W zBq6tEbEMRH{azU=EY~oMvTqATe|+P7vbvetes!LvBzV+2nXZTf5|QbiuJo>Nlt%K6 z)xus_t>(fWsDyO+SPenLepw~cRqxy-t#R%*M@!|y=+c}3`p(SSUzWNKn3Dg-QZE;E zG|6y>XLK4ij;!Ey;ZoZ$rFSd7{BkvIBfy=cFL)#-F8#b{3{DEi9IlBp@KYClo0mbjFGhI)oAos0c_PM5zJ- zcWvi-v&x3p|T^Us`2e7a^XU#Iq5 z!<1Qom_@GezXGuGPo88)11u3wWU?M!c{kpX8Z@8+EQ z(XwUTJ!h0xC8}`JBu(jE#V5vQbl|U+$5_946>t=BlpD@8`&SxyG!EC8@#P#$d|lnx zgG5QT1yc7DjNhS#m*rWF&eeZrS+fsE<`x0;zS_fWGhg4VsSUYdsn!}IBE;`8FSNk; zGi<^4GO?~X5d@Q>PYdXwY2f0Jv*@s^G$>DQa&(hjwlYGcG+b`VJPcve`oH3w&ItL%}pK$jJ@QDpjeq! zdn|@ny#zCk({GXjH#AEeWYNATguSZF)erD3X4s{E1 zqQ)xEq-T6+Q%lwPC(LKGhrDI;WKnO?FI$w<@3lknOMBzwD(!m zMEW{cZVbD0ZnbKDN@_&79;4j*$igW$UbNk*DIDL(lWK`y z*7yl`3U$Z4$-x(Rt~~{lL>N^s>1-{z{XQFMhY|u>8zvhiW?#q6_%$5;4$9O&k-cJP zGw;G1fj8Uj;wb^K*c_aO5+ACfC>uYkM3p{Zu40JWeUWkQ%t^>_7!uQfsFkA9rsDH# zKTj#=2)n?5U^{{1Hg{rkhyslsQmXruZxHF)NFNUGvv6QNx56bCsv$ z>X@cF;?}-e3rs(~vz^2;mv(aYjO(1YYdN2DTXO6r(HD?m^g)~yPl~!!ELmSxy0hLB z`}H>{fFMDVXOYigXcQ4kOid5;Xe95tLpegk8dd-hlBTuau){}^oGDySj!2n~nVe2+ zlQ3~WAt8%6{T_K}#A$SUn!ovIo7LP1MPC3m@ zJ-aYE&4Nwz@?%CVz1gNrBMn2>EUU`F`$wv-cxQ`u`vc4ndExLH}l>fus-Upqd+EH2S?keJnuxIU!&~u z@?^e~+etK4SN^%yWr}&rf*Q4-L5A~^uT@|O&Bw5>-C7%TJSrvKPl$P!$Ysn z>~(j&gmNs>d47+=4x1isadLFkc{|RiGY>pRodo}$*cv}F=7c&cV`ivD#HlFf0Ux1O zk%FSb4ql04-0db|45>D%>~irs#6>jDU)ZR0Jw!>eOh83&za z2Rz+qHT@fSO;xq9!(q0P7&?@`vTt`PtD8n@QO`JVE4uEShRHN6IIP}zE$%SxD|%|G z*Wy#GQ^DQXH*qA9!!FeeUX=5I(pq2!hY6Ci{w-&Bm7;X1M;u~E%0lW85SP932TUy8 z)|;$oQQX97T5z>sF8zA;HTW=V%$Sl$tjYx-QlSbrRropZ-8Z58wT1xCy0K5FGm> zf@7aUsNXx#4uVHvj)9Jq&-zfKPj+U}3OMMiUa%6m9=2`m| z?z!>2v}@F+d#uj9gn2zHDLXRv4o*1!_7Bg+x!&6(Ih;E)S)W|K=vn3X)*c|V3*tL% z7ViwmjTKC3X|w~rUCa0-qO?74#@yBL6*PE{(8mZcBb)}8ZQCa;_3XN;Cr7W}h-5jW zvka}G&E=8SO%m>d^;hSqBl1r7C5uHE8NL46|Mj%4vW()Sf`=k^{R_$F|F5GVVe)W9 z{>*&i$i!u+-HxR<)+e)T=CqTO-7!5(-U+-?;TQrHj5*oe;c3%MXZpt|XHa0hF!6&8 zOmVg%1nL4ZxCpZ`BkH35y(9mEuzP<(*tzdQ`c}Kg9aDsMHv(coet-or-e?ne0>Pav z^wl(WS)>lDe?hAFQyIy^DN+g~lrl1=y6r(CBz!#}%~E|YB%E@4kJ}ypFrFd=E%Fb; z+HDq)t=}sDWiLhjAQB;`YsWDgPou6C?IKqBIMzBgBz8P(k*_Aat}nisNzb`Sin`hI zaA59OB8-hm-`z*I!pMo)4@)w95|8)|1WDJ9mWLZ?_A;Lm@WDpc4e!z+W@?7`ZI|~Q zm~vH*dM?{_ajjfAnB;uU3MGF}sZbZ$W_?^t7BQMswp&$>mT999weZ$rw#rxQk`Zr) zUzJ=+1vrSqxt`m=1=H(zBNOTmeWG_MdjIe4HK=XxxTQ6VjVaZ%D zo}a{Zt1Xxe*<-&6Y%0rFqneSvNTowHCGGZ1Px1Ixs3i^6e<=OKw6%7QMsq8F|DACy zoqZzYfkHLnaT(t}vYJFWokx-c+B{P7tDZReTIGzVhO^Z2PF3WM4C3%QEp`OMu3Cwo zN3gq51l;?)x~*KjFUf}mqx91GLePVaaU<9bM@$M*UlJ-?@#}Ww%>?$EflWkvDWwVB z{-ZYW+-FEZU2Rz_^iwVoz&&?BJnt8xr0b@p5;$`E_quzL`|vXiZ;Sn!cU$h=qtwUo zPypDCYlv6ssnn*9A#yhzP)dJ_12A+W;+v;ozF@}7!^7*p0y5HTO2!eUPQ-j9c3-`h z?{t>xJFGnfBixMY2Fa&21X12%Vo!d(;HDKJrp;G4w-oDIHOx~@&nPgXxM=VT&GG03 zS1-;{7rv*W=mmTzQ_ubjXA`yu_BWCYhAOe1jt+{FBx3g`K0eo37lvZeZy?FzYJMD} zBF3!Y;#xDi;frGH7RfT-U(H&$Hki7Z`fs!o54^n3{hS;jk0!JE)+PzVXgCv2tqEi~PX@OFC`=3_~OH-;FxXah*0B84Ur3nIVF!j4J4f}|Q<|w` zFp|ZE{mwkEbM)6YA>k==pR5Amraed0$JYx7Gy}dTyfUf!E?VMgzk**9n9AG$p4hFNkyDp4uP1WlRU{pWzo`X`rhFXtL@ zque4GVcHJLUb<<$VlNQi9AqISzX-S5@6}5Sc{zoR^3#BgrN%v8T**DW3-SpunIBW7mV1*&Ho>(|4)p-n zms!?T9TcPhlN+fX-k{bwJ50&eUoZZY-{|j|G~jF-fUM`r2^m^ zbVJ1(3-sW;@v8_Lj$qEt5VI5mHH}=C*ME2Um%+Ab*#%AA3&)aIl8CSE@EJ~v8qF?j zbPEccY*9yMukqC(B7`v8+8UuQP@4jwDq#q-bPu|3*yBH%KMj)(=`Yp`J9S!kTM#ND z-u2o%xp01|`or~2qfkxEZXNOAS@D>!sVYL@`K|Rcd(?{8Kkx)V?3>^q+IOVt`~D&2 zI10ndY}iSIHIs!`k-8t5i-+;i=L?T#Xvg6YCKr@$y0Ed%SYTk0j$R^}JOu)HXq+E2 zYphzprQ`)mybJ^*DS7rVk6Vl63rjHyMg4r}6nKwqh_NL*b{2bfT67}J3k8Jt&{s%+ zNT#>wNS37v3`gr60*+aUti$ep?KpW`JOkKA4m%EMdla5uzjcrO0rfBs{13SEQHbCR zyjb*7lT`X9vJ0auttQjS)l~8$DJ=jQK3)#&Kcvp4C;8#?zqkOhUZY*Doj8XN5bJj? zD48YuLt$kaDr9sREH_G*^&T^)$T>zGwlHsQ<2urj}KQ%F5A7Z zkBJ8pIX>SO4z!14psEta!k@63_`s7`f<#iktBblycu+5a ziw%FP6)BMqvTUua;5k4{O@Iex-WTz1@}8wXkftIQEvSb`Y(U?xE~VRKFtd#E;+3Gl zbU4ZX{neUo;DK59I2DF!wfdd)&%kkGAWtD&nYtI2ky^-8CZ?HMXR2{|ca~HBo1N+T zt>-WQMd(0v5_X=N>v?;S^I2wZA7NCb)Mcm$0);?r&omK2m=e^n4M~QQ0#exX4#{k| z%K`)K6K_xwo)VG=-XqAcq9k7cRG3PYj4{&U?n?_ZM{=~JOuQizp7CCohg0i{fbvsc zT3(?x^iW*cLJGsFPtHpz5F*eDXdRI6G@mC(VAklJz5A~Jp-R={cZBL!K2}CWot!Fz znoqWLOQzB#a_X46F#fYp5NHY_)-Wxv;k~sXOYisukPh<^Y?9m$-*c5U2V0rp2zaXn z-F3mDmI325>Apy5`*3uONiiKKE=M(FP4Q&?Gn6N_-Px`tI2fW%SvoT4tq4-w_2syJuH#%{x*fB`wM;Ir3(n)#L36(!G!|84EP3gfNdzzLfhhq}<5G{iRtpw)2S7wnp%aSx3?=nj{3$?(Ye&VBd9Mue zyz0%bt_|iU65!9JL zZ8|&^mcl`#BlRsr^zqr$_ZSO#ht`9X1Y*<`nsTaXx_1J8`sx%KU9q4|74Fm0_G7hQ zt&2iHkfMsbI`9|{W-g_+!v+-#M&yjFFoKEnM0>1;xRqpicJfV6iVNe}6heB!E)wm% zaP+SC}Mdaz(UApz|GQUdznVUXm)d;5qTkNDd{w=TN&= z70$H<8a3!hhJCym=3!=j)z!R-6V~TLp(|gHY&`VrqUmwtyQZumBHjS3ejNk4h~BF> zI9Q=XN&3=em_kEL-645u^&&iDcMVOHFyZE8-LaZI)<}Zx*aM}Ua2b>AN*jbuI}=`y z3LR0V&#<+v-sJo)ejRibTX!=j$|D(x%`NK5~hH<)d)GBdt8C?5w7?@LT>qmIk&QlaE zrK>VODn*HK^}H9E2zJzbSPMV}Tf{ahRPm$_P~qGRPg`Kjif-nF$6`b+UlxcpO~p?< z4EphE3~;8_C=nAyU`JAAU$y&(M?EzxFOn!QDzeF=7&#T+bb+o4Mt$G7)?O6=$dG=E z@>ll0eTaWV`m=zkTx{Qx%=D;{#Al-({cmq(wd4iT!f9>Q-rVmYC+=s6Hxsz7r?hgNXAY$i1Jv zZygyRX&0|-&B1H~l(D#};fX>#zY0sIC-LMBv8lL2`<6Wg#6BH@v-g`LZsqKtah|8j zc)wwNfVPg4+%8HkkxbH{kq=pp~V^Vac0Q-z+ z4h|L&@!JIDYz~S9JPBu@NJY(iONInM@uNiL;V;Kt%D%tyis^NGXl0PN;S6B*I7C@* zrSX{*z4S>U-fT`YTQIIX$o%^8RSw{VW8e714NFwO=k<9_ciZ(KlgAg8q)HW_F9I0j z)}H0BCjQcWv>(v`I(6fu!E)<>w3KNsZV{AkS4y=>ikxo9u&-``fTT1^8|dJ`kcyf* zis)SX2jh0r>yvMO1eQ(?K)lnyJhj8;M7~}C`Xj?Kk-kIPtQ7E2X9&byX3beQh;9(2 z_JG}Xj&&}McCc!_cMm?j*gT(N^E^@{5Q5x-svjWIE2X4!R)dKIf(yR0;{z_mtWR(5 zvnnPU3&Gi^)sF~6JC&RiMhKLVFj+m&HOHRL!sv|~YuLCxs8}!-hE~Vc?l%JhY0-IP z9PM&+Uw}5&5{5o3vltwpmm>31u6KD5H@>}jyeMX>3k0H(W{ZgvH~m8+(`h_pG0kkC z`+F0t7m!MNce3WBL%RK7K~?!^!Tk$y@-)HIg%*VbXvgRnt6mC}GeB=_g-A8RHzsll zvmaBaAk*&&fwTKVyT(8yKPhZvw)dtZ6#-`mid=jdKre_A@`r|q0^ms1ZdLw%5kiiU zf?`&Btcx3Uqho@;AXV!Zop{A=FNSAltCx@S_}1iuBLF?y2{=6u))MhQOBG7+A1fWp zi}^;1t`>uM?y9qS$(1C*E5EOXe%KFCsaq63nbRryBH%;t`az{!P;6M?6B0{+t9^fj z+Ol$s^sO;-CKDVw?5pPQV`Wu0Dx-Fg9}=gn8Svd&JMP2O;IMg$s6l!cq&Dp7{ZrU{ z?AQUs7DbG0H?4A4`SJCJLOK?YtJX)kkRgoEGs&4NU#x)LO9!^U{@ges0=zqZ(@u#i z{$XO5MkI4c9BGmA9o3>5S!bThwHdB|=VWHCDU?lx=0Q2`Q$M4o#pGR~#0hT8@G(^jh+GyW6fy<4~Lp=u^kc zmxrZQ+3T1t#6GL+E~wJkxpk$v+N+BQHF6#rxVCK5K=%bm4aVvhkMt15hD9WwJp8?-*G6I$A5SDH- zTEi$$M3gk(0W5bC&*K=;7!&DDMuoD3db9)d8$fDXFUeiu)O~!$RWsevy+I}&Z(f;< zx+OD$Nh>HudX^$el%REC6ySPsd?il-MBo=3mS~m@YP8L0l>0yuM?N-OOmu{Bnp>$| zx?i>@FyD`H_fWh&RBXL;^7K+}k)3-wP&Z{Z8K?P947y}}sFM&sGq`e7AOiqE5&oyR zPI1n8_}U@ zVk|t&bj%w%YOK=gh(#APOd9TCYK!0JPaDy)TXsufOBSp#osdR4L>C&tB=~QwpNr{f zvJH?Qqe=;*hpoUhfQ7WUZ0O&y2!sKbC9{Su+IX$HkZ-CMQGbQyTg{OSz05N7{?j9W zdHvu1yBC4J_kA*ep>!*q!C(J-#teK$QO)g+zj(xd`zug%2O0C%88G>GS*-Ra6!PCc z-6@9Zi2XzEod47sy!=mtw?S9rtvfojzh2W{zk8cA+)Rs*uqn&{{rlhD2V$06wkN>k z;Qzjy|M=5hI^0Z(l5!E~+5Y|QoC3g~f4?&3FRu2lmv~LJ2yRBrKfoU5(Ei(-D=zyc zV%*OJz0}ck#!M*KU z7R*Tg`{ns(L;n3z{<9(f_AvajA(x-8J0(aLniD9LxaU*=f}IUI8QWctft>A%W0)C+ zw3ym|GhhC;G4>W z14NJ&L67E>hLE{)DaeDyfPp~GgWc9h_}s*5PP)N@t~W1$P)%VBjv&rTi?S?0 z`iy}WFCGgsZXj=cSLVgSLG1q!iRJ+R%Hgt70dx@Q_jR89(lQMYWf$nMWCPj_@*+nR z7Qgp9$9Z;qQ&EL!FU#-YtElQJ+M&Hi)K}bZ_`&BkwLBvoIk9BdzFxIZenM(4U(OK% z3Vok73;x^;a#`obXD9fkb?#zN=go?pO6%NjZ570wzO^~)E7_S|1mqt7dbqukI(N{* z8D$0nvLF_)fE2Hh)>;|+=8J@(3V?&W>O?cTV7yB~RTV(E0QOM2UCLR8Mfv@|uQ=xa zm&Sk5?Z2o5RL4_%$SQT@<1JTS$I5l zhDL4|*^!c~{iBEu#*ykDt+W%DU*E~z$RLJpZCaTJ|EbTg?7;-T-e52L$u`OY?v($4 z>CZbwIuN!1a|r1l*HH#WCUi@aicF=>A-T{D8wtl_eY2C({0KHks&b+59O0K7XgG=P z6i>?fToymi4qEC7J2CjQwFY?NgW=EpMjuEuUa9RGAAla;D|hvNvgOJ=hV|zng4eDu zOC@0&fY#tf=q?1MjY7Z!+ai2un`wag7V;l>X|N&;2!08{fn@d}^_9noYya0JvN!vr ze243vnmo;c2tx<7R5|XbsBDORvIVZVcEbtboo$x{Zi`5VM})uJ94C;4dUGcA#^Sl0 zb3{Hp`QI?79_+8>ccK?ND0kLZDwWSG_Ka1QM`p~(Ob948E#SxI0~s^ynWiCci$3U4 zegjj#KJM#+N0SYEtRwmCCIJ}QgmnCRH7U(}uOiSL-9RGXO=H&f=X2(9w*Us7$$fS6 zCI^(0qCEjRfs<=)A9^b1R>m>X7K@$hO#t9vD!-6f zyje5F4Ri%Q&AYqwR&+!2?q`2roX!PKCq(fGDrRRYf#6j(Gd0o~yJyO5+!3PtgcLxv z-*nWW_r*`M&=i{@{pRdzXp5)(Mgr&})hQpJ^wiYvRVi?sr&Og)v#7@G2TY)je8uZw zAcu%f%gC7T#x81*%MU`Xsu@5+_-~FxfL(&LvtM*7?>Rj6_A_WmJgL4 z&KitIqMxE7O_2D(JV>oa7$cYQtrV!}GxKQGykq5JoLzJk%s%pUyHI+lAu~V_%t=sM z|KwpJQcD99IB^)m*`JSt1|DTEV>?MSHS!&DL_jcJ5pF*FX8j zxpL(+VC4uL)FzOvUG~N$4&E>Z$les&Qg?Fm@CCrUGT%o;UENC`i5L>nCiNU1vu{n3 zJogQKImG@b@?!3!Rf<1(@?^o0^B&hezGp=L=a6NAZ;3b+Hv?ISDJs|HH-BFLH1}|H>YZTST)HqN24? z4oz)PXEg(>hbSBz3&MfgS4WCE_mU+$Og=`HAyN;Q*Ta`#`7IRvCcm`4KVGvkYT-MqnrQkl^~c_2E4Lv6lSun8WozN4FIYVm z5}8(I=_!kQolE>uMVLD;n9jAQ8YG2O((Mz8EfxGr#H0EtrXwJ~Gx{EkZNY^Y=~@+| z%=DvDnRT02d1}X*tu}>Psq@E|A#dal@cD_Q8Vq*Ar)~YT)_L zrlCbjU`p@h(5m9(^U7Qg)cjIook(=C3>jfgqD6AH(h{Y|O~Sa?GF5VhqKQW8`I;XC zn&Or4(ghW0zx0LqnTMs8j4Y-;Mszd0`Sv^RSzd1goj2q1@hx7lp;RYU}j&?5=$_Se@jk&6@3XU`1?r*G`lfQLFs{^h#+aJu(DG_ ztlUiAjcZmZQDj$=m>b%?s89EzaD|m$yk9N^F%!AQo>Zb^aVoPl?Y{H-l9rhU+8rF% z@|)b2$pv$ph`K}1mb-l2bJtX-timqxlFHQh)Xs{B7FGTjrz&j=-Heu5WBlR?v-C(t3KNyZ z8rQthN-VQ$5@K(l^`XF|f0Bb1Mi!7h*36W6WY&GyC3I&#?R0j0gPQ<={L|sayqJ zIKP>6d5;6)Lhvk^u)W?ZcnV0{UyP29?&ajqxvp2{*N2oDpVmL_$KOywAE;SHDkrCI z3#tuADf<~uK~v~#*GDAygof?3Q;awHhxcv>oT_r%Bm2L27^-`3sUE#&WDznk)WmfM z>$GasmZutLPNE+U^TO=~GeMONk;v;Pqb}I)F(f>jS@4R*J;N~D6%Ylu#*pw0PSJ#f&jkfhu zqgQ}9VxUf$N@xvDq}P6)z0UF07J)(kMx4hakVN>N%uY0^%-AKFf>w{i!9t=fHL}Vm zuj~?;+cjI?Sp11p<8QC37Uvw<2LlHPMqF<<2LVoI2<($gD)?VS&nJC*CsOAH*w|tK zFKE0{b?qk4UfnHk-mV-Jkm$xy)R+2Fp7TCb?=0&Rvj859jEyz3|BP6I3xasD5Oc2b zI#a^#RoY-=71XUgGnuBeXj1Mw0Lgnsy9=p)vnZizZ?>huqmoOn){!hL%N&F|6YtAy zK)aT+WCc_L1KRua5;OA2hfEXafU-=7_N0-MlMqRdLKu2SzT>y?bVOQ)o56?0J#4*b z@v$;Fv=?( zJvRPJXsAWW zl}q`}M}G(|lov<~5=~4@WIev^F%4R4j*Gr z46$6F3<7`UppNu|{UX!WqypG$Z(NYh;C!$rvqQEU(c*3H@W4B=3=S!{eZG^m18qUH z70qE3*xt|TF=?u>k77dJyy@+J72u?F0Eg&$!V=)TN*4`(1Du{R=Z`MpEfMp|A1<7pCsf(jSs0lgq74RG(4;VFSYbQ;(rJ2#=p+9xB*&_L!0h?Vywve~|n z|9%f~P-#I(Qv$)>E^r(Q6i|vlSW4Y47#4@e6wl-&II~Mvn zY)aE3YM-M)vC9<%7NYrOF!|*6 zyT>oGo=F=Trm32p%xTQ}{VQ-witp|?hDLC@ z)ks%mxq4*pKv9u&TY`p$hR{2rmhn(?RgRw#kgGlhlX_ba*8UL98ivCC>2LPx9)@th z?OXmYD}w}|U__uuVJj^-i)d9{^-uw`E%TAyKGI7G&YNcy(4H03WflEl3ZtMyF)_to zL%gVG5yHf74m3!y1l5h!Q*wz5(lXPsB5~|b_m9YWHbzo3cVsg6l#M-ju({3HlrXJ; z`7L{UKGz2{*LoT`v#~W10@Oi9RzkqI#tXZR8#fw)=i+|KXGr30Y=~2!=-TBvwde1C zI$SloZ;U{}?conH)riocI1_zSKw;i*QAPMT-lFSX*$_%Cp%{|nR%U~+(E!~=YUaslI z@>RN~dV*sEni^cAzdW8$O)TK3njIAATZ>7`l3&Ls0!bnLh7#v9CcQl{5z$jaC{u3^ zpFWv*{b;BuqY7WXK8wp1`kg-S%Pv#pGd?Tsxr=CKa5AaG9ID{JIh%Cr!#S+Q#GSLo z({>Z{-@ts%V&Fje-HCbn)E=QzLM7PO&Ke@n5~xmDQLgr@aqGLgyDwM*7r|ao-s7vk zk+Er!7rU2rl3eCP8z#w&>(2~?%JqJ+zAE$5$dNB%9Y#NqXf5{2VD#tlc%qBRxQ#(HVSo!jX)gcyKFM*e7xbKqP9j%KSSL{Vd-Ig}N zc3gU6J^1VL6!?S9j^@V%IU)y1p_iS7?Xshc7KDvaY>~ z)VjI?*je3=52$AYVWQ*trPEqkT7{F79ttDbg<({JcuCxES1*5YM=HGqg@vc{9#TSl z-uCPm2weV=dwV%Ip!*j#x(BUTqZO9>53{q)^qQ)Sv>*srugJcZf7s7A{`tfeP{zM4 r>p$zb;_&=sGySuB{-5oh#ntN + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/volkovnikita/data/stage1/get/profile-2000-get-cpu.html b/src/main/java/ru/vk/itmo/test/volkovnikita/data/stage1/get/profile-2000-get-cpu.html new file mode 100644 index 000000000..9740674a1 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/volkovnikita/data/stage1/get/profile-2000-get-cpu.html @@ -0,0 +1,518 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/volkovnikita/data/stage1/put/Histogram_put_6000.png b/src/main/java/ru/vk/itmo/test/volkovnikita/data/stage1/put/Histogram_put_6000.png new file mode 100644 index 0000000000000000000000000000000000000000..f7f319d1f891dd1a84646bb4cad01b40719e5806 GIT binary patch literal 109731 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 z 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

@wE78%tmeau_eNbZcVh0jQ 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 I_|%pE0;xBEng9R* literal 0 HcmV?d00001 diff --git a/src/main/java/ru/vk/itmo/test/volkovnikita/data/stage1/put/profile-6000-alloc.html b/src/main/java/ru/vk/itmo/test/volkovnikita/data/stage1/put/profile-6000-alloc.html new file mode 100644 index 000000000..88e689329 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/volkovnikita/data/stage1/put/profile-6000-alloc.html @@ -0,0 +1,502 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/volkovnikita/data/stage1/put/profile-6000-cpu-put.html b/src/main/java/ru/vk/itmo/test/volkovnikita/data/stage1/put/profile-6000-cpu-put.html new file mode 100644 index 000000000..987de80ef --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/volkovnikita/data/stage1/put/profile-6000-cpu-put.html @@ -0,0 +1,783 @@ + + + + + + + +

Flame Graph

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/volkovnikita/data/stage1/put/put_result_6000.txt b/src/main/java/ru/vk/itmo/test/volkovnikita/data/stage1/put/put_result_6000.txt new file mode 100644 index 000000000..9767d1584 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/volkovnikita/data/stage1/put/put_result_6000.txt @@ -0,0 +1,84 @@ +Value Percentile TotalCount 1/(1-Percentile) + + 0.028 0.000000 1 1.00 + 0.368 0.100000 12018 1.11 + 0.600 0.200000 24040 1.25 + 0.827 0.300000 36044 1.43 + 1.047 0.400000 48023 1.67 + 1.297 0.500000 60021 2.00 + 1.518 0.550000 66006 2.22 + 1.936 0.600000 71989 2.50 + 2.751 0.650000 77986 2.86 + 3.735 0.700000 83984 3.33 + 4.831 0.750000 89995 4.00 + 5.463 0.775000 92992 4.44 + 6.191 0.800000 95983 5.00 + 6.855 0.825000 98989 5.71 + 7.607 0.850000 101987 6.67 + 8.567 0.875000 104986 8.00 + 9.143 0.887500 106480 8.89 + 9.783 0.900000 107976 10.00 + 10.631 0.912500 109480 11.43 + 11.951 0.925000 110981 13.33 + 13.327 0.937500 112481 16.00 + 13.967 0.943750 113224 17.78 + 14.799 0.950000 113977 20.00 + 15.663 0.956250 114727 22.86 + 16.767 0.962500 115476 26.67 + 18.415 0.968750 116228 32.00 + 19.583 0.971875 116600 35.56 + 20.127 0.975000 116978 40.00 + 21.151 0.978125 117352 45.71 + 22.175 0.981250 117724 53.33 + 23.647 0.984375 118102 64.00 + 24.671 0.985938 118285 71.11 + 26.543 0.987500 118474 80.00 + 32.495 0.989062 118660 91.43 + 40.799 0.990625 118848 106.67 + 46.207 0.992188 119035 128.00 + 49.119 0.992969 119130 142.22 + 51.551 0.993750 119223 160.00 + 52.639 0.994531 119316 182.86 + 53.055 0.995313 119412 213.33 + 54.111 0.996094 119505 256.00 + 54.783 0.996484 119551 284.44 + 55.999 0.996875 119598 320.00 + 56.831 0.997266 119645 365.71 + 57.631 0.997656 119691 426.67 + 58.303 0.998047 119742 512.00 + 58.591 0.998242 119762 568.89 + 58.719 0.998437 119788 640.00 + 58.783 0.998633 119810 731.43 + 58.911 0.998828 119832 853.33 + 59.263 0.999023 119856 1024.00 + 59.487 0.999121 119867 1137.78 + 59.711 0.999219 119882 1280.00 + 59.775 0.999316 119890 1462.86 + 59.871 0.999414 119907 1706.67 + 59.967 0.999512 119916 2048.00 + 60.031 0.999561 119920 2275.56 + 60.095 0.999609 119928 2560.00 + 60.127 0.999658 119934 2925.71 + 60.159 0.999707 119942 3413.33 + 60.191 0.999756 119948 4096.00 + 60.191 0.999780 119948 4551.11 + 60.223 0.999805 119955 5120.00 + 60.223 0.999829 119955 5851.43 + 60.223 0.999854 119955 6826.67 + 60.255 0.999878 119959 8192.00 + 60.255 0.999890 119959 9102.22 + 60.287 0.999902 119962 10240.00 + 60.287 0.999915 119962 11702.86 + 60.319 0.999927 119966 13653.33 + 60.319 0.999939 119966 16384.00 + 60.319 0.999945 119966 18204.44 + 60.351 0.999951 119967 20480.00 + 60.351 0.999957 119967 23405.71 + 60.383 0.999963 119968 27306.67 + 60.415 0.999969 119969 32768.00 + 60.415 0.999973 119969 36408.89 + 60.447 0.999976 119970 40960.00 + 60.447 0.999979 119970 46811.43 + 60.447 0.999982 119970 54613.33 + 60.479 0.999985 119972 65536.00 + 60.479 1.000000 119972 inf \ No newline at end of file diff --git a/src/main/java/ru/vk/itmo/test/volkovnikita/lua/stage1/get.lua b/src/main/java/ru/vk/itmo/test/volkovnikita/lua/stage1/get.lua new file mode 100644 index 000000000..7f9312f79 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/volkovnikita/lua/stage1/get.lua @@ -0,0 +1,7 @@ +id = 0 +function request() + headers = {} + headers["Host"] = "localhost:8080" + id = id + 1 + return wrk.format("GET", "/v0/entity?id=" .. id, headers) +end diff --git a/src/main/java/ru/vk/itmo/test/volkovnikita/lua/stage1/put.lua b/src/main/java/ru/vk/itmo/test/volkovnikita/lua/stage1/put.lua new file mode 100644 index 000000000..b5fb6cd2b --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/volkovnikita/lua/stage1/put.lua @@ -0,0 +1,8 @@ +id = 0 +function request() + headers = {} + headers["Host"] = "localhost:8080" + id = id + 1 + body = math.random(1, 555555) + return wrk.format("PUT", "/v0/entity?id=" .. id, headers, body) +end \ No newline at end of file diff --git a/src/main/java/ru/vk/itmo/test/volkovnikita/report/stage1.md b/src/main/java/ru/vk/itmo/test/volkovnikita/report/stage1.md new file mode 100644 index 000000000..a6aad83ce --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/volkovnikita/report/stage1.md @@ -0,0 +1,507 @@ +## нагрузечное тестирование с wrk2 + +### PUT +С использованием виртуальной машины была выявленна точка разладки для PUT запроса: + +wrk -d 30 -c 1 -t 1 -R 10000 -L -s /home/ravenhub/IdeaProjects/2024-highload-dht/src/main/java/ru/vk/itmo/test/volkovnikita/lua/stage1/put.lua http://127.0.0.1:8080 +Running 30s test @ http://127.0.0.1:8080 +1 threads and 1 connections +Thread calibration: mean lat.: 826.002ms, rate sampling interval: 2967ms +Thread Stats Avg Stdev Max +/- Stdev +Latency 3.30s 924.83ms 4.93s 60.52% +Req/Sec 8.37k 106.99 8.45k 83.33% +Latency Distribution (HdrHistogram - Recorded Latency) +50.000% 3.28s +75.000% 4.07s +90.000% 4.64s +99.000% 4.91s +99.900% 4.93s +99.990% 4.93s +99.999% 4.93s +100.000% 4.93s + +Detailed Percentile spectrum: +Value Percentile TotalCount 1/(1-Percentile) + + 1691.647 0.000000 41 1.00 + 1998.847 0.100000 16923 1.11 + 2322.431 0.200000 33564 1.25 + 2646.015 0.300000 50426 1.43 + 2963.455 0.400000 67176 1.67 + 3282.943 0.500000 83779 2.00 + 3436.543 0.550000 92198 2.22 + 3581.951 0.600000 100622 2.50 + 3766.271 0.650000 109231 2.86 + 3921.919 0.700000 117478 3.33 + 4069.375 0.750000 126219 4.00 + 4147.199 0.775000 129999 4.44 + 4184.063 0.800000 134178 5.00 + 4272.127 0.825000 138363 5.71 + 4374.527 0.850000 142540 6.67 + 4493.311 0.875000 146927 8.00 + 4587.519 0.887500 148728 8.89 + 4640.767 0.900000 150802 10.00 + 4726.783 0.912500 153101 11.43 + 4767.743 0.925000 155196 13.33 + 4800.511 0.937500 157382 16.00 + 4804.607 0.943750 158932 17.78 + 4808.703 0.950000 159320 20.00 + 4849.663 0.956250 160233 22.86 + 4874.239 0.962500 161324 26.67 + 4886.527 0.968750 162542 32.00 + 4890.623 0.971875 163020 35.56 + 4894.719 0.975000 163745 40.00 + 4898.815 0.978125 164198 45.71 + 4902.911 0.981250 164915 53.33 + 4907.007 0.984375 165733 64.00 + 4907.007 0.985938 165733 71.11 + 4907.007 0.987500 165733 80.00 + 4907.007 0.989062 165733 91.43 + 4915.199 0.990625 166022 106.67 + 4927.487 0.992188 166683 128.00 + 4927.487 0.992969 166683 142.22 + 4927.487 0.993750 166683 160.00 + 4927.487 0.994531 166683 182.86 + 4931.583 0.995313 167557 213.33 + 4931.583 1.000000 167557 inf +#[Mean = 3304.008, StdDeviation = 924.826] +#[Max = 4927.488, Total count = 167557] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- +250697 requests in 30.00s, 16.02MB read +Requests/sec: 8356.63 +Transfer/sec: 546.77KB + + +Проанализируем работу про 6000 и 7000 RPS: + +### 6000 + +wrk -d 30 -c 1 -t 1 -R 6000 -L -s /home/ravenhub/IdeaProjects/2024-highload-dht/src/main/java/ru/vk/itmo/test/volkovnikita/lua/stage1/put.lua http://127.0.0.1:8080 +Running 30s test @ http://127.0.0.1:8080 +1 threads and 1 connections +Thread calibration: mean lat.: 6.447ms, rate sampling interval: 29ms +Thread Stats Avg Stdev Max +/- Stdev +Latency 3.96ms 6.72ms 60.45ms 91.31% +Req/Sec 6.11k 0.90k 10.25k 73.44% +Latency Distribution (HdrHistogram - Recorded Latency) +50.000% 1.30ms +75.000% 4.83ms +90.000% 9.78ms +99.000% 37.34ms +99.900% 59.20ms +99.990% 60.29ms +99.999% 60.48ms +100.000% 60.48ms + +Detailed Percentile spectrum: +Value Percentile TotalCount 1/(1-Percentile) + + 0.028 0.000000 1 1.00 + 0.368 0.100000 12018 1.11 + 0.600 0.200000 24040 1.25 + 0.827 0.300000 36044 1.43 + 1.047 0.400000 48023 1.67 + 1.297 0.500000 60021 2.00 + 1.518 0.550000 66006 2.22 + 1.936 0.600000 71989 2.50 + 2.751 0.650000 77986 2.86 + 3.735 0.700000 83984 3.33 + 4.831 0.750000 89995 4.00 + 5.463 0.775000 92992 4.44 + 6.191 0.800000 95983 5.00 + 6.855 0.825000 98989 5.71 + 7.607 0.850000 101987 6.67 + 8.567 0.875000 104986 8.00 + 9.143 0.887500 106480 8.89 + 9.783 0.900000 107976 10.00 + 10.631 0.912500 109480 11.43 + 11.951 0.925000 110981 13.33 + 13.327 0.937500 112481 16.00 + 13.967 0.943750 113224 17.78 + 14.799 0.950000 113977 20.00 + 15.663 0.956250 114727 22.86 + 16.767 0.962500 115476 26.67 + 18.415 0.968750 116228 32.00 + 19.583 0.971875 116600 35.56 + 20.127 0.975000 116978 40.00 + 21.151 0.978125 117352 45.71 + 22.175 0.981250 117724 53.33 + 23.647 0.984375 118102 64.00 + 24.671 0.985938 118285 71.11 + 26.543 0.987500 118474 80.00 + 32.495 0.989062 118660 91.43 + 40.799 0.990625 118848 106.67 + 46.207 0.992188 119035 128.00 + 49.119 0.992969 119130 142.22 + 51.551 0.993750 119223 160.00 + 52.639 0.994531 119316 182.86 + 53.055 0.995313 119412 213.33 + 54.111 0.996094 119505 256.00 + 54.783 0.996484 119551 284.44 + 55.999 0.996875 119598 320.00 + 56.831 0.997266 119645 365.71 + 57.631 0.997656 119691 426.67 + 58.303 0.998047 119742 512.00 + 58.591 0.998242 119762 568.89 + 58.719 0.998437 119788 640.00 + 58.783 0.998633 119810 731.43 + 58.911 0.998828 119832 853.33 + 59.263 0.999023 119856 1024.00 + 59.487 0.999121 119867 1137.78 + 59.711 0.999219 119882 1280.00 + 59.775 0.999316 119890 1462.86 + 59.871 0.999414 119907 1706.67 + 59.967 0.999512 119916 2048.00 + 60.031 0.999561 119920 2275.56 + 60.095 0.999609 119928 2560.00 + 60.127 0.999658 119934 2925.71 + 60.159 0.999707 119942 3413.33 + 60.191 0.999756 119948 4096.00 + 60.191 0.999780 119948 4551.11 + 60.223 0.999805 119955 5120.00 + 60.223 0.999829 119955 5851.43 + 60.223 0.999854 119955 6826.67 + 60.255 0.999878 119959 8192.00 + 60.255 0.999890 119959 9102.22 + 60.287 0.999902 119962 10240.00 + 60.287 0.999915 119962 11702.86 + 60.319 0.999927 119966 13653.33 + 60.319 0.999939 119966 16384.00 + 60.319 0.999945 119966 18204.44 + 60.351 0.999951 119967 20480.00 + 60.351 0.999957 119967 23405.71 + 60.383 0.999963 119968 27306.67 + 60.415 0.999969 119969 32768.00 + 60.415 0.999973 119969 36408.89 + 60.447 0.999976 119970 40960.00 + 60.447 0.999979 119970 46811.43 + 60.447 0.999982 119970 54613.33 + 60.479 0.999985 119972 65536.00 + 60.479 1.000000 119972 inf +#[Mean = 3.956, StdDeviation = 6.715] +#[Max = 60.448, Total count = 119972] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- +179990 requests in 30.00s, 11.50MB read +Requests/sec: 5999.66 +Transfer/sec: 392.56KB + +### 7000 + +wrk -d 30 -c 1 -t 1 -R 7000 -L -s /home/ravenhub/IdeaProjects/2024-highload-dht/src/main/java/ru/vk/itmo/test/volkovnikita/lua/stage1/put.lua http://127.0.0.1:8080 +Running 30s test @ http://127.0.0.1:8080 +1 threads and 1 connections +Thread calibration: mean lat.: 7.968ms, rate sampling interval: 42ms +Thread Stats Avg Stdev Max +/- Stdev +Latency 9.84ms 11.55ms 70.08ms 85.92% +Req/Sec 7.07k 1.26k 10.34k 65.89% +Latency Distribution (HdrHistogram - Recorded Latency) +50.000% 5.76ms +75.000% 14.69ms +90.000% 25.41ms +99.000% 51.97ms +99.900% 67.14ms +99.990% 69.89ms +99.999% 70.14ms +100.000% 70.14ms + +Detailed Percentile spectrum: +Value Percentile TotalCount 1/(1-Percentile) + + 0.076 0.000000 1 1.00 + 0.553 0.100000 13959 1.11 + 0.934 0.200000 27909 1.25 + 1.375 0.300000 41868 1.43 + 3.045 0.400000 55796 1.67 + 5.763 0.500000 69748 2.00 + 7.107 0.550000 76717 2.22 + 8.711 0.600000 83693 2.50 + 10.335 0.650000 90661 2.86 + 12.287 0.700000 97647 3.33 + 14.695 0.750000 104619 4.00 + 15.903 0.775000 108119 4.44 + 17.263 0.800000 111603 5.00 + 18.799 0.825000 115087 5.71 + 20.655 0.850000 118564 6.67 + 22.767 0.875000 122056 8.00 + 24.015 0.887500 123791 8.89 + 25.407 0.900000 125536 10.00 + 26.911 0.912500 127272 11.43 + 28.623 0.925000 129024 13.33 + 30.495 0.937500 130769 16.00 + 31.743 0.943750 131636 17.78 + 33.119 0.950000 132524 20.00 + 34.751 0.956250 133383 22.86 + 36.063 0.962500 134258 26.67 + 38.591 0.968750 135122 32.00 + 40.639 0.971875 135556 35.56 + 42.783 0.975000 135992 40.00 + 44.543 0.978125 136436 45.71 + 46.335 0.981250 136869 53.33 + 47.967 0.984375 137302 64.00 + 49.247 0.985938 137519 71.11 + 50.303 0.987500 137736 80.00 + 51.231 0.989062 137958 91.43 + 52.863 0.990625 138169 106.67 + 54.751 0.992188 138388 128.00 + 55.935 0.992969 138496 142.22 + 58.271 0.993750 138606 160.00 + 59.679 0.994531 138715 182.86 + 61.663 0.995313 138825 213.33 + 62.783 0.996094 138933 256.00 + 63.359 0.996484 138988 284.44 + 64.063 0.996875 139042 320.00 + 64.671 0.997266 139095 365.71 + 65.503 0.997656 139152 426.67 + 66.047 0.998047 139205 512.00 + 66.367 0.998242 139232 568.89 + 66.623 0.998437 139267 640.00 + 66.815 0.998633 139292 731.43 + 66.943 0.998828 139313 853.33 + 67.135 0.999023 139340 1024.00 + 67.263 0.999121 139358 1137.78 + 67.327 0.999219 139373 1280.00 + 67.391 0.999316 139381 1462.86 + 67.583 0.999414 139399 1706.67 + 67.775 0.999512 139408 2048.00 + 68.031 0.999561 139420 2275.56 + 68.095 0.999609 139430 2560.00 + 68.095 0.999658 139430 2925.71 + 68.479 0.999707 139436 3413.33 + 68.799 0.999756 139442 4096.00 + 69.375 0.999780 139446 4551.11 + 69.567 0.999805 139450 5120.00 + 69.631 0.999829 139455 5851.43 + 69.695 0.999854 139457 6826.67 + 69.759 0.999878 139460 8192.00 + 69.887 0.999890 139462 9102.22 + 69.951 0.999902 139464 10240.00 + 70.015 0.999915 139470 11702.86 + 70.015 0.999927 139470 13653.33 + 70.015 0.999939 139470 16384.00 + 70.015 0.999945 139470 18204.44 + 70.015 0.999951 139470 20480.00 + 70.079 0.999957 139474 23405.71 + 70.079 0.999963 139474 27306.67 + 70.079 0.999969 139474 32768.00 + 70.079 0.999973 139474 36408.89 + 70.079 0.999976 139474 40960.00 + 70.079 0.999979 139474 46811.43 + 70.079 0.999982 139474 54613.33 + 70.079 0.999985 139474 65536.00 + 70.143 0.999986 139476 72817.78 + 70.143 1.000000 139476 inf +#[Mean = 9.840, StdDeviation = 11.552] +#[Max = 70.080, Total count = 139476] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- +209508 requests in 30.00s, 13.39MB read +Requests/sec: 6983.61 +Transfer/sec: 456.94KB + + +### GET +Прогнав по значениям в диапазоне от 250 до 10000 RPS получилось найти точку разладки +в 2300 RPS, стабильно работает при 2000 RPS, связи с профилированием в + +### 2300 +wrk -d 30 -c 1 -t 1 -R 2300 -L -s /home/ravenhub/IdeaProjects/2024-highload-dht/src/main/java/ru/vk/itmo/test/volkovnikita/lua/stage1/get.lua http://127.0.0.1:8080 +Running 30s test @ http://127.0.0.1:8080 +1 threads and 1 connections +Thread calibration: mean lat.: 563.172ms, rate sampling interval: 2071ms +Thread Stats Avg Stdev Max +/- Stdev +Latency 677.80ms 465.36ms 1.22s 48.91% +Req/Sec 2.44k 149.57 2.69k 66.67% +Latency Distribution (HdrHistogram - Recorded Latency) +50.000% 856.06ms +75.000% 1.14s +90.000% 1.18s +99.000% 1.20s +99.900% 1.21s +99.990% 1.22s +99.999% 1.22s +100.000% 1.22s + +Detailed Percentile spectrum: +Value Percentile TotalCount 1/(1-Percentile) + + 0.255 0.000000 2 1.00 + 0.998 0.100000 4866 1.11 + 3.049 0.200000 9717 1.25 + 327.679 0.300000 14576 1.43 + 602.111 0.400000 19439 1.67 + 856.063 0.500000 24310 2.00 + 902.143 0.550000 26728 2.22 + 941.055 0.600000 29154 2.50 + 1022.975 0.650000 31584 2.86 + 1119.231 0.700000 34120 3.33 + 1138.687 0.750000 36526 4.00 + 1154.047 0.775000 37787 4.44 + 1160.191 0.800000 38984 5.00 + 1167.359 0.825000 40099 5.71 + 1173.503 0.850000 41460 6.67 + 1177.599 0.875000 42917 8.00 + 1178.623 0.887500 43471 8.89 + 1179.647 0.900000 44028 10.00 + 1180.671 0.912500 44409 11.43 + 1182.719 0.925000 45173 13.33 + 1184.767 0.937500 45680 16.00 + 1185.791 0.943750 45973 17.78 + 1186.815 0.950000 46254 20.00 + 1187.839 0.956250 46464 22.86 + 1189.887 0.962500 46789 26.67 + 1192.959 0.968750 47083 32.00 + 1193.983 0.971875 47224 35.56 + 1196.031 0.975000 47454 40.00 + 1197.055 0.978125 47526 45.71 + 1199.103 0.981250 47673 53.33 + 1201.151 0.984375 47853 64.00 + 1202.175 0.985938 47950 71.11 + 1203.199 0.987500 48038 80.00 + 1204.223 0.989062 48131 91.43 + 1204.223 0.990625 48131 106.67 + 1206.271 0.992188 48227 128.00 + 1207.295 0.992969 48253 142.22 + 1209.343 0.993750 48331 160.00 + 1209.343 0.994531 48331 182.86 + 1210.367 0.995313 48392 213.33 + 1211.391 0.996094 48435 256.00 + 1211.391 0.996484 48435 284.44 + 1211.391 0.996875 48435 320.00 + 1212.415 0.997266 48468 365.71 + 1213.439 0.997656 48487 426.67 + 1214.463 0.998047 48537 512.00 + 1214.463 0.998242 48537 568.89 + 1214.463 0.998437 48537 640.00 + 1214.463 0.998633 48537 731.43 + 1214.463 0.998828 48537 853.33 + 1214.463 0.999023 48537 1024.00 + 1215.487 0.999121 48566 1137.78 + 1215.487 0.999219 48566 1280.00 + 1215.487 0.999316 48566 1462.86 + 1215.487 0.999414 48566 1706.67 + 1215.487 0.999512 48566 2048.00 + 1215.487 0.999561 48566 2275.56 + 1215.487 0.999609 48566 2560.00 + 1215.487 0.999658 48566 2925.71 + 1216.511 0.999707 48582 3413.33 + 1216.511 1.000000 48582 inf +#[Mean = 677.805, StdDeviation = 465.358] +#[Max = 1215.488, Total count = 48582] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- +68997 requests in 30.00s, 4.46MB read +Requests/sec: 2299.92 +Transfer/sec: 152.28KB + + +### 2000 +wrk -d 30 -c 1 -t 1 -R 2000 -L -s /home/ravenhub/IdeaProjects/2024-highload-dht/src/main/java/ru/vk/itmo/test/volkovnikita/lua/stage1/get.lua http://127.0.0.1:8080 +Running 30s test @ http://127.0.0.1:8080 +1 threads and 1 connections +Thread calibration: mean lat.: 125.520ms, rate sampling interval: 429ms +Thread Stats Avg Stdev Max +/- Stdev +Latency 3.03ms 3.98ms 34.05ms 88.28% +Req/Sec 2.00k 33.36 2.14k 82.61% +Latency Distribution (HdrHistogram - Recorded Latency) +50.000% 1.40ms +75.000% 3.50ms +90.000% 7.66ms +99.000% 20.05ms +99.900% 32.37ms +99.990% 33.92ms +99.999% 34.08ms +100.000% 34.08ms + +Detailed Percentile spectrum: +Value Percentile TotalCount 1/(1-Percentile) + + 0.289 0.000000 1 1.00 + 0.608 0.100000 4007 1.11 + 0.827 0.200000 8017 1.25 + 1.020 0.300000 12022 1.43 + 1.216 0.400000 16038 1.67 + 1.401 0.500000 20050 2.00 + 1.515 0.550000 22028 2.22 + 1.709 0.600000 24031 2.50 + 2.026 0.650000 26035 2.86 + 2.627 0.700000 28035 3.33 + 3.503 0.750000 30038 4.00 + 4.019 0.775000 31043 4.44 + 4.555 0.800000 32049 5.00 + 5.139 0.825000 33042 5.71 + 5.931 0.850000 34046 6.67 + 6.775 0.875000 35046 8.00 + 7.187 0.887500 35548 8.89 + 7.655 0.900000 36045 10.00 + 8.147 0.912500 36552 11.43 + 8.767 0.925000 37050 13.33 + 9.647 0.937500 37550 16.00 + 10.087 0.943750 37800 17.78 + 10.695 0.950000 38052 20.00 + 11.367 0.956250 38299 22.86 + 12.367 0.962500 38550 26.67 + 13.207 0.968750 38799 32.00 + 13.767 0.971875 38925 35.56 + 14.263 0.975000 39051 40.00 + 15.031 0.978125 39174 45.71 + 15.999 0.981250 39300 53.33 + 17.263 0.984375 39428 64.00 + 17.647 0.985938 39490 71.11 + 18.303 0.987500 39551 80.00 + 19.311 0.989062 39612 91.43 + 20.591 0.990625 39675 106.67 + 22.159 0.992188 39739 128.00 + 22.895 0.992969 39769 142.22 + 23.839 0.993750 39800 160.00 + 25.023 0.994531 39831 182.86 + 26.191 0.995313 39864 213.33 + 27.615 0.996094 39894 256.00 + 28.399 0.996484 39910 284.44 + 28.767 0.996875 39927 320.00 + 28.927 0.997266 39942 365.71 + 29.167 0.997656 39957 426.67 + 29.599 0.998047 39972 512.00 + 30.191 0.998242 39980 568.89 + 30.415 0.998437 39988 640.00 + 30.735 0.998633 39996 731.43 + 31.711 0.998828 40004 853.33 + 32.495 0.999023 40011 1024.00 + 32.991 0.999121 40015 1137.78 + 33.471 0.999219 40019 1280.00 + 33.631 0.999316 40023 1462.86 + 33.695 0.999414 40027 1706.67 + 33.727 0.999512 40033 2048.00 + 33.727 0.999561 40033 2275.56 + 33.759 0.999609 40035 2560.00 + 33.791 0.999658 40037 2925.71 + 33.823 0.999707 40040 3413.33 + 33.855 0.999756 40043 4096.00 + 33.855 0.999780 40043 4551.11 + 33.855 0.999805 40043 5120.00 + 33.887 0.999829 40045 5851.43 + 33.887 0.999854 40045 6826.67 + 33.919 0.999878 40046 8192.00 + 33.919 0.999890 40046 9102.22 + 33.951 0.999902 40048 10240.00 + 33.951 0.999915 40048 11702.86 + 33.951 0.999927 40048 13653.33 + 33.951 0.999939 40048 16384.00 + 33.951 0.999945 40048 18204.44 + 34.015 0.999951 40049 20480.00 + 34.015 0.999957 40049 23405.71 + 34.015 0.999963 40049 27306.67 + 34.015 0.999969 40049 32768.00 + 34.015 0.999973 40049 36408.89 + 34.079 0.999976 40050 40960.00 + 34.079 1.000000 40050 inf +#[Mean = 3.031, StdDeviation = 3.985] +#[Max = 34.048, Total count = 40050] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- +59996 requests in 30.00s, 3.88MB read +Requests/sec: 1999.87 +Transfer/sec: 132.41KB + + From 3b42baf65cfeca789a51b1afa25ee16b93b590d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BE=D0=BB=D0=BA=D0=BE=D0=B2=20=D0=9D=D0=B8=D0=BA?= =?UTF-8?q?=D0=B8=D1=82=D0=B0=20=D0=9F=D0=B5=D1=82=D1=80=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=87?= Date: Wed, 21 Feb 2024 21:45:19 +0300 Subject: [PATCH 3/4] result --- .../itmo/test/volkovnikita/report/stage1.md | 33 +++++++++++++++---- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/volkovnikita/report/stage1.md b/src/main/java/ru/vk/itmo/test/volkovnikita/report/stage1.md index a6aad83ce..bfcef763c 100644 --- a/src/main/java/ru/vk/itmo/test/volkovnikita/report/stage1.md +++ b/src/main/java/ru/vk/itmo/test/volkovnikita/report/stage1.md @@ -1,7 +1,9 @@ -## нагрузечное тестирование с wrk2 +## Нагрузочное тестирование с wrk2 ### PUT -С использованием виртуальной машины была выявленна точка разладки для PUT запроса: +С использованием виртуальной машины была выявленна точка разладки при 10000 RPS для PUT запроса: + +### 10000 RPS wrk -d 30 -c 1 -t 1 -R 10000 -L -s /home/ravenhub/IdeaProjects/2024-highload-dht/src/main/java/ru/vk/itmo/test/volkovnikita/lua/stage1/put.lua http://127.0.0.1:8080 Running 30s test @ http://127.0.0.1:8080 @@ -75,7 +77,7 @@ Transfer/sec: 546.77KB Проанализируем работу про 6000 и 7000 RPS: -### 6000 +### 6000 RPS wrk -d 30 -c 1 -t 1 -R 6000 -L -s /home/ravenhub/IdeaProjects/2024-highload-dht/src/main/java/ru/vk/itmo/test/volkovnikita/lua/stage1/put.lua http://127.0.0.1:8080 Running 30s test @ http://127.0.0.1:8080 @@ -187,7 +189,15 @@ Value Percentile TotalCount 1/(1-Percentile) Requests/sec: 5999.66 Transfer/sec: 392.56KB -### 7000 +![Histogram_put_6000.png](..%2Fdata%2Fstage1%2Fput%2FHistogram_put_6000.png) + +[cpu-put](..%2Fdata%2Fstage1%2Fput%2Fprofile-6000-cpu-put.html) + +[alloc-put](..%2Fdata%2Fstage1%2Fput%2Fprofile-6000-alloc.html) + + +### 7000 RPS +Приведён просто для доп. статистики wrk -d 30 -c 1 -t 1 -R 7000 -L -s /home/ravenhub/IdeaProjects/2024-highload-dht/src/main/java/ru/vk/itmo/test/volkovnikita/lua/stage1/put.lua http://127.0.0.1:8080 Running 30s test @ http://127.0.0.1:8080 @@ -303,9 +313,14 @@ Transfer/sec: 456.94KB ### GET Прогнав по значениям в диапазоне от 250 до 10000 RPS получилось найти точку разладки -в 2300 RPS, стабильно работает при 2000 RPS, связи с профилированием в +в 2300 RPS, стабильно работает при 2000 RPS, связи с профилированием в виртуалке, +RPS не очень большие. + +Прогонял до 10000 потому что выявил что в Linux-ubuntu при длительном нахождении Idea ultimate +в пассивном режиме(не открывал среду разработки) любое количество RPS в среднем давало Latency 4s, +пока не понял с чем связано -### 2300 +### 2300 RTS wrk -d 30 -c 1 -t 1 -R 2300 -L -s /home/ravenhub/IdeaProjects/2024-highload-dht/src/main/java/ru/vk/itmo/test/volkovnikita/lua/stage1/get.lua http://127.0.0.1:8080 Running 30s test @ http://127.0.0.1:8080 1 threads and 1 connections @@ -396,7 +411,7 @@ Requests/sec: 2299.92 Transfer/sec: 152.28KB -### 2000 +### 2000 RTS wrk -d 30 -c 1 -t 1 -R 2000 -L -s /home/ravenhub/IdeaProjects/2024-highload-dht/src/main/java/ru/vk/itmo/test/volkovnikita/lua/stage1/get.lua http://127.0.0.1:8080 Running 30s test @ http://127.0.0.1:8080 1 threads and 1 connections @@ -504,4 +519,8 @@ Value Percentile TotalCount 1/(1-Percentile) Requests/sec: 1999.87 Transfer/sec: 132.41KB +![Histogram_get_2000.png](..%2Fdata%2Fstage1%2Fget%2FHistogram_get_2000.png) + +[get-cpu](..%2Fdata%2Fstage1%2Fget%2Fprofile-2000-get-cpu.html) +[get-alloc](..%2Fdata%2Fstage1%2Fget%2Fprofile-2000-get-alloc.html) \ No newline at end of file From 741ad1e22110520ee9290b34fc22cb51a9520d23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BE=D0=BB=D0=BA=D0=BE=D0=B2=20=D0=9D=D0=B8=D0=BA?= =?UTF-8?q?=D0=B8=D1=82=D0=B0=20=D0=9F=D0=B5=D1=82=D1=80=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=87?= Date: Tue, 27 Feb 2024 11:37:47 +0300 Subject: [PATCH 4/4] refactoring --- .../test/volkovnikita/HttpServerImpl.java | 27 +++++++++---------- .../itmo/test/volkovnikita/ServiceImpl.java | 4 +-- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/volkovnikita/HttpServerImpl.java b/src/main/java/ru/vk/itmo/test/volkovnikita/HttpServerImpl.java index e4bd4a84f..fe68618e7 100644 --- a/src/main/java/ru/vk/itmo/test/volkovnikita/HttpServerImpl.java +++ b/src/main/java/ru/vk/itmo/test/volkovnikita/HttpServerImpl.java @@ -11,19 +11,20 @@ import one.nio.server.AcceptorConfig; import ru.vk.itmo.ServiceConfig; import ru.vk.itmo.dao.BaseEntry; +import ru.vk.itmo.dao.Dao; import ru.vk.itmo.dao.Entry; import ru.vk.itmo.test.reference.dao.ReferenceDao; import java.io.IOException; import java.lang.foreign.MemorySegment; import java.lang.foreign.ValueLayout; -import java.util.List; +import java.util.Set; public class HttpServerImpl extends HttpServer { - private final ReferenceDao dao; + private final Dao> dao; - static final List METHODS = List.of( + static final Set METHODS = Set.of( "GET", "PUT", "DELETE" @@ -53,10 +54,10 @@ public Response status() { @Path(value = "/v0/entity") @RequestMethod(Request.METHOD_GET) public Response getEntry(@Param(value = "id", required = true) String id) { - if (isIdCorrect(id)) { + if (isIdUncorrect(id)) { return new Response(Response.BAD_REQUEST, Response.EMPTY); } - MemorySegment key = idToMemorySegment(id); + MemorySegment key = MemorySegment.ofArray(id.toCharArray()); Entry entry = dao.get(key); return entry == null ? new Response(Response.NOT_FOUND, Response.EMPTY) : new Response(Response.OK, entry.value().toArray(ValueLayout.JAVA_BYTE)); @@ -64,11 +65,11 @@ public Response getEntry(@Param(value = "id", required = true) String id) { @Path(value = "/v0/entity") @RequestMethod(Request.METHOD_PUT) - public Response putEntry(@Param(value = "id", required = true) String id, Request request) { - if (isIdCorrect(id)) { + public Response up(@Param(value = "id", required = true) String id, Request request) { + if (isIdUncorrect(id)) { return new Response(Response.BAD_REQUEST, Response.EMPTY); } - MemorySegment key = idToMemorySegment(id); + MemorySegment key = MemorySegment.ofArray(id.toCharArray()); MemorySegment value = MemorySegment.ofArray(request.getBody()); dao.upsert(new BaseEntry<>(key, value)); return new Response(Response.CREATED, Response.EMPTY); @@ -77,10 +78,10 @@ public Response putEntry(@Param(value = "id", required = true) String id, Reques @Path(value = "/v0/entity") @RequestMethod(Request.METHOD_DELETE) public Response deleteEntry(@Param(value = "id", required = true) String id) { - if (isIdCorrect(id)) { + if (isIdUncorrect(id)) { return new Response(Response.BAD_REQUEST, Response.EMPTY); } - MemorySegment key = idToMemorySegment(id); + MemorySegment key = MemorySegment.ofArray(id.toCharArray()); dao.upsert(new BaseEntry<>(key, null)); return new Response(Response.ACCEPTED, Response.EMPTY); } @@ -98,11 +99,7 @@ public void handleDefault(Request request, HttpSession session) throws IOExcepti session.sendResponse(response); } - private MemorySegment idToMemorySegment(String id) { - return id == null ? null : MemorySegment.ofArray(id.toCharArray()); - } - - private boolean isIdCorrect(String id) { + private boolean isIdUncorrect(String id) { return id == null || id.isEmpty() || id.isBlank(); } } diff --git a/src/main/java/ru/vk/itmo/test/volkovnikita/ServiceImpl.java b/src/main/java/ru/vk/itmo/test/volkovnikita/ServiceImpl.java index 274bc8828..95e11b034 100644 --- a/src/main/java/ru/vk/itmo/test/volkovnikita/ServiceImpl.java +++ b/src/main/java/ru/vk/itmo/test/volkovnikita/ServiceImpl.java @@ -21,7 +21,7 @@ public ServiceImpl(ServiceConfig config) { } @Override - public CompletableFuture start() throws IOException { + public synchronized CompletableFuture start() throws IOException { dao = new ReferenceDao(new Config(config.workingDir(), FLUSH_THRESHOLD_BYTES)); server = new HttpServerImpl(config, dao); server.start(); @@ -29,7 +29,7 @@ public CompletableFuture start() throws IOException { } @Override - public CompletableFuture stop() throws IOException { + public synchronized CompletableFuture stop() throws IOException { server.stop(); dao.close(); return CompletableFuture.completedFuture(null);