From 6809371196b08a535e659be4f45907899f38b6b7 Mon Sep 17 00:00:00 2001 From: Gregor Lenz Date: Wed, 25 Oct 2023 17:53:50 +0100 Subject: [PATCH] update plotly figures --- .../index.md | 2 +- .../plotting.ipynb | 6 +- .../framework-benchmarking-4k-header.png | Bin 83402 -> 76452 bytes .../framework-benchmarking-4k.json | 2 +- .../framework-benchmarking-512.json | 2 +- .../framework-benchmarking-8k.json | 2 +- .../plotting.ipynb | 126 +++++++----------- 7 files changed, 53 insertions(+), 87 deletions(-) diff --git a/content/english/blog/efficient-compression-event-based-data-neuromorphic-applications/index.md b/content/english/blog/efficient-compression-event-based-data-neuromorphic-applications/index.md index e0fe41d0..c5de5ab4 100644 --- a/content/english/blog/efficient-compression-event-based-data-neuromorphic-applications/index.md +++ b/content/english/blog/efficient-compression-event-based-data-neuromorphic-applications/index.md @@ -30,7 +30,7 @@ So how can we store such data efficiently? A straightforward idea is to resort to formats such as hdf5 and numpy and store the arrays of events directly. But without exploiting any structure in the recorded data, those uncompressed formats end up having the largest file footprint. For our example automotive dataset, this would result in some 7-8 TB of data, which is undesirable. Event camera manufacturers have come up with ways to encode event streams more efficiently. Not only are we concerned about the size of event files on disk, but we also want to be able to read them back to memory as fast as possible! In the following figure we plot the results of our benchmark of different file type encodings and software frameworks that can decode files. -{{< chart data="file_read_benchmark" alt="Comparison among file size and read speed of different encodings and software tools." caption="Comparison among file size and read speed of different encodings and software tools.">}} +{{< chart data="file_read_benchmark" mobile="file_read_benchmark.png" alt="Comparison among file size and read speed of different encodings and software tools." caption="Comparison among file size and read speed of different encodings and software tools.">}} Ideally, we want to be close to the origin where we read fast and compression is high. The file size depends on the encoding, whereas the reading speed depends on the particular implementation/framework of how files are read. In terms of file size, we can see that numpy doesn't use any compression whatsoever, resulting in some 1.7GB file for our sample recording. Prophesee's [evt3](https://docs.prophesee.ai/stable/data/encoding_formats/evt3.html) and the generic lossless [brotli](https://github.com/google/brotli) formats achieve the best compression. In terms of reading speed, numpy is the fastest as it doesn't deal with any compression on disk. Unzipping the compressed events from disk on the other hand using h5py is by far the slowest. Using [Expelliarmus](https://github.com/open-neuromorphic/expelliarmus) and the [evt2](https://docs.prophesee.ai/stable/data/encoding_formats/evt2.html) file format, we get very close to numpy reading speeds while at the same time only using a fourth of the disk space. For more information about Prophesee event encoding formats, check out [this blog post](https://fabrizio-ottati.dev/blog/file-reading-benchmark/). diff --git a/content/english/blog/efficient-compression-event-based-data-neuromorphic-applications/plotting.ipynb b/content/english/blog/efficient-compression-event-based-data-neuromorphic-applications/plotting.ipynb index 30883fb5..7fa655f4 100644 --- a/content/english/blog/efficient-compression-event-based-data-neuromorphic-applications/plotting.ipynb +++ b/content/english/blog/efficient-compression-event-based-data-neuromorphic-applications/plotting.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -42,7 +42,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -59,6 +59,8 @@ "figure.update_layout(\n", " # legend=dict(orientation=\"v\", yanchor=\"top\", y=0, xanchor=\"right\", x=0.99, entrywidth=0.8, entrywidthmode=\"fraction\"),\n", " margin=dict(l=10, r=10, t=80, b=10),\n", + " # hovermode='x unified', \n", + " # hoverlabel=dict(bgcolor='rgba(255,255,255,0.75)')\n", ")\n", "figure.update_traces(marker_size=13)\n", "figure.write_json(\"file_read_benchmark.json\")\n", diff --git a/content/english/blog/spiking-neural-network-framework-benchmarking/framework-benchmarking-4k-header.png b/content/english/blog/spiking-neural-network-framework-benchmarking/framework-benchmarking-4k-header.png index fa8a977b11e7bd076855034e8b77508f9ed7f246..e65cf6abc045afc9d6e954a0c9db523c4e4f42ef 100644 GIT binary patch literal 76452 zcmeEuWmH_-mhLXx-AQl_9)fEiKoT5+1ef6M4n-hX;ekMcLlTnU?ry;X1P$&I+^s0y z=APUA&OLozcmH`~yfI!UH3qdQs`jci=bCHI@B8M8R8vvF#iGIj008&d(78K<5RD@fB7Hj z3}1&nddfzJ!SMXKB2Vf4W66yjv5vDQFRSxCymP;-ja#^J%7Vyw=FtAmkMto4({jBc z?E?k~5#4`yco$%%vH|nI;pHw&(nx=O&|#_prHt_a=3gIB2!btr?Y{n)V9|9+3^ZLsC(14gZ=S9nrl9DiPsyxb5h;LWTT^+W6+ z!-klf?ffRvrcT?c<(0l&^%D7)IKL;DMy8pVIzMM9tlqE#L|nLh^A`@pfPSE8R90N3 z-0ctC1pajUD2~euGC-$zPJXVsgU?f%+F$dNQfQA}l?xBc;5FoWLRoG?X=~-`JEy|G ztoUqzHx(!yjHmcj!~9!|CylKI$*vmCnL?Lz-AHjpgNQ+*Q!gjDR$dT<5G+Kn1IuY_ z+l+sTD8nI8Q`FXCN@ghI2?*;aCRwMTw%Bz&X*1FyU*}Bpyg}r`2ptVn9XP(j_Rec zU;R(lw_>A={a-g{P_=fsFyhOs8i*$ zc^ZykVRU`51aqp-lmDbaFn-`=_Vq@LZyR z81qa~f45mjtn8H6s?hfhwsi6izZ&WFXq(-k!`W-n^^&PD^L(D=k+&P)QzdaFzo*?V zqSBUIf{U!2crl4Wve$o2I!HzE@oSrQkS{H z7SoQdxK&~&Ukb{qJdsKW|B5}i(%QZCJ&8U#gK^d#Y4KPUW`gK*s734tyi!WhJ4-;T z>XS3!{x~yhq3^QUx$nJnL-l^)8Ea69o>1X~ppqYkaP-0Yn7G9JD}lb{3>=%a{a34s zCnew36s-}|AK$!87sbO)_|sOyWP=n&3LNV=_Ryx3^as~dR5tss!6d?iGMi4n8?ItvKv2NugtU61AFn=1LtX9<4sAy%>Jkp~e&@@ME4QfbO#lELiO{ ziuv$m8UCwF*H19|mk;qDZ42TBAp(f2TDU{fe?43}hv}@z2b+}=89j(NiwG|M^(v8p zDJaw4HJ%lX*$hfE%8b^ID;6s=*!PLA)XseBvmgg1z^7*S(}EKTIppA`G3N|opmaXc zuCI)@!T^Md`&mX)vW@$82BT5LsDGPsxY#6Gwc3h#_!1zFoP_|w~qxO zbly=O3o9w2P7f4`d&24`N;Wd1+H7d`yqrG zfZFlSq~pA7k+v*vt)J$jubPh~SN1~kN4!puUIm@sho9UqUGmctKcCoq{cTOEyE@cmvbA`)px&&+cS%;Zz4+2qnj3AsxWqUP&J zl{$_vhrkZCDU@ZoQ-583R7d`0h`8wwD*u*Ct3rL@c7)(doYEkPAUV8cYI)xoN=+V; zp@}b})~^QQ(O@j6!ChwB%z*z5((t#9CnB0F*LAXMbQ)VkL-}Df)AzdNfC!<}w_%kj z6>RpCF*EpTd6#q|ytGnZGHy0x4lv3XuM)gDIJwh+&7b9h(*i{hos`mM-oP`e2xbz$ zpi~BQD0#_jk_Pk9v`gFWLIb`!ovJ6Z!3e_d6(sxYmz?oUqoFP``d)G^Q;B%INmpkKT@<7IIrS2@Q03qkyK+%2qCwDQfe#I}B+HNOkooh*{pvcA)Ps=NpV^(p0CB;Pbs1I{7jxgQCs6gRm~Bogw%R=re}|rDyaMoP?hK6UwyeV;&@;G z%Yx}ggDbvVFGX+PCk84+lP!`7sL*#-kQQk`BT$WF9G2`uFn!cC+9sr>Wzytk*66CP@j))zV5S- z>dM|D6q*$eyvj|IT=uH9&JlMZ0x$A->-F|L~}B=Eb6R_VgB zm^DRH2Q5$TNs`a$O+M~f7ceIU@~jFIdpx_`N&8ZWx5;B7w15bKd9!RU#|5I=hPpnX zgJos7Qv*4}`+S9H4;VY#OuE8vkm*(b72apAS?GA$+4AD&_fOMA*Q*Y5+fz}Xy8YZ| zk4q&gcGs6<97m!Y)R$nYydK{9x--P1$hZC{I9G9oObhUhKE!%$ONt>c0SsBT+&F9FNL8JjuFV313q zIOt&kP*OYt^39e$O0sF@mPV8E%XAJ9@G%>5-oN}};wVxjdF0}1JN3(q0UO{Na->eB znGr;<*%O!EHhO!|AL~O<@vM^*;M>d)_Ts|J66RqJt_7{oi~`M@H3RR*EN-?R=5C|W z8z5rVK&G_whDY+6R|SbK=e^AqPc-wNaw}&%q%abox+W;bHl-(?M%nb?8wcm}qbi=~ z+WUpifhn{n9F};YX=!#z_Aq5cC&|(j8fV2j$L{6*plEr3GcgUN+dUGu$F`b+(~8~Q z;S{%Te4BX^cZgzKt8B811<+tQPtv^UFcyTU9rmlPy6@KFvfj}}_755oi;B+F2hq=fCrdZCHC4|=D#3k9LJIDR?{YgO2&r`V zY3cW43T?zpR=h0G=oyeMe#{!miNOPO;=oo~5cERkB-eTopE#GPgi4DH90^hsVL$|Y zC&=)Ie4&~;xNgPodjM1CiD%if+$q)E>)~I*^&ZvmTao#GrWEc74#~hQGdnByG(fbS ziv?2ZJdRgqvk;rSvZj>6vwad@!QZ*?VUxS;p3Dv{K??Jo7jxf)S^T>TgHI9#A+lJ& zq4vu{MI%9T;5iAG$&i{mQg%b+Nr784NV9x;eO`dnaY-?GO8v`eV;F{=#!+C%av8tx*7BQGDQpOxC2qthW@qbDdpg!LsZ^0~`k|v3%P=r$?0R&D&rz9heIIA{ z7iYUe6$Y5%JLGduJs?Vy}HTVdNoz;Z=a4p0=HYe zOhcSP#feQ$^d|JUEZID#zW&=?T7rn50u5#+HQlMgRzln#7N+VU7v$2+b$WHWH885scMHW<%&@=OL+F^zRT;#eW~H z=~1D=Q7ZQig=+nX!AwD&!zV&k27xw3)n!c*fG4}1ZAyvKDv<@ns(YcP;q%GA>-P-eJiif_%{ zinwUBB2GuOaAVDh05g%0R1NWZW4o~;vT8_ft^H_p$G&2=2R<}45IN}#AaIK6vhXW- za3(}>eUHu1*2k{b^vzY%8dMKw-ocM4!sh&@hf`)mrY=tcjrRx#m>Ix5l=og3LHipMBNY1eUtMu1(Aa7V&5kfb+dcwqUblWy4m4#ZFCY>2(> zz&XD)X!L>kTLcLa+rHq8oGuDqMg*y2l6d!|SmP#$^D!e7ccCvjRWi?! zwH;?Uyk>99#}qK|@DiNVjT>>q(1txD8PU70%=jdlWGkpP=UH|-A)h!{Aat=(Bx&SE z&A!-G4}!QSf5TS#Iz=50-%SW=iB+Gm&50eg6p#YB>E0C&-VsGGt}tX((9{`mHIAZ{-1VQ!N}m+s?c zYXcE0OII;3=~QD0(va#K>U!PQ-n@utWM7TK^;=w73GeoJKo_I4<0tpT3nzQpihQ@y zfr?GnLGNK-CPUfrO?;%{T6fUWbp?i68tj4q(5sc3EO`SE==@5grT2<0^uC&a^mvM!5W>KasXCFeQGV5+TW-`DcS}-5FF`X;X^h4APu7Z`>Sw zPr{t}2bh(v_KL5O|6X6ve%IsuCJRFM`+bWUwcxHO!@^IC!6c*1Hf|JXZRd+q0sXUn zA%s~eH=@aV1nFqNX+~vV5A9>F%Au!mV*+`@HLMB1S|1F)5@?AkC(N9}HQK?V^|5uf zpW_Ct*4OB}3lr(D2DkQw19%rl9bc|6o_b*be$Yc{12mHniMM1BIuyC>`L`~Jp#pI8 zr#R?#w^=J<374sixDW4Yo$i^$?~-}|-E;W;eGQXg!z`wuwlfknMl7z3)`|R*vdcZl zr7&0c{N_iK!ck?!Q5LyuT=l~AkT%KGKR z6Z?gDd&JG6-(D)0yE>2vtV^zUa*Yl>^*J>Odnh~|U(N&;kk6N_eFcnzPQM1IMjj01 zu#mfK1tnMkU)IQo8R>ye6Qg@WY@hdG2zInpt7X5*jT1uzvLJc;xffk+SNN> zJkY=AQ4nAwwXD7a;j>(S0KYs}uC1%j^~n2XJyZLkP;mhGP~}eSxDdo7bVbthG^)iS z7J>WxidNlU=1(AN@CDPs1Sa$%^lj2MQAin>Co{NpSGw{b8!-`3LuTZoWqlvXt~li` z#K)pM`%`WOZcOuzNF;#D2jdyNgJ-g0*}iWQRi?2dtBp`PEBy{V4V4;HGdb58Sx$Xv z=EMKwI^c&$2Z8Ur;*U!aI|DN@Gk#eY`*goYJp|qT%DTP!vf2Jk^RC3bZF6bO0uE-f zf8Gqi=aq!nz;HLmvnMctuC?E%GEKiN_zHE7nGTiwBR(oh@2K#^a*(hhMchEV|6Hnr zupY%*02Ru2{6qWgpGx>YP+*E^@TE4QAM1(#@umN--UT(q1kuE&U$i`~m04QN1i!{w zEm9-ty@Vxlla;G{k$eJ)S9|r6=TAi}IAPL>OwQMjd4C}AP|&{mHQN7@QD0^h8issX zA(iagzjV8}KaXB9q^R{qmfuSDTX`}Y$8jG8sh zKiA1?aeUKpU*m)dug;#gC>&%Bqpx2JX(i)v=_9kxoQD*^UTTSl{NWR@kw4dDOeVre z4!)}L>s~+GI_7Yt?hC&G;nA^g22{um0%5Q&1|J-%7L*nQf;_X?J2I(PLOpj1onoqr z?`QsL;w|E03tK7k7Fi{u3Fj6{x9ZJ9{2@pmQ{X|ejPp~Bb?%v{jBC~9U&krmllZtE zBwbQ~$eAj^gfBLfl=^J3p{n7auLoZ<%;QNHkL0s>PZ7N>5I%HSn|4s5nr<8UwzGCh z0_Zr+%Z(PVIQve%_Vz>g;b$#wci%W4E*^Oo@N<)TPzfWiN%4d^6$DYHET26j0q~a0 zP5-oXAw=HSm>3Y}_4WnV1NGl;WiHO=Wd{(B*jFC5P!^8|&w)`gN9i26Nc_#5lJ^yy znPt!r24Xwr6RD0z3;O3DP=thZPIjjN`kWl$>mI3Ezgxm9FPl)*f@5*#q~q>$C4yRCEWlVQ$X~mOznX_O+^gbMsKBEau1}-LQKiQU)c~fh%s#8X zusBb7kz|0?fLjTi&7a=`<3{+km*V;-%WQhTSnoI3Y!HG&=8tvE;JR&kG01H_SNdRD zu$YXwdE=n&03V~Z{aFA}A?^~#geEZNAZF04b$;S3`%o3XcV!|YoI)aincJw2-Aen! z{+z2Xnfn2)dMUv_01%bTx=>H$Z{~=oUE!NiBoSou-3jEW>J17(PAc}5>sTWw1FCC| zPg5U-a3Ei7W<6ls0yL(GAlKIv*=0Ep)XgI@sB`2${nQxS5j&zbFf?4XkC_!I7d^#+ zc4zeD28{lmI#@A9K|%RP#C>^d*K0fY?nbxXll2ax1(V8Lqto)u+4AZpyTX}3f&#(4 z@Fk18WB661XbpIzwuQ zE){hWM9f9OR4Uv2ST7xt-EWLBANnsL7)MDO0}8LJ$T8k14UVbp1cIj9PlfB;n&JD3 zK?|K%yW!54S^5WoYsmX4lBIgGE|x=Pm;0LJ#o^u^28GTv{x5j(CAstfi{~WoZaoiD z7Dn7I?tvw7EZk@0b=_UXyP7RR&nE!pXR6FWmI)^LY z4ncUAtJ!guc2vQ$8{Nlkv3+gZwRAK2L0!7sNbx=iygZ;d-G#ug3D&X@Ss=7;@+wQ) z*~_adeZQJcSh({ms&s~6$8gz8ADaeyfb0Gx<91lOMa#?+? z+!rFvyQ*#nQ@Re2F5opEK^wR?s(jXA9N2{6C8V?3pE1Y{pm_0pH|8x%S><9xaY@%AfXb?x0mVrMu$@rJxCXM8T@q`uV zocT!!6Y4viAiu4rpES}b(Iqkt(vra|?Mw^?UzkFLe%Xa*O*+F*%C3u!ey$kvT`&!nuRY{{8I;6 zdUc*s&=dIk-yE*K7YZ~GXyYbhn7p&_`1)6L#9y)WGia+Bs#Ga z(T_}@r-gOsTTY)(Ez$som*h~7zvK&@Pw7MNs~#KN7-`WjP3c_s!oe!Lf$=YN}uWOCj%>Pk=_ zID+BVaL0aJ-%4~%K^$^P0kaR6OK&&SD>Q82SJ$LTJeoL)6FW}|(6mZ@MSJO3qHznq=5Tu%$U0bVck4j#mAJo;UF{8t1te6+e`!eoy9<2T%yv2^bg{tX9IQ zxX^lEk}MB4Oj(ytM)U-t-3zpg!blPpm-f*<)tMmNB!VlvG_F?&d(*m>& zj2PyT0@tzW32E|S`-~*OA;Jnu`jMoTclB3JR2>=}K}Qj>139hk!BlQ5rBC6eb)};5X}I`r~&u=8<|VD z9Q&_vtD@(F4Y4Mp#f-wWE@ANfi)JEC0IW*Q7Ja;rmB#sj&c*VVH7-X*WvLeG@D4be zPDu)U!KP88FM!k&;ZL;SG#~DPy%6zc3Pt+qQ?@8=TbN-1>v9t(CG&EPI^a$zP7KmB z5m*+I2?Ia&4DI(d&8puh1C_r82$P#Rx$}R8w{+qFV7mSgsVtgV^+zGaTuGJ0lg2eE zpEFgs+Y0vt7e#E)zGUb3uN?6VZ&-aRzrq-38}UcZ(Y>4=9J6wlkw3Oal7`Q;y1-ma zR@|=x*ns8h65wA5OOSkxcn2i_%%;mz`{4U?x2vMZ2TqDb+6DLSMP|UesJ!?ViMA)n zi{?$qf#oD9BkNGV$7t_cpF8sFy9Dab&nl7kuLBd(W+Ddk5fZ>14p6mp21JN!8S@f^=nyMSH8@83BXh+X!Y?vwBE8`HY|&ZNujRkUa`wAP8ao>G%FPaoSi!cEJa zPAMjWX=~JeGkj39`#~KldFmxsDH@iMir?RhI)wF^^El*dzp$SoM<5`=l_K_7ExMuy zj_<%Eqg)Wt9EfgiRV>qdUeP6tENxGvn-fS|>7apYoc!Q{McauS^=etFI2tcKf}vF9 zUs5VMh*iZz~M&lavMl0>i^fbMV4-1MOm)ZNCI_36Khh~W_Q*Hpq z*%LyCb|B;^6;EVh4LZJUb8TmN(qTnQO2bi*Ry`XH{QO1pDLImK1S`GLgo7BHDujUH zm0Aspx(bAV8Z+vKJM7Fh)^<(m?J1VX=%+Oy0u2QN;`PEdkd$3LqHr;6@WD6hjgGgX zCG$6yob1Fi`-cCwZQSbffD*9x<`Bvifg4d`?pu4J8g)A%}_(jZ2`*>F& zsA-tSNG+7{_z!BHUH)V(}(T)&Wtkv>Hhb}_M*2H<OUFe`VIQ^HyUb*!llHt% zWc0HXH?==LTSB|dCb&QiWjZO^IrU@ql5>tAl|-~*x(=Nf?H!z9%BVS8H;!cqexmlj z30a~gIlr1U9DKU86_w9}ynLec{-^Kqh?`WX-Z;5eRcgHG8)_QAp54sf`<>sTze*hJ zXhC--o%)kWZqdY!>S!k$nNBvEFYe>wUu?|0X1drgjm3C3pWWc{eJ7^Yb0sfX%e6>ogGM`q?7$vU zIPt5uLJ8n64OqL$K^4qy-6vr9htd!c2xSa^2GrJ-AlU=oHwhyT>#~LiM3Ct`+tVTO z!xHhQtZc#8L-R^mDto30ih$9jO_n@o-zU|zFa@goZr}PyX24RUNw`~aU_>B|C@F;S z!BA4S>@gAUT&-@E>hT&5@B>&R0_Fl`Jz5A+p_1Rh@rh^xZ2S*>QNT+HC_iwrG|)f+ zZT*}zU)V%$ZvPe&BeJ91K>dfApp8+<*Y(VoKO1HC@_PU&W8_y%OCQ+K2A+9H6bZZ` zmx)S2e&kJq1%Usdq1S#1Qv#q~=q>p5EPjAf5gkqQ7?Q1u4(>gchef{G=Q9=yvBT6K(*c>2&(TN)}j2Ej2RPv8j+zqhuuj2*h`9~w{ zpYlAF;U`!?PvRXIK#L0XwDf&zQ$r2ye$ZZtY+hzXQQ>@hJra8Hp4yhY%D)7-CEtr<|E=Ff7$ zTf`wri}6b+g2RwaLy~^a4-StpPXW9fMP~cw?1KOjByk5t8H}i$&%j$;ssq+mpRF*# zVOWFKasyq&^3@3jcxMYeP^4DindfU3 z4M6xE6L$3BMXR|>U6nl=2Y=b3%fEu=5Gzg)V&cX!>_u( zhUb(;hk_c;a#HkSQWcU-r3FWs4>+J0C3k4uTDX;wmZp1Xr4&9Si2&wi#^m})dY3m? z9@y1+Y|vAA(S(4cA1L-{#K6L98-Awfa&WN^6izi+J_L~?jY5a(dEM3J zu9l+tO8m*&ra1eT{ASljrKxw)o;yzZCO6@GI$zPU#28w{_2A2DRMkwMJZFRfg-|JO zxkUi$#4?y3wAMI;-)Wkjt|UL~)&-FlrI)2NQnVt-u&(Ieq|b8|X6l{Y+>$Mp8G!N@ zE16?7vR8vdzN3Uj^}Cmp8tp z8EP^%8%tuosP}(1R-)DW*j3uh{|?8^6#QF{PoT)U#vDvX0%Isk!8q0Nch;PWJlUIE zAFVXJCy}|R!`06O?zD6*C39`v8Q~*U<3iuxb5-D}9I!Y@@zm%Hx(1QX-6x!862p=?% zM^WC73#`UELExdx#H_^I=DaHHd^mfBZQ$MV$?5pO(BAhA^b+dIsonwstNR3%iS>gvW+2 zcf7WIROHmws{Yt}m-sXxdAUggf?VIgAcwWsh0TE~-FWh#=K*H9-pJq#a`K$4TCW6! zRmgzu@9i)VBgDZ&g(7|Sz>*eJc4h5VH{7mmHDb%F+MG~33@R2sM!zH!>8zzu^=}v9 zU-a`D{h^vx+-5%#X%CLCwnng^o6A-_2#6hdT--1;K3)w}_yKwOoR81(V$>?tBzqQv zk)&~3E7|83w`p;1vuj&kI-e+m@#}*Uvk?v$#&-S^+*?P60t8gwGiT&~;B7obT3lMO zVlyrginV`Fx{`LPA<&TRvWo?(W<_TGE>Mh@6N5-IXQ zU(EH=V)vGAl?yFM@P)^~6x!zoNkN20wqkFk%=gTsF^kbI2_;?Bi&B=AyKApXbMd!X z0`lU~sUM@TFbd6HF{p*W5UnYUxdZEz^S({NN7Y5lbL2p$2nufjbq;Z$TYyYsNdWv{ zyhftT<&X`;cr`2U)3LEpfDmpM98=;GomxGJE=CGAu`Ypf-m|Tq2K>zKpH&T|K3moU z`pu-EeziN@MdFoKiP5#p0etKF8DXdF>NN(RdgJpRT~sK=tUuhtuP{Ss3{lt<)D(d* zCtvQ2^#Ro?m#%5Uburk!czCas18{d&UU&4!y1?DXc#dsXU?h*0W~j)pfKPazI$CZi zUv(!=qTh*pd6{!k_pc6&-H-8y+})p+wd|ncmhQ0&u7Cp6shAuf7Oy znQOYmD5{TX{b~q1=##Q-fw3cc1S%Gn2&-|V4M?{=6N41%tL#D_kUsChp6k3|Xr%h%6adGCcP87;0qzRNA$Xc`cyUn-!)Ht*Oe`vRZN2^&RU@psx?4hJ@Mu2A&^3SXD;>oBqj>taD%B84_VfuUmaA(@BJwjd2{;DO|o`cE7a>8dACyCn#L;3fMCkrFk@$BY$ARyjqB=@Ucg70&X9s47*`Y{kJ zdG!3nb||Q6WpFC?ve3du_(fsiUM-IOxOBY?n_vcv-#uJ8PPB|pJ6qp%Xjmr`4}#cF z6M8s*5zGXIGPg+uB|%v&sOZR?shg*kP|5xt(k&(JN4Vz`^V)e67cM0R3H@DB@|nM_ zfHB)?Y({j?%9flU_z5ai4Q;4wniV63Y5&W1W4S^@QO{gVUJ&G;W7y%LMApehnt?k$o$)B<+dTQ|N zVV+9{mh}rUd(mP7p#L+zGziMA29?bD0_d?BU0$QtD?b;OaW7t7q8T)Sxj0`_M8aw%?{DXgvA)^i12rI@4SSYOic!xf${eK@ zu73@e`6yoxe_^TWjJCglm+sX#rJFEx`blYN! z?Z9@YjoWwqXqkR3GF@l^r9n6DAJ3i#7l&9qb2QWsGB5e|{4HYh*Pi|h?rWRq@d831 z*ZD2C`JqZ!CB=M!h=Bp;l-s6GbZWi$52S3fm;6y=eC9_xLLoI|xLg=`XcP8P4}h_5 zP2kJcv#ZXXlbXdzX>9p?Uq*oJssnivk zB<{!59=Jzgx&RSCGMOzLcXn}UgWi_-k)OwaR?lb)is3EID)VM6o~sY{S@E0BIzN)C zSxxifQ#KxCPK~rczMfQli+sROUTo6+rMUdd7goE^Cxn*7Ag-2oT~)4_xVe|34ZuNV zZkRGc<%cza6a0-eVVX!L+=WJoMKj$JNa8l_zMuqs`AcLzpf>vUB$CkSBo3wC#NZon zjoXC-tz_Z&(8Y@^tqkvNEp0*x`-CBlmlC0$&xQ$|@A$lQOeCkC@0%JS=Ch7Jpm&0d z=a^2oO9PB_^BBN96j|l5T_%=kS6y=ub9%x!BL6L)H*tm#5KxfpcKa6jDJN=`_ps!1;-igGAroRc#CwV{gE)Y{`<{RY)Gl^ zk3|fzRnWKYqbn)ACwjA%Ae4O{SB zHwd^%c|DN2z7l3(6sSQIS4|8#h+|0=I@y1{{Br<9nFRg$_=`H#q$ zQeQ>}A9dE*m3bm~8?z)}B!HPjV`_Qe%EI;0m&TEs`9f22r`E1|w=zc~`%)|FsVE8H zgBNw2EvckzQD0V`=XQ?uWGxj{XqqD}O^YrPFDOeVxn*m)=>a1U+I{(6fm^flz{5f_ z+SeHcEKjC7c|{>~f)@p#sv6{Pb!l9@w|^kJZ%X054Re?7Rc-%F1GBp=tI(}8ElDD@ z<>9L^0sDP0@GxU|k!9=wHk61dlu|WBx^As4x=L0C&Qs4M%ho1 zt}bL5D{yH0Io@{ElDzD&n**rLyd{$4{*L8-=&7J}Zt~&;qpePwpX{>U)bl~m$0|T5 zL|J!tBdWMJB!0sFjRss^iu@inZ=P`<-AADoO1NLEEji9}Bx#&!^5Ut`8wC|cVI~S@ zDfZWaV0C3D&%+M9E1C<=!p~^MS8V@i;C|R7Dj1xfkKWnKGP)iVhn<4xt{}f_GZKAN zs831S0_QYZWcdRD`TF??`#)QnH}jZI7lI>!)qbo-}SkUQcF z>Jk(W*oy(#hF)C20r}*mqLBGarnzvX&F320K>^a%_;X%Pk)+ZSkAjRGS#ok_eV^#7~Aw8XE9= zD-qC0VEV02EsuUglRxo#Bg{QKhkI~}tb!nmI@Mp;VO1;GaZ3`Nr+p_j`Qq3z+Z+Xf zDQF&9!m)>v7T;zj=Qcz~;)R{Ibf^$dX>QbD?)gCK6QuSoDmX%;d?R( zmh7|1te)DAmJiqIqJET&`9<-gD;@jv1kHu1^E5uh(gGd@F^BjVNof~csbga8Uy*G4 zS*vPmF@UBS5L6R#x!G5MEK<1r=V(Oh+;}ueX0i9x(IAc1VZa9G7DJ{xx#kTCFp`c$ zKsf=z^J*;}Z1;XW#O@WJyWf{gF$-fxt|rD{(0MnEWHNtLMBp?|uJU_VO)T-bDHil& zBBr?%Itc1q=Kt5APT>{zbAEtj=o(Vu4__VgR44&^PI7(D4|RFVgs|582|v|`k^svT zoq^_LW~0mM-{C5v3TcTr^>$;~uc7$Le=Nk~=l{t<%s+PxuTdp<{aTjz zO8eV3m|w+21v3$d1^a;*Kcsh-i?MU z5+=_CwV$F3>0lc*PO#wN#DDO1GJEHqiIKJM-4gtRR0B{0J|4JtjS4>p6N8K(Q-S$d zBx%M{;jlZXzek@TN9tTN-&xi~4Z|NDS&GHG$CRD$^gy;}F+>S}=j{7!HU&Wo3Y1L7#+{ z92clPV8)Gi{|U^P4`c&RHzm8Th!X%*X@>U6%L(wVfa*U3F8HPX2DkmUfC~~8 z?zHANkx!vWbc9RW{&wIzK>s_$13SP55Y@+(A)YXSBab-nXchornpWZ!7>L@O&1(Fe zZ6p4{nyixmU>Z5sqZ`CPRO`MwSQb#sZF$M`xGiTo>pKdQn_IAxbm`}EZcF|FvbW;p z;X1PzA29;7aAg93f1V2fIaj0YYVVccJU9&U6HZfxHl(2j9=eacWspvW&=gyugzFLB z%XJCTt)R@=df4{yNOGwI1Z!pgK8^SXh);w3Stu6nBLkO;xc#SjMSJMzFYnvte;Y|QL*z_?-Ux!6k z+Czc`B>T9Z+|AYV;Ybp2Q^fcF3lQ&o;$}Rk8MRh!%l&q|Z_?3LnvcbX2sHHvpOK>% zB!HeZ^PDag;85rCkBO$Q(=)-bj^@WBwO(qn>4RGzcYIp@ zM?g(Bl21hyBo($aK^_Lq{t<|f#k+q4t}O!eO;NHOU>N=Fe;J=a>v4ML9KF|L_;H{j1*nYa?8xr70mJAjs z2^}7}OI}={#pWQ97hv-L^jFowh6aSIny%H;9>Tj6LH!tVK*J;1i2=%`DjcUaK|-D%$$ETUf7dUxv&6p7)F)E-j| z++RTM!rG8ibH)f$(TfV{2|_pN+7o!2AX%gneJ+OBmK!iG!@c7(hKJQa)g19%XLqsv z`=t%q2zug_MNn*Z(0(o8YBBU0?A88W9ksnfdz(EOQ3rzLOdzL1?c^}sd`>>_H+;vH z(`+ErX$G$+IA%1Vo5LcytT_;oT5ci{DCvqu2BRG3NO}@i?Xk4J{-9qC=+vjOkYgcM zD|v_dNilV487aMiAWCanmVkuhCLn3qPOEBh)XeguGOl+EN}%Mu*T@Qtcpt*XB*PzJ zUn6PT!3Db)s|@i4%@g9V_d-7;w2?%;>wT?0z_kvsvpt!g}T*Xt%phFV?|KQQX`G{Vx#)3;^L3jj(ZB zx$)1)>bcfnlbQzZoup^q&a2dA!}P8<&egKNaAg$uGuaXFC$i(f*$b3LV-Hwr79zF2 zdPu);y-zR9gz|QyD1?HE2b7iJU6B{h2TvOZ#o}yfm~Zcy>sI=r<2ihYB|AMc zwi~sA9Cf8{Tqq;}3wojYDt#!Y^` ze&5UotYh{UBnlB(_$@xf;1<9x_wDs9&O`G)J0VWRT`SsbeE%(O3u%$_FAo(I8&$uM zN}<*+mY86N<>ORJ#U+B;#}zTKLm6#1ZL%!IX3CS!*UK>~$|6dh5Gd;k(kmo*SM)2E zb;u~&cyfKpYm*5T8kGss>_{5oZ@^eW{Pc}2+h0@_e;C$`0Pc|&$aeJD@zFO!6}(Uf zrw)fWdbC2bFzIdi@x}GuuO;)=^Bl){hQFDTMrYJfJ#K5$z=%+6e0&QwL?6Y}d}(-D zb9iwOay|kc81iW65tZ_`cBhb5-;;W_E0tji&MmnaJSBPi66Mavo()De9+47(C$!B9e}jY{ujEEw5l;SsCEBhCUDTQ6wQ#uV%kT=z(P@OGDQ7bQVXC^&bGPPj zGTee0+G>l*CF}88GFxppXA}^@WmI@A<-5!&kGF|I4ny_B&&&qYMsnDI7t&Gr1mKQ{ z^i>V_Z{#Dt0#m^5eABkRU168?M1y?piGHDCO$gYmeAhJ0nI;Kbx>>!wZSvfP+!OXB zTTtGQQw)L$Exui&c0PR9;(PpfbD@sD`C>KeC*eK z!DTGd7kY3iE00Z0MW6FF5kfce-9K2a&^>Fsb?{RaJ?TDNd*n=vS4+A!F@A-R4-BQq2 z_HR{3RCiI8?(arrhJ+kUv)TseE$a(Z(^aKl@{>Ke2X#e*o{6(3Pi;B1l?0PTtDJ&e z*(WYF1=7}+#U8*r5(;WPg}K8~7}qWUJ^sxtti7Sn{n6{I*9(l4&Pz|d|^ zsjvK(bQ8>F@i(mZ8Bkh#`Gd^HPDoS5D;fI&j6f#<&y|Tb5aan=3oFnrpx+#>WGS~) ziKFRQUu+HAa+MXG5pe5e5n)DboQ|5!8K`oy>hignga)9GVL)9fv^%=GP>~TWdlLQ~ zu^G(~ZNy|NQ`M!0rCrQuw|CI~nb$&s({fiPWT~Y8b~e#zuj^5OK#B>=JKP;(DP_FY zA%oi2lzH`ixw)Bz?|&+!D$`j4(R-79+|P0w!u22r3t;QD;H8+z%;UyG@?1Ilb?>7d zpK?R65rZYb)f$G)skKGfTGG%8hPhrY?~}y|_#RRAf!^h#74a>>No6adU}mtB)Y}BfC2#s&CP_GvX!g-EmpP zo*dK-qgR!sh;sWu3Pu>-j)+58OqbZeKk6XTn z1Rbi80N*t7*f%xeDM$ThO9%Rg5JK61;z_Jy&hb#Eef`XgKoGSuRN_M-sDnMm^To+z zK$V`K{Z(c;>X_bgAw;H3&7caIYTghI6mi3p^{q-c?INS4L_>wv?}7VDtfv1HFyBF! zTNAyTX7xX*_5Rpbz+AECiw(ye*-64hQk}3+HX3BIJX@tJ7DO>WlqrV=l+hR|y=*z$ z5Ab<0zZvK>Q3`uprR&8#G3aC<-X~c~>IXd97o-_~;2)-!ETynJAv;p+BJk*o7WXt+ z6f=O_ASe%>F*S250k$xJ8tl4tWBXjzOsyT+I|X)KWX{DxmsDRkKK6QdUe6Gpbvseg zZ6k%R*Oxf3Q6k%7DDsE|`VO~Ug_0mem(fm4P!)cTFt;jm?J#0z95eF6zl~x)o&;0M zN9{NmWsqzFIx}MFGRmcPEivb-SquA1$LK=6^e1;`AMGG}&fI_}NhGXv*`pD12=a)7 zOuegRm~Op^SQDr&aX=gIO1^H7J~Gzj^;0K+BSZ1H44towNw=#*9q#G;*5t<`w zx39;kJ(u2`E3OWLC7P&Em)}eNXCPBVGIx6H0xw;SNsVTge25L+v?&Bh`hNaJL@p44 zAJylf1{yi{FCxD+!+$U!h^7C<-dl%NxwZYG&zy9ZAl;#Kmz0ViNFyoI4bn)%L{vmT zP(-?<1q1{|l$bQqDcv9--3@z8*IMtp*88sSyT1LMbDe$m+2ulX>?GvXfi{fjZk z78eLF{yP+i$)liaK^Q5RYAr-~Pg&HvN>o?sO+aV6N|`KDd|Z`%p#}{&$Z9zqa^(CB zuUIktz6~cpX7Jm-f16oLj+9^OL#DdUTX_j8M+cq5@0wQ z#QWxwx9{gWcIo@L`1p_FNBKnQB8;4N-e<-G-*&3ZfkMV<<@^V9GAUAr5s*EX-^G5mrcf|gH>$@aS^x0KZQmeNaqxBXk|$6k6naYCiad82vQps?VA|1>lPnYA?F6pYcrglf?`5inK*C$iSbz@Ds`e z$@P7wa)mQ8$7WI!y>T2-rjVxRKT@w>S*Lh-eB&9p?O{C`ofMiz9m}dsX_E=IphZj? zo>OT2d_Me^(T(1EA&oZlF_6?W4q!4tk8T!jZbf~O4gUU6@p88`RG$YDKSgIPJ-`P@ zs=ZJEYm^LN8-LMg>P)e1lOmRIpWi=dO4^Hmc&O)IrftJ#F%L*fU;jgC^!hmR{xKG3 zcwUavM}c!#up3z|MvSkbxQ^U|qbv$VSoDD4+cO`4aS7dd4kVi8R!so0_(KR?BcX9~ z3w8y%MACE*AcR#J5g(cVr4;-PY_e8b%xA}EFA&$5oQ?wl$>#+2(~FWVs{am!otItF zQscBSH&scB9C4-p4LnGoQ@2XTL_ELZyQ2Clzzi!1@+8tfhs%+@XQcrU0guRk5g*FF zXaSV`x1B&F7lW+C$BEt*;JCD%43Gk+z(hVea+A;JMV+I8SvnQ}WVqb>l3;C2S8on0 zh#Zg-GXbGA(Ei>$e5GOru&{iW|5+@|2Nz&c8lS)nxX1hpT1tF|Bzb$ zLI@RQ4+f>!Fc8$r5w5-f4N?Qp5VQzDEje1ZrC%6{xZF@FHmKc7{-t*NO{@0rFxqVx zaVV|i@ht$o683m<-vD`tp7L=FKNSVta2b{ktViX{<16ETT+Pu|V4mxzNH zwD-8AHgO)k>O(wW&tK@Yo;dbT7|nsVAVtsM`JXUy{zhVw}@aLGaZFF75&imT>s&X13AmJL~I@hN!U^-&2rrTMM0r z+(=HfG8bXIwIsxf7f|GVaw(OfYTxe{_#K*rQ3F#dP^EXWmY}?Rk-P9AQ3bm*o}8WM z$vFc+|LLgz3s^PEyiw#aAC4GtyrID7CFQ?f9A+r!g*R@*2cn1l+9 zcu0jN*T~#|okMuyF!ks%L-!pRF~cPTEF6dg^YIImQup@p1Q4jF(X#!!_u=8ZyX<@Q z+knn6I=;K^y?ptxT%?fj)Ti!%wfWtvzofhqg1CrboTNfs-YV54wbo;@7my9aN;{UN zyEC?b3m6zCcliO0Q~Tgwr1=tP{}i)>^!dMQ#Q-49N z{by{E|J9Lz*#?e^b&En-5|rzN*+0b@z#2rGKx_#L8|jLFc~kH>NXD53WDdv@B{0Bl zaN|JWd)hPfby+|6$BE+F_mhk0T*~zpxyqer2TaLmAq>Z?(0cy;_jA1b@`9N7r zDu4t#W?{{?xXJMbuDYK032PAxtG4%NMt;`2J5HT1EZGu5F*2ACK^o6k1{?K7bp-Ve z(a~908>#vB!ubZygPE}1(q;6*ap>21y%%UM<=QC6^bznGW8AnCZke{@66{60k-vYv zC_^`1#XfVYOB`VC+kme83+OzKuJN0@BO*Sz98(=rE;Ucp@qEPOcD1vBN-!+!n6^p+ zoEWi-eq+jq==z>yU7}QW28kvxodo_%j77nqzne}P*VcgAt}0e_)ntdrQeS{L2db_3 z5a4(TNBmlF&w*P*Z3`=-52uau^PAo3uxVnM!6%?YHUBm3{)g#g1{g?83;oMJb}51& z&uxQ>uJ`|=uSXd!1The$uR6X=N+JXX5|K(5 z52zm$A@aA55f#u7*0PUkst7n(tKEcPhgLyt8Gq~H$btBEUyT^%vdh81B(lK*8$=F@ zF9EirUmFA%kbhcUv>{5aZ;nOUfNlX@S%wDKk^cYCgmM*%h_(FmJs-?fuxX71gYL5f z5B$SpgsNKp(S4VoW@W*9D+6G!0*uWn62wrH$>%TCdZi=@vTEx9se=Oi+@}|enYxEA6BSZAw zz1|-tUkPl?n6ufOUv|$@O~Lhi7uO;-SflLmluFxgdZYkC57j3-Gnie0eaPBrJj)H- z(z#zX04nVW;O6>EKQ|ZGn$#s*C4qA~=sthZN4ZJ!jP|v`!MHkGIByC^!dN)?roq{Z zE*mps{u7@WcPmjMo-eyiSHI{QZ*CVUv>xp zZVtJ#eU?qx{Vp`A=WiqDE>`SVGsMWVkC>R@a9m|Fjc9h}>X2Ou?CQ84rd>4zBeAcZ zucn-)JaHEGqe~<&Df)^7yH#4*n5@bwzg9*E9QdVfyc~a>GIh6TMK2 z#>Qr5WP{GX1P}#0Rc(kz7H`&)I!~{3`ndvKAa}eBcc&1oU?8u)3_Jd(!o*Y+h#PO> zsq(^CwnBN?8jk_7_V}wyn-N@|yDXZUTu~ASu+BtOVT_((=Ux=cV~VI1nt^ z`QnT(@gY?tGL=X3Bomka9{1s1y~wKcE(?XqI-d_FI1%aQT@QR?u4LK!Fk&)?#-gtW zTeY*rN^cT+(aYkT>Kj^S3~oU2D%SpezWjzFN0dC&L-kwQi~LODmrlew%-{o_8e{@{>Zmxa{Of4{%QHbS>;& zQ+O5H&+8cU_O?fCAI}dBhDSzyfX}h)9**}%5EI9HyKc6obGefijiOrWLda>NPP>`EDF@}Qq~o{` zdP|^qRFgKE7B<2nx65p`Lq}hP<2>wEU+!jMhZ@gMvy0NSO3FOLQv94KS6uTd=yxr^ zPr_>Bmj2Z9J;5BlaYRzZMIB8sd1G48S>$~OcK6|I3dG05t zS=30K-*&)+xI(2>FPu)KyeW69hMfu1eporG3P!8t6}R+^TrtT(|MKyHt!(JiwNRFH zKlej#pSKrFKH`-QOau0!yO@by454o#9Ww0B?5_@gFu3g2$H6n*?ljl)anI%|x?Ior z$Ki@V-*>KAR1lmuNBCWyrcUG+5s~n(H)9)$roLAX3yt)78uKVq5=kK>e@Zt(T zdrduME`HZj5Kgi4Ced}laQ2cRDYPCgHh8*C!aw4;M6({Oj!!Wl62BF$6iMFe+i?*7 zBu#Q}-|<=RtbQ`4dJ!l7rT{w`RME*9@r>Uzy@G_zQ`hlD@9aCJ$oxPBKQk>j;}vhV z?H^rXPHRb{JLRjA_-K9~7u2`=B?Xzm5si_y6Bg(S7#`P;K4gzmgBfMM83RTCP=U)O zzUK7Zmza&|4jPIL55z@?8 ze|fJUL%ZGA4i`~&`8|{ADx4Q{lJm&-`E_xwvW|=AZ*4-GH}|*Yif7z=$^uwq^v@4! zIcx`9(HW3I`uX@y<6lDe&vH$Nex?g!AZIqZ&A<0W>PrR?0~=W6bas;KVj5PwSgA=O z9Ki##9k*jmQ=3ZP$Ex}^f!Qs;M>KgWDd(eh&s5MVM+ec!3+W8)Lz`NYvvBpVvR^z2 zKdqe+s>nGSNq$dtZf#_1O%uC}xo4aDwovu!i#Fvn5?GI)JipuV0-`wTGG{E;lXDZ1 zxrdE68iw5dPaul$d(JDkXB zj<_v-iTVOh88nvt;Ko!WeU~z~D7d$)3C66o{=gjNkXhqz7aIg3k6E#81!o^dHf*unBUA#YOpx~8zSVxo0f@5csrM46nOWYMEG z8p>Wl#2y0KTAhVql7*9|%}?%ZiJc#9!($Yed$@YgEjS6~)O8ms9*V?5NTN z($=&=Z*m(0S$2Xwb_AGkB~wGwO)D-N=V&UllU#T3&kerbhMrX#--d3xgL51^Z!cd3KQF^r zA#@k(q#YmM#^NA#@j_jiw!!7+p5Y2x920ypMMO9!n2SLdF|rxzs!&PpG`Q_RK1>YP zqJFxoN?!tQI`eMLUp6@F>q#y<1Wsi}iZNPxdQb_c@G%^&&K+oL#Q5ULb(_`s=fM5G zLS)1`TshS>+x4+YOA;QU?1XC(Yz_}ca!<>o@!-we$Zz-YR<${k0z@c4qR<#eV4o$< zQMtT;i-?gmX+#-*%@_SsW6=?a@T-xW!(?aCp4O*HU5-S|h2`&8~55+x> z;DLP(+#x)Uim$_v`!;*4#HqbP+-rvOO&9eyb&HFa+T!l#f(n=(N)HY5aUjt{2CDLC zz8Q;R(t(xPgHg@=flcq30~3#3(5XynV0#e4f$S8N)vv?lRER*lLF_!=^Q$xN9Rfmu zE4o?4%$XJ?fn!Xx(tBJFixTQh@LJL3`oe5O(Ta?eb=df$CG(mCtJS%j;QUR`@X8kShs2j|&1igN`z zMP^A!%==@)(@CeLAv{ER{er}6wWsKvG~bb4xj_x_%S`^-HC2^oby;nCz%y3bl$)G1 zz6%!K!c*r>VQu>LG|>I)t!Q#_fIH-EwrZ4 zoDYYfZr19cPDe2F`1j+W{WK}ia&XObb%RL zw;taY2fi>-ZuN0wh2pd&h_aL|V(`?}iGTu} zRecEZ;eT5x=R4n}OFTDix=a?d7tY+gGiSd#zYQ9)_RcmvEqEFanYvB4?OpTNuH-F} zy}8moXF~US@*XtYb@t!{-R!QM-)l}yRscG`TIY)Pz=62D_L>7sg$Ras_Y^z}%)zA| zr>Yo=>M0E!O=d>$f%p6L&FJM7>L*hl7R7H=&>|=Nh@!c2`F`H@i&7tqON1efzv)%m z1(hG4TI{YRf1YzQJftf2VH$JsA2T{(_v7XvyGmwVT(_4Ll&KLsPB~scZm+}B5^kn$ z+7>we#MyDU@Ve)@Smp9aA2z!rbEdgz&q_wWU5UF6@n!t6+OyP+IhTXUpwq!1&jP*q zK6bN*Se+2Di$J#Kts;ASeXzcBsf${q zru66gAl)Q_7-j-n)7wY($N_8U)JoUP@-Zx=dQQX0q2UcB4{xGK{BoRlgPc7MvRzTY z-9`n@=srIGgBixC8u2fCyupVzm*b$@)-G<3hQ(PpzpuO~!_wWP!s(KEYhix$BhXPj zM6ciA-twyNtv8BrIo7p#&r;P-_x#__pan!?ihI>P@8QRrP304F+D^dK;VKX~Jc>Z< z_WAk3cXFH6r&N8%gP;gpwKtFXd&YyEbEB74b z+H+Hv)~P~A>9>OJQ57|WiHp2_z)5*``UIn6J94fbK^HnF>_2@mkaNQ|l3cn<^~&k# zvg}DRx||dT*ec&&{`V?PAeqg$LYYSJiQz!j%?oDf`O@Ug|SsB z@itt}U@PZ)jX(Ggkd}=&fTh>}*G;O?CCBiR9B3E(5lFrbu7ghx{Ql|S|Nqnf@92~1 zuW1%*MFX~XO)rG*6@Iw)UMoL+=pC`mt2n((-RnhKb+5xDtTq(NHuYK-T}fD?b$)d<(&qoE561%l-N3Ni1GXxP3HyQdNU_dLpcO#WIVSuNqS_ z1#?ETIf6A;n2`8Nd^_2NRF|Px8lfhAZO`W6^cem9xA2v z*TOZ%lKR}D@=XaTT9e^V=J!RW4a%?fhpb(0w-CD{P-@+1?Y7y~CS*Ifxj(RV-Q4=c zsf6^_R6k{_E4#}2q0h?JrooS&9UVTLB1B+GzWlrLCBa@33eJKfU(&$Xq3t6omy58f zy7;*3Xw_;Vxi7)uo0#}8+s~mm+JP?jo)%Lo`f3Voz7UJgge%MRV$qzsa;Eux7HIpB zikN;u3Kq>3O5dvjfx}T=zpl*`gJZb)%+`?|!I4vnQ5W?}kmbCg3o8K*q_|`yRm@U* zLRHM>qpWwaUgj`h`+-riOM>(bx|}sjQL_K~;e?mSeVdE*Yjgf|XA|A65+!~M5wx61 zs$J;y5to$go*~3R@M$c4=%ot&l1I{sfgk5v-k>A=t(o0H2)LO9LWa$6A)}tI_T;@a zxcVZX9`#CS`TlX>)U;`>DuZ_}AS~9;yr2Q0X4~QpTuw&lr36U8GF1PWfX%#^3eXec zfPv^d7!c9s1#TsSoF4Oiwg-{4ex$U3okS-Y2h^?>`Y065W- z=P!n8u)^V^0uaExUe;zfZ0O9^CItMh6g_-hlw; zR3!SV8j7y)YD{8I`R2ADf^_BV8|$>&CQ%C+LvqD~(+0xT7|6j1#Ds>;N4gz4yE26$ z_}JQ!CWRkcQgIx;t2N#%dJQIjXfC030f7LoFM(+nt*^X%lG!JHI-CS)KEGIF$7Cv3 z!YWLSVx5ox8>@W+W}j23%_RfwdB?c|odN(Y8cXLzY;e(pQ(nk!ffXbG`sA;v(Jlof zkep9}K|EX{wB@O5AB)RLZu)Y^e04EGUnWwSpiE~Hx?Tj2mugi>!Nrc!PRi@gGjr>M zy7D>Re5)56TNE_7|Fo?1`rAS4n7zOw{L85dH`s3u%e@&~dEPMcz)itt_3PZ8f3Nr4 z`SrZF%$8#J3N#zcOWUZY-a-7|RX$yrDf!WX=e{ti5&Y3;73AFb&VRR8qFT5#YI5Em zh+&$+P6}h*Bqg>r+QE6}FN>adZOG(NS-_E6uTh5N?3WjA4Vw&LXmV;n*!UN`=h=+P z$14ahKp5x=iMP=|Tm@6=Jpnfkw7A{*{GV9{a6yahfcVln_Gnu}}m;4;d= zC` zhT7BbhQqO=Aq~0c{4jaOB-E@NMZSVuc&7@*DKpuiK7kyn|7e>YkY|oo1?P{uJTO&) z#N+sIphTFQ5R~kvY8BfD7F`%fEPk5=jIeYBqc&NXoG2SubsvM-VADo5s9Xa)ye<-} zqs#(hWG4k}`qQ4S$_gKO4Z3s)69fVGqgN0kYQ4ESe)@$W51EzJMh8?LJi=@*FtwEa1n zVj$w1xx%3GhPhmn=qCSCzjP^DOJHLT9agD%*V3hB-ZNLS3^PBMqbM2xtLs;r!nc3y zdp)>`5v%swt6aaFG;I$$6{ZG9-b&`^G-$s=FOr@TZhyOW_^c(c8R?4W!pCUhhcO#_3;k^hjg#p?tYcDk!>DW%)2&sQ^*LxRxxTG^8Jnn&=n=+p?&CO4a z@9M^~2Q&(TYuATM0?VkPQduc-g<+ey29epChU2C0Ug}xhQsfhATPd>JR^ z=r0nUY}#nHrnJjGfj)ceVK%GWf23AK^VT>L*L$0rP{Qp{u6W2Q+#wP*QAnYYSuM3* zY%o=3l~EmB_6P#!30xE9V~EOI(jWiqNtAJKe-0?}hd*0#2jNb0!%PJewv<-tYzOBp z%59DCT0oKZcv@q1iXW}=w4VYG#f8KL_h)DYw}+L3U9er9+Rz3YQIeuqVvRaam=xku zN5fRtkNA)s&QhX?XH1R*UB0h!mzzX`5*CRWFR2ik$-yn|TmSq+_Mq*UQHa@`>az%C zoSU2hE7sJ9KQzpm428HU(tXGXjCl&{J20&M%mAFqoga$G%DFI?G*)NUTu5Lg)#EO({a=>EMs>{aC=9R*OZi*jVSNbdRyxF^&?|g{+YA zrvg!n#XE3Di)32WTX3Z2BfEKZbqGJH3V-U%o4!}T)%&BV@$Sko2B=txn9Qc82NI@A z&3~Bs<xhZ0AG}uL;HmK;>f}XYDD7lwywqs{J|2|W`Ip^25E*R?RbQ9R+3op~U6 z-r%DWUyT_m*3Ax^e!KGQIU8J=b<^6F+}E?$9Dsk0-7Supn0BtKkI6aIa{ZNgVgp@F zc-|XVmyx2+U<1BZ|S-8P8qXABO`x88lNsTPA!Q@4=r<$c=lg{dkitNcO{|?l6 zTQ?RiXHs)zdg{+J*zhSRL*+{-^5WC=1zaod)UOBh>Dp7J!_`i_Qc``!n9+&Qvxw)- zi)&aJzJs`jYX=U`!ozPixn&={f-^W5JGv^p1Zv96KXS*g58o1C`v<)ZsLYOc!SiK; zuba1hUFxyCJV)R`D^KWz&5s=+u>Tmj@hSSE){#7F9rcp|mElrW0mL;v?pe2Ybg=b`cm>8vmpM%@q=S8A2LJG8=` zk$p@RZBIWLhjox0r`$d6R}i6)U*5{Ei};C&_g&sW)4=BXgDCkLEqJ=?7!*PC9c^JU zFh;MP)o;bAp;W?B^0eRJZCoPs*>%O)gFzgJEcD>UNFUpD#z(W(EVj+P&fwmVFV^Ah zVSgJCQ3DxR`vRDoW>2$M{C#EawO3s8zK>~5NSdv6i5^;A_CBZ+as`M~O|D!&Z)R_C`{g{%h5LmgRScoE z7Z@2k3d8Ca9TCJ!<%SW2wrP(x0eHA|T!4Y%4Nrxx!Wb(~!Cikdt50P4oy}$aCUEXR zsZSM|UFywgv6JjBB6##ng^0hDzw5R!JM~}Zq);cAew3vaeqFrWRrK`CUn4(|sDtQd z_gn)ZJGFfP6=K7yWAP51Ee;}_m!0zs_LT^^6l(j|eu|OHJET~dbcXh(qG&6hvMxbd z%kIapiEDOS-2pUhRoMz25d?U;@mtfi@+Bbj`k9Lye#@(S%&NT`C%>E?Okm=Zi+YB^ z5Fw%Id+GbIOIKEKT-$Rd8TLy9tZJ2UznBrzjfba7(${DcU@klRQ%e;5I45F!vt`@E zq=IP7JFl*TlRyTzlw zVnKeAlf`$mFZr;^ej!Y(%dK$`p_V~2JpsqQm0WSXY%Yq%Xfm0+zqh5-U2N5j^V#j} z)0w(;*^>>lO|^V;{R)@6&!4sO$l9(OQsN(5dU9YR?gWk3Z(ePGc`diNnqHJ8xKo~T zQ%8u`;%7O2V@70I$;Og8fX{IswH(aYjo>5F&F*iRWglKm1SHd~%S7aN&@ZVWqK zKy=UH2PrejVL3W7HAHrLr3j1o6RYbNe=S&a$z-Z((T0#4FQH@nH@4urH4(Uo^UOsS zJv9@VSd;gVsX920(3`HfRtpjxUPW8&uQgUc#$x~u9d@^SNL%#8p4(9P{kNg-cj&Z) zK=i7$-6KSu45_W?QKpx|2%)a@LtQJJRGgdbW9UeMnY3Sf&_lE|SQ-}4CVP()xo@u@ zw(j(Y7Ql9>khj}!cc7S3)`8%~gOr8~RUs&gSv8Fe#vDxocYdRhp=ZN$Or&naaZOSq z+=3%UeN6qz9nQ195lLP$r-`s2=Cuv1j^y-)XjgWrz;kwp4J;dW5$jvaB(s+-E;^}6 z-z(lH!n4o)fFzpkZSh;Z#X~EPlc?nSgq=76!Sp*Hcwc{KN5q8afqSZ5Qe`TNVK9r! zZ&j8_mj>QxDts}0qki*Oj*Q?AO0fQkZige6Q}V4#9xf;PA;QWO&e&yJk6bqy70T1G zAFtXW`a+cOB(^M+G0ue0zj}``?MAJ|Agc@-g3ht}Y>T05CZ*!J#r|jGQ)kEH+PgJb zHqCL6R1lt=hYI)k7k35+(KRf;l*ydzxx?3c=&%y6wY$7jq=bCxM3h=SI>dgG=Sl^2 zn_K(xw>LE|acMoXG3$FIEn<^2S2}bQ;B_n(kwE__U?q2_f}kXT(3*Gh*;SS=Th#={ zQpT4czMQywG7c8Guzr3AM|GKxLERY)rT!E2{yTejFLk70nRw8Jj55S7qWO^D{p_-U zY4UwD@Tg+ex%|c1W2*3a(@*-Y-u;fY!dqiEipL%jn>b51#$oX*pmYZJ*uppU=s$#@ z%Qe3zP`-u!Ozs%HoZ56$oQ{ybZ2C}%EA7)%X)I;~MY5)bbH&R?+-<4?;}NU=E1IYqm5zDpL@7qp%{-Ek;o(j8rYd zb+GVQntO1A_ag!Oz2jvL`K6aPF?M&KhZtixh7ZnUX+}=7`r+Tkfx?@fvlUcK_iXj^ z-|IM>uJ$7C$s~}HmiD&6F{s4@r}fuAUDy(W(@Xh3q7S}a63_E2GCZWB;_}bC#Sy6~ zvl|k_8|QDMJH_|T}c}8w8^iOD5cUqU^wYs$EP$vn*#~sCC z42TB#X-S6uP7Xo6V(eUQQrS&TlfJfih*I2%>4NN}t~-f?y*b@OyS(yH%(=+i6Wf?0E4 zEOMj%Vs`5-bepGod^_Q;L1iExLzS5GT{5okYfbynVO8gT2Mp%Tv;4^tLFA>b>@`Ow zrri`*PILtV?QzQZ6Gie~1W%BO30R8Rf?KDM@6kBSM3Xej>?IcTdc;4O^qoBUTn_i#Uf^4R$`$^^=7CMiXRy~OO;iM(F7IJdCd zC;JITE}2L+7$cnp_*H+=bNnX=0b?phClozZY>WA4jPXB4 zL`+Z>jxCwo|6)+#e_J%;7+RrodN?logY76 z>yWX1w;$wBT4>_9qup)^Xon6Ddqp7IHU{1A8C;t{xvQlUM>4sX&upX<$gHNsB*iHsMs9@f!spr>uPe2~RbJ)7L z5!^!JI`UlPw`v(Z=q2{M7XXCo`2+cyp3J25OB0MGbSK-}OjQF?AYMF+s#?zc^6m}PzhC|ZH{%ZuTI z*j~%)9?9-CMDE`9uvlCYLVojE{-M7~czF%q2yG0Z|*blFVsE)-Z6OD^~6|KbRrelwr*6rby{8$30lGix-KZmW?MJh8v= zP@1xnqSa1Icg?-)S=e1F-)e&5ru$FZC^=#WuBMgA)EhrowoNPZ@vhU#Lce(6e(;i< z4M6$J#vot#hsJY>=XdaZa}bJw8!7>`S{{K-3{%8@&F9<{=hb}UWbCTqbCT2{{aO)~ zG*3j^*<4UG090!K08|v>cCmsOq$Akz-p(bnR4GB9Sye{fX#nJ;Ug;08`pZ5CK+gFA zat@I&!U;)C;ps;c0zIj+%Ni1Ig=oN?K>08nMEPehbC&7BQ~zil0E+)gNj!r{T)S8GvR0wee+D|CtvmkO(jLLs!>M$*s>5N@qsWGI_1NJp?OI016WD3M zh6yFUufKjix37m2VTdtSQs>jxf=O*eiz&Xj8X-%_q3!LRwPFho~yS8~gyBuNac2IW&>0cZj zkUWZe&>WV=$0*58c*}(A8IZbXm`!j>srN|=Q;VDi1ZdwrK1jwxU{cQ`^YR!zqCF;{FJAY>Hj+O7FMdRL-aZUJEv3UF#^Cii_)I z?=4)scO2(;+nEeh6#6%0_sPIH3*q;?Hg;$dM*+`KQuE-j6Bp#qx8LTVqZWHGw_Fc?P3@mNy8HXduvd$k#ISe{7yP%&4S6;V?h{M~sYe=}Be%45 z3#VR*Biz8CI+xF7%dK-Q-UwdC+Zkm)nF|;>>?* zvGW?GfF0}+2T}9I^UF-I&1B%WKQiI)@h9-6uz1vK85=9XrOaVK;H^X&19-+Oq!4K` z%A`OQ-oS4qFZP=ENHSF>yfG||ck}x8v@y@t(l;UbTP@Qc>yPN3$CqIsYxeq&h#cxO z`t4_yGZsIX>-T7_5~e(osyuZ$8s!0MP`Z0@>T-3bl_c~ePjXTe=RnE*Rao3<9) z(*ayG(6uEd24*t3V4FNTDnioyC(O%Pd7^&~%4%}>1Dw+=noA4?e6g=3zH@AB!YA1^LQeYcyn84>T%o zP^B)eS7R*=cyT`j$7~Tr4aC7%*RWS{g0|ikXSlB@?8~NoJ;cI{B2eHBGKpaLPIkey zC3(ROir8#GxyOm{z9<{nCp&ev!WMnwAFmi@5&L@Dc3?n$)RUR_Sq4rH z15VGngDCl}VK){dkr&TvpGGC_-s;(We^_EpHD2Y;0Mx9vfL4{quaD(ARPrSz)u!m( zf`C<{p43&pwyC@Z(2=V;Ko$SB$~4WBF#hSbmGWEl#qO9`8gjaDxuApIlU3ZMP8vnB1H57872xy_^7XzZoJKu0MHTbl*L|2l{_7d)u-x92|g!$;Ecg z@$iI=*DLy3dR$U!$}kWHw2YJAtFu&u>-}}a2J$l$D!m5cW%$6AuD1EXBlv}PJ~+vK zJk}zEswG?0FKkY*r2=qY^A#xMey2w76rEeIKIGT|&@f! zd2OK3GR8jpDtdE|s4YkQB!U~}O-&!xoT4zBqIHXeggiv2?&ew<252)d4T0N&64GEO zo%Pg}(rp`Q6es@rs?I=QstTfH0Y5yakuTx4c)V?;`v&acx@=fZ>B=JMl|9N2qexD&=<)#JO4J}3iAjh*?UB{L2n6l!jgSNc^<7$Be| z81nm$I^n}Ed_-!>$Ik~*1lMX+lco8Y<-*gt4O};EPm$wPa6rR!7nEkGzPc`%1ncSK zA|&6v8V6YlpOMGls!*WV6t7oS2r3c?O|iQ^G`2m%F60mkTQ>QKz&)-|ark+8+|ioE zru6p*N0`@HPSR~()-Ufr<2`H6^ofx?%+e)C4FrhN!5iv&$#4J%YN#5p<3KoF0;LKy zKE{1>aZ~4V2TVe))>DE8@O0xOCd%Goo}i!Igr8Ufec|Z`&m{7;jh8RyRI~&?P^d7U zpg%3K(R^Ok{S1Z7k}w!y?c2Tp*WRS>Eq+{U#~JoL21kXODYj-=`avZI#Nju+wsY6) z)<9QWgsw?FLV4hPL~Lbgt0jf6pGD2(u9R8yC4W5KlTmq;)%<4d^xk_ly~2CKoFijs zuSCm%4bqK1Zw>fz2UWw%><7@6?Wx;bWx%}-kd483LHYDC< zk8xM?11@I5ik&Rf_oGtEXHOXBH())5FENj{^GdF;YF;Uk#(3fH+?1b|%<(6G!(!(? zw6xoZ=6*J-!5=FP2_~khp79lzrH9$HEf4{A=%K&+rLkIxr;Pg)kU9~1r*SapEt6Zt zU7be~yv83B)Hj?5g#(>4KhhjbZyv~6oc64@#&N_+XRQ*zYfX;GIMmV_fSyPGeRAO8 zk7*po33qg+o#ySJesCxEXTXl0I>SL|`xAswSGmzz>AeeWO$biJM2?|jWSAc>6FAjEtsL}^aVHvZVan` z^_$O*f{5m4xzxk^+jkv^VcSVs1hD7kUq<%DLIOW>*hIj(|=LETt8=BA2ha_uh1)KZE5%Nx%kUep~w2z3F3 z+3-he+#nuPdn|{WryaOlgwBZs`<(SziiT*uq7N?SyDtm4t8CLf6-o^3{YeL|IKt{k z8;GhEV45*)=Nb;g`|Bhyl@;o5UUu1x$7oSE)cnCCBKfJ$^iZCxK5a|yjfE*6&ptzG zmbZwh{T&FGT*Iuxlt9yl9_0 zJQya;Y`Rs3DRegLO()jLSs2-y5mkXxIUssF+r|fFsJN6pr+y)A?0wuV1Nb+JaPm94 z&UG1cxn`f@x9a>h7}FJLynTH)-KqKA*ujuSnxRQ<1$i-CdQ1~Ep-R#g$(2)YD`?T% zruzAKkw?CzaWfkb;=-A#kV*P2xZJrI>@TPQP8Z6@UXl{(x*S!z$tp#Pv9oXk6nzsueRYGpA^t z=Ax;wIir!L*wpgk;gvJ%Q>V{LQRuME*{KnUvfTB^YcCoLU8^-JjjsB=!l}zRT-lce z4oz%^)(;B=WuS)4PvhJEGNSM#<=*$jV#rdlPjWa34(i9l#53L^nLDCvsXPJtpB{?E zp*aer>)|fkJa|a3HPW)N<91%Kgmdp2BT$ISpxu3_ih&vfcz6t91zPd4dApOEAAtry0 zjr>Q{si}x>=rtzD;ruON5dr3!3?B;uw?*BV^(oQ9Df_yjYhnG{DNK;Q^xxP=E}Yp# z*cGTj8jFdM_H}o+uPnjmW-66Nzv=aWr~xtA*FZlR5q8%=7>zNN7zfHveYFi_%i9TI z9ViVYFm3!*bc$*_Ei2H&O;6jkcA+%cmb=t)%e=RWVXslT=ihVKzk3LvtJe|G8f=r6 z2}Q)j{bxkXU%;XN1^@-x)WVm^Z2)!{0W*ML{HF8&Lx0N%mq%U)>QP$s+rOzTTln5` z8=^iN{Qs@b=2#0v|Dgpy2^jt#d{34~D!8_6K&Sg_y3;ak>R#pgIhlqv!LUeoRl(a> zd(fAE&=EIQ*?aIRC--k2jn5bIuabkKaw&eJ947F*sf2r0guSWlJaF*-08hEquF8hy zQWT=y5=Y)H(q&@6fpQyJxF~J_diU-hKq&HvD@+#Yn?k)xf3?dpcEatU`@&krEz1Z4 zUE>r5j7Wti`kAMaRyy)wbx!8YmdzYo7TN`ndI*JP>GpAQ!PtDhUV~$4on>j|7f!z; zdP$K&QKap|PR~ZC;W-rw{p7nS1GnhY8w^~$Ud~6C%|0Yi4Ohjist5Rih%}rlKa(J8EEekt$fel6+^$OS! zcw<|J5H0K z57P_ChcSduycC=gDjs|XXiws#1j&ikHLJqWmOJ6Cwma?KKl4+C{P-$EjoVE);$jJj zs;Pl5#JcSBP#o2+y?&9)sKc@G{PIG^^}^oz6_@52GmQqvPxY%vt_2Zlx#E6Cc2V~y zn=8QqCf~5N{nPpxC1X4#Lnhiap2qReN^nQfN$NNg@t8+g=k8VFr$tPneIGv(N;Xof zFT7#~Dr3dyKe;n|?)`27Fg;|={1dC9i7u)0HNwd6#|^s6Tj)bQ@}n*%Y+>T;)f-oOnX?M`RG>z%s#?0^z^}cjP@_BFt}~4q^Fa1NgEpb~QZ~ z_y7Q!0Fe;iVl3IZHGfYU{pT>HrjBG0y+ybTzm7AIu-eIMQvfNE%s7f44Hu}heI-V~ z1>n)6qV8jqvnY%NtjAwY7slUB4k+>i4!DxrbPsiDBYH`pWxSC8kR$w^+ChDu5vbg} zGO3_#J_W$e{3*}=x4lY^5v(3m)x^q?4uJXYZp4YYUG z!;TI<{a23$C~L4;QNIrCCgA9gTDNhOl3jp_@s9}gr#KaAe^V6Hrw0HjK5Cr3LAd6(t5H{tx!vGOEh9T^qgWZUhl2Nd=`tT3YFnZUm$e zB%~&dv>0?Fos!ZW(%r3eO835|&-=XJyViQwx4%8c9((K`Yrr36&U?=Ly3g~9<2cXb zV3->-s&zPOBNOyELUwaJPjk4|7F28*a+&1P{eGhH?J8-8OQA~6JaD*E6|3S!fcX%E zIZ1-8mOd)Z5kF3{)IB|w?8Zn+sgEc_4kX#1Qd(89a@2zDVFdN4gAdcXz6F3ACb~xm zT59LLx6QHdS4DaMXt2g4?FvC`6EOdpBOA2zN4BN>D6jLA$_vY6r$yqrjolq z&=`qdXU(Z_<$(Yy?wKyMpE+47UF$GQojYvr^{lJE}oss*|!MC536Snj1Kiv#g zBFSBhIO3EWr&N#!Htx-5xS{4 z0-M7)rsiXkqw73+O2Ky_%FnRas}%**ij)}C>3YPf(p1i?lz)CkbiLX)I3gFKB9cB5 zJLkAv*@%PSc!656c60JV>d3R=35*R>&?3kFj}E(k>@;87oBdItn5^>>h{Z z6SbI@v#+p@b3y`I`HXJdI70@pnxP*&db1d6c64b0B=!Sb6!Q>3x( zGy=yyDylk-_z7lu$o7A$mvtF(ey~k{b+AS;n)CZfCtd-m7N~rKztEop^^xw!|(H%6M`h{4IUTTK3tM+x@OAuil ztcfEjCRXveF28!$93nsSn2phGa#Ie${=ev3#h0IF$J``K21Hp<*y^Y$l`YsMp-|NI z4(1Z}a8|A(sUAyRJ!=jP8nO`kc!I?4{R1B^xpQ+c%&l|4C5R|~`S#N`aljk*bjg9| ze=A?9RDLCl5{g8hYmAJm1< z^WqOb<@yj~G$&7LF8*Gxj+vP5{lUTv67TtPqn@JCZ0XB$F#a2hD@cN#ma;Su1NO-B z<;ctXf|dc%FR4B;<_FPA=t0&U9QjC3I0WCoGq-?qcwImh%>T#PqTI3 zd>GO3i#I?uR1+or#HtgLZO#eZG@QajEV@!ydEcSSa4gD2XniAr638MBrPI!2Yf`^_g2Kl{pC0LI-|x9XIo@X@ZQHj z=jNc#KNdGrst#s;k*`l)sn$Y@zMF%NQ~QB$_}45bHa86DXV{q9_$D^tf295sk`XZ6JYD9U&^p3H;VaLZKO6v3l(TMdWw?tCi&8w^CP1fw#B@tal%} z9hbgB+PRePxH;xrT-yTO%h7k~!6_AnUN?)3dOEf|0s1qY1ifJTtB>zYb59s|RUc(T zb*kC{W;op4pdOy7!Ko6rj3nOSxF$TN(~R`Y6)At55jQ=F9^z@YIEax9rx89t^5U`B zyBbA0^jL{9ATsbCrma7M*KodD_F)&6`ZV5Nh8{ltpe0MpZcl;)m(lzr}@7&y4%#gfpjvss}o{RYY%!f(; zh`alD;s+Sm?MeOz;RkA*{^zHV;q%FRd+j5r(xsCA^Zsa>k2Ir(Tn z=lf^8h@N`AmKzry`bNo&_}ty_Ce$M=U)06E<>IVIkR}b_8k_3gd!BPZ4-uM%Z_j$@ z3+Bu5%vrCR&FKMbk6kaov$P|(gZ@vhWF{2WzCPG7wSOwByW8};^ctEzP6|VLc732f z#YeM}P{w>Jg59}3C?^yV86-X9u?}l{Z3y4X{;9>a_PH86?NSxb>69bAPS~O2nV5a%aB=wf za;$RbDkVc*ZiTV!C(3KjFjt}Xa$Q~6uzK>hXYjO1Xk!m=%JLDZkv=(~8(-Hx50)igcSX!W}fcccax zG;ZL?LH8%wK6XA`qDG)zl?}C|f#+zoU(?lVeilumjxnnPBqwhX!&PJo)G#(0jz>G3 zFJz%lOnGAYtXyZ8ROCNm)K^Y>cnYqj!>Z}ZeuMPPlH5F~=?Ec7evg=HSB+38D3@a_ z^AO4$HsERBL)ecW4@?QW_i0RPXl4do@u@phj@49`E3SNXP6@%W+>eX{Y=Wtdd2CY+ zBF&)_OY_%gn(QX{50+JSA4hSSG%k&tdqLsC;VG{+HvK>{8vU1KM1f>mP}4E2IuBP* zBE26NWITxH4e>^iA0~r(CidEo6I|Hcb@zzBav}_#gz|e7-mo_6{UYyo1MW@(F%Vr6 zLQ}GS%I&oxXwBoDyO_j=DkqwH+23(VA%U&qKPeg)d_zu1Y&`DZ@=m8YRDw34+PTSQRD*FV zggDs@Dn)CPU--Kl#@n%ATEJw; z@$csbF_`LYK>W)6^y^k)?C={qo)etoM{mS8LRLj3$!RPZ~2aUmQ zqF4oPOd$8`3 zPmXLTd=H@sbT0r(uq57xPTmQEzN*xjn5znBUfVhGrb(1o zwrWlwV2iteL|u3>NeO}Gl+f=)m;1+OaZ^Yzn}V2W>Z8?j^Q(8ln;+oB;vU?>Pa`$ z^N2q@zi#vd>uTnaq^yzP%-N-n+eLSCmv_i={bAbHV1mA;qU>`?lSy zS^K`b$Sp}mc5zdtk)A{6W35p1T+galBNbxnnNrdeO2KHwg6-=o@4K8Pcbpsev!lX* z9Q2xWC@7BxLfm}l*n7YP<7Pk~X|ZFA-pSIuW$<8n0;>L&<^QZ+Ze2i-*REdYmEcXV z?}v|$wnR?SwqOr{u z^|~e6f41??DJHDTb=8`1^~ns(u0bedJ%_2>Vw!rv>DtF+HTAdT9kw@%BQnorrF;6t zF$1on^GH{|N)mlYObq!hJFya!ax3~yiosG>8%2n}ss(3at>N36nm%3G+!cD-o%mt)g)BVWyD#gb&sjqccKm?G^X^+dZzL z+KV@RwGeUJ;QIW`X!dU8TQWZoeL0~-W>g>7id(6?DKsV+@Uf^U1sv`jzO0M5MvKg0 zoR1&NPv0VvAA1b7(^S9L10E69-cuY7oB70Z(<0Gj^FC*CcW>@&EvWoz%58J3&a|W# z9LbHVdFjjNb$xhOf4Uke2=_MlRv|@F%!6ffUJVPWrt0OZwgBAHm!hpNk;d9d$~3k~ zUuUyUr|ya=?c-ZL44#6FlLB}4cG`FQutw<~pc;#~#1> zR-X)SHs5gR4H}1ymg4s9MWJC~S z#&V-JgUZ9+EGp*{#YIt@VXLXZDA^kZAauGwWAY}G_hdfA1V?qm(EJA#$kp8Rh!`lE zhXJv5Prgev*=BCY<42nWfjA72+E}bP@K5LtVg!G_oDnL@;k^h!^f)Xe-{PrxGe2c_ zATyrs)!ILR&ZI#S%Qjn(b%*zCgRIHN&(?bS%UeH#6%Gs=ZKfRE=f15NZ=IXRtMu%D z#wp3~MK2rvy`G4bP4fLd3vF5hba=n~xZ()%<-ly~+{WzqCt-rysGlHNZ({NJr1| zaSEa+GyBR{U_Z|Y{FX25PjX2xp%gYr>j#*yU>qEBDMSEk(MOAdxSj{%>SBtCz+rkN zfr~<{IB;sf3AUeXO#NiTm(W99Wn}SOJHw6T)bxPAcN+CLOTjD zLZOAh<=hL}At2z6jc@Aw0U6*~PQWi(6hUd$egzxaF^~e*+Wm3^_rc`{v*1GfR_qYa zzDGii)1w2SgFx{|C|(Kr$w*D|vFMXw`}?vuFHfR}&{a#84g+{}{3}Mt| zpcHrL2oWCCWh6-W>rcCkVEW(w z+=?jTJA%8z+vrcUc?p3#mcBY_A*K6FgZ=Cbb~GJIVehtY-pk;Q(zY&RLQ)%Fmgh1G z6MNd!9eGX0FYTX*@pFD%aaoe>(7N8G$F-Un5(xr?lHGquhoPi5w$4gCW&U_q-&Qu8)z? zL4}x?*N%@;vHLHsTaaQK{_^>+y4Rh3^5yR?*OGcIM~{ zrvtU<$8?EW7EgR$yvnd=XwQn+8h#_OY-dls=IOmcxOpgS4*is3AnZ(RTw#bl3|Oh7 zvZQPl-b2f%_ennW1Vu{yXK!RE=Z?!+`;6}q?uUcyuuFU)o;U1F1MJ!b9sx%YZ}C62 zBAmdNO1S(XROh&g4ef=6CHn&Z6@vc|W53UzsDOCdve$*1g-8D7W4{WIe_%J^(hufR zknoax{g-KG{bW!((JD4fDN^(cl?sSZns##K0Fa|Z5&sA8RsflZzscV5yA|$7AGZIt z=#LG`QZ+vKFiIU@-O_v13sx39;EA!92);A$jR>(%JQeRt1nERQY7+J<=mVIJ?k;WV z{;{J64*=YWP~{&NlsG>y9RW{>`KPLX&HPJzdqID>pyYJk?ZE>{4r6PX_-+aE1{Sm; z24)O*>;E)HSRy(8j%9iOc&e8# z$$DZmfvF6;biwgOpt!0q!??m?IA{m2G&1Ly@dDwmq%)RZ&G>vP>2<`y$jF=-w-s)yT+3qVBy{>@UL3OC-09JD zV3n68fQ_JF7FaHYIKv~PI4z}yhu2kP*6yL&&BquPyWtTFUQ@00v1{P2{Bvm6TL5O z?WNe+vOT}JsCyu~?nZtb{1ijyA=Bt3>|x>EX6u-RSLaVxuZjjb!$KZB+s54*KT+Q= zJxc%B9fIr%xdhvOkw}r4^3vZUwRB?p@saM}k|uY#HKjFW&o4(cID5F9w_arXsLMpf zl&?Let8xFGjj=}od6guU|M4lU{s=0w&lFuNfl*`gvH%@%@XMj)x?_FUys;xJV8!Ze z{V$LCP0+Q%-?adL&pU&jP)Z#+b?;wuaFi$|;#gkILGRaM8neqcZw~xKS5u$b8+c|= zJq6SK&LrGUZRGFt_%Bm44EZI2@2}xp zl!va)wo)|rTbR!di@lY>HhX=f0>`%TYvr`>KekG0?r9_xV0(=k5$7j;Z!Wxlhw|~! zxjEWx(EG9&la4cl>fDnt$&(!GL=@*BtPLIwrFZwKY!K-%9&X?^_GCc&v5K+=)g!o|)`QlK=>GGlYg7H#FxMr0T#}9@!10^U?C?<^HBT0z6&1kWU zDh-1D&me>Ss}PM3t~?kkK_{8eK25SZv&4#~aUkBqI68dr9DD{3g;-Hwdj;5^e}@)F zE^j>Jd@{L4L2kDE&5{(Y*R*w9?`*qguf$>#2J0b2sVhBHWznv`lRZF}*3Zq&{?@b# ztI~0JmfLlwP$*#2(^i64aQ zCGTI_a8#Pd+s{7EeQnDtFht*h(R2Q@k^dEoBIlA_Rahup)y33f5|@T(Fu)7<&oMrl zKki)RcBD@B2+i2r->?`z(-*uFy$0^7-~S{rY zW5%W7WE;xe@x6zb5LF-*3JfpGH_9K88Xe!0$rrH+O-4#?+39;!vXN@7*HxoL`8E$O zm7OOgi9-cM{e*#k&6F5D#Sjx_;B`y7^G?16wBy*fR%jS*Oz)hncCk*Ddx(9I?=7D) za^Z6ncC4MXym>EPv)DgV#QMp6g`CQ0$7;{0`{-Hl`%2@O;u zAGTuvvUVZ#)Y&tny-aG=G*;M~`_W6LAj%{vRyt_g84a#LhqhaokLjxwI=)H--6qMk zt*?=o9Hkajr+0i^AGE?ofkhhdgJFM$5*vm{EeaDh%ZBy|)G`?_xAXVd0n%`FaEhVE zq=C9aSxYrH%^OhNe6#pbJjX%nj>rB1jf7U;U6Hegv+kY1OncXIo>Z~Q$~Va!cX_~D zA=PV+KbHF>E|J{x!|DQ2_Q4>L_`%pEvyl)hBrI%y7aWoUO&AFs=ElaxIEr)hxwCtP z6)TzqsJsHHye^P*^b>vaNHyB7?i8q1Fm?7|M3~!zg&ihT931y2 z3S_ALkuCKerYZ6gp+-12Io{CROwurHPpx${3>=EMJ;@{chRu><-tlQl;p*7#C4$TN zXNOY?j&Zv;%iq~oRUShOnVR;sQ{mF--)zr-q7)bBm(P7B;vw%BI-H1ZoOyxeu&Wp1FBLo;5DgD?sElt(7Yye=(LAl_*E!*k3-P@Xnjs~G z9KRHF(yKEsz3(h5QvHny9T;Zsm2807_OY$tZNCVZrVOMop#?3J=x9V>F4eI171~cy zZ_9G}K3kpLUKY!rC$L+jgVuQKi3rCV7^%EP??6}vv%Uy(IxETV-tM0iAx&P5cRuAU zTt?NB`@DBOY7!j&UMxi!Yp~YQvE2Hdoq{(OCam%18n4h@4v6JlJE-n3m;OqMEZsdm zJvgb^U`vqSly?c2%}-T~A<22;fTEVGhQLYM=swZuIFxrr~Gblw%4fnsK;or4mpK3Ps?C;kJ5LQ^F+qq%ZGu5sK!6`i>kBdaoRf+ zH4hmmq;htcH#Zu)W>bGb6$RFAzt===(_VKH@Ey%#N=R!lK@U#ITLM48kEHDAT-CB2 zb1pw(`FT&@zm4q2>`(UNuUME-&ZzM>x|X{u$YX^nnzTh%Zjoo$Z_H?H42vUrQ3b6# z^oQuPJI`8nM^km`5neD#8+nTHr}ry1vqmh95_4L{3tCX^v|Yww3V(YT`yr}Ubm8!| znOc>y1ChU&%De{RA;K)E}{FrdZluI2%I8mA3n;1i8|x zAqua)26(`iF|&wmVuBRa?$tS9NYtKPp$At zNt5;%YEmIrqq&5$;{k6t+@AO@-sx@xhF|Ssgif(4Fu>*rNUg4Lz^iL`Ls*pO@LV{3 zep&i7Yp!1pFYcj1-N_q2jHT^J(r9X)AReVwVE9 z9ii>1Tbyy0t|T)Jw(A{v_uMk9%{h<4iy`mq{^c7UzY>?r2cKBU6%mvW8Ri_an_XU~Wkp$6gKv{}9S?;l&4iSvturk<8;xE`g|9>`?4hX4SvymXNn zLYe6!gBot{DM4rbkD@;P%f8?N|1aqjuW-`wdLJt9bDbmw*5otZ>O-lwsG{?dCvD4Y zZxfDMe5zv7<#grJ65bx%^ND5P*_^_Cdi|IQV(8P!?zaf&`t&g5SmGQGql3KJ z02JAg2QXt)(FIL3TYgr^BMHI2Df!szwwjOp3Gb^uN^mvd$^^Cwx!o-!@G`gVk9P7t z%RqA?X)^azv)uXwR+F?qYT$`>fY~(N{!uB-LrWs=6*gHT6e;w^yMG+!h9-m}x|9O@ z1B%%akei5599klwNPDYh3jm;J0_7p{xIx8iAVQ^d7rn(#dUq5z?j=>Xhnl(&G6*D(_43 z(B!S+ahh?cx=hQUuFMNH&*04x1(rkut;kIvso83SiH2Ge|7l8~)aiVnLLrrk$b9{+ zm0Wx+iF+lB(rq6%$-rq?1MdjGNWrzw;aykl^Bp-^t)m2!c6m86$qbRavk zKhIny_5f$+OIgY*q<;8 z$bp13CF1HN_XZ_WL8qG8v;7J;rB4N?Q*DSa#gn*ng^^-Uc^q`*gL91qldVwI(Si08 z&p+gaZsOAz-;SN2T-Dp+;U8RBDEsx)&2cw-s4u4FG*om-bMK%q_$@W_-O|CJfZMd#+DGZ z9-Aml^0oX-PnV3qW8<>C|DhmZ#H#oUTV^pvMmC@QZ!UXB3JlNM1k53V--g##=QuC| zWSA1Q)v(;zWKk0iMpc~NI@y+J`KJI2-EWfhLsa-N+^xnI(dv4~jfw3NmL@6P{zjc;??_!x3w~e|O9k z6-NB}8V6?Y{{ z_hpje9~m3R-oe0)sXUY5;PLL%&ABvPaMU z$8w^7Knnud2rwXjNDUuAls&BvD~+dqf~vwK0l|!Xnd<@S$!A@jV^l-3j-OuGDD-?gGUS!H0+?ip0R;)IjdZ*fXrOw z%>5TLr}v0DlZm$o%m=nheV%nQdRf+igI`90%vSFB;qq^?m{_Jpc1QC8$fF_9hJ zWn}SYmcd$FV*E)jh8g(J1u~Oh)mp+Ija56}zJB`PfR``ou%XcbiCPft`Gi05<4x z$xi_el_n49X-)%#Ke#mbHyOfz!17Y|9)RasirX0gE_5;pkUaA&b6kL>SpX1xO%A;G z!;q>!oIhAiL{Jhm>W9#e(M`{3=mAKnQb(W;pWc?hX#C&48_rRsQJS!bgn{91K{r^- z10Wy*Wds%+OD+BSuQcC&|38Qo^iDUC(cXt}0#c|$)9WrkG5rY|`qcr@h$MKQ6aZh- zCbIwOPX8j}2_g=?a^h5hiM0Q_u+l3wLOy2(7xJcRCZe`VnTKT4RS3kjkgi%s$Ss#G zCn;?u0vEH)iuxxU@Foo z!&>S_pZ3*SF}|JTi>wnHh}NO^T)_6tZ^^|DYGMdMdMq2U8XW+RvBAi7M3e4pr>oDE z+dfAl$B4Ll$`Z0LJU^tY`1T-I2an&cygv4nlAJeSEPcI(*E8oimewnd=k~}YpLLn0 zEjYUE-39Hpsy*Y3qsOj$#nu0!%aCmboIZb;$+($V5Ray3`gYq$K~jbY=gKU^G9#XP zlS#d4Fbw}zH5+n&(#Y#{ntDXE+2T|1rXzO5DZof zoudZdgjmrfq^vQQJrC@OT7V|19;(yx0^d)X=v>>^xpoEQ~_oqH^ zIvlNu{QkNzy~JK_cV03e#7t`bEUPsDJE3Py@I!JG7;Wm|&YbCnHIjnP{27t9Cd$I0 zjMj{&HVq9%q}%Q$1V8B8q@6^(F1Pr!U8o}Q3{uuA3hlP9h(ll6wQq1f&vBHOm!p`% ziBYeu?z;ItN7<`YNigHQ9niYbhIBd`@?1Pc>eE|<}(sx+?xshJ0Q4!+LsPnKoGY?r3!Rx%w52skb;X>}^MbPd?<;LW&&_^%q z`CzTmvy&xLC<%|N1TkSMoKBM;&>8nj<(tXl7e$y`XNB&|$X*no6$MpYKlRQ=o{-NYi04!q4)AT?|SU-~3C(e(rsVlu|OXV{b1{d8l5lS8@cIcqVZ zVYlpz{ZULKpmiW_yBC)HaL{|NL69isWuaQmO*X1rCz8v8Z@3fa7rC zqnSf@S1z0N;iWL5d>CAI>5IdbgkK7N)I>!_ASS2ScC4@6=Sy0zeUUSpygWr@Dv<*<2{t57&rNjOS@aiv7 z6`(#w%SoAoa}9dlz&j}3`M!_%UZJSdrvSv%BQN?%PI#OL-$fKkQL$fTDLL<(bunF& z<1y*WSGa%Pd@1oGh$_lK)rO2Sc|gR(aO}{GPp_$`_e22BIO+vhPP5A7Xpg^|~ zXF!o6gxQLuA-Pe>6u#*zgKzqtC|8(b!5S1rA`n(ca`)QsHpY0QA-cBCr7uA>CYQ3R z4(DG#k2TaE-+0xXjN29%a7o>PQasP~`aixsIRAZY_e`)b<>?8TuHGS`%(5~P?AG&^ zxh?$cl6>taTfCq*MV@+5FffiMS+0DyQpEXB!-5_a!3?HfCcK z11KQB6>MEOq|tTsqA|{BA?F!W>)sN>mvOy`j8{|GUT=RSrjkPtHS}EKnc9okXyf*1 zf4R0~?+dC&2ue|x!QEKOYtzhwrG2!*K>*~2&!U+SI=aC|Z=wbieEM_dG%gHKtJO|hpkNJDvnOuqo+zR$S*MFaRmM)Y5obTkTJLgu z(m(pd{1Iuy)+P1Ti2E4%fp3szLGcigc&XKhZe7(S)_r~t;zP#co|s+@1nM?Fd>p@b zmEGN}W{@1^iBrGoO&v<8up-42h0B7z^fjkB^r`<~K>yG3L`MWiOx11+?bbjWgL4Ma zf|s`ug3@-(0vFC_yOZBRw^RT^*Hu&+CxNL-TOEdui`2@nz#&G&zUk#Y(4mNGh4yqafOnhTGW{d+9NH}g6*fLMO zpbv0C#4l#xsyXFxvb>Ip*Dvs9d%df@J@rlWns)-)=k}G8hHua47Fm5d<4p_K8-KRX zaziBjY$m;GXbQ=XYDVM7%H}T@s`~=`4D`-c4SwzpO8HFAnjNEJLf$5A9^jn_k3r$0 z9EuL7{M|ct(r>@+_uT?!>~NSxGcoG@`jr(TY8@)fHJ10yZ?SUQ8wk`C@F*n8wUG;) zEZ)@Gi3j|Cb#QP~TypVw$JJp;LM>0J-y9Ut{OfpunkvB!+cD4k92`4Ov9{i4UoYq0 z{9Mut)kR7LxW4hrrdMN+md42~b9L5_@A8u;X$$!W?G*>Toa!Oh*m@`0#3#JM9yZA}S)%hRVu+&F3#S{+w6UBGRq?tk(3xq50)MtgZRBH3QGcLRJN35!P6*)^WW3-(U1Lx6s&!l<#u9&aH`E$}tyE0^wDR=q?E# zQUYnw*{ev(MDFn0$VNenam{9K4cS;OW*7C_>4_Jbr94}x`d7C_6ms~S$PqW6+&?bb zi+O5juv}Da5yjLHHGSr$ciOUO`8IYwL9~bs3noXkR(eQp5BicA=E9Jt{5mtfHLMkz z$CgYmm}u4^-T5`U_m)`jY4KEqLgk`DC{|zkZ;@-#bI&-?qBADtQND*iJi=+nu4Bl- ztohWg;GN%|)Azwl8xicyF$8(?x$vJq)q3@6C`GQWf@-8R;oP6}+RN&ti+nE05JXX; zCyhj^&{=rVkr@jUB%#>Z@1a~zL&6DP_VamfM@SmNgwPt4NzbijwuO(jCt1u%Vc@CF zmWPsWH%2B&Sj%z6i>MhSy<>I8;d5T*GGmPc7N(}Tr(|pT)yKQrwY*2wRvoI4nmr#~G8EVoakYczIzXNt& z{@^jGk)HP?k14U$yB)2ntOljG05@U(xd%ZrAhYerYKh5tUyZII0y$_ zaHF(P{?zG;icJ2`<^H#07t7aEnftoWdm(sb1{vXUu^p1LoR zitR%&z-7!;Dlh^-CFRElwA>?PGQ6=9Xoz=~AIr!Mkx)^E;OG!aqAq7V=8GZG@(hXO zXx@F(x@y1G!7!fJ^egZk0$~U(O-ER{9Al!bqEbj?Bu}%MOY`pUM#0brG(RlG-qf@f z^L&o1TGS1p&`vjv_Niv#>_6AaHo)PwU~mwA-d&QvGQH5cgK9dpFxxyp`ZuCOym{!Q z`w2rKhCJ@s1x`dM6AU@?(!u6aU)O?F=JwSxFW=m%zxaxs867}UI^~^(BWIAFW0rqf zTm=;RlL4&HX52l&p**zgQzYLo0bY5MYu&waaORD&qIyS80x^x&o`sz@d%xO($n^Q| zEnn>~^ncYD>ZUEq=9?5?vY4T)afKim{4k5ZLT-!Ho_CFL5@wJTJ9lMPNFL!?6`R`w zHMewa@k>r_qX|b!_nW;4scjoZIFk_cQqkVgD1Gw7W5 zbRq@v@n34_*J|NKcm@9_#l7Ybv0`j7011)5T}8pmDId-UKLWiDDfa&V&kB5rAtV1{ z$1yOiKzRTEM?=p}vS)V+0BbO(qrSz%X?aLbJ#IN%hZCpSt*31IR?(g^jUJ!eMoe4E zqVheKO;6|(z3u$_uh?_lX{Cn=UMY_XQAx(1C-whsm3E)w3+sE#! zcT|%Nf7*Xv!ZZx!mHa^MRmO2Wo1k+o9Bf0xz0DEBz4|HDhLz;`N~NLB@~k=jjslJj zkx9B-SGm9vZeJ9xY-3xWv!(wvs!s2>A1%d)4JpL!&hg8a39s?w?K4=uUCb<_FP_rd zP53s;MEl$gJptL|9K2vyt9tn-mqdc(CCstLV-MRHn}~?02t2<6Mmadxr%TE|uxZgD zVvx93AYw-UdPp3$pJgwJs;veXQeaRdFZ%isB} zGZBXsa2#5qP1KZD4Bj}zrK|M_zAAk(g$Mf6ch&-6fqG9Xim=FSy8O1Y+JcktqoaYr zN&IsY#8Uk)tU*5ylp-$?Lta1l2xdXkj)1}k@K3jghbyD!xI9=2`M{O*#T5`1?+_40 z!R)|d=dseJ_Ggu(1AmeV;kkT)NQdwI=Vjo7{^wNBFb4}rZ z7>iZ%&!)M(FB0Gec=0uZTPUF~;?d_v@Tw*8TiZf>DpJ4X*44!eZEm(y_k7qrKKm=< zS(UX%pv;di^^HgO)r>*sP|c;Q$JvG8C)wae!!Ie`w`lOaXNuP)8g7uP&BCNllEd@Q zp&`8=lRvzl>fu@Pi^O}TY$|xMnDi)Sn-$P8tV2fk;M*BC60o;1X-}vJv5L-#z=}xy z^ywY)%Izj`oITO=HyD%OFCqP@I;7&F#E8k*b+Pc%FJ9y66`(G$wZu#D*(|dluQ|P? zfeZb+x32+*)T$H(V8YHICpkhoL`0X72wG)uRv)Twr3JNjEs>2^;S&qQfX z$lZQug$kg9P>fJye|hi>6E^Zo>|^D1iS-GSuGS$(G2LNSvGO$`*A^QDM`7}da*9@k z&W>GTZ?0q~Ys_#_U>b1Z0n`=8{cOwSbWQCu^r$;N$C_Wniz_Ftuo`O`QRHd{AmV;A zV~`p4Nc@Bdg(Ug6ya_AZ;9-zOlfA4_(+N@c5OWQwnG}zF#s0OV*PELx9KAsCCqCAx35> z;mx_c40Bu)3_up`>!BB%Y4tC(tF`~>&Pzuoqkx*|7Loy>d)?OpMR%gzG$q1w{yM$3 zy6M#i`Ks^&BdLxlrB2-=#|1xUviy-gnFARM3kOhCY#WKTHz`*=wJoJJ<+qT;k(H&n zuS-T=#FfOVm;s$FWiPN>FC$uOb7ypsK`77HaO*n^ zXKKC&hlVdPL;8V_P+8DQVJfh9cDTCe zY-CI5%TX&WxIosg6J`TPwCbG>?K}v-3Cx`&eR%ch&G&(v^BjXJ9{zIcPak^?5U3@5b1r|i zn_!M5#DDR57kSiCIX1Ag86T6ALUqeZfLBTGJ20=G*YE^zVTX{}Tlk`o`T>|I%b#6% z+iqX*ZRz#$Pdr~A9rs@%3Qa+@Z#^c|=2gYSfDs_cogF#yo_IPhxd;Fl9QA!S$h#NZ zJ`UX^qh;0mIWbz$*06ku`|km$3#(%Zq2XvDPHf-S*=r{9Hq0jA?Xm{oGF}}7566^8B48q z$S1wm(G^mji}m&7Ep~swOZN;#8~uTa2^(m*!VS&BRT2^S?23z{gVUCF`jVRe2O@ih zVPDqie*1*TqO}TUKYg~5>B5P{>Ev}D)K!bx#M*cpIxf_)vW553sJ+K7U-7qjgr`*f z_x`vRRS6djI}cK{#&d!mGi;SDi&0y2XPfw-Zx{|hqOFutG}}De=wK8fuY_rHeem?D zu7|Q)7}Y2l!$;p!XKx=2NBwjN{iek9J$!ia2@xH$V@p@n85^#Jx1KA14TZfn>09R< zMQ~@wO=UvBr$AvzH0nqzp38ar8JnGbXNF2p^D>W!Ebe8YdSiDkIApi4F7UU)$@dcydI__BR zO48lN%P+<#q9;J!%8pf17eE?9+?Z9P-|u-Qzr+5_{JAp~LsscD%W5#~mtO#K)AvlZ zQSSmOVQ=%e>8&_feRTr_`&uE_{bU{X8gFSp|6mai*jOL6DQ!=4Y1AW#IGr)ADsING zCXJIp#zRd-er9=C7eb)X1WRhEQPrH?c082N=}h|g{jL0jLGF`e*Tq8mP0~b8s6`N_ zCG=M@U5P~&S*XU-gOvfGhi;9?X8w%~Nm?K(-g&845(8$bPA7NYsHNqO!qrhI+R%__ zqyht7_PY`f`CS2Ur^0bTK=UT28Upa9vC??R z`;Vc%XIrC24-4(+0`}M6=f9q3udP@o(Sr#kajc3Th}RUE;ms@3yp+$;)cTqMv3S!v z;sP_O{&ZW|>L=}v_wwyA{bSbBJ;1If=BBFm)s7Btr0mZ*x&^(@qZ;e4;cPj-=wEGL z;1?l=rUfUGVzzUg%%Qiz5vqg4ZEYo4>I=>Hkc}SV?>HFUbV}vG`astKY*_)x6QNQM z{7%NI9N8nS@?`3iwR%C!nGefz4 zg1Y~~RssbMPH$$qMRqTuDca{f;_G02u**4_oX{(P(JSJn!+`072X~F#5Rp||h&@_} z-;nd2x-fY__+T9_GIop8oI)XfuBpDY*x&b|dg^^Ta%rXa&<3+e$33j8Due_TBB*mq z=7|npmuC=lV<+d%gWZt3543n99H+!q4z&qu@R7>m;xB`X2{{kYmTA?uQ?>D)yBy%X zjIANDp;A^eBHoBT1>qx)He!cA>E?ZOT8ml)JL3A@I{k^VY8WS@Z&3G%)qYP4!}4d> zM=suxS8@Qq2GEwqLK_EZAhVfApPahyD(D^Dxnuhb!=-e2T@y&#*GUQ?PQ0*gkauVI zo?NnX6PDgxhjN&CjWFChGMax29&!@80b=(fo2D zx>RG2!gF^sy}K{7wug+`eN1l;t2svrPN9(`vgZrH^k+iS|0D~6;s$Gol}p5YcAXxM z&Vy@rtc}=AnnzBmvGgrTQH)8HZxvsCdLB09%bFvyDTLZ{JtTwzFJW3NDB;X1iz;^d zZpuTvj)jyHc}C**UELCfk#^F)s|~ZNhvho#V2@_)tnSm-iq@HXI$!*V*RI#ta+}egzsh9S^AG6<<6;ZSZ!@GgyDMKVKJ%8A zs4PPHPn+}Rxy_^`!{`MTTQY2Q_z$$$zSX7sCfL84cD^@GIu+(>;4r5%8d3lqT%^Aa z2=6Q|@SZV=m=B+G8nmOv-NYI)_Ow?CRaEzkCG-b6vb^|cI5QGV0zcFlnnj5K-YP1I zieIS;8FS~>LG#Vaz0A{&k$6dIXg#JaBWmI<^NKq=^EaIv#AS)3s+b=hj47j|hP5vQ7zzty`0-kA&^lK~> z+m-7~ut|XK9JB;yfr^wx$%0ESDQx$mz{-9Vb6WuN|KIlCRfvdi&$QmX3`_+BNAJ8( z12MwS(dGuk7-4eM5&mmqe+a*+>2mR?Km}(#>l4K`y{FA^wl_WW4g%w(-xM)9EPkNTJFmcPWwb>0AmJWk^hDU;6uy@T@bI#8DzpjuD zDU5wJzi=pbf*X2dKwD1&)FrO`45jhMHA~vZW^f`KD>OsK4l$LmY+PZ1LM&L^MRYkX zVG-lYGx->k2}H-fR@c`rAt<_fSuZBj~Kxp zJqOFG1|BxD_7)un)|=XiN93IIn@Xu_!z_sp3USu1cX@`rQzrcjCsX|*2#x?{4L}eS z0KyuZ&R3iN14Zzcsz%^E9uFw>2?PJ@L{9nzw8}OG9w+7jc3g`$>I zATI<%>MX}?H&yqS)}~@o|%+w8S9=;M8s{GF{(FDzni<%n->yA83qom z=&TYaWtkv6*k^ez5BT;e+|cK6RjIl#YtWTE z`N7tb7-X*&k8r`oQkECS&bpzt6_PjBRA!^QFFM%c%{~cZpEG2!y?Tm^=QzQcol^Hw z9np0>Q?k6dIYxWQHlT4ytK5{R<#HLjKTxb2-VJ4sZst{c--6l9Ff+X+TP)n~Z6(;W z=aVVF=x!u0-k7BIQt;_SIgVAwi)!)rr$r0h$4cxAUdonwT?Wv-uQBO#L8!jN^o17T zN1x|srR17Q%HcdsF`?~b-@<~d-}`?{%rdYe2%(QJVkS)O3fn}A-)fM~FNg4-9Wxiz zka+E`=O_7(i02}mmmf+#O9%tz5Tf6uZE#t*fB8NL54lrvYseB_MGShZZpW|@##Vw4 z%L6#0jT@Eg8r_Atbt5^o;$bZ^E()0E*JKAiYw{v7b;$ob`#C;ZfS#pEC89A%F9vRX zBL(KM$IYR6yw@?fT1!$bhYuJ-a>n0=9{)+1iv(Q3#z`<>$BZtyCyPT4X<#bk(rx

$%K>JNk-&phb)Cmj?ePJj;4-p%?Sn{Fav>5s3F1!43kNH0?G1!ERwm=9ARgahGW z6G)1|?6Hg&WR6wQJ=q^Uo=PPu%C&qLX4~Arc74BQN=!Li>AQ5JTPL_RVa!kFQr)F5 zU$TZinc*>7yWzFR$fLT(@iyA$8QfgvoSRw>o{<}Aq=PpJbj7>U_<mg!Kl8IXXVjux zkH!vc4AxuLe*wxn`-YX8QfGh}oRJn$uS{{YiVkza#7qKy+yxjnSjJ*L$ae()1E~f5 z1NWiDhU;*JrYUFesEAhlW|oMY^BGRsHp6Ki+QY20TC;W#T>5;3KE}F?MSL zF7Zq*=4)8}sc1MjVDbq(gpANw?&t*f47}d;TC;NkG*qu90UqSfWY#8^R02kJz(AASUHHXk) zf~R`*e2p)i>j35}`y;td<92tWk>BsYTxS z7rnuo7cuPChJE{}X&u1}svR&v$^_ytBh+O3(!pu!@<3xduzlN5Rr zXvxlfjnTkb@@_XBai39v4fM9qogk9{dPxI(C7&{Mr-}@tK zKx$U{ad-7#(Wx{S;KkG-u_Rc4%hd$fr&H=YG71Lap={BOQx+rHOM=*_8&AM?H3oSB zA1HMoitNal+hocTugJ)kLAc3Z^muG&-~A_%x8cKk(DR*Ox)cW1lS&duxs1|0X{74=4>6rKlayN#Xv{a<2uM48FKnSFN~tL>X3^Wx#~5FniQ znL55>7%TOAZTU3Nh~TmwksI^g=3Si3qoh}&ju+>pwTG6(Woy7Ih~HB75f%10OL&M<-`O> zHB&!mD}e=Dh`6oar#{^`7|?hOM(~=|J!{riz>!6N3Cmlrc=h_V9vcqS%0vK{Hr5O9 zEue450n%ga>QPkPUIh`-G}q4-%;v5|B?!0psKayZPe@IuqkZEU9Me9e{e z>4PtlFX?*5GrMX_OoWw^#QdhQtL8sY@0*xraNI3rjpF*CEVFCK_R0^V7IC>f!IcP7 zec?7Dmg>pIJ7nZ_Ob*Ua3mH#XSb!tOa{DVj-orY2=1yPE_tR%kTj{eVFUOa`s#R@B zSL8W=biUX9BsrtP=f3gM_{eZ{#>}>B^xO{`9+TVF22bNyaqQeb3YXRMP{tVP>Yz{Z z_V;H?%b%H|-``&3bEBf2bQK=qv-#-#Y^INf$C@8*w5A_iACbcPj0o9JH`&}^@7+{H zwEZ@Lk_327MiT_PtK2Td8p-3%ieoXd=8Wje6=Rhf^kngWd5B0LA#NPk!wg z|C+E8B+>%z*wx)_$$e3YHI;RPB4~e){|SdKq_3rT&m#kGrl+QB_YMG4xxDJg5$Kh> z`nOc_bN%~xh}&Z#`?|ZXVRP2J)e{5laf#qSSt1vYORPDB^yxEwi@myMXuUYXI%k&H ziz&NRs1yzYK-aoRW8dm>oxi8~_{@sxsw^tCVoaM5M9RM!k6h5M$?nQ$JY7{6bFtgZ z4s#G@Se(p>j6dxdzWOq*i~>aO28$Vt;y&NzYzK-&Hz|&;w;vOtrh?`B5@x9v!c{WI zLanxJ_-X?czux%4V+}}b0((a9h3-$)4PZZYXmxbiMAZb6KURFK@4alQsGVA=(o9RE{6i3{kwAXH)z#{W`EmKD9E!5uZ22l&2z&J7Xv(2ceFr+B-}t|h%NA^;vQYoxqYiE+@||0)@71_3`tY< zVdu7mluwA+SGPI)eO=rQZ?Y&sK`&0OckB32MT`Y5_p|13ms)Td`aQkxF}0^>oujC` z*RulX?-6_Km!wsf7H%2(>C7HY#oJg<*GC3l6f&u+Iw!F*PdxAZK$XHJj0Zss=&D~{ za2XlGUM0roD|Op{Kd{?bIjRuCHvZ;+ZK&9+0SwF_*TsU08eMR#Tk=Ua&7@wEwfK8` zPaXt|&E1gqaESuaZ3pFAA)q+$2p0vmk>0hKY4+{BFo$?@bMntIU0~;iBt29kVt?xr zkRLyJ%_Js#f-YEIA!0rf3(g>ZTzh?LjYR#7Zp>Z1>j-Cf325-Wo?ZB3`@tbJK(gi< zCWZj_Wqa-2OZjSWWM{T(iM#h`9j3vADvL zCqI3kHxodcOwK=hVxAtfMF==?&_r=&BX8*PN~htv{@}5iiWOX*l)3O+*ULed%PX^t zI876fq@Kf1EQ}6@@B=q?A9Uej)X(uleUfPOS)MuzEfO zgd?4Ucy7LvRekk7RWgKv^rr8}p-*`Rh14HjM1y+vx&`xj#XqMQ@Wr)jSX9QX+-qX4 zvtxbSbzukHO?x_PzPs30lxi}6ybp&Adj+*O`V=AYlXZUUab{KSl*M!#Ywhwqa4z$d z){2gM^co%&CsrKJv|KN6{WLidIs4qn&UzyNA;d#v?8qP$Lb#t<1`tfo=&@K`TCS> z^J)oHc3x#aF|AdF2R^J+tRM#YcT7gc6l^ zsv@;Q*vR5G%DuVoN zHfRsfC@ff5nw*YH@8<0^v!{9{yn1>lb&eK$O^q(*S9GLL7=*7a*Ly~2+|sfhzoH+b zzpCc^_E2y}zqaCzo{^X5s@t}}UG!+9vms4PDZ!NIrTNA5nBu6XJrP(W5QWc!W)d_j z*SclJKt@U(MV-u(s#4mi!#)Sw2d*{)4_r4C<3t5Hc13Se2u$4EwnUwzO?&XO>65ni z+o}#*GbUwiMDmR@LmMkMKNNi?6X<1zUi4FEj$DHreFSP-2oy)T4?&x8bD0xS~H z6cdLg^VAJ+Mf|QB5th=q4SZzp=e~$P_tfE&KnL$-bl_ObAoYtDx_40);NBF1tiNxe zrvR@fiODA2h=gFs6s9a(SSAiWlt`7~{W}{Z8&XIJMJ?KXh2$a(3yBiwCBzat2a;8g z#rd5Nrm0l$s9%Lf7%~Np51qgt@Zt-wgS?e+?J{FB%7jF6fhm;%68@Y@)-WMiTPF7FwHW#K zt}nY4hU#5wjyJzH7MXB-nR9gS&uC4$HG}hcoWsn_)7#E3s&iCuVaILEgkx@gzP%Aa zDCV;AFhMQ+P#n)N!&|*PX_=clJt(Ny^>gIWR?e41gj46%yocE`&lzJ;vC~}e!%tm; zcuMZ?v}qXU)yg^rwHK30hkcA|aF4g@?45=(8Rk2WPY=^0mfwgQ#q@+z4dn_eoK-VY zxqZyT9^-g0V8N^xn6k-aRKPG1e)Hl&;(kbjUeD+@c@6WM8X9%GO1buY_dL_akPv)z zeFgtLMv=|&=E<-mqw6hNQTh7Y4N=kZyLf zvC+nyt4q*+L6Iwl?d85#rl^Sfr1*F0$Y{a+(pU(!RIG%SlAij3kv$v({u$%$$yc|B zvGQ|rlI|xs+`==Ta zTGo;k5igVw9v7WGgj?S0cfom%FQf3aG=1N zgC}pPA-6-CB{z5SAO?lb5?>-^!v=u`k)^Xr$0sH=>%z9P>-%1aox#Ch8qS@daaQ1Pj9pF`#>-W zl0rF2dmApxi2@YEcgL~BgjmCHp3^?sYkqa^)V*1tD;>3N1=sJ5Qj z?Chf`flq#GMP;;8Oeye*<3)MJc=Y=YW#0K8Kdd#*WHizprBaq}t$zMuQ)WGP#Q!!S zA?MR4t}wc>2XozQnnUA7BWFKbC;PG{C3n|*?zv7lmd<)r<>+u~vS?o~NCJl!unMvE z*ss}n%wmJ^xU{0;;{H0b`{QnkiUlj)77NtzN6wChhX&&445MMc#ckITN}P(8W=yS!DG zXyT%uR#OqxVPV;a^eW=;;+)MwshV7a&TwCs`k$L!%$Nq~@v!u*TcG1S8=bDB3 zR(dXv&CP5Mnhx*SCOGvM_KQ{>j_8)PJHFb+!c)7D)B5V_+>akDyzKXr&U$5C$5u~{ z>mr$FJ~%Os zu^1}k#rKtKM*AgFbJ?pjhcrKY*Rka?y3_9}o`ZqZf&wLl(`$B zSMc4IUw;ln8E5m^C(3I*(I_0cXrR3if`mgvxM#?tPFE&~6V z-S+3VgTg~TO&DqCPv#fY9Y658215rg>zweF3p*6nRS%j%6s^CtZ}Z9T*KV_|EWg(tzNex*Ytbc#mz1x1&`Yt-%j zF>yLN*2k#&HHvKr zPKejRDaN94WqqmeCp)i;T~U6vD$sb7NaOR%MR*Dh3wl&6iEFO6jCj+{G-VooqnWwO<3f~ak-+!&yHkjH@jK^uPxvu zqJ@x7;iBWpuJ)mG;A!8q?dWD<>Bt&bmad>08m%1`h^%`y`052X_0Uz%)fG)5fF|jr9UQHi-zMbn87!;iGNFX*};15M2}y??lYA6vp{BKrpSMoG~`tc6ImTH3MrdwGuh$2pPfh?6LD zPLJU#X3qoJ_~pLbjIO-(V$i{{Zg4p@$fajw2=``GY6>~YuT=DtR&ZA-htQ%g@0 zF7l(@SCqoOUh~>U7qF6EvSHt?ndu3|>fvgxmDIwkVJuN(*nZGWx%Km=1r^tV z*;0Ea?Y>)PO@Ht^>9H~T6?a{y(|1v%6zkVOq8GmFnA<58mac<<4c+)f5#K z@2bS8#)}jsuqIlp3l2q&ZV&FZ_r>jW$PXly;1LRnY&CQDwFdyB;jdtx9EXUpuh|Zc z&L5%Ih)8-ey7>U51;xrBI(A2HW!Vo})PRGqGT1olhd6tO#%^BX_X?g@STyZFGhTQd z&yyS4D!-?^_LAV9eO-R^&#Jj~!`)tyqLN1wmd%u*uZPvmdiRnB3`LUbI^=xKYz#Sf zHrjf<1GhHKH3KSP=2!=HNtf`0(FGNT!wH3OXfIKKwGAhuLvaAG`cn@oE=tKrEp7U1 zg_OiO+j|`|ixxjlDuq|ipQM4?@Dj`$|i5R$k-L zQ5?-OPYC%xs#K{l%p0$`-(9y6a)r5(lJV!jrwQ9!v*m^@!pG1zmnn)hQHO6M8YL59 zE;YJp2tNL8w^x;PHhh7+o{c3Z_0`WG@f}yi%2X+QoLaL%N4xHR&hBK@%kVE%Zb0U< zYkcw3B$%f~@bD_mwMQ4#J&q3IoVV3xS+Ia{4|)(Kn2hrXpAu#$2G`PX46=Dz|Efzu zn9Vk`Q)}lK?4xFFwluMuWE9)n+2yvb&H32O6r&u?Z5ig5VC^Ds-FU&n*?M-K`f_{; z-TN?3u`IP~GYl(qlo;>Gf}D#Ezidr#;0T!Nft+(xSojAR$Bvn)IWz#pU+t~Bt<=ct zE~$-P3z6rU9i}|m=(R6#9{9$MMd5t%QxtC}h0(M`eC|^eAl6cZxi_(pvYhwv&6lxQ z?q#lRU0TUG{b>L}1ZNmsfOYS(!$oQycZoqElL7L}7Ki+Ql2{(IcoBg$O-JGtp$nn|on!|Uy3H5O3op|8I z%UCb28SjHqo^=$BSGl@gfmm|MWvcO+UfnR}lX^1v9`=v4Q@exWvQ_d+j-0KN`G-8h z$a#v4^u`^>CzY^2d5XX!7P}dwgCtDO4b?J|LKHyK(hE+~ri_G;l|INbjF)NgK=JY| zW4_ZY!@Q!ZvRZNbx31-@nf`l`9N5i z1SAmGO_Gfi;0d1H%DU-~)4{+~ykZMx;caOvE$HRqsC2m@qThpLr=B_;}w9 z3;8XM`6b-PnDUdS=oJWmfLpenL;^_(b->^!H$X#+%Uctgz=~nUp*ija*~!TU_A z+@5e^v0i}8lt`lw2gNNvccjbF58VZwvxM)w$mnKk7Cv;(t%r*T?kky^y7E11uwZuF zoE*g@=;MqHgG)lFs}d*#SQ?)ef5;%AmNhKa4|6oVs!cG>XX*9GS3v+a!-97onbjedF|)=xnNloiR)}jIuml97zQW2kLq2~ zo_%(IXY^;SoS>WJwV6~lVV15vKepOTT_3Mxz2b;N? z??MF%U*5w|ETj$+!1ae|WP|Sa2V?jR0x%7MhV@;0`R&qw`Wf6sPXbU12uu`z(SkoW z;PU~;#8{Yl2k$?p1mFaa6um^c+&@$DRRq|UpUKeKuH1xd>jZ*C5!AIDft+a z11G4A`yS%YjsME@|7*p-7xalS@>0ic>FA=<-Wns#Hq6`7X{{8Wdu3vl>6Nz7Fiw~ya5_#D#|MuA=kZ?u@t_M-9Z~LeGwcOe5+_&$$&` zsc=+u^gC5`D%OrUwItn`><50MC7$cBu%y!(To;6_BJD)R>MDIs zIN)($R^Jrl3|R{?_I*{I!X@U@To;WvwdP%5W)|m&?5&St z;aJd(>v%3#K)XrlBcaqFWhme`qA0;an7BlWj1W8CD*^4&xo+89qv{SvON*t8?=yU> zd4RojnyY>m%!)9yB3kd2)|)()#U@{{cG`L@geR;qMnvdEBrCit}=gsMsWKa zL>8c+uIo{iOgnm&@ zOMY%fwOwtCu8zZ2D1@3OxW5ZJiv%eE7g?^{h&REM8lOq!Exd*ZB8#M2Nie8iT)LqQ zhd?=4L}wpDT&AalHo>P=&9fpiBBR%l;^-<6TH$4s^1M*qzHUFOi_=J2-h$|>o{2H- z6=)+U!S9#V`UB_w84GO$JHP?md|F8Rz1((UsA~rwmBj{uC~!WzV+qlKt5(3**C=&t zuCItg!^VDo;?_;JB}X~z7s?QHtc2QoYXAdW;y7WcnWJ`dy_*2KXBTpZ3D~++6=3%W zUnEKY#hD-YENw@xyof2c?AhSZ;x-RPbJnj5+7d&`*if+zVmrLijE|Ow?!4i16CCtW zt0B8lxgs%tRzX#1jwc0>+2)br&C%AZrL$oZVpaQMV_5F(W!xJYnR_O7dIfTDEK}jf z)Rr@NYe-k6`G;TQ4xfSswyo}kmJv^P6+ck}jHr0w!h+J5XMHKK9Uh1anep?BQ;gO2 zUXsu&M_DkZ^|)vcszf{s(=2l)h`>T>7T66sedS+1PVp}1BhS^T4e@Y&l0h3|a1!GI z-qX=%mI~g3Oas$f_?DXBpZ>wblmv<;ECz?3y%oU4Sn*UQ(1U#a4?O=)0w@_^<1fK( zhGUv|iW>Y=&!tB2_xV@#NCF7=Wn7Z0#9!<7WiOMyr!%Z-j=^+~-g2_&a>wrix?$jL zUIv_h&PM{Spdz}GoTQZhd1XTv%y~9KgulDj?_Pk(g~Lx^q!NV}LX!V^WvUb`PzIeT z{y9rdje)Kz;MzqgD)q0a==ZdUvH>M3SYipnB>eBMK%y#{H_mQvU2)D(HZFv~-vcQn K$^3i9zW)X|rvByt literal 83402 zcmeFZWmr|~yFNNdX#}Jjl#mqZ4hd`^C`2d#0HD8=dhrSX;K5&Ed65voA2p1; z?*V`Uc=cPY6NW)ig#7ud7rs_=GqCvit$rfO?@z!F2_v(DkAD65A8$$_!lD7+M5vD*(f{iq z8sLQfU#g45vm*GM1z|I_$?W;Y&h0|vc`X#_mh2p@_PeP?;f4lF>s{1)AO zu~3-&rgJ!&Jsoaqf-b5(DA7m8>m1pBLkNA+X08L@lBT1GD&h3@qBZF}yH`V&be^yx zH*z>fO-<}iYl0-gc2fb-jkeDtZLYDYU8+P!FZX6{2!IV|`i>^%yz#F+fi5ZHXJys^ZH(51yZQI$vF|Fj z{Rx2Zyh+?(*re}USkrPS@CZIeyNA~2Tl@6G)=GI1e)#gF!Qt$d+G@rbNtGe| zMN2&o2jSyN(L^MGq@pa+&QlLYco`$j_M(U5+TI{1vTdY5R?3_JFMr051tYONp$;>2 zHRCv2cgNb^N)z9sQLvSIlUDP6L0U!Ua+pA&euLLH8v~vGb&16yK&6EW|FV(BQU*)O>%QFI)4X zVBOB><)Z3i`gE9SFWec}~o4!*<2 z$Tl*7-_) zck8%-Y-|-7*V~1T_!5C~l1OIL*4EbH%rlcNo{0iI4CnWz>UVcTCFDw(PLzx>6XY~u z!?#*^{;Gkjv!| z2ml8-GGh(yjk<4Gb?IV5*S2(Bm|!65gH(okhC35*Qx$i7R(k9`1#lWS7lN|4R-fGU zFG6$AkO1w~q~myB26dYsaXWUYBzXZqNGNd<%ZD2hy)hu!WcWIouhA^t+GXpfc=?Wi zW?*_qC`@I+VD<&K{ZF*Ud49MUwsh4yew&LAj2aC%mTMT|eyJB@O$a{TDSF$KQVApE z(8xdsmz(x1oC$TDs@Cj*wuJRMf8my+(({7pwgC$=mh&pRuKN8M;~^%w`hpf4 zyXG$NVAdTn@aeUS3B0fssklOU5*oU0gL6_X-;*{0<&1sF>2F18y|m~*9qT(fPiOQC zl2ZE|cdz8pml6dk>)KL|OKO;P8c^dtkhU%{mFbwOudePkRrk_3hM}%FKk0q|G~HaV z&`_@urDeoiQ_8 zx{S4uPna3=;%K9C>g;snVAK9S(oZc8%AT45%}QMViJ#wZ14l!sEopov6^9+6!n@`Y z^DBj!eFDKd4W?ICv7D*TU$e}892L6x5>9_TlrN%c|5jCDjwhkcirC}w1T$SBib!rt zO-bGil zpd>5jxojQfnVx0iy$UAj>}o9FsH)jHQkD>(MX3%h&?iyd%c?JG2oRYQ{CaqCu{dnZ zfwBozURR0fiy2uyxh_hTE7PLW+UKa6Z{l3nG_Ez=x(?i`>zJG*cF2toYm%26BQ=B4 zEFc_`QWlXuBKa7wIl9>J)O0AvR3Ke0>=mwmUc&0$A!)H&Thvqg@QMd|J<%8)sO#c+ zG#pCl&6c^krs$AvF+R}&$K?UBo+p)iIFhvatF97_w2x)O2NkBjC}!6TLt3w{jC99QCn7174j;Vh*NgH(gqKLrZDl~V!jORn18RmC=bsGy5VCBKvB&DRK zu7ffS)|}u=(O}E6o5iT0;%ldnphWw`V0TY>hmnl3x6l*%1|Rtx z@@7<;6N!$}L0+0du<1{|=B(L#?g&S#Dt6VTFf^NPoSWxAgDldtB0_j0gigtCVDMS) z(mdkFb8hpEjjvj0)+w|zN;?cHHEhr8%2QFx)HssFZ z8?m&l4C-E@=Do&LgGta(e=~+!)EJLzxsD##%4A6-MJid561)oA$lA$u%}+1C zdYfETx=mK#A$8ew0GHli8gIMM^)>PB^;IoObtBJ3nS~F3&HKgUY5%R~T3^I_&6%Jy zq<3#nxt8V}rIU4XTAx0itzLfkQB1VNxWmb0Abem6`a)D3Ss?w>(@|;@kJB1|Ps4@b z(P)lZ;;(o;fpT>id2i^^Emg~dzdA9Qan@^c7p-wtxqDn*T{JHY;_rofz@-=(hB#n7 z?h6UU1(!)&*QTE@xTAs?#)6b+^SZYdU!ROWC$sT*Z$x%mTTq$@8E79js>t0VK{j1E zl7z)U&NitHv&IF|hdaqW9SZR_KsUYyH8enH)>uOg;x< zUg8CJPmI8AHHpUAqQxZ3s$#<{kqX52+QBa!mx5)aS&W=6+XL<=H4ojxnh*q?zcy?q zB4D$jOXj!h&xpK5>$;2ojP_O+e%9|#wAl4NEj`L(V#m+%#y!_toFEAiC_eYMsPif!6dPK;$doW^cUe77DJ z#y%&|%QRc!4 zs@UKpyPHQ-bPUL_yFWyzUV(%|c!zCrl|@YgpAy^FXZEOif}7YX_~@g$>>#VN1BrKS zw{SBZ+bq%t-YCGaRnydf{;m|)wLSND4D&o*;?n8D1e%jv1L3H(5DafVs6RHqtp#t} z`So4b*-S6Sn{s)W5XEAbGLNTYVYG-{oU3K%8YdTmKXth@nfji@!JFd}pT0=b!hM#n zE^}g&mRaCE>lZ1X#dv87l^E3cOsY@XRzhm0>LXpm8Q6%F>{b}gqWcK0&ci#NhYhOV zBob%1C0{t(5M1AVb=|+UGq!=S8Q%Tz-OQ%1UX)Th?wn9t!*})<<+j%!nukKw7PGok)6BBmO&_5qM_IAp$SLz3ic0hIe-e@UY+z(@*`9}m5 zuRjNfhW6uq5Z6Bv{pfVjsKZ;}8K2_07kZ?!$dpn&I~`nKu_^HKGxNeueAca|#CX>R zk>-%vyfK@W2q*HWsWjwVoP6hp{FNQ~AAvW750*s-pb)xVV_pd2u=B~L^ecUX48naQ z+JS?q2ptsDqlVfb&XS?1YOm`J$2WtHJ`p# z3R@1qcLz%mn=!m#l&2@;1+;^bG%_VD(x|)KgHAoy_vV52aVKZD?x5qAqhyrAR+?oT zri!mpt(qB!tj6xcPKUGp1XQKdm)U^u;At3nFe&itt-Wlxr$S8Y!m1)ArR2Ry7OO7DzWZQ6f&eTeHKb=sbm=a*V!~1; zJeqzC`q7uAH}6(?x2gzp*9M`9QWSZu!7(*N+K~Zj32ZgHz2iGyVSw{(m*OWczh$Qno}JPG9?(dBL7CisXCSu*Ey{2gzc%t z@<*(#B|Z&dztCBO5WI z-w+=FsXp8*AV`X6X-T2eZ_*B^U{57a3qaXox2+|b8?SRW#?4>wB*>Py?!E-DVP`Up zk^nQNZz6u6WB!@J-2ZAQffy4=>jk{>I! z(Nhn;j3U2e(^31f)nnUR{^nIq-AQF9AWhZu{z!f6LGks&iCUh^7Mr@OGTZn1Ds;*! z=%L|~`5hHE`{PC+^aTULyngQ`3*^eqhKrO(=~x&XS63b!cL^p5?+Wr=w$LO@aOJrZ znfjLPNLIk(vZ-GOiq?!@zl0tm6ub@Uc@haw2=352`kCZ@MhlJ@#-1*Ft)fit5*YnJ zvtMtGym#%bS&8kc*-==6wU|qJb0>Np4+Gxn9x@@YQG=9xy&p-w_&#d))7gAWUXh7v z!kd~=dYB0?Jo&lKMEc6PiDZgh*8zK#xj^TtQdqnd?n2hjvP^F2U6ot~`?mry#x!>= z4-K&$Dr%sWn#zbDZhjaE(scy2F52wI0!qN0F<+W{;FYUP;vCkYmGQ|$J3vvC0NI$t z8hiJx7W>H3LdKlnF0Xw5NmO0op-1=$+}1c>0OMQf$SK?5U}d*i?*nU}9L3!_ z-J_prFcofy#b|%T!NM$F_)me53ujg0vv(H8S0%=%zzVb0m*X5PBBH{z9q5-nzPzqs z%v&6x>)f>~C@cV-BhXYS(pai5QDd<4$bd6K1qOaC-%n$w?@om2WWyG@qtvt`+pmAgr_KDjgA-$^n|POpV$`$iS?% zP)snB<3%i2_SX~v?I|B8L_y?Ms6*`rHqfP;-4$2f!IkClJ)M#??b>x-XWAG|*e5^g7n`zjkd)x(%P*}2tL zdrxZY76r|H9veU)h>Noqt|j!XpN0rzdh#j6#0Q923A$bh@qIrV+qE_$fs*VW+^Q3KLKp zAbMm<$p<~i*gp%jv+xZMTRLGYm4Ow|L{gkU2ysANInvLJ;6?#--W*lK0zB%PzC)*D zsBe6X7w%H=euQDvqA5qot!4AMz-N}7<%4EK_JH1>q{kPN@WOCgMS*-8VNaFbx@e-3 zAaeo`o?UkN;hT5QaSAgug?ogOFc2oIs6By;TmSm*Q3+X^u-LD-&`2I*Ub&>0_X*N< z(nu7Jr>5mWvcX}Sx|JOGCM_Kq+fB_WgJu#joR5q6-cAr%O}%^gKq$#8pG91kZc5Yj zXz$NFvH-ju$S7+UiM+1#UwSLzV76q`cYW39l+ij+)|G^&tYIL1Z=&j^OI=C=Fs6zZ zH6>f7GdY0bxxmeZ8bU2Dca{MQQ>CYxQoB1Vxg#q>o^ zZ_OSBk_J#5w)A2qH>L?Gi%FYOvO%Rs24+ca1WFJAEvNz+2aoMF6=M<)Ymcah3nDPQ zqZiHr923D%_}ex@tGRfqa)aMm3;DL@=v< zI#Ko|P4NxLK*L}lvo9lg`a`oAx~RKNHr^cvy|7Z?4zY{ED6t;5hx$!zg>>{%6|p>o z`t_*zezn0bD@rk7z?oDAQhma-;DAm3m$cHnaqp{ig5}n7WQHgf;MhbZ)~tHxrn)Tc zy0)uF)`EEJN2ZG=%7eAwUZ2EMmXI~VPcYR6iRFgVQ&{R&m+^pyUEHk(r_t&XsNml5 z&FL*U@weIUZCO=POAlrOY{v%JQbh(P6X*f0Mg@`tPpgIJAdXdjCSRZnf8d{W8u+YJ zFGydow`qfJG^>ULv6MvZl{xXUK-=>mxUGhSwMYCj-hWlS4#6S8&o<>{->|%W`y)h+30@ zWxwZ5xfkc9)4UtcB^;E*I84LD>sKDcGxp&_je)egu1I&2o)#|~4@K0d?wW2I7(X=B z2Is3p7nNi*@o|?Y z5iE`R4^=KCF=XIU*RcWBu!P@PP_MdmT?lXW4jV8mmUv?B-a<`OPj8L!bCX#Pk${W3 z{7cV`Db21qxlP7y7lKeODCX%D9&#AQXE062*XsfgfPl`^dszMugiigYVbrlJ=eFx5 z3sv`NtKcjDM!LA2hP#tY!qW=g`@id(^8G3N!!EBb+chL9D$i^h6uwZ1qX=E`yK56F zz=KQ@OQIcv{khooRT7=uz-sksXl^Ctb_r=7T7{>8ej%Nseg-vti+S2i#MmRc7&f&O zku$o{_*BP{_==jeL4{4LUb9N;r$Hn|@Tj3a>AjZS>^i2(DPL_ab>>V~aC4$m)K>2c`fN(t%ux@%B2f`BPeq#K^({A2F$$;gYFLaX;X zz2%YDHTp_lDnH+(%jI!wrX|Lf*k1xyuq|v2>GHiIT@laYTv+VV{z!8?_6F-uZy1VQ zPhPmvPM@~P;qAuo)+@&|oLHa(>4v6-){`yI$Bm;c)Ln^-Ok7{0vqX~Tj=U_NiwQFe zm^7bP&_%77XUfCt`!?XuAFHs|1-@3OhbcT7ls0z2m9MKb_a>wR`3YJm7G@=77I@O2 z#TuGpQfg|EW{$mk8_D1_`$ri8^E@9wnTzS~WSjjGulk zq@Cl|@d19;HTz4q^n=M$W9=_%TO6>$dahmVPb>`E!ECs2qR#X<$KB1ezlBI8w)kNO z5@4k)Xrd1#9qn4DaI}bXB>Tj7MwYX!G!Hj2LF-wML}+1M2e-H3@@*iAUrm|p^ZHMh zN`XsxJj@7;{QAA%B*9>zyBe(Rr?;h*e(`bn`z*oi{I0vDm$D@SutOinMy4a`=1N~f zc1n^f2jQ67?lQ=rqjD>u7Ho3TWbf$33Iwo#uI*_Fv2F*|0;88E(n)xpx(!~RIz8I! zR%N(JdYG(Qz=v8jkO(g zJuCk?MUuZJTZX#zlS(!&owbzSA73iZ{B*)bDjNj_w`M{qw-2)=oZTG-g`NN*dw9;U z5O^wV2U%|ZS2&~&b4&|~?c<9~`!1Xpk%I&T#@S6wtf43GANNIds`tQ_911W8Q%BfB zi2rbzC@A3xfETDhI#wpjEShty@Kx}3w%G{ZjLxR8G%1^;&MD6gm_w)%Nkm|3( zA6*=jzgagt`J~FLa_DBGsaPO?^8P&iWk20Eu9T1b8YB4>x4`${)G0<&hc&T8Ddj(9c! zgcyGV3g4$CK8=Sq8CvA0B-zWFJofQ^Hv$t96z)yH@w6#pm##N8HK>pldO{ye9cJ*X zP;R~~k8@Ai(n^X}W%onVskEA#Mpmg-6vbs)+sd#@S=3uqySXR);o`KW%%y#voG}4P zdeW_l_gS>DVEplQk;cjQ$;SRJ*;-4QQ)^aXeBYPN3X}%Dq6`jqUWv0h>R<*V0Pp#+ zX?jwFuv4Y7R0}hzzT%6Hx~PtcrU!Ax=(7Y@^SxVxh27;>L@hw=NdHR<0MlbuAdBwj zhOdX`OUh@-;c>Hr;#S`eMJ;I}(%FSNA+4$Yhbwlkn^pskM>Hz?Tja#9^2&ig1?YC)J@2&>iaihZ-)r19RfZbZ zw!69*E)xB%!)WcN$jTV}_Y0;=G1+uwK9axjQP&^%C~fL5LN-kR?egk!=qZ1ssUXs* zVA2x+&&VW{zqy}-ap(;o(>`Vl>D=w{jZEAT3}9>RoW2V3%=$A+%@o223p5OCBpJg% zNvvvmO zAM06s7PCHoNeR@!b5fn!Q7Vt{!Oa0pjFw4Nj6?>PVX>SaRgoeEVFjahwjoLq=5=rW zUhXV5bJr+tZRLedZ)qY?1dR8foEl8t@a91UC>)@)o z{n%}b|M)Q-g;>z)a0*+IzS_?T*Dwz8?|m8>6Uerl^%{GVuiX>zhxmZS^{jPhK+&K2 z1gYJ7ZN(LC^3jF*+c8vKEiOgWH}BGfjqpP{W-bFR(L$4IQ`VpL;vky%-;F|92_IrP9Z!99#mtXYnCirL;_-iJ=ZtsV1mWQ( z5UG0Gnj8V`MWwe}^Y-#3!!-aFmGsp9%xe6pt9gv))qD5C;N~@IBLDD2fBvg(FuT-X z$Y#Niq%rXP8Hwc34gk**4KLQ*G=q_4kDLB>7FSIRhEm2#meCo!4MRMcYEbvbgz)A^KQ>5(d`m=W9$0K?3?o&0tlqE0zZiEF<^{ zlEyi~pB*k>X%vrrZ0?-lJ$A6vRLZKof@$vQ*EgKLWZ6G|!n1Z*7@qx9C?}5TB*5|CT*DJRffr-RH#$@rIAt7YR?ZKP?4JGp5j8CNKG_ zG;WK~q>bS~srAM}4ZYx74c&zO$e+t@?B*|^8V)d;P z0-#JI*(!l~s>X<4Zy=FS&0n17@%KO&;XXA(AcUYug$(Bp&izwJwfGDM88}>bMu4m1 ztZMom9g}y^`&p>Ow0lEC-w_nMM3-4HG)@aj-Zbbm6q-Zx@n+mr_#`g$sMjbTvp+(m zJv*7=c~N-oj0gnI1S&d?-`u!`v@R$(U*GI81;mt~tTXE>Q8Tzy+&$cjWGTc@Vq94$ zoU8wYBNQ(Qk~}E1NZ>wMh2?-X1|!F*gYl}Vdh_t73pRbQ^-6SHS{#LbphRUkE=-7; zj{6bl;35mmaFhmf`s(dLnEREgB%E=_ehRq|&ClyuluOL(@O(Q)f&|wFh=G!pV&^j~ z?=N3ctdF$J=T-zvE8apUHEKOD$@tv@jyGSWy-VoX7^(HT8JVg+dZ^~vs1T^uopgoE z@$re+CA*RYK*Dp2BO$Ntg~@=t~PY(usrz`)4OD&zmOsV*AQ>rIff+Y>Lgng;JaAjEwj z`~G?1?t5CN!U5ereZCs1$GJtxSs2vBao&x6=t>hb{DaiN1YmRb;aG8ACGgBwpaJpD>(g(7g!RyS%XIsc!m#+}( z&xV0Mf^meR^})|cEY~@_{%=OpRnq8Y&f>oAeHc)t#xTlrJeU!vc3agC*n%Q9HqJ+b z)p9DTzL&g!`T3@;y@e*`o;s8NHrHPEk)D7V5(<9TXQ8`B3>zC8u-Ydd_-b>=lStys z^3$shltuqfw9o8@U-uC~b#;C2D`cQ9f-ZzBO8|K2xVgd-J*Mp}Bc*&6MtOeQ`#IM- zk820jQ%D~y_z;flqR*hU9q1-4&3}^IIst`40ma2g0dWn8HTwNQ%t>SFFp%)8#TyiJ zt)j0p`nMC+ZBpU%dPoIvjlr}cEgM3wVZh8<573N5j+Fm9Wt}$(gMQ;IQ$o$T9mm4u zY)8}B>^ATC!gp8Io@|UrS;FWVr!oN`WaeHYKmum)9aIz&8j^RLG4|%98-|*=VE0eB z%*J#Nmcg@f%1Bu9W|+>&b+hTx11x+CC0>!bOZ0axF+DeA<=6gXa2~$uL~pDGidaIo zilwEf9FMKzW~T>}u1wkU^i>_udYe>L3Q`p7v^2-eCopM04EhY4D>h=cNEIpr zgj#pUaduink6mOYx6*g@@Vkz_y5!)$LxI>&p{}{(l4?(=CLBh@HNLV`<##$Jz=TUO zQk+~f*Sgc?5YMpq{O!Eju!7FU9r_4j-TOV&z3EM~U@59}W9WijrdF6>G*2d9B0uu0 zQMJcTU;z94w($e1cGJ1UXM_~PB?}X;fPw0F+hkzgU-UDZO?Iu3c9pPbImS)aa#yA1 zDFY+ApuV|a~JSXVQ#B9D+*(x^nK(dxm?vX$A0(_v9!6 zY&%BdKU?mrjL){*&o_{JCigODIypyvh@%1D2le1sSXek1n|5hGjnkpj95JKHoswM; z&byQ)Zyh(?9SC!*G>t$zjNk$6QWIzT2BLQ*F1sOglO^8I#Zl_N@%!(CmINN~WM5TXX< zZ?OL`4gwD-d=eX~QFR~Bxma6av0$#474Rst)pK(=cSR#=LK1VSRB4OPz$tg>6@(Y` zu)qZ7@0YC7ul?0^LOHI!XwhBuEN}cjFMCzf{RhM_0qnT>kPw$m^mQ}l*-#_1B z;(>X2u!Q_|(%gq-LbjD*`Z>c7{Aa)huL)jH#M1x^Txt5U=T~^pB6>n=LsVeqIMJIZ zV*XXzPih-BSYcQoMuK8g%v{_mq1jB`*G5R3;p~RQF-bZ0F1H z&vl^999YQ4GYH25pl2Tb2zeiJv(&mq8G@1oG1G>#cc-9aaCArKaSmjkzB@e4VU^)T zHY4)jl@&N0IUW1D)qhF(`0*p3Dna5_7Uc(e1Gm_$6N`X_`IqqcJ*P|zPe28#)A)eGm_LHEQ~FA+9` zhuX!#oMe^$zS0EO$pnkmyplqSd(&d$*$#P!`tHyl;nV>;J*?WWlQLa;GiyR!qrp^Y zqL1_kD^N{ns~m%6?o;@kxaZtmh5*G?Jg=*g0R4~KPr@q9>N*JQrHT}A zpiZ#6&G^?yMHu^`0bn4Wur<$0n8Y;GDOV>9I^y24KT($h8Dc+_sucQc&H&-jvQY6T4|7wR*>7AL4q=`YFsf6AaQWrTO#V*6+IJbOkjoz50+ID?Wa zuAInbz#PAifhN;$D03egQal62_)@Y3Eyln4#(%iUPEwHnFTQnN#PN0(RbFZe}hW^0o$)RGC|*XAruFscnmjpH^od7C3~BNNA%Y>MgpzXJwD#v zhFfNNwo6q_56?mIc4Is`sg?)ihs`6|$7W#sJ~Z@5;gjf)Wjp_h2L~~tM+fb*REgEn zt`I?{Q&K^%6YW!@wr_q?F|9&Mbl?m}(9XyOzkBmoD&=ax=+wA`!3d{TTRA`c$E1#N zSmT(gU2bT;%j$k4BaKUQ3Wa^AR+!=DJsofsXW#ZQ=Tj(`qx=m9CmF{xz!z@sb+fyy zcCnJfC5v9;SFjRkgb6UJS@KWSFd)!{gd?E6yjXPp`9~*SFBqHkr~Inl>FtX#Xl0<+ zH^>r9U8!AB(Xyr?;^Xo9c+iBFbICg^IGhnp9>0`@4{P1lIG zje^x@6pA-RmT`#L>S_FM=TSenC>4XpZr=!Hzq8wax{#mYKL#M>1T$GngX~$){}ErZ z*{I}4k|h_b)el&Et8paU1!l7KZXO15P#BshmYLGS_vAn+?FOCtuBgu9ewA+aE>qadQpMo(2RafudK+Xn$(;Ao#_FDslXnWvTAEbL?8Zpt z%havwUgT%M&{+O6)OYazjeQDJJq-DL{asc&0I?!(ahyc+9e7V5n%CyZmow|&ktbiX zsdb8f*rm(F5%m){J}_Igc`z&16#9Hz84%1@@AvpZ6NW4(IPbR@KnPUNA%RAoxg7Kl zd%)Haj;x9k^kni7yd&NfLVGb0#g?j>7Mrb?lYcYif}W6h>#kVDX{&Zyrz~VV7XJC! zK%V@G<51aXS!Xxx@pmlnM1yj9uBGZfQ{sPv?qlEk2h(8R|MwmDAu5BRSH7m<5CjM! z3kV8&EdTA%jz@+U`g|~x#QMUUhoQR(uK0BiVy_HOycT$nq#wE7!^yvKMjjq5c(=uI zz<|I;CnW;WD`XeP(77Re^cxxwj}1~znD0L*=aH=ph%S~^;H8bD_Zlv<`5fmrMV?q# zhTlQg(D+9P26+Eu5eZ0uXrlj)m0spxUQnm*F$jojtHt(;wsfz~uc%tBzWeM*7_H`u zNJVkt!T||x|9WrZKkw1pzlUqKId>Ioe49&ZK3+`&#(KFu^PYVjboP&5tNz0Ve!@mx zIU2_EgjfRR^)#(6vfkeXddx+CBy z4cG8j`kaXV(HeG?@KgeyZ}iNY!*-MGoh_dbRK!lgk_ zM{X(j)rt2XiwV zVwH?BMsppS7sOS&i)E&9w!5uKAf%$lx+}u%sWK&{6D>N+!D!&De8!%~tG6m$97Lkd z6gp{1R!O1TB0XxXI>!8z|Aj87vsE_aE>P~s%KLoxAr6Lj^boH&{GpTPLn96f|L&u+ zAsz%_pI&X=o1H5;aa$?6R_eZNy^_cGQHaGF6@(WkL-`FZz`(f9o553Ga{86{(#~?A zID=s4jZg41P+F_u@Z%{t9$pZJ`}Y*BjFIzVJ%{Uq$tHqlZ(uGRZ9Z4YG=!RzC#eGu zNll!RF?-IVl{#DKAYH4}`D({*D?T6S+mvRZAG7cncm)pIR@e=@Zb^7=LW4hp9t?{$ zB0z@t`sCLwl*)u1X(1PI#`;j0kn@t_{lyXfU2`$=(Y@f|dxe|`d@BVcmeVBmQs%EB4pzFA^XIM+m~Rg-;UL`X>VhY&MOYF6(l}qj z-<{p4GC@Deag)Do_hnx?)p`POW4&&TzMFsx5z0qBZEeCrM3cU`doNEs9ta-USz$X< zd_w>sHtfz|A3Gb<4p#Rle5%Rwgq zGwp%H2Q4!r`u%zdAiAKrmBMDWlwkaarxx#>0;BMxWFtZBQ?v_eCcJawXsn|o7h}WP zhfX(KABFJ<(aMR2IG(^k+TUB(IFNwDF&Hg1J#@^lTHF3V$`AwBaYY&A@I)~PQ z*TUWUK@s}ltG27Og>lR~8>Qxv`Pb}6n4NO|Sj*&B$v)pX5PldBVgU!kqs1(60J;>T z=r6_rgTjq_e%q=4%whiN@$M{ahyO}dR1__&Q;h7C;|90K`32RN(_59Be$9(3OtPFC zGI+u7K>|J$hAp!%;g*({caAl%WxUq00R9S~fc&D9d-bOT>gz0Y)jMVdgf5fvRI^+& z$NjxHuS72of;iqsHT6b<^Lv@okPeagbLv*eF=Afqo&NCT#mA2a4rahZeG%HL=fFNI zYu<0c4;xl=liTx3&v)G4r!h89a){82-ENpkxZOyIBV}Ki#z!oaUQtBm&wsUl^D50P zhHJRiSs?vo0^7?sg24dAOD}F74bU>*%KiIrCJUF|mqD~fL1(wWcXb4$37Tb$-!=`9NcA%MqB}xYTXiNa#KYY%i$IXB+4h|eJ89mF=4>Y^;?f!Wg>@TOAf*GX2 zLS1qan8nzr-VBh&WxtdD!)rIkHUN_Sy7hcPn$u&BdJQbH5jy_Wz#j)n&j99A3*g@Y z9?e_YZg50mV5`nGI<=I9Zd6*BDEf;X6U$ihgcrWXwrG|*CN7`8!CPm zvdAB}iwkCq^$kCg*uCN5DXiXmg3i^!#<*|vlc20UPE7yNj1ad52go( z-&H<{+c&PJAHV`igUf*A12|8omaiY^Tb0Hqe;#lyJ_3Sq_}pORVTM`+xgVq1G%R3& zVEB3X+$#G8^mT>e=8lmLobUsEHIZLNP>m2-wD1|uCwRFft&?DOTUic9xZkli<<-Tv zQ=Frd(=WlnXjTfb&?Ag{eKA(B`!iNm0==^!*ZqnzpxLP6hkhAMSkif_>Q~$FlY?ud z`&0Jt?&=P*G%RpFK-h-`5G`<`0qmkR+5yzSY{at1FUa&#E?MTz&ph`XyztE#Lz-3w z+smCtq-1+wEyqNusYKy=s80w@)h)qsA^}t{hH2ridb2E(pjX3ag#m@yvSb4fF1U z**>+>NU_6e!9g}2@Z0v0 zJYouez(h1D&%XX+%L}Ah1Mv|2Mzp{hdC|c~DHiO_Ukq4CkU0#MYVU;n^6#k0XDbNy z;U&`9G(tNJTGGo6LwqWkoVEh>`)T-Di9S z*YUd`9nfQ;{z4e_6tKI9fB>R`(l*SPYtgH35g_~sf9vr3u!sg=7lP2`G?fUtlU|wv zfBP@OsaU>DK*-Xqzq(B)gsdPGERlnEKYbEhgBQWOaFoVh?73a8B^mXb;Cj~rMArf~ zar$ejT_`{}@&|+BKd{urUm`E~UoC$`?bEKs@(H?uBqtl3J6$#RLcO0n|B{1o8!V*n zjdq~VW5fR5q&J|snKoL`6P;P_mRO{P(rG8c%6uUgYo0EirDc#>@Bs+hbz~p{tGPs( z0LfK!AXoU8y8P;vKNbWza0coP1Np$vAOjwL?Qn1~;=fK4%o8Qu!?<RO9{bIV`or@nhARRTx{X$*f@@s_u?!X@0y8!bv;96>L>VAWP z%%`FO{ER(YzaS(DGJ%cmr-L7F2&kxhS6(!4ts+>ayka$T7sqD+CrwEBH#h#P18y|n z_JXw0?m^o=dx+EkEM#o+;fysbBhS&MQ3oK*NBw`bs))cr6JkCZ@FRHRHTr#cK5EDX zvL?lM)s8^d7BUZn-|5v1Rw4)(a-#<)B%9$Xf(X=xSrmrAKwdvRLtz7K2LoMyN%U4T z-)}16-`!`QUf!?N`#g~3tEQ@d(GWn0LC?E9?H5zCC<0CG14ETG*sOmb->=P5?(@Sz zvhWO!jmg~>$-S!F88L!6+l@M|DafzM4BL(KV0Z%X%4M;%90|HUO7q+dW23BG=ndH?$D|Ij-;FmjP}-u_@Z0MEf^!NAw$O#gO%CzRzf3q_1_FIpMy z`0Z=Zl(bb`-G4b4!&}Dx3_?RT;2=JD2Cc^AkB%!-13fhY2AblVGYwd-2@Tsr)@{%9 z^@3r9TN~biE@r#{2piCUxtLNaFpv(5j%wP*>}6svY(c!)XK-nW=c%Q^gbvqKKRdS& zny;EffM7=9Gf5AE7~V(DMw$de|BG!aX6z#F6b(cwC0euuWQ&blViiqTVJsr3 z$iG^6;JJ~%ZXe5Pe5RFCtH8~h?uLhyk963o>ko6I{8^}K!UWi#%{H!o2nX>lyJtPu ze?=RE0)P`%7a{Oihk*@{;=cdDzxff&%LiJ5*hXy5y8}WXtrS;1Ri1<>`MRbj4XbG93(9)@j0@hDZuH@u<+o$2Di3g0H9d<3C0?Rz#uyuZXPAE5l&EChB2;iE?#AWPnr1(;KW z0f0LVrTDEVk#whSyHyF5Q>RvRC3B#oZg&c-%mK>&rU2qRjd8sK*YN=93)xLfu*P;! z$iSmwu*-p*Gw%Z3%(--li;wivX*Q_PDq!9Tg-5m2gx}vy8+z>Yn&0Ga#`8+2GpKow zJYRM}Ak1V<3nT0ljLf?BG&#d5-c)7MY)`_;28>1!l))53U4Zv6m}})9V2kuQTja2# zfCB=*84A#}YLu6cj>L>y@-l^4!9wC-&W5w+Y+t;H#v;M~3VtI;vR>dJ!Prh3ffUy+ zLLGc(>n|Jh$W|Sq43zhR;*I-VeUAe2*39sPOYHyJ zC0w&^4(-$BF2AI)Y{k&~(8$CFWwCCrKfb~~{uz=;>%l%$;MVSNcUJXVy z?_He-qnymJ*$B#su#4k%X!WuO`tYnjcS$ueF&3#HT8l6*j$^$aJ?Z6TN@$(zeG}7# z@U24`pi0_b)Af0`8222^7eBeJeouOTpHkZfue~j6iMgfZw*uWPuJ8E~w(N6|^$)_p zJdW6W&51J##Cg!g37nlMrriOGaMds?;W9Z8y|>_H$eRS4j7%o%H28Agqby+b$L1>+ zKBlmIP!7<&P-{otAko*BJN;>Cd%2$;41_p;4TK(&--j)Qo%DYkFM7bmA3QbSzH4`A zzF*qXJzt7iSX^KJG*2q{B2kA&#TlGB4(qQ0u?8R+cEI~f z@cLc0A$Fd>Hvw9*#IV(us$1z&Ad6wC;X=*6YRGGe(lIchwMm@KbyeYdfyfRVWEc;V zh0x~aT-sfz-% z;Fk-;t~4h?;Z&$g6=O;b144D#Rl#S*nWKDkntsnFHfrc!Iv;2VtJwUcKN?0 zFp97e|kwt(5DTyDTSf!gBSK?1}0CeEdCyW z)tp<0b0wu}G^lpS7D|9nqn-jfRDLE3E7g%n+;=6XDzVzQRp(6fUGq>n^>Cd%T5Ni% z3}N~db!S;fp7oa%;4zxZ_R^!=A9RXyI|$Y8hqc|m3`yeoMeLvDTJ}t2ZT;H5n`exH zTKU-e?<$Lg-@pZpvWF6S(gDQ=UeFjW6`ncS`RI%G;N7`2fm_-|^2)x3Sdhk;!M_W+ zmMklJfUo_nm-#r-4i>UrDodY9?Gtg;D)hk#+MOWB;U@h@$e?M~gpS`p;Lq0YPk>RQ z2l^=^`@c>iL0d&ogy^e${aZ`+$5mb$f!4UXwJq&$>0|=UJkmb@r%3$2ek{0odZ~bj z{9Vzx-iA=6G!D#n&zB1Uhwy)XhE~J!_APN6ohrO3b`v3$8f0kJjRyGNQ*5T}1bmn? zaYoP@jn9-9Zpy-ur5oht9eNB?cmLwm65HyEe`p0E07<6UZ0@{nxLY=6KtJ{LpfCtn z(&Mf!&-q7Z0Z5>g^I_0OAb0mM2sPN#Z?+$6KPZy%Tm{zS_v*)ay%!C@5}(3}ef-!F zk2fBd^r0%5v>@G$e=ieR9WpQ1ZFu1zHUMz_He?X>vBvH9@L-{Y=(?~m%ho{$JBx{0 z=BdXlp?F-aoT#Qg125mp^ZvEhU@)ANi3}L>wzAu%vXW74>fnIsb#&?jgv?sgN&lFE zOdulaHpXprqj1s4AGg4<0$`EmCSLk`=38b#fm+1^6g_kS0551f_#2~yvOFkN0NXyz z&%id(^NS%&8f}I?PIMZ>_&=}oh>9OoxxE%&lTEe`c5hX3UFLh!#|jRFqJj+{9GTccatHqHzCQk2d5Z@M5Pp*`yVGs zYpklMf$C%9MEE~&(!yOpR{zHah?zU)2aQgpj}Jzu1*`E-PyP5^76m9eGiYe<2}ik2 zbJsPteVw;Q3GyU*t_!D9(-@*3Ildl(Enm$CkfBo)Hnqvgj~nBoYz{kY)0zs9*U zk=rFF)Nw2M)nS*JWo5s|TVg&Qr#Kn=)U-@cQkglo&Rex0u-_@-Oi=^CvxzIpCBTmM z%uY}W16j&S>b14R{VbF#$nrmIp)pbl1=)KM`f3fcEpHP zfkHn9*qQ%u9ihTy&n`9a+iI~=@b0XMZ|vNE7juK4ZK*4l!Q}gp_I{(!*(J1V=L=IU z6Cls3DV=#$AO_EqCh-8QY%C9*Rk3vm_tbyi0lJ?8jkY068D_*&3E<%O7#m8OY^Z}pNf>+C2R+w||epQ5SP6sgohsE_H z&})$ugL6QB_uOe~ifSg&;H1T7bG}T=F-w~RZ3n&G!527bra|ABZ^3$RszemES-nFW z_JVR4OCK%Cp%3m9YR89r}jm> zoY>j70Rv6_{YkeOu}kW-FYbs9xr7)u;9nVjU~|Hd9}k!h7r3c66RQl0 za3*Vr-Z_++X>JDuQ5F8~%zpA?nO;8#;8slk6tEeD8Tsld+GBD1`-cxRJ&f0L-|8NF zi~n8@{&+|NmetX~D?T6Wo`Fpetu3q;0Hbe3vds8-Kc`yt^Zsk|+Y&p2!rl_kWK;=J z#xrq7_(B&&3(}E$T~~mrWGbiuJI3ndJv%?q>f(Bx&FKos)$t0kVTJQKl;^1L7GhET z=Ygaq`&7w;bAa|Mut42oV28=x>3PS1QiKGUcU`Mf2jv8X1s$+ z^t*<0Gd5TIt(h!JRsGA7bWn~8?gz(>;1T>QBxLZbVwP=FCEP?Y_1Y%nQzZ|hb`Ex_ zijqEVjS62>h9eygE=c~WsO(5q#l&?!W zi%ug>9LMf9Pnt1ZT?iqmVx8f?Nf?>RNHBnwI>Bg22$FI990fAENS&k9;KUmtkRzID zt;ow|Mit~nW!ba<`q$bIsN{flezUeqMp7jr%p1;^l{ zSce@I9?nm-$R_nX1h&?zCeryOwu@K(Gfrh;xgY{l$;QyuK7d2M-ht2 zBhDMn3tOhE8*v}$U~~<)O<4is?QO!s@6;#LK>go)j>#J6EEyr| z2@ukib3>Q$_i2vWtVvEmV;bqv+YeCp;CK5WL`qUQWUG;`i z>!!=0P5zhQN@;S}?snLpz6pMAW8C*FT#(867qB(>q>Q8aH1@HJp9?q;F-FDT`Sdz; z!$yViM}APV1^OF8HdlIfU;Nk>AuG<*ra7`dRCVv$bGC%(u$7Ef(?(4y-qZ73Oy7NP z4;Ao#8%h>!01@+dy`AAJZU@6%U6iow-TJvjV^llwVwB-f8tTvy3?x1%34cyho-p*z z$7O6QmUzs;ra7qS97V$nl7FPnb^-sPWJ(xdE>puK?(u!AjA_-p^ zywYD#K{ae2ff{q`g9p8%PZ}}~9M6WyocBMY52&13=R8O&|c zP%T7!(LUuZtEl}k@K99HNC)>8?ABXRIZ_%tOKi?Cwy=bL36)r$C%{%^;#$^yG) zkEnk|;9JMv9BdS#e-6FqO7wue=uR9UhcU_`!XQ!xcyK&&{$rxWcte5nrQ#PaISL*S zSEqa+)8Qb4PN|iltqL;Q%Moy7(c$!pA&u=whiSFb$x^y%$SU!sQ_G4V)~n*)^XBPy zZ$nZXwMfYcQ3 zrop6r9|Z;DArhP<9nyb2%QXeCcO+0R7MihU5r{(|m6E3x7-2KCys=-IA;ee7_@pP{ zZo@OfKEf``%eZ9FlWLtS|GGYd5bg_TrbHAxcj3+3aS(~}V4X2DR6oxmkc>b=$*dY_ zpZ0=jx)aY2WuoW0HUoMnq05GT1@d@oSZ^8NH<36bzi&h~i(zJexg%8=?>jFL7Bz#t z(l>&(79FzQpKoHkXuR+=U*u!U|00>lGt93Bna|vRHj=k4iftnL;(X(ZjT6r=34Ir( z%n>Jo6QoP2-TUb(-y3r6%?nr>={pyjG1I}gL5MUf!U@->4-E(SLLYaxDpR!Z{U|Xv zH(Wy@{PtF=ymnjqNH^RWX6?(5ni|uLGQ9_HD=GC7s9js;_}5)Rq-@Lx_ZFl;Ac1`x zCREq^(_O;j{&$pg&BVilOzZoXQdOpS;bsrsd$G2Jkk?waO*ndH>pr82PTjgsYml^v zD&e7=<=Zl-#?}nkUf*6P_8HNY%9NbAq9VPpf4yp{#J{wUP7aR5xIzvUFR{uO7{@c! z&XDZ?wDS7^+pkiBworRRP6Q2o)OqmqqtDFdM;yTjh}a9F9bc_ZpO59$ZT|9_U!u?e z7a94*Z+ksm^)>`fqcN2drBM4LaKWQckivtK;H50OEsF#+A-5hfs=*%Sifb$EW-8pA z;$1fq5W2~UW&8bc>L6u(@=sZeI&25mIqNjHB*rYGo0nRa25SED0%)w_T~Bj+qj~eX zqf5tG@hx5G$!`B31#-sOTK_FO^vOz77eZ99!WgL8-ZK4buI1xo84#!>3T(%!RWGh3 z&a)UEN>$x;1A{mx#A1jLP4qHH$gKyT9ze9@EqrA+uX8*a<2@}Hv{w?Mkfd6PyNAsT z<;?YnisORou);_rH`Y3tA?Dp&QYa3l>+`S3%+w;oc?K<~FW)Q)E1clnW0k~9*CcBB znI!bgr8_s{g{2~8N|1HSq}YZw-;B&sKwQ3s@4FCXmhv2d>o5jNUhwfV+*|L3;0#_b z<>9gdzGVOS`CcLf3UA7_Mv7Ai$lNpab;Mq^cCZlI|58**Np^6_5EpX-?YxM>@^O&)D8A9sS~v1EaU5#Kj^&zojoE%${$4?8L^Q; z=VW_leq>N%#qNO``rQYy3~)VELi(R89ITxL1pFE#-PymT{f@9DyS&>3dYESAcKq1A z*YH~g;qLVM03QQ~FKLtLfWsl9ZtDvhs$wnP!ZmuVmaF?RXQ>!?1n!Z}vr)z7&El*+ zH}B7SDDG2W7|Ptkki9haWH%1NA@cOlBSXjC|8u^~OBP)6Mf_g9l?#1hv`)7d=6+4m z8t3BJoyOy#twBNsCu)W{x8~Xdtr%#aG`VCYcN!w%6(>BC|0PU>lPd(Vak||zUFI1p8pw!=mNm~ z9|b@O@@iMTFNFT@%8=4K<&|)B(L%3%4LEQBf+GTpT4J-?wf8#(mIvQbIyTifrU&CWJR=I%wmdV>HE5fU$uqfZ2gg+$}Kpu zsTL%q3bM<}a9L*cP1jfun2F#-Ac*l%9P~mh{$EeV=7%um5w$#Ne6~nD{j{CFmS+0A z6dT>ezQ>%`61aX`4rgV}X!$NGBR}Z7DZ8S>KUzL-S2(^$I?Vg}Sx1<&F4S#OPKW<4 zrdukp=n)m=W$i=9MkE=iS|wme{;BvdB$w3JUco-UfmJpB)UJdlQkltDR*$lu0+K_r z6aKlfg5*_Z5*x7j9Dg#}N2EAbo~?~|E;9@HE;~w|$})B7)Jf4v4%E_L(x3^l)hian zM4djMDRVs+>vF?)L(kOrf0`)_M(9=Hp^+}$TGI`@38Gd8E0KR+CtY-8B? zHp_OIJeVAJ2GEeZ|{a9=w(_ES5U(#Q9y7By+oePhEbUd=}c zyzOV&SMI`Zrx$zn$;z~Kwd?v)H01SY0RA~4O#aSIgkx@40}kzcB{k#tT?Gekp#vti6orgS=3+L})^Ih2s7LguTvIB!X)FS*^IsU>lENj2 zUP~z|+|*}h!8EA3+ww)1v7GYp4nz(Kzb_Abi+^sScYT86N8Egb1$B+#>clwibH^@U zI^zICPyZ&WruC@ZpKm@91q80@88tcYaYYBf6iOo%M_A!E8Tt{07Y>B( z;mbZC9+enMZ3i#;9WQ8x`98ksxX(YRk8-TA7(xdQxT-#f)B<|2Q3+3Hw@tsynR(2+KOP*MH_T@Ni9^fYhEj1k@I#UV>~ z+lf>TzaTu`%VLJa7zALMjeMA2Kb9ya$> zouWHI?;r$H+~mn08Lu3dnI+e}?Ns=1d&Fy3btgV%GSu2gI+ZuQnsC#qJyB-Hz1c8< z#}LjA!5n_y4}s^{dJsd%Jo0^`Xst{R>M_gby?P zlHtEIiaP8!LKDLLol-CaFj0w#-e$d|xNRxMh4Jn?dxi;3emyC?xw%LzhWdug(SaYqfK2pEoLGc~4?c|-q`I2mE z2?zeRn6;-VPI(V1t(_dEqQ@PJpX%_lIB)gyNBKRVd#HZ($-QqJ$9lbQJa+ng53Ei< zuy_eN-rK{94j~J>!u7mQarM{pN-J%rBEwnTjWC7JeUaGDVsH zdPqN(7cUp&BS+;H^_SnjED;{$x_5M)EMA9i?MTD;5q5NP&}~A;=E0uw+_JQbvWcd( z$r!_uqSod|OuNQo>8tQtLSfr0{k|0UM0}wb;hHYv&rXZY!Up0_T%8F#;W8IDB3cWk z+WMCyW+Mjp#k@ISPusf%JYin7M^9_+2&q49v1o7etbF4)CXi=Rfj1fr6TDRTiST1V z@*9SP0Pvi4zspW6y6g<>@lfGHn_l5jL}3tH9%?Q4sG}^Z-QwfJV={iSj%{VlKP;YpA}QiYdP^wl$(h0a&EW1=;)XB|Y7 z^8>!q##qcRGB{2dxK&>iJ9*A8LuylzjK2tIH4Zqb!%W-)j&?lSk|(al@WvbWPj zv+e3G)%^OYdi2DF2p0KYBE*j_(>8?{sl0Q5d*u#g!)Yy?kbHu}Hr8HM5#e z{`7;EuVYk>mBpwJ;+$p9$4UvDMr{K0m?SVzPx?S|54g+7gf6-(CZNJhZIfN5b%t&A zS19o1S#wIdZ?2mcENUiIv`q*&?XsF#U1YSE-aj^vJ)qhH4bT%)%sbHUK`&!)4nUx= zSC^7nI>ut2Lx(owJl!exws4TaE-9tHn=mzc2}m2$Uie^Qi`~X&I&JZMe~$@%7oh|h zkk&eF5E||US<0b|F)~|ZyI)HZd~+R!ytp07d(+k1!h%e8?$7Ld@!8GZJ3Z@TkD~vY zi%JZ9mASfW^|kgExuknwi{+;T#{n5Qn4P14>Jwp9&_UIeu-Ci?t?G~8&u)*BdL5Vf z_OHAS?Rf;H9cwm^fM6ZwU10o;W`itmny(Gr($d2`tNkd~{Q72;*8@7NJ^Rqxgg;+X zTq^czF-FBW5O$cJk6m&nsv~@Q;(=^Qm$H@BzT;MWG<7Jmy-?LO6Vz6f<(^ONSG}%U zUvs3(l_A)6>U2yB;{=*`asmZH){T1_rA8^deypvCxv_X^+{H6;26Fe;=@uA9}7jYj`TxMqYCAXcKCPqpd zk0>o?mc4CU`-*I)KE(dMK{80L1kUjnu(N`9hG%Q_rE|0)4xJ{ogqJDppxM|{R!S0O zIFg>}pQD+fd@JikBtn*Li0ozTA1OY912(=XgDUef)^3o>I(Vy}7u8M2+Y-jk!psXk zBo3WV=njZ~ zh6|n4b!DCXGU8`mIpeO|@S{$bNcIY}q_fUbBtnUMA`*t~UptC$B?ExIzyyuz=}BN( zOH&$$4%Vsqo-1AArX~!spO_&yBAG|w&+e9i7#*YZ_+Q~Oq4dJ38Z%7+F42W|v=xhz zLr4(dSNw5kn&SqbIc(mX9-*=84m)_GIl9b@UajcSl*a*#MmyU*sBk*(T0m2?8Pf9V z*q$7%r|?iPnrw-Q{X6WZ;)7{@)WJO0fr)t?R*z(3)z``*pD05J93hjC-`OY$x0Kj- zkM6UH!VQAFCrGe<+K7H5R>cTPC=gY%M#+}X{wC7!$IfMK{*JYM#yz_N+!|5vjYiJ( z6?c@1-=sf7$Zpw+F~Dceip-AOLwk}%_Ezef-N|r~&39<-T>716oN@BLSesAt(RVhr zKh;H&)Y;xGnCiD1BG<767yFZwV%LF~Gt?9oSMF1XB(Y<@+5E`2pi7ClFYq;to%i7q zKKRRzs_1pI+=0Y_z6KM$^<#$Q^DFZT(HR6Lj!4Kspb_Np!8LIzHcLan^c2L|u~G1Z zUM2!X?}!;Wc=a$tQO^6D>e@wCy~|O5i{!H!3SZ z9ScTU9zSgQZLbSDuGKmgC;ezw|8cgOH6 z#Kd~_b}ZJOjhbv>hbSiz&|CG0>wKvQq->ID4xqd+xjq4qh`{*8NQ(>cnjev=z)@7T z?nLN7&a@$AfX$frha^Lzt2+Fm-=c4^2)a4B%f^vAG@DenxE!%T1&4`owAEiWKIzWV z2~HPtQEuKJO zPFBa&<8;4|H>T;05T9ixZHE8b`G%PCRk_6&1X8W`Xz4nP7WvzG#O!$xW7_|n*zqJf_Pa7j9RXx7)X-7z6!>#)3 zDEq^gho`no6qvGo8drq$J|&Azu$idHU8IX}nXR^^Pw&zVoVmLZ`UZ?_AIM;Fm=eDQ8xmr!rQ_W>(BdLzRtEtJH*}j0bHcFh7ZpA}5rjKL)=y0Em5@%FXw`-n8e%Mo+ zn9h?v_6Qj0R)foun5+C=v^W;@*nb2o*=xf0CiYjPDaKt-gF6}1%i2!k*l5%hevACpXMz1L`lFS0D$O=F0bf>sQzGH? zdFFhV(_{BXxv>x%#7HAYdJ+|ar_ZUR1PwPWv`rn>KVY)z@w!`7$S6Q2wjC3szUi&D zvDW_1_=DYpmd7J(VNsCAx!p_}vE-q5Oj7I7P8}g2vjSCr(1LM^Dbica#6f=8BRD-= zr9WJnMttx&HT9Cb5%Ap&dRbD}=@(A4FdeRIy>*%=?&bfLx*}Gir_>R!Oab|8zhO*0 zj^EZ7eS;4_O_)>F<j?T%wE-*5mhydwfyg zW<e=U$x1!Wx1#t?I*-|y;&T*Ui9|-u0@%cS;;i@ z_uYB(!PCG+^4^~YAFhgdcU~B`!UC3vZaBWTlgi-|SliJ?Vs2|k`H9d^9xQ3^T@fKS zG~{7^n=@CH=JGH-fXO=BJ>MpZW`N~>4KVcJSy_LceH&Dk=kDOWD;=k^P&`UgUYa)p zf`P&i9!PscGl`{vdKTNDm3y0#%j}}@Xs&VX8`W;Z(vn$fcoPwQ`|Hp5{i+?WtC%uF zqctsUJ&JwN+|KPqk1dw5R1&#h*e5v@j52+%1A{KN|3h940bmBhK(tG)}NuMmnl?F$Pcr!&7_PQI)1P{kjdfSOi(9zR>1AN1n; zWCBqN7~Kw zUfym!q6E2xh6;<#zZ;7VxYhS`$cgafJD<0kx{h@%nJE&e1$?{5c8IY) z`wok)8e1NL%F4d+sw9CEvc217Dr14_z~^1gHZ8SSN*v2(Eev>%$Cdo3{qT|F)t=Xl zF6XIyto=VsDTUwXC-Ix{cwUEUKVQl7OS|BWR)f4mN|<2gdPm~zQom>vRz!!5TUw^4 z$8OT9&QXv-sSFa2`&|?q>{ckrS4?C$&0zhHQ1^|^8W=QWW9 zzxp*O7HL}D?BVxIaO!x*tzNQPurq-p)=2CgMyB&O@|S2tb%eOZqYihBz z_wBpce2u4NmKz4fCg+`g_%G7agBI7ZEe9j=!z|*x+yXEZ)fEA$_?d}VB+krBSs!PJ z0usr&C{=7l<>9-1Jz>7_l~rIEehi+Y=K%8jmktb5oq zt1<;ov{K-x&id&hbC>tD?NaY+7UcoXar|K2gj42yYVXt9OtwGDWq z&8@)PWd5EA1}&2@TTv%15v?uYF@fefw%zG2dVb(3k}}LK^f>|0g`K{H(Ei+5+4GQc zeU8Psz$LTu-QxoK4pJzq5+5Z+s5jC2?w&F8z1ntLu@oFPo2G9iuD381j>q_H?(E|r zcbgVtY;4X;BNP+~>W`CY@*mxOeJY`$3!Tm{^^F0#hu-Hrjb@7-s*)POcjBdwu`8}6 zd%Up@=6|#UDbmn3m#F#b$Wu{HOhSqYAN&#duhqLxJMUc*u`le&u3qZ(`G6%$^7AQ= zGT;%Man+JO66n8T52h>QcEcZdH||XEbC9lT+E{eDd4UB=lJpYT$D9~kzI1v#PT$ed z@!8>5Njqw4owT(rA*6#>3yypag?ZXh`^7?~S70d9ea=N3B-o)}I=jSMUUI>IIjsEL zoFV5n5HfLUwi#G)g<&Y?Un`bR9U;4E=j=OCPhbrW1`S`+Bs@=FvkEikQZEi83nN7` z6A5{!N-fjIPn*`-8+S6y6lUf)7+^0hFupYQk2Gnw4vAAW_6wHHd0^OyQgT6~@{vqf zqg#`jH>4*#j%;8ar?c2XLj?s%Oo;oMurPy`Tfo!BSvr-O{6yiB*Ss7pZ?$gv1jyVDDpakqy4@SFz2u&0r$hbf^Zg`+zKatpJ4o{K;%y8?k5DO|9-{q=vXYUd zzzVm<^D5l_kw6d7H%&=fSk5VEL#3bO)6zd?c@Vaq#?_y>5sNt0Z0U&CHxcIcQ5)2L zf4b#tzVV|g^uxIu9<}i74tokSv=dl7iUWyg2F?}Y!;#hq$hXGYNI3m?M0Vo%^j6R$ z5m(Z~_GM+BR5A9&qh3yYAeFZda|i<5F255EdhMv>asqo&6nnPM>^tnbWG0A+?uf=e zq)$G3+zGWDRJOArg7X@{DcB8@I6zQjl9@9>oo0quCgW8d+}JcQzEV#Kq3Q*!5_Ga^ z|7tbEIl9vZ&lBH8G+i8tMrAZoY!;dI(H2%FN@7eUmY~J4vU~X&fuy|V-HyQn#l`7YCi)4hD^7QCCG@@aY!v$zGG7}}CLVcO*1CM@?bx>ZD=cgRA^d|RCV20~sOi4G zE!KC;tyP&i5nRYAoyVn&8TwqdC!(8&3ss&sCnTS1dasl! zhHvW?yQU;AM5p4492@DefO=tMy;7Zm43&R0i(1rRM;L3%=!V5 zkVfjq?g@<-trdh1O<&g#hz{pR_x6cYaj9D1;^aVVTnB5K;!4n=Lf?TKP+@y}rv(9a zE07P`Y$l4Q0b+Bn~~(J+=BI_iTTX+2iv`n3Hjsn!J+rhlDD<6G)@>;kic znd9V$n)T^#`s|CT7t;r;qg$`q6L19rnW6gw++w2W-hns*!kJpfI`0JhMPF*M63D7s zxPE(IcnSl~Fqp5iWZ(X%;+3W8YixAQ*LP@Pb*iP3*39B8?n@2ky090cMw;}~goHac z6>rV`bk#SX8k${n5pl5pv?IFp&9ly;>Jgeq409OlKD|&_Py~%(G8sEm9!-ZGM^?`% z%m4hYgGi?QgHe@d_}5AUvO^BfV5t&}IYXb6$s*tkVmY5pUm}nO=~MTaU^9f=Wo3Zh z0}!pg?lIN=hQu?s{FTJXo+y6*DK6CMUtWOEQx-2OK-1@n*}w2xZ45>N3U!l1E(bcC z*TgIs36AF4iB1?@c3prf8GYOnk|@6d_G^UrpP4B>zd1|$u_LJ~LnXmLGw42&rnTp>K<;`8t(5Al* z6I6o2GM9}2XVd6H?s6Bf(Nf$eR^6cK2+Tfa>@-_;djYZS>D|O+MmKy)teMv{g8bL* z^KzqAo9=2?%RWpA=(n3<{&Cj^50bh42lE4rGU^Gu^th0;hQJ#T^_iWCf-`XQshz5_ ziy7_iwEm2eXV>U%0pXbQMZ|BqgG82ri3LAAF!c$iYWIXK>=wrm`p7pXe2so{UuFKA_7YT6@p&7J5Zz*}&xsP+CX=XFlo#n?u91E2D zYdYF@)EKqYZ~*ZJJz9$RGI{Ko648RI`R&Fz%NKD8AO(IzOMxF4ZxCxu_2Oy*I$ScL z-0HXTOAC}=A?-%LW=xdzW=rF|Lt`Y>E}LeN(TlNnyf;5Y47K?j@NHL?=_hVGDpI$a zrwA`?)A0GwHJ)#aPPi#bC4jyi)Ck~A+T9?+^A-Yng{j<~dPa5gi%(2mzdk+|bKMi` zG&RHm(ogfc=m_^#x~|S3-`>KQ&F&9{>fG6$nzGPny7ngzN`UAT*s|`L?YRDad8CN2 zn8Wjy68{GWe~jpZdHMIq7@B1xTVCc@TF$dYCJi0J~C9sN#P=(-K-VFj0>1Q)DKn|4nIGt^Z+g~3dC zNgUVa)#2j3z@pc?r0?#a+y?b(#3<_Y{V-M1TK{Jsi9F-3G{v4_<5-Z2w zvCln+$0eAnUw@R5X0PM<_&);<-GV}(+9g4O;FxFi6fss!S#?=i+TXyZ}d zT(N|nT9V5wzW;#%p*1;RP#!dWUOMPfg@&56<*JB8{Elm)OB#1)Ub8wJx>QB;Hu4x; z-`Zkh3qc^85dJd2ShKlyDjttO%Iuv=BqET3r>Ej6RnIA}L+KmRSlfYD<$iUJpd71A z?(U0TYFg_%qo@THjiQz#3r!C0Pr9)LPl z-l#{&=2K@{ThnNqTFr#4>gBwpNvaxpu6waFQMSns%rw?Zo3ELnQJ*mJA_W0gax(8{rc7{x(yOEk7kC{uY{vH++ufju1b zD*l%s#h8nySyraEmMVL;`_Bj!qJcDW&Vhdm)?X2irLI@HNGPh3sMFt+OV~A1Tefsi zPnBJuuP-;AYabTaKgWhc-fR5twBip@D+mqNEx|qEIIzg#Wk}GSjrr~o zYcH7~-28_ujr561d$H4FH&WE47+V{!I$I5xGnHf}5?i?uJl$#Y(#V(JFT3Ey@AlF` zICyt^*$qA=ayJRus>!+L!-$I{DH7xG=paAz-VBJ!s6;rmsXu*lzXaCr+rcb3wZ|hl zoKvO=pE)C*05Toi{4jmJJ6Q` ze0S7*o+8ZX-pbuNY+9y?(#TPXJS6M2|7J&Loqi#V)QAi!-_2CrzGPixb_34PjoVG_ z)L#9FCpF=8;i%~w3arDUP!1A!=EKK8q95%K{2VNPyw-KzYckxjzk3B%YV&R~0avZI z)a(nj`LUQpNaI@bv!4t#>G#hR-Z-$DJd>ANK@qq?gI#GzKhK>eub~(7BqGQ1mn-3b=7Wid~O_JuLy}0G296VB7qbq@ov8p<7X4V z7hbzDrBr3nq}uu;sZf&Nu$5TFbxt~$rl(m_Nf`NMDYg3R;_U+G@CAoLoPtO(-MRc0hY=Ghpd?(pH7LTx?%T%1zMjp;Kj9?$(3TOJx- z=Tn&S5Z{r&!h<^Tg}DloT5pfy)$CC@HT%yYX9Gh{8_6wDYhFVW8cl7p@4O#*(rWkO^q>*@SJ`ZG z0i`ZZMXL($R9cP-3ufQrs@b9*y0tTt&^PceUtZk!9`+I_6W<2eH^rQ2R;!>qHz!s# zx-pCvRvw-$$AEFe5Bs?QlWoqv?Y@bMfKDuBtharxiXV%1zT|#RN1JiGW!zCn(+yCw zIge!s*1mz$Lu$HCE4)=jX9jr#W$)d)an%Fc-h)u}VYEQ-rzZ;~^XtSO#vWf{F=|7G z0Nsg$92s;FThrzj;y4M;X!zi%Owf`__L?o%M4F-@^N>>*qc5GXWjT*)sLUGwhu$NR z9BRDd+npw)QbVAb{c=@mD8%uM*ZGliq-~?*y#}#G7HFd>rRQvq<91`b98@lmP|`+YWfTBdT%m(AxT9M`5&&gw^svycr#F;_P`&s0YC z*$Jzr-!Mw1IvC-(H6Z!pD}rGs??)Du2?2$+SPWNdw)g9LjtDoqFcb$cSW^3s=EwG> zFvzyMise<9X-z^#I3c013f3|H9ZLNm-4Cfm=I25u58&nofhppX%Uw=C&g;&nYZ+kX zzuY?|ddJ(2xgn2$U--8AC1HW*Qo1vfLv@Ys>+1;R9|ElysgVc(DuWpu#BND?MRt^J zro!jol9y8CE&YOw_@WX#o8|_sB^nhL)~^VQT8#4^4f0ET3p&>}%u5JWBQgAybsg%B zftH1rnLq&uiApSaFhBLoD@cis;TD<+ukJy&C6iulO&S_$D-*2hP5kdZQItu zMN3^9XjU$}u0BH`jTowYCoZv=uXTV*OJYbe(yM~!HozN{SYu6QKPD#JnX^Js(BPD3FTxh6b zb(!XMu=72PnYbn3kuXoDEm8BF4-B;Sgd0_Lq%+mte|caB4HXq-s!Gs=M0w1fu1Q_T z8`Z$z9R8Aq^*j4T$^v3Y$AbXf&HM$zdBIdRIf}TYC3?!#Zf$OT*7m6XIQE=AU|R#? z%R1TN10tHoJSrnZoH5@QnXdKA#fg+v}v{tzfOMW#6h#Hqhncb(_9U4E@Q@1EmfRB;|z}JKyH-VEEU7kU$*x!+HeL=YUs@ml+FX$ohqdYwY zezUo;lG$~RQHtVLPF~vPjA=&Xq?K?&ly*0!*;w%xDT%S}6=+jwYCHJvm10@S@0B-I zMqmYv=Y*@&Rr{9NRI{YP=$|i3ZnVQ79CWwnij!~W3CP$mb^4#e-I&PAl3`u)^<4bex;(y&?K39U2p4r7FqkAHGbRP@4Slu{s(8Utz7Zhf(L8DTWk3%CCiS5|5 z;bMNDQ4zl!Qzc*eS8>w~_U8rJ7EimLi~58SzEx#kyuy?J2$es0d!sT4fIxdy!e35z zdM1@dqaph`{m8WOqW*hytT6L%rF+ot@+cOFZO@EC(G`(gCcVD?4o?@*4Z-;$d0fH4 zNS`%^tMtY2fk8agSUd;us8XeB`k3IQWDfaGYBm@{PN|%RJlKjriOx3c*U)qsz~<~< z!oilG&;q?-ElTL_0VQ5LXk$uVd7)cP2Cu3sshmKIC-SVdoxPq(Ck`!5kZS3~<9o{C z%dJE$$91fUk{&<)7Mu_QV)svCVh7~yVqgIYB?FmE#g$PRFmkpp0ULzoFu@x%p;`5u z1!jIrAOpZIKZIf~WBn}Spwm(DuHnG2gSqQJXcU>CLOQt{rdNOOS9<(68b*fRY3Ug&XaoLpNbjO| zVEm<7Kb#V&RKiEf5Yx5`0=8Oz5@@>hGfgv&sj|Q`q%oZq(MiOAa|10>=zO^qB8gN-Uqk`^w2m9Dd z(5`;{bN@iP)(PA*byN1Gf&Nl&Gr#JGc*PC1_KgIdpx8g;33v(?mhSELaM>3Klw4KB zt$dNIgL=mK%gYqAZ9PN{sAHvXL1pYjl9xBy(k{Z!xO7`W+-c$nF!h9K{TVBqUtX{B z0W*ts|1=t(<}U%4>Hs(~^R=<*fwV9*AL=1Dk0lCb$R`5qUD*N~eQrb5 z1Q>lR!L!$LvDMQY(Q>;`Pf!g|c(iwUwvNtL$RA^3yea1){eR$TF5bJtRg=^%c8C#wt96$XSI^AyH;a86!swmk)^7NP<^^% zi$zRCmNwXkl#kWV!cX9)a{o>0Loa2d%x{0@Uwc6QZ(+|pfbJ6Ww9fGe*1mEiQURgE zQOSD3Ur`E#oF*wPE8G;lb!jv?Yj#j=J&t#;LU)}lo7#pR9GMN(`}9T&ybmIxN*fpC zCy-()=gOt@3SWu?V|3oXyJ-wwws)88(QJb-2)zGg?c9U9jm|~(FCG)PnR!qBXdQ;C zD-6y2N__-4Oye&!AW1tYCx`O%jfI{Z7%z%jaKpehg*0IT72EO;Sqr+||)#G-?Sd{s}o@aY&F>2MMyN(C!4Di8q716||Uif8>t`+D!4aeDtC zlj+UYy{`?t%55yrfXOgsCJv)kH_rXDGR;~vCX?KnLN%S0ACXEd@y1H{-(?tn=vpqgbNP^EaJO9OIGKuXVd$p?BFr!cX%l7&0!_cyy2tkFFfD2_2 zOpBS`C>c&tZ@WO7-k~cG_ADr{ON8JeM?L6nDu%}bUAQeMzLb7WSB;b=^L zrTF)D!@lvhODpV<0641ag>s^6CRGJ;%zQBb?*AuwqX`c7VX*KSO0!H_L&LkL~IbL0w=&O9?y z1b_~14*y&B=E8;W;|fF_T6;?Z`4ursi!kaw`gcpBb2XDvdn6P3*4lm{jauV`B%*65 z-3|lntMRME%a>Mt2{P3!#e71n=RTFL$r!zQ*q->BV}Jlt19Q;_Ca7{hxfyv@X>Ge0 z8TckEGx=S%ehxk*bHJJP2s4bNzUkU;bKpOtoBt{>T)0TM5*={ZFtKuf`v2H_%do1p zwGDVu(%md+loSM&?hYxXB&3v1>5`TX5kZhfLK*={=}?f86ltZA?pohi?0wGJd!K#w zyU+W6*Y*AR{)pFNG3S_LJaIqw6EoR^D_K4D%3a<(l(J$pgoO-nZr~@vh=*9PY!Ik| z4Ez%#0$gQY5EJCi0w8}L6EpDMS4*@WfUgtAxq(7T;rCiefaoTI(6Ibo80le_q{4~T zd2xxCiX=V=j%VofJ3;TtY!hgHAtJ;O=m6Ge9EDf0>A>o3nalQx;ZED} zBEzPypyhF`&kTNuT*d9J_vP2J!;cvJrj6@`PxcR8jlM03Wj(sfbRq0~l`-8u=9^tX zaOK^JD+7k_ou3Xe#yZl`bc2pZ;X6HuLLHvg0_^cCYJ9QB8@d*ixODiQWd@MVc~?vB z@l28ufA;sP1@I}kdl_DB^odJ{4a(6j4Zc?ceisZih6s^F|Ru0bpqvahxxY>FVWb~y__c0tEHQ<6mYtOgEZHw|TaC-7enRO8` zVdOW;C4dPFs=%;EVIf)(gQvCl4epjbIl$njc1=d6BjQ|O<3R-(DPPSmB$qL(CDvt0 zw0j8i&Z9T1mkAyV@_+rt`xtx~kyE;jCVoY;F{QzlLm8=T_IRS;aI3BKlyK3($S5XH z9h5@v;^?CIZA!e!pO-;kI-maqrUQa1zvu+yDQ0%Ll0g}9nf>1tZvQ=K$OLi7zq5r9 zt!ccp#syV+nUWRV>1 zv{H%fHzEaW2d)2SvH8rtECa~hD(x4ST8KH0)@(|*-&LBKBHZU>86FlcaWsXW3{N;c zRpKu+-NphckZ78RD8gejBlnx~648n+hCH$3}`^bko zpV0T?&fA)1w_1|>d4I|^e`MUeTuX5$0|k#-#2<})rX$GMpf?zLF{D2|f+0ifZzA5j zza$EL+P?QgXuNRrhcF}j=BU824f)o>*t411aH)V*O_EB_djm8bccFGxL^WZbkE2n) zAT!^?P2Z4|@{@f&YDZA7K?4KpbK_ML?1V23gEF~Bs?eDwU(S-&5O)G%2!9fr9(lHu zQ7{2WqbCDUcp~czMHzVd{n1XlZy<%N|HBx|Pvz&^sD<`xw0>GO%xESU-hd65oFE^+gbV!*oj9>e`H)hrG9v9 z!}sCN?%zbHOZ+G>cldkO z=g-%0l-rv=rybW^RD7F0wr-=_dQPtbB8GQrF%t17gkz&DCK`d@_zZ7BKO?yc#7rl1RF0NsYdMhW zHj-D?rr2`lJgK;@pva-tQ4-*DDf1u5RA5yJ)8zAxzN4cjnstMD4f>=hX7G-_wldc< z+^H;geeGr|Q9f~HOL*(e4-IEp9^AsEMvOd0ubKAyVU*Lu=p96e{xtqd+GqhrdB|ay zml%4`uN-vm?G-ua7J3`|(bRPIFV#pk7opFr*;!sS-M-}e`_mqEebmG zM?uuAMjqR(!*6-HebrL62n|QoDtaM=>gSVcaTtjnK5xo=lGW?*;)Oq{wFWRds*W~7 z_*R-rIPWpOxj{Nreek{yufC9MaNLE;&NEH3&SpL(J=UpsD0B9d7Jflur_ri(s76ff z#>WHdLHWqZm&f6LFA-O|TGfs!-gO{YQcSm)gf9*2anz$HoJVYgL9*?-m6fRnyXbon zLzv$CM-=vow@P%d{1WrJ=1Q*c&9-z_|7Zoqyus6srREhu1}k(%N*#V5@^l_{SmY>M z`2Y%Yhq}HJUUKD$Ztsfb)9p$!)lo<{y_Z{Bq^@|nzBArd1g#8*O>J6g$^%={7fTw> zObElX_N(E!3-U%pH^iYbZ-Agd#IQX?0;#A4v;h-ll=1LQHt#65PJk2uZb0vlp7u9_ z?#?}BjwI2eIKbxyr0XbZGa;IyN;}m^p!2$~pA&ZhqfG~0kAC;PxYzD%t7n1hr`GmJ zA&Wc6dvvK%)YPVh&&=a;=zW(pBNLM|WO(Z|k9~)G36aJsL6lJb8N2jHa|KGUFrro1 zzaZ3A+aAF_0)~6v*LpXH5z?}AFzw&;h=D$GU6i(6xgJw)I;lZ^p$suF8bw3${SX;v zzn3!7(>gS{drQ)YS{}r$d4M7LJx~2BYhY!%P+ryj`CBJ~Tv9-8mXmbWbz}mRe$yzZ zoD|*;H7gkx^Zgop2U@)Q{(A=|XUfUpju#h8qjY6}{|B38q2ZTaCV_ey!pE$-#?Z{jt;D=v}X*O?du*^r0i4te{5 zY-+{OQFBFKnov)0Ca!L7Q<+(yH9#>Q!lUIbGx-2xR((9<7SZ*Nd>_Vh(n@|7Fwbt7 z2eOm63q5QOwf^a@Ym0lxiIYfBMjs~JiA@lZId=kus(;Rg*%tjXrXXWV_qD{+<*Ubc zn|j)I4RGzhVf6L^1A6AB9 z^11FxXcVuVbCRDPE`PXT=iQ*$p5fXQaetY3_^oY*HaRZd>s7Z0s;QtPlPER!mpKB> zKl#22WMkuypZ#X$bwMgVo}eOuou=>2 z-FMh9p=k6FOuy)#F8WSYugudXbnuo1=!ZLZE>)&8ft_@5Bq!n}WK@#v(e+%XdiI*r z1-vpCrdF|91v+2}i;-qWOr=^nf+1z3*;32P=?2bBxT++|@nWBGD z{9V&`5n+F5G`M<5K(pAcxu9seml3^40_mcNZxO=+RzPvUyr#X$TApFsf@AjJPd;Pu zQdbPqo}{Ji?@|4qpBVpOck0Et)rpJ6%7b9UBYuf2h6M-_i~1{)`S*6<_$o8fEMpCW z^Tes1XxHma-vCF(6FQF1VG0!qnXXZ6%Y@%}`s;s$9lAS5rk7J-Vum^JQ!_!~1G_sj zdZ6&Cp*yEfVQUr!a9Q^N$?IoroJs)~VAwrC6Ul@{?EMhdhj;LZv=~yeb+in-O zPh)-xh8To~M~Zh?cbl&D*@N22xh{~?-C|1=Wd0vm`-i2<`VCLs;SP zjis5bV{Nhd1>+B&?_5U|4`ccQ)XcPaESAOfn@IR&xeq%7NB4|A>eMqG?A>g>hf zds<%Euu`MFLEALb@U_(Uh_u2`F9cVKdC6mUx_t=4FAIJa3m%#JzkTGr$_0MsJya5z zmMOPksp|JJN#-fapWYRq2tI7bwDI%>>|qni{Vrj1J7NK|Rifb{&l@L)7N*n3=;`aA z3I`rtE>-s$ZcFOR&FQ)!_pPb3K_O5oJZouI)S@CpNVom{OcuPlsK6w#Pf3B72d!F;rQJw2Sl z58GF?O4L0#_0~4veqWw@u!Itezy>bv6L;teb62tsjW(=499!X4o8*i{B7u6S<67FTYn4jFVKPP%!?Gr3B^z0eQUL?x4ni(DlKh&-7 zLKG;>j9@FHmjk49Le9SbydpYnb{^9>L(Yzjxe5sFJ6itAyU)jDij7(yP?sXAq5GBs zTt2RijqoEJkw*+VJHXrJfD|_;pAC-_72PE_=l~sv@4f&cS%${_&0GJF4egAAiwgMn zSo9u5N7q$AJ}r+9idS`CC`nqG3iuh4Ads$lNzg68ph-13aTvm2bCn)1$U0P@6wwz! z?227}9x---dB$onqxttMi2h~0i^1@gAz-Qz6_QkGESJ(f7bZ+;i3Q>3tW#V^bb}L6 zUt5IrokUR~{E1|bFM1|S0gRfv?{*uFj(_s2=G!P-U=Mf`av_~z^`_?)&tqTV#B>FE z!A9lMqg7v-g9&&oUNtM-!HI~N6->YW-v-dXL!^jl2%yyCzf?&rCU6n?P!;xHAe7+$ z*B4=Vl}D*|A%fKL9n*|na%lpOSvaR#vKdbXoW9}DUy_z@`oa*y68@5N`*({wn`UNs z%2w$khE`2L|HS1muz0pHFDdp5;PJYES3(^4Y6_@TPmclk?**8t@cVLuf5&Qmqza(& zmIazeYzC}m<)4VyJBtPkmxi-+1C%!IFN)tVh=zdjeib_aZ$M(zlng= z%6|h^qs0n4uHxi!O&T@sb-^7;44)oamq79=P7g+qsPT!AV(i4zcZn(uK@ud5ZA*9r zW#YSS2G;l$1ap^P@k~NNd9l{HJlYspoc1Q=LBXB##SGY$_dlWcHuo>bY9Zk8eJ}C* z=SwaJMbRCOSYRfnn6{(Q%-g_dSgCgKc#(x1-}t*hjc6XQ+M%Q}tsByWrumCr`2NpH7&8wB zIqUTJW|Kq|LADOJ_1D3kyjL4~HzfK$a`5kZJbxeV%VhvYEAXCWvpcXf-*CmR3#uoe zuk{7Q|A(&?l7h@hzU?5yJX>>l2=Nz=%p=Im0~_1pVW3P3aV{!?ZfZuvbP&-iNC!}k zDeDiGe&h;LnLD=_*B^S8fkPx$x(>qrE8X#X@W-K5oa){9rw}rU@5CS=Z_*l>nsn!jSo$h@q`k=Z=RvQs6xPa6C!A zI4}z>Z^Hr$j61v!g9(EnotGJd*&=4}dgbsPCtO4Qiqc z_fBQ&9PalK_@og+)9t0o6?5?=CPo?w8dkTF#o4C4UtAUgod^;NZ%liq&az(nYZ?Gi z|8gd*g50d?7pICJ1W}}}i=%{~#{@sdAA-{>fy5;`*~`x#cQ+cM4CBn?a`E;e;_4Sb zEb$57RCML?s6aP`BVt7B0eDpR%N7d}@R36vFR%OL2TM~+kl@*u26T%9lHd(ciII(i zOZ#}@rZ8L2BpN7G6e<{ZcJBL%=2yJh^ex9&ybs$OkR7q`JrW@r+}&9!jBBa@L0XEPq;*dCm37@lDa+X|T4Tc6J6fhv4 z_|NiKNJdw**^4D19r{NbZuHP+W9ys;7!Z4q_nAlz0Ypgn9AoV!hUPi-3|kN+4qF`|5}_$o&MygkIZR_#^=_ZNif3 zUlTx!Wy*>b1kgo`0R{x0<3#m?mnDM#8FPWPm60Pii`7I#?bB|!+7wAc?#HS3u#g<~ z#>Xf`pW=<)NDG~X6)%AT{=n{q@bCNgWb8eJ3_Q~0)8T6jtxHAH{vkV=#y_zhGAyL` z1VIB`;1)hbDe)x8%?h`FuEY&tdbta*7JCV1I;n<%M`x9lz5GG~_=2VM{vIY$M#u|H z*7EY}Y9m8$txdu9wC$3;jhBRMrjC)`H`UYL>O73{>Eymo#^Ck7$bwYsJYi|{YE?Ye7GtOdIdmQ$|)|cyv;A;4_1kj0&04po1-wTV0p=*6%A`L0=qb@4W8{i{6 zMIb!ck7Vy*K(}giElH7^vFM$eBBJhu6u&gP6duyJu(Py#7=AAHKRe~puXg+(6fsG6 z-YHtZaI77ubvf5dn~pxC^}UEQ`} zwZ13hRkOoCnRjs;cM>(!Iy4}plm}eTksP1^cIIorkOPsjS6#b6c}U`mFLixkeIox+ z(#p#h%c{N^5=zBoTmH`#cHtHbRTKa!%P-h_>m0T)0BK(~SdJ(MCn1bUcN z*5?-9RF*hpIjPb^&T2$psn>4BNkXq$MidJPAT5lfQv;hK0h{96YZE&35Jzl-_X3#A zbVGz8J4>x_fq)}zf*i>DU2fFo{WU_1Njo|#4bI^3$Kn3W2X~QlcuXnYO}#{$NfV8z zRpQHXTgv_TRNGAFlWKZ3m8!`0O&a!C+NFNO=A#uQwaSk}7GIA>J(0Cu45T9#8`JoI zl@n-s;+W8k^J`Gq#DZFrE~`t&zWna_*E=-IVcw4OLXm0jab{AFG2NE>o^9B!X0`Y9 z7tDxW?D0?RCk6E?bcoSFSxr{=ChHR`G?x!=K!z}Q{RnI&P{^`hWGe#d)dV=ax60(@-ot^y{e zsy^glwGnjhbL4n+p<6oJUA>x-_aKDU|5{HVSP}%F$P3xQnoSz?#WP%3 z{e7FFD?5H&omYfrbuMo3YGFIY5ZJDpQt|T2CE&c@%VkCO)9RrQxGpB9wtfp``6W>=N&J}nmU5dk`!Q>t>{Br? zWUJ*KIay5QzpG=&AwhC>pMFE-0!*Q=BCsLlPwoMG$UIn?r<6i`dDpd+<;nXP5Oq9I zXt__3z}1>LRDA)ij8t;*DLKp?)Y|6mS_V)ud}{-+o#=6i=bc$RDL zmc3}(tD;SVKwxVQyf%IY3IW1*@0QF5y%uWxM=e0g5x$qflJpYh-?IOb;N-ao-?=3b zKnGh-?t$}T9vmLKcDXf5;ZF0nvrbN&Q;Dggz>Z}wfsYl!^MRA5MmV6#Fg+(Reu&H=n{EmER}|o>VTI01{+Dd>ls! zd@KnR_OUqFAe0QNe1Hm2n4}oyQz($Nq>91aGqL{OJ}0$e`e9VVQZM@ao~&f6@%k`{ zMqzZG^{m_!+0}f6*SJ4d{KHM(h5mjl3{5h7+uoTV_n~44xn#E5=7Bud^Dl@KLcnHB zBqL-^>r`-brjHaQQ;6?>)Lk2KQ7O730d^tQ?&FVcw4ghYlDUy~FzsucbyiW>%qo&P$~Mg!Bge)n|c1n{2$JzT=lpyx~k%EWOFZBZr-G0-}k*=nV25GB!?N$G{8c z?)2fx)qW)YX-~acINRWOBvES1$NA>TqXxU<#zqVbq*-jwMgsug?TcYU)Y{yqU7@%AERV3QzpK>q}^9#*$Jsphx3L(TTcq!90A+4)z3`yt2X_Y z8pQK_<~|lu*?s|by1tw7Q7W7es^AK4MdQ<*a$L)uiatxTZqf0%M%_7+GQvoO#4pCii|iP6>L?k9Gb?JmQY4DZYAE7zX>VGe z71A#!t_bebezw2BEGK{-sz{?F6c35ugBm@mA9;p=a~MA}2myns5DE;=`tK-kt^+b% zE3WgAkO~hp1hJs=^Cu5gFrX#wkwM_6 z@D$A+wF__u7Dj6!_ABx4>=&8*#rDz+0uf8g)vIT!(-ytv!=c=)xgkRcX}zE)cnVyI zuOSFU;YNr!&|%4-LtvZs03m+Ff6oE_h??;gIAj*Y$LX37kkVi|ONXCnJ9BZ9s>|Us zID7i`3ca!ACW6!rx>{fEbEf-;y4L$sN)bG9ZtAc55)crYTui9n7|qB^Gu9{;kx?p& zmc{S|*}3sUHap2+j7SL1;nJ=$K2-fJYHAbRc&T1ObWIT(YdIz8jsxS7>=cRN^f6E} zG7j8U`z2H_>Z`ABhj$Xk2nLR96Weh-Fur+Pc_|oK`non}h72*^yUCSPl%Y<}2ZTYy z%&EuGjbiHEqiQ8Zuxo~n*Q0h$X|u{LEN^le60R3F3S#=1MP)zdDt-B8e-r*y=Yf6E zU^xBPHY#a=X6bpg(Dz_G+`OYF0rfmN)nws}gg+JyC8z+GAQ)o&g3MH{`sQRhU$y5c z`&br-dX4uHq(5|`+Z`r;mrz{0e_KBBMt#47w5-hclVN`c;I@JvYxItORLemM2=sAd zX%rw1?zKnJE`*9Rhk6e=;`s!<0ve2 ziHvfIh#F~ceDF%Ir*k@CI*nSz3AH&bCfca&+v&|p^IMO4PH0`y;;bNxzA%y-*IA*9 zQ(=`{=6l8@SAF$l_bMkVo__aCdVL%~B zRhdAGU`7HgY<*#YMiUx<4^VEtN-_rc0J}fo17Ozw9+OKy1!M_8xIaL=ozgKB%}Woh zXDp-?@iX@sTWY`HXLcoYQh5jrXziZ>5u2iahs?py77@KyqJRQalRXv6??N<~$obVP zw35xoTFGZt;g|jJqrITqs;5VXi;sfbk1aPay_mO#;bMJK$pWR{&8#_3x^*tfZKtQ{@|KH1F+rY~V=-CUZ`{ zX2#$o-}-6Er`13iCU!C0H2?#+t3jeS$+}&@@rs;%tc&(Lg9caJGcyfxSF1WeMV+R^{Z$W$ha|(@&XwjEz>80!1*UF(qWVo z++Rep?6A$k+kIS$PcBr zGg*TExGFqK`RQlyxU}HDzoIKGNyr^Dg#hY9Uh+dc^+O*4ijId^o%ssz)PZU&r@2z> z=DHi|)pRD>7yI{G+!sF?MW$XSgz)Z`lDw4!*4~HgkI})EWU$SWJJzJgbjREXukZ>R zDfaF-K*$^eamceAX|9!M$xiojrEjMBupQ+RoL}G94~+zMp7k%GGRA&S$frKYsIx)d z``lpu4%+(c>sLTGR5F%R@jx`!)*Ds`AP2I{so;|ZzwaR;7gX(1H1P#Q!xB#ex|ggszCTu#oTuWM_ z5oIP~ZgN~~zh2HoX3?kM9}+mw=z&qUcN$|!IeZJ%>rn1{APVL%G!WaL&UJm$cfXV6 z>dEJ`#q=2f$j!$HgeCy17no4-4&j;&eybk;I5*hqvsYdlEWgFz2r1ELV}Lweuv(sT zWo>Vqa>F_UV$d@kQwjEHk{vMo434K$P4_k@tX-w3z_LQIDfn({$jCP|iBX}^;>!-5 zaPGkfGZ~mEEC)aMV7NAr=jfv7eiA#@AxP%KX^9(o&VRh``$$QeiNKb?6U0vjQtKAP zOYPttK;5fAkKIWB#duO$@Q&hOeJa(ovDq<2(9bsyCohBO*@bEVx|L?Z%Mou{O0$ra zhPNjgcGyrkEkd&RI5MYcgf(dpx{;iy0n5#&IxLGE(e0q!_nx_W%ph4PNJy>2MqK97 zCMEdc%w=ZxnMB3NcBumb{cG<_mOpaQu#pA?{k~O=+R4bQUPfv~yUlGse&*|D6=^Df z^>E;!&p}{4;3odTb3CG((77egRH{{8{wcz3vOesOs-75*;kWW#lH2qtlgbpvV1FFt zD}G^(sywB9+7HynX1Mwv;{-77n zLdSLfJy^ZIQ;)DM;D%7zGM7GK*mvfAgelN=UgTC;#sgsz zI)II5Awru);HiW`{@|aGy1e|7z2O~2aNXEQM!#Wiesx7?CgjlKa>Y(l-j(JdRn$z! zDT2MLDGs<0yT`MVid2KXs}coAhEHrRj$Z;<V$d~kzr&+^FvBD7>X-xE34KQ|IV@>;%r<3?ZDCB3jD{TK8CpllF?z+d=b zG|=sCwd+z?KP)@5fE@jlGAgGq+u^6@=X&kJ<$LF=UQ?kM@`@Mlzxl10O4%d*9CK=J zR>zbh8JFUBv;=}L`6UezyCJAsRTB|30-zxNyWJS~YKvzFkL24J1%#y~)s1wi z9mLc?l~gYy0N@@Fi3^(|MDpOToIZdj|5(f0QUJOB!o!CH!w;C8^721Y@&CrXEVU!J zmoTTSzu;beCuhIUsQ_~n7W)Cjo@I#i1aP!rxs4z{@K@*tm<&L?b#&??l4HLMd;dUL zr4V0IR()ZB&HGQ3709w6at?o{X}_n1fOA05LhS;BUETkY7W$v1`!cduKuCx5eZ$0G zB1_i3FhE$W4FTwR`?moW%o>pe{0o%z4>s-p9dQSg4}$0fY#foYkHLJ(WiAy6E@MHd zDlkyLgq#1ru>G1J`y)U4zZW)}W@4xdyqtF+EMog-676$lH`l$jVS>_zEsdI*kl3fPzDfdw5Fn^#I0%;7#m0ez(oTA4|0!<#b1}CO zCq^WbS;jKRSGC!L>ok?-&tsxZj^cC1%dL<%y5m;JB8z_XpF1Kc*F|<3f)1sWuN8pd zzSDE{43PWiEtPK-Q;1*t2{3W~$`+*%bBQ}G6Cr@4>u+G|f4+VCRe>b%Z@*UPb8(Y)Hnu zcd-M@m}W(uT}`TJKAtIVe0hdP$8sB0;+R&l?yehuKnP$RZ-yi6-wOoyjG*u4QviLZ zV2Rj;w7<0rO4F16Q?%aUIdkxZulQ+Y1ex^o6vH>x$s(N>QW+rNT9b3(=V|QZ1fw^x zl6dO&xfBud=R?tfFh>dqmimu*)$;N`ck}-=zpw#RNOh0T4o*;Lh8NxuNC*iyff0W1 zT@d^J5CbY)SvcF2g!p6LmdHA)0NP1Q1)$FD%53EnVj&9w_Ckbf|DT;1t_AY!>~rE} zUiT{p_DTL38LzxIb&H>6*o};-)!z%#yZPni7(H}xbecTE*Q}lAm%|=#V?i3CLmJ@t z9L1639RmS&sN6>LrbkR65?? zsP9tza^eQ)A(7L7GNifh{aN3guuu9m7#zA(K{I`yQpQ@!6|yaa z4??5gR7H;KSVsyInV9Y)f@_z4YAHpgf2E zb(PF(YN7PdL=}!?U%mHCv$V8~=|QUn0D^w#YMCjp1*Q7gI(7N`yYEmtR6thMBZ3aq z?@Fk%itZg0tRHTcAiYUM`m^(!PkieIBK4lkT~?w%gAd`{UU`-S^y zn{>ZeAy8g<)6w3!+Q!1Gb%~5R1*7uQM9a%P`IBOaVAjZ*BB^z}yau5naArUT2F>r5 zHnwejQrh~Nlpf3M#=B=_NP8_pv`{TPGQ4#tN7qQF-z;BqMRVU?;S>DHhU&150LJs@ z>WIW5&*KJa&2BQ8nP^-)iSwmhZH^}CCn3xUPw!9wV$GkV_gj6|)*v(H3lcOMEXg)q z&Y)cE)}^kjax>HTx@U|4*5_-pT)!LB+~Lb%ILM8pfaHLq_${1Cc#!u|v_9QjSakF9 zOCn6wJuF^1&M$x~s(tX}n@*~^;#(d-2OT~J!5O+&dHE$=f~|?IyV%-@=RrsK59x9U zp~ERykd`q$1vfo%W@hv3bS8z^4df+w9p$w|5bQ9K5SvNQPHu`XjnW?-Io!s3N)^?G zjS9xxk?;J#lPsl|gpQn^UR(OmA)ugA39koU92C%`5X0yCgf3CpC4KbIYNT-;z|jmb z^J*co5dheWYpUiUiaNyc`}N-3qe9y9d}}oMRF8nyChA`Q#G5qinH1Lp8LjaM@SbnWb9rv2eSHw1=_D{fND_{rrSF5hW_Pto>Ecw7~48Oxx>#&~; z`{p{8a%Jmo3mu79OEBfGDF$SBVaT=6`Xh-O4w3=BaEEh8H(+c11?d1Tbsz_TwB{Qy z5^113#91x;IpME~z2C}L90o+3zq%5S$S=jk3!V-M?9txB?=iAe4Ph-{d^hb#`psqWe}RQD%C?zLsux5#sa!A$zW&CknTQ3_T%Eu2u^ z8@lAaN#o#o?eMxeR9&$PRE`In29UEuo>Qw;@!_JQSzi-eg1}XQ9HL&U8MZ`Q^Afy_a0)2ca640J0lr|JWImP z0&l0QqzBH6Ut}+sd&TuYq4{%{qXjH_Vc0BcnuteFYCv=Uk`0RNc~hXz1(1^ zm;m7bT9W+a!r z8?N#4Op~yA3nK+i3<~Aw9(~5}KB$FpAoIJ*vs_n+X|5IXQz@3*`eZ&>K#*ZBj|;)i z=T5%&5v48T4})?BvHY${%~s;`kVZTAtUh8zFboG2@qwBLL?~fmnkuWInhw~`xkr+U zHbs~k`_8KqI&VQ1kNN5OxvDd@Fp5&{zSN0xCTlb_YaP!@7&#VR+dPhXfO=SoRCI4T z*lPo?wFqVmN29@$Y)j^RqeLE*?KlC6?n@ICOvj!t@KrOQxi%y^uuCY9S9Sno|E$|l z!cpaFh=x)oKeO&lNr=$zI{P5;WH)o z8@c5 zKInh7XwdrnQ(mcZ)7RN_`<^9AK8i>x@%x2tx6)|mFFba9dVW_xmgwE|a)!dv8^?1C zRCJHAJM&D&E;uisy1=!6m3&#dsww!U+ zCn(JOE&`I2cuh6Z$qMkAN7lH19>h_lKP3#7>1k)JYz=D~60jU&!1!8m60QA6<2IN= z3aXJ%g#C6FCRq%5C|X(?P2s&OET8o_Y$2D7Jf|-OtcdiB{X};5)cAqj?f08I=de{_ zuZ*5D8TFp)5*RKXAwK%aJ2AV1uRaU_Q@!}cf^1PXGk_D}`bCLB!4;#ejUKw~x_){2 z#5hRVJnL4MC@+t0wNy$f<>lSzwJg}tUv6%k6w1?Kid_`lv+l^|G67Fb@@~}ArH#1w4ieC5 zM1Fo;=aO=Ot=-P@JOMc5cbct$RMzY?akkID-Fx^kew+7^d^$~F9j|PibEc=E#2Zv3 z32_1f)Ia?2hh*rKWgygLzPK*3KmPKUzwnj?8j?;=f)?OMM~8ud{D&Xn-Ev@faXdWg z2PWE|-U2C|5LDBcW61db*`NE-#qNOL(=GTidPrWb@ZMEqr-To|x-TEfyf1RgtucRr zPK0`wu53FMf6J&**nM>yT{)jTH9$OEYPN!_sk6T+RW9cXSI$4axOLc}r1Rle!r# zrf^2$kp_uk!x_%RowwnjwCr7j3aYo%EYL1VIQQ<>$QZoM=kNzGh&h@{s+5a_6M zIH@%hn?)2c97(s5n=&UQ=m`iZgP-3|oS(uM?MS7xms@xzGnn-h?MRZ3u1VD3 zeW~2Y>hC#AY2u{^`wrR(cRM%P`3O+Yg2gp7Zd+ARMOKKVN;RqAlFqR+dJqsa@pw3> zEORpEwvUew3=r(u8PYyB^qKa>H{I%!geXw?YBda-X#9!p)Mq{Tu#>M_LLth3gm%66 zVPFC-dltyvecGq6+z~ZQ6AqN6mNglzv9ltsbM2wA89zX}j$;*(nC8o%Y!au>HTAy# z5wP?DPgAMp_725N*Y`->`F$To{+vk5U^FTo@>mr3`c<8rde)squu3 z+I@{kGOeGRs9JkfZo&BUVjsVOyN-S5M<1sjrF6#WKoT@bF;z-xcH?VgaXp^VF$~4g zO@-bIw>5eORFX2wsTO>UkfW{Z|4}UMCXDKiRrln(-H&=^W^fW5R$3gK6xUFY=e4h+ zd<>hMe|<|V%XKYNN64I|B7p6ON>r!b~y)|=J<6((U$jGO?I*+#J zo74K1STR4mzdqUb%CyxX)!>4M*ZpitEXk09zYPzi9IW?vBC42NH@2RmS7v+IHD2a` zDyd&`dw=8N=~w^nWPW*1Oi!xs#mu|ba~m&OHNdx*#^1T$)-N&g6*DPl5NpfOJ9y<+ zoea6L_DI=3_uHvk3t_Cfq-PXSBHfW8+Qk#3W@8y6S;{m;c_ zrar!AHs=vjo~WgE3T6x5m&xJb%62>T#K6M3$ECWMGWX=21P>p14dJyu?CXbGc~V!G zE^7R;yPA}%==Bx{hKD{^MubP5(s@5JZ#X-9;Yl7AZ;EkM(37axQ@Onc$#(cHs+@Br ztdRGoY#UXM<7z!^ncdpMy`ST1AE6L6=0=wZ9L>3licZ&u*JWoy-1B(4?CPyzu+lU787rW}e9AS1arq&VzgE1_N(;D1t`VLhhB4 zw0=#0D%G11xV<=OTq9<0*QWZMcVzA8C9!#_#HXxawfxyOOJXJz`wypq{R19q{0YjN zF_LJs>TdkUKOfwgsV=>mzIp%x5Qtw?H5}ui`vG?qcih}nWXG}B%HPD=2NWVSowc)*`SOfz?pTkVhG^na zQ1;P*%{qP6=zx;O;?UF`Y}P&)0}fWNUbMA4DR5iTRsUnb)xF zlPZ&s*wI%{$z;-eNKiWav3~^&8BD9(r#$DnvLg6FU^Y{o?G`y8E%*eybZ>b#CtL&}5`@3Zz9t z?p+%MNj<3-U9?tOHtyudoApAxV`r;XYs&&QWPKOjcxy|z5mTXkhR5&Y*dG+diqYKC zoPLp6^I>8{YEfuYZS!!b)Hk1Cu(hA0dFvtf+>-CZBRSIbc}#Ud)-MYmh3R0Y8;z=i zOCHB@W$1@7SUI(~5ZCXLa~4EB4~geHvv{j3 zGNi9%=S?1E{Ze!M{hAP^K!th7@ErAsSJQ`6(>)q)SihKoc<{n#(GgoXSwbjN-gPwm z+cclj$wekc)!7PpVSX)B$+HvtYjl{O=S$P%@8@l>dP3Aqas0SRH5kgP4JBuuKn8Bw zcWA}x&s18FTpSifqnE4ywXR+F zizTzE&bRmbEExqmo*nz1t!P_}SR>z*Z)UKl(#2JOOwy74k#;qK8d>&=Mxjl7<2+o41;A?-J~AR{Z9$h|6Q=BG?OjfqC{dF@-&(9wwR z`FTwD`Qh+QLHL-=LTp7Jp-*af)JcJzkW2(gyMJ33ct>NBXlt(aWLAKtz`C9FQO zy)Ew-xJB{Moie&`Z2~2}ld+g2u0);5GEMl39Oen$C_eDyp0Q7Rc4ztIrO=F6QKl=+smp@y&rGZ= zjG|1R%re_t+mNw?R7EWv8v zDe9u?>b0QADE!W?CCppebA_c%+RsWQ-;xiHq`5{i!6@0r@?|OYV?s4le$-oEpIaLe zV^A%zd1CSiW$h>{(tAbtrv8Y5kz3;Dqz%YvAdJ26OR0}FS3=QLi3-;;&budvd4?&i zZ|Hye)D-G>1Jvv+?BdLySX<)z&NhJomA7#hDYs8A?};oWsnn^E#ToLt&K>oXC$xF} zZZq)64XGLN>3XMvI_&kmcaDSdpC8o8%-x;uxdk}HP;x90GNss0xgWi@R)%i&i`hMe z7v8DMcr<9f-4Qm#c9{N}PD{~T5xU7bqgmh;MFt=esgzeWMrfUx+itArZ%C1 zevIHjdU&x?mwfzN)sJ02PP%^be0e~hk-VWnO2P#aa~oA;r`eL28P1hbxZJLMY| z$H%xG%q(0oOI;hE@2lI13ix|q4Sukt)-2wC!N@#lIeWW{d#!IbV;wC2UVoPz?NF;J)# z+24338(!^>USAh(vmRe-&n6eUTdlG%Ht<2&7PwuuPXhhcD_5VMtvD_;41_WJcLq-r z%Y1J$%?VS&zbYEdeM^hMDfb)qV;woo;56e^9CDGTtG-sd$KSb@w$@+780`!k0D?wx z|LtMWi(JfDoCYSoY={x@8T4;FqJ&#o!_Q&=;+J@nn9?$1+kZ}g7?$}aJKWHH+enlXt zmB(dJE#z8~7AkaWI=Xe?+x&n~g{iOGVxOg6L|=-zW45c$b<>`>L96@S_ty%P(eq=c zyJ-3n-y>CSAFT85jP}K7L=2i4bg|~OwFUWlEi!A~@fl(ui|r16?{l3!H^n%cCq>Ta z3|81Y^hMyi7s~>ZzIy>*~HP9yC@P zJ86=}PGdE;?Z(b+Y}<_*+qP}nwrwZxdB%UdU-I#e+!6)D zYx@tH0rzWE-O_m#5re&n7z~ijdMOtRV`htJ;10FXBFmC)7@1$8eZ-~QzZX`-)H?O_ z4yKcSmLzu1>rE+GqG^qHCB;;dici{yA4W;-%`@g*KOK994m8`r`Aei*bqY-%tr&*{i2T%0vM(?#!L4j`4>YvV|JC(&UDmy-i*e;hUZH9Um3kkg$9}dU{ zKb}r^WV~rQc$4kb0J#YNAC)AUkf1s3aF}~ZuJ1A#hSqTWiZiS z>H%3#9xg1z=@EB1*?vT~wAK&9gW_3^1(Pi}k=Y8vtLcC2X)WbP;L6x_^T4wr6}51o z#;)B*$Td-ymI-o(J$pZ*TtaIXeO9}2@qMi}xpjAW2@O`ZK!lMi#KGCs2xhZdEu?lu zvk&FFLAIY%aezKp%-a0w1(lt0(+=T=R zJCsZa1zfaSSX8u_L>u3s4bKrj5ZH9Z;#j3J-@J)<^uLc_GDJ+!S(YqBG2ea70tun| zSW4$2liF?#xb>83u=_OJy(4W?^ZM{j(TKp8upZUtOiKQYAncQnj7)2h#wawTgZ2s^ zk$K4lnxlk=q3-&Fz_9Zww}sy#e`4N@=R^zeEaM=f{~jna&iveLZ)VhAuxRr0S4p9Q z3HMqwV-l|y`gq)=IpVcrJ5hB-TCO!#Wi?Q*4E`Lf{&UZEw(?k9LK-&{^c9TiJe=c- zN1N=(p|MC0e01Sbc;2o*zFWJ=0?$H?I-9!4UO$90Fe6v?N0Up0yCDYrm2$3y1WX2r zb;<7#O!v^6pU-#8nHYF3PvJ_`1pdwTR+CMKxui+$MhFXII61!z?(Y7vTs{%orag+G2VMzCy@^RL%$Q;GGMD&LJ#M>0cEEo zgnYIKXz9ZlqKF22I-Yo|KR&zy&1s#Lu=Ve>zm&t3 zAw%Mhzq`ZkBYql>1O^N1y&NE86igh6B7bZ+&*9Hk=ShufHr7E?#Nh12?)Y+L20BK$ zn5n%a9LBKAA!BSSHVEt2ffOV5SqP1jfb|!P|qG3)A@Yz6U5W=R`APw>qNv#U`vYrmIZM_a?rf(GPl%EP(yy zSP#zh2<^x{$kBW@DDitQG9R68(f#KS&V2)q>=sg?+l-{HV3n6k6KCovY4 z+Zp6pXVohCJBn*M5CM8$a9@Ua+}_EOcM3^64=epqSM4Md!Vurb(0ds66{1tZcF;fM za75lOfLIe~*HCLRQKV^Ky&;=G{yv=}AW|=IgUIFYu;coo*Z%xVrBAj6>PSB=3Ei@b zaW8HD1bF0xyb+o^#RP|+&HNvNmk;+Uz6>~Suv3*rzM?_D?D>M{sSA<+p_Xv>Ls-y? zk36)aY-EZ#BK%b{=S@S4-FeaJT>o=-Ax{(t&zB>t4x8+#hfT0mY%u9{tg7zy4EzhH>=QvM3J{2)yW~YGy^*}tbb|2VA>{n7ZqOrae9^MXx3-MB#HJMNm>6CyOvK}jzE`}V1orR0 zO_hY1n=EEOO32~ls&VSO{q(FrDY$O#6o+%fq3(m$ICDXK)wn#;I7RCgurE#)MO>U! zAp}}%e0N>E!_P&1<|(Yq%8BJH1}N9c{EU!1o%I64dOEZSR}2k}?dX@W+1YiuhEkLdtz=n1zwa zXyQ36b$ndFU~nCsKHY^^s&IFGq~jH{DdMYILwdHG66;OI!(vA74(C<+7mJVScvudb zdDz|MaaEIo-yQ~rFEzYoQCsxI$&30-Bp3&8r$#=)p|MP6|{D z@#}6gpCn#havVam()}rE9VE`f3?JbL=GIV}NN#Ds!Fm|Cg5IA#8LrytUk^H0_})TB zK6~?LX24D+84yq!XbBzBDk7YW&eI7>$%~Y^Rb?rTWB=twq}5gPyt%XsFqEZpBLXsp zRz1f=0%>Vj&+F9`)7#Z7Cm@vOEMQlBYWrhH4$g_m(M8tXv2V?}35~h9bemNilX7pO z?rb*AQr?4DX*$ACP`tnigQ_?#1G>)@rT2hoBXjeEO&7JGW9G-?>@Y)^Itj+lX7RuV zV4j${;qn=XaWL^kDEK1YZ?H*@NE7~m&88IC%>-il7|5WQf92;4a=+c{s(3`nHH)E` zcfJa+d3Jj2YDsaV4SKLDc|m;T+TjW|EU4@{zVue0Vji2^5zW-k%jiZ%?tFWoFp0Rx z`JgJlkKcH?054mw8C(*rnjGSkXh4!a)3Wzhy}!??F8xI?`{Qc7?^{> z6epSQz`x{(KiA4~hiMfvd6^`xN9Z%;Re#hnw3n4*TA2GYg?e#~(_8|4rn>3r@=qLk zO}P)bV^L&1D8{t&6(QA83QSkIn)ol*i>B?qdVTIfREP;@0ljv%**3-XjD7TA?CBal z6FM(lx-d8IA?NlED2ylW>P-&|<5{Ycg8uvShi~rCKh|23RUx4nS>3u>wueRgLy!gJ z&=BHF1Y)4c>ai=DTgf<;#P1Jpn*a?89|Z}k?IhKpS+<4RiCW}=T4SwZ8>I{-(+VnJ zNByhdTt+Z^BR#x>XqMW<12T9 zwC0gro}Ve?_m;&}MxchlCcFu`p6!9rKe@a1wnm1t?-U0^#ZoF22B)G--#=|(dOsJf zmUDYV^gN%m7 zL>J-0^xmdY0b}v#c57>oD3_egJ>9}7F(bW|JpMZ?v9k$VEsNkEqv}sVt0-$H*u+A8 z5nd@<`qyhGk6XOO!~Q_*Kap3x*|u@yyK#~0I$LkmZ^g^ho~%wDSLpi{WF;L)b-b_WjSJaPo52)HfCpk17X6Y4m zg9%vC9bRK~n0q+&%_E>^uF~Izt#`72ceMnrGk&;XDWO3;g^V~_Cz1KeNN!Dw&^=QL zTFj%q*&9LrU`Lp%rslN-FWacY1850lHm{pBR#+ss?mGphU;=Y}^>X%zG(+~>COZ1^ zKilAF;VrRWesk&M4|q=3*+j?<7qv98f~otY_u(o1c4_K&gZMb<0|uw(6J>lmUwa5+ z1C8<0pPEBy;rp-b7m&^5+v})x)hdLymoP~sy1TxLW=!PE5rvueau@%Znd1VU_;3JA z%1$x`QHQzycP2*L1>A(piCLJMfNcb}t##Ho+V6Sbrj(?mo&P-RtL!e6Mt@&7rO?3? z(_`Qx)*H-84jW9CjEw&@vj1ld?q0S~q70F)HFrgw7DoXPa5wqz+dF3S_9XB;@$3zO zI*PpcN(c+roBmc0hA8_=P-vWh$pwYM#_e1r35CmI_+w+GSuZ`Q-&!ayJXmG5>&dN& z{Mw<#wf%-tqwepCr^ohAXA*0JRtXJxzwXMcn3F=Gz6Z#ruQ@c0Jv-4a5c%$Q5?wxf z*MZO_C5t<0LadWp!P`=$I5l-M3bLSBFfsyucWZMI28LgaGv8dl%-fyF z$@{5zMCO2)oHux~CqUqQt{5qtlwPY5Ve|8;G%Vt1sjTH(77mF!LO69GL8axJRsj=x zB9sKD8PO9r`$q)gR_M>!zNMM){yfE7af^x1hu6%oBu*f=lhBhRvqWzD+_x_j)S=ct z3-s_6B=kw0y7k9kB10_m5&nE%;Rp)?^B?q$4JESvoa@u@zqsUwVboxNkKBi+(q-5o zpUtSp(Dau$DHelCGoAiq)E0TV2KnGoMtf3#|637LL|vep`+pXI?VsgU@uio1s>H!{ z?UA-%y)bHT2vo!|8uR@Qpny^0Rhv(XtCUrH_-_D8bGanU7BQy;^G$8~ts?hc^<^S( zT=2O3aszH&k}n&I13a4I^Pg}lCKthg15t_mH|e9s`F(Ebwe~k_C(^Lv0vs`wH1}>a zNuD6sm#sSXZo(Px?HnPPfV1yHLF#W2+XA6THoCzwnmPCwHhg*v3VjVq=;BwY24gtL zgAJUB^ZO*@x)owh6H<0UQoGWH>C$eKPLAzPVT#lrh%q~G-KqA$CFAh7iOEv^S0(wU zPDNppO2LkO@2>Wx9-bhCmA9wS%OkcuBu6650el{>?2*V^G_!dnu6%>TQ~P;KcJ2BQ zLypxdz_UR5d-W}S9!{nZe0zi{?PpzkO6k~-vzeNL^BmjIdL-$iWmATAKj#PhzMyAP zgGH>3MA_ZCZ|NSM>*)5p1dWG!Ab)?*WDkELJxwr20gDtK23#NIcT@;KT+K^sX~J{j zW)NVu{s=3_UaDtWv&nKg{a&Pfu&>?|-14-}8FXh>lJ+^L+np+lv-qfceoA$-8wogN zzEi*f)d{C5cYk}BL7ioEj(GA|r)C5?0!_Z5r^Z%0E`lc%R68y&E#>5v&FGZ<>0UY_ z<9>ukU(P%5Z~(m7Mw}A6WOu+rlPBZjhHog86HqYWVq3Go@nYjS3!0?C6}US zW8k9)6lS`JV+Bmy`TWS{YJiKp7r3H59(W3uoUsH#W2doKI>lA1DG1#AiSvU3y=m z(%l#taMSha7;j=%-I;6T|2<#U-C$Ykvf%bYd3Pw$^=CY1Q>lFU7eHna|3{WNa>qj5 zRl8)xtN|tcp6HtI>yLiInJ&)mq&NX1afIaJK4|;pW}K}9VjHG!HYKXoE9EzOLk9)_ zLcnMS(&+vS5#GGJjtGhQZ~t>*_bqJ+%yQ&+QkQ0u(=V%tA&Y zEwyXQ;JX*jsjMGYq5a-Q6S#kmTmf-)?sRthV`0;tT2z7og@a0m_ZHWy&;x3Mb`c53uGF%EJuFQZZK|cI1`E6*B+UX1Xc_18ka%q&_Nm(`wD@9* zB{uW1W>~8G1)cf@kc@4AJr8-m;db!EQmDn0Ln83K_$cF{5D)j62hpQ zXF8WScjZ8cnb5M0D6g$2DV)=1d$W?x{7avem9})}=QX>s&5WG&M<(spT0R$+rtF=U zu{P5v#roFLf3vi)1A^6SR@0p%oLw#0#hzp)hPxf?xv}DkOmxGtd1``7Oe^_T?HSZH zf#&V_+Ri6+gnlUrx+>QAQj6zN@Ib)QLs@dQ**N#nW^=Z+0e`+XI|1IQD@@P{7X79w z0qnZ7oNT3Dxo0O;k^GHF!p!JUrIp5ovSpZQ)t`gp+D_`$$!=I)!Xa|8|4L(BZ`Dto zBy4wau_da3w6Wa-0-}-yA2_6j&MaSTKrcJn=?ei1>bw&EhnC^}%c1B&;{FX{#t8wR8!GLe z#TtDP4~M6wu!E!di47_h$!FQzUbWw+twi6|9?Fu~a_r9_#=gD-C|^@((oXTXUjm4x z%oArVVk4a;^+i{eH=nmqXi)B5jx)%yG+r9x9AX*VcLJ`Il|^{`_E8R|!s19 zL^%ph>j0a}wp#N2c(FK}VT!_y4guPZAT%>q9CFw|>_46}ii*@=$=!1~0vue6F|Lom zQgQ9ycV5v4bGU;agGB$a?yRYsy(X%R&ROa>a+FI_o=1HmX7agpD{o_(H5%z))nD~B zi?_xlC&ofOtEbQa*T6LvnVtP24RlK}kZ0_|E$ij3T24@#Xr)lB?Y=;4Ke zx%OjX%^{YO|IZT#7fMRh{cZ4e)G9~`%0MI7*K*vQh){uZPI_CMj+6-x@9`b*PYO=H zGs^S~cSD#X+CB;!{vlYYzhoTgc=6~W)I8dWONxwi=hdpQ`>^eu@SB!JL~Z2_nh@SL zg)dT`1Dri2HlvHaj6Y(n*NXcONnCAlk|@6&P=yv7D^s>Y(rtI1)2Ffx4S64ztE`Cz z0MrVFP3Ex}58bo>^ZkkDqwOksg|rGXf?~!$*fpW|MgLDDxl8j^95$m9A0L;8^m8oA z`Xs&ndAtl8YXBHyAaL1RXmv0-_HBT!zy41nG}Fj)FQt9ejD>kX|34NKswQj8g#RvC z^fg+*ETTjcd8I?1h z92Gfp`Z++u6A~8wQj*{;g5kO?0e7mmmQJH}R{qrXd@*jF3RZJlCObNF{rmpLt`b8b zyD_6%6E1wgYH%Un(14xFTdysE`QEJvHVZ5BRc@i!)Sx|9SG`|p*cYO)P6WXo+qj8lbS4A z0aL|jLu)b3awnGhX-xy@l*Se6vB)mIW z$U^%mY14tmxV&EzO00*w%Iz`m)k5GLR_@67n0y<{AK^Zy*%Aim2BtxZ=t&4m_J?@ z4yrsg$0?*~Z(>!t!fbwAQi!C*?V0N9Y#81~y<>BGLiK>^>TVq@#EUuHZnag}{(1L` z0VbS&H2?%*&vqt|DtwiO+uAq+^8ZxGuu$M}SY`Ztzs*>M4m;q9@{D88vo_E%SWZl3 zvj1xNp3s87*%)Q+PeJrG-O)}_E>WiXY58(gMy6f=J*q^l2QI^d!6 zx-D;au{=&vFPK8hY4g5C6r+K^4fsoEpM-_!%m_;O0@X`8oX4V<@?PkglCBATh<>;Z z2*-wcq1#PB+1>Y$fQIj=7<)oBj;1c^(#GkmPRq$;d2Hes`*^V;QN4Z5L%{EJ62Z0q zTT+x5B{m#oJyY!6+I=7(xzzUPHjbKNv5&YK4IjTuR&)2^^kAS)r80EL<<%P4m$_Wu zt(Ww_u+icl4;75{wQ^*~-G*X}#rf}5m29O?y;dppcG)7#kr&yX+m)CZ5(k&gPB68H zY`-}45qj@=p?hCbsW`;5;-KO>q~Od*Fe_5LhvUhMdi>dyK=mt>B_pv=@leTkVPy3^ zW-D9V!byX1wKG*Z*H=1q$=9UVe_|F+^Y^|5`c5?{MznB?Tsn^H^G7q)#f>(@m9@#v z_iSRi0sb(@4q*_zB$HRJ+J#L=M9?*BnwxCFvh_+eQ7iwGvi_y8WSr9EfgCT{vkP^bnS~zD`;)%}Us&V1#18e3 zWl^F)1@DLgqjxOPhXNq7Vpp!SCpfsH?^?-Jxg81`fk)~2`I1wMPe^^b?@ zBNlp{MzmDS$es?!Ov8yAy09bTNUVj}ZT8Ap6H2GDw6Ce;y}ZK7Exdp3)}aOpfOL$3 zEY@5OrUyn&Z2L((rZ4ZsgG6mq&QYD!J2a(gv%grZ63Yw#_DLm#06~{y*eFGS-Mk!* z>A*ocDSWJlRb><-Qiaj_!wvuAEpJ56!R|k0(;5tW;}VA_{WoZr>0PTdPT*k0dignq zE18hL%DRMVY)I*7oyZHb6+Gv`QTdSKn{hqbGLN?YU#3sk({N zk`vz7!rS=grC}CzUiYdM{AmsEn`s#3z^genb+EW72>Y+eFa1BU(&J3^O2pB6^Qc`Y zl<`Mqi+xiW4z6mhurhu7SFv$0%>1V*$Z9o412H~{Tp24dW5&h7MQzKxUp?n75>s(A zs(!GEuiXF>VrZ&10j^x=kD!QKpM=?Dm`Noo%s?{zVJAiMUXi$4ybjIW@RP9}S5PeJ z=)!p)02iU1zjZ@sp_!Dc%C<4wMis-9A$9E(WNd%O5qq>O$N#A1e=k_EV9re0^kt0$ zumWeL?3um3(PH}?HktYR}Ou{bhnRR3%y7`JmH;keru-7>JU)0 z#9g7Mz=ZHr?Q-=|O0BFmeaH~+rp(o{xHTG;R}7{6K!bKLFB{@sPcc42?~T_gFkym< zbzvA@bb=I91v6t$M9UsUFCG*=Eo-u{n5BR*&}P2 zW4BodvP|jjoU>`Q(Ye!D`jiw+?8)wAN6&x!P1^3tX>mjOD>4t1akoanv@5jM!v5I5 zeR99VX&wIen_#<>bgTnL|Flm&|Jki&$F`_@P>7MJ`lYq&Krce zZw>kDi`ra)R1>?l8iBl%gt0&Wt*h6z1q)VTCf$sUyo_0*0|vK}TW0hcMRh&eq&cnX zr=OH#hsKnKZwr#XZ*WP6G8E^#<+bs4O*d}QENY$^Wx3X5V_~fE%(g7 zxmZo+s5{aw^vKY=s?2@Op+yL^l(V3`=z0g|`sui$Vz8dR#ZcHn=$=y3ta66W?{lg`ey(3WH^{2uD z=rQHORIc7)>X~aAm%+})LM6y_F;RoN<0-J`i}q#{NKzvXy^#diGBdD>Ov{F|?z8;V z`CFEj$YPZi|2|lP)^nP{(h3eInA<8C8TF7VO=AIyXo~G!=mrHxTy@CZWeTDwx-JRS z3_N4GRyMhD*jR`RdAHWb$3mXfnwlSaW@eO{>?KB)q;jhZ9hc}TOSZE;F?>W^ef+;e z!x0ETK{Z%jEnt8y8b$6n@?%AyC)4F*Bh@}bgbJ&2nQ(T4GZdCkiB0uULn##>1!?IZ z^`26ka=G|++tL{ovy|KUL(uB`-ds@m{OjK;^5+EZLmlcLG&Z~xrIt7qljuK0_4{QO zfjE_0?nflRtW*4gnCpVG{Oubsuc7o(^iY-Q`CNZ8BDC7;x5=u7tQbs~5yJ5D#FH1A zN?2+S`Y*r(9t`Jy>!t=)2k`j~?oI;CyG)aT5sJ{PKw90_=Y0*76w z!{dteI&2a(_gs4FJqCWQ7Wz|d&sHhYZzi~=@<8o|_J^@U7pIlyxdylOS%P}Q9uX< zuGLVVNQsZ;E4fOXr3IH8k*JFG+Jk^q$v5@~vUk+c+r#0by=KdK-0rEFz9HuH;JdO} zTCS0Wzi%HAvPXPpNEn1C#kIdE>Xg$jo(vuZ^Z(UD&}+Y`%?|@zTQTRQtJqFITV!3h zba;3w{UIH)<0_((4)ab%ivkuYPZG7@VVZqoVe4!O8AxQe6dKzJ^DDf_sB%ymQ-08#HkoQcKb>%R2mqWI0P{=Y712HOL3lvjXbR16^9O95N~~QPE<8>A2WET!2{FCVzCj1e!S9 z)Vw;W#J6W z*I`wI#TELyob8!oP$y0OX_+i748*0Nl55}<@i;20ExZFH?v1@N=1cR7u<|fk@e*}K zpY966#MFD3i_!G0PzIr1JSY789<<%yQMcEMG13!eO6@?+TJ>-2Nn{o$4S@a|yevAx zf;})U;=fsHTR08OhC_^meoy{$t{G6yLjuZN96oK5XEqv*`!p&chn9N~lhdk@{qQAr zuvS4svW!>QUN$N(?)CH+*jsKXAZ2gGbA^HvbaZI<pv>UkHo4DY(BP-*GeokMej?4o)C1lcD zMVl9aaF}|6TDm_-x58_+f zsbB5RiL9qdly{WeSwOJ8spf$xtgDRP>s0&pVeKy0)9z|l^b^X7@tB8FyIf#nZs{9D z*KlP5gyZ#HVqnq|Io*eZPbgpIS>`iP+x+Ll*vYH^4M~;BfM>$uvVk(^lBCUGDZ&#X z15F_PsD0iao)yQ!&3Q>!8E%z^%j`z;8+~)jfEXk)x)+ZkTbLQT;Qpguv|!~!Ju+Zm z4ioJWNCD52m3ICzFWGOy#_NXXgdKYNEhY>MKtun7lT@aEspgYw2pv{it0$!9u%7Y7 z@$a86^!=8~0l3?p^7PjjI!lxL3kj9({ekc=;e*$=*iacC)#4jI^pVQ*Zac&H20?+< zj%ol;r9#7Qqp3EDTSjcaYMv4BaJlx?D8aQvcyI%a?_3Vwvzh%+ca<+rMIDz0m*U^# zkub)wbt{U&%A2D)>c(WLwx!+%OTPALH1$k|fwQ)KOJjN5Z!U=I?AaExai@EBq1bAX zcleSdQ{qAb*A8xLj9CR2h|Lmxk)Ne%0;PsNmA66Wu!y53dtVWRROnx8YAB?ew_kev zB0@O}$f!45FS9HJlIEOm?{Q@GCS^F;w-NhIyZO^!1c63A|L(sDgC3nW*+OH(HRtU0 zvbDUHVR?_x$%l#(Ex0 z{J4p1@s{Z&+>*kxHk&tP1-be0fb&=k2?+iW$#6xa=->@6OJ*tQop;F2E}FNfqMjQ@ zmj(eW;YJqbuf-_=?mtgSBLorLZO6AIy@WMFV7+@uw?jyLa`~<)!;yd9kdRiRs}3(> z&EIX@*begJ>b43(3Z;O6gAhXN(~Vf~#8`g+LM}=zr#=*W<0aSr}{1Ij@9UhwCj#! zrJ5^2ueM$HXmejx;=-4Y%R%}%sy~dUcp(i?$dyhP2Legk$PNj{W_x*)TRa)vfP&Q4~($sl>WeMeEG&SGR8m4s@DxI5vvY4 z!l|lBth120dQuy_eNr&=L?RFTmAQrG1_SywLJP-)$Z30CiM%VWDzx@l>yS!Qj(U3i z{2GnL6SKHfqfJ8O*OaVr{{+cXEP(zAL*;UcD}ULUDi7_JS3jVvJ!Hxy<_N)(OK@1g zJ5w=n9CyzWf8HClriL`gAeHd0*MMY;n$pm319UCXYU!q;kCyqmGq>w(pilYv(B`Mh zAC)~4N?ZnY(X{{iA@njdneIUFiJ;rhhYRkGgV$HcCk6ND9MO8w`631PhKCLJOAGT%Gy-I*k+HZUQuU&ddJ6eh)?*IXTsY@q>bsj1h^uI-;_k6stA zw{L5E8H%HfqmcwFz2HSBaKzy{4dTk>qM>iic zWAJ6T0jFs&v*25K)nI9RQyV_#?i|hZUSIsUTcR;5?-gQ}Wf%MzJTVWq)xDzj0l8egmQ^#3dX{*{>K>XR!{qUq-cjUf+YzT|W43fA0= zZ$fnT?)%RWKjJSnEb?1<+rbHSg>KT2uMRP?VVM5dOSR#tYL+W$>Rg)vZXS0f6;1S! zt<6WTRCY03%2TqLeC5rpe)YHAL>9`SqW_>CRz)YE1-j|;kb1H77OI0ARdQ1_&G8jp z!;B3pR`t)dQD0qS!j*RFHAJ|sD}E`e#)y(b&&X8M!BNdLE%#k&%pV}%jA!g0%)={< z$L7}#ikd40Zz9~~N5Q6>-;apyNKjO&35GFR9QR@J2u!cTZG`XFFY3(Q{nD{Y?|NDmdxt7Z+>cpXD@c^QW}dV*)p`s1O2VESe0%L>)R@sWbxcluA#1baWBKeg-mbx zEaW;9>;St^gTpfqpUX@1k!dFg_O+T6Wia$Z(<4`R9A2WxY+XvP!%fHoVqvH^IGXHt zkbN1=1G~+740O7vR9^|sfs@yh9lMRi-!n~?(Go1N6N;Q}EbkYQ3?A2#`3QXiUPH)Z zQE>)M+>g*FR}N9z0gK^|$lING8}oTGv?qz_(v}?9AF9;bR@805^QWRZgJyx}CkZ(= z(N!jHunoTx>{kn6?ww5>eM;9_AAhCXV^e(S_OfzReK*JqC|l1~X`Q}6I46w0fUQaW z=UYZ%J(y6_!`Imy&u*ihl48E`iuNw zp5x~5OuG)Gxprfi7c^a(v?x!n(@y`M=4o{4#xF#dgY$YqHo43K z_LrwpDrbz^EmKX{M&XU_X2fCDt74|q(9phxOZBH^Jz>Fnu*~tyf;8s0vaNbN{%~lJIclMHVC&HcV>F1$R^d$Zedd#2Qk>}QeIdn4kPV0)OA`_- zP|}_*)kr<;e`MN}Zl?cT49}V>-j%<-ygadoxnvK%U(X)y_w-w~kOX%jXyS_y)~`lP zVOW-(;MfXRo`j*_Im2U3(cu*MhJA<&>2@yl9u%6bkof;z1UY|B5ko?JnS5 z8GR04%)2bYvHN4`Gp@%^g)&4vBasUl1>_t~{}Vcb9}eAQRJwaI>ktbqmt@Zdw{O_9 z<9LpaF~hRF_4TL^&F&1avk=Z}n7`jKy5KpOry2sJ*-ce{yQhP;G?UpXI-5mdnEydP zm{HwZ@}g9c#vLx4Z`O~7#fa|7A{}k`wZNDa8lSKQ%zMABr}OqJd|ucsi4qs{8(Q0A z4)93cO{&jotaaQ5(=%?pt}oy6OGG~)8EfaMP7m;CO>lKUAcFO&P040NHwZQ@4`iU8 zE&fDWb7+}Fj$uMh&o^H$S@|Hb(`=%XBP!)vqOoo{?%Oc06MMbcg;MAs%kkr*rc3R} zTCziyuq|8SV$CWd3VY3#w9U7>9LcJ#y&tvT(_OhvXRu-8Ms%2!oS~dhsc=v@C;X}; zC0a(TV#6j3l8)5P-q<_XsTT)PLpy=8`FpSoga_5eQ?V_HOtq9_22_*0bW%?Kfo=M* zu8<(5V>4D&GMnwIYBVnCd`4RRJ+>FB|7~b>&a?Ztgw+f;2%#I-s`CYXZz>6wMu@`Iv#BCBu8f1}@C|>Xk=MUBbY5W*$i`Fd6 zM{^R>8K^%P5Td749oxBnE}Rn0j`K(PB7%D)X|+OqZ*Df^D~j|14Db%?dQYMTQ^fOG z(N(H}pH>StAlcR=PQhunb(VbP~wZ`sP?fArKw(szM@ZK5&3XC;Zh+#QdJ2-<9X=*Y)c zNDq@RTfg~yQRu~bJA99S9BqI76ko^PH$G_sS5Qq=Nak}Hce2-S`I0P-N`y{zG}ObG z-@0S+6{9W&?(1d_QFS`*%jBeHo$6n>9p<{ypA|~afx$V9xqnCM4`rG(7SG`4R2s8cFMtdb*4nh`}v~!kh+SF!SqR7(^g+4wF z>>7tGTM4UKiv1L2(SD;I@P)#YW2i3aGkJT&1w!$|s zX8~7MM~{{2zpq>$@W;?=YV#YSnR8K{7<;umlxnx#gk#P8UE?{NiawI#Fr!y@=PdIuK02pCs_cJe)>}0LgNamnsvhJ?!VkXF80#ndjesNR~&J zz1Y#e&ha+utv!!7>s=LP7pE!-+5urT1Mwqc5>cI$o1dE`Ukd#n&7#-5vNwOUe#<;m zImfg!P9RfEj|J{fShs1M`72nMlR>NcJp6!OzAUY`QQY@gv)_;Z>>l2X1w6sZ=5jVr zARzQS-^*$52+cE)AwWZ8T^1x>hc%|-B$;QNd70DUCS0|dE(SUr9mr6WzrgX}7{Pv% zio5e5+Vo9&cuS~>R^z761#T9+RHEiZ(LWFvMz1LVJkdBs=c_;luRHm^RA*e?am5n% zf@MIX2^8YV^vuP%t)GO7$jepeW!<{rYC*kYUFvgCbO&!Lf)Tj_CC`Zp?KtPp&XH9uEl+2 zB$0Q@b(Xzhhj(z3t>A4|#4Lp}{A$H7UJ|wh^E4wu(-t-1{)Jy&BNzQFMe(Lf#TTu3 zrT>i+(&TS?deN&tig$ciM=qCTd?j;r*tI6GpdhMI)|IhY zZmO$A4$e^ck4?cfQ*&BgSBRaRV5_E~enBIL1?pQOK{tG|UT}%}c?`5oVPYg>=>)k9 zRqIHh@~}*a77q3T-w!>@Cxj8Kt5Ki^ql@}07jl+3fui8L*ki)kGBd^M^U7>r717#-c{xcW!w`@nkx(d?Il|ESQLv70fZLS4`TV?ioH(k@qxbA0FXQdkf@BSJxBJW5GI z0(h=xy;l$rJfgr+6&6VcU1Tz;pA5Eg`9O4TXd~3(b$X~t>|%dahlL!l!eqAW;vn|d zXe3GC${8lvk`%_tDB5;(>DlbRhaE}{oRv9txBax=x@54zvRKR2<||e*H4OeLNB8rs zl2S}aCbHevxgZ9Iu&U(ozup9>(hpMOmY9>4Z(_k-f4X{-?9!~ELYWDUH z83JXs@k*P#KzB7yrRgFr#;M<0{?RH_-t2FbawWfnoke?-Sst<%5-{U<04M#C%Ql1}I85fI8!ZBBg zAsjC>_)b%ydVUNw-6FvzQsurL5qdiuHhbN&BbA8|6{(@MIR!ffJxf8d@8%0G@3iC_ zx_my&G^?x&XY%X)1r`DrlrCKtSXXJ}6YPIKh5=CFl!cA!btr(8t0YareId*nNyAH-^Qk+3`-`ztW-C&RRJfrgirTQoM`6OH;~& zhGWhJG&{erhZ+*J;=bQ0oxN3l*eNw!yhs8?{C5o&)A)ap78Xu0C$n`YEDBupC9i_z z2v+&a_FGL(VFLATYf~gjWO^IgE7m@}%;0rn2pX+I4Hb7$H+`L#pQPol(y@dDxE9}K z>*PgBm*x>DN*~Rle^F_b6g5R(7%n5+O#k=oDF1E&CjuDF-7u}Q7iQx1FlR_&Xe1=k zTOxgw?R^)B$bUhqNmI3W;b==STYrY{lg8#+vwWa~?+SciTT>nYny4X=^xF%-9 z#F6>8?90@t>~NUaXU5B?bgoiIK@{bpOaSAJPT=Z%0n};9HZjR=BenWb;dZN6ApDItee>dj z>Kvx&_yN)KW8jA=+C=1kdwd!S8;tP}Xu!WSueY zgM=Ero}wu7*>Apr-X~7QRtwH^T%WpU8=-bGu?Jda8+B)@7geutU2aYu?1W8QWTIec z_Qry~Fs7No>YETv@J}8O+PE~gBL~|F(+NGc&8)02&amPAkqnhe@L=07Q=^_MYw|L@ z(L8^Y!lcummD2A9fmfL1IJNQJBUn9D!6Z_GlBsw6?@u_}l6rmon1FODE>`IqUFsvM zsB-q93My^N%&}B1!Bz;4h{stv4$9xSu1^fh#4Z)Ufq8;J3>%8si2uK};qc$uNaxi{ z2G$0oFA@EF8GBZY+M=zdI)>%EdrrVuI`O^~R=8b((7^a~L&}nAtI4e{9Q-;ppr6K7 z3$#Cn57cpyMU2!=1IPFq9fIOo;! z4V4c}jj%rn*#7imK3}}a)l9kP5pONnPNAFM=^K}Ccm3~pl%N3Km@~__2~@wpxq**y zY&9V|f;WD-GuNZc2!!9Kq-^r44sMnqda(tqc>MwmmE$b^Uwc;`59RvypRtBWaUxNY zy~vs+HIsepJB92?L?n!L=+qHHmXWfr5kgW~GJa(nB3rg&Io9m^KFjYO+RoeO^Zxz* z@%nFO?zy(-y1&==y6$Hlvq6hQO6|M#LqS~}Vuk+jz!jtZb?RRVB<&t(Lfn8cS+8v?xkF)L6*H62^uytg7Eo6Gb0ARA9DY zx$HTe%f-RTzvTqM{1W9NPNAQ*ms|^9tB#B#vJ7AQ9Jr=EVs@)`(N)J%)KGxql=UZ{cz_w(D)Gn~=Fpg&OHFRwb zhN$Rsw^2-;&xVYTd(qLO0?O7<`cf{MvOaU>gO%aJ!(jA&HeSlffV4={hk1ppurt0X zVa6XdmzT(723r`+d#H20K16JL=IfhMr^E!g0o%HY7Xit{OGv;T}#uN7% zS{omk*C1chXTRp-rlGib;DL?u+$CPuS0Q(gL-Gf1_v(zyk}e2PTKdZp5~0A&d{bdAI}w(FPjPA)dww^PNi_ihxDmFV zqSq~A&9uxgX;#i+NN8o07|2>SEAIcaNaxE7C)6oyZ%)Ls3_hCy`>83b=1eu+G9K?@ zl22hul*vsIKi#;^A(4VJ#KoflofZYox7$oQD%`aPd92rh%fr{@BV(%G-D%|XRly;U)xlpP#Ho7+hY}df-#Wu~vi36+fY& zMhw(Tai0kykI4F^3bO|&b&}qvQOgn(9yHN*s@^##ns>`p58(3T7lJf)#xXiPlFBAJtyEIt|$;!49Tow1Ug@A z9+OiFPt|c>D1<9cp(|@h*@>K(F2xc;-%=uOht?_v#K?gL}J20CH|txOQ8!Y2vi-f;CVEs1O4avLh%>|gmCyhKaJ ziy!#Tg*L5b8EhZXH>lN*g1zR57Q)(`q%e#3TE5Cly;3bY|19Wv@~L9_>Kl_c80p=4 zQ=l-<6LRh*m{zZcD;bTC_Q^fo)DCVZ}c#wIQK>Q>H0gO?`Ml}-cqBf=x5JDc9x46bp0kXeksU;E5n zv(a-<6l(*g___dwpf%V1t1!Y~2yn%8rc2NbE^s4SGLfb1nzMw~aX41Nj@9;~32&D@ z!rZ_maVPE50lJlAh2~Ps5z3lso*Ic$(uy59+IG>eCZqsR(z7dppxappw8ns9!xGGp zP}EcsJKQ`g_ezt{|A!PGTrPs~@UA_nHnzW%!S8E>4^87MM-qy1dqs8Dy@X`Gx6h9LeY4t1p)z~7q`|vCQwl*2>OYN9=Otjwf;-YeX5dd51KK_ zv{Gksak~ZG(fA@BM`e&A;p7zY;6t4tt0`c`Y6rbM+{tGe=^`;Os2@({L3UGJ9maZH z`6yzXl~k8Lz-vFq)VEzTil*D%Q8-Tq`Z#h=pi#Y|;6^6JJRYDvy02g17dhU|JXM=K zCpwYJ25NwM3dQqU@pivFs@5&HI?^FFrh!k??L6)JtiB4DJx$`dxx<`e30B`CL7IKtP1kY zxoeAa?-iK}fBR}0x|RwM!(Qq!PjX(8*Z%zU%KGd* zH=$S#a4ie;$L{=4@k1L83uvXS*&;f#f4ucwo7rhBgqFVPzc+dKml;@Va@giV+$+AX z{b{5#u)SFIQCs?N^4PV2!}l!3bP|4bXitLmBVhZN=gV@x%ezM&c@#6$PaFIz4&;Re zBXu}KE_qJu$Shu8^WcAu6;ZL`rGZ#Jt%&*{m48A3qCTPEk zjUu9Q_cN8(E*Q*AkYEJTk>&cwbXR_ng3pp3E?yK9;h1#W&<^7M#|34-mn&j9AYJRL zT$7~tw;H!98U{?9FYM?MD;Zk3fQ5{+bc6f{WJi`I1r9yNqf%)( zQ!ehBVjie8J_rT(nhe6Tm!7$W+6|X?eEopiAz5-MWZ%4RAmOX-NRXK<7W0Ya-0}&| zLMC5bfcpq`UzJra9`?yw2}HhgpN(vJa+04mD!IL(r|7CGzubD9!po`8L9~Va9An$y zq(T~Z6b&ch&3)xi%>&e{VKqIs14Nki_ZLFrh&9B`XL&2-%w9}-tFi5Ft;k`0Nrzj} zl|#{vO-cGD1p`9CXWpnU^SEiWF+JintUqW_WTd}6x`afo_d6TpZw;)hO&ijINrT(Y z=B*@wJj0snOc1MZv?sf0bfJY=;@z~n(F7?EO zcRk0aq&=twXIm5M%4u21SXFsOuLN+c-_#h)wZ0q}-qQ>}bh4>}+Z!1#98Uw;%GV59 zaZ1uc%tq{D^`@ovI6>IZX+Fz}GB47#5jrxCsoLFTgCOc-Naf2$0LU^Jz_f3ZYCoB< zkyN4<75uk$-{Eqd9W`tH->tXYzQwfVb`-C&(B@4wV<#dE)U{6S8;HkLBV1sR3#_;J<7ph;4V=6v!gq|^)*k1RdWJVAHsK4?pZpS!sI3kZew-`QFr23Q?k<)+w)di%|d1*Duy1d&(KJbaVM9MWFV! zLohUGx-=7GRK{C26C65M@?zvVS64^ARo^US;Do`b@syn5ULhHz|0oTipDj&Z6i`p6 zKzW)&9r*UkX|sAS6KEjvL@@Jjw#Ml;McaeWlX7nV@>;8*##l)c$1d27FKHD?m;Cf^ z8u{w>OYb6P%DiKsMSTfeK>C)}iHu#69Rnmae@Um}wclL`D`5S|RTuGzqDu(D9J1dG z2}T7ro$0kO1lh-L<|sPM3Sb&yBVQKN|SiUY2|8nw3daIW9mXp>}@N+c=?)HSVl zn?ts^+Xx!OQa@LzBY~4{xJ=EN_H4=oPq%PfX|r=%>|PrRqp#8cJ(?-qGU*#{p*a%j z42^)@n62L<-jNw_I?wb~h(%?f;TJc8g-&WE>&t_Xo^~pmu(?;DkPfB1I{6H_x`y<) z+6p`t0WZiO8Y~Yf32bTBmDV|Qa(bDQ2tvZlfb=hAmc;-B@?#?pjhzzvb^C;mnf z37b}fuIP-wSvHa>l~_51*qW>^mHgW@O4{!7lU9a0+LAi-_waQ9mZI)tnl!av>b*qB z;bZ3UIvE2-Y8?cUU~f-mfYLGeE%z!)$ZXoGBrw;dpLpM5cLH;i`K)>Ab8s+a0BS=H zF-IN}WwOlj&gI{E)ex1cUU>dPw%b%r1!-8SXt?V1(5h+kKVxkJ(3b*y6=RxHcyJ!0 zwU#u*1K>gHwwIM)ZYxpnpJ2n5TMY9%jJ2_u`^88ZU?tj(_B%8A!P^k@%m75GE$mZx z_R->3QUrtE)BafbgMJAiz(rxb{TLPYt^E8Vlm^;5@h!W5p+i{^Inl8ylS039E_P_d z?^m7s`#YL~98VZqVy^m6p74#k0!J2qdo%5Sb7X`B6aAxPSQ9Nj4uLframework=%{x}
time [s]=%{y}","legendgroup":"forward","marker":{"color":"#636efa","pattern":{"shape":""}},"name":"forward","offsetgroup":"forward","orientation":"v","showlegend":true,"textposition":"inside","texttemplate":"%{y:.2f}","x":["Spyx (fp16)
v0.1.9","Spyx (fp32)
v0.1.9","SpikingJelly CuPy
v0.0.0.0.15","Rockpool
v2.7","Rockpool EXODUS
v2.7","Sinabs
v1.2.9","Sinabs EXODUS
v1.1.2","snnTorch
v0.7.0","Norse
v1.0.0","Lava DL
v0.4.0.dev0"],"xaxis":"x","y":[0.0106958062090772,0.0185272321788542,0.0201700054682218,0.5514374375343323,0.1754664778709411,0.1562756391671987,0.1618201365837684,0.2415475845336914,0.2279151015811496,0.0804197120666503],"yaxis":"y","type":"bar"},{"alignmentgroup":"True","hovertemplate":"pass=backward
framework=%{x}
time [s]=%{y}","legendgroup":"backward","marker":{"color":"#EF553B","pattern":{"shape":""}},"name":"backward","offsetgroup":"backward","orientation":"v","showlegend":true,"textposition":"inside","texttemplate":"%{y:.2f}","x":["Spyx (fp16)
v0.1.9","Spyx (fp32)
v0.1.9","SpikingJelly CuPy
v0.0.0.0.15","Rockpool
v2.7","Rockpool EXODUS
v2.7","Sinabs
v1.2.9","Sinabs EXODUS
v1.1.2","snnTorch
v0.7.0","Norse
v1.0.0","Lava DL
v0.4.0.dev0"],"xaxis":"x","y":[0.0163760353487434,0.0260722387060493,0.1007818698883056,2.7636924584706626,0.076329519008768,2.1311139265696206,0.0679911931355794,0.2020041227340698,1.2727914651234944,0.0775612592697143],"yaxis":"y","type":"bar"},{"mode":"text","showlegend":false,"text":[0.03,0.04,0.12,3.32,0.25,2.29,0.23,0.44,1.5,0.16],"textposition":"top center","x":["Spyx (fp16)
v0.1.9","Spyx (fp32)
v0.1.9","SpikingJelly CuPy
v0.0.0.0.15","Rockpool
v2.7","Rockpool EXODUS
v2.7","Sinabs
v1.2.9","Sinabs EXODUS
v1.1.2","snnTorch
v0.7.0","Norse
v1.0.0","Lava DL
v0.4.0.dev0"],"y":[0.028425433635711633,0.04682944442914868,0.12699946912435378,3.4808863908052445,0.26438579672369455,2.4017590440236605,0.24130189620531522,0.4657292926311493,1.5757418950398763,0.16588001990318285],"type":"scatter"}],"layout":{"template":{"data":{"histogram2dcontour":[{"type":"histogram2dcontour","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"choropleth":[{"type":"choropleth","colorbar":{"outlinewidth":0,"ticks":""}}],"histogram2d":[{"type":"histogram2d","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"heatmap":[{"type":"heatmap","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"heatmapgl":[{"type":"heatmapgl","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"contourcarpet":[{"type":"contourcarpet","colorbar":{"outlinewidth":0,"ticks":""}}],"contour":[{"type":"contour","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"surface":[{"type":"surface","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"mesh3d":[{"type":"mesh3d","colorbar":{"outlinewidth":0,"ticks":""}}],"scatter":[{"fillpattern":{"fillmode":"overlay","size":10,"solidity":0.2},"type":"scatter"}],"parcoords":[{"type":"parcoords","line":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatterpolargl":[{"type":"scatterpolargl","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"bar":[{"error_x":{"color":"#2a3f5f"},"error_y":{"color":"#2a3f5f"},"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"bar"}],"scattergeo":[{"type":"scattergeo","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatterpolar":[{"type":"scatterpolar","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"histogram":[{"marker":{"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"histogram"}],"scattergl":[{"type":"scattergl","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatter3d":[{"type":"scatter3d","line":{"colorbar":{"outlinewidth":0,"ticks":""}},"marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scattermapbox":[{"type":"scattermapbox","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatterternary":[{"type":"scatterternary","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scattercarpet":[{"type":"scattercarpet","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"carpet":[{"aaxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"baxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"type":"carpet"}],"table":[{"cells":{"fill":{"color":"#EBF0F8"},"line":{"color":"white"}},"header":{"fill":{"color":"#C8D4E3"},"line":{"color":"white"}},"type":"table"}],"barpolar":[{"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"barpolar"}],"pie":[{"automargin":true,"type":"pie"}]},"layout":{"autotypenumbers":"strict","colorway":["#636efa","#EF553B","#00cc96","#ab63fa","#FFA15A","#19d3f3","#FF6692","#B6E880","#FF97FF","#FECB52"],"font":{"color":"#2a3f5f"},"hovermode":"closest","hoverlabel":{"align":"left"},"paper_bgcolor":"white","plot_bgcolor":"#E5ECF6","polar":{"bgcolor":"#E5ECF6","angularaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"radialaxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"ternary":{"bgcolor":"#E5ECF6","aaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"baxis":{"gridcolor":"white","linecolor":"white","ticks":""},"caxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"coloraxis":{"colorbar":{"outlinewidth":0,"ticks":""}},"colorscale":{"sequential":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"sequentialminus":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"diverging":[[0,"#8e0152"],[0.1,"#c51b7d"],[0.2,"#de77ae"],[0.3,"#f1b6da"],[0.4,"#fde0ef"],[0.5,"#f7f7f7"],[0.6,"#e6f5d0"],[0.7,"#b8e186"],[0.8,"#7fbc41"],[0.9,"#4d9221"],[1,"#276419"]]},"xaxis":{"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","automargin":true,"zerolinewidth":2},"yaxis":{"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","automargin":true,"zerolinewidth":2},"scene":{"xaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2},"yaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2},"zaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2}},"shapedefaults":{"line":{"color":"#2a3f5f"}},"annotationdefaults":{"arrowcolor":"#2a3f5f","arrowhead":0,"arrowwidth":1},"geo":{"bgcolor":"white","landcolor":"#E5ECF6","subunitcolor":"white","showland":true,"showlakes":true,"lakecolor":"white"},"title":{"x":0.05},"mapbox":{"style":"light"}}},"xaxis":{"anchor":"y","domain":[0.0,1.0],"title":{"text":"framework"},"categoryorder":"total ascending"},"yaxis":{"anchor":"x","domain":[0.0,1.0],"title":{"text":"time [s]"},"type":"log"},"legend":{"title":{"text":"pass"},"tracegroupgap":0,"orientation":"h","yanchor":"bottom","y":1.01,"xanchor":"right","x":1},"margin":{"t":80,"l":10,"r":10,"b":10},"barmode":"relative","title":{"text":"4k neurons, 1 Linear + 1 LIF layer, 500 time steps, batch size 96"}}} \ No newline at end of file +{"data":[{"alignmentgroup":"True","hovertemplate":"pass=forward
time [s]=%{x}
framework=%{y}","legendgroup":"forward","marker":{"color":"#636efa","pattern":{"shape":""}},"name":"forward","offsetgroup":"forward","orientation":"h","showlegend":true,"textposition":"inside","texttemplate":"%{x:.2f}","x":[0.0106958062090772,0.0185272321788542,0.0201700054682218,0.5514374375343323,0.1754664778709411,0.1562756391671987,0.1618201365837684,0.2415475845336914,0.2279151015811496,0.0804197120666503],"xaxis":"x","y":["Spyx (fp16) v0.1.9","Spyx (fp32) v0.1.9","SpikingJelly v0.0.15","Rockpool v2.7","Rockpool EXODUS v2.7","Sinabs v1.2.9","Sinabs EXODUS v1.1.2","snnTorch v0.7.0","Norse v1.0.0","Lava DL v0.4.0.dev0"],"yaxis":"y","type":"bar"},{"alignmentgroup":"True","hovertemplate":"pass=backward
time [s]=%{x}
framework=%{y}","legendgroup":"backward","marker":{"color":"#EF553B","pattern":{"shape":""}},"name":"backward","offsetgroup":"backward","orientation":"h","showlegend":true,"textposition":"inside","texttemplate":"%{x:.2f}","x":[0.0163760353487434,0.0260722387060493,0.1007818698883056,2.7636924584706626,0.076329519008768,2.1311139265696206,0.0679911931355794,0.2020041227340698,1.2727914651234944,0.0775612592697143],"xaxis":"x","y":["Spyx (fp16) v0.1.9","Spyx (fp32) v0.1.9","SpikingJelly v0.0.15","Rockpool v2.7","Rockpool EXODUS v2.7","Sinabs v1.2.9","Sinabs EXODUS v1.1.2","snnTorch v0.7.0","Norse v1.0.0","Lava DL v0.4.0.dev0"],"yaxis":"y","type":"bar"},{"mode":"text","showlegend":false,"text":[0.03,0.04,0.12,3.32,0.25,2.29,0.23,0.44,1.5,0.16],"textposition":"middle right","x":[0.028425433635711633,0.04682944442914868,0.12699946912435378,3.4808863908052445,0.26438579672369455,2.4017590440236605,0.24130189620531522,0.4657292926311493,1.5757418950398763,0.16588001990318285],"y":["Spyx (fp16) v0.1.9","Spyx (fp32) v0.1.9","SpikingJelly v0.0.15","Rockpool v2.7","Rockpool EXODUS v2.7","Sinabs v1.2.9","Sinabs EXODUS v1.1.2","snnTorch v0.7.0","Norse v1.0.0","Lava DL v0.4.0.dev0"],"type":"scatter"}],"layout":{"template":{"data":{"histogram2dcontour":[{"type":"histogram2dcontour","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"choropleth":[{"type":"choropleth","colorbar":{"outlinewidth":0,"ticks":""}}],"histogram2d":[{"type":"histogram2d","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"heatmap":[{"type":"heatmap","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"heatmapgl":[{"type":"heatmapgl","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"contourcarpet":[{"type":"contourcarpet","colorbar":{"outlinewidth":0,"ticks":""}}],"contour":[{"type":"contour","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"surface":[{"type":"surface","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"mesh3d":[{"type":"mesh3d","colorbar":{"outlinewidth":0,"ticks":""}}],"scatter":[{"fillpattern":{"fillmode":"overlay","size":10,"solidity":0.2},"type":"scatter"}],"parcoords":[{"type":"parcoords","line":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatterpolargl":[{"type":"scatterpolargl","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"bar":[{"error_x":{"color":"#2a3f5f"},"error_y":{"color":"#2a3f5f"},"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"bar"}],"scattergeo":[{"type":"scattergeo","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatterpolar":[{"type":"scatterpolar","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"histogram":[{"marker":{"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"histogram"}],"scattergl":[{"type":"scattergl","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatter3d":[{"type":"scatter3d","line":{"colorbar":{"outlinewidth":0,"ticks":""}},"marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scattermapbox":[{"type":"scattermapbox","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatterternary":[{"type":"scatterternary","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scattercarpet":[{"type":"scattercarpet","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"carpet":[{"aaxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"baxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"type":"carpet"}],"table":[{"cells":{"fill":{"color":"#EBF0F8"},"line":{"color":"white"}},"header":{"fill":{"color":"#C8D4E3"},"line":{"color":"white"}},"type":"table"}],"barpolar":[{"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"barpolar"}],"pie":[{"automargin":true,"type":"pie"}]},"layout":{"autotypenumbers":"strict","colorway":["#636efa","#EF553B","#00cc96","#ab63fa","#FFA15A","#19d3f3","#FF6692","#B6E880","#FF97FF","#FECB52"],"font":{"color":"#2a3f5f"},"hovermode":"closest","hoverlabel":{"align":"left"},"paper_bgcolor":"white","plot_bgcolor":"#E5ECF6","polar":{"bgcolor":"#E5ECF6","angularaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"radialaxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"ternary":{"bgcolor":"#E5ECF6","aaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"baxis":{"gridcolor":"white","linecolor":"white","ticks":""},"caxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"coloraxis":{"colorbar":{"outlinewidth":0,"ticks":""}},"colorscale":{"sequential":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"sequentialminus":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"diverging":[[0,"#8e0152"],[0.1,"#c51b7d"],[0.2,"#de77ae"],[0.3,"#f1b6da"],[0.4,"#fde0ef"],[0.5,"#f7f7f7"],[0.6,"#e6f5d0"],[0.7,"#b8e186"],[0.8,"#7fbc41"],[0.9,"#4d9221"],[1,"#276419"]]},"xaxis":{"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","automargin":true,"zerolinewidth":2},"yaxis":{"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","automargin":true,"zerolinewidth":2},"scene":{"xaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2},"yaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2},"zaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2}},"shapedefaults":{"line":{"color":"#2a3f5f"}},"annotationdefaults":{"arrowcolor":"#2a3f5f","arrowhead":0,"arrowwidth":1},"geo":{"bgcolor":"white","landcolor":"#E5ECF6","subunitcolor":"white","showland":true,"showlakes":true,"lakecolor":"white"},"title":{"x":0.05},"mapbox":{"style":"light"}}},"xaxis":{"anchor":"y","domain":[0.0,1.0],"title":{"text":"time [s]"},"type":"log"},"yaxis":{"anchor":"x","domain":[0.0,1.0],"title":{"text":""},"categoryorder":"total descending"},"legend":{"title":{"text":"pass"},"tracegroupgap":0,"orientation":"h","yanchor":"bottom","y":1.01,"xanchor":"right","x":1},"margin":{"t":80,"l":10,"r":10,"b":10},"barmode":"relative","title":{"text":"Latency for 4k neurons, lower is better"}}} \ No newline at end of file diff --git a/content/english/blog/spiking-neural-network-framework-benchmarking/framework-benchmarking-512.json b/content/english/blog/spiking-neural-network-framework-benchmarking/framework-benchmarking-512.json index b0fc92ca..eb4fc199 100644 --- a/content/english/blog/spiking-neural-network-framework-benchmarking/framework-benchmarking-512.json +++ b/content/english/blog/spiking-neural-network-framework-benchmarking/framework-benchmarking-512.json @@ -1 +1 @@ -{"data":[{"alignmentgroup":"True","hovertemplate":"pass=forward
framework=%{x}
time [s]=%{y}","legendgroup":"forward","marker":{"color":"#636efa","pattern":{"shape":""}},"name":"forward","offsetgroup":"forward","orientation":"v","showlegend":true,"textposition":"inside","texttemplate":"%{y:.3f}","x":["Spyx (fp16)
v0.1.9","Spyx (fp32)
v0.1.9","SpikingJelly CuPy
v0.0.0.0.15","Rockpool
v2.7","Rockpool EXODUS
v2.7","Sinabs
v1.2.9","Sinabs EXODUS
v1.1.2","snnTorch
v0.7.0","Norse
v1.0.0","Lava DL
v0.4.0.dev0"],"xaxis":"x","y":[0.0008169346899341,0.0011620120027477,0.0020863810967852,0.450988245010376,0.0063792095062839,0.081405906677246,0.0050141667961177,0.1570918560028076,0.1722599069277445,0.0037799142441659],"yaxis":"y","type":"bar"},{"alignmentgroup":"True","hovertemplate":"pass=backward
framework=%{x}
time [s]=%{y}","legendgroup":"backward","marker":{"color":"#EF553B","pattern":{"shape":""}},"name":"backward","offsetgroup":"backward","orientation":"v","showlegend":true,"textposition":"inside","texttemplate":"%{y:.3f}","x":["Spyx (fp16)
v0.1.9","Spyx (fp32)
v0.1.9","SpikingJelly CuPy
v0.0.0.0.15","Rockpool
v2.7","Rockpool EXODUS
v2.7","Sinabs
v1.2.9","Sinabs EXODUS
v1.1.2","snnTorch
v0.7.0","Norse
v1.0.0","Lava DL
v0.4.0.dev0"],"xaxis":"x","y":[0.0023113923668313,0.0033175114703901,0.0021877023040271,0.4077626705169678,0.0087347634494564,0.3001319680895124,0.0129922959112351,0.1017382502555847,0.1790357033411661,0.0059532870848973],"yaxis":"y","type":"bar"},{"mode":"text","showlegend":false,"text":[0.003,0.004,0.004,0.859,0.015,0.382,0.018,0.259,0.351,0.01],"textposition":"top center","x":["Spyx (fp16)
v0.1.9","Spyx (fp32)
v0.1.9","SpikingJelly CuPy
v0.0.0.0.15","Rockpool
v2.7","Rockpool EXODUS
v2.7","Sinabs
v1.2.9","Sinabs EXODUS
v1.1.2","snnTorch
v0.7.0","Norse
v1.0.0","Lava DL
v0.4.0.dev0"],"y":[0.00328474340960367,0.004703499646794691,0.004487787570852915,0.901688461303711,0.015869671603527313,0.40061476850509636,0.018906785842720444,0.27177161157131197,0.3688603907823562,0.010219861395516361],"type":"scatter"}],"layout":{"template":{"data":{"histogram2dcontour":[{"type":"histogram2dcontour","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"choropleth":[{"type":"choropleth","colorbar":{"outlinewidth":0,"ticks":""}}],"histogram2d":[{"type":"histogram2d","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"heatmap":[{"type":"heatmap","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"heatmapgl":[{"type":"heatmapgl","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"contourcarpet":[{"type":"contourcarpet","colorbar":{"outlinewidth":0,"ticks":""}}],"contour":[{"type":"contour","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"surface":[{"type":"surface","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"mesh3d":[{"type":"mesh3d","colorbar":{"outlinewidth":0,"ticks":""}}],"scatter":[{"fillpattern":{"fillmode":"overlay","size":10,"solidity":0.2},"type":"scatter"}],"parcoords":[{"type":"parcoords","line":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatterpolargl":[{"type":"scatterpolargl","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"bar":[{"error_x":{"color":"#2a3f5f"},"error_y":{"color":"#2a3f5f"},"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"bar"}],"scattergeo":[{"type":"scattergeo","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatterpolar":[{"type":"scatterpolar","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"histogram":[{"marker":{"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"histogram"}],"scattergl":[{"type":"scattergl","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatter3d":[{"type":"scatter3d","line":{"colorbar":{"outlinewidth":0,"ticks":""}},"marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scattermapbox":[{"type":"scattermapbox","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatterternary":[{"type":"scatterternary","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scattercarpet":[{"type":"scattercarpet","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"carpet":[{"aaxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"baxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"type":"carpet"}],"table":[{"cells":{"fill":{"color":"#EBF0F8"},"line":{"color":"white"}},"header":{"fill":{"color":"#C8D4E3"},"line":{"color":"white"}},"type":"table"}],"barpolar":[{"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"barpolar"}],"pie":[{"automargin":true,"type":"pie"}]},"layout":{"autotypenumbers":"strict","colorway":["#636efa","#EF553B","#00cc96","#ab63fa","#FFA15A","#19d3f3","#FF6692","#B6E880","#FF97FF","#FECB52"],"font":{"color":"#2a3f5f"},"hovermode":"closest","hoverlabel":{"align":"left"},"paper_bgcolor":"white","plot_bgcolor":"#E5ECF6","polar":{"bgcolor":"#E5ECF6","angularaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"radialaxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"ternary":{"bgcolor":"#E5ECF6","aaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"baxis":{"gridcolor":"white","linecolor":"white","ticks":""},"caxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"coloraxis":{"colorbar":{"outlinewidth":0,"ticks":""}},"colorscale":{"sequential":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"sequentialminus":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"diverging":[[0,"#8e0152"],[0.1,"#c51b7d"],[0.2,"#de77ae"],[0.3,"#f1b6da"],[0.4,"#fde0ef"],[0.5,"#f7f7f7"],[0.6,"#e6f5d0"],[0.7,"#b8e186"],[0.8,"#7fbc41"],[0.9,"#4d9221"],[1,"#276419"]]},"xaxis":{"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","automargin":true,"zerolinewidth":2},"yaxis":{"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","automargin":true,"zerolinewidth":2},"scene":{"xaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2},"yaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2},"zaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2}},"shapedefaults":{"line":{"color":"#2a3f5f"}},"annotationdefaults":{"arrowcolor":"#2a3f5f","arrowhead":0,"arrowwidth":1},"geo":{"bgcolor":"white","landcolor":"#E5ECF6","subunitcolor":"white","showland":true,"showlakes":true,"lakecolor":"white"},"title":{"x":0.05},"mapbox":{"style":"light"}}},"xaxis":{"anchor":"y","domain":[0.0,1.0],"title":{"text":"framework"},"categoryorder":"total ascending"},"yaxis":{"anchor":"x","domain":[0.0,1.0],"title":{"text":"time [s]"},"type":"log"},"legend":{"title":{"text":"pass"},"tracegroupgap":0,"orientation":"h","yanchor":"bottom","y":1.01,"xanchor":"right","x":1},"margin":{"t":80,"l":10,"r":10,"b":10},"barmode":"relative","title":{"text":"512 neurons, 1 Linear + 1 LIF layer, 500 time steps, batch size 96"}}} \ No newline at end of file +{"data":[{"alignmentgroup":"True","hovertemplate":"pass=forward
time [s]=%{x}
framework=%{y}","legendgroup":"forward","marker":{"color":"#636efa","pattern":{"shape":""}},"name":"forward","offsetgroup":"forward","orientation":"h","showlegend":true,"textposition":"inside","texttemplate":"%{x:.3f}","x":[0.0008169346899341,0.0011620120027477,0.0020863810967852,0.450988245010376,0.0063792095062839,0.081405906677246,0.0050141667961177,0.1570918560028076,0.1722599069277445,0.0037799142441659],"xaxis":"x","y":["Spyx (fp16) v0.1.9","Spyx (fp32) v0.1.9","SpikingJelly v0.0.15","Rockpool v2.7","Rockpool EXODUS v2.7","Sinabs v1.2.9","Sinabs EXODUS v1.1.2","snnTorch v0.7.0","Norse v1.0.0","Lava DL v0.4.0.dev0"],"yaxis":"y","type":"bar"},{"alignmentgroup":"True","hovertemplate":"pass=backward
time [s]=%{x}
framework=%{y}","legendgroup":"backward","marker":{"color":"#EF553B","pattern":{"shape":""}},"name":"backward","offsetgroup":"backward","orientation":"h","showlegend":true,"textposition":"inside","texttemplate":"%{x:.3f}","x":[0.0023113923668313,0.0033175114703901,0.0021877023040271,0.4077626705169678,0.0087347634494564,0.3001319680895124,0.0129922959112351,0.1017382502555847,0.1790357033411661,0.0059532870848973],"xaxis":"x","y":["Spyx (fp16) v0.1.9","Spyx (fp32) v0.1.9","SpikingJelly v0.0.15","Rockpool v2.7","Rockpool EXODUS v2.7","Sinabs v1.2.9","Sinabs EXODUS v1.1.2","snnTorch v0.7.0","Norse v1.0.0","Lava DL v0.4.0.dev0"],"yaxis":"y","type":"bar"},{"mode":"text","showlegend":false,"text":[0.003,0.004,0.004,0.859,0.015,0.382,0.018,0.259,0.351,0.01],"textposition":"middle right","x":[0.00328474340960367,0.004703499646794691,0.004487787570852915,0.901688461303711,0.015869671603527313,0.40061476850509636,0.018906785842720444,0.27177161157131197,0.3688603907823562,0.010219861395516361],"y":["Spyx (fp16) v0.1.9","Spyx (fp32) v0.1.9","SpikingJelly v0.0.15","Rockpool v2.7","Rockpool EXODUS v2.7","Sinabs v1.2.9","Sinabs EXODUS v1.1.2","snnTorch v0.7.0","Norse v1.0.0","Lava DL v0.4.0.dev0"],"type":"scatter"}],"layout":{"template":{"data":{"histogram2dcontour":[{"type":"histogram2dcontour","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"choropleth":[{"type":"choropleth","colorbar":{"outlinewidth":0,"ticks":""}}],"histogram2d":[{"type":"histogram2d","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"heatmap":[{"type":"heatmap","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"heatmapgl":[{"type":"heatmapgl","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"contourcarpet":[{"type":"contourcarpet","colorbar":{"outlinewidth":0,"ticks":""}}],"contour":[{"type":"contour","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"surface":[{"type":"surface","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"mesh3d":[{"type":"mesh3d","colorbar":{"outlinewidth":0,"ticks":""}}],"scatter":[{"fillpattern":{"fillmode":"overlay","size":10,"solidity":0.2},"type":"scatter"}],"parcoords":[{"type":"parcoords","line":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatterpolargl":[{"type":"scatterpolargl","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"bar":[{"error_x":{"color":"#2a3f5f"},"error_y":{"color":"#2a3f5f"},"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"bar"}],"scattergeo":[{"type":"scattergeo","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatterpolar":[{"type":"scatterpolar","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"histogram":[{"marker":{"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"histogram"}],"scattergl":[{"type":"scattergl","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatter3d":[{"type":"scatter3d","line":{"colorbar":{"outlinewidth":0,"ticks":""}},"marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scattermapbox":[{"type":"scattermapbox","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatterternary":[{"type":"scatterternary","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scattercarpet":[{"type":"scattercarpet","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"carpet":[{"aaxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"baxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"type":"carpet"}],"table":[{"cells":{"fill":{"color":"#EBF0F8"},"line":{"color":"white"}},"header":{"fill":{"color":"#C8D4E3"},"line":{"color":"white"}},"type":"table"}],"barpolar":[{"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"barpolar"}],"pie":[{"automargin":true,"type":"pie"}]},"layout":{"autotypenumbers":"strict","colorway":["#636efa","#EF553B","#00cc96","#ab63fa","#FFA15A","#19d3f3","#FF6692","#B6E880","#FF97FF","#FECB52"],"font":{"color":"#2a3f5f"},"hovermode":"closest","hoverlabel":{"align":"left"},"paper_bgcolor":"white","plot_bgcolor":"#E5ECF6","polar":{"bgcolor":"#E5ECF6","angularaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"radialaxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"ternary":{"bgcolor":"#E5ECF6","aaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"baxis":{"gridcolor":"white","linecolor":"white","ticks":""},"caxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"coloraxis":{"colorbar":{"outlinewidth":0,"ticks":""}},"colorscale":{"sequential":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"sequentialminus":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"diverging":[[0,"#8e0152"],[0.1,"#c51b7d"],[0.2,"#de77ae"],[0.3,"#f1b6da"],[0.4,"#fde0ef"],[0.5,"#f7f7f7"],[0.6,"#e6f5d0"],[0.7,"#b8e186"],[0.8,"#7fbc41"],[0.9,"#4d9221"],[1,"#276419"]]},"xaxis":{"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","automargin":true,"zerolinewidth":2},"yaxis":{"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","automargin":true,"zerolinewidth":2},"scene":{"xaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2},"yaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2},"zaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2}},"shapedefaults":{"line":{"color":"#2a3f5f"}},"annotationdefaults":{"arrowcolor":"#2a3f5f","arrowhead":0,"arrowwidth":1},"geo":{"bgcolor":"white","landcolor":"#E5ECF6","subunitcolor":"white","showland":true,"showlakes":true,"lakecolor":"white"},"title":{"x":0.05},"mapbox":{"style":"light"}}},"xaxis":{"anchor":"y","domain":[0.0,1.0],"title":{"text":"time [s]"},"type":"log"},"yaxis":{"anchor":"x","domain":[0.0,1.0],"title":{"text":""},"categoryorder":"total descending"},"legend":{"title":{"text":"pass"},"tracegroupgap":0,"orientation":"h","yanchor":"bottom","y":1.01,"xanchor":"right","x":1},"margin":{"t":80,"l":10,"r":10,"b":10},"barmode":"relative","title":{"text":"Latency for 512 neurons, lower is better"}}} \ No newline at end of file diff --git a/content/english/blog/spiking-neural-network-framework-benchmarking/framework-benchmarking-8k.json b/content/english/blog/spiking-neural-network-framework-benchmarking/framework-benchmarking-8k.json index 21f01bc6..f36d2a35 100644 --- a/content/english/blog/spiking-neural-network-framework-benchmarking/framework-benchmarking-8k.json +++ b/content/english/blog/spiking-neural-network-framework-benchmarking/framework-benchmarking-8k.json @@ -1 +1 @@ -{"data":[{"alignmentgroup":"True","hovertemplate":"pass=forward
framework=%{x}
time [s]=%{y}","legendgroup":"forward","marker":{"color":"#636efa","pattern":{"shape":""}},"name":"forward","offsetgroup":"forward","orientation":"v","showlegend":true,"textposition":"inside","texttemplate":"%{y:.2f}","x":["Spyx (fp16)
v0.1.9","Spyx (fp32)
v0.1.9","SpikingJelly CuPy
v0.0.0.0.15","Rockpool
v2.7","Rockpool EXODUS
v2.7","Sinabs
v1.2.9","Sinabs EXODUS
v1.1.2","snnTorch
v0.7.0","Norse
v1.0.0","Lava DL
v0.4.0.dev0"],"xaxis":"x","y":[0.0238632482640883,0.0340342362721761,0.0270050105295683,0.8179528713226318,0.5170656442642212,0.4507370948791503,0.5298179984092712,0.6590602397918701,0.5284585356712341,0.2176244497299194],"yaxis":"y","type":"bar"},{"alignmentgroup":"True","hovertemplate":"pass=backward
framework=%{x}
time [s]=%{y}","legendgroup":"backward","marker":{"color":"#EF553B","pattern":{"shape":""}},"name":"backward","offsetgroup":"backward","orientation":"v","showlegend":true,"textposition":"inside","texttemplate":"%{y:.2f}","x":["Spyx (fp16)
v0.1.9","Spyx (fp32)
v0.1.9","SpikingJelly CuPy
v0.0.0.0.15","Rockpool
v2.7","Rockpool EXODUS
v2.7","Sinabs
v1.2.9","Sinabs EXODUS
v1.1.2","snnTorch
v0.7.0","Norse
v1.0.0","Lava DL
v0.4.0.dev0"],"xaxis":"x","y":[0.038826726639972,0.061416154196768,0.025554166899787,5.59786057472229,0.0967265212017556,4.366256554921468,0.0932382011413574,0.723294734954834,2.673928419748942,0.2424225807189941],"yaxis":"y","type":"bar"},{"mode":"text","showlegend":false,"text":[0.06,0.1,0.05,6.42,0.61,4.82,0.62,1.38,3.2,0.46],"textposition":"top center","x":["Spyx (fp16)
v0.1.9","Spyx (fp32)
v0.1.9","SpikingJelly CuPy
v0.0.0.0.15","Rockpool
v2.7","Rockpool EXODUS
v2.7","Sinabs
v1.2.9","Sinabs EXODUS
v1.1.2","snnTorch
v0.7.0","Norse
v1.0.0","Lava DL
v0.4.0.dev0"],"y":[0.06582447364926332,0.1002229099923913,0.055187136300823066,6.736604118347168,0.6444817737392757,5.057843332290649,0.6542090095281601,1.4514727234840394,3.362506303191185,0.48304938197135916],"type":"scatter"}],"layout":{"template":{"data":{"histogram2dcontour":[{"type":"histogram2dcontour","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"choropleth":[{"type":"choropleth","colorbar":{"outlinewidth":0,"ticks":""}}],"histogram2d":[{"type":"histogram2d","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"heatmap":[{"type":"heatmap","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"heatmapgl":[{"type":"heatmapgl","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"contourcarpet":[{"type":"contourcarpet","colorbar":{"outlinewidth":0,"ticks":""}}],"contour":[{"type":"contour","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"surface":[{"type":"surface","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"mesh3d":[{"type":"mesh3d","colorbar":{"outlinewidth":0,"ticks":""}}],"scatter":[{"fillpattern":{"fillmode":"overlay","size":10,"solidity":0.2},"type":"scatter"}],"parcoords":[{"type":"parcoords","line":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatterpolargl":[{"type":"scatterpolargl","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"bar":[{"error_x":{"color":"#2a3f5f"},"error_y":{"color":"#2a3f5f"},"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"bar"}],"scattergeo":[{"type":"scattergeo","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatterpolar":[{"type":"scatterpolar","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"histogram":[{"marker":{"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"histogram"}],"scattergl":[{"type":"scattergl","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatter3d":[{"type":"scatter3d","line":{"colorbar":{"outlinewidth":0,"ticks":""}},"marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scattermapbox":[{"type":"scattermapbox","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatterternary":[{"type":"scatterternary","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scattercarpet":[{"type":"scattercarpet","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"carpet":[{"aaxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"baxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"type":"carpet"}],"table":[{"cells":{"fill":{"color":"#EBF0F8"},"line":{"color":"white"}},"header":{"fill":{"color":"#C8D4E3"},"line":{"color":"white"}},"type":"table"}],"barpolar":[{"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"barpolar"}],"pie":[{"automargin":true,"type":"pie"}]},"layout":{"autotypenumbers":"strict","colorway":["#636efa","#EF553B","#00cc96","#ab63fa","#FFA15A","#19d3f3","#FF6692","#B6E880","#FF97FF","#FECB52"],"font":{"color":"#2a3f5f"},"hovermode":"closest","hoverlabel":{"align":"left"},"paper_bgcolor":"white","plot_bgcolor":"#E5ECF6","polar":{"bgcolor":"#E5ECF6","angularaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"radialaxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"ternary":{"bgcolor":"#E5ECF6","aaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"baxis":{"gridcolor":"white","linecolor":"white","ticks":""},"caxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"coloraxis":{"colorbar":{"outlinewidth":0,"ticks":""}},"colorscale":{"sequential":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"sequentialminus":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"diverging":[[0,"#8e0152"],[0.1,"#c51b7d"],[0.2,"#de77ae"],[0.3,"#f1b6da"],[0.4,"#fde0ef"],[0.5,"#f7f7f7"],[0.6,"#e6f5d0"],[0.7,"#b8e186"],[0.8,"#7fbc41"],[0.9,"#4d9221"],[1,"#276419"]]},"xaxis":{"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","automargin":true,"zerolinewidth":2},"yaxis":{"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","automargin":true,"zerolinewidth":2},"scene":{"xaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2},"yaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2},"zaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2}},"shapedefaults":{"line":{"color":"#2a3f5f"}},"annotationdefaults":{"arrowcolor":"#2a3f5f","arrowhead":0,"arrowwidth":1},"geo":{"bgcolor":"white","landcolor":"#E5ECF6","subunitcolor":"white","showland":true,"showlakes":true,"lakecolor":"white"},"title":{"x":0.05},"mapbox":{"style":"light"}}},"xaxis":{"anchor":"y","domain":[0.0,1.0],"title":{"text":"framework"},"categoryorder":"total ascending"},"yaxis":{"anchor":"x","domain":[0.0,1.0],"title":{"text":"time [s]"},"type":"log"},"legend":{"title":{"text":"pass"},"tracegroupgap":0,"orientation":"h","yanchor":"bottom","y":1.01,"xanchor":"right","x":1},"margin":{"t":80,"l":10,"r":10,"b":10},"barmode":"relative","title":{"text":"8k neurons, 1 Linear + 1 LIF layer, 500 time steps, batch size 96"}}} \ No newline at end of file +{"data":[{"alignmentgroup":"True","hovertemplate":"pass=forward
time [s]=%{x}
framework=%{y}","legendgroup":"forward","marker":{"color":"#636efa","pattern":{"shape":""}},"name":"forward","offsetgroup":"forward","orientation":"h","showlegend":true,"textposition":"inside","texttemplate":"%{x:.2f}","x":[0.0238632482640883,0.0340342362721761,0.0270050105295683,0.8179528713226318,0.5170656442642212,0.4507370948791503,0.5298179984092712,0.6590602397918701,0.5284585356712341,0.2176244497299194],"xaxis":"x","y":["Spyx (fp16) v0.1.9","Spyx (fp32) v0.1.9","SpikingJelly v0.0.15","Rockpool v2.7","Rockpool EXODUS v2.7","Sinabs v1.2.9","Sinabs EXODUS v1.1.2","snnTorch v0.7.0","Norse v1.0.0","Lava DL v0.4.0.dev0"],"yaxis":"y","type":"bar"},{"alignmentgroup":"True","hovertemplate":"pass=backward
time [s]=%{x}
framework=%{y}","legendgroup":"backward","marker":{"color":"#EF553B","pattern":{"shape":""}},"name":"backward","offsetgroup":"backward","orientation":"h","showlegend":true,"textposition":"inside","texttemplate":"%{x:.2f}","x":[0.038826726639972,0.061416154196768,0.025554166899787,5.59786057472229,0.0967265212017556,4.366256554921468,0.0932382011413574,0.723294734954834,2.673928419748942,0.2424225807189941],"xaxis":"x","y":["Spyx (fp16) v0.1.9","Spyx (fp32) v0.1.9","SpikingJelly v0.0.15","Rockpool v2.7","Rockpool EXODUS v2.7","Sinabs v1.2.9","Sinabs EXODUS v1.1.2","snnTorch v0.7.0","Norse v1.0.0","Lava DL v0.4.0.dev0"],"yaxis":"y","type":"bar"},{"mode":"text","showlegend":false,"text":[0.06,0.1,0.05,6.42,0.61,4.82,0.62,1.38,3.2,0.46],"textposition":"middle right","x":[0.06582447364926332,0.1002229099923913,0.055187136300823066,6.736604118347168,0.6444817737392757,5.057843332290649,0.6542090095281601,1.4514727234840394,3.362506303191185,0.48304938197135916],"y":["Spyx (fp16) v0.1.9","Spyx (fp32) v0.1.9","SpikingJelly v0.0.15","Rockpool v2.7","Rockpool EXODUS v2.7","Sinabs v1.2.9","Sinabs EXODUS v1.1.2","snnTorch v0.7.0","Norse v1.0.0","Lava DL v0.4.0.dev0"],"type":"scatter"}],"layout":{"template":{"data":{"histogram2dcontour":[{"type":"histogram2dcontour","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"choropleth":[{"type":"choropleth","colorbar":{"outlinewidth":0,"ticks":""}}],"histogram2d":[{"type":"histogram2d","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"heatmap":[{"type":"heatmap","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"heatmapgl":[{"type":"heatmapgl","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"contourcarpet":[{"type":"contourcarpet","colorbar":{"outlinewidth":0,"ticks":""}}],"contour":[{"type":"contour","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"surface":[{"type":"surface","colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]}],"mesh3d":[{"type":"mesh3d","colorbar":{"outlinewidth":0,"ticks":""}}],"scatter":[{"fillpattern":{"fillmode":"overlay","size":10,"solidity":0.2},"type":"scatter"}],"parcoords":[{"type":"parcoords","line":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatterpolargl":[{"type":"scatterpolargl","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"bar":[{"error_x":{"color":"#2a3f5f"},"error_y":{"color":"#2a3f5f"},"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"bar"}],"scattergeo":[{"type":"scattergeo","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatterpolar":[{"type":"scatterpolar","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"histogram":[{"marker":{"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"histogram"}],"scattergl":[{"type":"scattergl","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatter3d":[{"type":"scatter3d","line":{"colorbar":{"outlinewidth":0,"ticks":""}},"marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scattermapbox":[{"type":"scattermapbox","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scatterternary":[{"type":"scatterternary","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"scattercarpet":[{"type":"scattercarpet","marker":{"colorbar":{"outlinewidth":0,"ticks":""}}}],"carpet":[{"aaxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"baxis":{"endlinecolor":"#2a3f5f","gridcolor":"white","linecolor":"white","minorgridcolor":"white","startlinecolor":"#2a3f5f"},"type":"carpet"}],"table":[{"cells":{"fill":{"color":"#EBF0F8"},"line":{"color":"white"}},"header":{"fill":{"color":"#C8D4E3"},"line":{"color":"white"}},"type":"table"}],"barpolar":[{"marker":{"line":{"color":"#E5ECF6","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"barpolar"}],"pie":[{"automargin":true,"type":"pie"}]},"layout":{"autotypenumbers":"strict","colorway":["#636efa","#EF553B","#00cc96","#ab63fa","#FFA15A","#19d3f3","#FF6692","#B6E880","#FF97FF","#FECB52"],"font":{"color":"#2a3f5f"},"hovermode":"closest","hoverlabel":{"align":"left"},"paper_bgcolor":"white","plot_bgcolor":"#E5ECF6","polar":{"bgcolor":"#E5ECF6","angularaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"radialaxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"ternary":{"bgcolor":"#E5ECF6","aaxis":{"gridcolor":"white","linecolor":"white","ticks":""},"baxis":{"gridcolor":"white","linecolor":"white","ticks":""},"caxis":{"gridcolor":"white","linecolor":"white","ticks":""}},"coloraxis":{"colorbar":{"outlinewidth":0,"ticks":""}},"colorscale":{"sequential":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"sequentialminus":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"diverging":[[0,"#8e0152"],[0.1,"#c51b7d"],[0.2,"#de77ae"],[0.3,"#f1b6da"],[0.4,"#fde0ef"],[0.5,"#f7f7f7"],[0.6,"#e6f5d0"],[0.7,"#b8e186"],[0.8,"#7fbc41"],[0.9,"#4d9221"],[1,"#276419"]]},"xaxis":{"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","automargin":true,"zerolinewidth":2},"yaxis":{"gridcolor":"white","linecolor":"white","ticks":"","title":{"standoff":15},"zerolinecolor":"white","automargin":true,"zerolinewidth":2},"scene":{"xaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2},"yaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2},"zaxis":{"backgroundcolor":"#E5ECF6","gridcolor":"white","linecolor":"white","showbackground":true,"ticks":"","zerolinecolor":"white","gridwidth":2}},"shapedefaults":{"line":{"color":"#2a3f5f"}},"annotationdefaults":{"arrowcolor":"#2a3f5f","arrowhead":0,"arrowwidth":1},"geo":{"bgcolor":"white","landcolor":"#E5ECF6","subunitcolor":"white","showland":true,"showlakes":true,"lakecolor":"white"},"title":{"x":0.05},"mapbox":{"style":"light"}}},"xaxis":{"anchor":"y","domain":[0.0,1.0],"title":{"text":"time [s]"},"type":"log"},"yaxis":{"anchor":"x","domain":[0.0,1.0],"title":{"text":""},"categoryorder":"total descending"},"legend":{"title":{"text":"pass"},"tracegroupgap":0,"orientation":"h","yanchor":"bottom","y":1.01,"xanchor":"right","x":1},"margin":{"t":80,"l":10,"r":10,"b":10},"barmode":"relative","title":{"text":"Latency for 8k neurons, lower is better"}}} \ No newline at end of file diff --git a/content/english/blog/spiking-neural-network-framework-benchmarking/plotting.ipynb b/content/english/blog/spiking-neural-network-framework-benchmarking/plotting.ipynb index 1c3a0980..3ab85bb6 100644 --- a/content/english/blog/spiking-neural-network-framework-benchmarking/plotting.ipynb +++ b/content/english/blog/spiking-neural-network-framework-benchmarking/plotting.ipynb @@ -19,7 +19,8 @@ "metadata": {}, "outputs": [], "source": [ - "frameworks = df['framework'].unique()" + "df['framework'] = df['framework'].str.replace('
', ' ')\n", + "df['framework'] = df['framework'].str.replace('SpikingJelly CuPy v0.0.0.0.15', 'SpikingJelly v0.0.15')" ] }, { @@ -31,36 +32,49 @@ "import plotly.express as px\n", "import plotly.graph_objects as go\n", "\n", + "frameworks = df['framework'].unique()\n", "\n", - "df8k = df[df['neurons'] == 8192]\n", - "\n", - "totals8k = df8k[\"time [s]\"][df8k[\"pass\"] == \"forward\"].to_numpy() + df8k[\"time [s]\"][df8k[\"pass\"] == \"backward\"].to_numpy()\n", + "def get_figure(df, rounding=2, title=\"\"):\n", + " totals = df[\"time [s]\"][df[\"pass\"] == \"forward\"].to_numpy() + df[\"time [s]\"][df[\"pass\"] == \"backward\"].to_numpy()\n", + " fig = px.bar(\n", + " df,\n", + " y=\"framework\",\n", + " x=\"time [s]\",\n", + " color=\"pass\",\n", + " log_x=True,\n", + " text_auto=f'.{rounding}f',\n", + " orientation='h',\n", + " ).add_trace(go.Scatter(\n", + " y=frameworks, x=totals*1.05, \n", + " mode='text',\n", + " text=totals.round(rounding),\n", + " textposition='middle right',\n", + " showlegend=False\n", + " ))\n", + " fig.data[0]['textposition'] = 'inside'\n", + " fig.data[1]['textposition'] = 'inside'\n", "\n", - "fig = px.bar(\n", - " df8k,\n", - " x=\"framework\",\n", - " y=\"time [s]\",\n", - " color=\"pass\",\n", - " log_y=True,\n", - " text_auto='.2f',\n", - ").add_trace(go.Scatter(\n", - " x=frameworks, y=totals8k*1.05, \n", - " mode='text',\n", - " text=totals8k.round(2),\n", - " textposition='top center',\n", - " showlegend=False\n", - "))\n", - "fig.data[0]['textposition'] = 'inside'\n", - "fig.data[1]['textposition'] = 'inside'\n", + " fig.update_layout(\n", + " title=title,\n", + " yaxis={'categoryorder':'total descending'},\n", + " legend=dict(orientation=\"h\", yanchor=\"bottom\", y=1.01, xanchor=\"right\", x=1),\n", + " margin=dict(l=10, r=10, t=80, b=10),\n", + " yaxis_title=\"\",\n", + " )\n", + " # increase size of facet titles\n", + " fig.update_annotations(font_size=14)\n", + " return fig\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "df8k = df[df['neurons'] == 8192]\n", "\n", - "fig.update_layout(\n", - " title=f\"8k neurons, 1 Linear + 1 LIF layer, {n_steps} time steps, batch size {batch_size}\",\n", - " xaxis={'categoryorder':'total ascending'},\n", - " legend=dict(orientation=\"h\", yanchor=\"bottom\", y=1.01, xanchor=\"right\", x=1),\n", - " margin=dict(l=10, r=10, t=80, b=10),\n", - ")\n", - "# increase size of facet titles\n", - "fig.update_annotations(font_size=14)\n", + "fig = get_figure(df8k, title=\"Latency for 8k neurons, lower is better\")\n", "\n", "fig.write_json(\"framework-benchmarking-8k.json\")\n", "# fig.write_image(\"framework-benchmarking-8k.png\", width=1024)\n", @@ -76,32 +90,8 @@ "source": [ "df4k = df[df['neurons'] == 4096]\n", "\n", - "totals4k = df4k[\"time [s]\"][df4k[\"pass\"] == \"forward\"].to_numpy() + df4k[\"time [s]\"][df4k[\"pass\"] == \"backward\"].to_numpy()\n", + "fig = get_figure(df4k, title=\"Latency for 4k neurons, lower is better\")\n", "\n", - "fig = px.bar(\n", - " df4k,\n", - " x=\"framework\",\n", - " y=\"time [s]\",\n", - " color=\"pass\",\n", - " log_y=True,\n", - " text_auto='.2f',\n", - ").add_trace(go.Scatter(\n", - " x=frameworks, y=totals4k*1.05, \n", - " mode='text',\n", - " text=totals4k.round(2),\n", - " textposition='top center',\n", - " showlegend=False\n", - "))\n", - "fig.data[0]['textposition'] = 'inside'\n", - "fig.data[1]['textposition'] = 'inside'\n", - "fig.update_layout(\n", - " title=f\"4k neurons, 1 Linear + 1 LIF layer, {n_steps} time steps, batch size {batch_size}\",\n", - " xaxis={'categoryorder':'total ascending'},\n", - " legend=dict(orientation=\"h\", yanchor=\"bottom\", y=1.01, xanchor=\"right\", x=1),\n", - " margin=dict(l=10, r=10, t=80, b=10),\n", - ")\n", - "# increase size of facet titles\n", - "fig.update_annotations(font_size=14)\n", "fig.write_json(\"framework-benchmarking-4k.json\")\n", "# fig.write_image(\"framework-benchmarking-4k.png\", width=1024)# scale=2)\n", "fig.write_image(\"framework-benchmarking-4k-header.png\", width=1024, height=570)\n", @@ -115,38 +105,12 @@ "outputs": [], "source": [ "df512 = df[df['neurons'] == 512]\n", - "# df512[\"time [s]\"] *= 1000\n", - "\n", - "totals512 = df512[\"time [s]\"][df512[\"pass\"] == \"forward\"].to_numpy() + df512[\"time [s]\"][df512[\"pass\"] == \"backward\"].to_numpy()\n", "\n", - "fig = px.bar(\n", - " df512,\n", - " x=\"framework\",\n", - " y=\"time [s]\",\n", - " color=\"pass\",\n", - " log_y=True,\n", - " text_auto=\".3f\",\n", - ").add_trace(go.Scatter(\n", - " x=frameworks, y=totals512*1.05, \n", - " mode='text',\n", - " text=totals512.round(3),\n", - " textposition='top center',\n", - " showlegend=False\n", - "))\n", - "fig.data[0]['textposition'] = 'inside'\n", - "fig.data[1]['textposition'] = 'inside'\n", - "fig.update_layout(\n", - " title=f\"512 neurons, 1 Linear + 1 LIF layer, {n_steps} time steps, batch size {batch_size}\",\n", - " xaxis={'categoryorder':'total ascending'},\n", - " legend=dict(orientation=\"h\", yanchor=\"bottom\", y=1.01, xanchor=\"right\", x=1),\n", - " margin=dict(l=10, r=10, t=80, b=10),\n", - ")\n", - "# increase size of facet titles\n", - "fig.update_annotations(font_size=14)\n", + "fig = get_figure(df512, rounding=3, title=\"Latency for 512 neurons, lower is better\")\n", "\n", "fig.write_json(\"framework-benchmarking-512.json\")\n", "# fig.write_image(\"framework-benchmarking-512.png\", width=1024)# scale=2)\n", - "# fig.show()" + "fig.show()" ] }, {