From 22de8a61b19496316f4fb6199875d71803dd2215 Mon Sep 17 00:00:00 2001 From: auphelia Date: Thu, 28 Mar 2024 14:46:23 +0000 Subject: [PATCH 1/5] [NBs] Fix referenced builder step in advanced nb --- .../4_advanced_builder_settings.ipynb | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/notebooks/advanced/4_advanced_builder_settings.ipynb b/notebooks/advanced/4_advanced_builder_settings.ipynb index dccac6195d..5139377342 100644 --- a/notebooks/advanced/4_advanced_builder_settings.ipynb +++ b/notebooks/advanced/4_advanced_builder_settings.ipynb @@ -46,7 +46,7 @@ "id": "5dbed63f", "metadata": {}, "source": [ - "## Introduction to the CNV-w2a2 network \n", + "## Introduction to the CNV-w2a2 network \n", "\n", "The particular quantized neural network (QNN) we will be targeting in this notebook is referred to as CNV-w2a2 and it classifies 32x32 RGB images into one of ten CIFAR-10 classes. All weights and activations in this network are quantized to two bit, with the exception of the input (which is RGB with 8 bits per channel) and the final output (which is 32-bit numbers). It is similar to the convolutional neural network used in the [cnv_end2end_example](../end2end_example/bnn-pynq/cnv_end2end_example.ipynb) Jupyter notebook.\n", "\n", @@ -116,7 +116,7 @@ "id": "c764ed76", "metadata": {}, "source": [ - "## Quick recap, how to setup up default builder flow for resource estimations " + "## Quick recap, how to setup up default builder flow for resource estimations " ] }, { @@ -305,7 +305,7 @@ "id": "7e561a91", "metadata": {}, "source": [ - "## Build steps " + "## Build steps " ] }, { @@ -369,7 +369,7 @@ "id": "e9c2c97f", "metadata": {}, "source": [ - "### How to create a custom build step " + "### How to create a custom build step " ] }, { @@ -643,7 +643,7 @@ "id": "a6edf5c4-9213-45cd-834f-615c12685d9e", "metadata": {}, "source": [ - "## Specialize layers configuration json " + "## Specialize layers configuration json " ] }, { @@ -675,7 +675,7 @@ "id": "bc90b589-7a92-4996-9704-02736ac4e60e", "metadata": {}, "source": [ - "The builder flow step before `step_specialize_layers` generates a template json file to set the preferred implementation style per layer. We can copy it from one of the previous runs to this folder and manipulate it to pass it to a new build." + "The builder flow step before `step_create_dataflow_partition` generates a template json file to set the preferred implementation style per layer. We can copy it from one of the previous runs to this folder and manipulate it to pass it to a new build." ] }, { @@ -934,7 +934,7 @@ "id": "5ffbadd1", "metadata": {}, "source": [ - "## Folding configuration json " + "## Folding configuration json " ] }, { @@ -1270,7 +1270,7 @@ "id": "4a675834", "metadata": {}, "source": [ - "## Additional builder arguments " + "## Additional builder arguments " ] }, { @@ -1294,7 +1294,7 @@ "id": "e0c167f4", "metadata": {}, "source": [ - "### Verification steps " + "### Verification steps " ] }, { @@ -1505,7 +1505,7 @@ "id": "4609f94d", "metadata": {}, "source": [ - "### Other builder arguments " + "### Other builder arguments " ] }, { @@ -1610,7 +1610,7 @@ "id": "3b98eb65", "metadata": {}, "source": [ - "### Example for additional builder arguments & bitfile generation " + "### Example for additional builder arguments & bitfile generation " ] }, { From 1294eba11a430f99b025c14cbffb2e87ff70ca2f Mon Sep 17 00:00:00 2001 From: auphelia Date: Fri, 29 Mar 2024 09:52:09 +0000 Subject: [PATCH 2/5] [Docs] Upgrade rtd requirements --- docs/requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index 85bc1d0dcd..3a3730d2b9 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,6 +1,6 @@ brevitas@git+https://github.com/Xilinx/brevitas@master#egg=brevitas_examples dataclasses-json==0.5.7 -docutils==0.17.1 +docutils==0.19 gspread==3.6.0 importlib_resources IPython @@ -9,7 +9,7 @@ netron pytest pyverilator@git+https://github.com/maltanar/pyverilator@master#egg=pyverilator qonnx@git+https://github.com/fastmachinelearning/qonnx@main#egg=qonnx -sphinx_rtd_theme==0.5.0 +sphinx_rtd_theme==2.0.0 torch torchvision tqdm From 769f81f8a0fa0b91c247ec1995d7b0647891d69c Mon Sep 17 00:00:00 2001 From: auphelia Date: Fri, 29 Mar 2024 10:45:17 +0000 Subject: [PATCH 3/5] [Docs] Minor fixes in rtd documentation --- docs/finn/developers.rst | 2 -- docs/finn/getting_started.rst | 2 +- docs/finn/hw_build.rst | 4 ---- docs/finn/img/mem_mode.png | Bin 41236 -> 59848 bytes docs/finn/internals.rst | 2 +- 5 files changed, 2 insertions(+), 8 deletions(-) diff --git a/docs/finn/developers.rst b/docs/finn/developers.rst index 3b182b8db8..2a5e26959b 100644 --- a/docs/finn/developers.rst +++ b/docs/finn/developers.rst @@ -2,8 +2,6 @@ Developer documentation *********************** -.. note:: **This page is under construction.** - This page is intended to serve as a starting point for new FINN developers. Power users may also find this information useful. diff --git a/docs/finn/getting_started.rst b/docs/finn/getting_started.rst index eae61b1a55..217f982702 100644 --- a/docs/finn/getting_started.rst +++ b/docs/finn/getting_started.rst @@ -125,7 +125,7 @@ General FINN Docker tips Supported FPGA Hardware ======================= -**Vivado IPI support for any Xilinx FPGA:** FINN generates a Vivado IP Integrator (IPI) design from the neural network with AXI stream (FIFO) in-o> +**Vivado IPI support for any Xilinx FPGA:** FINN generates a Vivado IP Integrator (IPI) design from the neural network with AXI stream (FIFO) in-out interfaces, which can be integrated onto any Xilinx-AMD FPGA as part of a larger system. It’s up to you to take the FINN-generated accelerator (what we call “stitched IP” in the tutorials), wire it up to your FPGA design and send/receive neural network data to/from the accelerator. **Shell-integrated accelerator + driver:** For quick deployment, we target boards supported by `PYNQ `_ . For these platforms, we can build a full bitfile including DMAs to move data into and out of the FINN-generated accelerator, as well as a Python driver to launch the accelerator. We support the Pynq-Z1, Pynq-Z2, Kria SOM, Ultra96, ZCU102 and ZCU104 boards, as well as Alveo cards. diff --git a/docs/finn/hw_build.rst b/docs/finn/hw_build.rst index 9e34edc9d1..39c39eb7df 100644 --- a/docs/finn/hw_build.rst +++ b/docs/finn/hw_build.rst @@ -87,8 +87,4 @@ transformation for Zynq, and the `VitisLink` transformation for Alveo. Deployment ========== - -Deployment ------------ - The bitfile and the driver file(s) can be copied to the PYNQ board and be executed there. For more information see the description in the `end2end_example `_ Jupyter notebooks. diff --git a/docs/finn/img/mem_mode.png b/docs/finn/img/mem_mode.png index 27783c5f3233cdf1d646e330d85ecdad39b8b922..451561c54be7d694b0c7723e3a5e02ece8ca7c12 100755 GIT binary patch literal 59848 zcmeFZc|6qb`#&nX?1Ye|MJib$WZ$V|tL$spLYC}?8Cyjgm3ye9rHj-}&eK@tZ$AUiWt0*Yp3nROxsdhWiW-)^<@HTQMs_NxS7B+H+BOjQKR#LK#e5BGc zJYq!oN>7tTOH)mi^_3Ru5u@9xG9zkMMw%6)IYW6D%KSXtWE=O~kVD1prK8^a>lt2A z^_Yjb1uD1|)ncE7u5%fl6fYg+#|Nny<$8YV?jAj$-!P7jPX3jjS0E7Y9(<=Q z=d+M4T&C4AEqA}K796#$5buu~YZ<6`=Hs&-MY+q*C!s_|+6>#X$Bb#!D*F%P68XlO zx5L}$(6&D7^LRs9S*%@$7-}$kUAtJsS^Tzasae7D#C~)GCR`Y~rGzL3i-%?_tt^NS zj)nfBW@U|QlMOvE_QLJY`gqQ}x4iq2i5q+#R9DFQ^K23O?v|-gj|C(vH5DY$s@4u8 zKY$dxd(fE?j=FXb=GOyeAZ_OM>7AV&(ctvHfIFBn6#AZ_;V<{^l*`{o+B*vCb(e3Z z@k1<>*0(%M<1{oiH3vFuLrhUM(Fk~9YdC6LkCP>Al}`n znD?0v3q|(A_YFL3CZOS{KA|JLskpPG*;Zmc{A}26$#r>VlEraMdKdkxs{l%q2^x`q z0PJj|okAeA%mZDnoAEWYFDWIZrnRTHH%PhMv*C&z*eB{x^ap7E@S01Oql3e~h>{Z6(k=v{&E7s{Cx zP~%0U;bD5(z#Y$U9ODcHTOpKbh8M@}GrUfoI`uhs?Z*3^y0Ts1bKK=plhObRTy@0} zw-g0=;<{m}`la^re8E0|ybqM$c!t&lZO4|fU)0q6sQF+zG3o$W={JTh$jbvC`_{23 z6#yd1P5QM-Y0Nyj@Y(<(I5Tkmy|qEhy^I^cdS{EfhL`qoJUo^Q!cnN)BbI46)x(9< z-y1C{;H%5ut%iD9H=^W&)HOA4P){dLuErG{oE25VW5dDdAAlC|og$7a6hqh80HvsG+;0JgmRc(;h=-$o%!CEaw6GCJ2u`{nYf;~tKs)H3> zH-RP0;zA~yRq%a)oo-V!cA#k%T^1!tvSv$sUb`f(_zgJxfk)_~+=2rwD{DnQ2)W3s zazj@accC1X?z*ga`0-QF=6sE-)z`(?f(?Pdm7VSVdl_VapoV+}_Ew>il`Ed)jXl8> zPANDb#sj~wcLi^?o~cO+ekq~SEsf*9;elukj6WK$+V`wL?=}Lw_j)TwMEG5SUhA1F z?&E{ctOw3oDb1}^i+pa(*JDWWpNxNIH6WJqz{P7cxvQhTpr>hZrMi==Azv?5TJDPb zhNHdpfLQa)+V^Usq?iYKjrX_WzgNGC8y`4}X!)^Ht*hObZw)~Wey^q%dvM@%Yvx3z z%-tVXx2qRm4EhS85y7JzKCq+uyvmS=Zli;|`BVjrjk6)c)glf37lftu1?d)xBi|fl^y;|*bufJa7OyWYs0ClFyH|eF(JfDbxULNHy((YT8 z3(N+*GnxLV%KG;%&Y7}?b<@+sRYRvs%=v%)T0f{+xV@{N&2K|z7EjWRm*=YQA^q<* z@9m;JLBCuU9BAUus&s|IDh&dxr*98&`zU=##iX?!T+ayEHTR^MpR79)`v7ZBy2>9f zO>}C~hRe%;MbU)r75lx8lx{y3q582fz24zz4gZ}Uzo}1gq5R)sAe<{#?78TP*U6$% zeSg5idSIp$@@;#KX6Omy(1}~L&HH*630Xfr^>kP z%&s;Y>|znhyMywt-lt*)TEDqb@kIwZ;Fy=(N_C=t@TDyu=()Pi+unMocbquxN4Qg| z1sc_ID@lO%NdGHAmP_)tj$fn{@#^PWK0;LN{2Fld_;V!J%V$Gd-Jv zgDJZCW(%x$gZ$;nFbE3iO;tj2Oh%^q{GK@wu)J94SMBL7d)iXVu|bVl17K# zvvpHaFZnVygx$L$Exj2VKI&?>SWFsOte>m>Li?EXg`It(6L=~3_&Q7Utc+Dpm#>eK zI)ihoR8$j3VFnE<*p0Zuu;Kx$O!{|VMAgs}+MKy9XBi8%C~nZh7N-@K8@}y~)ThAR zGCmFU{3jo;*Vu+WkdTERV&PWyun9vkUKOyVUWcTQ@t0hv;bU2IXtAfNpQ_ zTpE$}?RvtrAB*KZ=iml_sf4l@*4!A5IYAsM$mZ(kob|0d`&T0|Kzs-{d(|JqbH7FV z#^rXT*Sk4<)K<;V>5uo~I|AY_d+y*=OM7ThNr&sIgCZk7sEArt^~jH?G6<^)4iN^O z8R*%hy<~w6Ud!_w`1*B`t#LNx`VuUsF9}8T<>m}WKXH1; z6XQU*Mw8D4OnX1Q+-J7p*M;ffgOK%Q0ZU=d=vS$1XE!7Y(qOFYfTo`Ckk6&g zO93a1E}681QG|5an;xFaQV#*{Zv?gOMZ!m=yY;(3_pgD&gV5iN8azI z5U{l0sEV@2j&_oE`S7Jh>z(&m#Kgl;Q2R7sczRM+j8SP5hgR{_QUE-ItKQf!pr}cj z933DHqn%4h!PG98!I5ERj&$S|`G2(2xW*XBdRYofFTKGXW*vG)xo5@EAsFffP4Y_? zB>&U>Zy_Qb13dB0AkZ#-S%wnvM5#U)z zyT;Zwah%~mXHQRt-%$N&;Hpoth}d7Je50cUV;@nb02ROCVyqr*5Bj+~Qe3S=Q?uKj zH&nf5wf)iEgx4f%()G&t2FYLLaAo?ArnJ%zqI=%pLWuJgPF_BDad&AnSfEN@kT7j> zUwgVoi@pOdC(_g!o4;IxpuQrUxDBn4v0Y^7+T>QzEm4=Z;;n6|Nl1vdr~wuAXpZcD}4; zR~Oe%xJ$KTqCncGZ-nZG?nvEmXXlQjVI)c;V2^Zojq?{hs^@b$2bfZYnWGb=ZFCqX zw#HGe82SY(cbxJ&1NV{E>!^b@rLwJ#iIF#B0zqzRQ1HM&z+Cxq42_3LY-=cNlUwH~ zIW}}U^E++}9GEqVpD|Gib>@Gg_I+Y|*;r)R_U!=}jgWaaa~l1|XPc?mCQ=c4if)4>>+_#(wz(hW?2Fob>6?h~aq+$c&gRW+cEjJr2?d&kQ?KX>-(T89vr^i^dTY1P({ZHy*i<+;I zSht~k%@@hOG5gyy0Zt5r|YjHT(A$WnE1!6B?6dA^ldY=hW<+mKgXhPL#Xmw?ybiXzZjv z{=|5Dm|Y&)$lsu4+dN!h89eNH+Eg@gYq5|*a|drs~9ot7Qhg7Um?#ALS5~g_-%=s>8#+r0s^C zc`4(g7na!4J0(TY^@gp=lN-zO_g+Ic&fH)yR#&ED6cUVU0esJo9-qySZc7&}%yl&> zT3>R>j!lE{vat@mM!|2K?kwlfQq|UF@e6~c%~1F0_PW`YxH8@X+b++OFfPwjH?T9^ zghML(muoD^8F5RgS>tS?;HjY>eOr&*V8|tJ$GoOQ?5R60K?utemy1J3Fei@wIzxMZ zwD<`UyM^=kivNr_&T(I1^?BxQ@ijW@o_)x1f>+NXVu+KVx$YocW#++2`|~6(>{FDM zhMS(?nyAn}&H}xA7%H}I(S1L&7iW1>$Tx1x!%>2P?(L}m{Zbsmi4ogr*%B^>?a_o< zWS7~iUeN~Nz}(=%9Y{rc}$ZM`t12T?Oq!?PygPzGf z&N6n|Cta{F1Y#E?U#F?da;{Dws@DLbFn79+HmbHuiX#t2M?Q99;3iGTjO0@;J%J*e zJVp9d6{$Agc#(^i)$YXy`0wF*yNOQqe%}@`NtNkNmX`;(rH|vcUOA%;U0htegS}iy zsr%s7QJHh+_J$PARZEIL2~E=|=p5DR9)?^%e2hcHS!&b7@?_I2zueL-% zl^!&0mczapi<;gEn@M=^MxNs3L+bEhbWqLyMV~(U{(7OIqvUlx0h>@)mUC|kM) zd<&gDzgwd?hS)2Mk*uuTNDws4T<4N+y&9>?{ch?i+Hq>?O#?Qy!vhHuqK!vL;+}9J zF5;9-RT^&VSqDDZ511{5LwE^y1f-y5W(till;M0Nte!pdD)H5&osu_PA)cA%1Wk~E ze9~s|Y7$fPHQ`+8WvO*8#l8GKk3Evet|hkDJIeZAw!@fwdtrcb=`qlTCRjdmY*~}P zOgp~Y?F#<%#_G_B3y zg9C;lE51~5PWx%8eedNOn#0P2;1YP;7t!xd0xFDzB)!W{cn0)vwgv^tJcpo5PbL9i z>Db4Qw3ydJR5#iKnaH(*w$c?<^ws4tDIsiA*U}VW`k4V3tEICO4L)ydw7IWc*+}u} zsznSVnBu>8x=86TE+esl;Iv|fmdWZ)jtCtd=_{`V4YfZcIF18B*3@>Om@=HL8woGW z^F$?#6=pyrPn9!VK9ze;Vba++LUo66db87clWF3qD7=btx^79K(4f3DN6;|7HTGiC z-b7OGc^rR*q!pu%B+4q5rP+UX^O-W^;3!CrQ1t+~5gu(ITW6M4+KBhd2{SXUQ@OR( z)O0%KW{=wUoM5>2j|9tb0g(Hxa_bN0Tx4n9v53E0v{EX)wywRKc$fRRdW0nRh(C~_ zP~lS4z7sNs7?z8sf-)X9B{W}ngNOCrLyYOjKe5L3_PdM5xaL#G@@K;m;}Pztmb`|8gy0DL z2dZ!%?1e@S%d%7Bn_sEj8nXWQ`C*ShJ2Z1qQ4ykmcsA9Z(;^DEEF60G1@UZ$POi>d z2t|m>UgFi(vH*Zx)%pUcdCCSwChhb|OT6Fvxkp@PIlTFWP8b_yG)l$&L zvU=V%T~ai8DDHb7AM`(#1BJ2eFwl`ZN^tC;)NxnIEc&+-pjU*_mryVu&GP)?;N3#^ zc44;xq~m-tilmu_8uwl%SYs5{&m8HeCmlZH;&ln3$%OHJSN*s#vuRFC%$7w-L*24j zwp&q?Q7T@B054kZkC6kQd!v2BqGq43u%qeaPZHiPJhI{HvvJ8bO_(;?CixKk#9ga* ztbO-Z;@3r0x_t*P)}Z|iD;MXjj#<>NjSP^(oqCi7#Lbx!W5#osYClhSr1j$9cwxs+ z4Q5*6MG5ZI&pxk;3U$jA6a?KN(gwGWJxzuIQzK=71Z+P>(xO7q-e4cK^igbna=1$y z^{IFS2$c9V_&Q4$@AMT;KnVya>XHfna228>9CX6xmlttvve%hSO?wJu@0?ovBEn`L zttz{Em4H{;&iXB_i6E1U+L3QZxQeG0xGccsYjCnNYm05jSh1S?PjCXJYf$9v2h0ZV zHTA0#031JGltq$cd(~rJ_F`bjsx@yZJEf-h8QPDje?aH%B%`j$zL24(f_f|+>42R8 z!u|ClBTb-MpM|B_>pueA9D#{i2nJ2DSu4Ade7N`YUB;smEkId;xXSi%_1$^=2lf;BiGK0C3H2Bn;&<89b{WS7L3x8o z+`h?gbY>Tt_N*`;k6k*Mz$3HJl#?oJeJIT7Hx0zBGK}ZppNU!Z&P62Oe+&%*j%apa zb5{8ban3M@4*5&KCW%Ng`s^_^BB7=x`1xj$&d=X>eq!MxS-(gwpY-udBaEi&c}nsC zN0(!JU5TfIRIqtDWhP7=ZF7x8byevRR+#zM3ctl5F~$-%;w6oc;kGXtOvAk-iQqLK zagDr|ZUW8HE%VU<;LHvul0QY->RaMguNR3+%}Qu6S212n0XEZBD_TBuTC+7C+;WC$Fep?W6j@N=L{qFBloztEJgL}YNNyq7oAqsvhYvdjkpVRD}+LLFi z0LIZ>5|FFx_DPcSIs+84j^vnL2d5Ayzhw95&ij8R^3xC4VphSW5G;VlYw{B?Ke0MP;y0T!1xEj? zI(+5ND9t{dYIuefwLi{-2Z$*7j#SQGLc)W_eX$%Xaml|mV_;a275o%w!wrPvs`*eG zTWR~w>7mOTLtfH{vi#R6q#q1^*FjI@Q`96dqwng`6Nn0r=7wU^)}N(Y@OJ2_bIt_NizFqiCz^OF2D{9~2DBat! zw;GB|7Dq1#%j#@$_uX<2_ODs4T7TpR+Lz2~+O6M3>(+MrfK3X=G8-*3KwD3WJ#1n! z>q2Tnq5#0yKY%Go&L>a+1=4OPO@slYK#O-~HWagLZNbr4_K7r_|!M5Wf-0@MFIZ1iC zu$ZzIwlFz&?*tpDe~;gBzll$gn@Asx4(6LRlCE<>%B%ZgC|Hv-Wla6ucOG%s*FSuI z6&E%C(x7ZU&hf#noLcrn4>p$TEJ2@F25!4r6ub7<7L9Jd2hYE!NZSZI#pZv_OZdR1 zF`#}^NsD_g7hoKa<%KN`zP(qPyCZcN4S_tYSO@*nSAecB9V?!7em!p68r(JApf`c8 zHfHzhuFzR!W;ICt+Ns>z4bB?WqIomGXzgUPDd4VeE1{QL*R6-gq=bY7QZVQ2}BQxu|5B_ z@zq@)jjYMx@^|4(6=$q`%9h6}Llc&T@zXWzGd;FSUDB;?9vQ`BFdIelRv7^Azcx_6 zQ2#>qa!9<s1fNmY?Bio4B%MY|H#o`UB@V=uW!j z%dST0Z*=6-*Oi2)jsYO)hIpM-DVIC~VC#_K8SE0*@1>y2GnouD(BcGsC6pbr?G@3+ zuCEf}_x45{lq=7=OxbsIdON=MNV`4~=J?QY2Y1b`9@kU)9mOJBW3s;hMc@Ac}GU5pPy&`nIW zZnt{JLJ^sDbqgZQj{LoASJdogjUhQ9D&`RGFrjLtDt~Q>%T0bAVUB&%hwy0}bEN>jJ{G@rL3XRr-p#1^Yc3W198N!*t|Ah4I^P>^(69 zd_;)SQsqKd**rik2YKYkA7%g7~Zm}?-0VUV^a)|A_2GFSD|Y^v*J@W z6K83n;O_>5ImD5{x#QJ6Zt3Y73?SffcBP8qX+E!(-KfJcR)J3DzkFxm9}FE?V%H*6 zeFnb+s56J*!=?TCSG%~*?bkult|o7nL+ck^o1aFgN~Onz>%O%nzqKyw6@NtUEq27d zw-3yFY-RyUreg&vvnZe8@q@Rq`!;e@!q<;#sEE84^qT*myAeEHcR8uOzn;90jywQh z&r_XC7);mM41w|vA;J0QeFZX-1C+$th-^t}k%mzH1;bJCROOqtC=8{i8-JtpFMe(Y z4G(4+j8GZ6PF-nZ^eo;J&_K+3r(3=Ba7dO_%B(ZXIRrp@WM#DJ#RoBSTXO2d-MhYW z>aomPO&$j!vvMD1^d`hY1+0q!dl8O|eYh3(D%dgAr^^#S*4*bbCl(aDF5RY+mpyQB zT;YE7goP4Ls4H&h7S$ais#c*9F%zo~!QB-hW=W!)a1My1cZp)ILE_}Hl4E$5)Vs&y zCZhl^I~+{?Vjfl?Ix5kDgaDj*gSE$c!mty-sl+`rm)!NbCpbfCmH?a?j51JGT=NKm zpKD%I4hp^3*sU{~vC_T6^c6kl^H$K%gClWE3W3GACK(z)Wa-Wc1UpBiHhMo^mc27{ z+*D-;JY{k}WvkCE&Ck*}qU|?73Y6oV1-JOd3+}fx!e?}W+|guS^pFib_Rn}y;k{CL zWOsd?cZNy_mLSsM@SWL3K;}+4wAE_vEF!(DEG`drA|5&`mLa7-jYJ?3pT~arj*tle zXOTb6(Zvzwt-Hhxcp}6?oRR>}fl#LRGWw zrsw~3b=`gK_n##IsltG1d1nIT%@W09z@M9rw|)V|KEG1ZUQ}|Ud2wyLt*lvr26pb4 zkX78aL9+DdrcFI#{n!)hjcP*CLe{g%#!r6#xYF$70Zc?!FLFS`bDCp%UfzY7ac`zH zvxtXNwy*0B#H7%h9{T`%Ju=ewOQ>Vp%RWa=1b0Bxfx(ns&cFB^<~WY zx)ZwDa}1wPUVnGRXATGn^?Vj(CBD1y)%Qza^6{#-W|VMSP+t`~`RPr7+i#c<59JLK z%iY;wGrN9|XVf3{)TMa3zb7&)0jTyrHaL+3)At30b|&kmB5#E}U~#|Gc*W`#l8a;{ zy2#%N?GxvKJ>M6bi;Zhd0OvB8!7Rq4%q)JpKBLCk#S)4V7y5E}thg9}#wVt~ZG@Z3 zHfW#Ux>c|AP9FA)-Wf=$0l1iVGj{n8A|*!Fi%b0@#Pt8QTK$@SOFpkda-bX|$4l%E$0-&foQx>T0litRSS!%nU(HrN#S4b;unUMV*BYGWwj zehl6D%FkD_NeiGiepJ*UMp`_?NM`wpw+yKJUy>O{WCDD>No>C5#L|c4aUdD5?L4lV zH!=Rt5r5e-3Gv*I1E5TE{Xd}$F-{VcN8^SQu=6no;Jlt?rwVw<;I!O-;WPja)kehJQ)m6?AZ69VPI(td#QzP9j3QZ4z?ry> zM+tnz&HsU{2qy5~Fp(I#<=avDf1l@H_xC3=`a7UpAa${jz2^T9fKq&{whd@%AZ+Ge zNR5EK{}&MXceJLwGy*6rWjJtE{4eYeCG1UZUz64C;m!3KkSa?w5K(A~)c4f}QNliIF1)%vY37pSHIqG;P*YRUW*) zRkw@*_!)FwJcrz=Q#siD;o?n!k%K{?Zmk>n_z`Tdr?gJF4-(Xtd1T-g*$*1x9VdC( z-lyU_E&y-vti7|@MIsg++#q|&Qq6P)rmw%eP~++tGFEFHg@}65@=IV?w86S`q+Vw! zc!y#s+&1(MhZ3-sEun#PW8WD|k1aH|6flv(h#P6>*lc7ay2tK2J2@?3pYlj6zl@8M zI$h2zA`@_*?9%6A+r#|)IrGlg$AZ5s^G8xiSQ1bc41((G_o^TS6egiH+sgSiJJYtM zAG9?!pUZ~sE(;8<`6&#(oV4Fhvo7cjc)^p@l#-Ajb++6S>bSf@b~ns8H`?a>rXw|Q zwzaw^27h4x*bzXj1ed=s2I@IE4WS#eyx?5Wx+N3Oy)9j6GAk=9yH>ro*WA2lu_Zzo zjX`!DR6^9=OP_ZLoX;r?v^?-4EXS(hvj9;Ox=8hGGla^y77 z>e-+ma8NWq7W$pp&&Q{=$hLKVs;xyFInGV~E6n&=w9S82l2z5Hl9I(?OFrbX=Qe&; z2s zWjCalDTv?}7P!zmSp@3sf(6jI>R`MTOz&w4C6w)l%kNC)94lj@JSd-M?iZmW|7mKz z-6K;1AyEWUfZ`XwDCsUK!KGbxTb<5DG`nz!0NtW`t3?#8hIuGZ$Z&b~%H}cczS-EiHrO1(<4?t_SW?cX_@U|mnDunM_sQ=}F zLb8Om;!Bz^Qhbz9j`u^~Z=X*RWU(*0PtzSq9+vzvApze8^kU+r>nH#v(Vls2oW?xV zStNpBxbM1bdL-v#vA8D8VetDe;~{VrBNPo#D+D%Gm*hWM;xaQK*W#Q+Tjf_)F(yW* zPM!Mks(HSFHrf(OJdS}`8NKRX^s3zg_dvPRDY=EAwWH15VqBUrvUbZv> z*#F0;2_kdBS>xEW(UFmWGzGJ;bLFn||NR!fixl~J&$q~JCn|(WJOk8{_4N9q?Sr=f zf&S}4IRK-_`^hz!_yNyY|AT4g~r~b#>|lZ3k2yupMW?s?VJ)7b$?Xf zP8CfC%{+v?|HC)$8$wNH{0f*AF6#{Pxyq|fw`LxorP!k4MR_i#6 z%(l&MPH+tuS#Z~+ld0wv6cho>o6~0dJka}TKlf&dEDY=5I9#+ot)U`k#{u*zpE8-C z7jK>)XoL7y)&HcTjWpJcw&^TnQy;oerTFO_Y}y!ivyM3q)yr> zrz3>jAVXFoRiMwGcZX8?*SUA&#Z{@yY97ueP=>D-S#c!Wh*(cgA&qjyR1m2#NMTZn z0tAXM%+&O7Xy|4w%7ioxpUmzLG%!V73eGm{X!$(tUpL7gx>g}i`HnzpUM^Ao%eoZ{ z^iboV1IW)hTMH_{9HNZ_06)Gb3$)HwwJFQCkJC|{I0B9NBUnN;*0{h!20`;&>aSUv z^7J$0WnVM|u5CN50wT!?NCe!)1G_qf!Et871do4D07(xXMgmP>Fw1RNEs=h9uMRRK z`+lC0hqI;53BwQl#lp(kuK-JLUP%f^Ez9_*FnCdx@ch<`Sz-kL_S44P#AoM{HzCQI zd$Y;eCR-^bB)a=8W!)OR92an~?+`yZE9qGu3_7^^~Za zqQ!4Ny8s2;!gszJH)jM-(CSpA(Jy zKB+EQJx97kLSDvv-eYhoTuv5Nev}zlyE$M=E2)|P8-BuRIra$reX)Qh%&G-k0pt@K z|7H9|kB#L9>)_H4gy$ky>n7KMC}3&jKT8wq9(EgNzhaZGcJaiLGKm?WII!{>w6m!) zwmwjII2OFp0fPW*L+t*nP0SUaPiXG)vAdZ6>@UTcS`rXGe0LrwQ>?sf@bhWiCsd9e zMFGk)f!heTh46mE@Ar=jP{c4pfvv_c%UhmFdPWuZ3;JU-C}M5ns7}> zGKVY6mgDeQ^(xfoXrK_5=GR7%&}E=1m=U-6uz!!~c>O1#N5nu7HDpePE`Q1dNE?4^ zt9hpPc=m~sQMHZh5vrc?n}heCnG%j_^jFlGxXS^&n>n>xuo&D!REQctA-d|sYa^JR z+n5{l)CNkwN|fe5^s_*M{9V+fpP&b!@Rs3mZh{~b{)ZqAbDkJlGR4mq6SR5vjn43aYVZ70l@9n! zxILyEQ#MM_-v%729YJgU(|*!xd>a5A_l-%BA0NpSem)b>_9X$0ARwT%K6(1@y#K$K z=n0AHtbbW4A@eu4C14$civOT*+KgM;f2ohC*!gOrN8CgbLiMr#aA{{~H~u!@f1z)3 zZgajsG@DKMf2`63EEnFNcD2=>;N##VJOJRrHv5tsjg1exn+tNh5+5I4ZiP@l%UGLN z3|}01*iKL;l9TAYbSuiTgK4#Fhfl)0ZrRqIkckG}%b;3e1kTcI=&FkkQo8#AzQu~a z>Du*;iy}ViKiI|J97G+UhO>`uS~`_SBwwur1GUOg$*oUh({~8k#dLfWaa8^X%38eC z6etaixiVuW0s@Lfai&F4wm^{#TKpfq#x258)Qd!=%+zk28BqqfN_TGD-LN&H(Xj({ zHUhISJ&mzgnrvElW4YnKT`9+9K5%0j?3LAUcVBZ8VB<<$rq8ec4k6X=-u4l}8_B8t z-|qSBU6#OoAq`?%sV13UhyUq%)PbIgCW3De2hJVI@lo^j z(&^p2!Ndx2>T}Fcf0kzNp|5i$eXmNi*(sT_t~?ZE=}I6LO6&S4$jM-U#`V+Z)ppxa zU3%q!1B#wCj*HKZ!2euWOfjKwNGLt-4vqG0xp_9;?6H<>M{WUSN?){eEQ;rT9A=x) z<;8QQvQ<7{Tva-B^I{EFW4npdGZX5Bh9p4sls%WNO`$+D(A>5tO5Ol<09OL-k7Zhy z;(*Sxh3(QlQ+!4cM8$81kqb&=gF2o*oD)1#xGWri1PdehV75^ZlOPaYVb|p^jkEl+ zN*0FsbM-$SF)m=P@M>$84n8y&wmG*hv%u3&&x{mPy+U-_gsOJoQ=pBqf4vE)$V9qJ zszy}BMw=hZ5Ofr0jfsa67 z3Jk`ykr^18G`hadC;vR|`%u$eU`? zMMM8+trk0FOp1j}`PEY{5Sr&!5vtGge#dK)Hh-eWr;48~gCHr#bO8EZbU5>Pb_h`u zRJ0irS@b-b6EOHrB*bss8&H_s&C&)S0sjg#q24KS7k(QTW@yt@bwtRFz6L0(f=1y{ zp8a5r$hIC8^P+-lv(922IgCD5S(B9ET!<6yn>|3eS2$y&Ym@J-=NYx^bKu{x{%_7& z?l{>B#Xn@Hz2J@NUTk>*1>T4W8(o>svXf5r$^Z-;$sQ^Z%&6L zaI9IDn&KVDw)oMhCg@WaDSV!1O5Q*>EGXiz&w(B{h<9)~rRa1Jt}M+L-6!aU zJgvKlQ}@*Jw`%dZ<0Uucr1qGjQ{y@O;}C_IhOK{f!4BgNCx9l%Mhk{Jm z?(c?+UfV-pmrbyXSp^XMS`YB7We+PbR2-YxYJ{Je{xnqGC%A%cH7}h2?NV>fAy9Rk zI=qyS)%~NJ>sj3c>pr7XiH-|ORmK8{;1b1sDbj!1VWmcaJn6i_Bg ze?G@#*(OIv%)e}wT?8<~=Cu%1z)+>gU?Lt`vY!vZ$3Tei!2{JgN{DxBef|t>vVUpV zhkF=YyRe&a5z3b}4s7RDnp$qR+B65o!@GKp^55Y1 zxoyuEBZu#?j11lSR#WU)_4xh1@YX#jb>`4DYl*2qC7_ww*$UL))`DSP&QCH@mn_gz z+>wgp+Rr2A~=iq zJ8BtvTm79xYi37*=drfnAMz+Mv_gTtJ09Ep++sd+nrnV6p~}^HR%QpQ!7E1JV(_86 ziX1KFJED^gZra^V3IM3p&`Rw(l!SXWyfC5cKxsOsWw&)L?GdCd%{eQVhYL9nUcA#R za&yM9Ht0?FaEY6yxMFn~+28Ub@p$KhPAM|SeL_#fH)Z$!yoSn;;Vf& z!&JN;ewPm~K?EQKZyr_aLe}!PSYzVU!o`Hm+x7Ki4^cXpe=jewz{@t((^S$b-=a&8 z$41Fo<$wKp6KO4LolUd-68im2U))Q0{VB1_wDHjIJVOYhc51$Yf-Yp>Epf5nUp3s6 zwH`*!S!=Wc2BC8MijN8!g)RTpg{fK4p;kP z5Qh-!Q=1sU>l*u;JcgiQHWqL9_b2&wW#h2lFUIbbNn*D%%~{f8AHKw729-dTD8n}w zkVXn7`i9%EjJKh=PI~juu8xc!yB7dp+u^e3VvhJ;FsBwccmIZXo{zJ zos31TZ}}@-=>$q^Lx?j?K-UvUVPOM>*B){94E1=iIbj)a(QqO2T@Ui?k^J!%#e?N` z({udSc1~1@+7O*0q4s|WrwPCa$dd^nxLk5QLFAh&@;d#*{Ai=4n_n-t^#;v~ z1b1X))=BV%25GYh)w$EAzvSH6?!qw#3&YR|_n$iH*&u)SyaQ37vnRQ3TK@!6$L~r* z#eN+-<+7Du;7bYTr42;u?0ln_aV+ z3>-nT7+qTKQE@hrTkNmCko**tpdtZ6<_Y9dcUaUn7;5v$jNzE(b3N7kGeu_${z}v@ zoHipi5Wsi;ph}x_HICFGHfAY1aHPBUW}4L;h7tr*32NTQ?$ZDdiW)mZGN7YV7v9YX zF>W9|-@p~qRYfk-Hr-$Be6K2cyZ%Bi1G&)3(WTR-!`2GZ40tT?w4wf#q4shA(HT8~ zx2eZ4jk}#l|6Yz5pE5<=){Z@8cZ*~5h6W$52uH_Z_T<)Ih8c{ekL76zPsL^XtUs*` zjiS!ZSr1ljm|L@B3EURVwE~~{5|4n~?>dIJfDA8p)cS5d8H5jNo*_Y&*L)JH#|cgv z?m$b9s9(9!ti&e|dD&8FP`1mf2nzGyz4Db`@0(l44Zh|32zKpt1-mIY)){z${15O% zREo;=1k5)*9-r4Bho8WUp3Lgbgm7=iQ9gQ|*)hwE7B-eGg^Fg2E9>`l>+?)@ffU@^ zF+)+KZ?Aiu+P{X_4FU%W_?x!((kR1)Uc{WBg!|Af%na7HJj)%IU!)9|jD8};3^cHe z#b(s@3HH_3j0Ev#=UN4wTViVh?m2&~qkcEqyQ@Ocz;O2qGTh1Rcu_*>6ED(1zXscd zJ*^;+7tW#?9#ni!^2gZ}@7)dsQop(TrpEsIwGH1ZeULw~Xt&L6jh!364S=Vbrmz0~L3?ohgm~QtxO;PNblV%X zY|1CzHQCQgct>s3TYy8ZooMb;eq(Z$HvYY`gB@!S#O|Iz{e`dfrFD{O*;abz4sXhCllc>D9*zhA4KL19!F`CBO{E4iP zPi9nMF~2#je^EIkxF%k*7;>;NBMBBMwhF4nmp$_vGZ4ruqL8E;vI*HpwX@~cGs_e> zzI$J>-a=0qR}>8U3Ih^R#6+_mva83$K5Fy!!Cqh zE%~wD_?1)Mw*K{lZKXKBZ^G+-+T@(m#j11SSbA{m&n5ca z;gdg@v*M|qB~)CHHhM+M&#i(1=7M-!8ipn3|H_p9#d#2LfF;K?cL3v>&mhdUMef^H z|GMnFn$8(tDV%)@n?xf2!0jI3U!8EgO6dQeP=%X0ml_)gabFpM=-kXa5C#((mLP-| zZSS|SJ3;1_S`)Y*@(VtnzycEmCdwhtQtLqZsjZ;I28>RC8TgdZ(5>G_|4jGjAvl%> zij0Z`Li5mW061W5R2JHZh3pXuJLT6G98Kn-?+lS6ao*ZL$6=`s?S`e;EnAt@;}2vF3qg+5xg zT55I$KVvH;xu1WqvMCw4u9xih zx)6IvThbZpWCs=i~hyEFv{_ht(<_)7VDaG`b4?` zXGFo2XVAhHj(@G{Yb`Z)W6r)#XRKq+dH)6QY2vZ4l|xEq#$R&ivm`BnT=GK$jr<;Z zQtn@yUKJ-8K|i$hUE+syTqWjl#D<>|*vSqGvP^ppYrpedcRjrHfLU?Kjy;?vw7Z?b zgoVAcxQyminVVDEdGO-aJ=_(1cdHTb>1%Qpej=sU)(05^7QD`q3=k$x7wem>u%SDd zc4)xi)q@Zrut4B{D!gwoMP0tOoe-|xJuR^Wymeo0^xkH3OD)=v`mGD3y4L@;qmu`2qKSh>W zdjbsk-xPzSO+?$Gyt!-FzVS5SF#>T5&arasAlSS0N0qEmT9~J*KF2247J=6jC{qt% znSzw-D!+XTiDpm;xkC0`$)x{K;o_D38*Rbetp?R_MIt9!G7n;zYjCPf`P$(TTN^uo z*yAO9dY)|ZPY&ZQZ0~+Ci}l_8U~@F#!Q;Sea%@253Y19M4( z%623{knNZz6}uXh+7T)>O)9ll*@8zSPLZFo`~1-SM)VP?OF0jv?K%Ap8q1b>hOA{< zL$ikQsq;8c@^WTz*>Z|c3wHYwc)N^(OL7Az0kp z*$iz#2?U*@{}&@yJk7RcmjKGYz;y%?njv)%V?MMN=NU>$8ayHo9oVOpnAwzu9d3L$p^$k$rZcYN+_^r^ zs2q5rvBJYZs(D=-;Q_sd7pfaa7rz!%*w-48G=>z`~2}_ zv4xtnk7!K9oAx*uzh`NcYbNMkwp|4TlopW&5d}r*ZV&;HmIfJ8x;qCEq(ely zL6Po;p#|ygZe(Z}df+^Ry0?38-~GMcIp_D|Pv)6tt##*hU)LHyF+D>CuL&Hsu*U2ymHo?;72gqevcO`|D`1Z_t7 zXgjk%iNS%F89w zV~a-6XFH(p1Q=t`YK%y{=llQqo zR^;3e!PFXZ8bKW@Tcl0euS#_J-`fi^lhaQ`NV`h%eZbSmF0|6H9wNm z+U1dWPa7xDdb#knC(n2qj!8}VXDA@u3`4uA%Sm0znnX}vbYZLEUZcvRqb?)(c z+QUv94ty1DoZjvt^NkxNUs5uPUJYSWfjm#%Bi22(&uyTf!HS14$yvAH|CiHQ70k%D zPq^3S^~V7{p?>!fKR$n+_o}Ef-T$5Ky(vbGO8V7z+`zkhcbggSt~|c9=QD$ake*zk zzZlb}!t#ZOmuCI6$E#}#Z2qN_`%Vu%!sscvX=Ev=86RvMZDIYn7sAxNq*jUTs_E~g z&AXmDNz;5of!+SOx!~|5Eu{n|{fbw2Qs{TzJOW(g@R2x0d4K&58JCml9p?*aJg0@5hoIgFu4T6MU~tvZ0NAU)b6Z{shaWs!UB2f8U%zbEb@3tOmSe_ z7?xrSzrMt~*1eRK8NZfKg-@PwgsnQiu8EH)Q&LS!HyN$SjCDC?uZmLri$je%UoFcv zy<>;;FPllcD*5h)nTs?O`ftL;+-~Yu7&rl#~fdQt_I_opWM1C#vi(Ojic{`({ z;?3W^0WAjAHP(ygBD^VPHGDocrdhbr3t#r#hAmp_zNAo!c0nz=BSGF3~wybxi(~Eh|QOb@##~$+$ ze^BG+KK?G{#dL0#=gFH!h77yy??w#UG{nEOtjq zgvj}nGnYB@g0)O}2HKnZQ5p-*@#9k#0s_cTY@EykyH7Ke%N{g46 z_Sk>@hE_$m?`5oNTmIEBh^TRwDWo7yOro3JYTULH>}#d9tC;u8$zK zydgcvJB-uO`5>1gUHBnXRz^jzrtay5X0A!%dHgnKqWdZb(w2sG2v3ck?NEul|Jta9 z7Tme5Odt7wE-fW?^#@j>5$WiAC}2N$1f0U7|9lGN^a7FztTp13a}7EwA<|?+t>XvrfwH|FWrDnqNSeH0YWt^kWVnK~-KynUVFT38iMAWZQEXH1{d%j&Ec89A(gw@;|ZhF{mgej&T2w(g5 zYIE}QR^rEU>!!(p)WS#U-dG}sAIa(;QRDKHgzc^7x=s`NaE~xB4DRHYG4wKHdNMH3 z`NhWW&|o|?H)3+Rk?Nb~uh+7$cJ0_ju!uiK=3gtR1~o6p)s@Vj)%J+~dl@;)LM>n^ z8vnACbY*yzXcbzr+IfAJbrt87eDPS;Q5<7c~*2qe|pj9K& zg1$ad99%jhvvH_ouFg?3|39qcU+bXX6q(Oy7C4Z0NDPR5DjNBkpb8<-jFUr)>y1gIqJNc%c?aRtM$HdA?r7g;EEzdAhBV@ZKjI3Ub~4!>Ynbdpv&=d z@^F0j3Qq|?GO1OnsLD$CNwFP;!Q)yZGc9<$V6%>DV|4S3Uog=mdzB1}n0AetmoZ8t z_Rmr^4QP}8C=)Umoq_V2S+`%#mcNH&(e;kMSC4F>xc8ChV*IBEGy1=+6W+Hyqs9$) zULQzS#lfj{9V0SFi3Pd4vLbPc`XJ2^sG}9H%x|d-Yu*eW*i3GzYE6g_LYYhhq_ zJP~Rp_Wz-6{xi05si8~I{#i)dqv`0_V^?Htd^+=}gXgWwp3i}O(y;C>k za9B?ZYtJdEYfIR0m5;6X!65fxJ{f5+?A!EnK|$P&566gNgX55gvL>nYF$L4DYWr!e zrA0+~oGG`w5V+2Yy~`=R23v3Xik6@nMOUaHO6sBZ47G;1)&P2m#Qw{0W}sf^lL+m#ycoZ;N+JwH7Wm!L?q*_V*P)G z47hCjt)M`QkM_SwB)IRTKOFKs`)}>^M-R}+3G`B`0P-Yiy`i2yD^WkIdI^_=T*4)C zO+|U(DasQ5_7-8Y8A>l&dBlYAjPXSy?j!ILph9HhdG<$b@^}9Yk70V1PVgOYSh$u! zZ=3_X;>U%P=L5h$8Wy65=KL*0M?+TT3vZ-ox}4$@%cGLvyLHCDI*c6nM-A=z70Sk#>=h!2^a(EL!}3{79vf>)jRIhxz5=P zebTdqb+mTmyo$gBQTl5ommN&{Jj_!3(KvtX69zcO(A!za<80;g_f)^bD>SwEavwey z1%%)-3Ykmj-B&u}K$7LoOKWe-OjYir%sW3GlI}Z_#L>zj;mpask+lR(w6}rSy*CN1 z*AJ@4=oWas(vObW^nEv=0#fpyE}b5Lf`hT&6TfubdO397JFFa!f^mr;j2In%0uVms3`z3l3nb zftK0dR6w6;q+&ADdo*$qU6wQ-(S{3ue{D9Ti=8EDI!;b;EUqd@DJGu_6a|uSEh<5m zz5~?=C0*uKl|Ypf0`uV%2+DKq3U*XI_E|EeC_I48cQXzS zNm>q#R0bNn{AA&3J`2!n~Nb}N1-Lt5bA|K99BcN@#MA%-YEkyw? z{Q{UsD9Z4f#+wWsXg^BCB-E;{kN;p@`7P0&XR9XA@Y{%`#||O<)_S%EQ4T^EMdr9_VvZ4q0jl61jW;f*6u^bv=q1To8+cF-Eov*YlDg~=}=(Yh0pZ?dPtPdK9~46}Tu3G%m#b({n{&K$JjP|$wNin{i?8QbWC*dFs;da@;r6h&orUM6Sj{;wzDbc7S~p@ou2Y(Q7w=f=LDu6- zC)y_VjOhp>rO8fgwJ!!-=rU4nUD=fcTEd6ft8{d-!0mQ2It#3!ee9s60jGW>)x zwcNi48;Z?S8$Lbqky$(w=s0_~u348f<#_b$7MC6etgz^Eajf>HXHL@yaE5ap1W_wZ zy(fufMYZoc_0$R2XtP3(D?DEs<|?>5{Z>_VG^9W z;Ck+n+)2~vB@D~Kjwu?Q^fwOAf$*q}qU-u9EDP^wL7dY_q{9pibu5KEHdB(8!W8x* zuodVYhoMsB9#U)^@H4$q`L`Rn5aS-RmQ`~{r`F|@tx&C)&sc?2$h@ulVrL6mc>_M6 zxJ4+$-)VPF5>jkChQ~3(dUw>Ek2Jf{?b;2}8~-2Q>EK4RK4sX5f9NxCxVRyP6(% zuUS?@tTmNme3#WHEZaB%Afof`91qg^;OQy652|Ak#DRBZ((DJblS@cKcLv2%T-+ z$)b#-vKNYJfIp13>h43;%rb*D?qmg}=^I(y;F#+KxfJ0Msr#j@+;z!~S;3muG83FG z(96LH$ECRssty)1Lu*;!ZgN$H#vIZEBSj>;l?HDSx6W_kPxabJJc*FjL(;^lIwi_8 z{ST-QYl>Zf6)yg;J8s3~a!Vqs;iqRe0GT2JcBdC0utQ9flR*hnkyR}MvGfs8)0JJsWMKx$?rXkeA!XO%=%x;KbeRV##JW0UblDNxyol_>2C*U=4gwZs%e#%WTugltNYx8j2KUpC`v z7I%N8(uA>K_K1?s>-d}lqjA>B0|4R8ap1EBAe<{u)kWmvT5by7; z^KgWBJGrcn?4=%F_^Exd(UPXigz2z(Nu(0W_Vh1+iLu?g&MQrCnE6y&BnrNx#lew3 zYU9hDs_NpkTI_4hnr_7`7-m1>XCo5%fQC(B@MTK7=p9_0O#91EgG&-iCJs5N&jPN5 zcGA8Z1Ym>Kh6D~?b6HHMO#0<}4X58mqbz+)QN_qQpYrkcF6tS8+_A-i7&)W0QF?B$ z_>i>fCIymq4EhrQ2=(BL_Tl2a&eVvLDJGg zt{gv{%Gn&{gq_W4)vwq-F{s*e$KO1EqGU=Pa5-1opDveNi>R`ZrEa~sE}{?Ayum^M zEdJMpwo^6&O@dTx#zLwxGm(%sog@ z1MigLkJ|uBq4G!x2JZa2#6@I&^qq45riv$+8`gq2+Y$CrtI-od$g6Kh(_c|56^oUw zqEOlty}O!nF!&(n_P}zI13kTc(YvQX^?@x1L(D|Mn=d7tgX;5VKpBEtpec1R+G|&t z)O0EuXW6#=#bzl=@PLseftC#vUX>tg;cOU+R{@rkl1Zq7u>!!fLm`C^N5?B4FtSWv z=<|A8`K6+OE7Ns9IUsL(&^uqcP>e`-Rp=D`ER5aI-u-dbZK%|^Ju^?HKdFFB>5-3^ zLzf)+PHIXY4+!xh3ZEsQCP{8<6RrPX4Nt9f8m6$xUS7!r5KSWT)PN10e%$><)*jdd zDFRQbG|D#Is%9c-U9a+EH<9aDQ}XkFR$$gVn|E>yc4D9!4jM^pZ`TNu zCS-9Kr|Z-ptDTTcBG2VxcO!fsw(7m953T4Z(ZWQ9dM>5%vQzf8>HyTaHi(Zs#4Pn* zch?AIQ)igHW50JcctSAHKZ(^iHc^K#+@xMrB+eSb+@S^E#&NlOPY*>Gz3@CfGNDyDmQNj&G#Mws{sv$hQ<8`vghr9)Qmcm-J1>eNce0#^g3 zT`SYK8#aboY;zRYYx>f=IYmslI{A9S@aFwqMIIGm}v- zGQ>H$NY(J^_rt9BsJcu@IPOvmHjnzU|e<=C^}m8g+C8oPqY z!Z)&Y;Q*NS9%(1gY%$DE*LzcWxHuLPa6(Szv244aGGQLanHT!#roS^D5#L8?+1Bo~ z2=UNaP2jTgu1$=I$4KuPLe&t4Ju$zb8#&jl>H0KS$m(g5-oEQ2^Mf5bBF`)Q$#Imp zn{X4Mtri8J1f^wmjtT!7tpGa7%ON%y!lruDE7c1vQUC}1PR`-{qwOZx&u~89klmkQ z8W^rS7cMajp8JxZWwcm@y06;c@`=Bxr(g+gX`kpEtmEnwtmDj5&i2mraDg#1ZWAnZ zF*|+mB~)34#tVV$?1UWTl0p-GH+70viN}gWk%8fwMCab&GZX!J7~Vyt)ggY|U@ne8 z8b{4eN-0?~Epw#c$^66#tc5%YYWiL+1WK6q5X!MpFnq0Ic-94WlD7ra`iRn#XDc}L za4|)?Vz_-0veUa~xdtT*>JFI1=*9XK4wBRAU%e9}3?MGR-N70rUnB~?k4mL~%)UDDzQY&F>$%aX^X)&FYzX*bFjGro z>agA9k<6R7ms~Z|lD}e21oQO3E?|no06ASTnx@sbM$#ts{xLGG;?(fPh`X&65-j;+H?VK~=9M#^{#eRsc zRH`oEifVw%h9tq`{}Sy%JLezJ62L=f_y;C6Jll!VgVtP$bCS?Mp)T{r3o#VCi=f*9 zj5oabpUB|$$+I)0()*iVZV|{{+7KHOYdDo*QnHPWjiLpJ0r-7RqTk|Kzx`4pD}$oh z?y(b!zHfeBxvzeMG(C8j`HDf?TmOEk=nr4i<>|#IA;!EJ@CZCgxwlK_Ot;{e= zz2n(GPSqRt$rp7rZ`f%Q1_nGB^p{G*6|Zh1peL6V|MzHWy>uB@yqpP zFdEw(iRO;8r$IKZ?|9A21-Di0kzCRNP2y7B!jsIrU@93|fYL=AK zE848_`Rhnh9QXk4MLk4iI_M!?$d7L6eE^Dy)NsPckD33^kr?7%=P4@=+v5Ps2)ncl zU)1pb`hV9XNyx#T?h*?=xQr6w{Cj^T6#VAlfBS$fV!kgo@N<~@n>R{**HoqDqn*_{mQD&D$7a(GXl8jLzZB{~LV< z57_i(L949@PQ8Et>Psw}#Pj1_Pm*x^752Xp9e;B^4Ji%(_5T7iJuzP`ZLQ1G?3eGs ziW@BN1_&fb?BqWQYX3BuOJlC9ul;B(;urNXEs+~BX8YG&xirjc2lsbef-lcUJbhQu+J3sZ)N>2ac2*8jsN?D4>Ga*xTs&6mPYpa2u)9w_W zUqh*&NTvn@$W#C`=|z~(rRo1d?7>kgH7WI|J?Nv%ZM;0U!*dJ!cs4HEH^5Jh6Afp(kz z!tdi#%pJe);o`O@lf8X;{`@#~1+bo!i7nq<@TEK9Trws9c?5cCfiYLE7<)-P6;}N7 zIQSI3e1fMnAO{jZpEr_MWvH@xa2o&T@)5=Q9N}mbn?-*cf|7)Yfr=+1gyr$06N%akyb(O1|BbZ_(c&ILbDnZgAAp z4Yk8QkLUm{Mz3y6>e_OATohU9yx}i7#7oLpJ|FW0@Qh+qfPWhsf?#-3Wa%u>;B)~U zx02JP^(2Pr^?2~woodo;wIX5_93Z9rVG?n6y9cbSU7;rSyM?~09au9KS|4p}vQ}$i z2r2UQX!oJXT3Z1A5wVqSo-LLIp1Nzk9y1Eyd7_7>>+Xc=&}etvq+T5X9&y+rcq(Z>Z!tTyK|Tm{GZP-$XAr=^5ld!9vbD8U6fSj}!jM^hecx6# zn8dLK-3?%joWQ=U92D`6;ajpP}@t^=!fD(WjN0|r#tRwKrxRS}fvG^*;lV%tg zXAA+OaAs#VBuY6`j=TbdzumQ=Pkk^mSZ?myUDy7@K5r2adfcu$bodbkzyO`Noz1j> z8R^u{^3w&x@OVra`}Nh~!l_zjvDrF@{6QMk1)tI(fL8Y^7g_rV7{`dZS2*`iV1ud-Hb;bSQWN5rogUi+`2oD|6 z)rCN|>-A0fF|Xxmybu96L-o-|<8du(_7tk@GJ=l1>sonR5qM4=rPM<(TbW@0xiLT6 z&xskEAPyRu^R{f2Z(NC{=(aaK7FZiu&Vng|u+|8^)phOR1>^bkTyLR~8p89cj^tV7 zo|@eY`!h1S5hg$IQ2Y$?I#iiHtx$5iG{KOLJkT5eClnEfIstT|%2;^w1QFIoOhLIA zJ>2R525g9hlPCzkrIatzwQ38W6q^-i)XJ28f|(LA0bY#U;qd@wXUscb{)vp#*lTMe zvQ6Q>WOhO#=1 zt2Vu*JYbOYjsH4zf!aWo%NUh;+}eR|_0F^_ZZi3wxpXcc>DE%X$#9PI&~|apY58LT zL>hJyhaULWkXCJk{IZH){Aiv7DR}3;FPfv#fTA>4aa1BPVaJr%9ih;=`BWs>VUJ34 zvn*e_7h?8y*&;D_N(D)XcT)^glT;hD+<{E_S`t$h*8=1p#9++!ovALqI80t?Z_jR$ zf5Gze!Kq0&j)x>Q?gtJwBIifTIH4`)mMf(vtPNHsV~KX*Aubl9A8YL?@a73KjNR~( z9|+nD$y?{nl)3MuDZNIV!b8EhnKAfGe0+S8$l;{=E)6hO`;wM3j`ZWX$ZXO4e)tIRhAga$}Fd&T99I()W%=UwXqqr2v54?L7!eBShZwCOTP zCxkeT4@tJ4JCC^Rsv+Xj9uG|zi`Ebdj^i{{7Jx$Y=!e!JyXx6uv&>aX`WOZ`ULh&w+surcpAA***?I%G(HPcmKAFw%1 zpV3&VXDo0PIo#1$><$rU>gUa?M{w5>=!latXvOO=u&u%SuBwNn6!8dS>_rrgWpAMq zel$^J7q8~ZBtU{K?d$?Z#@Tz@U=@0@lr9-ewM4$W{LNBdwNM>>U84duT4HLZ>70g$ zHuRUp)^F`8K0Uv?@e1I~Q(wwT*o?wO}e_B9s?@djb%-B zKAK4IN~v76K15{BC`$&vtB`#rDv5+~cHKmFzw2Bdcb1nC$hmt%NqEPkcBFQ+NA!{Y zYJGPfg&P8V0eS3EE0h{LE|u^nAqUqt@2pKC`@DmO zCHf4ov3G-)1A>f-VM>wmv9v|^sMPj%O0xer0Sgov!3$L-fYu9$>_2Sc8O;L}EaB7P zV5P0i+#*>BpLg>u47F8^8F+d6kV zUU><=?ao?Y+_`4ItZDN;q~Xp}*%k_4%H+e1M6P>@c%z6ER;H8|z0r@pzxlgmNQe$$ zn4Xm!#Hi#vxiq9*sVX~c7i5bMoG$~O3n}v>2;v@G2pP^L1(SeouUETZp>mAJ=QEbz`TdwR=RTI0Dh~qa`{&j43G*Qj-Y9b-PN@hI4Z0JXjOCbV2_v1zf z9A#g09p+{)STG5<*+=0NmdTUMm}z7L3+4F6cuSuJJfvOS&`G`J2=KAC^IqxgOEvk0 z3T&X0r{NvFHo1(vzw-sfh}bWs4&Ai|V;--VZvt`ap7pr>>Y4d!Esw&q(L*|6HFko( z`NA`OEfAusqDeU0%Z}S;JprGs`a~ZkO>2@R@Q-ZgPd!>#u4<5~`x<85Tsu|!H9!(U z`bY?*smb@9hRzgX;rgE=5WtC2c7gc8@qY z9nA*d>Sy-Alu$$T^0EDuOAWA#?v9QN0XtrEx~=?M5#BlDfT~IK-0J;LK^2{1x*^K@ z0NJ}MGR|uMDFO*+6cj8sxrYjVQxRZ%2V_2pAp1Cnj7Ac6F!q#KXyl<%!1EW%?teEQ zx`CXAkMrSQD-}RBJioEbtC`6zI>F^Kl{dw&o51j!~!jE~Rk&OQ)deE4#?4@^u~p~I%zlB>1Oi8Wy_ z6a$LZ9wRbalf+LwU1mL^#|-<=FKU|fW{q7yxJL*Zp9V-Ix@y(nKsvfS*a(pO_m;3e zq_$IK4$)%$1hW~oUqXI_bN!> zDR>;Nlz~W8uk_n;53|?azOD1w45w`)r4@}(P=@?{e}B3sfL#33%0v|9ATGhau^gs5 z9aYj3xw`j(2h(9_2*N>F#LfqTS%kOGne9CI6sMUUwj-IOVWTw4aQM)!iCX(YMdN0iObB&Yzrsvb~4nTG( zeko}+>ZS2bWl>GbR?a?O=xa?l>Yyf_DY_92d~KTpV&u+aJ9+IQ6Qp{iVZFiA@#L^J zcGuvUyujD2F9-!E4((4V=|`mC`l2=m>H?PkY<0wWsqr;6-r05zqL z&Hxeg;ws=_D}(+b;%C*#E_0Um?boJmR?V$PTXB^O5h{u$W*{05lc8(=@|%o4ZtNmPu1a z8y8;EwnKwEtr=+{T+db#0han&$o;f^EB)}jM&xiFp8wa9mjkY1fP;yF_3r_BiaNbi82Akh;v_%XY?{N@(H^1RG-mus7pG<%op3LGj5yPx zr`M>ubJZ00WrAbbFC0$PR?gjr++{NW!CW_;8Dhr=>QU~L3mgUUoStQ7f#5!MLkyXF z_Bvg$#ZL~)cy@in<&EDdrGa0Rs(bRB`GMBTd^uD*{u*W8eXV_ezs{tVglV0q1GgCf zobc~4^@VKqsS_x6sC-UvimsYnPg5L`p||7J>83K=kk%VQbX2Nwk-;UzsKx8U(C$Iz znmlE8SwQX7n@%$985R{6mlnIFp#tb}EX^5|yLuGJCpNOd7YI?u?w*Yjpz$!) z!zwZB6S5>UXLjz$CrQ^cG93`RZvqVAvS6O4tD``_uh11ctTe^5mG6^eQ-Nrz0Oofe zzIQZii51D!-ZYb^#5fCqH~>SVobqz5a31C@(lggXI&-eO({+v-Q?>4-Q5j{qB;Q6O z24qSE29kHu67OFEaA`$fyE+tLB4Ea*DT2E&vbU{!(hX)!CDO66!T>f3&k-+yZwPQyR&RI26bOh9jQoB^UP* zFvr=ILvmZ3Mi1q=z++-V*|V931ndg{C41vBlshxKFh6dehcnfR9m&ZN@Vq$Z1ctwk z1Bf59)Jr7?V^%=88(ps}{tSTCia-Dabk>bQ0KA~2>Efsi{JPd%lBgExcL@55#Q>JA zY+#Evb|agY^%0% zW^A)*p*SbOE%n>MDQFa(mGh}@j5>)tnNFqhpPWr3gTg|3s;q?A4iSWc=!s`RhA8bY zFx;+^Ct1y1DXl=gMCFbP(p{WWPG=9eekITPI|H7?HnG`(t$Za%iyCGhC0Tl9jIFA> zK58B58G-rSj6TH-JetALY;5h@d#KrZs4#~4By4W9&Er7I3>4`&@y(c% zQ(XRfqH_gciW(1LBc6qw0B&9 z=QmeD1Tvjx+Mg8BKQutm<a{IgSE}(?W01v>}7>n zrN&>Uw0`YSq{glH7VF{X?9$ly%wuOvD$=u1bv-=4oa1~_>`styxjYvv*571j%@y|b zDyNf7?Ju|Ck`a}z*sxlyAIa*PfqwsG*pWGcSiFU^Vc!YF0Aa)v5ra|JSur4Sd z(9pGkNOnW>5BEHH^M~>aHvrP1?h<_a{ANN_rdV>0c>ec#GUA$#55@2lc=5?Et;xzY zrq|Fx)8rFuE^Y&(iq1eZz~66)$|L@iGWFq1+u;y67oZaUX$ZSVAKy>{J?(<*8xF|@ z8Y8A1G#WHdYoECaBkKA^B7aOQFl=X(!aX_%IX#u_>XaM&;7LMY8+R6=x9e16bd&de z6)A3EK@41g#8-PC^Er_xyQyOFw8C9LXmZj915QwY5Oa%yFF8EIH>LAyc8-`f-3rLK zNeKV9`QrOQWjwzR^%eeGQPF@yUBK3BU_7aRlL$K~r7D^T*_>U(I-D7aS%GOjT}9K_ z4Zsy$&>3lH$Kb>4%pKa>I;6rRo=(AJQdW2OF6F>!c&gxE5>;9}BQxV1Ki)?-$DFO*j(GKj`|>IlHH^>&%?t^@pv$fSRi zLjST2RAKJUmpIWKVOhRtgIt_R@t(EQ3BpH%r;J^Ftmn%sOIey4%in4?db<0~TlY{# z9+T(N?mXy1f67>km{`YnMS+}SPX?+3hiLOb1PNF4PmWvHY7Rm1Y0_mPyljC2tX2~~ zF^H{UI9z3AJ9#(} z!w~lZv)_Eeax$_lcfj9~qClAotqwGrw4B+UBWq ztC6bX=)q)jJM7kl9>1B*&c)bw=z?07(FYwcpsarLjed!9+63Otd0MPhj42Z50i>sM z(jNKd!kVS=uwjljG>DN{!7nZE57W(3ECLgu{0%BW=nTy#7!eNhuJhI6ySyw5iQo)j zBBfp0tQ6)MxLCn85c5Fy((@r*B$7^31(AHM4=Z|#m zelRt}@yDj@X1mGl*dC~|Lh^O`3(YoQ3=I{5a zAfVL${&OUr1gw8Tm)}3A_~|{Y>CWF;ZYJ|NebWiBClJkjCUX!`&jpyk0a~83-5r)v zAaActYy<)#nTV&|3A;rG3pb$uOV0(GJ2csgX>%nn7g6P!$B0`C;4#xqFecNO#cIdf z*@*EGAPsC*R}OoIurE-8>z%Lz7T}_pus?v6AI6pS0?5a>e`}DF@rd|FGzFe&I(7E} z&wtO1^jUf}-?q+U3%IgG^zMIbAO9t0rd%Y~4wu1^%p+T{B*;lTIsTtaL7yl4c8Hvw zjNlXaLPuO`;e~s(IwBZyj7(N~j5;TfxR2wl9iP&Q>+vSW<&JFi7gnxKK_aSv>k?oq zIJ&+oEl@nal$wDaL1lzKekfZ*vJ{Y1mYR0(LEs5JJ;U4<)Z4WLD;ZbC%STR$nJY}$ z&>qKgtCm_$sa}>C5WzhGi@Nj2_D|}t*LtzL_Hma?4KVwADD2Ab$2}A0=QMjU!xQ@A z{_l33PLJ(g^AZbDvWqVf(eY^xE}Hncz{BQv+{&<#wk#o37CEllDqpoxGYjzrP&Jp3 zCk~&*{3dt)1lCv*h62S_ z9qNvHKNw*yQ|KZpM4trz8JDRTo{%=d?GvCcRs?}UOaOkbeVa49)LHeVVzO2>?a{j) z^fTZBkF4WbdnI6=3V&ILxR%hx-XtrMo@8}HuyWZg!7xb3EFX~cj4$%SKQ<}C-nd}} zi7ZAKpn%*g1mP4ifSN0o7xok}HO`ovBpU*B+OQc*WsM|Jj&~t0%Q+2y^DD)c)pOj7 z$cER7H|M>+*7^F3lHC<7TIZlWyPvAQXwUK{r9uLgRnAo8OdOT<8B?PbCc_5|x8CbA zPFkPau37J|;L3Jra}Ty%-*SDv2y+e_`Rr4{z3T}5%0g$2hyI$0;nem5&Kktx&oHkjfiKLd$xSQ(%-I@uD0RI3g>$Vrzj)e_XC z=sG@%a306>J~q(pN9VIO;*3a&$_9DZxUiuv6v%sRAJYccpV$Wu5?XeKF6(m717a2d zl5i2P3y5n32T2dn;Qd%+gv=FOH^I>v#6 z;X;HIk-Vu_hsZ;rl`>5$zh)T|4j!4Y^(=*0Q@gAsItp&6XK7V`7lPf$R#5`3{m{?# zoog6PXG5Y5g_4FJ0-!}{45!Vr5hE!Q&($4YkoW2*}X96)k|%4%ng%qnEUI?6~B&<5S#UvISOpNPh}u>F2F!T&E5z6G!0PcrYyoDrZ`{h-E26AN6FUHgvq0i0 zxtwUSr2CA;=W5(YKROE0-5{b-K>f($s)_>xY9-x7-)Qq$$X9^8gQ3VqIy!C$wgF+{pYd?l-@3$yLR|F6{Dmv&P(U@vCJf4k_-vjzha~ zQ#TvG`_$F%6V>jMc;b2Jvojp3mbWUB>WKHzh(y+hm6SN20An?P^wos5g$Uh$ozq|OhVlCV}B zxL)pRIcxh!+GsC?F!z zVfQO%{LDp|jo@jkgTbpNNT>D~N%SFti5h-AbCxnrGhdqydY4@jwpT*TYe?JdG0acIo3EMmt)CDen zrt$nM$O5wa{eggJ-vXDlb;*{t*3&=Ho$CT@-{{Q9HRnEWsfTh9cqIky&sYAg2=ItI z&5wYhzpI)NlrjMZG-E@oKp}N;eg-@4TS3zu-8@b^HDc}I)4;*^)+Y9u)_oJ|RKG8h zH-SERzWx|8trV4LR;q`<3R#R%TH@Hb@PGz7D4uQkfxS@ii3@lA3{a5Pj~j5jKIr(v zGNQg)MxI?`I(E=YGKuA(7cZu9$%odt7RB!91*0gJPWBm(^&WJA|nbn z5M-*>en#Yl+Ts(Fais-oSbUR&_6+>)G#H;FXEK~;c28)!L*@u_XX_%qpz<3Bk|~!C zE5=TC0zba$*}Qjf5k$JmQ{r~2R-@$ABptfq1kA_a5KMk#|r#2YxnKL!i_bL^r&qGeD17H{q7O`0rUE@2&>Dg@R)!JVb zSsxh5>)-kYw4sW{>GngTtRX?mS{&cFAe~ZVMVvtQZE#C$ON8hx3l8g+Ncrl&3gUB=&4g1kM>{(S z#Po589c6}%c-_tKlWeDtezdxDtr)e@^-U(SSI>Timpbp+8ek>j^=5C%!&m$uVN=#!)!gchZ$nfuy8QmAzVntsjFLN|sEDZxh6J}Mu z{=iR`PVNgd?RZ`HOH8uR(PGkdtkBIQ@yw04lAdOqUv2PDOkM3WLZQapAYBg7ac|a6 zZ0KZXSuXtc)+9)X$YT|5T#}CuA{2Y*y}|`v_Lepq3*4uoH6!5&ssYV;3sO4vh`MnA z$;6!)V4K+PxWq^Ve3e?91EgD>jrER6yuDaJ5wPls-eomEQgs~qHrWJ{+J2%Vgt)lv zC)o}-J>PsCxURjCuK}|UrNQ9_02iD<_}vdb8ckv@MD%PSL#oSP*h`vZ)VVo%f$3>6 z8g}2Szjb*~Oe zd-k@^Lux`A^`bYPSMkx7KWH$mf^IQOrF+7YNAB2t#^>M&%ACKA$+FmZtNAJE5h;J( zN2Z)%bCkyDC!vi_ClGv&_BV3IV##Fv?q>G{+6lq|Mx2GtU5Q|a#ttdQ7kVg-iVhtB zGHW=+^WbI@G@!xAfz%MUvse=^=mk3xqkZG)`a?plIZ(Q)ffO^5=csSBA#IS<;A`gH zpcCFXdvS3PK)^taz2!5KYDlp*O0>ZAS*kn4cz6e;dTlPyx%A%G95PjsRJ zGe%H1iPST-r+K{J!*mc;?~CTXjx9+%uj4l_0cp(KgLoa#<6c?by?_o}K-=6J5M^6aZ^$kHx&vAD?!S^f%GU*W}Ms3bx8iPu zk!*oxr_b=I$$(8n1y^ifA{mYH?!$ZbWCx2UrU7O%b#QSIYBzy@PKq5=RxmwqpsJ1MlZl(|;}cd#!AnYnFuxb0kgVSuhUcj?Sm&Tz3+P+L?$lO&+S zA`bjnd;0R|gB`?>yC?7<^4Mrn0rZbzE)PS@ZBSjZoFSnrf4tXPj8c0qe&jwX=K(`(8DeM$M}q zn!1yNy#mRq+L;BO@S08W2=0rpc*1CPaxUonrg3^ERT+DPkd|)FC zRLgf~#7h@bJ}Oj9b|(~*-Zh7Jht9@x{Q|uPc*5f!6?DPGY5RoX_loLf+cf{Sv53IV z@NtgP{r&t_=ueo|{cVfjmzUC5f=+oq@Zpiv3ixsOXZHc|6_dh0@0#1xT7NhmhP92$ z_kM6}sfoXo_BhDm{YlwFlj@!uSx;W4f_%h!aSNZ92r|*|OfrnEbueW2awMS8mb z*v-43w?;!TxN*I!DyeFj9k6ha+R28g9_HiCQdXlp09~9kYM_X@!(UlI4eIZ*eE|vD zG;Zf(9DlE4IEt)kef~J1p+| zGJKW~dJBC-!yYu1=8{7lDZSY4smL*9o-2baNTL`ebO* z!D23+g5WbLoIsj9_)UHC;F^`Zp1gJJMJvYuN2@bNlC+A0iO(4C{DmS1`Kz8!e)Vd0 zelmYf^23c(FwO6vi0Kec9`@ERx;{>!Y0cYT6?s;5x?fMNorv@oFTFVQ!gkg=n4DqU ze^Be|p=v?J187dWdR46`?&ZpJ$0#iapMF}mqxDp=5DFH;P671XQlRPx~MZK>sC7HxW zpychAa@-3zV`Db^F9VsEHWr5BYa>oefW{N0_3+C6ef!gdBSG#!ya!Zgu+@Zuh{fjK zY|ZJH7Z+-)bq2mv>o6+noPM%{KDsdvN8VMCeb0^Xvx3V>T#BqU%;x(;aEGx0F5!`oKanAX?o%p>m#P`S zJ%*M%mOJ&-*kl5f-KMvuJw5vTkl*XjJRX%}tLYQz@!VZqo{4rR<)+8x7l%~iFLB+q zD_WO)g!ldeKmFRu@tD)cL6D3D7ac%#J*XwAOsSRXK9~g>P`x3!whD=S1{q-J)<^#m z7guyp&*%q3q80YZTM&;-0k zR^O`Rfy>FK{m^lLeR(HadzO36@lSL8Q|l>y3B#s}MMv^!d{^i2Kz6dLj9<(0*q^IW ziO=wUxZ_6rk!nU};znALa;J6G?%nS_*lN1Et#ce2lq>%M+}VBh@o3Bkr_h4y**^~@ zs&y$;-%5?05{$nlZ~w(}abJwkOSeB|TH}X^zk`E+C`fuJ6^i|mt$LP|Fv!)Uc<3H` z9W<3EBE>#ypFGc43#<5p+>53collhBOG~$Ya&O(!r={Yo;i;LYy#mL(A8;Mk(=xo3 zV;%$-HM;fd%$mJVi=yUzhmEZG72(y|mbq)fyWeUb?_hJD94F9U@~CXSjuUN?-v`1O zCWEn8OIl;E3ip5?^avW?NZ8vc4ysqsQv+!0 zs;}Ir!-Xrk1iAmtHwgEiml~@7^Xgf#$iX*>Am$*NvCH&ok zT`rtn(9AIl?YYSa&HN&-Y~H=*&czV|8cZ^b|LAL#MDl@^rjp1}LB z>)VYG?j+yL&{yia*}Br^p;0U>ER?Z8&Bc{>dG-;wAA4F-(&pJCVd(aT0wYSAq}Kg@ zPVcb3cf`Q-C09{e#CLHEQ&n?OpSsa)esnRM0HM_qp;dmtyVzIRK?Jtm?X4d*oZ0oS z>V90b>?mJoiT{4CLUe#=+`yg2Ber?+6}(T%JVwO7MN={+cdNr+LfFAlRNlG|*-Z6z zDi0X4FfYhNa$D&Z8d`3UZ0OwsEgCSH9;Ngu;p$qVerZs6h);bHOOw`m8qVI$!?>J2 zp?(Xie4a#gsXN)Hy+_66ejNX)ooP4BTmtpKw!#(hN7TH)U8m@-raj|;Uhk3u9un0j zCSPK=FbR5WmZchXJ*tWt;e10pxzqLTO1s_JEz!^t?l zZNCQG?n-YKJ?i=7=Be%}Gyc8A&yQ9nOEtWHE9b%oRG+m$4Sve^bq$0E`FD@&tRJdX zcL=|)$C760M~Q94%TqZ`-%{Qy)HfQXj-EWA!uIUsb`z$)K-NBaV3i~Vuflb$Ez#>jafqdcuMe08gbto(_u4mr1Uu{E3+TRa375ZSbE%wUWu0rQiMR>HC zB=#di#Peo{vLWR}LIiEzJO(q&1+YYCNg0IQn@J3oX+2z0Gi8Otje9|OLZyKxR@iy zs!$%X04)N@@rR@mNgK9V*_IJcOzT$)m)hJOJ;=I>>srPFlMu0=IaI~+x?-$yY4!A_ zXS*Vv57n1m%9)NTt6`$0-p;UoHTG_#d|mO%5VsHCzDk<5D>yAfUh{qd-?=i8Crp3( zyjN*+R8>~k#zX-RR>ZVwF4c$qhK_C&s5(INGDkgrFO!k2)ISu_p;IVMrO z_dxF)8DC((ZR_Xfm>kuJ3hJ1GMf@qgE3&n%3dF*yT&}L!Vo~nMS(#OZgx(1Hb-k%A zbyB^EsS)iPMJ_Wai$6Sg`-^{%NJe16bZx25>R8b(HP+IE_hO%CO^)mRLXXES2B{Z{ z{_>fSQ#j$*@`=&25ch;|QmBMi&1zkBcHP1w0f@4aF6Zu6p%T=Yql@iMYi8QtMxB?snx5#m97{4s`jSY!DMxlfiEEqLQwn7^;U3F&tGc5 zYDcsivppj!nK<+W+}640SUbaR{%8L3ms^a)@8|rt1R6K#`#JcxYlfL%Rh_}6c3iIM}u?EGMeCz{P32_-1w*|eM&WWh^i`9r}Z&#KLCyxb1;$K|N+ zbp?Nq^Av2<)hSra|IHF?(Dea8#i+8?tin*6oQ)FvZiUXW9Sh52nUV66s@;xHxms>> zO_!Y^eZ>}f(MOJ^s{>F|gL@?#1D2lb=V)~BX6ylje+&)|Vi~(X3b#$eCr+0mgL{7V zo;)8A`@Ji8W`s**E8>j8=TXMHgl&t8THVitT_8Vf3&yI(yy%a58>TJw*to<Z74Yy90+~5+RpA(M50@{^QP6-)TZxKcKP9H%{{l!wv-NtC&OHA%DkP5!9Q2S^ zO;87JJjZ{sH|B`g)d7`n-B+#-oDU`Jtm`onz~OhR?DXEhe;@BG3Bo9@q)KNh zzf^nGlp6W;`*6WI))&Qhnb;HS4ecoMFP!KjEorl`T+#|4+LA-=hMyKKuNv}twq(&T zF&F`XwnZ13P7}C>Bi^eG&P11nk{5j0w0st71R8dO5mUlGy;4*5+c6!!v^oadylrPh zh|5;ni$U+7%E5$;YA>UglYO6I-2F!3Y^JARUw!4Qw8_G3ON!9ZOb0b}vJNa)fqb?d z^MG0t4%#Sm)}-dF{O+Gxw>FE{TphPaK+|8KjRk4t)qmQ?LQAElUWJe*i`tjMFDa8h zh=YHR?84F&$TQxVC#&(=g|9-tb;wz3lachX;Le&nQyo8Q4SEq)_-V>yJ|5lv%eORy zjs%70xV5|th^lZZNWEm z5lRRD*H$MVfsKWC*4$_8%=J%sMWl`uybN6mwXY2sCBt$w$k4*Zhkm2kUaBsmBvWnI z{zBR96(*HayI|;NA^ypBSA0m^mjUFn%3k3seZ;Uofm8JjeV61+67xj0* zAOGK>x_+C0#{I&ZqN&%IQv}ZCgf8XXeH$D5-8Iej0*1Odl!6z6f%oTM%30Sfx-oXY z$Q?dq7YhayWWus`Yo!G)SgquFU`g?sKw}!^)VF6Z7yM^}O-Xlv@jQ$}3yNdy3qGDoVnI=88 zD=&286Xa^eM#v%ej{vT}#{VjzbURZ|IKnu*=|6*xg#2j59b56F2A%{M^Bi?t{e2b_ zHeQI)2>8JqA*5TFQfa@4h2bNe?bbvI;gLJxqXVqfmr_|w>H zeaxeX6t4;Zsyl95A2g2#!s;k~fbBGxseIM%I}c-K+f{QX|KCx=!C_&m{oafpZj3u3 zPnqb6=^Y`!+W4Ymn>F!5o&W(<>T4j4Rx>JkzzvgTFeKKaCJPGmfOkhyzHWC_Ex`%^ z_3|qaG+#o;rye`}VmrfJZqko5Lf*}Gt=P^8(FF2U{^nGifZXPmqW#KkJO?j0>Vv_f z=D7&cUijIO=@4<|kcU|Rh9-mw{i_HmiU&|bI{GAo+$SewC*Tv@;Cq0DB~6-5*1E30 z)I@U%3ux*#^Em$e6?*-^+_Q8Qvhz*`(tmbXym}~bGmg`8YbxJ6oP41IF%`xU2JW#+8=HlWk*H+%uQHcc*2*r9&oQFUFnmu3BO zpTj8)c`#*qFVmuP2<^)bZ2UMRoRjV8)R4#=?%kH5rK5T*czRqUWacktz6F%2kelQ= zwoiELJI4W4*5GYN+k=2JztuDY`jKW5jf3z`n>pN8MCo~KY}d1sn;ATEwsis4b$fEN zJRKS?f{6!{7F7YP+heqvzM19C4FQIo$R#k^<5e*JdgDqa)2gO15gK!|NuDE)LTo@&xzu;O1JXR^sT{6(2bxaxITJ9OLDm@-B6Ymw)XUK#v+XH=IL>|!7K(m9a9cu1ASTDlA zG)mZKXmwd<$CPNlR`f3FA|Ni#M2{%Kb`RH%Yi=lV16~ncS2bi3t~T;HWC}?7raJUJ zL?IA$yKMs_9{$}9y0f`(_=04wpvEP@#_4hOG=v*t^<4yoOV_H-qo|1gg58G0kOXIy zF<89o-B`xS%AnOGAn8Z8@btxq2~+!^U!+}HtHZ{?kH}0W!<`vPCY}oJl3O2kW5lIg zunz17=cU_KAl+v#!tz{m*zmC8l5N^lsW`htD^ zA6)^N6Bt*fWNsMh!Ilm(n&^=A4Y!kl)Wr6jvV|I0m}9@K>CVPySlFC@5mV^!Y%XxY zF9!IW1B$?HEt9a*NUYYuY;G<^bQC2pTBmZ>vamGGiMNK{b$va$-O3LHWNrRnT|-y< zJv0xDy!J2z5DXq(8g$OZRV}F1bx6hW%jn#nFL!aUFLxfQ1@0YMOVGAvh1Okj7ck+b zn}^3Dj0dx9n6j$`v|qPFnPYQ%rf*?#psmjh_iE0eYhc3vtB+8(Tt;z5lyf6<)g}q2 z{?AyGlfeq(A(vU2>Q^Tu+*F1tguf(?R&@M~!Y~>;c-SID?1u5dwC1TwC`H0>Au=-! zb8acL-dx*B`{d9x549;+jMOntZK5XkGWJJdmT}X+B^blgA_pRL1LTjeIOYkR{~a%u z?%i;j#gVW<#CegpK3?}YLsYG`Ml5B7l^XFc?;=s9ls!@HkEV_q!^fr%P-Bg|blN9|lqHJE#S(PT-6)m+-#{E4+p4kNiMycxvJmtCU0+ zssqfXeXOWsDYW%ru*^_f0iXG9j)6`gIweq0Dy+-m;OG}ru4%y-_sEdvO}fqPiFup* z4G%kc715sV4y1r@jYI5_n}>0HFnxrO$tmS&iTtGutuc5{Pkwg0N&iZtmR#=63yDyp zQ_A;vqnnDcLvl7cL0Yz=D+BrAGS#1B@PQA?z1{KM^Mud<2C-b&(;?ngWT?8UyfBmK z5#2QMX1!r1G`(BKke*R3(;D3*q`cXSYmAw$$L%_>vJ9R%{9lOvae-hxJP-SH{m=I2 zj_QyE5sP7BfSauw;uI=XbrXZrDa=KkNF$$);grVr1YgnSc6@4)ybfcCWQK*V!2F;H zdh)u)Bg^#|hg&hGD*2(~d@g<&x~c0E7>7%te;h|0lxrV=an|l}>IqVwus*L1{7qXm zTiagQB}yM|ZmoHIEKnvo!%cZ}oUo#paUna%RXV!E(z0(G*&&^IVZm5HYKy9y8PFQu zJ+Zv2qNJZnOJ4V%FW7N+uO7m?xVV>AsF>@ZLptvTH#|#T4|y!rIkQZjzBi_4a}XM83}p>nQT2OI&LWb!BajbOQ29Y@GPqsc8HmxV_iZb6y5SMwoU zYmDDC7r(kK0?I$T$W#^W+|u}H)a+d*(C$|U}RA*+%F22kRlwI^S7=9Kh#@Z70hV25swq|99M@)> z%XmWj@-JoFb4yuQG~_6(=8QQDrjt-bJZF7L4wRKEf#17z; ztZt*|CJ*{JWEhWm-yy)(ihfi})ve~G)@8o`fb}Jq5+2!z$a=3aZfat9-_|`bw>)T+ zI>TFiL~beM2j5=B@D~*{Y0skzQBjl6-WUwYx>_NXQ=j10a6RIrfrOi(?-d6Mxzm<) zdyUQ1u-`+sN}J2zqCUayae=xQmNXLExh^c#ts^Ax%Mu=81t?M|!En7AcVca{xr`hm z(JQ^AaC_Sb`;&Ljesnq^e+P-CRaJpgQ!+<&`}HMJs8N&YutHf@*X&(m1VeU-hOS4^ z(>F00Eg?2L`t0+%=ayg@)bo8auBU^uTmqsm0qb-4)=_WXjxf^xZYLy1=&DB3 zBQb9DeuKDD-qQNGi zh>&7EqY=Hdrieat07s=H;i^uK9Ctm>no}F{!lLe}YtV~#+4FS=3bAhN?GWFOh?I!* zb0#H>7?_Bv}D_es38F1I|Q6Rg&HQvE$m>-oMp@T*G3>*AZ?CssPF7_0a{{}h| zwA_eP(eDa)mr%!@#$ek#892`w7nYOmR&7%Fc-+CYPzcF=ki~;P=0#B6jagf{2mJnk z9i2r_(FrCHq^QACQB6TN~F!S>X|u;Yt}shczms%J6B2_Ep7STxU#IU?eM;`%#^Ah8Sc6k!>8uF z+I3}E>h_hO+P<&dKK`;EbMi(Q64h(Wkz?1#;Rq={*XONz`v!Jp8%fQ-;X668Z2KlK z<4wNj{$IV3QNGt*TNJDh8X3N8MD8b0KToED<6gh~)SF#vAYUf?Wy^tP35A)pAgjgQzsyd(GztlQ&_x6L1wZf5{uF7=w$Q^#C zME-a|g52z{=%($=y$@}^$do1_zo)B={F!5qghtj%v$~Gwr65wIY`V{2O=(0A0mTH5 z@%s>tNG>3}g>5+#c;)HQO>u^yPS8yygL_IND|0qm`P4b1@*dX=)X9>3mTceBQ(E>T zR~!dgZSc2MN>1g;vd*rtxbLqG%a~UD&iM2lma>eoPoOZ)L|+B0;aDO6Kc$=_zEZM8 zC$Olk7{0qz*$Qb^#&B1nY)1>rK3Y4Fb!ipEap;& zomQUJ2G+>3lv}s%o#Ee*ltdy-hRx56b{GrI$K9M7#N~YI^{+q>mU9qfHFb_0#bx!^ zhDQ~9J6?I#i9>fwP-E`p^;yQfmrZP10mU z7>cU&?bM(si#F^ZCW6-;2lMl_kDC-l+NK1yYxNN;?1!e^^2dJm(AlhPrEk)05j^L@ zerH=1WTU&Yo_3B8_530`4EustOF9>NKbY8zbvwHVl8=mGVk7Q|bz4xzS20*~r#lW`F&TIjInp7_! z@Mr^B*(GX-u;%exvu^1G1`(W4h z?Z>2m5_ttr_Mq%6zTOoi%K+bA|F?KuA7klAUeR&2pe$MW`H*C%sS@<_nd44xep04XNLPc;k+V$=ouT=ft`ph>i6|RYo2D<%^3q zh?F>{DBOQPCZBrWtq>%dXw)^pmfrp^?zk^iI>r2wX{Y0k z?fkY*S{kZL`^3HRtKZzHa|M`)^Zc3Z%ja8{OR&QE{d{{Fek(P7-~cr+76N-I>C=kc zZkgmyQjO$W5;Ts1YVI_PqF{S`cC8%!*v=KlDvZ<(WSS@>A*Q~xs{*rwoO$Y0&;c_a z`GT6V06>y9A$5li+^+9hY3CG%MK=kQL#B)lP$GfBS$^F~T-wbtmxdr3jPu zVSv0#AU8d%y5d-OC;#nG#~$9MIxAoby+Qi?utr>Qgild~c6U2|7R{W|hZofiKr{73 z%h0O^bqDddvuaao^juE^8z^zww1l*Gm~SsdD5qTt)h}#6{JszB`H0wZjw5oDeEZnG^?pp&2L8++osTm(u}wy3MKe&B zK036l55*i|LyQ~PpL|j6*MWl(8pv~ankFjg#J6|P*2tmNAXbJn@Y=E}u6 z7osX8L{4@ojG*N5;-2n#1Rj%afGk9`SmJRda+*ojCN@j@vu~n`8W(+BGv4&CWPR#g zIhm{vDD(2Q5>gUkUp(0nY3u4>gLEGK`B(jyoS^$nBu~z_@knwC7rqU-`6ggrPYqJ} zDtlxq=Puc>dcp|Lr(Y<|Dl6w{*mk&g>}a2{20pJ7#X@od3}Zf!&wX45j zS&P!k$sMry0+PD^#}+zqRpq1?c8L~iQZJnC@ETep&w0(ZMzXYsNjO=IG;4uclGAr$ z=P#kp&gdj8*Nn@ewlb#_bCLAIQ1S-BYNHrnH|cKRY4Pi5GEU~0=f;6Usi z2@b$NUSN-eSWYf3<|ycSX{V_~HyN@;&`JzM<=3*cF(?^*|4T{kem<{LR9PN90!MKj zkZDalN*}#_#0C9kyx0gqoUJZp=GVnX@_0RPFSPVO-Dis+;y58@ihc&q{0-6BcGkm7 zM)nliP4qSroMW1^Ra^e!G%<@8+UoE6Fw@^+P)t8bS}+9>DYbE}3L^Ek;9S^4cUxj% zQ0hGHcIl(LRgD1aJYj{Xaod5?Rzq~e>-P`WMHLeEvGpNMMSV(fKAT#v1lvPIc+9v98E+{Jv5_Hu4$_>7{%=0kF* z`E)x9Tw_QT{Q>n2Upyjh7@BlZTY1f9;fmvII#ot8$iZQl!4d2&^&1Ml%E=6m*JAMG z?-+l_1aH4--Y{WL7uMl2W7g0dQ6CxConW!zkz&odJuDRQCx7H& z3|{i(8rq5>o6q40@6|OQ7Q4fdqb`{9T?%33(S+7a37FJd-L{5%_Zf8x&TlKN%yv#-M_aiLto z<6bL4o->-dUr?}4lf(;jt08jkkKB(alGngH-sv8>C3-KZd&>+9zcvts8r7^o_4Vto zENbR&q=mn)Z-3*mVe{CRg0ruXFO`!q>GSh`ra)!*1Btb@orZ(EZFb%EX&7?M=&9(O zrY36+d3T0Ub}5A04~%|#yGOi_+#c6#K$Q|9`D3t7#?;Wd@*WlyK|TF?von+u0j0Rw z3#Esz#;jtrsGWhrUH)XXyD+LNx;O0oi zJCaFNL39%mdetU90JkRQwoPZd`?G;O^r8wxv-2Geva&ex|2JGzDOUJrl>VoA9N+q@ z<3^ccLuUEfQE&_{u;}Jd`Kbk@Qzh!mrl-4HO1782RA4^ZbT(bq+}fh&1Ow)dzB}U) zP+(yAJbF$a6F()-``(31kE6`@A4-RcYO3Kt*`@Zh(*(poGSoAWo{?6sBDFH$UW z_iM-~q!v6k1A_h3j9U~2u?>L(4#Ql9B=73L4SID)&Gda8X z-M^fzZ}V72&QoAG{X@Ss?vZ{KchN%0_M3q)_W;&3{c7>8tN6szzZRyv5pBJlidc6%X zENYo?+0dLz8IwB^xRzaf+_}yRuh`Iz60@_9LGKXCjjE~^?MjVg#Y=?u%ofcUAF*yV zf}K*1wWF8WJGgcR;MYg&Tyn*hrRaJfuK#bO^LRR3l$#j`9{B!`DR5B%*xcYLuKZ_< zPR?YjVG{T3@ZaytuKnXbgY*oDg$Mn=`FNwPjo%J3{C@04ML@>}gO@qO|AS|+>jEg? z`8=C@H?OB9nxhnCy_liv`=BX!(DHW#5U?QC05StP|A74e-N(8k92r^#9peMy1-=Z4 zXG+$060F!F@Y6aC?Ofh#6NLM-3133~f|ug_kJ~cPRCtqKKSnyLJ)*LiE8+0@dU2kE zvU&q;qea4jr0q(9a8s!*=&+#19yL3d6~VigIkL0h z?!lM%)b(0AUi?J0#~M+hofhM1In4i*sJiKn@Ky?T1u<;*l+>!nX^-~g3{1Bh@8+TK zFX>k4!+U+}u1u^+ct2X(kpSUcKSacWseBm}0Yc+%J4`de>N`$lhLv?xg!FY!R~ef; z^fPl$^|wG^(iHTiMwEiB5tN&n#=GGijzMnL?&Hg?8QcB{?>FnzFl0wI+mu89G@G&P zqcyUGYFdyh$=6tC$QdsoBDLgC$yrmM(H_`!K=|LJhbZ(SGDkryJiq=^hhgU8$aG&m z#7l>CzthJ|b^j#s%{r8*xnqK8HKfxnw;|T#pOSj*woeX*iHzzP;s&7*|zCcDyqt z5T+B137TmV#7U?~2%hq3#@pQqC@L?|I`?p;YI_h;yEx zY|=&0y#DEj)e%uolfYj$x+slR%kSvRC_bsRTdH9F z0ZUB6r~aPny=nU=)DtnDTve7L=1^d|XLVncJH=aaKbj%!c~2&{TNG%>6a;M$V_-VjzBz)-f`J0yQ0Lc;+^DN_cDBE=eh->XG(Tkc_cy;rnS$C^YG6I^_=RBLsrT<)`Z5D&*fplx# z3^Ckr3*}!wsU(`WZ*3d1$f@Zle_>2rbG|42iHXeEHS@unmc1bMH6Li3 zS;C$6{+`Wre>Cz&vlPYXvb1(xtGT>*K^0UdnsYv_P?Y}tz3Sy;< z269dD@8xqZe^|*FcuEaOd_N~}AOg7K0ZYhy4w#Kr;1Ma1z_}o){}m;+lmar*Eb^uQ z6+%T-+%`zcz8XlEvtrF2P5%_sQ{99IBp+OxRY<~lid!wa!ikWPpom-;hD5{6N z;4RkC-O$8#RqiW9;MHuwnKoXK9J}j=AlL2ShiUI{jYL#22}A%VDa}!n5$2qx)eDDB z@l!WM~m4?gG8*T;YnC}F{by-x3K`v zS77}CuzrAmiNHdSs7noZP%jQ1A(+!EQz{4P^&ZLuMJFtd_WugYN>n)ta?O0h@F!pm zIJVx7OAdSECvim(R~ZIi>f`(4D$PnLLiN&9JARr2hs3Kgku*<5x2!`fMOVoA5EB^q z*~kw~slV+QHt=x4oPjtH2tk(M@qBwp$WmtP_MVJTjJZO2XfyHYLxq#m7z$v0gB{|fAsI%HF= z_+s9Hh(dXMDnCTAvSp+eh39(-l>v_M62-55WSDx>HYl`rVl~}mOSS}^oX%m9J(?xf z_o2vB2Cr*m*v3nfmGMk`q#^Yq|F|HqCTD%a`(D~v%12|!lm#RrXbMDxG^$WjYeVh8 zn569D_6KPMYg4oW)Lhr6ez1nYRM)S!{~yiVX!#eN&@FKP^^ z-7$0LunTuMzhrE3`{M$#FjW>CK0li=S$J4D;WPJOWg}^O$1w<5B#>}i3%T$eTaV}2$2v%zYvw;lhH*8AP2YW4{@%P|2fJ8z#W5v2C49_}a5o0? zOiOZqJ1@BopM7N^e2eGJdWBlW34V9uG#A?PXeKRb`E)eKD`#`t@=t-a4bYqCY_Y^X zOr{TeD$wy^xF<@gdDg%u^gxae%1o^(gnv2C+_L@ge=H&O6!J$b_SX~K$NYl>ay8Wa z!5VYzG8DvyV*P8(!_B`B*O)pKuw0FHC7c6sRLISd1@GW=kNs+hZ~57>`c-BIiN4^o zjG6!r8XTOyiw1>p|5JbEkY2cj-fiupDz(x|W4t@JKt=&Pv(NuAC^LwGo@?04CbFIa zlX4)9JO|SzoID3S0l?1xx+jQ|C{IC)8{iUOuyf`9OtookMD7u6Mf#)VCSFv z|J<}`(@rBp-3yyGZROgui7O4Z4Se&BWYN88)9p=0x@XJ-hvr6iq}scLP+5=<4T&xp(%Rzw?(auk}6Ho|7jooWOq3wjV%< zygIZu;IF~iWUrC;);6Qq%3DMWidEehL$)UWm|1q3ablV?Zw}RuRnk%9mX)onL8&38 zFdH_W>u&~2`Tzg@{}TBBSOSjM6hgakbUWYW*HWx6J5sX0f6?JppCv>JhkhpVYD|Ch zreYfZ7L`zP?PLcjy02t9EW9S$PVrGM4`55!>y1GaYNS<%y-KfgcjSQ8rrso&)OzMg#brbv! z`OtzCR#R&y?zhy>Fyv3I@4(E}5aZRQOxSc7J{DVDYaKvtDPW3(zSVgh73J}lu-EE4 z!5e>7f1M**EKSL;4i3DoWBYy(DaR{5D_@!|p{9SURUEUFg9e^+%WijxEJeQOg;^#@#=b{VbD-p&XL6;aX#~?70d!X&p2ykSjnNhz&ecTR)`HH8;D%i({*lK`cA~#@Ex-c z{_eC9FgIWqrshwy(>nVnaB7=QYn74ye(xr48{A4%itIJYZzx*GI>U~RYVAtC<6gpS z#I7L6gSsEgOs^UdiG9j;Y4bJ*pqVSfLj*-u(+5#g>~E-?s?{oQ{8Sz~Dml^&4j1w; zI+Hkw)u4;2t9@V(PanU^_IRu<4!!nKN{#o__eWJ-*-G@BoVsboM)p{kh$2|#%MR)4 z*?2i-{>?g*)fBrA4;aS8fT8Gye#q55eYi>E`}pCM&eWQg_>}tZsbP55f*Jay06ak~ z&Di1fR4v~+VOdBCUqz6s)99fctQsI{K=a*t-L1(K#*;^IVLq)+@)DcCOqc&?iY3;Q zHy#|UqioEt)iNC|U03_JgQpcPq}6UL?G1DNP&A0IS<6$`I1v-oT6$2ie(tbau>11# zC-@!jxwDay(9pNx%_u?HhTz4=ukfdqlnVtm!{G_=1kA?zF|ARiDpL~&t!0pQDKNF4 z^Zb{tks3_*M#lR{8OD5sS#Z19fv{1bSV=v6Sl^)!R4Qk)`CFgGa6nB(YgvuwlfzIZ;uD=e(FeDs~1Y(j#$?8*arNl1o)>gSFrdJLsK#9=GOLnJmqf`uCCRE6=1F=EdS*5&^nV zrw7Lv7VL;=M2ubv|{B$YKlC_$Y{x4dlsqkDtB9rcn`hka?J=%XJ{&ZEVQpG zdtT^Tssecac2;*bu<)cUeD;g(yUs_QhQHT-v9Z*S+8`v^IaE0u$h{5O@$Ia(%o+?{ z9L2StS4Q_K41Q!wO0Ja5Ipr^rbv@5$kVZI0E@iTK13e42Xszbr7avJZ!34y(Ty7Ws zA^IKYa(4-qgn4rsJh*A@{8U#KGe^oebCm))s4eLp6)@Yt?`%6thk(#=RoB4;T&QG! zkcq|3HD&$rya)n7V-GBy9GCV zrf!80cUD;((4t+Ar@W{N=nq<@kVf;aI=4r8ION4uPd3y0ZpM!^XsmToH_#)iqoE&Z zcERaWoLz?JU8P%Lg6TaK#GpgF5$BzwVj7*t*0=UK8OYB6piN@cs)jh(exc@%V&SMo9bcq znjdjKs?ntU%H-lfwrWW4B(*?qG+%V1-xZ5wFDv!ki{4$hBv&0cj444fSk_!q4v5kX zR96_Ic>{U&2R|f%E$=(hlpIvuSM2de`TP*NPYpMs8ngbAk}W_c47Ge*PcN$PJ7P=ZB_~Xx5vU9IJCz ze5Hq?Fzn2lTWY-;hb7C)Q0f;1xA>AZ;ji2wja5rv6s*l{Twv26wJD4K&w&hwL zXD#w-t_#PR-W@xRY*99NDso409kagE6ut_AZU5iJRwpEIEW~8b5_V8s;cH1z5;1*P zuVa$Fo?#z4gB-|!bx>44qyfW5Zg)b%P17}UvolInTgKH(@GiT*T#ox@&#W6+%@5e{ z0nRjx=x6uAy#$(ez{@{Jb;&bQl=Zg*W_%aW4M*MabicxYb~oi+a$C=&qc*#~^topn z@g;dIeC8Fg))P(Eo7i)vicbU#$TMnjRA+NT&+5%(u^AZqrtgr1V<68XH=!Z>JTvT zsj?#MrMnJmOgGQU(8QWesmfq5wD1{xc*#MhRLhNjCxV^^jj$sNp& z74wGzh(|C1gpW^b<9d8HVos6IBeY9lG!NEcdnX8|-1)4DCCg<)mX>MLxUcJY;2HBn ztdhp+W?4aKl;L-)(Ywtu0sN7-iS&wI4uG^;zZPcu+LzIF&>H=@2kq5RZqNK+{ib3s z?{zzi2)b)rlP5e}`b45Cmr{-+Dq~sKnA)spT&=3BYP9w1vaSTzFyB(PhRYCNZ3#nB z7V^oPY|gcO9(7y48q~U5j7u-V;q@a|v-(%P0oX_wo|T?)GRSi@OSJI5{X2)WEecC8 zS1bGBz3|nKyGbR7Nk0howgj9^9c1r`*kx_+k|dFsnUGYcrso1XW{y)9>d6iU@ggjh z=K{Qt`zlrLNXHS=pWEO1>aB745BL$qbv;M)Xs(p~;=o0%kvUpx(;|Ap_TK1wOIw_g zGN~9I-nNF(vJu>3)ZJ*<+JE$In;ku@A-i0GDUIBW5=NAgWz?p(lICme1+TY3yO}=r zP0BQV+1q773XbBA;qiuFMvosx;zZ8uJ1!VbJi4Q|klGs`=B`weTElMtIOflcUnbPw zOSqrw=4iBH+3zhPk0_HCbLsV1|Lm~t3e^HZMS74&9($;!REqaWRRi0*p(etTFxMJ=mPZwq+O@!T!rY(<&@ddr_+!-@sl z`1)T6j&I&BV$NsK_2{dBOf-+F8100=O;{tqBk zslh}pyN?A78?ZfZ8MJJCegmDu$K>eUQaK?23a#gEKLU-x^x0P4nu9x~@}{dQzazE`$%$_ai*EU`Z~BX5k(1L)rUf z6^_y1&V0i@m{XH*`+z>er?a+i;h^FntKe3rS0cg5$-H2c+g^DlB-Ta|o?b4Jeh)U% zbt@#ZASp$(u5UQY?@J7N*nMNJUA6?%rH3t=nnPyXzNmcJIW~wWN?Q8{fyoCyM|mq& zPVQjUY?l<{s?vf7RUreLZ^tw)3!lhLhmB-&QV8>?u;n&tfIOiaDNA?*rz6*OvoM~-=pO}6B7LbLW|aB142K8b8=WKoGoE$IZ(xyKDuTB4DXS&)TU;Y z{LKzS$fBvKn%1GZ856W3q6Sfdd8CD)#t3>ribst?2-$|na*3GY?D8)qw@&s);LuNU zodbrXvw&VTt29~}U7FM?9%Cj{AianJ;d~l3&qNTx%^wO2Fgexb4!VwJEgK(oL|?|& z{5V%dul4M2Q=J^Cyp>s$!Kzd@wI}sdu*O?R!<6H`yfr5eGz3yg;o-+DxDb1;nFZYjnzFnPtTS4|N+i)$j^G0q@nnMw9 zUahOLDq9}6UeEg8lRHZA4aK6H2`WkGmTdI0Bw5q*!{;0G#f2(N<|H!b_2T=Cq6`;! znyS53^3t`297U27rK0mAxzGzAT>h>8t6#q5b~&qokS>Bn=J}1_$xiRVITpD>7^}iK zl^Am)!+(z8P z(M0T}_FNT*7i7B?x-fXHQ}nE>_NtGeY~|sh(cU=`9tf zI#g?=HeS^FHHR@>3=CRQ-ULFDmB~Dgiq8o;pUCcrFzDwy3*Yyt?=i;c-GyY6%o8`0 z#=PJc;gNb#lfqJF8RmA&3zsVD&rxexg7Po*?8;N@3SkepJIYeBP&aV)m9a3Hw}qFu z^}Qy^%Q3M&vHXOxGJAB#WIbYHh*s~uCtMYu$#hY%H5aXG#mmG#jfI&YlrxBuM8sR! zmNbGfh>`xnTc@W<|W{gIHAX z-g+in@YUYemb#AU`3j5NPKA-FGBYi9@tSwevl_icJ%vh(-0lY7dRJ`I6h$>ZlW;&D zSH?z?i9;AhJ+;83}v} zYQzFQP*Qf2a(=r1+v8`1gy+RnRUCEE8mto4=I5EU+s8cP&-O{{6#5{Vm3}=Sb2-n$ zP9C|l+#W5E>@ri6iW=(4jJT`EU1C**&JVUwBHBmH>A!g5^mgV|ic<~zhE&#C*@EA2 zbmQ_nLPa+^&0FEZ@#b4h1Q#JV6c^ptaV+&&o8I{;TX7MaixE3^ha<^zOQcm?iF@F~ ze|9_QH?o?ewfwFMDbW@M4^LB()6o}?I_q5*l?Qv(`n)JfB(xKCqic|OaVWa6C#lr# z@Hm3K&6>N?2AlQN9cfC*44J>sg>1QoGk_Dt&@+C%B3oF27gl+0jPkr`5=&Wr7LWLOp znLq)m*nR$68P%{k^Wx0=>`7^lMAqYtXL{V}Qc$vXns2Uh_+3@z&Hf<#kJ}RBxi@^u zqjYs`Uuh2)iDdp+SFA0ETF;HNs+%nr(jUnrl}O{;Gw%($QT*jk%`)y#5JSCdqCLBn0rOhY`lTF!8)?U4bgJqNuzEZ=$EQ<=bR;? z8WribLJJ2rU*>jtaZ$nv&3%%bd`u@w$=kkABleI-R~7LnzFjyFeyRArOr-&LWmg-K zgizp8z~{R;E?K`wv5N_Oq3yFottv*8+79NQ1rRTJw*nz!Qb{+Rqkp(k)~y18QkvS!^q7SU!9`7Suj{TVK#or`ZT0OFz4Af zGo<->r*qCW`4yx^d?{m`ro70n&z{f;^(Me)576wa)x9P_KddN>!3= zq(_pwz~Dd;fBj+j<)gdE)S(i(B)l5cBM^=&?k#y5wd`Gjo9q$|V974@azR4WKXg@1 zEi_BaQ6$b;V$Tkvlc6&!)+hDUlvDC+y_4P8jsC-WS8^k5yHs|`HM_;O9&20aoUOvrMFE#=E>QX`9z{`egEWq*Xz-ni98t7 z_?9RFtO@q9AJuW(I{sqGP0G#okq4b2FIt>RJR{Dfd=(Qi9aXbE)iOQLno6z7gWv=& ziy94+;EFuE00@J=>A1L!+^rC&@jzqBEUSUpt+B5Sn2!3pR zZzsGz;1JYBG3QC%-1hZwY*eFL(zDlT)Dl=zhv2E%!J2Kum)f5coBf$Tkv^qHeK2-g z_bE^ATtMUB_?fl(%se5^jt=F`Yc6%m*u^m(YD0bwy0^&fnrGX+ks`G*{~({&4sHVt;5=!hP z`P~12@+9%7t}deuU2c%x{e7eKL6NgHKLT<~`(%Ocx_F)?*x?l_^|AIQ!_U>Ha4*OZcPAm=pX z5Qomrlc1_03SZqKE5`ZXTh6!-?Ccs(GCXjymAbdW| z&CnDRo~7U4PQ}~(lV)ji{LLXQm(|$Q2?=9Y&-XcsaY1|I4_A~Z4{Spq&VvN-*C++s zc86EGm94c{T=+$UGNh01SBgN`?4q~`MeK#yfPf*f-{ia#8B zE9$h+y}|FT=>J-D%zb{a=w09go&O;)oPdzi|7`z0O!&_ldbE0BEH+37vNkVTC6(1W zga+B=0?4<*i$Fg4YsS`oH*lijrre>^&-l#kM2lyOc367QDy8JLD#t42DfZPX>$5K8 z%pvc^#m`D+C2}~nc3IqSDgJ%K$HBKdW#diqZ6bT{$(Ex4yY^G#QC&5zVd~{72>5E< z|8B7v3556Z^6zaXf^DvyIn32-Lwzc~_YxUTn=?tqv+`7kge7lOP`?exVisza%2-0j z9Bey5R-{Sax`S*fSY%bxHi8B@pgRt0@hX{C7FszR_T$dlWwPDk?CikB_%UPdv6b@bJVsbTbsZ*W%x4f~vGN*$8|a)MS)Evd>Pgh#PQgB6X?;q_N{%INcBecxQe1`p z#LaIvmcgk5ElIrr4=6y6T(f}P8RU#+$E0H*4kq$@~^H4UbjGR ztvs;bcEVP|-b#KWPsOh8DjBVpm^_*A2%bKpJb<=W^)CsayiO+`X=x`tr`7i`j}y*5 zdn_!)j9GPGQS9ipI(cQVoz>$h#3AlrJ2`wGPp0324156)}xH$4dNCZ(N9=R01kS(?jZj_?Jq3?qqs; zHfBDKG%Osh*Hy8S8msFb^VzirBfp4U4<$B-l?|fd-ZMd`3XTh2QMD+i+b7zGC&U() zl`zIop$z1u$2Q$kxIG!fVp~$H)i1vS{NhXt@GIBO@7-Y}{~ED?c&2E60ymF{MvRte z=-eduj6~Jc@0GqZ_0(MwQQA>VJjxXte1o`D)N#Ek_lj69-4S(a?xp759nw1C21xaM z#|S02v4$zevLu(y)+<6~!wYJ~1~R}D?%lIaw=KPfCOoI#mTb7s8Me=-Jm$|-=lZQFsao`uoFX_z6*T<{wl0@lL9A@P!0mO;DRKFpyNa0u zh2L3d?7yOV^NAUFida+HMR}czN<5W3g`JN^T`$>)amA~9zQRQQ^7Ud|kv9;`E)Z}0 zo_wt*uV;{qP9x60=KlpU6lKal7Q(5Y{!%xA9neG)|3V0eh<~d){y%=|^#2|15Dpl+ z@L#a!$X>+1`{Z|R7N%ZlP5mZVFRc?fhz!t&=}3gf^9qg z1#@Zd&+Sc6hra*!-RseZczV*U`k`Z?`6xb+4jSBHLh346AzOl z&DibtqO-!ZUY9Qkfli5oPlD;jStnWU5FDQX>5sA<>73gw7cGZAfJR?918KG$goG)^ z6&~smY?=H}NZp^cIx4x|JEw};VCYG)$YFt#?iMUU1}T*0jcu5Tn_a2XvI+q;fAe@G zO-Ixpw4!|1Seu|1ZpSZM(gMsH?m{WzZ2bUhCAkp7<2*vtbSBFXcsi;1zJ*8p^l#A+j`rPs2_WX>j*wu%?<=YaR5bXHZzB~ z^V#XEX6(u8A9buN*cxVV83i+c%7My(n+P9g@-Hc0`?6dTnTNLv96z&hi)K=_F$J|@ zY`?6l8{x5t^oKftwlYP(FI}(eUS)Pk_lA)yk&qDX!_1X0--Ep~B!ekTR@*t9Lm(fy z%?Emgc`ZXX2;VL^83`n-J&C!6ExNODuxMhN#mIoRjBk zDb=F*nX&-Z+>iX6A7}P}ewU{G&u1P``+Tjx4t#7Mp0fHw6jTq`8;hXg zxbg*b`oMEQ$Ay#MkPvpQ@ALJ#usRCHw=$0_>NGHgsM8SSf9K=4Qhl?I6~8+fH(?Mo z{i6x=!Z70Nf5^Irst2{d5xo`SAotn%mzK-V=usfFqW@>sw-08kQ$gN=OJ*U5^mKKH z$Onm}3np`O>u@31PbIvxbFUcJ@mnoh;z{!hF7m41976ViC(+$?Ue(Hay6jI1P9S9( zNc!{T1n*BPYLtAiFnzh4iprtOAKelQI=W=NgIX%^SqiV0s0Px9xDe;J-8A1R$>l=X z6$ElW-9r)T`6g*<^CW?7a5#LhRz_=S#KAaqfN|aAkDn(9G5{Dn>RIDgPLmXr!}5V1 zqE?HkLK5Sz3dfE6T0*0rZoZP-3KF3QMqjr0MgkZKZ0M=$*B3?(p-ha|dNChpCTgvm z1hvq@^pAs#q!Mgj^BWnET|r8}3pkNO+vXpQ16FtACR%BAQw(Tt!*G-ZQk^irkShOc z_5enKVH=-iEdR~1|K^0aE~BLE(2au!LRNKkb=SnUi@cf0scmqO|Mc!3adX_Y?edA4OhtKhq)M~Q* zc-5{XxGP5elJTDBEpe>ojawsa8&f(`2t*G)XgbW7F7dIY;$YRw-n?k&9BZnb_+;ZBVK&pT%&Yq zY2-b#AIarC5cq_01~NRJeM%o5lI8{DwO9}MvVi}M0pXJO$R6x%Jm^9|Tp*N!u zM>OB97EmY>=zI6qi{xyd_H&`LTfj;ceL$VodcR-GHGj?lpb4O)GNHy(_Cl~2ijwuXdoSx1k z6UTh>`7(eod0RzstkD_x>R+<_{NWJQF#U6(>X}H_ZiWNs5jFZb>Z1&5EuC815GvZw zwHfm7;K@kSp4fiK!}07;1O1(NsF^f)04TBlX^5F4QPCUA>0qGcmAM9!F z<^Fn>l^>(Vj*oKnM$<_F#p`GD@x%WAc-(8w!1h`#B4PJVrt^oRxz#K|Z9nQX=WG7( z+b7d`0xzuI9)UswAZYfdfz#0D);?e&u!93a#JHX%NQ3Wm554&WQ8+%%hjG_N)$hUX z>E}g7fe`&se>Z4SxmCh3%#W?WRf4k}x~90A_}hp5$JZVIb+Z3CwggvJ;T173(FxGV z2?#Z?UY-W%yvjrVkKG-Br2Z6I*srxB|9Ab6su~1>G=T$?INJrN)boTGSM+Ie!HrVz z$3tVVSg^r|l6MvUBfkCqx>*CFs>=KToJxR9@i6cRp1kUE8PJa^T1X*Y$kbZH_%K6$%ghl%0Uk2ryL*M>=dgI6^2r2mcW*mfTN$QdJ)gEXEK=`O?&4-w{kIzVZ%Ye^J*#X9WSV%7IS+0z z^LklQ&yXD*9t|c{^hL;zSyPW~fOH@7vwmZTu_eTA{&9$CF5A#)Jq#Vl$@ErJfpBc#=uE|FCTM<`wqI$A$5+``4&VDxQF@FZ z&Qrb~@zAmlZ&2Ntio{Wx0*oshzpPtdo}}??_3|RB8I0r1My%uswS%EuW95{bcq@Nr zmN&QKMQ#zluU}}#A*u_abL>xgH)UFDCqHXZCCYT)?7Gajf;e9b)jJ?O4$jBfEvhj} z6xZi$u&%=K_K>PFlUwUyZ*~x~Nw~T7s%$%X_p^A!2x8%^S>w8}QQw?cD$BWUd4yub zoy=HIZ>gV)h`ligib?v5$`~pAWf#U)cZ>b|WjHwepCf>d;o9@I?;QYj&ja#G-y{7J8~}bPrm5%sO&ia_}V6LyAl3MF8k+C=`!Vzg0dD zaeBqDV9*|M(u!IVx$(l@zRSg3Z@hreT}-m+x_-pD=dr1FJmge>*>JoxXXfaFrr{jJ zH;O#fQMJqcHlU-lLcrr}4Lx`|#^i+^n$Oj~!4<(+w4S1Yg8z(DDlx{|g-OCpDg$R`4k5wQ;uoVD zLkTwxkX5D*#IV(?DW7)|S{t+bqb2HTwdDoa;6+bvQOFOy`2?nDgw&p1cf{yN+%i{3 zeP}|Mi%274tN6r)kKZ8P(767|orAbsX|9V0PYpw~rMJziRFG0aY1!t7#^9)x1IAX< z)mYM8OV<5uwZDcAws(FhutVC256`pJG{*5*^F8rR1{EFKQ?(CTC7*pee-xfyYRG-H z5M~_z)_lX{$(R0lMKdvwFLIdb{b}0VUVc3~^1cgc-t3z>RWsLFc`z9!>(fOlNe-Sm zZxeZdJb-Kau!#27c}!54TDM7NO<;+hl|`d9&bYCz0QZu^Klcb0axJ>?!n(NLiS)0s zyW|Pt+_3}4F5SJzFL8mIhZ!p$)CiN_*K@INT!7N5mgc5#U#kqe%r8vy$o&d66&|?| zq2j&zwOIG*EjN&r{S!i3&%?vN)$Pv`^0f)wSdLKXdsq*;DMtL9`aT`6wK1Qpc$Fk| zOGQ$NXLY8fWcKE@?}F62H$&d+q6L~|rvEj+fhMLoHt7AQjHt$nl=>GKyy_TbV_Yx8 zuraaB&b=%o4)Z0bg*fasT7xkyY+#V7FT28M$47?&{h_eeykf3gEss#Z?IAR*IMf43cIocVNO4{uTuL^?Ube8E>K(+Q_U)`!GSjNZSWSFB zZZK!Lv7W$JRFr$^#btD32(^&dkCh$q_78}!&VxPRiPeZ*k2N%2L|vTT^C>xGoxa_I zi2F8%TU$mC>IC3x_PW767$M)bI}opS*F-gD+Kib^j1e_4ddisoiM7>)m<0DhvwL>; zY-c(Jty1Za=!xKy%nF{vmkiCVD;hYhBvF!Cu60o#gsG3Vko)eGFQ;};T`~~ngqjn2 zj_`Q+ogk`}6g8JI<{MW`fMPL-vOOCR|FA{U7}4AF99tuUTtR$Qta310+A&4zkWVeb z`S}H$Nl1hmpOT#3cZRsJV0a!K)2(0E!n8FpMXm4V>dZyGvdk0^WtWUyMd#!6{`Kw= zw}C`Q&dOK3-$DMIc&w~Q`k7ZS`B<%k_u01+T*Zd97Vv$~QdlaHom1pF{3Y(ZNITT@ zP4q`QW@QRJ=$enNRsZ#vx5DBrH+bm}qh!c}n^Qck3x(aX5L&}o4uf)KuY=YzQK4~- z9sv#1I$u3mA%f4BqNK6VPCtZwulr5+sq+v$1jUo_;{El{lSJ+SB9fqlbwvMhGV)N8 zyYBc3L}C4M_AjFv5kC+ah~`BUdU8+O6M;YWgs0^6_R8KVPHQdhxmqmEm7!f+QRV}< z#65OFS}r*uz#G~TZIiFQu}_gXMot+EfN`M;{3@eSB_Zq3p~)%og%|J`iV)) zyfW11_4)m8k4~-8w>jmMg)y)1sW{|J1*bd4s-buPZipPDaRrviF$46abRJDvCaNY-^s#Op-J8#L&f zdztKU{TYd(Jum<@tvz$7{}Nl}ZwZq#I-V%7e(j(|QA(Bwz{&ul>gPRBfbSc$j0t$m zpe$0QTSPAle!A9WA}H-Qct78xGQK0sQrGGtx9e#Cvl^qRg#$dGap8^MwC_v}XiOSD z%B5snJBn$qziXAPx)rlKeCDszv4=sjWTMS`r+*f~!@eS>E`9)i3xm`e2PLB+vF7mT z(-0c~VK$HtxU70l*rsile_LSQ>e+QSg+W2AAj+)C1b3pi!hK~$k5g}pTN@D_m3pAD zVur#8Po*a>#qxMsFgs7?MzsT)wPW+;sWUQEbw&BN70ab_Cfu&A{$0mViYw-a)1W9h zbPWKv8h!4CWs#S^L7xr??VjSfh|-wWc4{%RW3jcUBPWHiapAHAC3naNHQt z3F0px3?sC&*DFDZpH3dcJ>Q2AMf6YnD?aOd@!chgLcjm6qZj0K!o?dD?^WW!T)+tBN!yPjPcVMt4RvXVFO9KiA?c@jnRGIWV>{yxl;v zv`kLp0(!qBV0*K@f;>yJsE$U?*CV#7kli>G?VC>^aX*+~F4Q%0$7o7Of-AQQ)M{Fx zs`o<4$ zn6G=L@FADO(W9-k>!JPkkJVPm6VQY+1~Nl))q*8ReEMRe+2!%3i{=9s{)XogyrBoM#{^5>6jK3e-rn`jxdZoXw4=T?>g-T*G zJ#}_o1qUeADqqn%`fa=9lfbkN4XFi}(g&r6^PT{0B0NQ}; zG^+6nf(u*AT11ap)-No}me`=T?g|I(6Ht-{p(lo#AeO)E)DLu>F22LGHQq_N=^R57q3uDZ9eOrG6vR|9KO%ieEBz+2?i7rtSoJkz&HF zKTp)p-5aUoBRl$iQl34e+8yH-YR>D zQ)~Qx6X)Gipod2?0Kzj6Mw9&Sl|a-dhwne3$dNyEdk50RpRDVtw@_W_Cjj_AW`!su z4mbQP!3e0Db0UBEf)XSZ!0tL(6xo{oBHtexBR;A@#VJT50rvu$t%I5z+?QyWaQg4pOtaOB(X{p*(2eCgFyU~7&jlj#`{UlQuyVW>XQ?P~A<*RC zrFI-lii>;QC->X{(mu1*j{wtKxPfoJf#E|8jItG#Q7iO+}(nNAW-e76}h$|@<>;B z^4WD;q7I6k1+E=HbsQsZ-oO1M{Y^m!F3Q-zfEDln=D~(0o}I}&@yaYG9Na!B+88!N zyr*UH^EOS>W(MB5apc1)&EkNj;sR+pKCFV+2C@GAv_!jEL8~Ma{vS16@G|Iug?+C zr@YU8he%-8<378>&9wY4`H>%DUoBOIF|tL7Oh$m$g1!9kV-nRNtZ8rjkLWtNBBG}p z6XcTEln{^_%-*aM4W7r*)Et;|dypkb#4^+VgD>5Cha18ciImE~INhgA9-z38#zE5K z)OI-Tx-l!;u;{Puy}_%`iCF{R(C|k#cPcAsP6i0PzD?= z^>BmQckGU9l5}*$lJah?)xiN*#ijeyFRIZW;j@t4i?*fCDaDO|R;JZ1%g=Z+DZBF6 zTWkfH;9F>A6? z$D(1E;ivV?X9NaPi+q{cnR96)lbC@}pdQxtW7m%sev3nUVV6XKaP@Q#o#q5eHA_yL z41c(Yb97@Cf@{eeO|Cc~k~s;I*)d5Lq@GJ_XFY{PBZS_55O(F`_9(<5={qSe|oyHB*briSF~8 zQ$;XVD^JWCJWqq^aei5_#;CgGTOA+Ciri{cTGnb&}`)VW)3cQG)p>T0rq_HS*1 zN^e<|^BthAb%aBUO9Bn&wS-^Ry^IRz`hl zbJ*sHQl96YynJ1c#(N5jrQoYLti6rA_n+?oPY_&=IAkS{{Elcvd{2)S_SkceWhEnl z+)YpzSCs$4*RV2HYw4&;<)N6!f9QAb6@(9XdFdfOhD7{?Oylj~+U&2&0~C|2BVjVW zSXGTv$QjV?)P)9pB>4_gY{H{)#mrMWp&68V3~h$Cf}8vh&~QZw+?oW9Mrl>@_l?k) zoXLS8GkEB$+nJN{nln!qa>P$B4S|Hnzbp}UD+k&YR?`gG>iTV(v17;4R0HC z6Sktq5lY9`M}}*Q`)-$qPFT9{8SkmXj`9z=`jLv3K8|`X*zY}_I(B~^z5XPma<9aU zwDh$^l>47}1Pqm#w+s@zlh{8vVfy#s{Zn>;EVT?#D$u#F@5qbShvBKZi+bDg+(@04 z_!~(?ME4MFm&erZ0K00dFAsg?5^f1*2Ly-AEuZS(AA`LWF0`7gu6q3SQ0Lhuqp7VP zdxDYCjj*2j7IP$f$PIhwU+<%H1hhd*{Wn-Cm8SO`llxliw~q>}2|Yha>;GHSrK@qO zl;q#`8Zn8ORg|fg-cmmQGMT~MODV9{-@G?wB^9;XbSQD>W1H?tZe&@HV16sLj4crK8W+g3_|oAZf?5+#ycnO2L;b` zq|NN~E|9DH{&-dyd#V;qpoC$ER-1^Iv^Kgr?`og*oY}wpxPHSnGGDYVW<>laJ7t)q zOtDB(zk32ItjsnZ-eI@npT+8zz%sSG>1s$E8;bWDmx)|h85>O7xmg#!u(?FdwlW>w zOiL^&eXv~88?i6IqVm>G^x3hnF$3rEa)}P>_*X}R({mCGUv=1mm4XWr%KY*g0yomdwI7eyvZ0<62<+%^ESyZ6Ek{40+6iK4IFRaK5B-=;4x4mI}RsKDw3wKpVag-9oD}rw1?GMDRo1Il`Z6R?}6? zK_b{+0sYMl0HKOJi&b9G9A{l?#|&g;kox^suNi^D0B)-JruVSksPySb!wu{Xm5u7!6;F9AS$OWcXqwsg$KUuy zJjUKGpMV1QwWP^Gvt*TSin!=yP>{kvt`MEkFA}AS2Ny~j?ETxtMu%NOn>W~vvuKCO z;8>WkcZ+ROQ3}n>dad3hLc@(Dv@Of8JY)=IMpePOux#mj@(&J$te2U@rHOs83Wd1# zoNCJ3$~%kir4D{(RUw%V#0wz|))}{CfK`7TD(^B1_}5$X2lZjBtu%JIMhj+oL1lNi zjp2eQ7Sn4}Shuhd98dWr)~Sufrd5^K?M(QsB$dr#YP#p zB=EbU%1ec=Zudc*M&Q0O`rR7>xH#SmiXYt#{=-P{(@hjw84J4JCK}ayF3%7zV-}xw z{NTZgj}lzWfNMU^7X~$bW$x=#POT$~%2<|~jLHR<1P7~=p(6teUp}<$5zMmY(}{EJ zpe6+9HR$F=&);fmfO-4O>kJkjVJ8RCJD&JXK|huX3gA!DkHV$+3a}tR^nh zd$1&ECn^(M(lpSR8gj|-jT0)%qVKXw^-E-f%t2VsaX|%Kbd!P)^s)+;H_aJwXVZpM zDo0DC=?L+1FSaZlFF~IkbzAtW6Z|Ac#_|c^TOLaOedD`f8^aq}r*?HR)@}z1ilf(@ zy}T8cZNpN`lET~2%!F0W1^|=^c~~p?8RYfKqi(Iz&Z4X#wfID4-*?yj z=l*rG)~q<;eNWkEpL3qQ_jC3cAXuY07n+6NGQCFqpI>lBib*kp%gJsBF;?eC+dqHI z4M{95NR*ey6+DJ|Mqr6gG+PF`06|%{f0&ojm{9 zuudD2_Q=@k??Lr@ zBS5%Lqt|(2c3T0Imy#dy6tR$CwLq)jcr!6;O4m_)d1t;;)nZJ|DcQn^;Igd;l0DBK zxtH@!oaSmQ^F4FI2=uLYQMjTfFLaa`*foJ7@E{h|4VTv4Ui&V#VutU}2%Tr`rB~L4 z5}2tqD2W$)FV@jR#!YP9Tqc~URc&|FYa4r?-pd39?bV*? z!pbuuJL+3e&o3ob$jjI7$Ffl#{(bJ2X~HSVE2z3)RsbV?)R&K^H|$sk{f^R&{gQU3 z?Xcx1>AZhrP;d2~f^bDYUi;Ddti4Q#zqx>B1P+A$1q>G*|NCRXgU^db zD6_3w$({uAfhX|q$`|u_eH`Lg^y_t=EK;i$G5g7?5!fQ%#^DP`h350ca0 zhK4Wep5&@1h;u$$K|Cw#%UXEWOJ9v~c6;cM)aR7CYUJ7dA-vQrlPV9;C8QW5>z0jJ zRs1=;c!A=y7dWY_QnB^->atoo{jbPuy`!AV7-hJ12;f}%0?i0*vhnb!e6ge^L7A80 z_WVw-o(VmOdojr(2XxjaT1(dw+Cjnx_f-GQ5Szc}ZX7?Zm(mXM(N%W|N3shBadM68 zpRL%s?`HhNLwBjFmlHd?eexxrU54G4%qi5f;)fejx9o-;WMkyANYJI4fWy)cbl!_! z%*MRwyEC4Xk2*&a=>xdZ*o6}Kd`t4y+vn~5L>q!SMKhxSXNdsrbAJ9D;Yg5L?zexg z&eR)i5W8jq4{iHoKwBVhXV0#hAMkVeGY_3%wGiFgL@~pgUkZy(A6H{ zNHZDVf!B9i``^FOhFHhPZE3!E?AhLzYVyV8pOxBzv+!+`oKhXjYJ zWP4ohe%Vr%ycN$5R%@fVy;;ep5B_n>nN1CW)V3iCdN#c{BjL?k-$PpR;$Oc4`DZxZ zUH>2DJ%F)nE`Wh&;13YR^8d6^Oaqb@w>y>>f1bIy;4y~t8PL^iXriU7iS7G|?DDO? zgrHvZ>B;Q*PBWRmz;w=LMHNkhuC{7FZ9eMPwVoP- zF*cK`BlADnFZjnNWTJrY_R@IoClA1N4}4Uvac=R(v-WdF|MXT4J6!RpSiP!tnGAJD z=zrUXTp}Gxd(ZBjrbxUB(tUinFgnBz8pF~ji_2T9`550^KsA33s29&a@asV0nJ^Gw zgt%s?4jC<$a=kU80=*Xl2*;n-;;1^)Hk9`v{l#azTY%BODqcoQ*pq14zI%4`>|a+; z)yd#8g@ZK(uf>tm?lyn`vt#yI!CvpHU+TsG2yJA0X~SiI-FitjQAhIiGcio9F{JQ_ z*RsKQPH#ntn5?ea@tZ3xGw_( zOyf3JLn6n~SR~~4q4IkE$bTmkX#hPqd@PBmm`GeJ31 zSrml=m}Q1i<5)94eeW#s3Z$;6;Wo{u&9%-t0$%3cTo69JJ;=U7O8PBW-lf58App-q zm_EQaYQ)dOyrurL4XD6q%03>Re5?<>{3qX^8S{MrjorjJXT*ak3^sjmGMD&19H-1Q ztKOt>%3q0rzUu#nx(-5xzDou7Z^wJR--&f&vLAu3oeKcmgBa2Owo|@AnUNA8nKULD zYxI>%YDr~Na@hsFJX3-K0=>dOA;xQ%u5X~ZfG&981izLA&S`v>;)=}AlgcB1^40U# z1!;T^*m?iU!fBt+_-W&#BlSm5GT}ogwDAJdOap;kW=IG83plbT%1h1avZhZzZD5j^ zxOR|w>Ye2Oko05c#~{^XarjdIsnegX@BBFbANB3j(U(GLOo}hRVuU58t*$}%zha*; zUD?b|deu{o_z4|w8Sg;>Tj*aRVv3GmsgAVUEQAq7gD50xbq(`oEZ$%*ZAX`2YFo5$7*5Tm||6emypn8Cv-v z2%MRKRt6ZTOpRhXBK|u?@*ll%W4|sCW@|i6ZrNcUk2%aUe(v0vm%ptG;<==>9tvq}D7fodZTkFy%*S6`9$WA1H8pkj&d2jhRo*%2rt>_h#dPpXR?y&kIo(vt>OuQ^ z{9D~=rq!kfA30`mdjq(2p@4u4-+)M~aTp3i3KI@+avIpX-kX_8iD)DFCl&e~=Yd?- zc=I6YhUKHn1+O05<$UHQ|G0uvCvPVB z34B}Tiyyps9(oG0aMlp~_7`MQ*2c$7=#3JNDxhp#(YAV7fA!nfv zFE%IgmqH@*xWFTc1|A-Swvf4(EsQGg{)3*ko-IFHXUN0E6DFci*4Lu<|E(gq$z|AS zuP42ALuh{jwDRN6`vNHJo<4X`sQd;ew^aWs#hUbUu7)Ew(Z96yMuO)cz;kV z3&n2lE>pA)itM-vnhCo0t3KPmdlh99PH@_DG6YX1-)h-2l2}6_BNXddHJBafDcXi@ zZcLW9(Qf2#(@8z%1KH@hz@F|~SlDj+YkIi@`j&`mU+5ey`?3vc!bc9Vr6nzic^rGBt z!+gdZg-0P5j#Cpj(N9_HwHeB&ox>o1?6kJYR?tcfU8~SaAN4tdC~0-VAuTj`sP^y^ zsfdVg5_wZwH4YZ`dHUhM{yC#^tqYUv(YR~HOU^{Kd7NT)_z`3|M?L&A9=ijh|JPv< z=g-?I+g%R)D8UJd{C<@+1cCGaq>DRz#bKsY1t+~f>lodsv+w7*8wEkSAw=z^P zmg7z#5GO9q0KMFYOw zd#DY1I$;>qwyTizSRL_MfS()W9Hpc9KZ&l35rZ`y_P?X05+B1TMJ2mBh~Fi6f#G}! zzfxH107a^GEla(Ci;brUH^tZ6yf}m{ZrRy$8j%hq9Cf33T1hY`#Mj$?-}?+jri18G zjL%G6zhx>DL6z9ocYFh6e-|@%@-K+i3!XAkaU;8S-E2^|jXGQo+E=8>VjMw0Tap^P z(Vi1qyXwQdd89AhA@;J#rY2!(@U_faJdo}PO$=_~jR>{2Klf@0y17zh@VnfS6iiIk zoV6Q$_LyYA>Ez&dMvtE6RfvU9GGQ0s&F~YZ0|q@UO&v81?)ThkZZ> z;F>mXaDF((<6|Gy-t2GP5bEXkXT&fbU2=>y|Ex~Jn~J?j9E|uejK#9RJp`+3~5rTsURBWOvnVHmcIK;)SDCbT6qZLW`5H2UPG% z^uHajRT%mNu$InWANVK9@)1f*nk$RlR=RNWxPM*P0TkLXGx!+fC>A5no zGabr$I=fL%d2wEVu_EC)#$0;Nd??`EXVm#0b$rhjStT5()u#BZWVW?awZ|^cEJekN zGw7Ix?QBx*xSEnVUQ?oBp?OhM)_g=0UuXX$1Ew!)-n}@ypdj`nAs%ztxEh#t<>Sh5 zS@xsP(}IH)=Tw6dd7f2DQSmnP@&x|jpVUZgen{G_zGjI^(eNrG{~ z?*?+h(?nlXy4-cbiR^FpN?!}90IRjaSAXn)TFp1Z!Y?<@9JTb8HIKfbnBC))*Kvfk zXXPsEPa2RL^!LK)$g-&R57-9Vh{+_44YrRXtcN4P3Kx{$o-A&-@7r6;K2y!q z?`YF>%iTi6N2C+n|6`=+57p1-p@IqdY&bg;^&su)wFDmDF5_^}2Gw5)20^67?`2zO zCHtBVYm1tcnrc@=CE1(?3lx`RVtp4~6&B*Sfcy&-0b>i=8_K z$s2e2uMM$DK%3zVqFNjEs-g#T{?Co%a;RIjZMg0m(B)NnUb98rAVFF6!#Mf4&)7bV z+|X&^J6@*>H{#3)q$O3zG@j(OVCQM#sN+`^Ys5GfXsGe*?VjZC)x2+#hae^=B@s&b zm+On|Z8p;qM1s*0yVc5xKcpE+xPt~PaY1gDJGeUG*6`|~+1ZLf2CkgNIK}iZR76Be z=Xqx3zxh?eqS}8u3JkxCu~x;yMKx^IId4C8AI#ku!XhG&$VD{PjV##~)*_?6e>yH{ zN8pS@^-{vvQ-cjzbLl6&Cw%{Mrm^T4v1yx4IwekR%>#P6e!GiOFhWASx z2$vb>B>(`9u%2F2F4CO}Cf6XnPZoiRB6Le_`J3;4O@z7C@^@B^H^Gp|i_+)f*O~@D zl?ndPG?}&MGs#hG{8bymV>A1p+*Gbi>8w{(JXdH*?Zq*nvh}mC65=&xrX=|Ccls+Y6+5li5;f|9s>~T->NftbaSr}oNVgx7M{PDlQjQ>Nz3+-NKH*m zcz%SQhp!n^0i)XW!9K`r>*2^_PA4a)Z1(G`@+ydVLMaVz4e`*I@hFdo#6)jt_{kdS0jyBf1hgMv3dC=1u^dcdln2nXL*`skpIqD~UMb=$E@ywHr*bPd@==?az0sU~aJo11~Bz zF%3OrLyLnm8az9}&_BfPe$lmXHB?r~KR74 zP{l{1{zZJm_2BO#A{cb)QLD?MQ27+lBCremCuiNs3;uqVh^3!Rh~1c`)mBw1Gn?T-u$sGU?% zjzAZ%fM)%pbzHbbW6r5O*h)+%AO$jANK^usRLN3gUz@mL7_-!<_CX;?#EMvY;%{athnWM~ zd4GiuJIh!Cp@qF)QR$2|^t+fhgE6lk+)erwPcqFxr%55e)YQ-1O!zolXmy6=kvw}O zg)l7!9Z}fHSRrAXUA{mfX(H4h!cQW?h!7~9fpxwfxJ-n#Z7*hH$8pqeOB2ccmz3sra&Y%yscdWP4mB@MeIzI;j2c>3PN)i#vepVP-M4Gr4+Iuec>-qDnx+0^s$eIXN2y1l~nG zo0#oCxuuSmDVIn~LE`qis{_j$DmMH9*IdScBiuiH*a;GV^uOyd2=8-|2;zaY%>uM%H=k-2Zt?*4!*?SpYle17_Jn zLQq{uJPGZOY$*#^yr^yzif@9Mh7trAAGZ5^kt9;`H^YeF?;nfy>953d(+f#_iJ77m zj3#XTHxxE(L^#kmkU${P*58gDV@}H(#bq8hJ#MxrU(hdZc|={f6*=d1lr_J=YOh?| zt;Jrc9@rfB@j1#LA7kcJa}t8{W2RdX4AcC_*466?Uc@L~^)mh6lm?j9Xa)>!z=!`9 zU2l2~Dbt#4E8E#vEGmoWH#Kp0*iguC-C6EEari0N=6%NbXq;0gU+X6zd&0Qfd2rdo z;gipfu)YT#ecdS{Hv0%~SwDjE@~g?jRJ~#k`gXrMPAiym z{5rwb3p+b&jgJ^Yjn0OXk;m#^Gk3~2Ro1;LHRTb$%4qK=hN=CtBrc)WlanDQSEl}=&jSkY>V`~`-l{W@MyD>L&W}i@1Okpdf9^$ zP>Wcg(ZIZ+y>o-hRVP%q0km=G2y4O_`-grtNy}Y4!Ce|En{TAXc;{^!1mF*6xf`0x zq11SirdtbCC}B$2COx_h$o=LQACpDr4HHXvAFsyast&_g2Tr9L-|uhHsAk6j#LEh4S82E_f}pcH95s`xWn6; zfYJb70u~lX-Tu~Z;T9N9V>gF{Xw5y5h=|j>PX9G|7^Q^T zE>CGI2*6|aCo0^*X%VwoZl%UyEs53=tiOQ=Fp77DB+qf+zN5eOHvOT!Zd~4c-U^b` z#q)$~y{n3{kQo(RZ^8{ptCNW8vhVG1?65K7G_3)K9!jycq}kHCQfPv2jX#Wp@l=Xm z%RT9;k63D`NtsS|RAHz+V9Y zskB5v30Y32fyaf#HEgTDW(WJ=>@+MHtL>`4LEBVdw55p84ZqEEj8s)*5rsAoL>ERf z&V@^>``Yn1(e-!daq^w*&O)X+GL2wh|3wzeLj9^-M&`IqLYB%l&%WusRSRu-$8A}? z(tD^g%x@n0eN(o=Oo=x-@yioYIX>-UY=0f{`2uZ|6TQ>7&)jMHcu^;@+DALXM&?Xy zN>%R7r0V+tY2Ko4(!@)@2|JoD+M6~p<@#VXbUI~C!}!#tee&49U_SRk`ro0 zGN>SHo2Nlt#vxoei?9@16sWQWK#S{JIc@gz4x-e`)dz6lX3gJx^LAnMmB;Av7T^Au zBov7&M*ksa276jp_;VC0tf#jJR6eu(zdI)msI+KkqH)-UYCE*{orTxzO_XZq`i#Zw zjk(_+e_s=d#8T0ruK8W|i63%cc-cl-jvkL|rq2MVW)}J{YAntd zG`r4r^xF_H^2}m4`Z|rR-W~Mu4RacDLb9|mw)0tk9pK-n8z2oIz^TzOmlXD*+k?@{ z76-@^q?Gv&y1lvL3cw}!5ln!8;c3aM|0+6oh!mtXH(ttg{19f#+){!XT7Xx+HhgV! z62Oq_$vtw=W~!Sa^gxA}b^Uf6{?HNCE{4j(sWyy-kBMtHTRwe4PI)$2r0#R4jkFg0 z`&JEXr$saBMs!SuHYdom^Y6v1KnRHZhN;8f-&VMl+mvxjwikGyy+r%Mn4P!{LN7lKAgdZTX zjQvlT*7YB%R6H6nX_gf1Kt*HMW7TQtGQ9iU>RpUKS+gkg$i*7z=LilwV`~WhVm!*Y+u5% z3UR{g(jzxF0h{db?mJ05!Msw}i#F)Z4NlkCcAd8q+o2ndxz}1Yb}RcN((|TvLe_H3 zk}xS`-a4^D9H|w!rR2v36~e#2)%bgMYnQ~2;w5!AzLW6LNpWK9t~R|;OWeb$)og@A zQlf4!Z5W`m?cG}zhsz1XJtV=F`V|SVdK39Ek{>a;5AqNaQQ7QA;MLX-hs`Z?U zV@%)biGE+;(!3Vc2%XJ3965MJCM_wLD5exD#jsWq=^|F!iw_rRpJ8%hcXRA%m#8eq?_#Z;aNu`($QC&`Q#W0v zRLFa)73{~YDdFO=&niW_#^R&eKjW8BGjmr*or=MHbHL@7z3urx*V)S51{+ZH5ln=b`D##ob$b)F)i0x+#NJiZ|=+ z7t#3MCQjbycGYRx4$a1YJm44p5_=>#zWQa$zT`8=-nCiYVNj{dC2xETSL2zvoj!_x>sQ&7Z_R7ctfkWglM;}sseROfF6i~p z88rmqT|7Y#&r$N=3D0o83jUw`X=MMhLVBS`aRJ84U>vJGycKHr;o&K%rLm$PAJdY% z{K;8XmE}gu8NYfQgHuIi^W5sh32>>F?Z(o5&&C-S3-i$-o?aQfsVXG`rS{Z^#iddF zSO`IvI78S(3=5(t=I7F%(5iW*XK=sddoRTW^=TS6YWBu5FR` zwi>CSHLbERX2`&c50i@w_Z5?*ZT7?6Ax}2^RS`0IB79|(cidJGk3r44ab2Z*=wEKe z!Oo`K5Nib4?Zi~F>Ao#nq=C)e*5f26&ZU{;`~%NV*%9XYc^(RRGQZM&3PRA0?3=uK zzpjS!Ncp`E9f+3i(O&p%lIOh+Q(*|<-n_lsrTEkh#;N$SdyzJ+dD_En9=ChfdXqhE z6Rcv$a2;AIyP?IAGt=Gj=(WJrQ9VKs1o$8@)R&!8WQJ0=RQ5mYWPA#-aZN(ZKIpiiT zJAkkmW%p`Qt~Ve7LpU?vT8c2zQ`f>WvbK!%h^Sai+E73+|p-JoC1dT{A24 z;S&aIk(H|pozO2^23BxF)vZ5S|FF$~M9y$WPHqoXUw4@$ zFVlLnpIVw7dF~oxdx?X!H`?e+_0+xLkWZ~r!^!f{X~V3sTypKE1pECiLYr8Onb9HF z>6bUll20WX9eytI$?EASS6E>BY>$-gY)ahS z9{mis^oDx}Uzg&|7U;w~ zO}jpke9|=mg&mS&^Zb3@nILJ~Qkh16ZN*>t$63Xi6J3~2O#U;r?)vT|rgNONZ+zRi zC8O?9BKZhwT*Qbii2Sj5xog-OJ*g_Y^QN}7dNtpLVNZ~XaSz7KMMBhj_#tbqpJo)d zPlE5iCSyvDM7qrS`$u$zWgo>OGs(5Dri={OFDH8smR2W~xegi#=EoFJDvkK+YQCYb zrANTC4hJq$9DQ#%zUaX0MXjvE#s|{m%XiCR-gP~ zyl3;$7bY}Nmh(p^_kb?RKGm2rG9z_JHXa4wor@DPJN3&S^#RI?Q@EZ--F0#bNBWx> zm2FpE6v%RdNGnH)dfiJ!&iK93uod>w!u*~xyqy(S(8zZ6)HElzXFSs}CphdjUFWO+ zQz2{A3d_(y`m3#fo$aP8XB@;HM0y4wwyK3|1iUW;n^ zuu$zx1uL2Q4?f-c2_Jy@ofmnfXy1FaHSaYqY&G|KF{<`z#NPBC$v=+6OS7d0cWr^A z;v33b!rj}angn~QPULqvR3CG%5s7M#_6OF@da&gOV`M_0`i>Wpx{1bo*fA@4TryVk zcq+OkC49xVMt{1xV0)3)s&XNju=D3h2C7$-g>M?z?cK9c@rzDia|}*;3jWvAdephq zqH4Chzqe`$E!*5w&7hl+j1hx}>x?MlVe5&;{_=;4`|eJ)eOz$5_u%)$YoXb)x=Wq? zYT8`D47;98{=T~IITUpR5*cktq_5Z1IH(C@!nbSF5IOZ*{lwo@<$JO643C=Wdx*eb zB)N2dU)?}uab%d*ch&oWHlYT-lYeXeok6sbk!Jc#LRyaR_>=P+lAV0j@5i(5pO$=d zNrLgj8~8&;eeytukLHn@)k%v;l)*-oaW4;s3voaA`*5E3xT=ih-hu<;=MOIq*6is} z0GZeMKwK+fd1)xjL;TXD4K!TqCTIP%l89|=PATyXFIAMU&IA(5eiz@Speqq5Ho(r) zumou#Qm-0aiSw$ral-rzN-(*ZqG&sp)e+%B3 z@u8`Od!9=<4-EtUn(>`ROKPPj4+!*`)L2$Oygu^1yfsOVsEM*Rqjg$gU3C(8q7hpI z6bx|JkLI=fj`@7y*eS?~ws;)7P`PN(i$Wnb}kC9FE-3_~ycth#C*pnVTN-ntXr>#U|-NE*Fn za+5{2Uc)wx9Kbb`(^+<2TsFZ4e}u#w`J0tO;=e4?3sK)ss83Z)`}Kpv5{P~^@n_lLQL~gT@i&Q1XQl69acFw4wr*Z-t(^HCYwJqFj5Z%6Hgq^d z@jXU@(VAnD0k<*li7gFW{|n$B15L%MNI&l0==Oyq$C9x)5GO0FGnZ!VfYPk1Ty+=G z`Tn}idewX*3Z_Oz)jJ8E?HkkWl5jIJUfmLS*)P69?t*G9Vyj=-7bexralRc|g zv|`-8!Yp@`{zc2yw1#6N6Xvm-sMXs(7-UUL&EDU|0z`YCP<-K!nVE@sDY|1(Fy>TY zO@XbK{@B#a+~6reZVx?_8TTnGqpVt4U7LVYG~d9k5JyEb^e6dnJG;r!Q_kG%)z8up zMu(y;t;dNO2nTcRU^>Zg-2csbR^YMdClZ})gaV3(zvi>Xf(im{m@;!HNTg&o#cVmy z4q?}#a(Na%YDOd-N~giU4;Ev8?cJ+1iYf0fLuQXCw$fXY(#}%%d#>wWr`?xmKFI~q zVgZh!1a#+Rlj)J}YXHA}e93!YCVysBT`?C$BIb$mj7wZdiw$D0b zC>Qk;x}=uZ_=#b0;Y3$$V3GglA9Nq2-{v;sW(hFRwSM!=go%Af@N@wF*#{PTLkY>n zZeEq4#Fu`@rP*q{9j0u)^4i%o8~edeLM}fZnd>MoLi&2Fn-^n(FU9b;%&%V9FsgO?YW`XdrIr%$o0i$r2d)Je zzmkvt)wcg@3Aht4Xv~q&O>fYu-naM_+qJKn-u7-!5j!pUe!Td6?Z-A_Y3fx-+^uvt zlgW}?4#LItJ7Le)QA*)6+#&>0!>|o!&^fELLBwZ=?hiS~U(1R<7d^Tow zPK|AXZxsZIkEg+Sd&_o;quQMtOs%Cai|DwJEwH1e<)isLn{y<(NK3>BIGPZ&tckrt z;R1^oC*Q3x%e}1qjiVa2{+y<*cR(yp=^=nKFQXiu_8QMbIE>60PdS5)90c;KU)Sxq zjrm9;W@iD`y+uxJXKn>ai{>@)DX>>vs$JSDiD_9^DXVY{#p5H`5Loyu(p2#i`}Cfu z_Lp3cZr>vgt&U|%aK-{gfMZSMYf=@HpELK;7|c!dn@v%}K_jKY9;f?N0P0UD=0vsc zM1L1A%A4K!d1n-zKkA@fyzZ=u^VdUip`kgrE5N|-PHVV`RwZ9NC||4VcMjLKCSOLN zcS5|el(*p&{ryFb1ka8noXsJ$Iq9oTXMfH#CEw%qofc z>UG|0eq_NQf%5m^$S&KfwKY3Cv3x@6!k;;jH5=?1gFyoVfK!0_G_QC=1YCGD0zAh1 z`>~&)RZ;DchaEG`eD|p^7(nSu|n@b~-pGss&KlQ8ha*XO{@WG%rHNw* zuB|R7JBafJe2?p$(m!x@PVMT#gcq{v`3qG5Gq-weBnTiKHmVjx6q21lsCg#yXO+Cx z^AtiZ=~a~gig(IL_|)U-hkpLTOol`G6L3AmvG_HOx>;{*1|X;$zAg8xX?GGWI7XLh zOsHZP`%-za5&Hg>vK@*-r0ui;8t+djT>Bh-!V0N7n~g+lDc| zIGKz-5g7bOn(fy!^hak8UM#N#rVD3%tkYmmvUE594%IhEl%)A2@Z1^eQW$H;IC6X` zC}Pf;amb9Wx(z1}?;D%k00O!Y-M(z&!tE)3{(#b@rElf4obB*sF6p4n?&h?3%w7k2 zTJU2>IgBxG&YWt(8Z*F$6&CQ}r-J=@mox(O&E0&bzN&HmbN@@=QF;J`ncv2YMwcLI zP7Qm1uso^!SXNd>Z!6B*cn=&*fbhkyRzt0Aqf>!LvXvlKF5Ec{*2$Cqu9NC2BQM5&HsSUh=s9hD zkHKA6i5?^nJpjzjI}gMZpsJ+A)T}i|AtELF!hd68U`5>!5H3S5)in(L z!NPLlG zqV$)00T1Nml7a9w5~V))L67-Wr`!j$bt!=pF@iGn>kT!-B7rM!H?P7}CXs3cGhf=? z>hKif(Zf9*AhLIb=-(mlBRp+ZH^JSPABF~J)i-+BjvFuogaIx4`50|z{Y=4eaNFhg ztQa6K{pr7%+!C=m5UhDc#Gse&S&aeNmHC0|IXClVrpZ!@Ov2&_v{XNA7eTk3uJ^|J z-2sDf?8`1mW-nKyDU-HX}RuII%-$?s`A!< z(gN1J4;6wZa@!}j`-wu%aO9~obN1;MK^tB;XDe-totHr@rp!EL%H(3XFjfr*lx9)F zG82s2t&hG7U+!Qj%{RawSDwOnEBYV*$y}G0^s`hKFIv>9{f^ZEFDmDu5AP+&grR+z zqW(!(5YNq}t%a@IDLOI*;QawT8-dQ-IC){OI^u-&uPZ>>O0#1*S4dkTaM}`O`VF)4 zTc!v)nE->kxgkm;)~uE`fl?@)>8`5@|9wY4cqK11Ky^v$fT0-G_%kw>9YjW{*7WM8 z$=6^3^0NQj4y>fT948n>n?v;z=6E(39EE30d-8-|uHX01$FAC2U=F(uM{l-2<9ztF)XbyPny$VL9`Z8C%r&eIjhL&v3sXB4Xwg z!pk=k4AC(~k3rp?JNkJvA{!@jG9;I`0tP<}2`1wH7`jBj(j3U|^Nf*P);b8nt;Xsx z#T2z$qOu>MA4+>KGKMa2v(y96h;;#5S_RPvEI-dx=1BfAauH4)TKi90R!dia2c6GF zI#0=aNFV0ak0b;}Gg&PPC?j|Xtu0Xm#^@pYI;HdiDcHWx!h-o3%F7t&3SFCO=;_Y` z{WJQ|B)r=ZS)@uhjTHhL+99&9V;%D*Tif^eoFB7{bSKrdQndqB+G92#Bz%`-Lmzyf z{H+O(`<9gXG7=1`f#d6PCTC@&brO%Q-$p(#nJbV6EA^8>SH_p;sf@)2H5`m-u;Lw= zl#_9O?wu0K{$At42XjHO4`&Kb@3#^V{O3uXLopAL^NK@%cmdl=c^ySK9e>+?GV+TdI)!P>FC{T!x_Q_Q2m4_5WNKvTuu zmCrQ$+fY&?2sTWF0us2ddYOZwf7?u}mbtjO?HfR%kULxZyRS7gfkcn@Xxu1oUg~a1 zQNjN?$hvN`f-C3FZkv;zuEOK)1+TAcZxfaa|{=>Hkly4TB_gP4bn zqV@N$drsG@;Bm!^tT&jG`)ZN303bnap_mw5q?~~y?tV)r(#i!MfadiSEKqAuA%ub^ z!1vmp2ODFXA?#vV8OFWH3B3Gv^ePB_!?J&j)e?Uh>eB`jY#85XL|Q#bsI}c~j_FcR zKmV&nQb(K{k@nR;6d5>sm?JPik7ht`CK1Ubba#l97e5e>lH3vozgb&biyDCsMR1iJ zwgGGkL>mA`BTSNbHz|Ai2Pn(ch_V_~%9D~8M2v$`NlbJs2Ey(Ur4f2m7y90(0_&0$ z1iBQPLzZX&anTccIhZ1b);}%$YhfSCdX>5{7 zweTLM6u`rZ3_QV9b=@*LCjS~SfZgjtDXP<8-ot5=S#@oJM0nfQJ0fgxwFm*r(@=@n z+p(#w)87lA?|HigczwZA^*(~35Hqa)W%`fj+BMy*kqvV4w^U*-Xo7Z2fc9t+<{eYo z!@Iik!p!lno1D7HP*orPnWC|A8q0+wgKG_Lg>9!~%g)1BU`>VACHR_p>lwXNQ0)Jo zAFs1B7AUJ*_v@6anbpeb=&WVbH*KSkrN;wuy?3|h$M!d<&sxQF;T0w zvZF|D7h0&+eCX9vG@c$mlX+Tm+?_ykOcLWBSRPpq-a1|cY^HV(6lQPL7Ft_i?YnEH z#ToSIyN0bGDJV?W!W`>=@N|?NpjOwVtVJv>>yZ|fhpPv~O!fCP5iX5yEUi(&5r8&YPTq>YeMJ(l-c%Mk}b$DugmEFZgc?jQMtb`iS-@ld$@68dj z)Gh&D`c%T{%W5tbV@@q+#^Wy#En1Ofou49wQziR{vBaB#afhRKB6zV=#TfS*IMt_$ z2Cn)cI?F*59fCELXDhK5Rnb;ef3PSSe?AADP9yJ|?3<6(N$6D_-EdUAyD^YtPpP26r{u zXH#A$_m^>F*s6wi6L1^O3fJIIXv4+kYSHB?LX;zHnl zbG+Lpx4S)}$=_zouso5y!_6CrM;}voS)OQI(TZv(#|R{JEx!wjX#9;$_iS{edMMeM z&%9?zJVgx_9}wqyzxAG^BmC^w8B>Uu#n6^f%p#`1Meast=c;XeP2~c~JA8iHKiC{? zWCs6m%HLZVyNJW&yXbPi9bkauQbQr-607=<`@luNDeG!yUMp2byP?cO8rr08mr9o6 zHao9}*kuuCOBK(3*W9U>AcRVa*kS&umJ0pE2<2H_DY_=INSjUFCNWACFExLxpsU3M z6K|8sC4^EB6;O>GTi)W|$-`%F`sijkMJV$$4bjvtO4VI#ajIhXN-hJDg!hZ-g^x`N zTmnt@$|{8xaFi%_(vo8g>(INAS5eK^$&oSP&z8@>Uke10;K?D(gzh=3M!* zye-UVWOSPr zE^S}r$di`V!QY;GFr8PS)E^qW8)3E^acfz@feO7$DMU>TT@MLe78L4n3S6EP<+z*v zFz41;_enqC*aHEX$8mvgTU77@X;OEvs4}GsO+&;xo`GHd_rmD+m5uG(CW$^25@{&p z+VMF-3&6cWm?ZQtnumxXt#IBVqDguhUWZ5&TBc>XWY?uFW#>j5uvBh&Bm!E#&1i{V zVRq^3L(^jg%kQq&o@W%dRM_Y39Hn&o&1bg-Tz_hrN@mp1i{*)horme~s`I9XlOCEZ z7dnM!@t|7HkFJ#Np1xT%v}a*h)_Vf}$3$xFN3j+?1nRnsN1!{lY&qPyHl=D<*SRm$ zaI7vtKcaM#5*Ti0(=^-)*PZ%w2H)1j-v0a_WI9iJA>7j^St3^U-Y^9}gtM$P20n1| zA~<>w@4K8|;4(8Y7|1aY-R{%QZP(wTJC+)!n>|D^LQVurd{aV5Us?^EC>-)m@Lwxa zQa9jueDT8H@ub;EKVivU3o`jV5hWgGGt0<6(i0M4EcDK?faF~@r?h(8h&(G#6LQ~H zc~#(+YX8;h1S^Svw5fy#+fKYBvwbm|`3y%h86LObKw48rcssOdqJ&yMxojBiA|l{H zL&9)YX`My?QfH$>X8BOk$c#&C+^1P-1=^4mNK%YP|et%9!iD zpHq)8B#rR>1jn1ks#d#Ug46)Mi$wXvgWDt*V8#`mIE-K!f`qHA+21I%tav2(RfLGA zNc%QgN)ofO>u3xkx@|NT?=j`mmp(PNpuF0Bp$$L9Rso-h!IJXgF>TT(0sG@viyaTd z)6JmgFGzO`Io}M+o}evJ{kw2juHBKICmcSevTG%r!+oeSK|;EgB#^a` z)U#PiiJa@gE&t-sLE1DnjHi+be^od8RbpRmt8`XhFZfw`kzShb_qnE~g1{9q`;zPt zJd|5YoE=i{t^^3aI6mCcq%n9R_p+OJ>OZjC&Er1a*5*A)3>@p{AC-{ElB(GXRM8#( zbahmd#6ST!{V@FxSp=d5%?K1PcYSTc4Ow&d4hz|xK)wY`n$^<4iiA&jL&VQxos|CK zk_yX`ydzd-`x-S>J{XPrxTN`{RST@ti;if*hYEq3-^X z5t16V5rfSa@E*Y!*T1_j51y5Ys`8;=G?%-j%=wpQGM0=b5uxUAr}@}NHp}GA1hNIK zp`j1{S8?M5?k4R;tA1mXzI0el_?_igHv^YeA55VmDF%9+^2)Pu+eom=N3o$e`_-Ol zTGM#{H#Xr}RzZCr_oYbFQR*di%31krqg}zZa;5YW>7ueCa)BCMo58#jR5Lt}|022P zx+5ahw|(dWuHdH~+*l~DOq#B4Il7Rs^{54rPnltu^kZtEn#kXddR^N&>Dy&xUUZ+}R5vJq0qyq%#K4IntI@#rtB$g~P$j47+&zPoRa_ct7 zb3ok6ReM<>K%wD-40hVzq?!Hb@NpX*g#64S%N(*t3{*Bp@E+ihscZzBxc_M-7#`>e zLt;LQL;Ebg!uxk)?^bef$rB`XB-ClBosiIbc(g_8>q8)AVf`XAY~<_N8{MJ$a5wxb zGA<}|Iis&w>B7`7`Ag}LTQ~75y?|_OIhj{eKnk7BBCcJ)oCgGsQc3!Wr8BFm5#{&3 zmt7|Hgt^N!8%KED53~FpwWT5rcv*a|4x-S+qy3s7B=;!TWVATVt>1IpoS7Z9(Z+8?iIczE88pk(9z^st9)b^?(g&xLVC6Q(_3SXb_!{Qc|zh zvZMgw8IPLuf6#>0SQj|#Xv5oILb=b(<#V@j1edfETxh7wMgt?Es&yHy^!~fu!`}?bQs0>Wl z{;{#pmzfM9hG0Fk%bv3^H-_|g@YB(-t=&v+TvN&2VaID`=o|7=YbBpPH_77gX69MK zi283$VOqbd#Y;}CE)~*~sls2lrl ze_e>Pv#^xMl`+zcr|Z8cZ=aGLU>AcCp9Z2XWVw5s{U zFTO6_+uC*_Dc7LQ3N6OqQV=TkC`)v)5gJ%%TG0la5bN~T@?uM2VNE_>4P*V{jEjg^ zeMH&$kWaH~x2uj0pPlYSVopl2ZgP2}C3Je5ew`9YR^!u{i`=TJt=6SJIoHKrh#R(V zQ+ZIPH|#0Xr}zUzFuS3;VqTVMV?uVWvkMzpL+U5aL36B>YSml>NYanps%BXN?UZMy z=;*^wG%hl=fuNH5V(7MUm#wrrd&H`<6wn z2xgZbOcu3F%ttytb+(Y$4)ql>0W_eJOOG6$y zvY7Wad7OC9qhjgs4?t$N)dCkl5X)tT-Zz{pq#j}&2s7g81xuL}TmGnZ50~(#pris9 zs;2Ie%RQLI%cWd1IrQr4`dXQXOH~(G! z@h;vO?=+)%bm*FVX#a#6*_YSJxEWSC8{>kFr^zX{FyaB`xyy2_Z?81?=&nz{cYXK! zuFO9gz`&mLJOdSc`7Xg-^|LkwxRQY%P>ad2 zWMOdtaU|wg6s2j|0zC)9f-9&Yl?vWN?r04-!d_Hhd{(t$j-@fYESx>v5 zld=BW7V}FywN|;2`5v$sS2F5pwL*0xY)yLVZnDY9|JA;^ekGN!ah%CUS(cfr(aOuo$+J#P2%?#q zP#()$IgGQGqlqYymBvBH8HFt*nl@d`TXs>ClrDH#dCP@CN@(iPMN}qCNDVA6Gzfx< z;)T?+>DBoQ&a2rk_kQ+X-~Bv$JeY)_p>XRwB#9?{DuwPvhE)>Tufe zxvuB4N;qs)e|7GDES(cEwTNEd02KO3{gk6~M>y`d=Gu6hhf|CO1FF7Qe74Lo zn@(y7zD&&Hc3V7zX6qVaG84-e%jcO9v~)2y4s1eD)YR(^95(sK(a(zWtUmcZsFu=P z2|Z}gb=sXd{EKG<&fj6N6yNlL;bHqnPkfCbn%Rm5ZGMY0jNjqEV_};y{AxDUzED$n zeYr=YR8IJ*OwXROnY~2=yz8q7out3zP#$+m*AGg9JQ5>qHav=oYuO94JZ-lWL~1DP zLepU#Wcw&Fqx*j4{A$m2>Qn0tr7batlSbqG!dgA!Mlr8`-StTgd*S!S`nEfG3eNxV z15}+3UtyJSs7g(rIq@a){H=xWiXwi0Qsi^D$yue6tcX{zi`gx@$BW*Dv;CRI=H~^X zRUP6-T)8YN{1sgJ>KxT?pvIgYko#-~z}O6YJfu z_xXrug~D4LYn8p74~nAUMDi$u%|D@WZxbqq%>UTg(&itU4B#${c#JF(eRu@d%WrRK zOnl^7Dvu90_*{r+no8PLCmT$D_i^d4CBD^H<7ADPe`9t>zJIqLIB!4cR+d|WgAK?x zSqJFD26#T$cE68DBWP)XggT0lE0xTpc(rMDwPok=vaGFTO-b=0$wN{~ewmYGAn!CI z^p^ZRHYN+8X#)vx4Vj5WtL(}qFVT`Qqrfl8lInR!F07DLM-5#PFd=#(Km(yXoDASh z^rzj+Ye0h|14u~GDUi=Lor@I*V6B& zT(0e@V|tmDKk7%?ZZJ@u&c?=LRJji6U@D~ti`x>wwVC#>OE26tHY0QLfEy)h_rC4$ zKCnx|Qnk8iT&B}kAw~d0LoW5ow>72GiIu_jCMV6^$g&!g(>>ReD1YNJgU4aI>kTDR z<3wk&O!8|(EKs5pm|*zSS%|UuKk=TB*GDfeHp0n^GO7RWi*cVL&0*bf=L#J}RmQMs zhlV}{4ia)__Qn`_ from the finn-hls library is used. To make the streaming possible a Verilog weight streamer component accesses the weight memory and sends the values via another FIFO to the MVAU. This component can be found in the `finn-rtllib `_ under the name *memstream.v*. For the IP block generation this component, the IP block resulting from the synthesis of the HLS code of the streaming MVAU and a FIFO for the weight stream are combined in a verilog wrapper. The weight values are saved in .dat files and stored in the weight memory from which the weight streamer reads. The resulting verilog component, which is named after the name of the node and has the suffix "_memstream.v", exposes only two ports to the outside, the data input and output. It therefore behaves externally in the same way as the MVAU in *internal_embedded* mode. +In *internal_decoupled* mode a different variant of the MVAU with three ports is used. Besides the input and output streams, which are fed into the circuit via Verilog FIFOs, there is another input, which is used to stream the weights. For this the `streaming MVAU `_ from the finn-hls library is used. To make the streaming possible a Verilog weight streamer component accesses the weight memory and sends the values via another FIFO to the MVAU. This component can be found in the `finn-rtllib `_ under the name *memstream.v*. For the IP block generation this component, the IP block resulting from the synthesis of the HLS code of the streaming MVAU and a FIFO for the weight stream are combined. The weight values are saved in .dat files and stored in the weight memory from which the weight streamer reads. The resulting verilog component, which is named after the name of the node and has the suffix "_memstream.v", exposes only two ports to the outside, the data input and output. It therefore behaves externally in the same way as the MVAU in *internal_embedded* mode. Advantages: From 038d3068c6b3014172f0830918bd1c12274a8570 Mon Sep 17 00:00:00 2001 From: auphelia Date: Fri, 29 Mar 2024 13:56:34 +0000 Subject: [PATCH 4/5] [Docs] Update build dataflow example folder --- src/finn/qnn-data/build_dataflow/build.py | 3 ++- .../build_dataflow/dataflow_build_config.json | 3 ++- src/finn/qnn-data/build_dataflow/folding_config.json | 5 ++--- .../build_dataflow/specialize_layers_config.json | 11 +---------- src/finn/qnn-data/test_ext_weights/tfc-w1a1-extw.json | 5 ++--- tests/end2end/test_ext_weights.py | 3 ++- 6 files changed, 11 insertions(+), 19 deletions(-) diff --git a/src/finn/qnn-data/build_dataflow/build.py b/src/finn/qnn-data/build_dataflow/build.py index 13d58d2c91..58d566a6e6 100644 --- a/src/finn/qnn-data/build_dataflow/build.py +++ b/src/finn/qnn-data/build_dataflow/build.py @@ -1,4 +1,5 @@ -# Copyright (c) 2020 Xilinx, Inc. +# Copyright (C) 2020-2022 Xilinx, Inc. +# Copyright (C) 2022-2024, Advanced Micro Devices, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without diff --git a/src/finn/qnn-data/build_dataflow/dataflow_build_config.json b/src/finn/qnn-data/build_dataflow/dataflow_build_config.json index a053c1a22f..8165055fd5 100644 --- a/src/finn/qnn-data/build_dataflow/dataflow_build_config.json +++ b/src/finn/qnn-data/build_dataflow/dataflow_build_config.json @@ -4,7 +4,8 @@ "mvau_wwidth_max": 10000, "synth_clk_period_ns": 10.0, "board": "Pynq-Z1", - "standalone_thresholds": true, + "standalone_thresholds": false, + "folding_config_file": "folding_config.json", "shell_flow_type": "vivado_zynq", "verify_save_rtlsim_waveforms": true, "force_python_rtlsim": true, diff --git a/src/finn/qnn-data/build_dataflow/folding_config.json b/src/finn/qnn-data/build_dataflow/folding_config.json index 46f1d6236d..124876c3db 100644 --- a/src/finn/qnn-data/build_dataflow/folding_config.json +++ b/src/finn/qnn-data/build_dataflow/folding_config.json @@ -1,8 +1,7 @@ { "Defaults": {}, - "Thresholding_hls_0": { - "PE": 49, - "ram_style": "distributed" + "Thresholding_rtl_0": { + "PE": 49 }, "MVAU_hls_0": { "PE": 16, diff --git a/src/finn/qnn-data/build_dataflow/specialize_layers_config.json b/src/finn/qnn-data/build_dataflow/specialize_layers_config.json index c2a8bd4553..9224a72907 100644 --- a/src/finn/qnn-data/build_dataflow/specialize_layers_config.json +++ b/src/finn/qnn-data/build_dataflow/specialize_layers_config.json @@ -1,26 +1,17 @@ { "Defaults": {}, "Thresholding_0": { - "preferred_impl_style": "hls" + "preferred_impl_style": "rtl" }, "MVAU_0": { "preferred_impl_style": "hls" }, - "Thresholding_1": { - "preferred_impl_style": "" - }, "MVAU_1": { "preferred_impl_style": "" }, - "Thresholding_2": { - "preferred_impl_style": "" - }, "MVAU_2": { "preferred_impl_style": "" }, - "Thresholding_3": { - "preferred_impl_style": "rtl" - }, "MVAU_3": { "preferred_impl_style": "" }, diff --git a/src/finn/qnn-data/test_ext_weights/tfc-w1a1-extw.json b/src/finn/qnn-data/test_ext_weights/tfc-w1a1-extw.json index 498d329ba3..9fe22443dc 100644 --- a/src/finn/qnn-data/test_ext_weights/tfc-w1a1-extw.json +++ b/src/finn/qnn-data/test_ext_weights/tfc-w1a1-extw.json @@ -1,8 +1,7 @@ { "Defaults": {}, - "Thresholding_hls_0": { - "PE": 49, - "ram_style": "distributed" + "Thresholding_rtl_0": { + "PE": 49 }, "MVAU_hls_0": { "PE": 16, diff --git a/tests/end2end/test_ext_weights.py b/tests/end2end/test_ext_weights.py index 2f5f136d3a..bac343bedf 100644 --- a/tests/end2end/test_ext_weights.py +++ b/tests/end2end/test_ext_weights.py @@ -1,4 +1,5 @@ -# Copyright (c) 2021, Xilinx +# Copyright (C) 2021-2022, Xilinx, Inc. +# Copyright (C) 2022-2024, Advanced Micro Devices, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without From b318693ff1c11e00b63434b11c276c66554bfd6e Mon Sep 17 00:00:00 2001 From: auphelia Date: Fri, 29 Mar 2024 14:11:26 +0000 Subject: [PATCH 5/5] [Tests] Runtime writeable weights = 0 for RTL thresholding in tfc test --- tests/end2end/test_end2end_bnn_pynq.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/end2end/test_end2end_bnn_pynq.py b/tests/end2end/test_end2end_bnn_pynq.py index 94134967fa..556ba1d187 100644 --- a/tests/end2end/test_end2end_bnn_pynq.py +++ b/tests/end2end/test_end2end_bnn_pynq.py @@ -135,7 +135,8 @@ def fold_tfc(model): inp_qnt_node = model.get_nodes_by_op_type("Thresholding_rtl")[0] inp_qnt = getCustomOp(inp_qnt_node) inp_qnt.set_nodeattr("PE", 49) - inp_qnt.set_nodeattr("runtime_writeable_weights", 1) + # TODO: update PYNQ driver to support runtime writeable weights for RTL Thresholding + # inp_qnt.set_nodeattr("runtime_writeable_weights", 1) return model