From a11486099291c4eef0514da843a3122b6073d119 Mon Sep 17 00:00:00 2001 From: Louis-Dupont <35190946+Louis-Dupont@users.noreply.github.com> Date: Sun, 16 Apr 2023 12:15:48 +0300 Subject: [PATCH] Feature/sg 747 support predict video full pipeline master (#829) * wip * move to imageprocessors * wip * add back changes * making it work fully for yolox and almost for ppyoloe * minor change * working for det * cleaning * clean * undo * replace empty with none * add _get_shift_params * minor doc change * cleaning wip * working for multiple images * add ppyoloe * replace pydantic with dataclasses and fix typing * add docstrings * doc improvment and use get_shift_params in transforms * add tests * improve comment * rename * wip * add option to keep ratio in rescale * make functions private * remove DetectionPaddedRescale * fix doc * big commit with wrong things * try undo bad change * doc * minor doc * add a lot of doc * fix comment * minor change * first draft of load_video * adding save_video, some parts are still to be checked * wip * add __init__.py to pipelines * replace size with shape * wip * cleaning * wip * fix rgb to bgr and remove check * almost working, missing batch * proposal of predict_video * wip working on dete * add yolox * add flag to visualize * update * add streaming * improve streaming code * docstring update * fix stream example * rename Results * cleaning * rename stream to predict_webcam * doc fixes * improve docstring and homogenize some names * rename _images_prediction_lst * improve doc * add doc * minore change * fix image * fix ci * fix merge * reverse channel properly --- .../source/images/examples/countryside.jpg | Bin 0 -> 44933 bytes .../source/images/examples/street_busy.jpg | Bin 0 -> 77632 bytes .../images/examples/street_vehicles.jpg | Bin 0 -> 150012 bytes .../examples/predict/detection_predict.py | 9 +- .../predict/detection_predict_image_folder.py | 9 + .../predict/detection_predict_streaming.py | 6 + .../predict/detection_predict_video.py | 9 + .../yolo_format_detection.py | 2 +- .../detection_models/customizable_detector.py | 82 +++++++- .../detection_models/pp_yolo_e/pp_yolo_e.py | 52 ++++- .../models/detection_models/yolo_base.py | 54 ++++- .../training/models/model_factory.py | 5 +- .../{results.py => prediction_results.py} | 131 +++++++----- .../training/models/sg_module.py | 7 +- .../training/pipelines/pipelines.py | 194 ++++++++++++++---- .../training/transforms/processing.py | 129 ++++++++++-- .../training/utils/load_image.py | 87 -------- .../training/utils/media/__init__.py | 0 .../training/utils/media/image.py | 158 ++++++++++++++ .../training/utils/media/stream.py | 117 +++++++++++ .../utils/{videos.py => media/video.py} | 60 +++++- src/super_gradients/training/utils/utils.py | 22 +- 22 files changed, 906 insertions(+), 227 deletions(-) create mode 100644 documentation/source/images/examples/countryside.jpg create mode 100644 documentation/source/images/examples/street_busy.jpg create mode 100644 documentation/source/images/examples/street_vehicles.jpg create mode 100644 src/super_gradients/examples/predict/detection_predict_image_folder.py create mode 100644 src/super_gradients/examples/predict/detection_predict_streaming.py create mode 100644 src/super_gradients/examples/predict/detection_predict_video.py rename src/super_gradients/training/models/{results.py => prediction_results.py} (57%) create mode 100644 src/super_gradients/training/utils/media/__init__.py create mode 100644 src/super_gradients/training/utils/media/image.py create mode 100644 src/super_gradients/training/utils/media/stream.py rename src/super_gradients/training/utils/{videos.py => media/video.py} (63%) diff --git a/documentation/source/images/examples/countryside.jpg b/documentation/source/images/examples/countryside.jpg new file mode 100644 index 0000000000000000000000000000000000000000..acb18730d05998e6c9938949a883961e6c31ee5e GIT binary patch literal 44933 zcmbT6Wl&u~)8{Ylt~Y477YG_GxRc=S?h@SHJrLa8U4v_IxVQ(oxH|+7zC7={wOh5H zcDGNR^JS){&ab9=y64~hw)D0Mz?K%55(mJ*001!W58!PDAO=82L_|VFKt@7BLP0@B zMaRcLM?*sg;^JZ9lYO8dC;LE3N(pABrKDm6k&=GmqGM!X<>26;pyd(ZX5(jO=V1HK zA}}Z@DClVD#26UFY#&KKvi(2XTMqyS8AcxF1`dV_0E+_yhXeCA0HApPPXw6%GQj^d z7+5%X1Vkic6jZeL2~F4lSQt1sSa>)D1bF!O*}m`N0C*e(+>fjxh(F)2AEH7z}(ps=X8q_nKOqQ0TAskx=Kt-Y^* zU~mXBJTf{vH~(j0acLR4wY{^uw|{VWbbNVreRF$v|L@`PKU^>Xxc|m_|Nb}F|G|ax z&IJn(4+oF*A1)YJ_xBeL2Oi-gD8P?p6=wmBapaCOj!Y0)PqUh9W9G!e zFRUgm%EPVWuOGn{a_R}^|Qe;@#DB}c2Vjv(>VZ$hb!*6$R%x0D~jb8gw}5=W=1ixOnJnz^KuILu@(tL zuN5QjCas-W!(13+r2isMVqz%`!b#e-pli5!j~8%lbkV7?DaIP8O~L!$R%Yvze?ijP z3U*nL>nsPF)BBlCUBb4(&2QIe>0?MEMK64dM@k@&N0eAU$RByZFgoUp%|G_HZt;y^ zs6a@B46}zTzQ$o^p7QS}%;(aHE*4T~uz|5t0v(GCmBP@Vkhvlg zI~v2wRnjt0U|eeqfidU`divowu0t$ZYJD$oa7Ff@RUTUspZua zyZCGpguO?YI0nGYQpxBpt#VuOGJT9D9N zt%sEuF2xyUx&*8P!sT%bc7L8%-ovy-m2SRQtXPLK^m~4I{TI)uBQ>n-#VjvqauSu1 zL&ke89|UClxvqnirZbKneXg;;D(>JoW>MmIG@99WQB*im{IGB-)i`E4kd)l+fGN%* zF9ri4300l@%xIV+BPT8;E1fST8QF*gwv87wACkaGQT8H-VVL*jz#=>Gb{S(5A7Z!l zMCkRP7S-lNkQSO`9X%(-M&^cx8`PQQ7>p!7GeaaXu|$tRk8PZ2K-Ow|K!dyYb`!ctS2hRK{cn1SSX-^_w2b{JPw`sP71QFK!$IiWzjlzaUMqAlsCZlti;=bQqh_zxixVs00iIe3l$?ewg?b^&s>o; zg*V;OeS{+o8p%W5utN5v!DD+#(syQw zx8@Nn9p)xHD?v8-H++s#5lOErDyNnEcF@WClBD6t)X0 z^*x5A>@)T722r=B&p+^8aiP}`#}tAtOI;Y)YnkMjlnRN2SG3&G&y0fTUg$&S@C{!q zS%w09>D~a*L}X#*HpW?)=NPmcl@mk+p>T-V8ySkF93~meg!pjK)G@opTchUa)%jJo zk7f|w&!!2x!A)MdqZiY+e?Nv!$O0zcCt14ny=eZ;H~Y zRJ=o335TCb`7PirVy73V$M=dO01PY+6$)@*2LZ?zWAEnZbL;>qah0P^^c3;|^j8Y) z@k_KuY#keiy78Yu;_N|1QEz~bsqP&KmU$_Y)<|!@w4k2w>b?>+<+8Ys|+jl1Q zv}n2PpJKG+vE&Ou8@2N?$zzg{L;If!a`-;4qGUT>CxmSNh1mfC%&V;@NV~{8HFH=J zKAO_*UF{N^ncABZ_fkZg9&xv(SGH%LP8~1~~Y9^3U%+R(JHA5YZ z^IoHtsK`oIjdKsuUx5?)-66_!5aKr9Pt5}6+RkqdGrKY3h)!u_!<4So-RKHTccG-_ zlS1^8spM91Vy2bNJitleqZkFRq|%L}zL z6mW7b5@BI#Wh4l~F4aLf> z^*Q`!?9Yi-sVDDDy_PSY^OeMBX=*jzV{$GyaVdz`S#3#cqvM`3l9Js@9v zQ|$_cI)^$&jkvN50cWy1u+1Dq6E;5H(MW(j@02G(Ue z3Uam*kPNm)5YiXt0|SSld2V0+P!0c*u%{GnNy3llfwSOeaFUQ`jF0w?KjMCm?a0Rdd7 ziZ_bv&(~TF9M~`U7RhRhdrLi}wTd1<@SfGM>`s#merw&I#%y_l-}5`T{6uwqgqDg< zWSUN*H?Fq_ajSBrRw#l&ccXpQ>cV&K(#y*ZN@VIPFK1&{Sy&yx!I6ve({BLN&a!=y z6^rX?i$DPDaJTcvx=t2qO?T~GMjDF0KLnEfsj*mWF$vweYhGQf11Xmk;ywB=?eY$YZ|89GjqzLC>B`+Yx+!XE1l;Oq7VI8nKl@7qVG&{hr% zLqk_q4*V9J9yZ%Opy|tl--#2qe2=e8z%$G(@N)RendM+1Dnn6 z-p#HZHuMI#ORVp15x?VK%(mt&?ld5M=J8|ppV^yR=X8U|8ORIbJs%!gZ`-MMZ~u9M zVfzNa-LW9(HS0;?N;Bb)LA|@sS132|h%un>@Vh$4VCGvXSLf4+AVx4t8tT*E4Lb>* z#K1TfR!2Z$Z`$<89Ne{S~=DKpqXC#7-Mu$68RTx%2CSyNx z^{vThBF5;OrTAI8{GMgV)XWFi*Bvg)i2`rm#k8O3xJmUOAo#kj$ z&nA883EFM80t~&~tDw=h%=`<}N2ZI56dlbrJO6THr`3HPtLFz^ug46|ODSr#3uwgw z!GRZIlKE(E1WHPxK7;vX>&&bU|Hw-@_7~oR1Yfzry~ndP`S!zBtb@4ON&EeEKjP}~->gGL^Jw877 zH?%>r!EgI`ed4^@*ewM=UNT6REb|fJA~r*0N;tU0Dy!Ya`S5y>Y-eR)Tub&`x?Epo zr;Yfyl>dgON~qCu1f)00B~Z^hzDbeBiFoR(>E&{yJ-yzjO**a@Pt!zS2!wA#+vviY ziW| zoLy0R0X$!lbI+<<-dD)yYg`3xq=h^)4?rS4=b6WDlI^C&KI9kDGo8y%Jf}H*0=0x) zlxEhI zEMGGnXp7$WNsV=seGwk!p2TXxSYEP&kW~o_} z%0eRc3v|%oVLAyt_fm8C`Kx249YQ%g273Ucth4~U0kYISeK|DmUZx7i-s~l14ab6D zBnBX|_kw@|-h4M`md@%7!^~sUW0j&LIJTlyJ7u(Rw13|Ks0Th0?u5Cu-+a+ispx2$ zrK%HXqJk1|V`E}47l(LmtEFy#hC8I(y#YG0LLHs6EXw*Soo{Z0Vk~~t4o-#JVVqUf zU5KwS;xQJP0Cmw#zzzym97WjbbSHkQ3qlFM{0-w!I+Xr(~<-AVv!12H&wn&l)T;p%v;@eOcR*)8Zg&v9hCr|Wa% zz!`G1v;)}516J1}Y1PD+>K(glIQB7_=m^i2js~*s8}7LA53R&J`Gztr-9;$qhHc|m z7t7%%ZXDxLc4)4Qd*V2@ege}6siHrTW~rCPJ1uVOiSIGxDWkhFAdUWzdS%3v-^tGR zM&B--%m3Y#{Vd`%v-0Jbsi|EKjrT_&H|_odm)q^;?U$;BmTgW9f{^p))c)Z3>1GkZ zjcQARd}i(R=Bnm}Itj#F{2ANP_8~=_hwIymZ?Jmuurm|rtiMc#WOglLB=os&wp|Laybz{UBKXj$<+dC*SroZcu%3+M&iyRr*lTupCU7geS_gMEuHr}MlcQ!u5$9`g0 zSvVIHT#oX&EO*BY86UD2SPwYqQJ9P4p0D^`v{UQN+J6@C_NXlid>=+4Ce@(mJfQp~ zm^WYWx`&;g9+c~U9qBi6Pc0`HuBwR>tS@p&Z!zOzl($B2_U*7E!~)1Tvj4edvh5Af zoU48A-^BdBfL->ab>P1yPmXr+WS3KgW?b$RX2IQU$`T5x6vZs@bv;wy*uNFUQ_FT(lnjCj-MTLf zG>;k7)7_+*&>U(grnp40Qj707g+t!}d+@QsKb4)#1Sd9m7y&-T;ymt?d}V{RRnJSG z!-+}Wz<2V}Zw$bxl&7%ODEIwzzOQ;y;~{?s`Hag}gi`sVwPBm$#u_-dvl}9yjx)?89GN}_UUXGBG#A6^aBjRZgmV#e)y%mWIyTRHwAbkK` zugz<>I7JxUn6gPeyDsmUDz_SZf_J3JF*>fWyd?kA&ht&l*j|_>um^@1R-*O|P_|&Z zoB_8lEf48$xV*9mP$;qH;rlSe#q8S#CMC;{@w!f2JkoOSsHV}WG~7YZmxNI6ls}8` ztI?G@m23-Te{_%+yu)Pc9=rU4Yel8y2=cE|%-hM|dDw4oVvAORAmCBXR11&mdDF?vJ0pjP*JA zZ8_zHZ)3rMWm_?3s?51Ui~%Y?#N6D_%Y(alKI?Q6NU}6OvKwD1FV>$evlx^zmo?Mdadx5L0cPNIIV#%q>c;d#F%*4IZ8ZI@jm6# zEM{C#7IR2km5=ES8k#js5ZR2~IUoi#S#*`ee@}#bY3gt6P$S_+hJ<0f9%00=-c%om zl&?3+;H!x2o8~fxB*KNRyAB@6)ndR$2mhB@PFM7%H$PjH(CbOeMas_i!x0Cl1Z&i>077GeUSO1 z)iqi1u09)mLRmkDF`r~lV7&oWTQ8LvD-$Zbzp0?Fl1wcd1@sux~cJ(@5q?h z^ZZ)Bwki{vOl4S?<+JJn*fT+p>TUZuxk(T&V!ScX%qct(IVp^?{|qo zR*c^MyXm`L^9zX^1aKh@)>a(6vjl3}4iB%uyg+{mvrlr9XqpJE9W2zRy#XxrP@em2 zea9H7y}l3Q*-*m>u5uud&_ChZ)xdZ4b%)Xbr${Ak~6&xw1q#`jvm_v;fTj2%cK za&TY5c5v;vtmCf?#jX&kaSBvG`i{$>9;#E2ODEGY3`FJ&LtN)|Ts4_(0_6a=V@?Zv z6GyL84*-(C)6R#4;ks+{fH7#Lt?6cwuptuB*O!6EMCE6zuJ_eEN|}lL&pPWK{)+9m z#5L7HjkC$(^cCGa!$RvzeD{_5nBLvkOUq=!B);SmYa8W64Y-=Av@@CDn?v5YPQxq7 z&u8S@T=q;NS9k}*{eY9izyNXQSQBk+M(3sPZZtgFv@$MnJ*UWVZ08J7u6*^#0`gd1 zlXT9SvvOC3EiZri>e~@XqpRAKS!2hbdEQB3&~Kg*n%8staAXaOM`w?FmMW4JCSk{{ z#C-8uhz?S;<^pvPktNiG(+Tt`sugoixvI#1j49%CKDWC{SL7&U`_K5Yz?uQsV-(%` z>p5;n69GQgWtDV2q%kJQ)aH7M)MZ2{=6jWAdQ$I;bYby!NRh#2=XS7e{WiRl@m)u!$kIcCX&vReWfc8Pmk$*$PmH$YeSfFkoWSq-|4w-De3OHBBu1X9k+ zj}xhVws%QP2&9(nAAmG(D+p@_dvd{okJdJO(@)Ir;COzwGW8uOx8y+&Qg6X@NBZL;~jddY-~Tg z>sQcrL81?F-10ozjoDvUiNNO#s1iBq#KqE2&Q=IbR@jzMD;;O%_zCQtO1CHR`%XXU zvEO!qtN>moo*M(^5*}Sk=Y4hz1(gwBoahAh?sVr@{%pr@Or&1@G|Bg>Mrg_Pp}_|r6bavc}Cyy|YAOR&MHwP@9AOE<pX&VT2fN^T0EhEL6qrEIIuouMWkBWZb2IR0ms#(M{RTn|~$(56O&qXMvRd&q6 zhQ5BR+uQ19w7{=XYoe3CKri~`6uHcl6AV_lg-1ar`hL1DQ|?A4xyn5?kF~f^1?|*8 zl?^r>>~isWuAUD5_XdddDrKrNUyxA!4Bs&jPb04pAAjuIaI@>2A=~`;q3+Z7kRxmt zp+2wpSLZcQSvhNbqANk0(^haaIe-4 z^e0ij(j*|mW;r0EuX!f{e6gy(&(>2hH4n76nJ4VQ$=X8a$@WioUE(bYPc^F>Ht0>&WG10Iz4wm$8LQZ4NuanZoic;) zI$JBrO$yBf4lc&mI@1EDpEc=%g}1U*5k0C4Su6saDa-)BZkoQ5M$| z?cQz-CcA1Q9_Lr=WzFLDT<$G3B`2O?h6x*|+BY+8nTPVPKb^ff~R>bM1 z-C3_|r$vtbqd%EhoO6fxA%>XX*|$<3+30JVuee(MYM+!$B?X-(f*L%gr0(ZMj)&l6 zPFG%MIY+)VD65X#)lT#ZSI+Zg-(QK}baR*dr{J%l;`<&wBEN1CoNuRUiK|`&?AMq5 zMr=`S0WW1iT30MZlm~W*NZtG@-Ss+Z={_Al)A5+^iD-lcl?RaL$iNVl83|j+PmQJs zTP8`l-wUO##BMne$tJO7~%R0^s3E@=ShVcd2s=T zqL{hSOzg7n0ZMyqTj2svI8%$4RRZ$n&2rM3X%W*;H>g+L6rXoZyD(Ipo`*d;W8qrzqun z6T=U}y&9P|(#kz?9iH?4^V^5t4Bza0+VIb>F=rk6qXOjp($1h+rd6~=&P0QA{gx~u zCV}WPr>(C0dKDzr6x)XqenodRDUu5d3+u!SO!+wC>`fk)kYEs~E@#wisz*W6cZ<5MvYT_`thc1mZ`nY<8jmLZ4ml4@ z9=@ZHy*ts^PSJ@F7Hc#3D0aExE?DF;VJ5|16a^+J8bb8b>#r5rsBP;lr=Gwu5{W ze#JTVET~c!kl-*cToXUlDDW)mDCbgflB0%epy-N=Qw@SaD&tsH5rKDn<=z%Ey`ney!Bur=9QT8y zeg1^`zevv9e%>TQC)=f0-8X=A#0jA)M*@QfmC@&*#s#GSf<+1mt3xz12QLlkzprwy zXw86^kz#{qZ=r?uAbH*yg)PzC0m$y1P+$?(6u-*%Gj++A^(1@2q;Zo{d?zduVXQT& zTrWF`?mh9XoJPQTl99o#kZY@um=rX#gF+hs`CE|IC`HAnIq2;a@&Xn*xU6oNi|qgV z9PHNw*fB4s8xrcoe=l6yT12M#d}@1^jodjCiR%Z8c!!J1d%IB8A6P#*B z2uwN78Gn*j#vF>B#9>SZEh>S`%sOCp@qo$zVUYW%zaW;+0>N5zS!J?~EAm}>akj!3 zkXmBR&N+ANww&o8I=fI576Pt-*c)W!E;>9%D+lSdaHZsh{MeNM^3#n_TFjwi3Pj6O zU)gI45|2Ig=*$m^Ol=qDzW#Qiojyva6IcynNCuS1bKaw>1>^klYvRrOd@y>2jZ9y3 z3+nI>7rCt(tE`4bq0hbnDk(nMRZY#2KU0kRTJ??aQ6vMA;eh-%g_%la9fbO3VSh*L zChJ2{H?Q|U8~UYh-c>4Yl%*y6P$C6x@aHZxtaB!;R*jzulXxEbhAV9>lzB$m)2a2U zj3zivO579`^$u#bkUbN+FPg7b_A}sK#ze3HADvhq6gvbV==76?6r752B;`Um{=C)h z_|BHsL-?@6QewSeH%P5?0#D&5_Kzez4ho{IbAMkO^?oK3*bzU>+EbqC)l=NDaaTC6 zGS-bI6vVA=Mqzr#4y$h1Fnn39A_zzv>u2Hn#d~o1?5Md>A`)vrJ2DSJ7X3q&)UD z;YSI#g$s#rug}5s=1m!B1EV+8-GUPUkGQ{+t%*l$qERg{Rp&*Qc1vR-1@!O!PEVSey-WF6p zJ6bIyq6)*cE=6w78FOI7k(ZU;49JOG@zU$^*{i^o9>o?@Qs4lC@RSm|whhXsh;&T@;@ z3*0_SF^ssBQ8S>@v9gn%9`#e?O)5b&MuJ;>m^D}~Ot{qX z)L_Xoi)NA3cefDoh|kK^Pv&TzHCTcssaeNWeyEa2Apr(6xC3HdyRv4C^oY3@7ns-9HZq- zH$r=drY<=ZCk@5CZ~CXp!`9Dx`Ykk5OBNv+^8Dv+{gZy7$$O#&KxSKKPO|)UZu=FreO;o z^IF6p87NwNJ<2c%{yDd!i4X;-d=AcW4D$Q^?-;{#?X`IpEi{P6Ea%KltUgp2*}k1O z$NTP}S~h{6DJKZpolF;4fP=mhqyhv&CcEQ~j#MW*I1(vaLZtCoQAyddINLmQEpNtTl4ewB9?RgC*Eq1NLh=jZcHpu#~MtFRwaakvi)uZ2#=%sJ84F ze*(u6ZhOef3kwW+FG~A3q%>oHGcPz-4*^tovBISQEO>@{4q~MRVDG%L1uOmSEv@GC zq&|FQ$xlMhy3;)X=d1}PPkk$0^C)%JmAcatyljjwtc6u0r(7-^+Qy)0z{rpiY+gQ7=Js<0o+@A_TG+!|;!EM1 zIhA3uuy4#i%_vn*{D}OL@DfZP3O52F>v&X>bm#3Ba9)oU5IM9;-p@BPLX&fJ07W~t zMdHP*g;#5ef^`cTuu2%__Z3X0_P*y%>C0p7N!n>d1*@4FWA9XR)IEp{lR6(|q;fZW<0M+F_Fe56 zNIq!+c>}LHE%S9Nw`kZ!MJP_ao&vg)UA9(uP=$E6pC#Pxt`A!Rf$AiCLY+I5QEnrH zE}y^5do`wn3}Leab{IX54jDYyfe;ggasO}6N7Zyn35rq63&Q4s60~?9jVr8vF&wtMSH+=5wDfNPmnd?; z4lz8=Duuo^i}iDMyUhU-5*sFjJa<>cbOEYkX`3mR2F}Yj`Mid-C)EG?&FpM@p=xeP zimyoQ@3|8{l|U*4yM zv42;b`vUZu?NMlXB2&+B4{GA|N|MU?Je;$9}WeZF^CG>e@_W(W$ zm8;EH0uqmx2a07%oTaI`Hvn1X-JyYcu1Pbag!6;4J@?bWRgLJ_5Es#XgiX7TQVRUJ z=Tcx`PCxX$aMfHBr8807%;x+vc%}C5%aCJ?k{lCL03_E-r=aX_r|blpR10nJ zz2;_AmJ`g0X1JC~3n%x1JrP`uJg30x6?N(@e1MFSGKwGcv@kT2DALRj>-}?kC zXF{$hMWc9{m$-?^M2^GUr!!c8t3eJONuOv1{|rM7WZnQMn1u{qH)Tkb*}_!fxS0JJ z)kh5iw$PQ!hc^LUmnXMn$==_?$~LqlKu1H3o;9`Yp`|S6 z&$0+$KT>lgll%B9tKX40u9B)8bODeTV23DZS5_QBor{z;gS|cPOyfha*|{l8HYY*4 zJ{|QkwMgB-sod;iOEZFeQm-o5H-HbV2OqUZ4@2-Oi;zn)zs2HjtJSkqW31fC2zQu~ z9-ANm!B>W<6itq!;m-EvFb**Byl;WJINn^lo9%W3S)_=s{FroVa~XAp!~?0_$;h*t75>#g zpx8=3U~2RWhImR|2vx~N4YurK7Q${|mfvq{n(xtaJwa0+>D#!G2=ov6=$4##_`I-@ zN)MEzyhaiAM2scSrXJq!{3T)xy{yKAjy=FP0MFxe8i&kXN_<@C+FqF@5w|g>2U3Y- z)tDzaA3{XtxV6&^UXCQGlb7!-{q673>f4FRf)Ucn{eeAsIMXnd$3N6vE^$U8D0_skLn9pGA$XV{5RJ#z<2gxKS z$z$Y;jB;?ta`unisNpPFUx>-0BK!uO;V3NWds`*#(tIuRM|G^M9jk(;>)ta}lVpW) z1ynAJyeS^y($30Ht66NY9&ofPw*|dU)?v6*2%*xOE}&A~o0EU@xWkt{37kMB9b_Jp zcU5N7@KsHpB-A>D-ZNdxoe(16!PB#;!hg0%gZB{!(l$o03t*EMs{PG}x}U-0BRRmM zeoVwS8WkKkCseGStvY58c8qG(P#l)OgTTSr&?bpPb z<^NrqD#Z@Ch*U<29=vjSlg9z%VF90_0&y8f(96Sq9MoV5OMxh)^=R;1tsS-nny-dO z`#pdR(}r2WQ?=E4^R^)=?8C1nvLN(&TqN1ci`j-}7G+yr4{1;?)78W?x9I^igZj6e z9L2lr|FGFbZbDU?GRijI#%-_9#%AT6*;`oL7{pGKjj?cOXUyZRZfY|m;d&Bv14L>v zU(@^)9bt^;a1^bRMA#i(kv$-?WKVA6R)BVImPf3)(5yLhPd&0{bmjK;Q|8IIhSf7 zoV<}$Rwl-}BSe48(IvJrj>1CWdDW>C_C1GC*v6kRk=Bri&(yq87&78LB4@|sIqQe< zJBCB0deQb1b9hb#c>j31Vl`Ro`=}f1_~ug)q0S6uUGZV_MPYh5s@=H6tj}qqcIgn0 zv7khiCkSm{Xn+iw?9zNj#b>3q-Y;R{R7p}PJ&f|u5LPP<__!|5xFQpDfFiLQgqAj@ zjUW}AxxOl6V()}2Rm8X#H&#c&(8{ujiwu|Jy)YTEP2yN08DZC^Q)Zl?6Pv-IZVm{A z7$qh?80Q+^CH_m{O8yB!hlcb_a)KmSodSWr`46@Xj~1;OfW2Q&Oe?2DcUV;BLlo4_LRjks&5<21{M=hns6<|;F*rR6Pj4ZHr@9itQ#1X$ z_cXb3cBU%a@8dQF;`cms+g!K^_hIrdnkP6XB&H3tz2~q&W;{wo?Qwv8oF7|TrD{vh zc1Mi$8v(bUx+M&Kpuvnz=j;F+#GJ&AMxJx{qRIYh^eAe3*Ky<85>$Z)q`sfZ558TI z8##J9RT77}11&I-kpf3=?`oxRtr$y38YAMO3cvKglkR4jy8R6oue5{k+i zjmC)|VS2r=D)@>oxNV?E_O~J{>Z;5**GpzX)cc?p-r*>A zc-B$D8(Dw-(o6N(iAKP!eXOLh?Y!PDLeUar1MwXd&0q~^7Oda>p3?dn^vmu!obCFG zxKq9tOyCA_SqEKlUF`PN&pa_ohgmUqyaW<%;K8H%^L0Oe1fxyW1*H)s|F0qcGJ=VJ z1=bdSi|3W>uiY7fG~mK^DS8$nk3VpDnaaNbtj#rv?tdnM10OWL(l?sWTc-c4_0(rh zUvU~5+2i!zOG7Gu_Ly)jar{+&&U+Af6~PSp5TB)6PrrF_g}CVt7vTG1{d?A)$-asz zjy+T#5VsY>m#c5}yHGOc>oPxj0X}IKsmbNLAnS~+7g?@Gywz3My-?87ja^8aaw>+4 z8YiI=dm{DaA4~lMn=RPzjP|z!52ssMA(6#}8HwjLNiJi~!Nwd_5+pD=wuFVh;h+1> zc6=%q7u+b=vo>qU|M!%C>7G2YjNuS6#t6>sLzv@~bFgGXC>-X_too4(9UQ5uT?ccG zY7G3u1h*l1^7NpBvEF)LF%hOPR`WNq+$=uW&pbb!QD3iy`HR<9j7GO?pmAV zHPWSt5Nr8BInemSmt*eTc`RPaer|Y~EN{CC?dr4a4)M6+p7@4+AW%B-byA@B6l%L5M8vgh)O=;f*kZ%NB63w}Nsg zzmsQ?m;+h(Ez|Eu7T!-zo-(KSo!PE9OIH?;hI{n%fMRJT+8WXn{kL&y|+q`}mj9-)G{Kfh4}aJ9Sb? z^i;Xho(}}>uA?3^GHA36BXIh}1&FbBoPlK7s%1(K%&z4|II?bc7 zVu$#Z#;@$2D>C^AlKf>xOM4D{q#12Bx{dy3^C&c&F<+^(j4`kP)oTCQf2k78N{>SDdT(3E-3&TY@` zczxna$GKeIQ^GUNxjMy*2>ck$IC(4w$(>?1LF&+nQ$oT+%GNgOA9m7Z@aIEbj*qGo z%QMjV^vtfv{=IMLZ!pAbSN7wN8tO&!GAD1Q|AFVfns((23 zo)-W3DnkUc3r5SL@Ikd=8@|W!L~oG#5Ql#UcVSU~D|A1>>n+q|una{`)Ah}#G}{;p zV&Nv=m~1hbv5SrPOquj!$?~&<3XhrEE;`m6G@_>Rw5&H%( z02cOJQRsEUBn|z_V#f@2*u|QPy!jlS1ALwSo07^qQkU!5WAOOB=U@?ZRfUE4UC8dz zyxSZb#yW{E2N^ec>gZoajB9PYx))LDFRn+`5gYUdh#BZXl0`~`uK}W1`epPVns}me zxQY?3CG3m00vR?~vQ%{qk^ ze<~JxB&Bw*BfND19&PseHmCP(e+#5$W(M}%X5+h@`r@qkcep(Us#!#s5e1W`fHMY{ z1Lt)sbP#zK9%d4w7EgS!%Ca_7 zGq#9eNf>Iy>}q>&%+n}7;*=>nbW7;4wXB{$01gS$-d1%-K$W$Zme*j}w6+ZuY)mO; z+p!R|sPBUs+fvlg50wHBIaw*D)h0E9j3cGxP}|Mwfk6qOapK5uV8>Si*nh@^(S|Y+ zqUB`5HaiRL+>PcLYTx3UIo)v`{2y2URLT*$CI>={c}_iF)xtSa#%IcYPbw>*hR&(4 zLw8r`z!Ow?Ydj+>9XUOlShdyPZ1btB3a4V$h1Esfc^-aBwfW_KQo5b+`Z#T}28j0$ z$I9{czkRO|q#f2}r4#L`tu)50L%Ip{7v!uI7*%FS5eBnw|8%lWIQg{prV!5q5WSwV zHg5(0P^8mB^L`W2==@YwTYp!FX@NbPPKXFz!ZWrq^tf%BJ^W4*e%3rUnc!AMMLuqy zb0P08tfPOCy65){GMf9fYOW}@8>($d5Y&WU71y~=g|xJ!&dMY8uf1n$V8Yo?u^3mI zZZGQXnx~Y;XLJZ;!e;2czTG3GX*TzE(2mT4z}V~A7`Mkn(`Jb%1-K@h08^G;0gNQC2>tf?XCqiAE=`Clyi~edA z*`Hgl*`%>{vBYtL@+kJKZvbUhor$h*#sqCYFJFoiQNu9n8Q7<<;g3 z9IA>fT!fb~WhIL2u?qUhx*myQ9z8NYeGBboCs~$no*f?+1#(SfiY%IfE%y0hYi1@0 zN-|c#xYU8F395!J6Zl%8Q{)N98&Bvu>4}q={YK#2PRSPrA(hSy4Be(F*H9i^k;w8o5Hc~0gY*KpOC3Qh7Z72TwsIKey7+Zbd21h#+_1oABo2N1 z8pdl=XtP}k+}<=`FjC;KQ^t34eL8gMio`LY5;vH;eqosj04O|X`Bt5U-in4&++h%yQb#97*yRi3h1(GmO?8R}X;O z$iN*BT#9wg%yKkniQfgg=LA-KOuuL3fx!M%tX70c+*yMLW-PfqM}MyswV`XX*o3xJ z557c@;xfv#4XQF2M){5GTHwC zzK&_4H1d_1NCO9_PxH+(K5r)nAbEs?wDZns=1AeRm=ccVK2Q<5jQaQKUVCSCjEPhI zGUMdu&TKcAoN{n_^Zx+Xq+gH{BPtF*<&fi?j{UHII&|@aeRY`k4>7VlyySQ9-;c_p zbX}}oFh&V)-2=E|p8d!2pmsRx#o4Lerg&M-G4(YX{eMb<3i;E8;ddMiV~xkPT(g8- zUBzx3A(6K3Jq2|UP5Yt8ttcbZ=jl=IQJnFLP|7;eHMymvFdD75U%!vg*8az9H(i@~ zJx@=NkLO(0mcVM3$NriM=|0gJfyiycar?dV$o(lKV^QilNX&tb;J-K>GtTe+y>p%< zxZQBLBPhqG{0sbRa%-Kc;3(y{0)5SAPN>&XoWI{E@38)~Z0=^R)sV!!ck*Mv!DUiM zZZrKV&Y^JYb+LDB1jYcs10%0P+|&w@BvKr(I1RzcIP}hO*RQ5(E35U82{*G0k+r(# zz7OSD&d)?EzNJXFwZSPXGeX&g>}agYn|C=Ql?&IOf9qYJ!^o}f{81#yAO&rkBW}`#m`AvC$KO1DHBpYH6(`FF zBeT;jY`ib0e`e{-CDdn2b(-&P3$)U*C|^Yz9D(#Fnyss9%GdhCq4M?~33xZDh;h8{4Rr zOl@%6RkA}WoDBY1_BEqvb*PUK$KoafbL_aA90gezph5ot0qOMitWObG4KG-k6Xv&e z^CE9mJdewzFoaT-hg!{Vs(8LBZqbZ4Hwx_<@LidQ%j^qvKAEd_m#(*yfaxiYXJt{q z&PX`)1Ruh%EN{QFHG3UH%UMOV%P*GQ8wWV9#`fCKcyc{L!7XEs8TPM|3o!(o2XocP z1eF~HEgp>Bw+5t)yQmgvk}HNT*}%gP8w1euR1Sl#UrNmun|mSwyb~K>uLC^&MRr~s z)S|ezXl+tBXHsOAd%0f?C|pJxK3E+9Kjc;yX`QjO;-psa zwTaWbJ7)%^U{dPaC|QvP2I4>jXFYn?Ep>X9I_96F823YKt;apF&O=8g30~iHlm7sH zS7Ue<;@U(Gp|;>Jsp7CaL!dsnthM`Gc}NN{{{Ur_V00PAKb1mSnq9SG<)rp^-X+zw zWr=*aO4-{C9twie=RNc^i?0)uZS?;6Te>{?yU8gB{S+W3#dX6|*j7k9o~atszwSCjRk<4DpY z_;cc!5+645*HXAxt{ajSWk3i%;GfR7^%y49?kwlI1tha`EFU==7~`Hg^sFnd59)Dv zb5_%#on`*fxbwHlrX@^}Ta(-66;YMetWu4hhW`MHbj>ag6Zl%{-Wb+volRZ7T>PN{ z{&=byi~+tT$r?6ZO$Ke5I0d$vt$!|~cdYnuuAg&qEO9N%z%qfhs+=Fdntj^d{{X_k zx73=>XssgCo(ZL81rV~Z8E?y{N|k=SnBVywPr_pt{44D-r3xM?CPv3zByPW*b3YGV zZN4k`wgOJqS<3UCmjnE2_rm+Q;qZFEuC8FZmNv&?NI%xOpA70LYw?=zhGBg3#y0le zcZ}!#+AXZb(H_rtGOeA!&Q!+Z0CUQk@qdH&Wjs%+*dQftZTE=)=wol{7}u`M?CbKy zl_Lxrp&s?*p9|VMABg&dYx9<~l>-se4u?OG{c36a61h{|9>w-~OpFfIUr$Id|;OAc5N)j`*bWM$BOD0|Pz(0M8VMV$YsbhsfQY54ZU> zT6A5izyR3w_vuI<3;-OQgX#6EL1V>!AekFl`H(5x*ykh-qxuTzJ{ww1 zap5I#BZOPIKtKV{-Qee~Vf;vSI>RyqB)e`SA1ElGXZcrM@TiFV9K+^PZzjp@(Lbei zP1>3>O7br^hF~oelKGD^Z`|dFB=sX5IKZhbv;hmtDcFUu6D|%9P6j=zqIFT}$m9yqL(<2CW*74$~`4N%vKhq zB+osyybwz>n>e3rNLhf!GskW!>fJJFch>Cb9O*1U6B*tg8;{||Y$N+ zR3v%fm=@pyNaLsLUYw+n#~8NGOZyjJc=HC2s1P!8ZJ1znJwauS}B5Qij>1veXr&Vg_%d%t|}(qm$be%1iL_=HgE}_r!MW z?!}p4w|B?WB~(@ptX`KjRM?&xXAo9XBGkcesZT1rf=PVX2h2WPD8b{D9P`t)PowF!I#Nj;xw&~} za%N_chnXSoj@^0#Q|%&)RNLI*qWF7rZybMa*DRr#L2(L0B#n{So(JPpJUihbuIVds z*Y_}iBO!_#HkSlro!JAudcDr09-M)%F6}I%I6vtQsz^QXSfA3o{{TkuHjCj~DKz-? zX)nV}()pIrltst`9D+|uwJFJ6A{vTzY@R=ccIm=lQb{<^LH!M7!)<4K9L)}`rI^r#ETx~42?K%GsqI{? z--&Lu4N4omUeeliOLJ(Z6!O_4DpUdUf3$xyT?M7@gzTW(WV<}ZN0AUn>`LbV^TFhf zDwY~H)rr@h>tZ{JB3s$m?ZY@_lVBi@$2s-QFi5V(IFOercB(`e_r?G@yH&$ zX*zRFr)jR3Ay!+9CNU=F8;LEP_c-rd_Os$GT75@V{>ZzI+fGSXqeANtWIuEQnA}M1 z)}i6oa+V>rdl|Z+i~bT@)tx4FEt0U|TReJ${HcOlXyFlC=??b*?q-@&=aIm`0024d znsm^~iFFAK!PYoq*ty-gke`_K1LZWZ=+}2PziCU2J!4=<65Sog9;@qHQ&CG(DauXg z%Ej-z-J;gs9FCY!arLczFT#4Zv1s>pA7f}kl-l=7jgSH8exto+#id6ZK{d{&7?hvi zLxSTO`=cM{nz!Xks_Rq1ZrX*!fSICL4#$hP12_N;wB;zh0ur2cL_cM^(=~LryN#ii zIRImjRde4Xf<5zFI+@3CvO1is_)#bMH#Fp`Z9P&!`_vW#(xucw#v4wXu?;Js6AkM9~ zDoz5N9=-U_(vj>QF)y8RvC3_P%F@3DiRFG?gb!NR@s^ooqf4he5>0far1MrwjOBpH z2X9U@+OTZH&2ebVqBOa-nl>a5xdpNH{vXPn^w7<=ore=_w-RlZLl)h@ggHbbzJCLn zj&zRR4MsTPa3gfxx<8pyAalEraz{_)O_AeR?aYo$f)i^l6Dr$D#t*0)Y0?#%d(g=# zHx|PRPBVoEIp;rfBBk%BbRxQTTlpi{yvk4xs;A`WKBvE}bp8glyVLA^Lwyf2Mj(Xw zoyPK8r~9?c%{jReOp39yBeoFz;vUe-yKbQj-M3EX=@}lbLw!xxM{W#FBg*rCQGT0XoHi0 zPtAeYR*1r;kx3YSFxSLai>KMfkwI?X>eX?E0|P%nT=ndi`i7J>3&;J+Ka&8)HxtWa z>Br|?3-}LHo@wsbCI)U^AHYYi_)GfQb^gf!A7!y}WD zaa3m%v`FQqiyZ;Qby^gQ7|~_Fx<%4gP%R=6pDPGAl06t>w`%7KmHWivx{nB0TI;EK zqux6pWD~^52H;fS;Gbq6UTPWB70scWWi;AmsC>8b=ZT7YIOtUS5ni!jbq&RYGQ|59 zL<|9LRQhzU7}O$`(^R^*c?*~&Xp518+fLl$@UKMhHQ2t=4Y`_F=e9pEQn+PeaNRTN zDrUNuO|>%xH+zl(#|D`8c7}8Hvq^#TE^3C5w20@lK>8ziLRhSY*BoG$}z^$ z2iCdf^)`yof=ep~i|2!BI42vjao0GglFLm-0zEwL>$#%o{{RAGR`{qm{u52qW|-FD>cd~Oxuz8usJnej3ikq+6WYi0z1PW8rm_BcOpQk(zgw(Wd)#iaZ0`7_6*{xzBt?fXU!{?brk~ zYyckQe_G(FqE`@PKx_fiJaTE0 zVWRuWGk_|y2}G)oD&XL#z$B7-b>gK+8e$5wC`0pL@O`Maaon6nst8u-e+*JaS}BS? z8E^(qp%nIrc}6jjk@FmXpL(jWvKGs;fH+cpIr`EE@>Te+v)e|)7F00JpP#yvL-=iaaU zB)gJN58pt^^4r~S2X|fToMW~MezjNPOd@MY{9pQRlV4vkl@Pg+y`n{eq!J@cd ze1fEYU{_rArE?Xe&p<8v=93&`9y{WpExtEWyU1>Y@O{6}rCE{iO1?7v03XVr0xu}w zw(Z-ppmX2+YlzsECG%qrs1zQ|!!%TBjkr_OgY$QytY?fYP~Oix7E;b+n5@AjjWSAf z+Umq(p54%dUAiIdrk|f<*B}mjxQNq8EysD^p^O2u?S#KoDQ5e zYeP@*2a2P(V-}ThsM;|YGTJg^4xIL;Pw@{}OVzg*%RiR+^J0Z#agGR9VA#*88LC%0 zh4!-`k=h+capnz5-8W#IWo1yg{M6LO5o+lT&QW@^(MGeVv_e~(cq~rRb_q?xgWTMwo z1BTg73G)^iB%?u#1#0E+bM>xoj^ zMmI5YnJ(^R%!K1DwF=`n^*9`GIIO!(Vg$mkgtVEt$1zOIe-h{URolI2%WoX36_i90 z8Ev51fyN2zlbqEPs$7@zBNFb$-O7#r6;iTxVoK`h(~i$V)&M5R*xV8WMwyH*d*|-s z>MGa#Aa*F*qVWoD9S|%|ewh-C{#AhbhM?-fBDp6AAG#oC@u_ufMtHS^vW88zi+}?E z03J9bp69J6Q^;yI>Q}ha1*|LfnZ$Pz^Bg`|KQ2hibH`8Cy&J>hP`%MC<`?n97nTqz zL`x07DakF*PPncwTD-NE)ni*o&?5P9zBf6>PcQiN99M0nKDB#mY~WkP6GppaFcL_> z!RLy>yPI=2xvDIq{{WV=%W!|%+mFj_ao-W`nQV0V6-LF8l>20HkIK7vtS*N$YHmk$ zjx}26ejwQo_(j@fd8G1XQ<)sLGx}8A8oD{jZ*LIZBD`rUSx0*982azrIb16_B3FFgOOP zYI>xXYiDzq?=w0G7t-wm`+Zw2j>M$<(qGV%iDNC4#Je_F}ZG*sEfNogD!ZTrfI z{{Udskjoh-=8eGzk588$h_1qYI>~+^No>N!t#34@5jsQ`IN5r6V~wO^9D1Kx>Bfts z+TY#YNfMX6+vj1J#@IPt2*B-ANqDdT8ExaYj0N+qA1{w@^UY`NE>fnE$arJn>~ULp zy4}=cJCH*Y$g;A$=DbrJpj|7(> ztAxUXp1o_-G|S6d-wLh8#2TgYz^iPQ(A_jqO)v|H!XVtuf>@l80`c0Y_~*h<3wG6X zkj)rB=`jT(Y3}L>1h1*bA4=@}A*Dm7_%lnmvAxtT-gu3}+uKX!qssW)8OB%z+7y9| zkV&q{$w^%vb#=(KIG++h;+xp*;vOA3ZJoSZBek|1DwC7Dl1cjWT!fKcK-*_i8UE{x z8uULCM}1)vOQ>E$46aLHM~r(e;#t2+^UJ%rZX_k9c3kni)`m3OYht{Iapt-&0)hVk z30?NC4=# z=Z{*o2BiYFM#T9}A|^Mva_&?(rhm~oNXEQC;Tfbl+k_D<;f*|a5Kl{QOHxuIB%O7#~k`o7UJSXKO{&u zU~W0j`Rh^14DKTyVqgw_Ugm*VbWfB!kh1~Y;*hyPxUSLH4E$7UY~$q@3%8D(kZDDl zLBMGaMsUrNdH(cizzgVYSJ$ians|kHI{tKO8Wlr4PSZPqjuZ(A9FPA1T`Nc=WhGk#=L8Y;&07-iGZ0V)aDSCX zX9OITL)Wf)=fq&R9SBj(3%tygQM^2B6}_c{G5JM3~8vkh0w3wBXRBN`c+oBSDdGi8E{`G z19z{~^H2WGfrexVe4-gx9OJ0Z*XA_oE!H+3S~ghj%CAfeW9g6Q>qCkKBaHZl>e@5` zn-0#)xSp6C9CiNi{63YD@QQGnzNVPY>r`xK(fbo{HWQ@uV@2P;bF(pM+U`P7wdq=0xi zrHOp_8e#(N$sn8&>0JJisOpzGZM4(d#{PUre8M?ws5`hMa(LpjR#`(#shJ+&akf9Y z4|C3NL9Sjyeq!WKA9?c?aO8c_&%G5+3mdZtNmZ1`@(qjtAa}=ar4(|7&mFk1w1efh zzY<64&>h_S=Lhtv*3ep8N{+7bvO2OU7|92L>sPFGjW#G`^R%cSok_yZOZ4hNKZg|^ zjJie7iFAJ4h*-x5E)O|Axcn>Al$pU8uEr#OTzZ6s2IT;qt?W4!U}{d$ZCIl* z#-)NBw$q*L zC1Uwg=why@j=v;pxO4KvI3JZ*vADRpy^01BTSD!IouNBWcWfxlbk<%P(<7Aa)T}p= zj6);He?>L9Yogg?5H2nVayJkzOgRI-e2C zjNnX8Pkw1xr>I^pW4id4Y$34I+9;AZqmh&aTm<$5@u~Em8R?o&hcx?X(s{1d9llx} ziZI6+Z>3V!yinTIjK61%ZDI{B*Bgn)OrF^_n`7ZCuM^wFaim_uY?Dr47SlWNoMRh7 z$@#I2cF%fATSjRaMM~{l)zm&HNfXGnFxx7lZS!Mj|13b{VT19!i{65$)~i^&tnp@27(peF6P6pBkrB5a&kZ%VzeXh?vN`evod?V=QIW@h*v&eeQK`hKSXHxRLCM1ZpHT<$`> z3GdILt-l{>U-3`dn|oMej@DdkwuCC}e&++OM|{?%r{M*?*Hc!txSkt;LpnzYVptvz zUgP@K+)Ho-tfS8W71-pS<0l`cKDCpT+GdG9TRn_@>8$u3J9$||mo|$YWMVeRIL0&T z2Wqq7-9GZe!`60siG?Ou$`td#%H-f5o6zH-s=9`yCB54uPj4jhDQROFkg3lg4_-a% zX2!`)qg~vKi6)r_M65_v`f*9SA+1?n-Yp+MiDIz@@WqxG3qA=Pk<<>|>de}cc?BC} z5w}STs|@u5i7I`tD^Et#uB5g@a3PSMKrn#(bkAy*?yfGj z7_b+3?kz*O3|Hqx1+&$+5=VZ++NHbj@@i!k^5NYTi!wrSmhZ{*?TXfp!ceNuG$^3p z008IMRheY7wNtiH*916jDP8m)olN^JF2hK*+KP}vz~?7ExjwY!zKzjZDb&J82g*B- zwkOvp|PJ%`)pF*-FYyU3z8W5vSZ~y4{~u5DBROjYx*zMH)Yahf{@q{JQwkM553&sr9a93wY$(&3htk0|=}Fp1dA2>BqG(L<=hj-AsVsA2TGM{{T?^Dm!}t3jEQTI8qC+ z?N?sg%HE<5P6~y`Cp|M*SkmQTbsTQPab-9d3QkY>`&8>M$%xU3C%D1IHBwUIPcLc4 z2`%?P`cvZuXi3no5y#+Xm5+PU17#lkA2;^0GIt_r8Fhm0aIP z&ctxUE&}!(_UqP^=HdcfZNp z2fb%mz0cZTd>}6)a=#eqpIq^tDoG-?l4kQJSros_69s|5$6vtxPG|zmmwI{+GtBug zHxyPQpIi>L5t_{vZY4qoEV=n|K8FWB)QxE!)O(>)s@ZQaF&}`(T7j+J8?CTJB_t3` zE%$lpl5z$+jG8n8c=aeQE*><6l&i292N=h?@PEdmpI^3wsGb>e{{VI{RN!?7IO)Yr zKbsArxQ00n!USaPT%Mw*jx{kVy2e~&0p;fa3}c?&^gEQCdZW#}S8Dp`npXnOFifxa z*@EK(7$dM9bJvUt;4Zu^HN>{-VvsZ}G3JRmCy+yDzXb9A0=|X1wzj#Ap}B!&5^~A_ z$-wVXU1`?xs%%z8jkp`|7!iyW9l5O`QcHGB;~8v^Ez`7*7Qm57_OSxOf*7EZKvqGI z;q1eVA5W!q`b@g~vH25O*+dlyGnXv8f#72!1d7{u{>yK%Zt$T6 z$QNV^jMB)9fzA~5{5Z$yNxO+eVY8o&!UAR6-La)jS_#%rZ0Mr+Oo_if$DATP49t&3;{ zl!9q4tQf|?qa>;j5O_Z*$>+JHDzQ$%8cnO&9K4zri1h+)H4Q>2V_%jzE+qM%I6ore zar}jGdZo0GY9beZG^+vTfPQS?_pf+CX>&FcQ;FQ1$>pgBC%EIMUt01%7Di6L50*Z4 z1r7#2Wnw!0D;UhV@Yf0axaeydYKItWnBWrA^&K1-s z!h`%>@q>!g8jZGm#MJjTF2n9p2$R9vIabUzL2 z9vIgy?&P(%xQcXm#BoYkgOEY($7<}X;hV`>-os&Y#^=j=bUg?1;*xzr#mYIjw{Z>` zj4CjkU}XNBcd1iZhD0XSjPBS0$}k7$dy({~Cf?$Wmc)x>&1VdFni7ZjZUXJkUI6!} zeU8pii6xMjz*R*)oM%3@pLcsaP^(-#OBiFk$j85a2jPmuk6rVpDQRZ|Ht(8An{GWR zB-mXWu-NJLm(6!?JFLUy0aycr$Qj0Y=bF-rXoJe@18!sYOPq7-&#$+7rDT#cO!CbL zKzDEGiRsIC{HkQTwQn*wrt?S}eAQ)PpRamau-LL=nnC7FvBwhNox_}a@yF{+d3kSa zO0&D*U<~cfI*@B7=Tte26?r95jz>KA9DOS$;O}ghF$jVbJ zY1UU7jqG;ly8-2xa1}>WkELs!KGJPBVPJIXe|i^*hfO z-YaPDVGZ@I&D4{5j|7TK9(V)$qz;u9kt*Ej7VO1~BJ6K7u0?Q?O4E6AV2AA4?_GX? z!s^VcoD^VOdXhTPOHB%@uC6o1q6^;*%Wbwj=*7_I2Y^cf!Oy9$6PK1a#~y~g<5klm z)NEZu!qu(6(qp(Sv_w!Jn3KjZNFecEJK_zJYL7C{9KL7F#vnEWo`W4n>-Fnh@mGn% zw3;YHthUQ8M$+Xy!2loY`cs-v6cT#zTRKLHFT5qK-x&Zl#x{+8#!1io1d&|eC0HLy zNVC^|9N#6*fhDg=E#@VM`!C4)bT!&LebvW7z^^v=RLak)uN(HnbDr65G4(xb(b(d$ zmgUD`&5fsw)IMI~2LOB2rN}@j44DJv8k^}+Afx$SMsz4j!U+-_W+ zSZ%=R&wPF+t4gtmizHjoP80*sQ61;n1BgR5+y-VC9_JMiee$$&+mcj?17L7@=sidE zp$xDj+ZZKEkFQFRCk4q!B;mQp#&dzk=UMQ)jW3qb1VzqsoMWiRsrC1%TKi!|^56HI zmOQ8#!TNTh!nrNN%*-VZAl=qJ4&3^hb1Z~^s~*jsPxw+SsLZ2#Gc#=jWOM#U>s77- z$jXDxT((%_JRS)8dwbDg++?sTut}q3RxCnw1Odi>!lbpe2%D87L`A}FZa}~oqXskq zB$o%}`I{gPnCI}QZf6lJK|w|*%h;wJ6tZx<}@=q&g}cw8~1=RcszFc)mx1|#@;Rda6^sLNg>M|d+~xf=iAb>WQr$N z$;oe&sK7s5R&?5XnGBJo#?p3>25<%kJm-)(0 zJ!?r4AC;J7FB>ob>N?&M=qf+5ZrvigE@jCIhvpuD_5kGmH5~SK^4&)&!v~re z;F&Vm#xe&(z^Ba&=4RN&Fb4%jag21y_B6neAZWJ(^2vh7AaV6M=dCzE&ZS+MM&dXi z0zJKbGgae;Rl-E>cHzcXCpaeuu=@JdV`{N#5-_)sUujV8PfVN+xX(SiAHskwEsP57 zH=Yod$qI3f!@hcdDp{hnSz|#Ygk$9+Cm7>7{A#?`%XFW<5weBAKuGWUk8f(R9Bmw` z{#Y@E3%nn@+w!90B72KiTLSQ?Jmbq|_UrgjRz%Cnf-$|yZLH4sA7-*&k_0Ciz$2-_$GJRK75uuCsC=|&kf`~dTYqFQ4JZN~=BP)67|2C662cSU%D~ z<$mzz+NFl#_VD>O^TV+ba;l}Aag&c>PFG`AG_7u}?Bgs8c`BI_=Ofo0bK1C_e?^*i zX(9o^ot!eLINT3^t1Wc8jf^)o$Ig=C5fc(wNCo&H#+`8K{bB^9{80DgOY%R~_q^rGcZ2fw)GDOZpWcai4$ZQbYEOtAQlf2tXj1$RUb@ z$5D}t;~A@x-4)v2YDW{YfU%6RIKUYgz#jB9^azUt1?N^La7N1vaB@G+YOUCwW>{Hd zD!(_E3Kmt3qX6^HMh{NLvNap4iElic2mq7~qFtPBImje*@Aa*hc{dpuA&VIc=C>z5 z=cPxsNfTqaDlnx`6;e+io_>^;g52jM(yq~?j^k91<~eAF@0-_w)9QY;xn~%+jTYIZ zGbte+UzxF<->ps)PSc&_lgI%_&nsgnNX7x{%|7Q;w1NnuXGoG+LT_WZCjjn0pYx{W zaiwCt#*Q!i$u90BVsnVpg-`R5S1m1LwnC9d1PP21iMh$>K+j+2z^X~Awbj$A*vLVa3iwEx1vjB_^GBSOs=^x4fQS<}+;+&{`0Rz2BxptB;GuE_7$;#u=dE=Ax z;8V#84oJ;bYn)|cP{jA92&Iz-R>1TIn2wvmldE0oF{GtrHd1VCeZ91H z*1kew7?43OFi6Kgty$78BC*tBnm_~qGD-(hj0iu@vVJA&D|O-K4(e|7`?R$Tr~PuW zk{J4Mzl~*4q|v1`?s0l%p4yW|8mY)9zA^7zABMcrw}xa1BFGaM^vNHg6*il0bn7hz zBDa&yxy)B%uy(_%pFjaBPy00og{~gwNt#Ix=^pAp&5uGj9@IuXM^abN*_BN2T*8DY zk_TPb2d+86uMXF4B%e{4TIS+qS8RE&oE-KY0IzdUH!_pMBQNGF!+b{ci z!}+oNtClU`mK>osJGSXA6V*{*~(^IQrL_d@qZ2{-H4(EGnOy zXa4|YuTJE08yM$-SycFoj>0)00iVvBA0+jr$WHD_G^nMH7xCv6nM4j1B~$*;#~B?* zZvAU#X7R&JLW~j0^PF`Zc&tZlvIYvosRRMvky|k&PbSy5kx1if6M@{Eel?uUAX|n* z6B2&TtM`CnLk{HTwJqjblDpd~2r9cs-Jj`HOd>FflI;pG5CO(}ib$npK!nKqj@EK; zPpRXkYX-C}YHUYo9k-ZbEEJ!VGx6(zo|RtV0R~2nFr~70@_Fl={{SyaeY^~@?T+EF zUpXgs2OTr`)YqvFLD}XWG6QwzACFU0ahc&{H!`X!?IUq){{RksYSIJ>_$qMQM`52& z)~mrJF|gQ)7aRr8uTkxqNp3=tObq)sat=B68Rwo4;Zznb#)v|dkQ^N3H?I_~SIgMI zyEi!ll_QLg!l_x@ZG4!5wn*Bb9tTX3_|s?9)g(nEmSM&Ya(}z)NC|F~F;`Ut4!e&T z&-vn%L<%EpQpJ93l1Tar%omAr(l~ixoRXz_I^d6A!lg1y3vgaMfxtN<>*-7jZxq0| zghA#p<9YpPwT@(8-lR@frqDn*!N>=`f0b8;JE9f7%D5^(-uWk<-&6eQ^2Kt~M=F$A z4g&>pLXPLJIM3@z36k7F6teD=q6`8CI$(9jw-bY8*&33n zSg|3v&*A*4xDqsrw$?!i!8s!s?md6{)L1S}Bn2nkCD@Q`AZ$Q6>%kv|N+a@#4CICb zkUEZ{p^`b^V79jDwFq429G=7QsHA(NB1t@Ps4NQ*xj4pn_WD(%CQfYaV{tct5MzU-urNeq;1NnPYyU`;#3^*)M^&YsUVFbBA&J&i};HR!V_{CC7Kqd|)mE;e( zGmL@UXYu}2ST0>+yNL`4ZV26sds4|YoMqNhm_-9`93J&o$}!fj&}41Jv?*Qzwcu9@5xo^1}n3IsRU?p117HB#}ml z%r@=~lKn70$29){wgI_}hyde~IX&^mprouCl6e;sXvfnORfwebaVt+8jBt)aVBm~($o1o=wR4wx#1Tv8z3_wwT&x{gWXw^?rPguYuJ-KGSdoOZ#@S$$^YJMji&Tw(GC?&E>z zJ$)({*0E-0cbjZS1tVjH&j%~$dE=gNYS5-5LktQT%R{%}C!{hqks0aja25tvNz z!h&6-4WBM7G|MTgM7x=2aU(=uS>Pl;*oY zQC0;muf5kj_~$({&q_{1QEa7aqO>LCn&NAMGmuGCJqYifzP`0*G21GtN4Jniksi>e z(417pON)m)86$D?w1AezM;v<9D|=}mS!9AciDs3s8PtVL{o(=O4w=W()}hIu#$}DE)++E63 z0KP(wnJ1o^AFU*F*rnf_HKl}Z>Hv{BZ1KXJaxB=D76#$H60pFgPKD>&zF1ZtsB1u_;Z988bJ@cGZXS$Z~ zZ2j`?7(g4GbJrx}kIJ@6#9rhR+g@DllHvE62v*1hoNma*a6kIg!))=$pvK6+;Elr= z!N|v_HD*}h+!`?K-OIjv@kV~{LI+ZNRjZRJb`USijso+-s0Z|=N%!S^2RqFqa0I&4<-zp4@#XQNY^Sk^~EXc-1AQ2u+&6Px}baF zmxI6q@}=Adu02gI<<18`N<*-jY>ZZRrD+A`y{APs*NQ7Mc4Eg3F_6X>`r#3Nm=&VM zLu8NAv-PVM$UV*3>{6IawuU+(|jwMmanlxv6UQDLY)e&Opg0H4JMMAgoHL ztjxp#+?;?xkNOu(Zn^r`Ry<>Ob2pV^r>j3;NoM?ob6y0qg6CAcv%5gE#~6`F3d4c{2OxvN73j%i zAyBbS=no$(XruAM)>CTci8~o_U3iXOUdqZaf9Io+e?n_c+xtW|>7}tA$rGQ~aH#|* z12fC{f&D5}h&FItvFg>8$}2m{vJy-#c*+>g54T#>EE!R!xM;C2RX7Co8OPW36+vT2 z=ZJ%W<^z&)1`k@@@>6bDt8vsJ9R7WHAC+e|X%(QT&?xfE#rWC-5`R(D_pRH%WfJ~|^(c&%6>;Ol<=~o%&6Zw$^K+l7@c*k-*as4Y7v1@Zy-64)9j5n4K z&e?37_x)~9% ztc$y6&5oYmkF8o0AhwbuR(~wUS#i69$DTiz>rh?A2b&zbOW37zx@0Umg&^amGIR9lPV6jI5KhxG zG~1Md*e7<;xN)DS^Q#GJ5)rvUJNF`IrvwkLCZzM0Fu^7N09V)!-Twd@r6uCt#?cE$ zBpkCaASoR=?b9Rh^`llB7FOlj)=m2r2h5n{_RrALNb}*m&z?QN^OZRRp!|QWEON&R zNgPosjk!GMk;Xsz)mBG&kPFNin72-U9w{WavYBLu&SGR;yeT<7a!INJ z=nOx1=7A9;q0ULpJANm&I#bnJBA>l-?eei^?VOtCWYx?#wYQaKD>w}yMgRf)Jb~0_ zrvoFgr^l#S*m+UipCwgy0UV5Wf(PlqIQKO=iKK1`z}p;Aqe^4ka!&vgjN{w!r%Nmb z(OKF!uy6{TWq}8$L-on5xcp70S;6Ei^2Dho<_jOp+;frJ zC(!m3?D_@QQ>ES>M20ZT#jsfyJF)4{Vf?DTuMLTBHc58MI8QN%QbLkW2VR8#06bPA zYctJ%99FP7X%Eam+zMNqnzL{$! zu#qieL~dP(#~XO>+xpPjZk=qlz(gH})eV;U2|S*@{D1YUJtWpd=`oTSt;&F7xFLMA z&&m!va6d|X{{U%7Qg^r`?wJPu3D4z#YFe=3(={E6kQzA^K=}sI_j`AumN5+Rhw~av zNZh-a9#48H*g20Z(=>x~xBEh85I{(k#OhhbdMaZhpYissX>Z!vB^LJf(XQTn#ni_Ze&{Eu!9BW)scEE39lT=N?`Gu+ z@-$iJ0{|1ybn9A+BiqPJ%QTV*!z{CWiMS4cb@i!}x56~9xqU2R4$&>P=nisvXCoa! z^y40av>Bs`n23adR4x~g20aFACJF9=#G9`V-AEM%)#PB7_3PHHTUu(6ynkr9ipd-n zdw9lKnDLGMF^(0T`y-S8|Hj8K$|;A;+u4>=lp!`}D(9TZsluFd+9pCYL=J1VIfUkv z^RY+{p~zv*laWHshY)f~4*7id{SWT@hx>KEp4W9fugAoTX$5G?g}`NRH@4(2*uiW? zG}qOJ^9;VGU8laq+3SaHO>AOhb{_Q8La|&QJ&)1el@-)Qc2`k4=}pJU1NN;rP+{I- z0zYr0&_czK!b{4b)@r;z01(G|kX!+BCn_>zlcMD}bGcL~s`jUJ+WGw}^Xz-JT=yew z(HmTXFI9=x0rKw#l=0tPR-)dmkL4?-THE0l;e-B6vN*N-Euez`0f43%?HAgK4)=T; z2UJdjlolPRJJ1+ymqU0^YkqI8b{QCdXY5LgwXMFG&~xw%YI1k&Tk;d)_b$KKg;8|` z)4vWQswaE|E;>P<8t#M)y|j|sjlU%=&s7`Mzxv*GF%j)wKQ#zgPOJJ&vJktL6 z)Ts~^vUByh%y!3Fc>$+6f?}?dYr$OK-_~96ZdK^WRR;7?{h&AMWBSDVy(YQA)xfow zBa87rOSDf;U%Q*!;gUqVqTnyMm;Na7iTB*G-QF+D>sk6C;&q7rVcoq-;X3w1R%I8} ziS-TUd$^f5b)IVuonl{KUxZSm#Y2zi41-(ZYVsB~Q)MIS(GI1O;2M%5n~vIE6$rdO zSL<6w&^oo|4DSJ42ZV~f5D$FZLC5Y%L*VP{CW->F%6aL4Ga@bSn|n;&KdQ9Ks9uLO z8DpA(>_u(rvN~M8LI)immR_F0q<)SK!!4~)1xtx!9M=dIV4<(I9zmo=n6rU5*UdHF zDuT@LGK{h{$kxWkqD;Ytq6yUoPb+QzvQyapj(Cemu9#8O+hEm7eB=4$(XFo`z%QjXcw@381LtKJwM=`0bLoRxEH->+Lw(|z zE5y~gq8Cv6CIsRN?F43apJ#J|B>0^|69yDsBS6Djwd`}w!tDIqjX5Kv@Z6k83d(s?Gf0>joP z)RApIDnRV-wSerFlWxR~j-@(X;rDDr3CFSS7A$E2wr1ZH|CT0J8q;SL$uRP#VU{p{o4Q?ABO%E{XVDg-|`v||LLVuLC&8%eyL1{ z#^+2j2*{fUYsdC184DWIYi%DUw;PAAVk;OpA(qkWe}00r+a_G1qh0qhO2rvaz3&+9DV*(bpjGkrFK@FsSDL%X* zB>yPO!N)}(qhbbHlg&bUmPP@Yv_Xs%%T zvg)r(t)WVE>ul*C?cScFp;!jgN_VVxI$`+%L2)gW-sflP(PY(zv-PYmYCelxM*gl? zyT^U}z&<=%y}rdryqVyfsvKD%aZwaTartMc9owML2CHeash_d9Sd3d6O52HLqp$Af z7iyCy(X7PmOWYFaG6+s%z!Lh;a+>{Wk`xEM6Hax0GxrBYUuG?e!LX&r;ct+Gz{f{D z=aSY!11^m#y++~(RFRVi`?C|x|Eg{Y4BC5Kh&c{Q-xg7yKicf^b?Uu4n5dj#%YdQY zBu9TLfg4K(oyHp)2!en7{pW{x6()NX!ufzs@cdVEhD)*o_EVWS%0&Nmo`FiNo_Bn$ zH|Fbn@-4@GKqTqf1@b=4m)=TT6Ieocg%XEyyy;yyIIOzwB`zNK-XT63i_{s^8OZ%s z?djzE$@TF<0{C@`q;d=DI0CIxLLsT<$z==lZ*!??*BkL$UyiTi8 z-;j_@%5b|@@%EiJ{_#JQadyEorCY?@Y=Fo&IxA=Zd;7<%_fS2P*bgtn>#AwfkWtxN z@f7r$FNpSL^R~DqiDE(P8H+3Z0T)wCU&#-RG5|4tC=a2Fsn%0)aooyBOM@?S0D9tf zG3#Z}qZpqGsToGQJ_m|>_hA(`QQoA~M>o3C*k9C~Q|tLYe^CI5K>Ggqv;CY@&xmTs z@ReK~W+bf_f)wn_$VV}q>y$XcG%sa8&bHX)6wt!{sZ4N`NcqPzyhc=wYePn_5WD7d?`7oCKh|EP*p)Oh;7v7}&=_0dHT!FKP!P#uJR<|0Rl9$F$A+{7E%sRY2vYe`e^1p} zoENuR+r`*j2Bu=x?do2INyO5g4$D$1ZWNSPGWK%LnYbSuZsmaPvsjo}!n%>Tm>mOy z2%B)=r_v}N`sm(kh{0Jh9tNTf->bY8W}u>StWQ62HgB2siOC=~3GFfrfKJW*P1A{b z3{7|}6Ml+gJ6t-UY4-MBKu2a4fR-RYrigLmsypCwGBngvuDNfU1J=ZV1?g;A0-Mm0 zn7MWds`Wj38p%sn}%57f_zzs5l{u+%0&vC>41?S z{55}3sBH4R?Zkw`DyB68v3b@?z+ZX`B3YFTm;H(Z^@U)s9QCKVs?T1{e@= z;a3J;y-D_ z6?^U7PKq>^Qx0M5a@GwS8Pl*$_e_D8w%v+!5Khd0naKa3^&2h(M6bYd`g(FZZl?TH ztJ((@4@3T@T8&5f;cCR&QYw1~=wx7J5|;}S$N4^x?*d6#z-L(pehc*Xx!&f^~P z7zd}`%JuSCt$z1T=ZlS^&p({nrpR;m^##Pbl8t!X6aFk6Pe6Uo{_Wli{PE&vC4b|Z zAh1FZIv*8bm(g;Ywe_N`2FtQ-C)L`V>;CNL`pkHeoI!xQ4^KGDe3`$AvoAt;KJ3gu zYxAZF!1yXNp^*V8u7eO!WIgDwgw5$+vF$g!z~;8kvPRON=dI-El~Ho~lK=9gsaYGg z!lK`yr`~5*rOW@QdN&ZaNny<`kL1+!g?!`{Ewt+La*v1gV8&r)t+CIB%mgy^Il-q$ z(Ai?i+whY1r*Z~Q++Lw~aUOv06dQ^NXvvT}_n;3i>X4C40sRmt14Zk@iJg9oH*u)fizhJj=}QO-aPr6+ zHI?VM4TKaXL4yCg^TRO6oE+?Pm&G_-K7}i5_|FrA;0+~RLGgd^(&?G%Fa0WPS2_R& zU?eD}nZ7VkSsB^Y%qL*c7T@r&GKZ~21rvgx=Umkin#>vDN8E0w;wklJDC zk!ZGy3|%0VO_oKI=@m96!?B?SB6ke+M{SAggSql4s zo*brs5!()?K|)@#ZJe12pJTB4RH z*0nssTr@-8lCO#FA}H#dbnTT(d5{(j!&L>~cG5zP2Wuy%_8uVXd!``?28|@e=GhC~ zdLt3u(~!DhhX9R{cE{3u|N6@u3>wKz{-Fnpd03@;CNpOL1FSRDW0J(>4Ht{RJAc18 zz9@d@R?f0pvVCsWl89?J(6M5vb8(mxqASSVo5n^4^{L~+t^m4Pd`?|LQ*O2L-v<&GehFX~!p1SeM&ysdP zA@eZ@*K3haPg=i*7DaJ1Y>a&X*IRu=?p>#CTzz%V)UG{~@4W!e&CK*ZTf#p&pOrR^ z8?W#<+P%{Ahp5$kwv{?$I~A;b3LHhg*&BxUw0HI^yqNr|aIMU!TGf1`@i0nb8 z7tnvL5Rv+^^WVmHFT+)iqCDDrj?uZ3#(&Sdd zc?JhOo4(ytZnF`ogLMhVQ0~ommusTzUlTbReNDsOf&;dQ0$%of-F|?L?n@mam}Idl&c>jeMOmbv z7aQTGD>p&}c8;-?gvJze4tDWWwc{CM$oT9L*k7CU;|nd~jjU++@*Zm4>Q#JiH!hw6 ztWdcbxUaqDE>K3Bs=2m|c;MD+Tq0x@Y$$@U>G5-BA7VS-=CEM*E2x|&PUhrtuOXI% z|CEYf+Kn|5-(NRpEh5)Z^>U&y{Q$8FczM>|Otd7H*Jlu^oh|>k?3pg(ulao{ym*TS zJ`X7-C~vOof`nJ1$(%A&rhuKBmwS~^6hDAn=g8y30%pVoqu|yG3xF8!owS`C{ULP{j5eEwfMy7u?3#2lYjS@2jL8A`OgE)UENrgbuI&CYzy#Ej zYeissZr(`f@s~TsU%n}TgnHyDRdzwn5UZJ269?6HR$lPiRT$F2Wvb!1064xZ%4F-x@`Iy1M5itDdAZkb*6uS*Zt`S6hkUHXKiG_w#s2a1#HKFro`x5@w(P)2J(sr1o*Ql5DYoiyZ_W8z2xaEc#Sp z$NBPk$o>vq#dc&-HKF6zV<36FPd<>L-Lfak4Iu0dVKzei0UcJ!a@*bYKGr+VYI-~D zX~<2yh2iMH5ga&!?-u+i-n}u=o6V>A84z#7oIQaMqHki1iq&dokU$lMD6f}(%Nms* zaBjhDYap=<&pw5Q(;lABwt{>NO+p=TL5kJnbX-n*K;_MF_R{ZI7(qQYdgl!sac<|n zBE{DHYd_56vQRz9Vt*>jp;{_5>6&9Bai7^dKa!w@N{-;Z6(IajP+Uc~5i=?M&DMhb z9qY@8K8Tod)R;gm;B0+zQsJTBYc*EzyK*=}lk;C9<&(;2wHi-Uy%gcndpzG8j+kB@ zB}7Skb0&N#jKL$UOQeecM~Jpv|EXaY={&lBD^0~Bv<_X7pH46Y{ib`tKS`6+$5Xch znl-@7>;R3(rA=yyM!`F!!rZ{(9ED+NF&S3@L5koXx=BB=9J?mY%=(4dPX7D)3>h5` z+N&a_Hxj|OUPbD-)bV}I4z&6Vmj)bC#FUP7EWTz?TpNwd%&DsXX&VW*Swvh>z&H8lAW%i^pDRX||3j%@BC3(9AE`8wH~rmbG_ZQNo6sJ#Ed4I5^z-ORqG1 zgC2rLdO0%kd3n3U#2Ofm3qMV>T5lBlzKbmjN515RdCj9JwBMUfgajW`*vh9=@JP5= z3Fc&FVx?O3_xGY!(`#QLTIwXu$3U?pMpE;yfFeUaAuHYQ`)&vZd_=Tum&&^YqMOx! zI(K*Quwz>%7mQR+?=doG@wP^$)S}Ye?Syj(88<$(K}gikqOAm#0;t+;YrhMOs+(%q z$MhGaYt?{99Cp0sK)7;f&Ae3jPipIn znWKPsXs^-FsK=YuGj)+a?Z0@B=W2>RbT!hR;_Kc>j^{MG*BY_*DLQ=$ zD7odWe7*s{EYBrh*YEi&>SNxxeWC!P$}OXBa$8qMX!#|4jv!^Yo*Vn!;var=+ml5J z@&hNf2>8t~6}gsQ0=@jT&TOdh%OC_76g;3upAV`AQ8c*rg!~b&Yla-~QugA#_~Q=$ zymoptuOLW!efND)I!sy#m_{b%S9EG3MGwCqwT53A8W;>XGj_2*%b;2-Dk;KMrn3vf z2<NV8LqmTJnX+?Y^A1D7klRy5;{Sdn7gu{tdssP3 za(6%Z2G;UhtgzX`etPc2xPXZTX;o~rCf5ofesYIOs5dki9cdGH9dZ>5g7=pSbF+zrpUI-h%jn2BU7pKS@B%)V1zuY1 z4X6WZ?d!`T=5eTDh%gbWj9bO>dYyj`44j>IQhGnDxfTSqd z61=+is8?F7D(-sSB4K_v^<}|90Vrlf4BvkHrVP7!?hgP3G?_Y(7wtY>&j|;8^g{@7 zvT6YU#7PxEpEOBm(^6`B^=g&s=f_iA3w^n;T*X`-AjV-oxHrm6dq`r z!Pqt{LYnC=tD28xmD+r`Ag&_un3Dfk>Z!|kRxd|@y>g*+55u%M@Dqg zibZKK+5j$W=csVsXF|V9btMNzaO52el_R`Fe;ijd>7rZ3QBj@u z)e{zT#AO`gTJ;$$v6=AgNa1Dr6<(c0v>9=DquK*Z8i)lmUcjN^slYtrP4d^CqM+xG zm0`GmfEpsP)8$~@k>+IBa>Y#0Xcj#H-rYMC1d7zfoJ@4dL@jt^I&ufF;T};?e^0_H zkT;0LFWI5eC_y1C=7GPv@P|` zo3=)7g$44!qJeks1g4G-Yd+A9D?#P7Zcr<`RxErU`r+)pPe+P_pfP!D5aRi0&1O{S z_X5+ftTz0D;~#=!;u3)K(?7o(LI%r8K_Xv9=p9xC-he|b9l7|G7q?>V{oAs>2}ryf zjYiC$^AR?5eCzS6>8DE+v?^8=OZ>M})k#JdBWe;Q67Wf+(CHpc=X-+ivhY|Ssd-hYH$|7LEtnYZo`iAO=71Of*jrnEAlYo$RM}D(0@^e5qTST z5`WoTP^=FyBZqCJQA_T!t<3c|*I8dIm{DqW%g{t>8Ghmmyqac)Y0r^Z){te?Yvss) z3Dl+=O@<-^g(RqO)^`JH^WPD~iMQ~{iLKgQ^#n(EJR6i07e>EXwJ? z;qg!@QV1zL^ug5U%9YSNYC~L4yAZEiOb4BTVe+X@Rqk9BROM1YrR6U!|MRI_kz2_-=TgyB{UubiRZWF7?ttn zN=h;eUGQzpB%iB?X!v1~JADQ^)Bdsk7|QkF=2%R!Io}?Gc2S9B?vSo4tY5^}IpKn$ z-m>tciVIl@tU~WLbowf|zXtM~4;^ZT9Tnf_1t$DrRylyKjgyyYgW;+BGOqCXQ6O)& zQ1CSV@44+#{2C~j-kw-JIPgbWBfONjk0hxtVlTA-!^%wVf6RuEG^{;vy95LvtNi2)Zdw2Hj~esVJ@X71BvK|ps66x;A;9=j%0qpBLg$~xRz1ATdh8TE7anJ;yGBdZnrz%FQQl5iE{?t{zVKM97hy%Kv48Ol?aU+GQQi7gdx@aq z5)rc5*`U~u7xa^Ji+?g&n;b<64ec{AWi`A@3+s%^Kswc+p)+LnEv z#6s6I4`n*gJiMm|%xFDv58(Pb7Bk(laT;kf<|rj6?G9_7Wa!s)4ZYXBJ1N?5`shW? z1OL=u{!!T6DksBPhsJZ@-=|O~58q&Rm~MqU4@51KB$BM{@0RMaL?5*`Z3!+EzCn3Z zQEy9Xpb;J6k*_x%?NCN}2=#A4HpN;R;__BfZN`yroJ0{lB?A=AS8PfR$pbh(a=?gD zALTyc#I}Js`?VuBdojT%`@)lB_wVBK*TRqAT1dWjPBHZ+(tKPaTDKm!EPc{M=Djx@ zG`a%QQy5Zhb@2SXVy>P*MNrHCR0ITs-hoJv^swcea90B(P4ZH$9P|?GQMuIlDCq&r zhy(-Agu#&g{+v%UEIcfWi_M2G+zOL2Ukwz19|)rnbgjUDW3+xMu^N}K4DK!rXE2Aa zRe;J5HeG(^Y>e!IGiSdCWn8vAHTdT2*1325Ad7&SIp{Hw-+mpS7n1l@4~YbS?uMqx z+o1ZVbP|{1I@YEtO;JsELynJ_T|Vg1=*(dA*|O5BN(1*yZL-}+;W<%jL*6ckDeWVj zFlasvf7Qw7y8FZDiQT3$o^#jKBtCCFiO4rU;O@_4Z?(9XHMmf0mZ14(y<@4C>l44) z_u@$JIf;Pk9>r;N+aVn_VkhK$@uz7US{Y3Fksdz_j>t1$UH|#;?j_%aRh}a4UPPL_ zfUxM_&Go|qmT#5ccC3UGj9J~Q_8Ib?iGE+K+K8z9HUs;R*o_-_re;5)EB%|E4sf{| z-W-N(yR5Ie9DzrTXhhiC+VCR6y+l0%_W03rs)iUU)4|cOHH&j&3o)@yw$2JG4zsR~ zjxM7~zoFGQcQs71LT{&6mb15mf%u3^Sd3%neh>0lo~a)2 zvs=T`oWEw4-t1GFZlo9g4^ZqDcv&1Ma6zeqjN3nYKKxfSgCnUu;06tSTi#5cyyddT zVhDA`Va732DID(%_7FMYl9uIA@U^vVoJjLluN=OreAAlrT&(_$%#BYpjJ7%YsOK#AZnN?L_gyLFTw?t`SJXrL&M+4|y zTlfgYo|RxUX4H9Xa#oF?EX5tHR+{bCUzt(t;=9VLtS2pm-^Tu#UyfMKuD$oZrmJ3R z8k&moXktjmezX35I!ImEnN+wwwds5r`?=2av@6i1m51-&yrJMcv9r@!BRQ1WeY|cs z9Cf4ngNwjLzEV}*)@vR5b#lQ5K%Tjm5dnj$U zILZqaH7F%a0m9Whes9HefR_P}fg+nXE%KyjD+zmgDwd|FMLhg2b@Ib;xTM8Vcf{nwx795f$&6frRLzhRtF&h2V8d0JD=yriU_|ki zn@U(rUIQR|MtPH_BD;K9i%amZDB8e44_t_!_<=72iadX?Zp)bdc~2KeUQ52$rU)e& zIwh6aL3WmZhZnfW3h4%BBMR6|*cZ^oKXurxabyCUAjQOeraJy5$6n0WjQfV}wg4ll z!p=bf8}c|h&?N52PZbFz?~kAj_ev!CT$sBeNReJeGseBP9{ch1<8&05Bq6q9C!H6u znwQ9WoZ>AAcSk)M16!$u-zBPgd;5&A%wi|60t}f^2=5NrBGO9F5^uQ{RZ0 z_$PQw69s=97Bk+dijBeE54I3F9c6k}xAAngjJNMIi3?HQ;boS@is%iEGkn;<%1vd0^2V=Oi-F!38Us7obgV~pDO{}oD*ckCO4&j-geOFri(OJcu3_)CYsRp1ng6sRFo_7osN7h;_ zSr^x}@{4J!2dt9$2cv#rIh8C*4BKR8(5U|bHVQyH7nJK#1qEFetNJ3`gb(^J_)P~I zsR29BHr}08gE4r6NJ}QqFcY4AkY=;u>I2;2_Cvdr8m6=*Z+RSV%M1aJGBgtw=DaJaetn1G}q2$tpTUce1J;# zc6(oBH4}k5P;BvUR^c>SGL7UGgog1JLD038gWMuX>sYP_^y6D~Rn^yjbYS=MeubNu zy&zn0D=v;wDtCCq#=oTc%{?WO-=&qKn|XOjc#K%A3apU3r^lqaH{kI~Zs6xorGY8O zOc+G07G~ai07sxNd<*xX2L{6smPRk_~Q|K!- zjRph|1t2q;3*;I4+X+>56+x3t;ivhH)5dEgSX+d>x`4*EDY;Yx}!i?^35#Pgm$ zppCsY;y%pfaekhj4r|ox)c((vMfY1feCgBI77k1OoZ(`{^Mar`TAWo9)sR3CcKm4Wv!|Xg%K`sWX#Ocjhq=;Axm}? zhH+5p?^j8j6SSXmhO-z+esm=DK|#o>d3<@MuhQsJ6$`t5Oq@7e?AIDFF4bu@5Rz(c zYIK8@^yu+@<0;Kpi5YIm*zhY!(7f6A6OZk;4#Ck=Tp14~ZYRw7XxP3OU^@f?i0fnJ znZ6c5;yHHvai}A~x>o$BB*~T)30n85ESSh4-E0eG@)^UE3r4haT-!V=`Sy;EIdshc4+v zB3A3KhkV;!P91SCc}6nYFn0Z`&kFrB^D&p>#>1p0q@RehnRjy&q1vyE zN!||P_R&ke>mPH}Sbst<9x807Z7tIRw!EI1F(r-#xiiHHA}9-I@61NsNDkKq)C2S{ zJi+n{g#}PF(TG25Dp`;~F>%-K-_59!E(D4C*6gOU3Xg$XOoay@g z{PWsF>x<7??ZG}H032f7oW!TQ^MBF%kAi=|6-H!a&+_F^6= zNt1#vR!5!@42&SnN5V&){N|_TZH;#_o2+lplTZhg`KlsnLu(DD!?S}132Y^jQT9Yb*yDti)Io$^C;s=xS>VWa8OSqXL{%c1U=^QRehTg|`V>tF78`vut> z)fUPpuj&eRbY7_=Ge&S06;^N@D8_m=#=pKI2%QBJ9G1$UM9G(!ap))s#@sFKXmCPdthrU%nPD|9)2WOV$(d>le7oLn6L zxd{{k0s=A;GCm3lJ_iLc1;_t$d+z~Yz(W;7pTj^=0-!OVU@)NG2LNOr&-n@JzZ&3w zHYjKq*iWC~;1Lj!J~}j^1E8T`V4z`PK7E3P{pjuUaUB4Q@d=ZH{o7|OWg|FBM{JIO zxIB0&(Yjt7mDvkwPGhG)1Vmgsd;&rmTDmXv3|!niynOruV&W2#QqnTAs%q*Qnp)aA zCZ=ZQ7M51l&MvNQ?jD|ALBE4TLc_u%;u8{+l2cOC((?-ni;7E1%gXB;8k?G1THD(D z`UeJwhDS!n=D_m{kj16tm96ca-M#&T!=vNNtLvNFyZeX7r~lxB0>Jz?tdHY=1N%R4 zVSM0%hJ}TJh5HXKC}{VO9R>sT69xNc%x}tYMvhpN90BmyqH%e3y$DpCDi=7$PP2%( z)LdIMm;ZtGU&#LNfCc`4A^Tsz{x_}_05S~J$Kb(W0Dyq2fF#i_P|aKh=6NUnxwW2M z)7ocWqlB0&YvwAPd3jVBA#ipWMMd2&+utt@l6<>ZD~(3;%mwnCF?gA7C*Q4-FW0QU z_jBy?Zu#?#j8??09WfK~gL~rUF>|bc2KS?TIp6y!D~H}KsBh0Mhs6+~&c&PJ@wz#M znEjGwkC!6x_}pM;d$zY{jwlJWd0SOV13nka1uvMgbMmm@r!GmgdH;9^+(zTx@z`6D zOm5^iZ;# z0n=4FMbWa5m+-qbpMQS6X*0*M@#PVNMCXBMI9}2at$S2qGzS}6>EFEOIQ$q5U+B6~ z8C~6mEu01{K8yHpX3iU(OsP7?&4%}@1_Q0IQvQ5jw65fbyWVe{K;`l%R!vln@=_-e zqdn%x<=y$GBgaU>v4M#gvr~5vaTal}y*2+3BbMAg%1={o^DRL@XqbfO9l)th2RP<{ z2JSWZ3CyB{P8myfZLgkOcGIU256kQbwNOl<3?7S*aYc+9OWBm2d`|rO2!(W-+WvAf zIo@JKC65A=T<$kW=9pYo!;z^3QNcnb2|+hi1)wlY;V}ZtU_E%+j zMzGnBi2@n!A}hob)^hm$ycx1vg#|!E?F;Ehhi-~-oH4<%Y$7jf+F6Wg|zKe7k^PR(Xr z;m?_uI)8kY6jl@@b9^bM!Ncix#)<_>bMdsP? zy~4jzCC$EVE7bp1zA~m9D6i{46<;afmm?3cE7q|UrQIWPBkv&I=tOj0E^_W=o9_bV)+U7Gg0y4^s9*D8YGO^63uk^ z&W@C%NPpZ;a%ib%I6Ru(;$X&8BmVUk4%HdcwbmFe8{citK~@ncvs8i&$XO@6${3fl z{7RKt#GZc2UChXw_6{hfYH6~tY3>_VGXdRrhpYivFQ*Um7S0#*is+21lS^b5Da8id zF#;aq;`9fAT;v#;Zk3bHQo30jefwD9u(BK?X*eZ6s(*yI!6CE#HMr%nE^UFfK2D4R zBCQQ>O=B78tZ_wJed*i8gqqR>p*G9CQ8#1r!|CqH~s5=XZ1u?u|0Zw&^wvV89NTdAhogTR3PXx-6V|{wO=MB1Qw&B zw`8%CZB&+b-h&qY0~`u(`tl=&eAFN8sX%S|6B8>&3DRN2VjJFO7NbDJj8hH;$WOsG zPDPN3aHIc%gb-mzf0L*uW<~!{42EKtQ7kNmHjdAd`TDzfJ10UGdcY$;Q-YR0o+m(Y zkd{77OmUKHM&LV48K+FT6&K)iw!46~_C@p8odH>1S>a$=nLeS857aZ3*n1-=n z*+P|xBVObJSY=`9#a*dUYtWunVm1;lmQ^t0r4c=GDQ31mw)H)x@KU?o>~&!($I7;3 z^_-HN(9;RSuk3|ER*JcL?HyqC5J5sn`}#L4ZRFpS=o^VmHKf|8zJVug8P?G*$6lH2 zYr#5*Odf)`RFzywyL_O>6s1+#n=Gny%^ke`s=wF%49gMfOu;eIMQZT-74IBWWV#yY zWIpFRTNp+3XycF`zLdyP<>q(P;ddxmfri9l(ZOFabv|wq(MmAS($%7tEDOs{rVgCSwMwdC z$%=tug6k4vJ__8R#uqJjQu4LNksiEepD$uaiBfRS7IaxV#nuph?OS(wG}+k~S;%0% zG#7+22M#PiX`Ah>)K^3}&wZJTLB!7C$}XH+7svli)P+#0U7S(YQ&K3MJAVnV2s0@o zn`&F&xwjCjun)#52$nLi+B7S-347@%OCWPy@-0q<dHt{Zvkik_L#*sdlSjC3^^>as38Hb&kWIu8|EHji)5k5}(E7 zU>|u>i!WCyI~QN#?CGhYb?QWO%JjK4(Us6&S!j<@^cyOQ{MP*}#20AM7Z8H<+`O_{ zyS!@}!w}px(X1)DkCJU_;&i@ik>2V0T$n;h^o{oOnz#(zl6k}U$=q)}i>|3PFp5s$ ze4Y)>;y!bCoTn|#B)CVkkt2;CUuhj922Civ#jL2gpimswp4GG=>d~w{_~zfBTH69Q z-&UKpZLS1+a9onpcOEIBcR&oM_KBxJNCZ;28iEwGPf)^9=3CODz-+LYWlO;;Dk7KO z#oT_nP7P;AX9Hf`7OCs&L|nYFIlpb^^^)z8^3tI#%t}p;TdyIfU%?Mqn9s^*fpC!4 zN22eME+7}hK2tM1)=bomcYtif#_fUDx}Aklyl2v%q4I8FRfvP>mecglGsN(hNX~b_ zh@}0~8SC3`8!vQ}=;a&scYw}*-t(+C=tP$n&&t+Up`TjDI^-#Y;I zNl1^d|H|zh;BUO)pE3f~BeZi_1^u5KkNn9z_ay z(20Th@1Xf-O`okZo3lHWUP0ei&Hd?1w10k}gN^pmN$#;x^GUb52W3m zZ|2Q*j(5VGuqIS{H%BkWF$F~#Hr1M6P7#|0B0R3^?2%yVsMpEBeAAD2MG7Zn z3{omSvhzjFt;aAlJ>{<`g6Y&UYD0 zCct&(ghx~xtf7^X<;Gsins64SiEq7H!>SLNXj7e?qiu!8I?`aGz?a;EjeK=a{m5vZ zg=zV&htQ%`vmY@wA*6rEUp-$L6CuB}OKmWRxp4cS;QNrVGP67Hs~rr+6i19>&?V6l z{SzKC)0=z>HkQYc)`ViTHMFKqFT8vhvx~GFtrRijTkNZkb$oi$f1ICcGE>^YkqD@z zhZzBR7P_Sql|Xkx*|0;H!LW6^Fa z7i23;G;;3+T5r!-woe=Kb;U=U!lF`CPg=1y$|oJ|UqNg#u%$8>wfxl3UKenBnw-p) zdH3?cV#wP<8WW4j(Z&5X$eJ>Hfk2Ne&uME2PIl)&yG+rT*DoDYJjh9@0#^!Dq71T= z&pb(OcT-zoz-x-Nlp$;SOHRe=>d_r!7JU$H<+gyTZXL->xDVR7^DN5^f}5zG1Ih z5*kIA@P@Qs8QwRff^% zxY~k}y299;dn#r@4=JToZ#pekINZfq&Yt9Qy4n`LsS>p98EBz8>sRmxY|A0z3}b5v zAiFF^5Ju`&=@ETJmKs}<=|7XG<)cA-qj`%XeUZFPdvq&Liw3K0vSGXlplpw+Wol*V zh?Fs-fYu7PF98Wh!I$$0)2Qp-`}`{WAXK&mgivtA;XxZN*G=ooxLhrzid#?{NU_Ol zjX^3tUexokV3$-vbuOP4DR0j+r(^Q~;9AjqT9-$(8_>2DqFGw~q_i&eN&O!ur=AnI zH$@YwupcUFUYdi!$D7#^N<{m0H^}L}lnTaP*gF4p-+5j$f^!E}lKr;AhUH9*E+`@H zalzw4&1B}gw5`|?#hdH?kkG%_+s8*deizYm)9JB~*{@C<{)z#DhQ)VnTopD1z3ZTr zLZ=~RY!jM?Lq&n?p!6UWsm6fpP06uUCp;jeYr4#c?ZTRILtlxfSfHEI;Cc3j#Jeni zWopzVL=8WRW>v&#; z%~xDzEq+iy*2Mrll>(mEBgPETLaO|jKn0KKg4k`ft3+6*{{5fVAV`9&DlwHv6E&fL z!J2fv$Yf6Ewop9hq#P5b*0Pk#X)ylldK5fKhieTGFQi6Uy9y-rDYAby>tCDG#OL;A z4L(?ZKXx7GToZ<*HUFIc?4~5^h#^`!AxE7{Sq%fVwvXxH96z%Tn|k45I#;&4WMvk1 zb_XY(CK_^_0%izOCdfK|=+@3ejqei{nStliE2HS!Qsa1?#}66M3nTRQXr4U}@r851 z@H?P%_Kbvg*J%n-a_vHl|H~$(rm$bl6)?*pm2g$EJ1lF=G-^o6padALP;$)Z)Juz> zh>BM84lsP2v$ky>QglG9*_m|FmvN@bqRmP(k+prY&eKDeAxo<;r6Gx^!Fd167X*-qfwUOPHnpWiHh3x}4fDoc>yRf~=?SDVRMu9ow^F@OZMULHv2t>O&|k+Nf`FZQjgz+X8UUNq;}PK zD{)QFjL27^k%FbIUpdpfjK1sr>Qg3;#G0y=H0;3lVk7p3aS|Cea4|{16sS-_9uV`v zB#e|R+pFOx-@tvc#LNPw_JAf++K3RUJm`%`8gT+Pnl~r4^_WPyMz3-3QXELSB(x&~^ zXUR;Kz;F#uwsK%-Apgt9x1Z`+B~x0NI=a6~D-`cR#{L8DWRg;U03J4og8Y+m=CiuK znr>v{wYlZEIFaRdAD=<>@XFj|e&4ytrT{8SGDx|ztb8B39sGQXs@9$dgjgUGeQ9%U z*qak8zTyTai>Y?nn`_o7o@eVJJnp5!(6)u0U&GF$n#q9)7@&?Kd+ej(=yK^l zf#XmxV_bYxVy;$G9NcSqeRSl|{hj>`&K^)Mn9Y!KUTQEz7 zw3Ws8F*z;t8%vP?(_A;hY}S^|_nm$Z)K+omLd7Ft*rJcy18shCTiK;ysaRm*pyerp zgempBP{kJFlD_qA;CIUe{K=_Jz@!t3^s=C!c(TB7*yjTpK#&z&;>tJ(59S7BY>O`5|+= z-{kTa^;jSPdTvfzsnh@{k_55(i(I{m;^&N0Z~Ck5W%3Q@V4L$7EzwSPi9XXOoh(#F zwSbrkm#;g1Ra)R1xwCK0D>{?()1Tm!hPurAdpF3y4nu2eBftpfj+-N$1Z#~uj31tC zl3g64ps`M5B`n#(^#1;T!VCmz#wm>!P_`F4DqX3Qeq1~qkL16GuZT4jOg8o5-uF%YpV}GJ51tW{u z+2m`)a8`vnE_=Bf-e@2-eZRf=CfV|~u=VN(eM}@5=oO+L!#KQ|S~_SLap+z}7qshM zeD>(mOIY?IB8e??r!r0kSdHLyTIeOo3b9;wwzL~r*T5Dyhv!2}e?bEB2Q2h?`Ge_8-CvOWL+e9YD`lnfCa(yOr z;_YuD=zlGxI*fA|{lT(nMvg6zD`$8AGz#5k=x!^vO7@~#zR77Ia%HCNTW#Z;<~}oP z8`NpIQ>U=!oF4d*n-Fi2Vl&IJwrUrymhv-6h*11@()3MPQ|aOvB#grH9pJT0Fmklg zXsgQp+W)9IbG_U!w%ax`R47hN>KtL?TuQsu6qP0AYdyi<*enr85SZ;C;3%IYW-#Qp z^42u|>3Q%tri^=Jl-0~~e}j|@UgWxX>u*byO4mH?e39kWa56TFEI?84*@scZi#-tQQwA^wzp)0R&F#la zn^@?P+Ssa%GW>}Bwi&aK25q~n!^T4c2OINHeSG2A&-GU<21Q6-=Ug8D9bhR=vzY`G zgA{huX@~y+#Kt(!>_D>BsgpSzBpK{Xo`=5x!|tBm0nxv}GUq;o{DPCh@uIWPXpZ04 z6!;qljwQbWvP(#tmc}g;9xViQbFF(8Dqj|^zV%mN4SP*Z5&h(+p=f7ALEiz=@4S7| zJja2IDJ(z6z5^Hr=j?(DJIn+n*>9@z)P&dzjAE-%J*(4IRANF&bbO`^dSK$T1I0sC zLo^8_QmDP6AiI#i%i#EobXo#963(Uc1D3~F(k>hN=Q2-J#ItmruIF|APw^-q455Uq zo}1yHCPkXOtinC!EASeJ!qMvb6Hw-KCrfH$*m}PT@L;Gnhq`x29~-l2X-8ukg@3+7~Lk=G(WvWxYsV~5E7lWJxrai(!@ zcArG(8M!g7{`$AG?6l8SvX)Fojt5LvQT*zh>Eo54G_(XSH85o>K zIPYg+X@rPsOvb)@%bi{q?*VgFoid=YDf7eckA2QO#FPyxD5AIT%2d?gm@1gSq(7Ld z1xHAneh22Jgl&-B_ntdHIxfLo7)d+W?uF5=x(9~%SN1T@)Pu%t#B?^ry~9Kzwk zqKqjwE6Sj?u6>%lzt7#J9%*gyhCBU09R~5z+a1*BhANLy8A27A!GfksmO`MO}$oEIzH8$Qk<4e++^lotKEtZ$hkZ7 zh(kFY>W}F<7g8m5laljY^eArV91&kC&=cMABVcK;TR#*HWjP5vDEh`@djBzct1sw@ ziH(T^AA|@`Iu!kXo%bsZvVk!Oxc3c&7a%rAw#q$PfJl+9)!UvI#+h59dGO71WXp4G z8Ble}*P{j}-NtHSZe6}!CSk}c`yEha5>_^jCCl}gMjB^+JtmZ7kt}wF>{=rQ-j0-S zj9DYDg_$rK+Bwl<397Mr5_gjOk}Q|}sA<{r?Qe}&{RUgJ(S)kSht5+;MKb16xV$pS zq*4*`^I(2K>2y-SFKdPXFpL6e9llg(fEJmi1D>h7UQ$ZY?gjk8&4UyVl}(bw%{AWr z%&@HvjjG+R(5}Rd9nnE|>t+LHInxdDlUJ2ZKQEBIP}jdaG#~pYu-eP~)U3~tGL}dX zV@<|05{wbH;n9^gvly#2T8xL=(!27AF=ee^GQHl2^@!iy#mD;$vi~fXyKzvdBT>0- z>E37+3(tWk2p?9x!8t%5dJ5jzm|_b$ zFRKn6BBaeL@mz`2*Ol3q3sghz=fAC7gna{p|=rzHFb46>VSVc%?11{7Wz0 zYRu&#;Q&E3U!2R^hVn_E5z4RW{1X4-rp$;H!+wH@(D@oFfAE@U+baRryARU9Tnyzp8y{ z^i~FYzK-6S^=#AWA_`$u2k!5z+_0s006f7XsLR}Ae}m6uoLHu$)M-uvC6Q0R3&}Gy zdCyT_VF&x7EQT?aX|_0>-M*-gR^xSXeSHzQA-Qfl^4`NE#eX$BNXk5TvPPzBIubk85g7gz^g;6TU{Mq4 zWsZ5oI`LIByN!%KFPk~X_-`WKFdX0T8x`;ChcwaVpe{%V9WZf<>5B=^je*(I{+^%q z5O7Tj?3_BCV@PgBaf}GOqFFb1JKn7;o6|Qoe8GrWFF#U;FisN8=P#_Vt}ahHAK=Hb zNqnmB{Yr4l?d8L=@0pg{B)zlJWnthvbNeyK3xeJ$EiJ8Ky2A|e<%r#$z0=mQh64YP zOsvLocloFINS-ypvg-U@^PcoW5Yw`JL)ke7YWb}ma>c@+$N4{I3krXdi^1cg--mv9 zka$dSz%_}tcdc>A&+4qud%`5tb(@?lZh+3b2ldNP+Do1NG1}m&JrB6C)afq8@fen4 z6i7Gw>cee+6^+|n53z%RSuoPB-zQzo0mr{iZ;w{j)PVNw%MGJVSECG42`@s=&pA_x z)_7*3ACnw*wcS_^iDiKfuZ;$spf}PGFL7i?#PjOKvOHVqe@*YLKO6J+Y ztcSG(a~)MQSfMLLjvLKHKIq)rifG7Bq43Dzw+aFnVg6Se1IU%Wh!}EDqr&i9-X)Z( z9b&8)E3A)%-F^vC=1U9*|1=x26W@JVeliA&oXLmOqqdklLMT&(-Bo+M^r-esdMn{i zFnn;Lb*k+1(O1c(^Fvb&}`4)vYJwqWAzP5`Y+ z!nsxN%TKg8za%SrcTs^Xk=U_r+&Dd`&haMy$5hbPlY8ZO8?V*uuSd$i1XQotIj>%> zO*4_A=ymFAG*Atr2j}kq7HfWY89S{ya-C1GQ2t*J{SfD#;lyUDXnF1~`S*DwPz%78 z`)&4^!@KVQGx8s^b|wUHEyRAoDu#H|cH*3?yL3=NKVk)3%kNhj1qz$x&{E5Yqkc8R zMD66=Y&SVaE~WTtI_F-Bi;c{#LZ+V}Oh1fUUZgu3ClUS}Er%X6LTQpV&hc+u4ymHblle8W=qD0PtsJdWWz5vRTX_o zL4T>>PNm)f-*6(!6peIS9oSh_bEL87r+C9QPt_teh-_IEUG!@hLYxyutGA>rL6Fui zjoH=Sm0yR_rr-H)_M3&cOEX?MI4LGd-A3Pl(b(xqiNzV39G%}NvX9SARWL}5`EQB+ zWN-XnUpB}jhxwu`-k=#np4r-c%s-3;*lT2B2|(a6IJHEL&?ZV0BC5K|0DId@}!~^mZ+$rCyx2>1RzKc zFeD2DMvKY?mJCmcUI%{kd4Vw^&2|L6*9`=rteA{d!}hE+ZwYp8tD<#YUAkEIKO)6m zrfI;j7u4fo5{ROSuenp|K)D}HS@$D;x)yQ_7k_<@V2^j;>pd)Z%o$6P8YhatOQ;)D zC^I-Q_|e^w?XfU#%OaYM#z(Ab3}#-LIyXWm{RS$@n|@HXDPB`-4*W!vj&A7uiGZoU z>Z=9)Xcg|*YRh9?x4LgN}07!l8hHAx<`u&DcB zJf}^)>h9jj%U}eENc0e0bd$dqe+87@X?kN9nMAO$PWrRK<1q2eqyc^axR-c?&V~`M ziL;&hU%nW^uU_YHnY{jaYoe1I!I5+2UqZ(H-HaVKb2cgE>_JkzR1PDr%SXZncT=75 zhQWvW4Kw>?{Npz+t_ikPbSkNNx#f=R<2kphLtrF!VW3GHmS>is7Uh%q7pEWkLV2gm zPl*oPv{ha|)aYYxhVLOW@Gar4wB(9fS6g0ta5?DLAiW!ZDfeMSDj^?vo+EqlfY2uS zIdKUR*~n1}wKk`j3982Mom&s36=sYp+_$KVqMJkGPbdHJIN;lTbDfK^(Hgs4*lS#2 zN*!fyO4$6&*o{pZF6r{x`|W0cIP+4UyUsS=_B`P@ymO|l zvUeIaZ~Y9`LGEah z*hba+tl`{pk+0&N6Aoh{hUZr{Sm$NNoFn)n1f#<`9Tl4fpr?IcTKTNK6_u8;w%JCv zo-J7_aZoJJ{gi+Pm(@3o@69PJg+*h_%ZKf*@lDMcu<5LKVbO`>u%CB3{jsiP|1#X1 zrEmX|^2S^)SPP?pRI?!jyCG@K$L(!8wq_n&RBtn@D&r-4eRvyPZBYj9nW2Lt)>5^o zzs7v#kh$mXJMroURazaD@mX>=QkcX4p?)!$xD#o*JxBPKjhNspIsCgi8{WPsvrl$u zTZ|(xa}s|XP2S?FdQE?7MX>~ixyv7Oh}k>~;z7Np_4yFzTQ6XTIHqY|$Gm;TF2VH+ zIN6E?`P;8P0*9*B!0rRMi_#`C^y8Jm*p`&>aN>|O|HmToAGq%T)WEueFAP>Zw#rIr z%Xr-sK9$yxkZt@qzHN*_-t=m7b)d)DrVkwU8LMgoSmFAwXSe>~@7mlbSMwpLn`&Po zVX!2P&z`q=Q*l$fEsyR<)dXZ_taeN-DugQLgMqs}fiqC4Y@_nVEtBNR;arP*v2sL| zu*%nAPWo-zVa3nleJ*?*kUreq*}ce(f6(c=ObR_rc&1M3?^gBfhsrl|t6NbaSGp@_ z7QgD0xF+`_?&KY?SXrg9W{JK$$n@rO6WQ*;26WA7=RAqYZyb2`RI$~@l9*GGb5;Q- zVn6?TxXgI{dm{G(rz*%RLjNmT?es@ERulOSNcqFLVTdqYq=*+0!lIyyH0Uz#l{N?u zhdl~9KmOi08hZYRFu1Kihu{oS*~#F9tU_02ASGM=YJEZBd@UVH@<_sX=roX?GIGuC z#ihP5a&^`>MvS1y*GsH=wpM9Ennc<_#pS@xUVGhMV~{wQMiH$eg%NV}&mc)oZzpEZ z(s=!|-OJ;4U~ zjCC%OX*%I%n59{PK(U^~R>y9_c8VZfxO~n9Zl*OEJ4>hwo3Aofd}*97^y~-q@ggYqyoO zZ*93z910+1BG(s$in}Di1j{>q5QjY*eOjBaJ1IRuF$uN#6MJDi6_Ks5vx4%-0i@v$ ze6I6b#)M_v!t5zQUokbFQa6nS*1u)U_XrN`ZgN{K%YIEa*Gw6!yFBV3X~1uyJ}r;F z40na&Q1M~k8pE))bm^9rapnK%hw9F<;d$~3{x_FpFDOB(6(3qEtkJ;4Es-w8&)@(! zp!P<-B^_#H?y=0L!l#A`8s79KGZ|EAj0HQI6}wuZNy2KV7}&P04Cj#(b_o5Xjvayy zSe(f@wE67(7OQ(cf<`_sqjeYs7Bn5GqoVJRxq&=p*dPNP)wouJ_E!@-11_|M2LJH?EN$%DbM9qZ2xRP>~oJ0P9EtIUZRU}lVC23-`9S)=RkkMYPk z8_o@Mxg_09R%Q6DjZSf5j8e4tVZEO~SKHN%x`pssY5uU7&Yc)9$1+uL8NW{W!!gx~ zzHaW9PIOd%)m|R@Ol=f2S7vEGYUj5zv=|dj2aKj}`*fl7Rp41Q(la^k-w$aHC+UMY z=^YV^O;3?|_H>?x_1C1O$yU3*aDdUxew+@%p6DzSXW3Q(KFX<7O_vOI_?`3?ECH^H z7Mhr5QzZURd)p*DOk7HhX{N7mSNVu~&k=5SKOu_~?|@}OnEVjXXe`^bu$1hO&Y`RC zFYf%Dr(@s^;em4uV@(C$)tN8GpsFK))B!}o#(7jM-WUJUS zU?<%Y9Nbj9%XYqvETVJe_R_CN@$+Gfxyus$C;Kp?S4VLOLr3RtEbX zlJ{-QZ0K>xDAL9G6BB}ml}{EUs>0k4y(Dw|P)kg3=Eq80qk_#Q5909Q9$&r!QAdpckPX9r}k)u#d!AG3nFOYsUDW?m$ zwcH(Ck|PQnqgVm3A4FYFdim^iE_%7n z+Ek)84TzVzu4vCi!TuW1f2qDTk6bP?ZRYlJK*5H#?Lgmhppwk>Vfqh*>ZnY>rMkeW zPR6;VYG$BKDVFp7wNM5yJDF?ya%<0Urao8nu)SHD=eRw`%Z*qcb3kerW$*xE;N^D$<&d{AihGk3cUCA!f4$)>VMx%^+Q~uxP#67DUKkMQz^Q&C zZjw}Q8E6-U$I#(_4{HlNoJMd6uB2ZTXye(7znp}B=+U|yf?Zoc%@WQdsl7v$pI+vuMw%k z)@{tg*EO3PDTHdD@8snqcAi;e+G{q}>%Jyuybg!nfV&&)_NsiS9+A>Nv+El7mJU2g zeKRkG^N5haj*6#PtEca$CxI7^HiU#dyOSjPajK~mnh~lcOZQjr{oY!#BY;_pxTWya z(5unS1lI?(doG?<5Mns0H0@H!> zZ$QM8U&XZ~IKcvRR{1)>+3zK5(;^D9pPIZO6WAX;*+Oi3A+V@S3NkaXqX}7=+AvQU z@14qH+axyfK$&s`<5z3;-dC84c&8d&Ge?Q2_RXdJjvhf2xOuhdN@{$zB?UIFGcg}L zQn_i?~U%c;ETN6mWZbR#$!NC*iYEEz}r~}7qYc!a1#piy$S}pw~~k?S~2_H z^J?6+7@7xfa_I4e@gtE<6r$-b!JMcGnc-}&=`_wB#r5TOnvdx}5|AjVg1fZpFNxbV za>$!oKxdc}^#p~Fp~(dlZcpd@)3rCHNo9*F_PLuy3<@+I0uTQbGBxj3>XI*(k1mmB z_c7gNXtgZnp@9sWza;XB^ks#=8bnL3{Ns=iIc>XT5;$mqG!|Z>L>#6hH{VsV*zYKN zI&&2*kL+%`jaJ(MwuN&uai_Z!S@9IU4ca(eJZQJk%ZU}%5;R8LjFcS1;9|W4+O3;1 zT9OO6xgY5iQ~l~~b_iepP26kt8GVD)lx~;lLNYDgZmN#EBor)p_^!X}RWNyyAXLE@ z>?a?u5%~?(sWVea5f!8-XD@!zg_a~XK^87sL<*FU8+Y+ojfvtvGL%ZT&guj);uKYz zTi+wsN_>$Xz2?Ao&SpfFE6!?>-OHGV>^H$7XzA(pjiXU?DI z>qJ=QQ#f&M#9J+xB;XV1{qW@`cFRrjTy*iR_*e?j)KnqG$wdAsDlR9lGDG2~j)L$+ zYKXU6jo8Ho=vOvQdk45Psk1BPG){qQ9CzgM`V*7X#6a*)v&~fE&J~XHnR9A97Gvtn zOSuw^u%&!BRna@(H{QT!xWr{!v(aaMS1fc?1dIb}G;5X@`kF(w4|hKfqHQVxGFF9f zhua#|Sb9RAPV{-f&N`)cML2D$o_I%ETTjpMo(7jRi(+2IF_n6#Vv7ti7S|{2+YpwXjEZT5>a4>10-9#@m zf?xWP=!=p<|J8{a6+Tt=P|>-X8|?GwO;vR13iGJn<3IFQ>dK_!Kj)B?%mV3TRClh~ z+9$yBn{hc2n|A>#E$$dQy>7aB!(J>k_5DHKQ^Y{3k>!%Sr4*cHsisbW9IY2NC-Ve{ zbSMEaYNts_>)na=N>aXJ@LlZJV-#l%fvUl9`pls<9AOlfT5I&b;d%!o!f3vudF^0!1>CC&JO0ZNr<+=>91xxHyf%7E9g9;Bb<~ zGO}&qqi3F^*+Lt}<@7WxJ6N|}LZeUE7D*>LvL*H&)cRGiJ0+zRb@GUtx5Ee8BnU|~ z&B#+@{K8UIrsG&E?CF06r8e|5-gvI~Nu)~+aFVo#4Gnchi?e3ExSX#0ZMih@C{_1` zA~s}%SnY?O)O3RV*^xH*qTP{Q@dtk%-@*1a1M+6;B?TgiD0l^!X3BGf)lhPs9FNqB zoZ*NF0!etb^yAW3$0Os&N0YifXnSymb`-@2Yn5ev?zTWp^R=q^mx7y{@)_-Z z$6_g_RGHn(w|mmmlQWIm{J)lsnkv+oGHn?Z4gya;j5^kHoY{@bZRNxdno=U5FR!1R zySyQLC!XEdV1J>ifuMH)2~Gs1NPhdq=}y4~CC|}!VkZUpwRjj7DP?6GIw0Fixpo~y z@A}gRi&)I~_ci?_S!kut`_bkl*m02wr7I73J?J^z#mAYIOWT*EuDWDwp5-lg(Q9qQ*+H` z?sRMA9O&@6n$V`ZfB7gtmwf3hs3WcLnf$Z;Z-4$*#+r}FTm>((YF*3qQ>%6qc8B0j7)WuXN2|!LIE*vvGG(iLB+xV+S{$Mv z+NYb55yH+ejQKLl5EL&6GYyyXP5UXk6S6@bL2x%+QVU9zBze=bqc&k4B~8OW!0Fq| zCl6G+Bj1Ef24~&X*b_vXWu5IkhJ6Y%Ogw;zhdPL{rp{UZal3Y>&oNrL<#3h8;pa|a zEXQi>jn)rSq+d=bnZc4$5=PthET1--0Bdngy>JQ%voV@iF^|ZL{4Y)pTlp)31TzgZ zz7_p`s#TtrtSpKY1s|Wv@QnLi@oza>M?3pZEi07Q4;2W$RotU7mnSsKLk~gUtut z;i$lNzgNR5S6^!B+}Q%@uPU?BMD`y2lF)DYwUJJCKM$=WXE`k{Nptx!)I*5fqQ6nr zA1n|)zy7*+x0p!)jW}v(j6v|HmZ;#Y4scXdI8t{_PSn812n96DxGE@ZLfOLnLaO4D zUr%dEDkVQ#n={^pP6=fHQB~D#4@;nS1x~e9x!GmKNzy_Kc?wSh=hDeNB`^G8M)v)^ zSo5r#kRzC9>_~*IXngQ9>M+@%E}>iK;(boq68d@YnrmBz~VhTHn~{D=wOr1Qh$+62JK#eNIUc<-#w@UEpN5A!xxG64Ra6f#-QYCr(A8rFQ zZo!078R`tdE%D4l6%B^p~P4x z`Ylo9*HvfK%(0Yod8al#1Ac`1jedCxwjky|emtk~f@mk|y+(nRhdm)0VuA4du)gZT z+uM7gb_~d-nq`u<++5Czyb7Go1MQLp+v;=w&Im|hjLk!FMmpU9g20i_gib+clvWP6J;T+gj2~ScWt~FGN=4A z$kB<7{p6p{lhW_x$ExJ*HzaKqsWfcn@%Ew%cOU`n<9gTn${~ zKH#;62yFjxch0ESAJEtq-7u6LnHxGF)>KC}Y(G-MQkf{nX#XNvB23?+&`j!Mqd-1- zq-?PKIkH4dudcMMiPvFf=bu2j9}|ZL9sbFK%HP4gIvn+JrUJI0o?g{6L(RlV>S-(j z66q$((B3cu0L?%$zc9BaI3-ST_|wF!w)pFj{uK=9OfnGoVHqqKbv)M#I*e}LfT>sS zej=j(00C3S_lMT488fc%?ycedAX@4Y#i%x?Xy!$US$vsW_(>;_JwWSLw8$>*yb0nf zfo{wsxq?E#amScj^4vc<=X4z+U0(FUBv@fg%RKUZ*kd1gkFXz^z^`7h)orx>KHkdO zA#Y^AXHv4LC066i3S{*-5wm~1M{3sQX&xA3K4=Y`gG6KQ{S9?KDA5+$Pwg8hN?J6n z6U0tUw9EIQKTe?c7_MS5_kM<^z@CFpe9QjrPUjJ0-lB|hzwU~al(c6av@MxkO7pNW z(~$nlI$B~?WDy?;CHH^C^ zTxX*Whv`e&yXeE&uBGqo+ot7=Y;&CLs}cB~>LG&^Y(2rOJmh**ivF~7vg~ig;>o%- zvYy$=tt&4O!!aUM5a*%EA&rLov)*`CGbk`j2Yse|2*JBMhuE2r&asuvjpsjhNT(N82pqP9M@N>?(KHjV39 z;%z?K+%PgMti%sPinZcX3GqbB63888A&Jf#3OVPD{XMGzE;iuB11yV@qydgP{Y6~3 zy1&(LKHD%06Un=fI`NPzT5jylYS3pzc{)YmTN3ALo0c1oKz7z<;kO|DD_(qm!Xa(P z{Jot20N*CL({4}`ZreZUndML6+wiXGT}hlYRp5&Y79;a<_sQq!QJ#j7U6r&%oeY1y zZ=3i}PV|SL%A)5*j)zn-#iQEHxNqGk>+M@!AJx|S%qikX)GIHhIIQhdW5OYT$q`0> zm2%p3>9Dvw?dnxC~>bHTKa`I@OE%$gx>W>Ho-^Q(@mn^^3;H{z46d4~3TSmxspDaJaUr>|=0i6Ga2Tr}EVr*~z5 z-dwD>Bc={N!nQQO7;4rrD2jO+F~M0*_5FDjF_xB)+Gn)`N-LD`zl#pLG`7=Ph$f9Z z%!9*oj)$jO>QwPsfchw^`#o^hamgns6IRYlZ z<%i9VI%gQqxUIYS5pA6rp4Z+clBDn(8>GCOSkGHexEaw`d31-V$JI|=4DvHX?Bl#>9L0~$=c{P z7k9T?q2XjB8Q^nQ8^ZcPRTnBB`=Fp zoNL!%g&TgH)N6P{WamEo*F`Pni#R@DJpB*z6;4QWX-~;M&%lrBYX=EmMm|V2YaRap zgDmYN(5co3NJu7-pQ$~6D(HM28pq+=K!i44*50m*oPR$ znr`25?o!pHmB_q56jvTBg7Mv#%(zn6;3z!-{VUb=HA{~TLnN+&(MadN>Fr$hm*MMs zH%TOIs0fjvfsdDw&Q5t_`c}5RXrI`Ys9sf*A9ZBF#yQBZ6A_AqT9%I1x8!sZAo@ z!N|pXI7vn`gOb{0z7AT*QIhW_*+r)=eKKP6wzC>jP7X|lEm^! z&o$}LTU%P{o))sVEWfyt<%v);xpCXRbNFJS(sb+iZ8TNUqPI5Fv6lMcTyS@C4u2oU zqOKj)_~rd-RXWO^ia*we9=;vAn@6>t6*5gd;kH-;{J`TUIr>$NH^Sd&Z}jWvEQ3s8 zjLLJqKyX6it`Briq3n;^5^v`V7T^Cfhu+rkNm|dT-NLD$m z@T+wmbIy5RewEEScsfhpX?)G#@ijgb_#CZ{nJ%5GU)WADEwcq|bmU|o%9B_a)9yd( zlYc7LF?pBQx4QyKb0*@Tk`w`eIjpT~KiT(R_07MPe3e>|o+-L}T=!|ylxU?b&T~Z> zkXLDM7w)T%@b}Fq7_R!>FWqGNRyg@uX1HbUl_HDgrrs~^O=!ml?o=Dsd zG05VmFUrJkR{GYB!7Uc!G;9VrQO`=OfHa5ZN9)vk*U>24@ucigXjlQU{{RE{RQDuF z1;+2bsB%9#fEL2zpYkcvwqEF-H!d+=V_Kc}(8nYB3Yszd&&HE(SdU>{MwQ^rS5%A7 zSY8;*#ucPP^8?@L04F~{IUrVv7)hF1eT~%q8L@*&wrksKtAKSl?ZzkhPZ6Gf)#H$Q zWSsOAy1d%6r-|aa({AFPYp5n+99xzJ8@7VOj9{n-p~Z8S`X;Q`(^*^EU9{1hI;>|Z zJ^eo#*1VI(dK5P1Tb)7}E&f<#j$&e5_6(;U*sTb;&`oEoOLc#Fs6iEmoqJ-feA7D0 zJmDC_1q2Z(Y!Et)$2?b=1B-&Ar!~22qU*jOyp*C#Jj_E#WMHh>@ADCpSx;^DOQ|52 z0%XWxkZ^wrkh&WfT9H?w{{UcAQ~v;}A6h=k9Cc-R+cDymK=RYq6&$~I zo-bjvpgv1r{{RW#{RL9kT}X7%yTp9*y9p!I zZRW1{ju$XSSf40!$7SOm=lm+JlriFvK>5HsSJdNyTRtHLbeZ;y=YSIO3IJqEf`H!II{3@;8nFr<=Cy+%P!nqZXGvIN-{5Uky z0jF83CBfat%6a?^G-TEE0RojdUc)u5r0a6oHq(}bpPD@L^#`%6_?Iky>zjWnuF6Lv zgG*wsW6>d!-%y8qcw{&k_w+u7v!~GDSCPD|mu&f+NUmp3)aS9AayAb_4;f;P|`O> z?d|YB7&f<1$!#k{y9*4X^ytHnz~I**^FblwAe<3h?c=~aF0f4Tsb~NS#0>Q9T!;2) zF-Y*U3=l+SHY!Ja9C2K=5^Ci^zH1s={C{><>R{l07~<( zwA#y}!)WsP7b-Xfht0|8f1$yyhr=3^%)-j)v2!0E?=CvkQJPM}X|-|o(D}ONq!?y1 z_rK5NYmV08dwoVY9~;uyMtdGl^RC-WB5>V`s&l6_)Q^n&R4MQb}G;7UI@-lU$4Dn#XPpsJ*2E#<=qs7^26S$$-9|e*G3Sz^9;EnG2CB(1e_K_dip9COWiE~hK4)Qrm`TuOY#+%uf>k=%}Q z52bADo*cc>+D3Vz@^S_iU{EpWF~$#UV;t6f=7oKwS}p9pV&SC1kW&C070yO;=sJT~ zRc=B{xtn98%c@>P6F9&uco-i_==@QjSwVI#rY$7007z%yR01#n`T<#Xdc3xN9lX7V zY&TDEu|?&sFfo&X>@)e+edeuob8DN4Qj0U13`I@HINM#lDgjFwfN;3Bkf z#0DhxU-R4At=a1qdVZO8Y8`yZnl=VLakS@}&$!dp9RvG8$pT3N!ni*%$0t7A(fyW? z!D?Ir@;;OKFEN7iLB{wH9O`b?DDz)0H&-?KRW3= zJ*ULb9m~g`7$9`P#cf_#L2syDBv7h_zA=mrgUenkURgU`oa@=AYh3fYC^akVrMI@U z6H479jx3W}{{Zldc$_Bh?1@JN^AH>XlUBSd_JQJyNuWsN5i2*8%tq|xdH_%HdLBKi z(;$Z7@g23SGevA}B8q6dvY5vWxm0Zgu^7n4GILU*k~ET6*&a)6;olJ5Sqs>7_Iq|9 z1`0X)dXIX2$A$bwZF_BLEs+x397YD#&j6mDfQ*{-KMCGjX9QW^`~Wf5~Jjf3Qq@km`8Zc zr^p4cA-{L`xyQ@L&G=RprluL<+Qj7*yLwl)+(&9gr?srS=7wf)-cuP!JBCNp1B&r| zPF0?0+ao1;0ArI_%`0eaOVH0ZR|Bc5Q7zL)zivPo&S@Ih?%GHP^Q|~;e5)B_3ZSR} zwlk1(no5kD)K0B5wmYv5UPT{*p;o){CTL^|RE@yo^UZMOWVpNB(sIBvNh5R~rl`$4 z){J0?kCUSw-%9KB_(rd2C$)>rF+!>UUW9cR@6B@KDaxW=Uy0R(sR-X)%bGQ%yw_05 z=^9%Dh?S5M-r#>z#d=1cU}jMiYqebDk6&_o*PZFh_DNBsY@7mE^{(?x)>V)wJ5Djj zdi?(YHFI?}*&j(lHmC0HU!Elo9lHMj%U28dbw8jq?-McGZypX+JLGlzYJD;>E!3B? z{{X6mNKfj2ko@bJ*6-R&rX`8V=D4Uv(6?9pe~~{GPeX{-mu{%O>HTX+$iII(QyD!M`qs{$B=)6ew{nuFA%|-B=}lAQZ>5YU9&TigidYu+Qn%D5 znXjQXmv0nT)}drZToMnc>_7VXs!(5AAFy9tT}5Mkf220ckh~;;y5qMUDyFNXYWMo( z>b|T*DQyvw>Spqh7EzMCdj7Qzk>KK6P=@82<{M8e53w?_mv=x3I3D@wUuvpLmq`Br zU(-Hu(pT1B*YtFX}4MxrkCPVZDTi?43?sB3x;Ip1xXxcs$Rjhjt5Hcak-spbzL*n!(i#SDcHC* zTbqm98-yzh*}!3oXwE_IbKa-6g_hgMR**zVV!MtBCnl@uw)>l=az{0Bpa68K;)f%pd2_Dpb@G&aj1HC0>+810;D6I5{#DtS zFuATr#F+afz#rUipDEPFKK0dvQHh@m7|IbE9bAwIP~WyKG+q{PpEi8 z6Ctv;x#uJqhT^|0gB+Z7F`VPE=~3V6z8IRyb8BGG-OCr22H%k}w*+!|;OD!I-#w~6)5F8NG0aOtzOvwg1R6|l?vE1q$V-rQG}92?WqjP&|fU^R~iy|usEH0hpb z;8@6wL~2hNKPkyQc|CL67_K%J2I@_V@{rigNOvv)fPd?l{EycMpAz>a1W43szdstMO-I=l+tx7)P{RJe^70%&|deOA)UvMh}s7Cw$0EKVa zwiU9c7(D(0uo-Ygban$F{)hTiErhos)76iPcEf`wm-3%|y=!B{L^hEy&cdVyQ~XCi zd;I?ZN};4izwnrpZ}mnaxQ@ebKc#H=y4P-&S%%;g7)bvBo_QUAPt)F_#L27J=IqLg zTXx&XUV8KGR?;P$6*EMGsWP@W^sBxewli8tLWYo9v5P&pFd7V^ek7HS^xRC7_8THL{dWE}N_=3qcs$8pK zz!+Td{VM@LEWYe9{(maop0Nwri)>Jq-;w*a=rh>VU%Fs(C|r7}=B!zU^IT&gm51nQ zr~MjMhGho_1deKr2t2rqM2Sb<#&CTqOL=ZBm`xFo1>{JejD9sTtWsLYO0GQKG3$!E z6NvP42`mG^#~%4S{#<@ESP|62eS0pPt95H2C3EH~{H!thALm(Gvc$eaL`e)7`vafS zw&rgyPK#y^6aq8Xj8`{*c?HRh;UJumAm9*lT@cZts{9PsU-=Yf9dU6V^{juu*0^O~ z3te%K-o|}9)meO~q8OMwVg2Za)6B>VeUYfe=xw>dCWWmYON+=c;-I#NN$oO$%% zS9#%&hwFa?cRHz&LyV=O@J|^YV|LG=_3K=`Rz|~Ki%+{M_R(KNT0*$UZM>1`Ue#?G zf-u5xj55TqBmg?+k?JeY#nqH%sr~0t$|u$*xZAhPi+&GoMQ3>Be|ctoR!{wwtHr9Oo2&`oALwfGL%`t1 z80}&71P`DUW5(qgI~kF;EBS;G$mq4}(wb=FsT&-BPC=zCdV|e0o;qOC0uNf&<~AG- zPJgX*Iw+XvS8RYXBl zc$4h;Rr8~46)ad`hfWSFX8u)cTT7gSf(a|n1b?2@%U>o@4E&1}&giVsHo zKc#hwqFp`}>|;~G_WIDf8NTNK0D~qb?r3=cTc{(~2RZ)$$E&S1ePiQqvP2cF zq}sAB6dV;Cf^pv;TJ>7A?mJj0qKcsf6j4A6MHEz&6$S0$SlUTDpSlj!?#Hkmr`o5g zm%3Gkq|vqAv~v{urL)BZvj!*{>U)?P)t3539$*qFom7BB5J3c zYmc^S)5Yb(EVmoUBZK%TW0pd)%Dn-}I3zFtk4mgQ%?wu) z>H2F=3~{ug<^{s3+sg7e`H!{+af(cZp~mVOMCR?Fw6v4#u@(YO&U>DJ3ZZ)qt+mXe zcu5HfRp%L#Xan^%p{42*rj;b^J~m3lhxe4I**<4!V;g(1CmdDl zof_`^{LZBw}GW?pos`Oalqobe|XG2oiuZr z1Xh>Q+6m$X-hVBGj7Aik4uIp6>0M-6R*t&GtPQ8Nt)!92&TbLn4UAyqsNiG|^Uo(? zbEIh+weQ<4+TzuVM-rJCdLDCtbL~@0t7+F57Rt&=;C-CS_;Lrec~vJk$=)~low25x zR(3m0KT6Plw{;jLu(Xl{h9`p(VM)s?bJT)B`g@27W4(!02u~Qay<)GiTp!~o5taX4t8B%FfVv(%D#t?<6lP0DF4KU1F(XB49EsEpZk$DpacWwX0ZIP$}O zbyIr>1a$x!u#K25@Hk?S1^XaC(EvIUJD+;;op)CL+SM*^1{7}F68G}QPxJ3t=k4%DX2gmH2|X+7oH3QD zFWz##$$!B-bnwud_b>B3u-iPd%Xc^iX8}nIv?`8@2Vq#((HxvtoN4<0tpgDi<>2%J zQ-Syz(Ek90%Krc(%(;SOJxs9-kINP1PbkGXxw$DbvN-w)a@nKMbc7ye2(GRxY#=q{ zx_^&+iASGl5%-ExKb>`O{7TZyep|zF6ZR!T575_-jmq(y*HAj?;^{S{j)LLUSc;y) zMU}8ftO)fTI`R{6+V-0oe{{&jv-HIxYkCc|%l`lqE6c69-S%5>0q2Yody2_rmE{{) z(c)=$I_u(*Ku$+W;I-4b+T{NLu;0kjHLn@l%WNalZD;#Hkuvu)f_CTT0Y|9EKGlP( z_=OrKL2GxqL5z7=9Ot>~T{uj#wHBMy#n*$2L>?SCnLi5lEi-J|cx>_qHQ`!Tt8Z-} zGYMnIT%jVn`%f0aG@FFeuPvVNq4MLA!tQR}aaEdNs@0O^Lc`Qtmbuj%fF|3X^Gk&N;QI3vF_>btRWM4fdavJJMdf;b$W^bJVk zA7zICV;Ma?Dv9D@^%X2buQYQp`zV*cwWVccTWFNB?Z_>hesya@)*;gxWStq}m<3@Q zW1-DwDv+m;GvB>aSH^RiYE3(m=*CfT=z1m2m*M{a5nCCdx`xtXI9MWLzwj)a=jZ^g zI`d1K+D)Jd0vu&de;TIKOK*pT*hoMnKmQ-r=P4rdzFehpV+5>g9{ zcCG6e*XKCF!Q_1fB$hDWjp_3f(63szE|aL~kSz1SMZC+H<;Ti@8qQF0I%wC7yqQ8P z{{ZaY6C0*eAW#8Z<2(x9*0q~$Pe8fy95HN2V{QywkCz^uPv`0@mbn}C&7^(epo8Cm zQ{CxGx$+xpgM%9%go^2jF}M?8=rOpC z-=R!Vc&+A;W$1HQk+fU0NJRd__QERisAC-QlM9w_;_;18_t(%DKHK+x}xKkm* z`LS?E)PId7x4Kh?x}1fiPO|L*goHNGIUwNls**EJDR=74llj)$Y4h1#$1|}p41*v9 zg~%i7DQ~P=;2gp{+-_Mx``=PJ{{T9h+3IMab#o!Vb#6kF{~1Tb>@iW%Dgnqh}^IX%rRXp2yePyCHX0=@FN6 z#-w>W{spfa*fe)B-z-FiO_N5wSavw>Mo-{tQ^P+IBDA!Q+f#d8wq=IVAfu*$M$=4iOd_Z=&2PG9Zg%$}#wVlaIF0K9|Osy&{^ zSJE$`4P}26#GS@iE2d6)ccz66GSFd;HPYg34 zk7$nW@m6<<+e17eM4h3)Jv$%iUeY<{ zxGxWBc9&ixwYZ)D(k+*or03;fCIS47chuH|u_&U7pb99Wr~;OfmZSoTDJp=iezQ#) zC)y)|)P@t1aM&Y_r=aGlYL*clE@J@;w%wJz9elDm^&oUTsvUb>)AYEbhV9uNLJA#( zfrc3-vo)=L=g*dexy!50s7tS0+pYYK+@ z$IArg+ZjKVa|>?_zHE;20HCoSjcs_2;Z5s710S``0 zuWI9|tgLiXR*BMhHpm8&Vi*2B9Q#7W|dd`YEfsdv`A9jincOK0mtGfpG(zACGG6tj1z{q zx?{&fZ5uC`%e z7LBM}9VRKRgG@~F$autu7#XF9$3ojliqRh0-b9!)c~Fvgmv>&BI(;iDmGL*VI(}Na zY1~nxPTusq^fT-}AM3a1j<$^yY@qp*kfZYJTh`tI)9gWAQ(d-?INcmSG2`q06(pB) zHlG00HI<2cr3N;aIOC?(sF(XaZ6vscE4!%F5=y9uH`8}Dgy~~v{939$QC&S*q!k$a zFu$pNZG0Q1kKEc^-!ShfAy4ujrB5G<9wjNH=~lLb)mJC<#bVlOkWX&Xm@RD+IA1d} zHb0e7i%`3oX7g?*xQ7G?pkFP2O2Oc8no6s3zjyjGEh z-f2o|nrXdGTT+lNzDeVc>rr^i#KtWmJs#MQ@&MDHLD_$=00j*y zD-qYGM;WeXP`kO*F6Fwrn9VeYbFn;=Ur|RdN>G(fpP9i|68U7K)NIz`EjHRx23(R! z^v!DD!E<^HaVFwp8w_iW!#T{kyGG-lJvpyx zl}#FFohWLoRb;reljkxc4`2ShHBgZ1vc;Ad!*N=_+rnT{>e@LIxgNhmO19cn=-&hR zavqDFr2cg+q*6o$uA`51+J5E!^71O2mk}|_BSuH1Y#l!G(C)XGsrDsL{{UW*^;@_| zTk9KZq3b+6{{Y`hgIKDX>|2h8Kij7t#u$IJDc^1c{LlhF**LC&X7H8j;^xZtPnZ6B zTgWC)$l(693;1hIxIghO*R3V=N%ISSyjISnVy@YbD{j^)T5H!oi- zp{(lj%WiIEVI*gCOsll#*CMN2cuQBe1%<4RpWcLrAEjo?XLx``Czt~CQ;~{sjW#r<Tu4lh1y=>ng_L zC7L-*!4x07D`Z?nEW6^m$T;P>?_IcRQCggpsyCp_mV~I5IS2Ph!S7Kj0Vn#FAMT%} zS!|npkrR(@4^vfgr1Ww0HR#621nyu*aGq#p$N<%pzJxYQdvvNQ7;}I=f}9KYAm`Lq zlHhtNqQvrfgcS{)ym8i}j$4Sw&WuI|4^ApP<#;$F(~27PuvDP*&l#qYA>4hqEgQlR zl5$2!>N);dri5ZL2*Ma7n2GwZpjTxH zbi0BAmW?}d)SqH(0A=8M3bym1>kAzFgG&s`K>f~7ZbcRgvIs5O33tUTp~t2LbZg@s zZYzHzG(~ZPm{qrZbHV(pBuoJ#$^QVyg*D4C;RX-;La8k*O_O(Mt1O;uo^XVDr}&OP zO0^y9s;K)qf;c1r&)3$VA%MovKj2i*-dO;yPoQc^7on)y)Y#f0z{WTrRb;q(yV!#) zt%6QfvPZb8@=bz2b;de_Ry4`oH5lF~gKbtMXSF#!0vm|>g{sP8a?SzZfyk*muOeY_ zX>!oZ>b*zQRvpXv*Rr|KE!U*TOV#&3d3@O2?-pYV{ga&YFn)q zDI-UL{Fw;lTae#F+NnE}C><|{n6HO+fr9P*Px#cnDZW-V-y5O7|>90#Be{ ztG>`<9Q_zn{u0vGJIU55*lqILE%^Tcg+pZv-D#J0@p*flHjUjfNUIR|O70~a*>b7| zW1OyW^sePTO1#!Hz+xjosYvymQ(w2cTTrPo805%i0O#c(yfp=)wK zy!JHl41d}87D5S+nqm%MIULaWj97Hf!$; z+i@&9fcNtp{{ZaNI+UL4@f@qtmb|a;M@i!uW4(gn<~)E*Ac8T-bsaK)opU}u+BFMR z!N`c`)00aUtKk!dFkU_gIQ{AG$9jIbscHTpy7QnLqgzJLn3!d3{+t?ftr^)ah~&jp zRa)g+D;!gF@ARex4aPaC?jdV?iC|-s8x<$l2Ne!_V?8S)jEJZQy=&?AW^E?sP<}|{ zP{Y{qpTOd?4<|mg)OboIp3hN<$@17JBAiv-fV1JvPsz6}D(CFdtaA?S9#8rFD{f_x zc$Ko;Zs)1RV(C!rifEli@W3}8?HauW{4X%FmTl9CSSsM3loO9`pUS#jHlU7wX?Zj* ziKuET;|Q#+CV?{#lnk&J3a1Uu2?N>WHu775-g`>XTc$%XBz@zb z;Q$}R)#xld-wf(EOOYIKOk*EX+wK@g}+(xP_mA z8qow_JWKO=nJ!5jjw(8`*F&Avwbs3R4LTV}w1Hz;2sqwA8TZ&WG(L5<{a#|Z!iZ^nhk*C_uGoBY2Y;~?) zDW#uVxR!I7P0$QL$8Y|%dNzr9Yp0~L$u_AJ?egxljv}Qv>$^PWh`~5EmD%Rv>a~lE zWjjXQ>|-AX*~4vjs9fJzc|t<7O&OML!;-+`p~gLawUd9NSw*6m(#AMtXmhu&(nWd~ zi8V_s+F0DdtK2;H-eX$JbRbeQ{{Ss^_x2odT#ly{vFNf#JMVEB+-piS)Ty^5a^^J^ zD$tENYkhTR6LGFx$)jA`q;}E6a3y9NfpQNgwrVzeiFB}5!WC6N>zZ5=bI=OA;e9^C zQ?k0YoCKal+9vL!82l>KR>@_g+}g_U23IkgmXSctbMAY3SI^=qR8hQj*2mdUjCN*d z)b9)b0B0;#xj+sj#b2<} zRuuC-(t>S=l$)nx^%y^`an@B^yE-Au(7@Cl?$%3L&BB=(7F8f;8;8AhmU>R1dlYv9 zNMMRgNHWCmN4|fZb2I5`sTsJ{tcS`RW!U9$#yGCx#`4!piq=bqla&nQ!jL%ASAA1SkEN#}$!tIrB`H*`8KntDm}` zL0AyN8&F-c0UrG41duc7T3Utb%PQ?8;zEAzE9&TBX~yzAEJh}GQAJ6v+4yk6H97fL zjMQf07XBmnitD@&7ABdZnS~YQ#jyR< z@+kBNkIJuGYfc6(U|9!pr)mEH57M@-dUGu-mbJ|tg`izg|QA?zfyWy8~e!qBrVyj;0nwFpc03UWzL-oZ_jvKXq zHYJ%o89^VYrR@7L^LZ9gbt@@6+j(VALj#fgs(0}oryx;tbu{HcTuRyC)Jv(}MgF^N zpY_#w{KgGFTkC1miDPKo@Cn0#{c7N?B<-(qXJ(od+})y$@uQ3b%J!y>K~LYdU%;A% zOUYV3pe8ntdWl>UmjfB>YrW0iMsTVzwc0IxqRG$A3op2&KVoi={{Vdot8nVmmILKD z#Ye^}IrY?PmYOz;hTh$}d1vTq-JI=b5kx>#oSMe(N*RYnBk`(L66g+;znJJv^iOW; zU;;yoFsgoW?YMq5nkSTh5vL2M1GQJROqEV+%$sPZgyOoBq^bV^>xzlAKzafBQSWvu z-Fq{e@`Vi-$^-4n|CGY88al-7h0M$!3J;nG-kZ_1c-w;c)m zR-ZHl%TXB13iQT3>3pC+i2ik^bm>QN`5KJaOb0-J8b5Z&`_<5*5dQ#qzdBJF2f05} zR*js%eZx_h9CbtaQOf}4nivWXyd)U(Ij8T7X$dO=eep@K_okS5>6({Mu}Y_M%rPS` z%*;>w#*Z!@NAEcGV^sX7UYYz2DzgLgL>u%qJgpUU`j$Mnw;Tri%>o2t{9l=-Z-9^W zEIqo@Lm>YEmPa2-EIXD=3&;w8GgdUqb0y;{?nC6U%AciC4Hr2=e+qOm#3u)9E)?>) z$UlWCY*jyqp>nL3at7<4OjkiZ(q<7I$gl&Pbo<}qRoWl4WsWWeIXxTvD!$k))Q!?9 zBLzvv6^v?G>~uJ3xX2_^;pumR9b5%vknYdA_Z@kw_ibwgmj3`|ZYCRYvU?6s>sbwM z=F@Gt&p9iaNSbwMcQ`_hPbN{uoR=1TD7ndV*0Jhtd1JStj?beqsVe@wzd2%O>cY_R>%4f0l zR;wC?{q6pR1Kdpsj7V^}P;v+7-l_?=La{tTV9|-QA7Doyk7}uML;`DNVo_xIRg`c( zy?uD9rrq@-qE@;)4GDqW&s={x>y6A(5>c`N!Q&Oicy!`$3E++^yS&jF-$RQ~S+cS) z#C}^0XFd9MuKKdE=2KUiIjFoM`j(b82xe4PmE$3l<0Ba4dgT69&fn>V!Dbf|Doq*3 zl0hW|Z{aniW=mS`mN zhswy<1XoK8?Qa-`#$p2ij^A3%wt;@va83@x{VTS<9#Ctu*{zx7)T2_2oN6mHUxQU^ z{Un)f*$R>S%p4!atj%sGh@20aJ}aAo?&2#@1nskK>=w^ENya}a*0$At$A0N>+o9N_ zkFYiF=i`hN0>H|=Nys#d)DkQ!Fl2< zrE~^2vy6p2bpopRmru2`wY4_TM;>G&fyv-^rv&W8?YWD0c9&O|HwpJ7k(hoYnul;b zx>S7kq&cl_VoAAwD(ZX}GDi*mPBFBfVO)?OKT-JA%_c^USwk`MNZN2u0+Ol9?ll|e zb_VVNc5rd#0gig(ujoZqw2EcbKG)?I!jjRBNzWX6^HpJh%Xf^z2w=y{8R?vTIW=J1 z&1Y|QaSH(|+cSbjMt6Ev(62egre#uuBP*BuMK#T~n_)GJN-hk0N0X4p_lJ%-s+RsD z@f23$b?y8wpSw8E=y|SCYgd!rsdkThvVvA152y03nroA&O{d$RER`Ngp11_{HA!=7 zn3S5)qt>i0miort>39;vvVAf-RjTFu4J_wEds~Pljjd*A$C#vK9(d1OWY#vyD$@Wn02L?%tW9d;|l)bE)U0=+})s5G@R@Uw=b!~Ri;v0E9q!EP49H?Nq z_RD6pr-0tt>F|e@6K~Ey>w)j?KT4skUR^}meXX#GM2f%a`6PxIT0i%I}E<1DgOYjYODPXZrRR^NS7MD$vs8Xf2eQpuS3!7WYn4A zhFI1_UD$BPBR#f*UUd@f)UR;N`)7xiIVbN|sp-O-LSc<*#ZBv7sV=7N` z_zdSX;Wrv?+n!D~glgj8r?>nDGA|4)>wBrbtn<$qVLAIVmtuqNuHrHWu;RJP*(A8p zM9vg6kYt5910uWVb%h6Nw%dFPCb9)F9kYV)=XG$9!uG-~mlbI2rC zxM@mImpApf&zfQBLQtF*x7F|ZoMw*{=S{tu31dkhT=Lj%{{a1QT5%h#Ye2cWx|jr5 z^B6&bG1js4$fcGkOjAgJAy*OgU|5gGoPM=_-pb+)7{w}>CMv_qJU87r&!;1$eC0?^ zS5Wz%Wf{WJ=lKxnPzBfS#?!eWB{De#kTd$`x`9=nb(y~UZamhVJMJqA8ZRC#l?N&b1VQmqL)&`nWkKagf`3j0C zX1Fgl!;(gOR*ANfMskW*k<|Dq;cf0OnZM_f{{TAZZ?$tRq{_HRij^`+!si~n`u468 zC?!=OA1pY-1Y`4kY3&k$^R{u$GhIrY?XHI(wt~@WOXk54`3Ig<{{XBcs*XEj1k&4D zPpDlRhZ!7mj1E1AYJIkzB_4gt`EW0&!2baCS8bzez7o?Q&B9NAFgz-N58Hs zzki9aLlZ%x>DG4A5&r-^K-xQG@CoL#U&Y$Ime)(CO(fDx7js)$ABXzndU3d)UYAgrNd3%{ zAIxqwn>L59>Y!h|dWitUKs&$INXuN9#41mrC4uS2Kvr%Y5nT<4yGH1g;C@v>)?~8@(9Yy;oDdUAH&QB7b)SAIh;ATg-8g za8GL4xw4khPbyuZuny56IL}Puy=6ZV$w@#<+) z8;2zOPzCfhURB4N4B|q6bXA5Fd;0dMTgdWb+R}NS$GCC$RH8qWp5y!}Oec|%K(s4L zA`+1lyW__Mt`Fr+!K)J6xP_c4APz_z3aCD`Tr7Hs=AH#Yr{1O?TJ`LCLVzjZMKl_C zH2F}|6U$#pJe56#J2biGmm&o=L~W4uQB5{5pWzi}G@#V`D87X%k|`ZF6WW+`r0rTc zqrY00LJy&8w7Z#2r77wc{`shmil_Kg{uQ=Q6ySKMczBkpNau!zng0M(pM^x)A`JfP z^{$qXN1pYcu=6k5U!loKqNYwGVffTXM<3o`J;in<0OuL@sP-@X^P|{4;q7D99DnvJ zG>W0eCmF?Dm&5O-+9mT!X5QXVjy36!PJc@2BDYqUVMcRHtJ}Tp-i@Qe#xZwzv6%<( z_WuCcswYjwYFs52^f^RGE+%yZ`IzG$D}ExOxw9>+TfsYTMi?U)Ju`~vwI2*>*6{hV z*qe)N?pb3YjyrVeT-D<8S!I=6VB$>heKL8jIMk0Z+Ud%~Hr6e1sN6wsh1n|w9k41X zV!E`9iQpzV20kG)sYr1`Y?mBl%TxMem@w zT3Q^_+p9`Ef@9pg)tGPDq>=Af+CblzvWi2%>JcB$tc?Ko}t_tP2^u}nqwua!q(Ywbqzj>!PQ^!z#po)i2 zgMI5jyQ7h^0Uns=+og4Sg|(FWcAIG^ni=7RqVsaBA1qrScEN92?87QfGWLtp)WV~c z?Gm~QT{=0Vy%@edCl2D)$70Cn0HN!Z`@jqDp^@JgCrt1;GAIN zj<^H$u8&#OZSAzJ8qID*6ARU1?r^bycyFgl`K)idh*YMzWWN;J*8O^)SAn58)Kw|F z-rp-H_Z+sd;QPHY++JFrw%C$#$;pgy*Yn5WTy^H2mn*&|Dh%_+r629T*gtI zhB40NWymA*6_sYE?Y5+nPni(O=ee$%)1I;0%=ye_9pUP_X{Y9kaU&UxYBq|>qfChZDdI5V4GjAtBy&N0Pvx^`zpI<8$B z4L%}N)F9tM@F0W}9rt*0e;^{6lgQXuOE!QyE1eTjttA z@=gI#GJP{sX=I&R&}4z<$DDm>bx2YR=knm1;LUAsB=g2jJly5lPpfD0q|$*py|z0{ zr=P85N$QS=73{u8s`x(bC()#UHe`Z!3_Xt{{QFk*a()Ub*V@Z23KKzp?5n#Z{ht?)J?ct&Y|}y1Q-OeS+a3GYMke0foULffch+q$*>wr0`7L6L0aOA>VaMfJO>;E5O~;bV z0x9z`jEtZ2nwM9V;*U><&6mk^Rw~jQWDqm_>6h|aX}UC#3FI=|#sG>rayp(!^shdn z_nnVQnp~*Z(r=-$(QS7;YUM#2jtAH2RiM_twB%S~L*$^(nVc8F9lH)|iut5dyOWSI zdkh-t{67NQlE;L{Urd!WQ>x_c&~l1eo#YXPgk^GZR3?s4-zgnyQX(2GgW9P~!{H?GL8VxQ~ng`Hlrqw8#AXGn3`~xTNJ!QqRFDc4eXQJ z85IxOt=?7Ks5uk$n7-v6MOj7F7p^$6$TyrjwT=jQ2+_GKDW`2~f8#+w1d1e}`I1 zHl?NwtG?sRX&Chb1g<}wTJgS^*82Dx%#Y>anDATWWheBb!WyN%ktL1kS!Z;FfgDSm z{J6$@b5*=osLiWte`^voqM&Sjp_H)6Cme792Nm*Jrz9)JRNkuJmcNPj8Ff0fX}HOE z{Pa0p2TM!+UsJTXxd@>S>3|sFhdkB0*6^N`+g9T4{$=0@TmkvxAI`E&S~QpPE#|Pp zt2~N@fj)pQQ~FgsPVUmiV-}i|09TnVAXOwEKypXcxScswtMNN_*?s3!lcyVL`TqdG z88!R0uaGTmVNP)*hzz6?oMit1Kr1du82r+{(eKL|g{O8W83)w$r$uEn<90ARmakHk z9*Fa2B(;+iT!_EarVsq|ZcQ~}p6#>CA5&ToX|bmy84tfozZJh6;15AvwD8UDaa6{} zKM6+C#GwpZBz9hvtrP$Z0a8T}Uf2~RGesn(HDFwJ71+I%1$OLlUcM$)in!4WHwZ90 zv8EGgYamu(B*cIhJu0rVcX141RrUk@+Q_p109>r!-v`{B*9ClXoIiGY7<|3LU%WkW zJPBcO92Ym5jG#U?421xmfP2=g9}hH0zGsD`J5@kjb`iXV_MMB7AG;odsQ2fJ*JBN;5gH=!a5{9ZPDtjSLm;~zOwy=VZDOy|XT4=>No%h(8hye-k^QCO%b%UFF_Z(Iz5068z7@B+O&;D!E<-|N z!a}it7n9CW{cj1L5J@-JPA> z<%#Q>p!`oKIU9|1EsUP!dz^V=*Vdwk%K5z6q#SXyRJR8zF-dIGAab5q^$m_{kp*6V zyeU^Zhah{gGlAppyO3ufytx3PtANPN)XH*t?Q)&0`WX)+hePcBE;U z@fU+9V4H8zkJhyQ(}G&Xng0N1OQew9*v%&Tyq8`NnYON{a~bq*KbWhL>G}-mx(#MR zJ$9+4vq~Lr_XqZEUn3Yepg66M>`gh2)YoCj?7$D}Rqk|AYdS>tpzk0n2pN^L(+s&4 zYcaz=wfHiAqgiw)2OhlBl#F9FrhG4YyoumHT#xBdod-}}(KpgcrH#YAq=V{p*V!n6 z*S~6VuLnMrYx^qxB7f2I^kGrTvRjNz42ntPII38xPiZf_mxidfiy=>zRrWOLZeg_X zSBCB`C5|{!_!g2wfCn6!ifLLUGMj0XDH$w;0yEmJ%q?ey1j@5QNbAVODzl82y2nnN zi`5-ntIS`x zNXIc-Oh$hS)&Bs5k7))7FB8-j&VQAB{vs_*`V1_u4>Fzi!}|#uPq9xWyL4#e836tr zE119VhO1>853>p51Mfk}{{R~7f8ir7C@*bta(Uyg>sN04OJ_a2BHK=$2~_;d8*pLi z&q~Qun(ApfP<;;}lg_qcr*ifx!xZ~HLU>zZyCyk1Pal^`^esbLu$C}&9XEP0+6hdY z{s%SBU1_=%#`m-rwvKqmmAQYOYpRwfx;ZLgdo!4@Z}^;s06O54`B!74=?cIhcJkbO z(Q>N8-|JX5dNaqWWu}+;)gJNpu4TvR*N&d`-wN=yuE@br zlHDCFK&;m25JnW?KqHTo``4dqSGRgMiY2?Tm7|ri3jhf{jdqq+lUwQ#zTi=vg09sa zjt?C4t~2Cbhp^l3snDOv>+TDFA%VSZs6X4l&0;#w*F~6XOBiV|N$m8*-mKGD%i{*dH_W3{aJ=%Ge7Z|y5D$;*xeyG~` zp3wPvJ|VZyaaT3iG(Gnj;*^w=u9_jV4QAw+t_bkT;rqX|vWR&6V$yuIOIuV6lRPVN^+d6{Z-AQ#6Q^ui5nmiX! zNhc$3xgA9?SiRPg*S4;*!)$RURU1luboe}j>Frl0{=>J>rH&RW za`9vWt`2d?2e|sys?A-TO*f$?k*EtD9{Sc$OWex~0pAhs&+`?rW8x|FSr7UvDLCY? z!5@}8`qv*}``GX%hy=zA#IDiPuTK7z*|Zvc?vV@<>$7>OFpu|&3`rQt&jjQQ<2lDC ziteF}oM^g8;;n>(sHXKhc)V+*UFgH@VtYe!*@|EUqs?3pq$$Y8M+9^=m96=nB!(%p z$eQFxC6_94K;t<+pyIiGO5HVUi)}ka)fZC`MBY-LmQ-Ai-Sz}}W1bCH()DZK4Qi7c za?LL*I?WjY{%m6h7{{+)>zbb}(>fsUPn8fWiES?9mR0jGGINaJ)higFyP7*InOq3Y zLo9&_UgL4&{F>YIr@ofz>eEfYakYz17bm%2T9d;b9c_EWNd@Zp5u%AENY3*r`G62H z&wjmzO<_CpUgq@Rq?$8sVOVYMLrWINvW(lo6rh`U{OpM2IQg5LpReIntjMv{A(DN< z808zAX&_gx8N4~71=G%@V`)5U6J@*}a=`nEZ<&EVGT}%$#w$Nuf?I35xFw#`!&VZ=oI|S2I0Z&p4=XK*Q(xGwW|%zr*}LY;<_nUg-EGI-sh1hwI;2xR+f_^ zIPXPlNM?-DQCwU>XA4bnD#a4@W;DR!{vbgzTSt0)vuqhvzFtRO`Ta58xg9@A*0o!C zAhxuW+bf((V>r%wXTRgpyB{0sb~pYUF)6}|DIo~oohW^(0Us~H=!zh&(VN($YXk(5sk}=++)gZLDf&l>ABZ6B5 zk-;M!O?AH$ts3LTs{)b>TgS;AKJ{_hg^aeA@e?tX6Df}`0Y-Dz+}6I)&8auJ$tc^K zLpM~G0pz?+rcyq2UVwweRaG)Y_jeZRNUaYMkjBSoYv>om3VF$2F;u>R4yvWnYIeM9>^OiNot!X#0gkY(!3eQ{ZOhLouj z+_YOkW(yH^URSZ+zN#@RXKV8y%$Mxd4 zqehZVwW;a3*KKm_CX;y%pR8P5+E{t9lrh9G8(|=Pz@9QW#Ww2cZds*YEKKL-e3_P|79p0rO9SxA;vBiz*1Z1)#LqwK)==BV-!Yo*;a33nIq6xl!E0|bB$|XW?fxiKl|Mppn%cixy-G;l{{T?Ax+pNA zjul6s1A+KfZTxoLN?YxV%p(H}k_Xh*amLS}Jg%1WmHzV@U0xKIY!R~$Suj7wlxlZO zGOHYFc+Nk@v~0XP5jiPxpnuCkI-fu*77$u_K_u;$9Q|=x{c=*eOy*b^LwJ&go>BYT zmTa7UHKXCwGER8uDE?I465X3njvc(ScO8!(*0#Ja25zt72tHZ8I$#>&rZuBUb$ zm86Wn5<}(P#0cQ7Yckvb!vJ*^(D=#*i%^FHJ7C;>hD~#^GUquzl{ycb4w;rGO3e3^ zvwcIt_VL1sX4we@KmN~&V{x8s0>Z1t2W4M4aag3UweAi=Cw?*^T5TLfj&hwGSw@!VH5W{qJ z7I%(O9`d~B8*)f*PeF<*In;`BlGy2UZ7Z?%mT_tJaoeMOk&FVz-!$8Vv^Nk-G?9rT zZPD(N11F5*Jo*DuPYj=EhHtX0+f{*GSdYrN`HOYNPdzL22*O;6Bf`8@%DdI1 zki;9x+)5Ta+@ z<5gohIIe_OA9Qi~R8V<+#tzMpN0dF8#Z{+M zmMZ7DMhUB)d-fm)Hp}^s@u(%R-O}1o{_7L{YtwIa2?fZ7;ZnGpDwrqb<$C&$Y zxzr_u*+=FCS1wdwC#|yuEWlNwnkSu-ydmzFI(V56V6H z=dC)CijCSjFqGX_Z(iN5Ql5Le8^LFBu2~6z#@4r!C+YHYT35FEhMOF3d8p~*%+AnY zlP4I@0DIOCieWm3kJi>JgBe*CBzY6%R_pa6aqI70j<;hK^|i5<^D;65q>q&ix~3YPKV;mWysrNMPKG7j*|E2Rdz<|{CCcU&5YO{|L*BT(L&RfL z*KI9c2-3pZe>Lt(w${KPag5`iO#Lgg*JZVv#JUEbBq?zkz#V31*iQ!sgMfHb_+qkk z+X?k3{5KuTi+gL3+vZrnQ6!DH{wIOyT?#Qtw1S=%ocR>nSG#*{uG)DPKj9_PBPTk9 z89hLPZ~i8z-0NN#Je%~46Z3g?vi|@q4AyL#V)%>47ZBPbeVREGN^^s>5R6CTRHX3j zulyu!rhTy71f3O1#(#J)OAb0?f%wvjQI|4bpZT4Vz+t5hS0{U3+JBL5!%>G`l@=Ie zNa803LNdhr3g{P41Ar@vu+<^($$?(go=NT2M$2u%EZ_dG!nLiwAj2snY0ZE#b2tA0 zTC}RCCv(DcrAkgQ=yYRG$i~t2rkgMZHj2%*@ztfx!a$HJO2hyfOoRA=U32NW;DkG9 z;{;@4LVu-Y>}L8E^_pGJKk*=2SRt5<1-Mhf=hwA94O>Z>K>JimeHd;2b-Ac%ch?03 z*1k^H40`_ng9*Jhpz_E;`% z&_@6=#sM6RoyvMJ8C>)=+`oi$dH!#*M2FTqukx%f5cpOr9VX^=nWT(GxkF6ZO!OSr zRvM%!wxq9py-aJyQd($nHrJYj_qNFQcOm@Dw>SgoQ(s9b)^EJ_4VnN(bHS1w&Q-wC9?Au3=i-hHSYF0p` za)a`uYj~Xh0IL;r##5>v!lONViuM&qG<@?_BK9G-wT=sjrbq+4ZU_gbdf11=S2oi+ zOtV|XD(zz%o&79NNn7BcGtGd7adu0r}61t7C#ZoSC%aL z47!IkE@^I5e-Hh$PD`5yH!-8|hEuqYKzscSVNE@~yyic$M{Oz`Fp!b@Sm(;7!y%?KG&u!bY)RR*1L_7}Ql zRJQ}~HyLm4;PaZ>+otYBX~`>C=&bbpGUC$hC%OVL7o0?Ag#erY4g`n!VzBNZu!cE~ zocA(BqBEPM+QjFaW4B7Nr0VYmg?V8Wg4_#|Jl4V8w;VGG3;DAr3wRAopvC^j0Zeq5-fe>57%1y@Y z(h@=Blb!(Lxy=UsG<&l&_EX97k$?c&a-<%9mDR(qF14%OT|uVad1eS>AVeDkGZWDN z0JJM+{{VAtq{b2U*IOCB9k_-TxVK_HNk{}X;7N=QzlCjRgJ+H+btBA*&UsTEcL>;n zT;;@bORQ=DL}8Li@}FoMaexOn&1vY@@M(S`wYa#sS9oO$D)LEF!w!4ko+~vgSsf74 zOz0NZQNjsjfg)RBE8MlnRDf*}f`50Mo;qZc_|xRMx4zV^zRu?4K&uycTdS|c@^c03 z>qyg|RBP`Q#MbxINov=Tc|*)#yGb3p3iO|plZFSs2Q}nc1-znJ8)#H`K^Q%LVn3yI znq~6ndVZ&UEK)c~qr$IpTLbkq>q;uuM+9X0ooh&l33pWkyD$}l;;V~x)1rkgBWYS( zg;ob6Y3uFMyzJ`t_xG_i{oIl$-OC?Q)6*Fg#q+-1Z~n7t2+V-CGsjGN(otQ(RJ+*L z)Kf}N16xf5vo@hCs>)=zRse42>YuM=qr{nvZ0MbSSYB#gEEx2;hG% zweqzw5~`b%+D&eKwHk1tR#f2>{mb{=_D2Wey;1d@e%j*H%#yPHlXga2=c(?XZ86w_eg~3t0tSniLMg3mc-fv)Qk3ddgIu@T>A$;k6IJt?Yh{pQY)i&{O>Wy+L2u!^qF`Ar zW{N;0#z?~vk8YfL{uPg{x_z!99v3SVdyFIT{PA55iU-(I=6U0W*fDQ5;jj)#I0LI5 zy#-B4C8;=CKGE29hP2uimuqU)>?ZPwK4Rw?^r{VT*DoWPcKM?u835c1dkw`LXiFILjP>j}sdeoJ{{TRH6`JIUE|Nys7{)QjB|$xE6?CI>*N@fVYJ8WM znON9LdV!Bp#P|OICYS7X>OXqXk6g)*>sS{acb^=B2ja= zHo~f-gXx_0r|nx;Nad+Hb2!E;r~xsH~aJ|_^!b${5F=h_NwwD#TH|ak_LJGE0>2$)K^WpRJ4=<9!~>~ zoPM?Gw?gy#Mi~v1325dvW|B?Jq;&uRhR?2h_N*;H>kszllF^bG%A^}u6#(IKPvAKJ z0BF_~akywrLag~)?s~Ao&J$wuG3=eExC*4<{!BK9zob5<7nm!F>#BGcb#ba^228QghT-&Q{If^rY_F zvG38#B9e6^zFOcg0d=~H(yHC;mGwHXbi+`=3UyBLAfn#zxQ%o($d zz_vT{Ua@)L0WXKrQo(f?qVwlIpyZK`*aMHDu5!b`*ZPi}ZsEC&m1HWwAtV9c>CI_F zA3{;Gen*!m$-ZJw4?_(4>bxX0Vi?#F>*fJakGE<1hO;fC-c~QXpDj=pB<{uu>C(15 z6XD@+<43cTQ27!+Ftl7OoGBR|oagYZn~NPab&XmnrSk#TpbVg6a4P=(r}V6Olbhw$ zSsh8X>QVFaj z3anHzIba7t)B_CFBHgq>zV{^SV1(AG`emxx0V{jqjO z)DPqvIM&j&mN}O0X}zSCzs9Us*<8hU8GA?^f;lC>#=4`c*Z~&krBs$rEo9r3&!&F7 zRhPF>Fu)nes)ZP(?wQneVC^%(TjiE)$`=whKAhE8vq&O&zR?SJBX`Vy#;@N(H%x?Z z^GE>%XFHE?^WLB~hTaJhB9A1{M&N|W`J@1HeZQT36+BHkF;b4?`x(u&_BQnEr=AF2 z01;z2brKw~_swz_>>E}83f%tW=P+YMGpH98AURJj( zEksHRl_%y0o`3yS7uqLP$eK^U*PV>QJW5*H*F22FE_kUXrE3>8y#D}dUFWXz{Od6! zw^5%eNeT5h1M;gAJ2YjSmL+x6k=k?B#V$xTDC>VFO`E#}sO+`zL&(6&{& zbrtJ6r-rnf`%@jwj3OA(wg~=03m$rR{mlY?gd$AxsE$a zcxR8xn*@^|L&qYvCYS71GFv>`M3$1Yd$2Nj&-AD)uVar#X)(#Mjx{}Vg!QSM=sYxC zMP{9~^d>T?8j?|auhi%D4LIqxGToc|xuw)qMYonYhpFS~pVGORwa0%3SV3&lz2uUZ z%PWA&%kS!YdslsT40k#{l&>L;Qdr_H4loGEQ}wP6F$KeGNeQzJZzPkz?h6$pfD{kn zC!sxmI^m^Gomy&qyEXY8T=Kswf7Q-}YUb+KOJ|J6XS8F0*~#Ot(>-g+bfSN^EwD0j zf03_Ew$)l|>kT2TRDG4CUpHywEL>xpcjp7J^sh40^A@uUfKCa)>$UgL>DSX(J9&)ay=WN!Rjle zi%YrIZH>GpIOQ=)eq+W0>oqA+fk>63} zXltWSnmG)}42ToZfu4T~yJQZV2-^gY6M#eQAbxcioJJ;4P77TRP7%Svgkukhem~ME z>lgNSm#C1&-hHd8!*stc=+q2u9dZcZ*J*w&G!7^?N<2Bi;*--e{tRHYblKZMKH9xHzp zX_MRB$8qFZY!Q+^UzZAUdgQR{(2r^_?R4uO6zM-|xVr;klM={W%`W^S0nle8{RMN{ zp|+P)l$jJ|xTfDbO%xNQ$$4$|h{Y?%-+%Kqd^2X( zo+Q-e)7&C`no%P;JA{Tt+s|%*n#{bki$S^6V2*Px`y(>Rza?bl4?X&y&bh%g${E7R zBKg1T0OW#EtrBu9y@e|H@N$c5r|^2Ge#s!;vib5&vFkV9@Ue2lFQ+nMwou~JE+WMcmwzNADFI_MZJuPBYD4ivoHg&?af75 zsM*Ncf|Rdrfpe#5Nh3z`i+2N%WX3-_;XGSy66xBUcJswGy2dcd;GQ_f2lKAGTrgil z_F#(fNg;`c&GP)Y?0frHoE-|`G#iaZTUfy`v}qukSs#;vFi+F9aZ3{pbr)r+-xx_N z`4sLf;T{purHUmJJ~ubhycqbxj}bP{d-7%^-#WPXu~#RW*AQxX^B`*3>+V zR1KhKA+g7);@mvb>=?rPGB zqOzG=%ZB7gyF^d~&NI}3kD;m~Y{cbeGITjP&pGt zCL`sp^izOTG0OqZKzr9=;jJ#(Yg>Dpn^QS0zy}>$`EguD>=vsHoNE+{^Ko;Q`1rY+B2PHWnAT~X$k&bF5(D`+N)c?JMd z$Oz6mbgm=A_qJD_E3v>B`%6em;~c5r{*~|K^%}z8*M0YAgNVIMQ+K+5cFX<=&fMu! z>2?vxX{bRYw=gV>u$(k}^gi{2FusN&^IY%Td5la+80c^h`OS8|KeQ0|iuzN;Mb}^h z0Pr~;qo}TC;>_Mzyf8%DBO*x(u5d7UIO$!y>F>F>v9uhop-)M-d*+dh^Cy@0NODf^ z&w*N_N&7iBGU`*V*5m+Kbnne#+98VG=F-?oX5Ek7jAz`M+(_lq^m(9oaPKksS&JX_ zW1r5HU7edRm0IZ?3>KG`z8}+dD=kTu<)wHfS&ICzp2ZG%I3)Xa?^Uk_%w8qBi&VYS zo=+)pB&f=O5;1_IIRKN-Y}ZS5r!DTD+MG7)9GZO6!r(9lPC?y_WS^LhwU6T4^JU^I zi<>#_VZPfC;gzE(05~VEcL81nTTY{=1*hw&_P8pkN1j{R{I>r9F`gE%hW`M=8iY3z zLu&+g1N|_cpUhA(w0dCYIsPxLQTUA%cE-*)Jee)t5+Zm39SF|h*o^1jHJH|#fYKXK zON*42Nw6&72P}J>cItYL#-v>i=JUhXTAV*@U$Kw$iDkN094X4E+nnT&ZnfJ5>{MM{ zKg{znd4)=osqCHBt6w!{{cLl#I$To6a`KJBFc<(w9Dqso=k%_N!`3$U7qW?`Z!H~^ z9IIe<#z7s0VraJa7gF7rl&lfMzDXN9R4ExJ9^BRVb!ar19^_9P@Lo+R7*oeS{{ULK zE2epIYRcLj)`w@07hbdy%Ot66ueplnmH_7fcFj@vi5Qq@w-70kIU3+D)ZM_q#y?-i zuyjupMPsX7T>0|D9MO4s5$6QrGZ1 zD00%AYfeha-lhhn4a}O2yhS8QKZG+Afu0W|iob88&4MG@ZmPcf}cOO@)* ziDei}RFlN3q<30hh}!E{w2oa;+E|z65JwA);Chwo_}5Q;uSPWG1;7g!VaHFHSD4!C zHz_I~Cf@*pcH5$p_<@mH=TLjwIis`v-0>j6W(Q~|Ad&cDybOIRxZ3JZUY{%6^{L@- zbXU2eUUxU*@i@59uYv1~;{bZ&p{$)k=3P_4&|BN4;iR)R7D_D833wTmL zEHg-}jGw2icYYDmbe|D1yLo4m$@2GG$i7%7V)92`p}mb&EViPOYfV+I{EDlJ!ch2i z>Tw!<-11qYqO-?jjAv-ZM0n$x-nZ9fc`QQ`4jp>?fAy=l@jSM=ABQy?sH{YQ4TdO? zD8U%#1E(bZHR1Yxw{jU8XrYcc{&Z&~lg2s^TD(?N?(DDs00!ky%&6k8?PJT>-qaDU zV~yFHX`Wz4{n-GIUY|EI<iYhTZ)bXj?jtm? zv}8ng_8@fNb*>*v*KKs&GwgEDGVf+$VU>2e@xkVyxcGN9qd^v>tl8VmFw9Vp(ldJj zQ`>whxwx4X^$TT%;Pc{?Av=aL2VOeX6tc+2+>5uO{ZBqvihPi zU~ZaqjO^M6Q`eEuX0$9kJ$XFEb)84dw!4{RX`ql2Wf>oM^&IsX>s+zZX49{nIRvb} zQ4y&jy7WJVc3u}xGS)OLKbW@$MPh$+xyLFGPH4o#>h$iv;OXXRMoMO8sGGb=YbDS2 zpo%pDS#L1X5)ODCoDbHzcCo*^v5N0X{os!!Qg4t-r1DR3j0|JetN7~9K=kTq63%v5$*bZGnG;VW*UZDGuc=qDF`Q{ZPhm7HG>r<^@VI}P(^)PI_ zW2-FlS`~`aIV$B`l*kz9dUxisFXq;?JxMgfc)nkn%#2rmY>s>JS~{!{!>KwoxH6@{ z`7z6`a0u*r;~$+bj^H;I`gWtRM=Z+`Vw{B}5P2VkbVC&>PATmq{{Dni!bY9iGbZsC zv~2)7tRft7`+zGV^8Wx)g_dU212c31F~w1u109THxA8GJ=s(UVSVPYf5)5W6dXvEX ztFAFo*8c#3l%X4FO>M5<{jxbmpunSs1gIb|=x}S)JQJ(l>e_Y0*S99&*5N|AP&g_N zYVo42Z_eC}+?;SldY8jl47z2|&QG5i>5t+60P9yu-%XD{85PNXr=RL+4Ys4_OSp!f zRdw&TamXJ~O;c;wrHc8?5-j%{c7<%J;DSE@1y8NSk?Iq$eaFs_FwaA{{{V$k`#TF$ za2_q3e;ChPbn9Kvw32dWdaV&Dzn)_soi^o6?NWLZ)ctEJ;Qs)nNsn5(xF@e3xT+Ti zHxgr}YpPW*4pp&&jit;+dtiZAt);mO@@f#rgV6mt)mW8Suy9xi*x-7AO(ZuK;1xC~ zS#gsmI$th>`Oxl<#>BV+GJ(v;lVbUJt+_R!Q5NejpfQ2ArH&T~z$ zv2j}<^O8^a)0_QYUf2A~$w5OCE-%m4V}q zrl9<3SPxY2v{E(LcqWo5B8bV91e1a|7_PbQHC-+no8-H=W>^g6C5WBmHZn#z7_Mu< z(+D*X`NkqYk18=%VLYgywQ@PE#0m3ZbKG+TNjI90Ewy5+NG_7|2n_B>iz+$Am4Rn@U+kVI)?N zXJ{GAA4;jHXcjuv%<>}@YgiP1=|Ur%oaAHFWALt*O-hSWcUQR{(lMITU5dKCqcomQ zjcy`koa8rB2t4uM820uW zv?WeX?Q8Qi@9l2d_8IM>#0thwF%)F6QaNt8=jmQX@!wnBtm<3kB>cZaUhy864Xx#j zxp@%Sv_X2{fHBAU>0V$o2yQ2j7ZR(S^cfuuc4g6>xn%F9j(YN^7j&#)>E1KeblD8> zZAoJU0?Uzu!Q<&(f#5sc+N7J9s9R8Wf^o|Z!|7aF_f<~0UoQm5}WSAsty`POCN$BA`a z&kSfHKm(quYMe?%G^U z6o0(fx#y=GkLO&?mEzp%x3fZw!Kab7@CXF)*1noQ!AHj`Qdo($wA8<$ST?2Ny+YRL ztS;7(7HHc$a3karE7JwV%4p8&kvwv&lVUU~&!2E|3FDsC=e`|By79%@Bgt;Y(lM1# z=c4cjBD+m4-&6wnJzi##%k1X}R4&kZgO2s)RIO4tgp{nb)A~oNPK+l@RAae;Zk579?VLm?`XX zGyeeVq`b0a(rxb5m=?H*e5_X>$ybVu@i9x9+VmnExO$Bxbk55D{`2hlwqGJ-JBA|Q zlfgJYQ&^g{#q1s*`#T-5%#7dz$o~KiMR(eDlrL{HINW!(3FjP|<~(I+r$k9G7h*Dj zo}(SVI^m^8aj6$MUtiY8r7Ey+a8cL4$n!~^pGmPYyKD~!01Hiuxr2_8b_kF9rBT8^NWcFPIAbTFwHu>=8u$4|)DvzXPXPK+fE66A>vl%&gE$56bMG z=LzBKNPfw61%a08Rg26mBJ7M14hR{}GJE5%O6#HUp066mE%Y}&Uy!U?Fg63%_1C9oJ`&E5*A0tnibupO@+!$E~ z;liGy-mds-Lo?_S-D-v@V|!+n-UVZ|a2p(F>0EWGRCABBm6uarZv?&dahgYmmiPS~ z-q^yv7p-6X_MG8M{pU^W?;&gRO+CUo<|+|s+#t!bgvQ5G)Wm_ zZyrJ8Ke`>k&2hTUyLG7E+s!0U4dep5PZ{gZbDG*d-Z;N^;Qs)Dx8JF?EJPAgT3e_5 z6S>hmoiZr&}&iT0noGsyMkvF~*|KLuLa z8DYA+l0zX}x`Mp`w?Ih0`s0!FV0|iGb5hhVba|{lv86}3v@%C1xLMVEjlo7oO7)Xc z)tr^9^GUnv#e+uHj+JR}_t8gbEM8*Dvl2q>EuXudfR6nsl6X!SE~U4ZTe5>|E(O74 zW4k?bj(TRerJKdp%2Q?NU5g+3x8*_LeFZ#fo-Mm~kjZ}|+YPQrcGwR%JaLoFQjOK4 zK3_e~Nhv>yH#+9Fq9XVSl>BbU)!)Evop8hGuD= zKf2kB;QJGbjwr8n8>pbVPqG&oiccY%chC|lsnk?&%~PA@Z^)NQQ`#KAGfw1|n-RMV z*-wuzp6gooej~e=S1b0F5ZMzIx#J;sXBo-QLHSm0E-Y=NvAMC1S(6DQvV)v?n@Wsh zZwDC8f1PFAdC#f~tC&kcBbgibTo6gmY}W+{#&Gs+=-Jtr;GE!;_h}xBq3c)ovn|Bt z8RM4Y=l#RymDt1;z{cF=Y)^~tQ=77Kax4N+%;70kaOErxt&KQB>=^|166FLn~p^41^OD?LL| zvxe(OxqFW?NbLlFWQ4gcyR-L!{vS_#)^>pTgINif$JmG=PBZOSmL$HLScA@$B983wm=saVN&ZPGImiB3l1N3K0TD$dd5 z8s@ao+uO%%e$MH)O#wGx=PU`qACGF$w9_uvN!9LdVxHVv+ex+KV~KDGW%S7OA5N9D zWhp~zGa9rbM;z28%^NTHI+dGJ5Zl{YMA)_$Ou?m>?&pkW`?wu?=CA27T6l|9)o*n< zaKIni~j%!YP0W__Ti8G1b<43{{TX34L<5 zT8k;|WKaPN#v%s*$AjcD{7_70W{*;#PuX2R(ruYoxQ#wfiU{hTm4y zR71ooCAefxG0=}nR`AZQt{Jtv*!Q}lNFxz_&_eAzWAN*qYt5}&3pV+r&Z;r51!$yl zvg&$#E~_?|93{GWzHjDXP;2j z?{0P|2-6V6bIAHuuCw5k@Xv*35$f_y5OpTs18I=)yQXu2>s%6eYc~eY)mFBONfq>; z0^45CGzRxkLlKC1hA6_m<=yh}+tQ}gd?}~s*OrSl?xOb-lD6bXtAW(++A~^uCyKP2 zJs#Ij8k{LOjv@Y%+lV+E=b;~u=vYIfnV3M)! zW$)8CTJQW%2AyNz=(Qa(*`aAAWiI*Nepc>#WN}>o0EqlK4WEEy)RNjL=5>sj7dbyR zI_J{9w+@q(?yPu~=ION+{aEF+4aVL1B{?`<&w#!1E;h>$vde+hUVZduy2h@?*&)4ZNHldkQFf)hyX~se3#dnvLE1 zZgpNX@L};q&7H)0id%?OrV8%rbH!V03AFtePO=vktk5Y2Mu~|7J%G=yDZ0(9nvIp5 z7J8Dz(z?v72|Jf*JQerBraW*xtTs~X#U@k$Dxn3LS2-m1<0h?3-ts)&XC-S`@r_n? zhDn?>bGqG0BSd3ADJ0+=VMRVAh9nflFlfln{kI@fs#NRpF(?e9c!AcC}Jtv zI;YhgH0ru;@1fdjmd93Tw6%yuc#wkaaVj7K>71XyRNf!(wE9|ooZQ%)w*LV5_$+hu ztWOz1qed)lqp+R{8Xq`IF=N0W?IS!ML9NdYTHDWS9MeK2Gq0Gl7_e8^jN|hDwZl^Z zg`*#5Ry+1=)|MudrM$$F4OvB~j zR~ZE7pIUv4X7gH}((S~SfC1$BUHe!}+brX^4|U<_d6rF7B3 zVN_!{$J28vxSIa*Z)2C&ybq?@TSaqguEq9dU>T)R@~I4WcH`ya`qp-n;F}FrNqnCW z#dN5-CfXmmbBr9;{<9#~JUboy#u06FVDhco<~yS@XD9I=N~z(5O&d_T)CHj_brQoA z7QmNs4?9PEcl55QVd9nfbUBtPPVrLIhHrn)! z7_fN!(A@1Kj1OFsz{YBC6>8V5r$E}1HNBSO=2<`pAxA&GmjfrZ2N~{bC%`hnZK;EZ z^C2!ujD_5KXWN0Ft!k)8lifzLjGYc?JL+*dsDx`bK#b<$iBJaar$5v4rrX*5px!{T z!5`V;<&0a)H$oR3JLA6;?Nr2?&HRK6TU^T|o}}(OSMfNgp_JO_cWrNT8xYX|>%$og zo4)Dqj^I`@l&xfI7^_{8!9M7+sgQaT#z(DUUGaG@*0e7?i04>fGHz5Ja4nD}?g8&v zbD!Ty^{%BZWpkgGm9#a!?*^fW6CeeM_Y~e?Z<+HeF!U741_yEHKU$XB#_H=P z2upx)aZok`9tid|HKfwVDxymwhGCGW8Rm@xp|cN%^*8&rG9RugX>^TV&rc>>O|b#< z62p(ywN}7+&YMU=54V(#LJ?NTo+p(IGVxuxw_Hz;!HbI|-DJWy(Jv-A7ElxL~jroCD{ zR>dR%t|3U+HwCegj^B-WABHS`*Q{Ema6#O;^#o$O%e^=IKTTV^sG4QAZ{MT^ash4I zxg$L>>&<+wDwLgg$}3~sQG<`X%bpaHIP{p-Sl7*w`YVD$mf)Uxanh|@lwT9e8ZxTQ zZ;&zDCzFHz*Xvkzo*t6!$~(b+78m?6BZoly2sS0hoNZ6j~5`8@+Nn2#>yMXyeQU-C<DBfYgp=v|{*3626*bKkbvKvri+wWeGN@=90Jo_2t^&v`n!T9FF_s|z0N*C6>w3dM zvK5}-NeYEk%K2Ce`TZ-L(-!7t3tMqP1<@;rjLc)U-Z{dq1|!mp2;ha`}u1Bd!VeV zo&IEuqzv~p=bBA~_ZscA5L{)8jzW`)^etCedkr|j6osSbVhF(}Cb)eLd34QR?bm>+ z43ii=z5OfJ%doCEen~~9a^o=#*G>&`^)*hGrpjpvlPKGG9Y?J}rNoxf-YJSpi9CQ; z3A-6Jdf&upt8TT^>#*cn#rdgF@mF;J-M#Yd@Fc}6sxpF)?5bZgmVwwfqfR?I=Xr6;~m1GRA)j-juc z$F;YHL2F`beOn#Lt=(oDS#A>I<_JDS z-m*4%`r!2A-o09MZ7x=DPZ1e=>tY`cYRo(#9;>P^*~yHwp}6Qs&*NTouY5w&by&rs z+LbX0c1a=Ovl$uoHPUO>5nSo_7Mq$gjQL(+$JBFzJ?p{mtnMJXDiTH+;DMU8hKiM& zHC5Y>GDmLglX!l`q9Xzz7<=Nn%X`~+w0m=@wMgco!i{oPb3VDoy*+)oDdIUIIZ-tzk)A1 z=Jpw(VB29>lwpWDIUi5Px!)Tk*K|6i!xUl2z-@24Ia|u?(_cu zak-i^fTNCm#~A!;CsWn+U0UBxj^`Ja-icsr&C_#I!;dMo_wmMy1D2+6j|ni z%G&lcdA!S2K7JfG%6Z3rDot-!v(S7)tc$CeBLd_{8mk;EMlM$!`K~j&%<8jEmWh~Q^MScfZkWOR=}wm}kGXWIOA&Pi zvNU{4a}Cb9F4>0DZ2|K;0p+ewuR&Nk{e}Ee%OJGL9ACQpqwx{;O*y*_04M9GU>W3e_^Y;~~CgSYh z=jIMllIGUmq1|bA_8MlJcLmIQbry@t5@7jLs)7r_VyV^*Ex9^Vf zKse4w92~FfOEmDor(4}FuOyOO%?V3+BEt_f<&Pej#(k@U)OA~{YvN>e8Qd2H7E>T3nFpFoAf4!6_KZf%icE z?gn~#*Ho#cE2f({U1`cH5WHeg@Kk!d8mwBCtPtGpNj8~oe4tctPIKEhuKxg1zM3x$ zLH3n`-qc&nC6~zTV*;_e=T<%M-ts4yX3ZuP4m%f$1ue|P|ft=$iv1?Df+VLdz7w~uBzbr}0- zSV)u2&f>%PPfT%5@bJ*}e-JD>nxvLxSjMbaD3c*nj(Ez7#EZrwTf2@8Q%|%;Y(}>z z3Y6?JFhO5xj?xHZSM%;`tLI)&Zdz0T8Q|n%KDx0S+X+06uMiO-SRCRq$ z&tJZ=(=?`S4r#3>Ke>3;9D<;9T=eKU=QYl0`mOc7)#PuhO$2If%P?L^ZVw}$TIRfE zs4tUgYL^C9jhlNbb?yEYcj5m4*so)}wY|3!Iy7^u5_85!QQO+4jRj>nTJQD#wI;P| z#nFz-@BX_Uqj?pjwc)zA)TN$C?MRvgVg5(@%-+{?&W7Td5+A zatR7RBN-e4lf`p7^wv#zai~qIm>uTkIN)F=BL@;~BRvPWu0HbqE1T(W#-%u(Mlu-L zN$1mce_EO4{L*ul&tsZ3lv0Y_9{F>33f)Naw!mT%w6buc_gLhf{MHtQskAz!%-cNM zXy9oUcw8`-11A7~lUX{Bp=+&wW!ytOwbUsZ$>gxy1fnoLZg?XHgX&Finx>(1r0Nc~ zSNAZMj@+I)R@1{ex2G4n9W>z&X(gfUmU`^k<(;MWooR6PvMV3e4GJmLZ31D0mGpY(q*W63MI@JPVw zaC6RoN}BUqI$??8Sts5=NY+z^IOmL3d{;KVX@y{g+FvVfB0^75+PYToJ6&nE$*5k4 z=8XW`7w~b&&w5J>?IfI*olSkWELu-e#251Tt4*?!04?S>1Y>sqg+1zT?2E;<(rtfr zbUf%86p~qiX5&12=B(Q35$Lvdv1!Hz+UE-+5LoRXl7AX*lRC?*X)5a*D$Nv91v&NL z*Pj|Pqgf>zM*1BK5cxTi)gpfy+Uj;56tlLtJ8b;b;fXGdhT}Or4@$A($e4U9EP5DY z&m{A^^r=23Y8JOX84CjuBsVIr5g6O@wm(Xb#7>fYD~TR(rg0L2M}6Pm59MD?g_CMe zL%_yPRVNueAN&+>`Zk+&s7E!flN7B#*n)#RimHrRh{JU5PCC}thWt6IX?ON8UtPoy z%Y$sdKgO4Naa%$g`70v|IN;FV$rY~XwTb?Ol))HP@>%4c<+;>Vzq za36uiab_xXaI&op&bU-knu{h249_AwvBI{t;y9xR0Pu0iJ-DjLqv`g(Be%ItPCJ<1 zX$0n$@ZY5F2oQ?$MvUpqrF#| z;~f70`m4{&>(+FawpWYu`^l{eeD9U&cNaEV73#m6a|>=>2%T~VsPwLG^GNXA7Z$!u z(adfN!q}NkV<(nAm>g!fTW<~Nucj-@cPE+^WRZ-dFwZ=U{#;ckG>mJujF%zo0~qcB zoVMZAlv?(vyrSl_EfL8+qPYnVtaC@IK zqZHo8Rj#Kd_GcAw;(aq@O8Rc3xIm)Z;2;?-l^uyB{&muL3sHz#$#Bw>BjC-Rs=V+$ z0Q40?-@}mK-Pme3PjX`^5tb=b?P0WZJ%ulZW46+C88v2Tnb66IWNo03!~k2iaDPhl zuXxz6+A5_tH%qpJ8c4i*KCn9Q}G#O(VpAY4IK9)~%~rdB0`yE#>7^dt(^msWlO4 zM$GSq9m^Q3c`56TzVQ5X8<{{VP@I$}K6-5^HJPt2S}P%I6}!rUR+)=FPXh`oz?G#gUcc}UZ`r*hzpY7{dwG02 z92SnM*Gj)0%O@>%aZM?H+wn`@mp z+C_VJ+bqLway_s!fzrF532IT@Xhns@uJU9gvmRgE`{dM7N|mEE)w7biz1&%1;@t(b zP)!6<51onH2=x`2cca<{?CmtAfj(Mtyzja#J1DzE!ovK4buivfL@b9e%Zy zeJUrIe%EXiZQfc!008|z&TGo698B>_Q&zqG4Qb6Pc8^2Nz9QIJY5H1A5`U#UrF`AQ zWPLM%T$PRJhfj;=KmGMRfS zdY)!BE^f@|^;_WDSs}7d70QAE9MrR2O*CFpaxP4?q2S z;IzvJoxkE>fvy7(-eh}77z7M<82u}@(`{|0iYSe|OflVh{&n*eCY?tk*<8vtH=>d$ z;E1Hq$UNAxW0W^Lf$V*&JH*<6mOE=u+!ADA`0-D+vWCaZDGH;RBhQuqA9}dWYf)Q$ zX5h}>aEvZ%y9BQ^`xsaF39kfEM)J#nf%lDZu-VJvtwGf@9+w+@@(!{ZeeK=vi#2hl z+h#ja%+2U4sl+-~o-M7AByo?JntF$ zQK{+;aVW>#6=GP&_BQ_Kfn6NRNyLc9ms5<>HI~xikwgme9?jG9>si;gk8wPc5EF6E z1xIo6+{!%|{{T9y#Mgz$lV_smCarV2&?OqJxL1lqOG|cU@@3j(sj$F-a5M>b5s`uW1wsF}GX^ z3t$g!IW^5+O?7uPvoMDtv+|5pScLbQz0BEYOoX0u>s9{GIcb$Hn1$+V=qOUB9c`)S zR;eeVdL2E!t#CAC(@|kW0OREZ*H5CY%zhlS7WS5tODHi$j?5XDXW!E`=29))ym7F& z2iVtLq3ZhD>9IYwj|Jggj29$&^YpJPJi;oJF9ox?*Ou3kpT7DVNBdCQ$u^_pqz=xZ z7m^6b=bYC+<0&2+tG9@L@np2xbB;_TRk5h+m*iW2!aFGCzUg6tM>)u;{8etSYB5Z( zO`C%f$i7*|R2{g_UJvPCD}#)wNy8J0eufA`I__{RyTvgH_Y}vS${4d3&R1xY9ImJ`(g~+yxQ}b=3 zxQ*co(Y7=H0N1KIo!zvTfWvJhVL%uy!N+`dt8;w%t&dAC#zP4iHm`MK(tJ5=EbLoX zxjFkKp5CA zd<>E2jm5Ixg9IDIR7fPBK<5Y2GNf(PfSc3sXBvpfHt* zIrcu3?PmOIT6}+Pz6m2XW{qOT0QAYhKjTqqnloF-`i;AJ*t=*IM>#QtCm)~bS$4}Y zmPt<30x1CV6iJc?LOXS?=LO8Hg&A`~?V9jScD8p-VJrw0aD2m^qqijc9@WpoF}1h0 zw7G&cQ*q{bq~zm_{v9gWv%Rx|Lp(-5GZ+}bJZGokIQOi}i+hOWjLU5zDv~l|BbwDd zh#uExMXhTItx0cXr|~Gw;~JKu%imB$_6`k ztV=Hm-wirlL3ImjWJ!clM~2RRy${q-r6jdRSA%<*w$sCLX=4wNZEkY0w2;G%z@Dr} zKZYxA`&oYq-N~lhTCCC*GBmKuf^vAsJ?o>;bXB;t6UuC$k|E}90gGgFob>Hnb@jHN zf2v(yY8O{BMI_P)e1W-u9>0!xr7HS!Nj(iIQ@s70TGZ3A)vopFBbLU{2%|n+;#-K+ zw(fuedGA^hd^r0+K)2U6(%=P(XkCVS@^gXsR~vt(M`5Md-&;5CCzl0`yo2b=(<9VZ z(Kh`7H>&0a{?k?!wF>6E0Yuo%EsHwG84D>f%PXN>PM}5Jo>Gqyt76z-G~^jPsCTzMH zNg=xc!z4al*oZuh**mk=yFE)&x3!Qpn!whu5i2xVE*sP-{J$FDb?MEw-I zTgrc>Scg>ebtJm-5F#g*BVb%~KaX0QRMbA-Z?$c$mAuWw!)xV|dGGkwQj>e0bedA- zLE-DWjXzP6UntFPkuyjEA21%7?^-EkWvWJXtDiXAF=6FLGKT~lXP($2rDI>;L`k+- zO0Z&l-!rogMml;@s|o~Q7xQr_YG>-!fga90v}?7u%8U?1-DoO;(u;;64LE~SWFLmWj_ zl*+hO$o3hmJ6$4cLnZY0T608V^3U1s12Z4@diLhJtJe0gb7pif@xxl2Npu@_{?mqe z2r>BvL9}3jka_&;tkUj2)d6-n+{6s}S1V_6_I*7Vxkq?H^1T4ZTCEq2#l5^%&}q>X zg+hjsOq1`$UKuu@aaNU?*4|FmceV^$7@TAePguxdOX(o*>P}WQ5$V1j)U>8 zR@=pQTHJ!jTfuG^jnV;wEqCxz8aV-IEv&(?YB8&?f6!8ou$gclIBgF2gN-q z-865v1aUNz$CfhZIa8dDgSAod9lm}TY3~z#$zzd$Imj90dJMKI&%}G#G=S`JmTf10`E>s=hVCNb6x*ndD#$MQIx)0dzrCYUy zn`l+T{_t~?oOV2YE2Od2bWan>X>5>PtJ-duP5!8Xj+q3L&M9I&o5RX8)iYRgdqm=N z8t$*7&1)UQB)2gXToZ`=qNE&*sbR<&?OcYt;#R-0Sfq^F+%tU4vo_Tmv&RD;9+1tf(N{^Ni;VdFH%IRpRFwQH_`7r~Ct= zr8&axTb?f-p=ommktVk!IZ!tk@<|+LAa4C??}o2)s6`a8OEk9Nyn9#7S&6{Ie|2yT zP}OZBvXWDR3~b*oTF#z!xU$q5AjQ@t41EWf2l@KfY^g=bXiOyBTDjjJ5KArPwbizn zpR~goxQ(`jKA0n*Kb>b@`0D3Lj5F!-n1qHiaAgIF?hnh;(!ARbw93xI2j)2Dx+qsk zNMHRr^s=x~8Gsgc^Z++(*0pIuUmCdSb4THJM@GIqu$NDk=I2hidr6qY%jT{J9SO!r zAezn5X0?w+)Y8CR8%wr7XA_V@;x-Jq9Z4C%9fviQs)?-RgxFmP?W9u5%@+-VSCu~C z)*be-sN2aAFB+=nYQ+{6bC7Z9c|9wlloVBwja$h(v$NAYM+}kL=}G3vCzP?^NN~rJ zdj3@eI>@rorL><-S=Ea$5=p}YBMcGvR}U1iNwQIWDoh9bv?ug6W;x|W+}BppN010E zH+}$eYogLo+~(wimc`g^(#B}-t!%AQMU*nEi?}J|3}@3h`qb-fsOj*ot#7BvuyvHF zVA<-V9y!RWu}HUU>uzHzje^7;M`8i~wb@wsw(8$SpG}qvLlmkNnNW|&XMxk))=lqo zWjV!KJ3Y@mx!?B5w!+zI2oZsk$>3FXl^Bq@80(tpE@DjwQj%-=f=mHqw}^sNkU%8# z1OuFNkF96f>o!)PeUnd$HXS5Cyl>3Yy^(4++|OGJ>4x~NE=*u#u#DgjT-9k~SSH?I zGIhe9pN($K;#-S|rbqJ`WL>9o@rve1VLO6*aaT&$)KwB>+TElhl*fu!Y@^^%2*+ASkIZ01yLjnP zS?Zn|+M29IhCz&iJw`=!x{iq>>X&b69O&v2RoZg0U}Sq9Ym@Nx?Sz`dO9YK_BMPmz zgO)46_XqRA>0Y;PWRlDMZsZM>KBJzM@)(BcVjR}|r?~34(@ktu8V#zT#fwW7|trRnM>4`DEFA#9JuF> zMt!gidXu9C2-Hhkr|OSARBgDv#T`$=`c2iV%N?^rEQ+C|g~(!QE1X*g>7ThuVqnv+j&GsdOx5TJP zlIi+GLK(!+oN>tm^{-F5xS16o)uq`fy^y;ZgOChF9F^eq&!uq|o*IhsJ*M_ni*L1E z97L7V(#*FN)ozXw`WT>W!!G#Gw<5HBHjtSnzIc53EX;EVw_p_w&V6|F`qxQ6f;9Cf z=al_e)hj&?9Y0Y0&D7C`1z3p)x{_RV^9YN#zv8kG5-g!5W?r;fF|4T_B;FY|3)7u44s2Z)1R#}o_mmf+^Q-70Uj z*-f}-%jQpd(in(3wm~W~_IEs=Qm~j_TpyF~bj?uv9Jo2au9L(pqf}*w-els>vl{*Mp~;BdVlP33pkx@0%DI86(%}Rz}dfQ0@a5KZQl$)y?Lz zJuGDZ0MM4CULzk`@#p+We2-E;0xScYNd`SXtwW(}Yh!(Pak4g)<~Z5A3}98Yl#4?a zcsM`Ks()cxE#0y#rNpr`uk#E8gTXzyt#I+xvntcFMg2Wx)GwM#iIoutKzinwwooXP z3xmP+6>CpARlTZ2gQ5APC$IIYpJlOsIojiD?&AlV`U+bfRaQZNXR-ukxhL@ze?-^k z(qKl4=Y9wv5^=}lNS1n3&LUUG9a)Lb=~=hhRQ~|lFvp`g0D2l}^1B|a7y4RCQrfTs<%=&DK z0M9HrsAt!8rG+A0LQ8N0nB((D?!X-@pU<)-}y;X48@ot z&u&?jR{&skAB}h6DJn6tIVv|Hx@Ez#mg6@2w=l`iL4rT6Q`L4XK?45uZVCK0jz3D% zv$46pQ*jN?lCDq7w;+uDYewfph-s5F*RTgmn3(?XWA5?~zDTZzDDxR|zFU@VY;|o` z@*PSoK0<;eQI-QL2hdf7(RG_hztF8p-DJA3#^oGfXW05zQg7v37~r#>QMCr#VDXOp zS2uGms%DYe`b96pe)#7fPTz%L2u3Y6(05S;)cIr0D@_+Olkt{^N!UYKz%D% zw-iH*Y|ozF8+%PQQg=<~ksuvNsD_yF>KRloZ}yHr=N_5-f0b#nTR9C21UAgFL`Wpe zeLaOq=Q}A=0_{CUDaE!nxlFxU&8D1~p#-dW%KGNEZ1-Els+?g!&OIrMAyI{fHTDZn z63TytN8w!yM{@?G%}vg9*PZWFNt`SqMFfvi-|(vO&k2epd+FD66DoxyC>=he{*_F$ zr?C8}24C)v%Ad>|04fQB&pr%ojJLH@(!6h}S;H;_3nZUBlYgsbG6*t zO=Id>WVa`DR*|HH^1<<+!m_D-(XAp;8vNpwj=&LqyGTEVw$$_ zMV+>xev68zQ{{InnpU;M^JXO&V~=X7b7$w+%?qd!FdJAer$OynDI$(Mqfhfx%Qe8rmQ2VRe1xBuj>0Byf9m?TYI# z+7)0S8Eup z$Sge%Y*t90U*~Mm%!mGZF5l#832$`>hTGc)W&ZR_<_vq|rDyCV%gcQW_KNqhxvXB; z4=(C!NoPsmjKLX{!Z^su{#dR;;f=-8c`-$6Z=P4oGIj5hS|WQ*Oh=oXh}Ud?Ibeg( z1JF~>l5x2%V~~HcF-o2vky_)GPIq%&??=&K(Tw(5kTZdt07)LTKNs-K)F% zFkhACVcP^(3w(d#V{$W}oY!3~WX^iJB27N@*<1!y+)gphE4j7tBSEX_PkRx!h6|OJ zW@C}TuReiROPE3E(g16_pF`8$9K4q!=_mgHTCl`Zgr1|KN-?c8YDoIZ#;kwo?;V^#8zzj zO!G+}`ZTi!e6*^kr%&;xgi8-i#XH>2wHH=N_BMP%RQP7h{{S0ZZeMU?=C{5X!Xnfo zmQ((+DR4c21Nxffyj60NOQzdIxJ0+y2fGpn=ml7@)U^v{gjih78;HE53P4JC(`-seR|y`w#{TU{u{xolzct&mP-Sn<=IqaQaJu7<=&*9`KxW_TRu82&2r4-4Gt z5Na}wcUcoy&jTneCIHV02_SaJuS(Mx$*D7|Z;h>n)4M;#UUWHLDlI?i!sTiYnDJi} zh5KFT4UxFudJVPBy~MUs$oAwGAgNXv3=15BJA+!jBiAerse2aLUoxB!Ffq3sO>*}a zqUJW18+leRa9Ez1HS4(D+`^l(vmR!YvHjM?CnhnReLj@f6KwFl<{Jwiz0OZV^&E5U zPP5Z5uPmm#finyz40i$BKh}|C@|((L!+JGq?y}a!)tyb1rMjujyhb)=!Q4w0fepcqVsHT*8tD8>rDFOi z>~I9+gBbQ5ewBnEio#JVN+p*$Q;Y%lde*e3&jloA)tfi0^jo`YLiVjWB;na(+=uEv zDwbXF#s$D+ZsmsD))L%ZO)goa+Ps-0Vh7+meQLg?HlK5FB!OKB``LDrf4*CqzE{+n ztLRzPWqZv=TZeeqH!2s90q8xxl@8VOBxD2T>}j@l5W;0BIFOtu84E^u$68vU@3_J` z)G}a5=c(yeAdxNSMw%s(FX9K%vt@A8u~pioi3^zc}v;$@kYSYUfr-jdi=9^?Af4Z!~ZNt5eQt;f*y%^Sn-VQVxp zG$|~$5`Ok9pO`Qz$G;gK_2?EZvf0{P#VPXBa*RF(-oqb>`d6B1z9kov-(3rNt(F@( z0K)^EZ8*vHA6`XTpIb7|er@MyMDoPTmid*58TR8R^A+M^urjL&xw}1&UNvH>`xt7i zbG@>)yRfxEDFZiCt2~mB3}hA$D43&(oum?Ah@&JPy;~zcLtQm+>)6wq zv(;STZd}zMyBh6pFeYu#H_EyBk0nnv$=vDp>ah7=y9f+kV-_H&B!isv$K_koc$zyX zq?I)J8aW7z{KZHGLvHqs^@)zr56CTdRp2#>PBuBzjkMr$gmio=D=j$h<+PTI$zEb(LM^EJCLo z{x!QFjPz*YE9Wr!fnJ={o6#9XsH-+zy_J+6Yn(Ale|R8P3%Gzz3CBKzllWA(ekjsr z2W`pxsWhjxxt2EyZX+%?Mh}*8>$|o()mg?j75SZ!p%MX{{Y>EN9&5?sFd1wI`3_lL&`iyszqm{Ext>%ojy`A&u?GCxW5#6P~2Es zLl>9iKz9(hB$hnqzZkDo@m7^{tZNpMJ$`0>?NpFt^3FlWQC@VvcxTqTom98>b-c@!kIIWYWE0PN!c{pcMWe2SRG}oyD6JW_ z049}*10}keW#nis_MpHOcFIs;l6J=CIQ#`?%0!n1iNMcV?u+*uI3%w$k=6J{6lnFS zHUP_~l_Y&dLGt-S3EWkW1`;&Qbg&?sF5~^7RQ}Td0esbG$oXT-AJV*CdE|PHu2eGk zpRt?`xxnJ8$f6PyakYMLb6To%wcY|EiItmi88|#}Gv1kbEGFvbPa8p&USvJJ1$$Tr zYI>dyV6Ru?V7>j`n>dmdQIY&e5A&e-jmnfZHmqBgY!FZ6a4OENZW=_06)vh2ka*2x zPp7quL*^c3Qr|!hKc#OuPAyzI%zK=iOydYJZ}9JmTi z#1IemS3l1*^Wf_yB(|AuPJKzP@mm1qD8SEBX@s#Z78v;GbC2m?Kgm(Mo~o^7Z}K>y z;T=DKboekmjdT7X@bB2#Yl}#>#$fWixYV9=?Ov*p6N151eRELF_8WEH-!KP~SOp)6 zu8K;eUCbpY%X5g(>@DTfEd)?ZvaCQDardC}+g}iK>!Q}2Fp1B|5e+tuYdYOuW0BcJuQl#r7FLtxGMFy=%=RAoV_N#>Ij>`yUoO1Xy2+^p)&6!Cdv zFI@Jlz{G$+{VKwa)fkTwH|J8Rr6(oSuV~t_8Ia=`H4%3o!fMvhj?@$$hN{8N%4T;T zz)#~*HPp+W+@H?0Jhe2QQlI|-T_JNE_NH3)AQ}l2uR<#&Z6=yw=A#JI_FNNPv4mr# zG{KJ5n~P&j88-8z5C~ERRUHB5oVO1fZiSjR_N_qxJ*fLOX<3!bhT7}XL`b;F2ZF$7 z^gSzDFmDH)4cv?f>lB?o0n)OKh(4c{M7A?T+o6|Z`i?4EWh#a1pAN-x+t^Aa{{WtV z@@kV;lCQ#w9;*L2p(H&h}#&e&thZUPXk*D74QQN^gZj<+tvB3lKuH5)kg~JG$Pf&AN z-|&QaHxf^6boQ*>3~Qaf*v(6J7Wy34pW&-3$tG)S(J4>9CW;~?Jpkwp zQHMd)w0Y#YhSDpt+21X>D(&?Kwk&)_WXH(4+ixM@$8#5!-=9jwx9VDHZ=sQM=9R=s z+dGg?HJ2*ff^d>?{nAN4t$H*NSj@YJ?#HV1KaE)a#kZMqxR84qYFJy>-h6iMWNX3 z4YnUuL++Y5D(fcd1kMIC;%v!TUzrD$sv;=&kbmAD5VLJe!j zpy|JPPz-tsvHh1|K^p-dOxGf$(y>lg)bdS22&TAj*6^~ZJ3%?dPI&xkD;paIxC?V^ z-dQ~&Je+OBnvlnaCL30T2AC#|l78bVAv}{{XB)2_5<7rSR0Y*0ys$ zn;5#DO}lgR1s~`1t^HTS*A3yx7WO-oxPXZOkP(6WTpw@cUVD~`Qpi|sINgk5x;Yf# zXR(B(X&#e3&XP1aqu@M|kjxGU@7L-pleQMt)~4sl^8q|haByG!&^bTKvp&}A8Z__c z#zsVJI4$q&Dzx`=+{)yg?nXBg)9GCjl4{m7g5}wg-&{S~kV>R#*b$C0eN9vr``Ccd zpKy4obh&=bszhc*W1M16M>W+ggbXwGSb^m8#t-?;I8t-g;+1s=YaEF0j^S301 z-iJa19E^JB6+xRPH9WF26O)>W;be&&hBtlRrDoqmYL`;{P^?e_-!l=OPfCU6S36i0 z&l&4R7=RZfk`koM$YjjEXPNE!B}We#{g^NDNNnP*%)?PmVdFkbv8nROFsJ z8pZGHM3CY-oChMBdeVc^pbnEv;ZXaJ=4%G;i>W@fxuu>Ef3!cHVO}5fxjwYs;I=!@ z0LCu$dz%A0M-9|cM8pjJKeB(bd_pwMvP_zWp0JWe-dAwX2iZ^Kiu3;f z2rk`1NrQ0-LQXwfY5xGwtG%^(Y&94zE(v34eK>d9R850+tsMY`K}FxBC^P+HlDZ%hzz`Wo>o%tvtJ-o0!)=YnQ+(o$=!&3_H)Fy6;?EUS=;Ypd|Zzmjrd z-JUvhtX~MoKeO)FBP_rVTI_r_E!ywNxFkXx0#p)z3|Ad_d(9nGBDqsKh&TO|e2Ork zf$x#cYDcJfs_eNZjy*DKM^CuZtssXnTasOYGLQ&doxOdrQrShN%WWdda}0lHW*daV z1wqI^OcD836zJY6%+^(G^+peub$vb}hDO`S0Cuhu#yTFNG~3xObnCQ8g1D5b>=-1T zbCLI}*0oo*wbS!ydQ_Zxym(-Pj&+V(7}%tDCF zYNQ2RXOCQ0t0!a2jBc4%Lh!xLt>w$+tZ@^bMoAT^dlUVT+eGZcZ~$k48vg)Xn%(f8 zA=B`GhAjS-iM-^WdgP1tlXvKJuXZ+FOx3fHM3DoGa%x!gqAuf7zH**eH$&}L)y;RF z8t~n{&5~T)qp@?Jpstx#aEXGVq|OvsBtzwf+5zbtXP?Z}i*53t2uSQY3iZhRC#Rl% z%d~p6NPIn~DaOH(#&KM})f;;k-0}@UZlcp43yAj&#}`~zH6-h}u=7hF?+W@HXu4{y zJe+6Rvo$>*PKQpI!v?|zct8*5T@SzQjx*u$yUJpzx`C%HH&yuq*BKMfzCNUiK^!P6@1X-ss8Xh z{{W3`7_NjlCFWnau&|X!yDpiD6%n5UgP+E#88P0F$+-JfSeuV&Wt8yP{5n+YCI$h( zs-d=w04UtujWmMguQ1Rh_o}+v;C`!&!y6OnG-6Z_cOJfn1KAbtPwi>+v*F zg^KuvB{5vZa|s=Bf=A#$t0zd7NKE>C(cVNlg&1}Etw!D;7naEeqi8N2dQ2N@)d=Q= zWbNXt+#~+9yw6#a%{`LN1_d%F~RE|et4IXIDe(Mf|91&XsRk6Fb*{Lj($Op?j zafNa9=bFNu6iR%Dk)!Nn03Xt>GIG(Y38c1W&A*7Rpc`HO(;xjbJddIO02L+zuqyoACakWE18qc;X7z&-=ylZ*s=cr zmV1LHYMl2v{)orzR?B$^{{WWOjf41#)r-WMbi@y|s=4ha%U2p@VUQH_^{C}zx+&>? zFt)lM>;C|F1`11n!nz1G8ws#j$eH6kzdFH|-qPd!b*vH}R#E;H9ClVQ9Hq2tk4&G_ zH4c&s`JJ2}W@DJA3VxbvYh(PZ?2)vNaiiUn=5pv|s|+6&}nE zt?k1pWM_}D+o1b3QM2Bh_y$eVHKY^tlBi3R7{e@dOC49`|@}=y8 z=ET=67v0zu6BPHT?syW2**Ek=QdpTh%nYgH6;+_R zlsH>?7;&AWBDPG;tCjCqG{mXnwMi2!fNsWn=BhHZY*oPobq1UPyRpZw zTDhm(pjUv!8xjx9SDbxnvcmDN%Ly_t`^N_#N?RCQ-Eg=HIVZI%vXV`XxQZnNsUsCy zSz1u4SdgOt9@Q<&Vqyw{DlsySu?i4NeF>mu;QAa?%@DdWkl2w1N4ON0W&$$I7o77^ zLRCw%Hr~Cu(o0dd?vq@^XVb;r6p%!0M^I}!2hi1Xln$eEgZ#yDegwXX%J%uDBg>N5#rcu# zU3?mzmu}v8^JST>W4B_c;~PoG@bkti#mDn~VYsfA{J+Tb=%vdS*^_J6XH(Ig6h_x6 z<<7Zaa(uk>?a$;ziYTg3T`8~X!_?r>j1~%f1NM(mYW@`MGcIhnQ$8f_xHtR z2;nis5?jo6GZFGACnF#8(xVIen8|l{G^_7UGVT8W3~y>WuzwNFbqu+L{gQS75DyBc z^lr5e_M6;8I>i#_${PY;2WVtG=RBRb`qp^4VF`=ufbNV(lFAN0BklQ9W4)de8HyOw zV>6H5^ew^YqO_e)X{@_j?!Wn%QJ|={*LME(Vo9#0)wIICOtG7Ic_ilt*>x0(-z1E29SOE?ekMB_^(D z_&mk-JD^wQR|J#OrxnuKM|NT{T1(~4EV0Lo0uJUG{W<(AobW}Uxq|F9#8AW~kIXVi z7msY$Uog_6g8nT!d#k&VY-C9wQ;15QNj{h$R9E=gM!0A0qbhF^TwQCoXf*vg?lCKQ zUVXSN<%7o~2cu|^d_@H%tv-`c8-xhhHYXEkm| z6p`T8@I3c%z@skG1q0liSEG3P#qB&brdvEgWLZXb`{%#Xxmy$m$5zU!6dRRnb{*@i z_?0o6OommPAQ92I2mG4qsW#^ndGLx*lPl@-MP;W*9o0)mv;uu<70|U)7oGi|b>)$} zca(a1)*pfbPvUEHbC(OqCnpEiz4YqZc;w2;K2bwlrojx+1Z9i^gOmDkUT@<)cFRz`u=_2{BwH{i=F4P}@9kR` z9yYO+wkoMWdIEot6*H5llStAKP~7w(HK|ZnBoFqF^Qc;TVbM?KYtJR|j?hFwRTs7i zKVG#)Zx_!l&R8Ct4z!gy3AnDOr999Q`M@5T| ze~)jj=HOOk_PzGVOief_MhFTRezmHi$#aV8c6uhYrmmL^(3Sa#KYO_+wOYT{(&7oA zRc|fShLN$Jo|WaWT^mL6q9@BAcWUGLRPyRl&k>8tn4CM%6~CDesr0}d8@zLn@1KF81?c$`t%)EZr0XI^tM`epJ98w%3Fu`sir_bh*j_H zd!y1jKs~LK{3$=Sud{&gkEObQg%_W1$Nm7l-sKT4Mt5eMCj=g9>DKij(&PdE09=%R zNP8{zy1JwrBLMb$uyvo>-ko_z0ZiJU);6(eG`w*6*+x*NBTyj zw&VVrT&O>g=AqSVx8MH&0Hqb?VvWFbCmz(Gk^C+B8rb`E$^N&*vJ>eHZzt+-DGs)g zb-&f_5B+smhxIgjY4l&8`45&o%&^3h@-~0nHLIcPCq|lMED}i^fN;EEj`WAcGsVO( zo;%NQ?thpS6ZorFenj!7`;h@z%~h=z8AV&vBI5^i$Te%|H4R2t;etp+gC$!Zd%x#d z>mq~AX^$1^5wSBQbA#?skERVwo+nv`Ot-M-yi%)y_z^@MNG@Joyvk}a*5+!uV}nNV z>ML43Wt)`OnSHJ;hw}i`zi8Fw2khF7ozJvpEdE3TRqbWfet+a=%8Wh3*FTLQlO0d% zT2tR^cIWr@p?%uTPwR@O{kwgiyJ&v4$^I17=JreP{{VnJ7g7@{l1(0BfsCA0p|0KM z9#xS(_KE%!9dhS9+Sq^KGSyyx%lL)k+^!lTdXY!Uc;ETefv!w?+G+m)jj*HpZTr~i z-}nqDy#D}~@gKX~t(ITn{b|B)dYo&Gj%+ml0Q?940PEAgwz)s?F4NEbu>Sz-(Ru#> zDE;2#A1imkrSgj$hEw>|<5u;s)BgbP$NvCcnss77<-(u-Gg?RTM5zW|V z=~6*wd37O*-r8B6c_KB=1xPiXd9bkjA|v|Lkn61so6^$N3F9%B2l2yFeBFy&y;&1! z8jMT>+nCsZKxP2*z~eONV$|UUE!Y4!{o5`@SpNWojo9VvZCLu9#Qu4wL*f*Kow`+) zd!44I-|ScJ`Y?*)#8z>6vcn|MoFCsP@6(K;9@bF4=4? zq+I80gpdzPaPdHo{$W;stt-#@NqoH-qHi804DED-)WA>ls*-qy#an5+E%dglHXb3= z$tO?I!fpT-h+~h$VyoWSrRC(8ddu3wESNHRmn5tN!KlG-Ud?qGnzkl<8%Tixx`hWVVX7HW0++J>zs7Bm!vV6e)Bd6s@ zwu<#Iu7+ha&kyUB>rbLPFvjxPDB?ZGHD2#X)ogR;*vYUT^^uLr ze-TtS7VJSDm8wyesGGI9X|FW%5!!}6Nd>Y^W8B)=TutWvqbvqNtd zTq;WsndS}%U^yR!XWQF7-M~c~Q@K1~RF8n0%Av^i_K1(r)SqcX{{SqB{Ha9o_lxuuT(Im#<=^l-i)|lA()H75 zxAU&-MC}!uvhLuFWc25r{?*ifW9SfMO{nT}nUlY{=Jf z$Rj(4L!6WPSEoVX+t7d=LJSY@0@d@?Z+&%Vu@|O>a%r9(UQ*XqknzNmM1a)EX`-%n z=%u*l&eRX|6{?;HLO*}0ZXSXxkJQzu{28T02J4Hm2RIT16^^62IrDL+!gi*Uq$%x{ zdH(=XMMiaojGruN_TwE>PeJ_iT})aIfofTP!o+`hr6eELr-?LcfAw}&h;!7SC-tSy zwzyl!;BI_JsFlPzoalQj5ylVxI<@ECJBI3cx0E6e^RYL=JUD1s@ZBupC;Ic)HF88y*`scNYaRu_XgABWZ!x|X4H1?}3}#1uB- zxhI@pSE*iE>G0{Y+vu8X@=WSuYsn4>Q`Z?h{V|I2-vZn&pRUO?%bY-PyRdqS^e6Ek zEtr!YzcU)VTbiiUM~6}5S1}jDR}nYbrMs162Z*q&K7{f5RL8=Xcb|Ux6jSLQPxGm- zHK(~!9l{Lpl@&rQURXgNXm4yWtfH#DPOog1mpY9e$@F_6WexPQMhRnx$2sf#tC8_W zqW=JHxJUDkKgA_7?^kf9Z?s5Qd)F(dUqL*D_d65Rde=o7QoZDJ)vT>#8e^jCzI$y2 zBP3+x14oLrV{&7)1#mfHtNB$OFnPLzw?)T()n{ExA_TFrtlSR0K>oGa$hng_d7mRl zpTZZ=S+&y!ac`Se6 zRPDeHw1t7-5`D4Ov{5IS0E*d8L_nWhQXPXJC?ADvSa@>!^A9SUXurKLQ}h+R4uz&^ zk$KaFJ9+bN2*=Q0>ij{TODbB zW8X9k^UzU@cI#b97+f%WpURD=J2en_9;2^ zCG+%of7fY}LVa!LKgiPkk4BgMRs8nn(s(jIF;ICLY(#n5n>qgNyafKI6w`5}#rJJ) zr#`aI5Pm>ZS$&)T0A8cNdw*Vqp`jT@ZLh4S9e|f<{Eb5{iKxU$`xK;l$MX-;q5j!e zkNQ1@ls@J^H2(nO*`8vL$W-J?(MNae-c>gGY-i@wWq)X`kMkr`qkSe3#jV`u)>(oN&{Y2b+4@D#HoCu-Pw?Et zSM?OxJT<5V-EOg6COBv%2B}ns+LQU{E?IO$4XQ%97W!3^d&mr@^)#Q`x|T5v>j?CM zHIMlUrEzOlOb2NwjrziQ;B;&td zN{EKXT5_&ABdutnmc-uVo3c9MlK_%(X)*21E_mXokw6%rpURM98TF(f5KnJP0^?6` zMrkrTDa|1zLF26i@r?ddhAtJ4Irha!BTc*(=}_gffz#_sB;%3O(9;om3#+ScZSQA~ z{n-c~m014PxMBX46}8uF%?Ky+7&Vo-J8cn56NBTY8l>UHR1wWHw zfum~vUhlH;>Zf<|tif_NoZ$X6^}7qoyD9$wWa5iWbqmL_YD){?!C64#_=YKsZE%V* zVgs%NRFLaesrPSY`W7eo)Suey{{ZWuv!B<@w_Kmg6z?wIi2c(z+^Wb>l303kPg#R; zlUKgkVE+JrNrZdFD=+xf`%Na^{{WaQbr^x@$7x^8;g-|XJJ@d(?@y}n%kddBiRZcP45a!nvQ>eJ`a!VhZr|JNy90^88{q#S=ux@ls zM#q`0WMuyUo{=9gew7Wp_ZG|=-dSQl?3`B3r;4v&;^H;91GxEH^A(>hcx>)hG$p== zJ-Bm_LG;BSIrpx~JqoPX03RIqXEFK%ed;(O_Ow7-=? z+RfXO^3LByHCO%N4tgw&5*S zcqGp(QI1EYVauTE)AMn0cP2W1;f_B#+;0`@EOKr@`bCfHQMZV7h9B|$Ao>Aa6zM4J zWhwJ+V_N8!RuhS#ito+!F(2iM&=Klv5BfFP9?-Y=RNvd0wl<5|RC{qqy6&pE#r((W zb6Wc}_cK#yXw&s+I%)T3{@EIL_9nE$jXvxC`J?-DQ~v;;xk>lMH0xTK1RL2%_o`IT zxyK(5YfLb7`N%y-1Nzhw_(xZe5&fRS-I;&Jm-|lt0B%0lIUnzuL#SUKw^MQd08I@w zO%m!2xA1nY5Hh+%i;wwfGN`C-G|#gSnp-!2?!_ka`GJqtpEbnSExLK6kow4T{OUgc z0R3vU1V=j|5itHBwBRw-!4&)h=zj{aXJd1I+by7H$5J>0>UvX@qXl*(+tC$#(T}_; zcp;YVQ4|VhlhJv_bv7Opi7?mFmw)-?7f;0Xt0JHA<;CQi z=Xqp*R;$0+iwVWfrDYGQs~2y`Qf<-V<)^&3KlIH6VE!jH*-jLp@FOWX%i?BWC;P2O zImQiYi~9(_)M-(Z>paZgpunX5-n$w5Kap-f>5K{w=4)pbj?@rYpR4c^1nti-n+-f$< z{>(X){(}`OHjfYbs4lLLe=<)fet_0yGI-4dgX@Z3$-UbSYix_(+ChKg-%Zow_ho5M z>rHKES1MI5mNoQ+b`R4PPrn$WJ!-v_I|sCovP*k0%-0*ws}?`Z)L56iv5%tClkH9& zz+Q7!qL#$mU{)jjaQ^_lfBN)nZ1XSI<)^V?4h1GMc{B)3pdY+_>BMo=(e)IyKu5Rh ziZ+hK{*?Zwnmgmxff3-IHxci}NfCITbXPMW^-=+&2O}e=dQd{~{Dm%ChcTrVyQ;+& z!>BZi=`2ep^Q#McqTLK$TTF~cGD4^``2kqe1L@wecz8E;r>2Ffvg&M&7fHDv=z8wQ z?6)z6{b{p!Pg0F{Ld$T2yfOp)>l;0)Xl^FAIf8j2Bm1O^k7ZSSGQX(#qW3{Hl=kOs z!p#Z)0H%@RqVl`%Bz_gM2Z}W)hS_C~;y+20AJ(QCwvBiH03W(YjgS1aw>bScr|oLT z;*I?SmM>;={!#w%{DmG->KO6uT_Do5i{5N?V6ECY$NvDTs@!;UQ-EYbv!|?0pVFyf zsl6Ms^UzL|j1v2ZpsfoDpo%gWf~8^sArnj9S`rscO)}kNIaGC-wgT3dUH9YpH4yeGX_s zy-N~Ly;y?MYm>GZq>;LQ>}I!q)8VZ&W(!%bWb9?>`u_lhM?Z_NN|>zSg4Qw93z9#l z=~3;fKY~Agg>uDi$YSuWr7+7w90}_zfPX4^(X^W^i``;2E7m)8$v@7r?ym2zzvJfW zX+Pjt1Mult%>x7S%ze62_H|#yD|!bs7Rc(O*R+ca{{Uy{rQfvEwPhuAe9}oQTPLYK={F92 zYO;y&H)Nls0h=e2^y`}GNX)j96&Y6AM{s|_t;MVA5pcJ&V0JB$`qomG&ukxhcx)f1 zy(XgfK$}|{-`jJ^{=N%I{{ZWxBR`m@{kKh*{ce;O-WiDgd905xuTh+iDR*S#RQo9O zA3HUV_B?|j@1Xjsxc-#Su-Li%&Z`g7SeifatjwGbdQeVyH2EJ!E@jmkV@9}R`xnM_705+AJ*QKE6)V`cZkVfoS(AVVkF4tw)kG{OeQg zx=g?8bmosg^Tu=hjVG6)N)9fr;6L=zAj9;d+V@O3dowR5Jaj&_J-yw{oSC+sNY7pm zAC+AG%(Zd*onF=R&`Fs80G%PwZ1MoVJ-pNa^`y|-2!<%fp) zkyqFI7gubnMDP99U9DWK+GXrN>uo1d>#*XhmGaLy1Rnev##m@eSUW!=)oCpxj-Knn zu(nOC;Sc=tlacw>CC-O`Z=Aqgf4v{fDfW8h^_beTd6EABc2SzywDC=>xEB!^AN$I3 zKg3jjv{Um%e(qjJAW*JB$TZ%a&3X$#VX8&DWH$rUbsyHUZu}^iEonJJ{n+!Z&z#pEeFU{Kxz$4~H)R&zT4P^nb#N zE0F9H`v&l~-PZh{?;r51Bf?kv&Ly?a`_29oQA`OV@OGgg1J1SlS---D@Lr+3DW2E< z`fu=}iVzcz0_t0^Zmn_kZ}6uN0^e;U-$DNXd>SaKL|hlZmxnvAq5Kfg{t0+sX`fIV z0L~U3f1MOoi6U;!Qg(@FWrf|89A(f0`DD;R#&bm!z;1fcvz%s%C?Ehh>rz7tO)5eN z-p8rwMHD`x>UI`B6t=cx`(u5gW6=i@kLqiDBE=WV0!D*{jADu_=4(})iYNdr)KY>dqJSDC$3acsjB(bAC;@OzK{UID4_+vufD?8HPihs0agL^n zC=j_h#}p~=+|fkbRx3&ES-3k0#S~YUh+fHinjKVMKgFp({2+*y`z1Son^m^k`Q6i z^!T7b#$T`GD5A5V-B~_;M_1fl?uK30h;=*Yhji6a(-@{bfpTacqcxz zQ9u&Msoh)i4b{SrP4#GahV-u48aapkHHaE0tlc=igN)_eYwFg8cU);U%zwQZDrvDk zi+9rA?gsw=Wy25FiYp(7V{P{|6T?!1CbPa|BamER{*?CCFSN6^^UJwG{6Jx-qOgze z7r&{d+Z%S5F<;tw$c(7nRgGufcz(w37>~%1^mzOIMHE*LJfSzr>}t|$Q=ZiPKQ^AF t%+b0Js5Ockc109dwMn+MIO;1g0jF?iqP9k3cLB~QEwto!qKZI&|Jm?RgaQBn literal 0 HcmV?d00001 diff --git a/documentation/source/images/examples/street_vehicles.jpg b/documentation/source/images/examples/street_vehicles.jpg new file mode 100644 index 0000000000000000000000000000000000000000..acc8ef112e43d3fd799400fb93ef2f6a368e229c GIT binary patch literal 150012 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

^>WHa8BR|?dw&iSIa8& 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∋rPgc0ALG?LIFskA{D~q2 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 L{kSlT|K0n4en%NR literal 0 HcmV?d00001 diff --git a/src/super_gradients/examples/predict/detection_predict.py b/src/super_gradients/examples/predict/detection_predict.py index 3ddf9c21b0..f1d8e4d297 100644 --- a/src/super_gradients/examples/predict/detection_predict.py +++ b/src/super_gradients/examples/predict/detection_predict.py @@ -5,9 +5,10 @@ model = models.get(Models.PP_YOLOE_S, pretrained_weights="coco") IMAGES = [ - "https://miro.medium.com/v2/resize:fit:500/0*w1s81z-Q72obhE_z", - "https://s.hs-data.com/bilder/spieler/gross/128069.jpg", - "https://datasets-server.huggingface.co/assets/Chris1/cityscapes/--/Chris1--cityscapes/train/28/image/image.jpg", + "../../../../documentation/source/images/examples/countryside.jpg", + "../../../../documentation/source/images/examples/street_busy.jpg", + "https://cdn-attachments.timesofmalta.com/cc1eceadde40d2940bc5dd20692901371622153217-1301777007-4d978a6f-620x348.jpg", ] -prediction = model.predict(IMAGES, iou=0.65, conf=0.5) + +prediction = model.predict(IMAGES) prediction.show() diff --git a/src/super_gradients/examples/predict/detection_predict_image_folder.py b/src/super_gradients/examples/predict/detection_predict_image_folder.py new file mode 100644 index 0000000000..27fb7dadf7 --- /dev/null +++ b/src/super_gradients/examples/predict/detection_predict_image_folder.py @@ -0,0 +1,9 @@ +from super_gradients.common.object_names import Models +from super_gradients.training import models + +# Note that currently only YoloX and PPYoloE are supported. +model = models.get(Models.YOLOX_N, pretrained_weights="coco") + +image_folder_path = "../../../../documentation/source/images/examples" +predictions = model.predict(image_folder_path) +predictions.show() diff --git a/src/super_gradients/examples/predict/detection_predict_streaming.py b/src/super_gradients/examples/predict/detection_predict_streaming.py new file mode 100644 index 0000000000..e5f912c02d --- /dev/null +++ b/src/super_gradients/examples/predict/detection_predict_streaming.py @@ -0,0 +1,6 @@ +from super_gradients.common.object_names import Models +from super_gradients.training import models + +# Note that currently only YoloX and PPYoloE are supported. +model = models.get(Models.YOLOX_N, pretrained_weights="coco") +model.predict_webcam() diff --git a/src/super_gradients/examples/predict/detection_predict_video.py b/src/super_gradients/examples/predict/detection_predict_video.py new file mode 100644 index 0000000000..0e902d9f1e --- /dev/null +++ b/src/super_gradients/examples/predict/detection_predict_video.py @@ -0,0 +1,9 @@ +from super_gradients.common.object_names import Models +from super_gradients.training import models + +# Note that currently only YoloX and PPYoloE are supported. +model = models.get(Models.YOLOX_N, pretrained_weights="coco") + +video_path = "" +predictions = model.predict(video_path) +predictions.show() diff --git a/src/super_gradients/training/datasets/detection_datasets/yolo_format_detection.py b/src/super_gradients/training/datasets/detection_datasets/yolo_format_detection.py index 4e40ddf946..d217c2342c 100644 --- a/src/super_gradients/training/datasets/detection_datasets/yolo_format_detection.py +++ b/src/super_gradients/training/datasets/detection_datasets/yolo_format_detection.py @@ -5,7 +5,7 @@ from typing import List, Optional from super_gradients.common.abstractions.abstract_logger import get_logger -from super_gradients.training.utils.load_image import is_image +from super_gradients.training.utils.media.image import is_image from super_gradients.training.datasets.detection_datasets.detection_dataset import DetectionDataset from super_gradients.training.datasets.data_formats import ConcatenatedTensorFormatConverter from super_gradients.training.datasets.data_formats.default_formats import XYXY_LABEL, LABEL_NORMALIZED_CXCYWH diff --git a/src/super_gradients/training/models/detection_models/customizable_detector.py b/src/super_gradients/training/models/detection_models/customizable_detector.py index 9d7e0055ae..8fc2e600b0 100644 --- a/src/super_gradients/training/models/detection_models/customizable_detector.py +++ b/src/super_gradients/training/models/detection_models/customizable_detector.py @@ -5,9 +5,7 @@ * each module accepts in_channels and other parameters * each module defines out_channels property on construction """ - - -from typing import Union, Optional +from typing import Union, Optional, List from torch import nn from omegaconf import DictConfig @@ -15,6 +13,11 @@ from super_gradients.training.utils.utils import HpmStruct from super_gradients.training.models.sg_module import SgModule import super_gradients.common.factories.detection_modules_factory as det_factory +from super_gradients.training.models.prediction_results import ImagesDetectionPrediction +from super_gradients.training.pipelines.pipelines import DetectionPipeline +from super_gradients.training.transforms.processing import Processing +from super_gradients.training.utils.detection_utils import DetectionPostPredictionCallback +from super_gradients.training.utils.media.image import ImageSource class CustomizableDetector(SgModule): @@ -67,6 +70,12 @@ def __init__( self._initialize_weights(bn_eps, bn_momentum, inplace_act) + # Processing params + self._class_names: Optional[List[str]] = None + self._image_processor: Optional[Processing] = None + self._default_nms_iou: Optional[float] = None + self._default_nms_conf: Optional[float] = None + def forward(self, x): x = self.backbone(x) x = self.neck(x) @@ -96,3 +105,70 @@ def replace_head(self, new_num_classes: Optional[int] = None, new_head: Optional self.heads_params = factory.insert_module_param(self.heads_params, "num_classes", new_num_classes) self.heads = factory.get(factory.insert_module_param(self.heads_params, "in_channels", self.neck.out_channels)) self._initialize_weights(self.bn_eps, self.bn_momentum, self.inplace_act) + + @staticmethod + def get_post_prediction_callback(conf: float, iou: float) -> DetectionPostPredictionCallback: + raise NotImplementedError + + def set_dataset_processing_params( + self, + class_names: Optional[List[str]] = None, + image_processor: Optional[Processing] = None, + iou: Optional[float] = None, + conf: Optional[float] = None, + ) -> None: + """Set the processing parameters for the dataset. + + :param class_names: (Optional) Names of the dataset the model was trained on. + :param image_processor: (Optional) Image processing objects to reproduce the dataset preprocessing used for training. + :param iou: (Optional) IoU threshold for the nms algorithm + :param conf: (Optional) Below the confidence threshold, prediction are discarded + """ + self._class_names = class_names or self._class_names + self._image_processor = image_processor or self._image_processor + self._default_nms_iou = iou or self._default_nms_iou + self._default_nms_conf = conf or self._default_nms_conf + + def _get_pipeline(self, iou: Optional[float] = None, conf: Optional[float] = None) -> DetectionPipeline: + """Instantiate the prediction pipeline of this model. + + :param iou: (Optional) IoU threshold for the nms algorithm. If None, the default value associated to the training is used. + :param conf: (Optional) Below the confidence threshold, prediction are discarded. + If None, the default value associated to the training is used. + """ + if None in (self._class_names, self._image_processor, self._default_nms_iou, self._default_nms_conf): + raise RuntimeError( + "You must set the dataset processing parameters before calling predict.\n" "Please call `model.set_dataset_processing_params(...)` first." + ) + + iou = iou or self._default_nms_iou + conf = conf or self._default_nms_conf + + pipeline = DetectionPipeline( + model=self, + image_processor=self._image_processor, + post_prediction_callback=self.get_post_prediction_callback(iou=iou, conf=conf), + class_names=self._class_names, + ) + return pipeline + + def predict(self, images: ImageSource, iou: Optional[float] = None, conf: Optional[float] = None) -> ImagesDetectionPrediction: + """Predict an image or a list of images. + + :param images: Images to predict. + :param iou: (Optional) IoU threshold for the nms algorithm. If None, the default value associated to the training is used. + :param conf: (Optional) Below the confidence threshold, prediction are discarded. + If None, the default value associated to the training is used. + """ + pipeline = self._get_pipeline(iou=iou, conf=conf) + return pipeline(images) # type: ignore + + def predict_webcam(self, iou: Optional[float] = None, conf: Optional[float] = None): + """Predict using webcam. + + :param iou: (Optional) IoU threshold for the nms algorithm. If None, the default value associated to the training is used. + :param conf: (Optional) Below the confidence threshold, prediction are discarded. + If None, the default value associated to the training is used. + """ + pipeline = self._get_pipeline(iou=iou, conf=conf) + pipeline.predict_webcam() diff --git a/src/super_gradients/training/models/detection_models/pp_yolo_e/pp_yolo_e.py b/src/super_gradients/training/models/detection_models/pp_yolo_e/pp_yolo_e.py index 94ebcb8591..3365de20e4 100644 --- a/src/super_gradients/training/models/detection_models/pp_yolo_e/pp_yolo_e.py +++ b/src/super_gradients/training/models/detection_models/pp_yolo_e/pp_yolo_e.py @@ -12,9 +12,10 @@ from super_gradients.training.utils import HpmStruct from super_gradients.training.models.arch_params_factory import get_arch_params from super_gradients.training.models.detection_models.pp_yolo_e.post_prediction_callback import PPYoloEPostPredictionCallback, DetectionPostPredictionCallback -from super_gradients.training.models.results import DetectionResults +from super_gradients.training.models.prediction_results import ImagesDetectionPrediction from super_gradients.training.pipelines.pipelines import DetectionPipeline from super_gradients.training.transforms.processing import Processing +from super_gradients.training.utils.media.image import ImageSource class PPYoloE(SgModule): @@ -29,34 +30,75 @@ def __init__(self, arch_params): self._class_names: Optional[List[str]] = None self._image_processor: Optional[Processing] = None + self._default_nms_iou: Optional[float] = None + self._default_nms_conf: Optional[float] = None @staticmethod def get_post_prediction_callback(conf: float, iou: float) -> DetectionPostPredictionCallback: return PPYoloEPostPredictionCallback(score_threshold=conf, nms_threshold=iou, nms_top_k=1000, max_predictions=300) - def set_dataset_processing_params(self, class_names: Optional[List[str]], image_processor: Optional[Processing]) -> None: + def set_dataset_processing_params( + self, + class_names: Optional[List[str]] = None, + image_processor: Optional[Processing] = None, + iou: Optional[float] = None, + conf: Optional[float] = None, + ) -> None: """Set the processing parameters for the dataset. :param class_names: (Optional) Names of the dataset the model was trained on. :param image_processor: (Optional) Image processing objects to reproduce the dataset preprocessing used for training. + :param iou: (Optional) IoU threshold for the nms algorithm + :param conf: (Optional) Below the confidence threshold, prediction are discarded """ self._class_names = class_names or self._class_names self._image_processor = image_processor or self._image_processor + self._default_nms_iou = iou or self._default_nms_iou + self._default_nms_conf = conf or self._default_nms_conf - def predict(self, images, iou: float = 0.65, conf: float = 0.01) -> DetectionResults: + def _get_pipeline(self, iou: Optional[float] = None, conf: Optional[float] = None) -> DetectionPipeline: + """Instantiate the prediction pipeline of this model. - if self._class_names is None or self._image_processor is None: + :param iou: (Optional) IoU threshold for the nms algorithm. If None, the default value associated to the training is used. + :param conf: (Optional) Below the confidence threshold, prediction are discarded. + If None, the default value associated to the training is used. + """ + if None in (self._class_names, self._image_processor, self._default_nms_iou, self._default_nms_conf): raise RuntimeError( "You must set the dataset processing parameters before calling predict.\n" "Please call `model.set_dataset_processing_params(...)` first." ) + iou = iou or self._default_nms_iou + conf = conf or self._default_nms_conf + pipeline = DetectionPipeline( model=self, image_processor=self._image_processor, post_prediction_callback=self.get_post_prediction_callback(iou=iou, conf=conf), class_names=self._class_names, ) - return pipeline(images) + return pipeline + + def predict(self, images: ImageSource, iou: Optional[float] = None, conf: Optional[float] = None) -> ImagesDetectionPrediction: + """Predict an image or a list of images. + + :param images: Images to predict. + :param iou: (Optional) IoU threshold for the nms algorithm. If None, the default value associated to the training is used. + :param conf: (Optional) Below the confidence threshold, prediction are discarded. + If None, the default value associated to the training is used. + """ + pipeline = self._get_pipeline(iou=iou, conf=conf) + return pipeline(images) # type: ignore + + def predict_webcam(self, iou: Optional[float] = None, conf: Optional[float] = None): + """Predict using webcam. + + :param iou: (Optional) IoU threshold for the nms algorithm. If None, the default value associated to the training is used. + :param conf: (Optional) Below the confidence threshold, prediction are discarded. + If None, the default value associated to the training is used. + """ + pipeline = self._get_pipeline(iou=iou, conf=conf) + pipeline.predict_webcam() def forward(self, x: Tensor): features = self.backbone(x) diff --git a/src/super_gradients/training/models/detection_models/yolo_base.py b/src/super_gradients/training/models/detection_models/yolo_base.py index 6573ad4075..62ad295329 100755 --- a/src/super_gradients/training/models/detection_models/yolo_base.py +++ b/src/super_gradients/training/models/detection_models/yolo_base.py @@ -11,10 +11,10 @@ from super_gradients.training.utils import torch_version_is_greater_or_equal from super_gradients.training.utils.detection_utils import non_max_suppression, matrix_non_max_suppression, NMS_Type, DetectionPostPredictionCallback, Anchors from super_gradients.training.utils.utils import HpmStruct, check_img_size_divisibility, get_param -from super_gradients.training.models.results import DetectionResults +from super_gradients.training.models.prediction_results import ImagesDetectionPrediction from super_gradients.training.pipelines.pipelines import DetectionPipeline from super_gradients.training.transforms.processing import Processing - +from super_gradients.training.utils.media.image import ImageSource COCO_DETECTION_80_CLASSES_BBOX_ANCHORS = Anchors( [[10, 13, 16, 30, 33, 23], [30, 61, 62, 45, 59, 119], [116, 90, 156, 198, 373, 326]], strides=[8, 16, 32] @@ -418,33 +418,75 @@ def __init__(self, backbone: Type[nn.Module], arch_params: HpmStruct, initialize self._class_names: Optional[List[str]] = None self._image_processor: Optional[Processing] = None + self._default_nms_iou: Optional[float] = None + self._default_nms_conf: Optional[float] = None @staticmethod def get_post_prediction_callback(conf: float, iou: float) -> DetectionPostPredictionCallback: return YoloPostPredictionCallback(conf=conf, iou=iou) - def set_dataset_processing_params(self, class_names: Optional[List[str]], image_processor: Optional[Processing]) -> None: + def set_dataset_processing_params( + self, + class_names: Optional[List[str]] = None, + image_processor: Optional[Processing] = None, + iou: Optional[float] = None, + conf: Optional[float] = None, + ) -> None: """Set the processing parameters for the dataset. :param class_names: (Optional) Names of the dataset the model was trained on. :param image_processor: (Optional) Image processing objects to reproduce the dataset preprocessing used for training. + :param iou: (Optional) IoU threshold for the nms algorithm + :param conf: (Optional) Below the confidence threshold, prediction are discarded """ self._class_names = class_names or self._class_names self._image_processor = image_processor or self._image_processor + self._default_nms_iou = iou or self._default_nms_iou + self._default_nms_conf = conf or self._default_nms_conf + + def _get_pipeline(self, iou: Optional[float] = None, conf: Optional[float] = None) -> DetectionPipeline: + """Instantiate the prediction pipeline of this model. - def predict(self, images, iou: float = 0.65, conf: float = 0.01) -> DetectionResults: - if self._class_names is None or self._image_processor is None: + :param iou: (Optional) IoU threshold for the nms algorithm. If None, the default value associated to the training is used. + :param conf: (Optional) Below the confidence threshold, prediction are discarded. + If None, the default value associated to the training is used. + """ + if None in (self._class_names, self._image_processor, self._default_nms_iou, self._default_nms_conf): raise RuntimeError( "You must set the dataset processing parameters before calling predict.\n" "Please call `model.set_dataset_processing_params(...)` first." ) + iou = iou or self._default_nms_iou + conf = conf or self._default_nms_conf + pipeline = DetectionPipeline( model=self, image_processor=self._image_processor, post_prediction_callback=self.get_post_prediction_callback(iou=iou, conf=conf), class_names=self._class_names, ) - return pipeline(images) + return pipeline + + def predict(self, images: ImageSource, iou: Optional[float] = None, conf: Optional[float] = None) -> ImagesDetectionPrediction: + """Predict an image or a list of images. + + :param images: Images to predict. + :param iou: (Optional) IoU threshold for the nms algorithm. If None, the default value associated to the training is used. + :param conf: (Optional) Below the confidence threshold, prediction are discarded. + If None, the default value associated to the training is used. + """ + pipeline = self._get_pipeline(iou=iou, conf=conf) + return pipeline(images) # type: ignore + + def predict_webcam(self, iou: Optional[float] = None, conf: Optional[float] = None): + """Predict using webcam. + + :param iou: (Optional) IoU threshold for the nms algorithm. If None, the default value associated to the training is used. + :param conf: (Optional) Below the confidence threshold, prediction are discarded. + If None, the default value associated to the training is used. + """ + pipeline = self._get_pipeline(iou=iou, conf=conf) + pipeline.predict_webcam() def forward(self, x): out = self._backbone(x) diff --git a/src/super_gradients/training/models/model_factory.py b/src/super_gradients/training/models/model_factory.py index a1b3b98570..01de15febc 100644 --- a/src/super_gradients/training/models/model_factory.py +++ b/src/super_gradients/training/models/model_factory.py @@ -136,8 +136,9 @@ def instantiate_model( net.replace_head(new_num_classes=num_classes_new_head) arch_params.num_classes = num_classes_new_head - class_names, image_processor = get_pretrained_processing_params(model_name, pretrained_weights) - net.set_dataset_processing_params(class_names, image_processor) + # TODO: remove once we load it from the checkpoint + processing_params = get_pretrained_processing_params(model_name, pretrained_weights) + net.set_dataset_processing_params(**processing_params) _add_model_name_attribute(net, model_name) diff --git a/src/super_gradients/training/models/results.py b/src/super_gradients/training/models/prediction_results.py similarity index 57% rename from src/super_gradients/training/models/results.py rename to src/super_gradients/training/models/prediction_results.py index 34e09844ba..1396e34210 100644 --- a/src/super_gradients/training/models/results.py +++ b/src/super_gradients/training/models/prediction_results.py @@ -1,17 +1,18 @@ from abc import ABC, abstractmethod -from typing import List, Optional, Tuple +from typing import List, Optional, Tuple, Iterator from dataclasses import dataclass -from matplotlib import pyplot as plt import numpy as np from super_gradients.training.utils.detection_utils import DetectionVisualization from super_gradients.training.models.predictions import Prediction, DetectionPrediction +from super_gradients.training.utils.media.video import show_video_from_frames +from super_gradients.training.utils.media.image import show_image @dataclass -class Result(ABC): - """Results of a given computer vision task (detection, classification, etc.). +class ImagePrediction(ABC): + """Object wrapping an image and a model's prediction. :attr image: Input image :attr predictions: Predictions of the model @@ -19,7 +20,7 @@ class Result(ABC): """ image: np.ndarray - predictions: Prediction + prediction: Prediction class_names: List[str] @abstractmethod @@ -34,28 +35,8 @@ def show(self) -> None: @dataclass -class Results(ABC): - """List of results of a given computer vision task (detection, classification, etc.). - - :attr results: List of results of the run - """ - - results: List[Result] - - @abstractmethod - def draw(self) -> List[np.ndarray]: - """Draw the predictions on the image.""" - pass - - @abstractmethod - def show(self) -> None: - """Display the predictions on the image.""" - pass - - -@dataclass -class DetectionResult(Result): - """Result of a detection task. +class ImageDetectionPrediction(ImagePrediction): + """Object wrapping an image and a detection model's prediction. :attr image: Input image :attr predictions: Predictions of the model @@ -63,7 +44,7 @@ class DetectionResult(Result): """ image: np.ndarray - predictions: DetectionPrediction + prediction: DetectionPrediction class_names: List[str] def draw(self, box_thickness: int = 2, show_confidence: bool = True, color_mapping: Optional[List[Tuple[int]]] = None) -> np.ndarray: @@ -78,18 +59,18 @@ def draw(self, box_thickness: int = 2, show_confidence: bool = True, color_mappi image_np = self.image.copy() color_mapping = color_mapping or DetectionVisualization._generate_color_mapping(len(self.class_names)) - for pred_i in range(len(self.predictions)): + for pred_i in range(len(self.prediction)): image_np = DetectionVisualization._draw_box_title( color_mapping=color_mapping, class_names=self.class_names, box_thickness=box_thickness, image_np=image_np, - x1=int(self.predictions.bboxes_xyxy[pred_i, 0]), - y1=int(self.predictions.bboxes_xyxy[pred_i, 1]), - x2=int(self.predictions.bboxes_xyxy[pred_i, 2]), - y2=int(self.predictions.bboxes_xyxy[pred_i, 3]), - class_id=int(self.predictions.labels[pred_i]), - pred_conf=self.predictions.confidence[pred_i] if show_confidence else None, + x1=int(self.prediction.bboxes_xyxy[pred_i, 0]), + y1=int(self.prediction.bboxes_xyxy[pred_i, 1]), + x2=int(self.prediction.bboxes_xyxy[pred_i, 2]), + y2=int(self.prediction.bboxes_xyxy[pred_i, 3]), + class_id=int(self.prediction.labels[pred_i]), + pred_conf=self.prediction.confidence[pred_i] if show_confidence else None, ) return image_np @@ -102,34 +83,80 @@ def show(self, box_thickness: int = 2, show_confidence: bool = True, color_mappi Default is None, which generates a default color mapping based on the number of class names. """ image_np = self.draw(box_thickness=box_thickness, show_confidence=show_confidence, color_mapping=color_mapping) + show_image(image_np) + + +@dataclass +class ImagesPredictions(ABC): + """Object wrapping the list of image predictions. - plt.imshow(image_np, interpolation="nearest") - plt.axis("off") - plt.show() + :attr _images_prediction_lst: List of results of the run + """ + + _images_prediction_lst: List[ImagePrediction] + + def __len__(self) -> int: + return len(self._images_prediction_lst) + + def __getitem__(self, index: int) -> ImagePrediction: + return self._images_prediction_lst[index] + + def __iter__(self) -> Iterator[ImagePrediction]: + return iter(self._images_prediction_lst) + + @abstractmethod + def show(self) -> None: + pass @dataclass -class DetectionResults(Results): - """Results of a detection task. +class VideoPredictions(ImagesPredictions, ABC): + """Object wrapping the list of image predictions as a Video. - :attr results: List of the predictions results + :attr _images_prediction_lst: List of results of the run + :att fps: Frames per second of the video """ - def __init__(self, images: List[np.ndarray], predictions: List[DetectionPrediction], class_names: List[str]): - self.results: List[DetectionResult] = [] - for image, prediction in zip(images, predictions): - self.results.append(DetectionResult(image=image, predictions=prediction, class_names=class_names)) + _images_prediction_lst: List[ImagePrediction] + fps: float + + @abstractmethod + def show(self, *args, **kwargs) -> None: + """Display the predictions on the image.""" + pass + + +@dataclass +class ImagesDetectionPrediction(ImagesPredictions): + """Object wrapping the list of image detection predictions. + + :attr _images_prediction_lst: List of the predictions results + """ - def draw(self, box_thickness: int = 2, show_confidence: bool = True, color_mapping: Optional[List[Tuple[int]]] = None) -> List[np.ndarray]: - """Draw the predicted bboxes on the images. + _images_prediction_lst: List[ImageDetectionPrediction] + + def show(self, box_thickness: int = 2, show_confidence: bool = True, color_mapping: Optional[List[Tuple[int]]] = None) -> None: + """Display the predicted bboxes on the images. :param box_thickness: Thickness of bounding boxes. :param show_confidence: Whether to show confidence scores on the image. :param color_mapping: List of tuples representing the colors for each class. Default is None, which generates a default color mapping based on the number of class names. - :return: List of Images with predicted bboxes for each image. Note that this does not modify the original images. """ - return [prediction.draw(box_thickness=box_thickness, show_confidence=show_confidence, color_mapping=color_mapping) for prediction in self.results] + for prediction in self._images_prediction_lst: + prediction.show(box_thickness=box_thickness, show_confidence=show_confidence, color_mapping=color_mapping) + + +@dataclass +class VideoDetectionPrediction(VideoPredictions): + """Object wrapping the list of image detection predictions as a Video. + + :attr _images_prediction_lst: List of the predictions results + :att fps: Frames per second of the video + """ + + _images_prediction_lst: List[ImageDetectionPrediction] + fps: float def show(self, box_thickness: int = 2, show_confidence: bool = True, color_mapping: Optional[List[Tuple[int]]] = None) -> None: """Display the predicted bboxes on the images. @@ -139,5 +166,7 @@ def show(self, box_thickness: int = 2, show_confidence: bool = True, color_mappi :param color_mapping: List of tuples representing the colors for each class. Default is None, which generates a default color mapping based on the number of class names. """ - for prediction in self.results: - prediction.show(box_thickness=box_thickness, show_confidence=show_confidence, color_mapping=color_mapping) + frames = [ + result.draw(box_thickness=box_thickness, show_confidence=show_confidence, color_mapping=color_mapping) for result in self._images_prediction_lst + ] + show_video_from_frames(window_name="Detection", frames=frames, fps=self.fps) diff --git a/src/super_gradients/training/models/sg_module.py b/src/super_gradients/training/models/sg_module.py index 560e834a24..dc4c38166f 100755 --- a/src/super_gradients/training/models/sg_module.py +++ b/src/super_gradients/training/models/sg_module.py @@ -3,7 +3,7 @@ from torch import nn from super_gradients.training.utils.utils import HpmStruct -from super_gradients.training.models.results import Result +from super_gradients.training.models.prediction_results import ImagesPredictions class SgModule(nn.Module): @@ -64,9 +64,12 @@ class to implement. raise NotImplementedError - def predict(self, images, *args, **kwargs) -> Result: + def predict(self, images, *args, **kwargs) -> ImagesPredictions: raise NotImplementedError(f"`predict` is not implemented for {self.__class__.__name__}.") + def predict_webcam(self, *args, **kwargs) -> None: + raise NotImplementedError(f"`predict_webcam` is not implemented for {self.__class__.__name__}.") + def set_dataset_processing_params(self, *args, **kwargs) -> None: """Set the processing parameters for the dataset.""" pass diff --git a/src/super_gradients/training/pipelines/pipelines.py b/src/super_gradients/training/pipelines/pipelines.py index 55eb4ae4e3..eb050486cc 100644 --- a/src/super_gradients/training/pipelines/pipelines.py +++ b/src/super_gradients/training/pipelines/pipelines.py @@ -1,16 +1,30 @@ from abc import ABC, abstractmethod -from typing import List, Optional, Tuple, Union +from typing import List, Optional, Tuple, Union, Iterable from contextlib import contextmanager +from tqdm import tqdm import numpy as np import torch - -from super_gradients.training.utils.load_image import load_images, ImageType +from super_gradients.training.utils.utils import generate_batch +from super_gradients.training.utils.media.video import load_video, is_video +from super_gradients.training.utils.media.image import ImageSource, check_image_typing +from super_gradients.training.utils.media.stream import WebcamStreaming from super_gradients.training.utils.detection_utils import DetectionPostPredictionCallback from super_gradients.training.models.sg_module import SgModule -from super_gradients.training.models.results import Results, DetectionResults +from super_gradients.training.models.prediction_results import ( + ImagesDetectionPrediction, + VideoDetectionPrediction, + ImagePrediction, + ImageDetectionPrediction, + ImagesPredictions, + VideoPredictions, +) from super_gradients.training.models.predictions import Prediction, DetectionPrediction from super_gradients.training.transforms.processing import Processing, ComposeProcessing +from super_gradients.common.abstractions.abstract_logger import get_logger + + +logger = get_logger(__name__) @contextmanager @@ -35,39 +49,101 @@ class Pipeline(ABC): :param device: The device on which the model will be run. Defaults to "cpu". Use "cuda" for GPU support. """ - def __init__(self, model: SgModule, image_processor: Union[Processing, List[Processing]], device: Optional[str] = "cpu"): + def __init__(self, model: SgModule, image_processor: Union[Processing, List[Processing]], class_names: List[str], device: Optional[str] = "cpu"): super().__init__() self.model = model.to(device) self.device = device + self.class_names = class_names if isinstance(image_processor, list): image_processor = ComposeProcessing(image_processor) self.image_processor = image_processor - @abstractmethod - def __call__(self, images: Union[ImageType, List[ImageType]]) -> Union[Results, Tuple[List[np.ndarray], List[Prediction]]]: - """Apply the pipeline on images and return the result. + def __call__(self, inputs: Union[str, ImageSource, List[ImageSource]], batch_size: Optional[int] = 32) -> ImagesPredictions: + """Predict an image or a list of images. + + Supported types include: + - str: A string representing either a video, an image or an URL. + - numpy.ndarray: A numpy array representing the image + - torch.Tensor: A PyTorch tensor representing the image + - PIL.Image.Image: A PIL Image object + - List: A list of images of any of the above image types (list of videos not supported). - :param images: Single image or a list of images of supported types. - :return Results object containing the results of the prediction and the image. + :param inputs: inputs to the model, which can be any of the above-mentioned types. + :param batch_size: Number of images to be processed at the same time. + :return: Results of the prediction. """ - return self._run(images=images) - - def _run(self, images: Union[ImageType, List[ImageType]]) -> Tuple[List[np.ndarray], List[Prediction]]: - """Run the pipeline and return (image, predictions). The pipeline is made of 4 steps: - 1. Load images - Loading the images into a list of numpy arrays. - 2. Preprocess - Encode the image in the shape/format expected by the model - 3. Predict - Run the model on the preprocessed image - 4. Postprocess - Decode the output of the model so that the predictions are in the shape/format of original image. - - :param images: Single image or a list of images of supported types. - :return: - - List of numpy arrays representing images. - - List of model predictions. + + if is_video(inputs): + return self.predict_video(inputs, batch_size) + elif check_image_typing(inputs): + return self.predict_images(inputs, batch_size) + else: + raise ValueError(f"Input {inputs} not supported for prediction.") + + def predict_images(self, images: Union[ImageSource, List[ImageSource]], batch_size: Optional[int] = 32) -> ImagesPredictions: + """Predict an image or a list of images. + + :param images: Images to predict. + :param batch_size: The size of each batch. + :return: Results of the prediction. """ - self.model = self.model.to(self.device) # Make sure the model is on the correct device, as it might have been moved after init + from super_gradients.training.utils.media.image import load_images images = load_images(images) + result_generator = self._generate_prediction_result(images=images, batch_size=batch_size) + return self._combine_image_prediction_to_images(result_generator, n_images=len(images)) + + def predict_video(self, video_path: str, batch_size: Optional[int] = 32) -> VideoPredictions: + """Predict on a video file, by processing the frames in batches. + + :param video_path: Path to the video file. + :param batch_size: The size of each batch. + :return: Results of the prediction. + """ + video_frames, fps = load_video(file_path=video_path) + result_generator = self._generate_prediction_result(images=video_frames, batch_size=batch_size) + return self._combine_image_prediction_to_video(result_generator, fps=fps, n_images=len(video_frames)) + + def predict_webcam(self) -> None: + """Predict using webcam""" + + def _draw_predictions(frame: np.ndarray) -> np.ndarray: + """Draw the predictions on a single frame from the stream.""" + frame_prediction = next(iter(self._generate_prediction_result(images=[frame]))) + return frame_prediction.draw() + + video_streaming = WebcamStreaming(frame_processing_fn=_draw_predictions, fps_update_frequency=1) + video_streaming.run() + + def _generate_prediction_result(self, images: Iterable[np.ndarray], batch_size: Optional[int] = None) -> Iterable[ImagePrediction]: + """Run the pipeline on the images as single batch or through multiple batches. + + NOTE: A core motivation to have this function as a generator is that it can be used in a lazy way (if images is generator itself), + i.e. without having to load all the images into memory. + + :param images: Iterable of numpy arrays representing images. + :param batch_size: The size of each batch. + :return: Iterable of Results object, each containing the results of the prediction and the image. + """ + if batch_size is None: + yield from self._generate_prediction_result_single_batch(images) + else: + for batch_images in generate_batch(images, batch_size): + yield from self._generate_prediction_result_single_batch(batch_images) + + def _generate_prediction_result_single_batch(self, images: Iterable[np.ndarray]) -> Iterable[ImagePrediction]: + """Run the pipeline on images. The pipeline is made of 4 steps: + 1. Load images - Loading the images into a list of numpy arrays. + 2. Preprocess - Encode the image in the shape/format expected by the model + 3. Predict - Run the model on the preprocessed image + 4. Postprocess - Decode the output of the model so that the predictions are in the shape/format of original image. + + :param images: Iterable of numpy arrays representing images. + :return: Iterable of Results object, each containing the results of the prediction and the image. + """ + images = list(images) # We need to load all the images into memory, and to reuse it afterwards. + self.model = self.model.to(self.device) # Make sure the model is on the correct device, as it might have been moved after init # Preprocess preprocessed_images, processing_metadatas = [], [] @@ -84,11 +160,13 @@ def _run(self, images: Union[ImageType, List[ImageType]]) -> Tuple[List[np.ndarr # Postprocess postprocessed_predictions = [] - for prediction, processing_metadata in zip(predictions, processing_metadatas): + for image, prediction, processing_metadata in zip(images, predictions, processing_metadatas): prediction = self.image_processor.postprocess_predictions(predictions=prediction, metadata=processing_metadata) postprocessed_predictions.append(prediction) - return images, postprocessed_predictions + # Yield results one by one + for image, prediction in zip(images, postprocessed_predictions): + yield self._instantiate_image_prediction(image=image, prediction=prediction) @abstractmethod def _decode_model_output(self, model_output: Union[List, Tuple, torch.Tensor], model_input: np.ndarray) -> List[Prediction]: @@ -98,7 +176,40 @@ def _decode_model_output(self, model_output: Union[List, Tuple, torch.Tensor], m :param model_input: Model input (i.e. images after preprocessing). :return: Model predictions, without any post-processing. """ - pass + raise NotImplementedError + + @abstractmethod + def _instantiate_image_prediction(self, image: np.ndarray, prediction: Prediction) -> ImagePrediction: + """Instantiate an object wrapping an image and the pipeline's prediction. + + :param image: Image to predict. + :param prediction: Model prediction on that image. + :return: Object wrapping an image and the pipeline's prediction. + """ + raise NotImplementedError + + @abstractmethod + def _combine_image_prediction_to_images(self, images_prediction_lst: Iterable[ImagePrediction], n_images: Optional[int] = None) -> ImagesPredictions: + """Instantiate an object wrapping the list of images and the pipeline's predictions on them. + + :param images_prediction_lst: List of image predictions. + :param n_images: (Optional) Number of images in the list. This used for tqdm progress bar to work with iterables, but is not required. + :return: Object wrapping the list of image predictions. + """ + raise NotImplementedError + + @abstractmethod + def _combine_image_prediction_to_video( + self, images_prediction_lst: Iterable[ImagePrediction], fps: float, n_images: Optional[int] = None + ) -> VideoPredictions: + """Instantiate an object holding the video frames and the pipeline's predictions on it. + + :param images_prediction_lst: List of image predictions. + :param fps: Frames per second. + :param n_images: (Optional) Number of images in the list. This used for tqdm progress bar to work with iterables, but is not required. + :return: Object wrapping the list of image predictions as a Video. + """ + raise NotImplementedError class DetectionPipeline(Pipeline): @@ -120,18 +231,8 @@ def __init__( device: Optional[str] = "cpu", image_processor: Optional[Processing] = None, ): - super().__init__(model=model, device=device, image_processor=image_processor) + super().__init__(model=model, device=device, image_processor=image_processor, class_names=class_names) self.post_prediction_callback = post_prediction_callback - self.class_names = class_names - - def __call__(self, images: Union[List[ImageType], ImageType]) -> DetectionResults: - """Apply the pipeline on images and return the detection result. - - :param images: Single image or a list of images of supported types. - :return Results object containing the results of the prediction and the image. - """ - images, predictions = super().__call__(images=images) - return DetectionResults(images=images, predictions=predictions, class_names=self.class_names) def _decode_model_output(self, model_output: Union[List, Tuple, torch.Tensor], model_input: np.ndarray) -> List[DetectionPrediction]: """Decode the model output, by applying post prediction callback. This includes NMS. @@ -144,7 +245,7 @@ def _decode_model_output(self, model_output: Union[List, Tuple, torch.Tensor], m predictions = [] for prediction, image in zip(post_nms_predictions, model_input): - prediction if prediction is not None else torch.zeros((0, 6), dtype=torch.float32) + prediction = prediction if prediction is not None else torch.zeros((0, 6), dtype=torch.float32) prediction = prediction.detach().cpu().numpy() predictions.append( DetectionPrediction( @@ -157,3 +258,18 @@ def _decode_model_output(self, model_output: Union[List, Tuple, torch.Tensor], m ) return predictions + + def _instantiate_image_prediction(self, image: np.ndarray, prediction: DetectionPrediction) -> ImagePrediction: + return ImageDetectionPrediction(image=image, prediction=prediction, class_names=self.class_names) + + def _combine_image_prediction_to_images( + self, images_predictions: Iterable[ImageDetectionPrediction], n_images: Optional[int] = None + ) -> ImagesDetectionPrediction: + images_predictions = [image_predictions for image_predictions in tqdm(images_predictions, total=n_images, desc="Predicting Images")] + return ImagesDetectionPrediction(_images_prediction_lst=images_predictions) + + def _combine_image_prediction_to_video( + self, images_predictions: Iterable[ImageDetectionPrediction], fps: float, n_images: Optional[int] = None + ) -> VideoDetectionPrediction: + images_predictions = [image_predictions for image_predictions in tqdm(images_predictions, total=n_images, desc="Predicting Video")] + return VideoDetectionPrediction(_images_prediction_lst=images_predictions, fps=fps) diff --git a/src/super_gradients/training/transforms/processing.py b/src/super_gradients/training/transforms/processing.py index aa96d2cade..18eca83033 100644 --- a/src/super_gradients/training/transforms/processing.py +++ b/src/super_gradients/training/transforms/processing.py @@ -1,9 +1,10 @@ -from typing import Tuple, List, Union, Optional +from typing import Tuple, List, Union from abc import ABC, abstractmethod from dataclasses import dataclass import numpy as np +from super_gradients.training.datasets.datasets_conf import COCO_DETECTION_CLASSES_LIST from super_gradients.training.models.predictions import Prediction, DetectionPrediction from super_gradients.training.transforms.utils import ( _rescale_image, @@ -96,6 +97,49 @@ def postprocess_predictions(self, predictions: Prediction, metadata: None) -> Pr return predictions +class ReverseImageChannels(Processing): + """Reverse the order of the image channels (RGB -> BGR or BGR -> RGB).""" + + def preprocess_image(self, image: np.ndarray) -> Tuple[np.ndarray, None]: + """Reverse the channel order of an image. + + :param image: Image, in (H, W, C) format. + :return: Image with reversed channel order. (RGB if input was BGR, BGR if input was RGB) + """ + + if image.shape[2] != 3: + raise ValueError("ReverseImageChannels expects 3 channels, got: " + str(image.shape[2])) + + processed_image = image[..., ::-1] + return processed_image, None + + def postprocess_predictions(self, predictions: Prediction, metadata: None) -> Prediction: + return predictions + + +class StandardizeImage(Processing): + """Standardize image pixel values with img/max_val + + :param max_value: Current maximum value of the image pixels. (usually 255) + """ + + def __init__(self, max_value: float = 255.0): + super().__init__() + self.max_value = max_value + + def preprocess_image(self, image: np.ndarray) -> Tuple[np.ndarray, None]: + """Reverse the channel order of an image. + + :param image: Image, in (H, W, C) format. + :return: Image with reversed channel order. (RGB if input was BGR, BGR if input was RGB) + """ + processed_image = (image / self.max_value).astype(np.float32) + return processed_image, None + + def postprocess_predictions(self, predictions: Prediction, metadata: None) -> Prediction: + return predictions + + class NormalizeImage(Processing): """Normalize an image based on means and standard deviation. @@ -204,41 +248,84 @@ def postprocess_predictions(self, predictions: DetectionPrediction, metadata: Re return predictions -def get_pretrained_processing_params(model_name: str, pretrained_weights: str) -> Tuple[Optional[List[str]], Optional[Processing]]: - """Get the processing parameters for a pretrained model.""" - if "yolox" in model_name and pretrained_weights == "coco": - return default_yolox_coco_processing_params() - elif "ppyoloe" in model_name and pretrained_weights == "coco": - return default_ppyoloe_coco_processing_params() - else: - return None, None - - -def default_yolox_coco_processing_params() -> Tuple[List[str], Processing]: - """Processing parameters commonly used for training YoloX on COCO dataset.""" - from super_gradients.training.datasets.datasets_conf import COCO_DETECTION_CLASSES_LIST +def default_yolox_coco_processing_params() -> dict: + """Processing parameters commonly used for training YoloX on COCO dataset. + TODO: remove once we load it from the checkpoint + """ image_processor = ComposeProcessing( [ + ReverseImageChannels(), DetectionLongestMaxSizeRescale((640, 640)), DetectionBottomRightPadding((640, 640), 114), ImagePermute((2, 0, 1)), ] ) - class_names = COCO_DETECTION_CLASSES_LIST - return class_names, image_processor + + params = dict( + class_names=COCO_DETECTION_CLASSES_LIST, + image_processor=image_processor, + iou=0.65, + conf=0.1, + ) + return params -def default_ppyoloe_coco_processing_params() -> Tuple[List[str], Processing]: - """Processing parameters commonly used for training PPYoloE on COCO dataset.""" - from super_gradients.training.datasets.datasets_conf import COCO_DETECTION_CLASSES_LIST +def default_ppyoloe_coco_processing_params() -> dict: + """Processing parameters commonly used for training PPYoloE on COCO dataset. + TODO: remove once we load it from the checkpoint + """ image_processor = ComposeProcessing( [ + ReverseImageChannels(), DetectionRescale(output_shape=(640, 640)), NormalizeImage(mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375]), ImagePermute(permutation=(2, 0, 1)), ] ) - class_names = COCO_DETECTION_CLASSES_LIST - return class_names, image_processor + + params = dict( + class_names=COCO_DETECTION_CLASSES_LIST, + image_processor=image_processor, + iou=0.65, + conf=0.5, + ) + return params + + +def default_deciyolo_coco_processing_params() -> dict: + """Processing parameters commonly used for training DeciYolo on COCO dataset. + TODO: remove once we load it from the checkpoint + """ + + image_processor = ComposeProcessing( + [ + DetectionLongestMaxSizeRescale(output_shape=(636, 636)), + DetectionCenterPadding(output_shape=(640, 640), pad_value=114), + StandardizeImage(max_value=255.0), + ImagePermute(permutation=(2, 0, 1)), + ] + ) + + params = dict( + class_names=COCO_DETECTION_CLASSES_LIST, + image_processor=image_processor, + iou=0.65, + conf=0.5, + ) + return params + + +def get_pretrained_processing_params(model_name: str, pretrained_weights: str) -> dict: + """Get the processing parameters for a pretrained model. + TODO: remove once we load it from the checkpoint + """ + if pretrained_weights == "coco": + if "yolox" in model_name: + return default_yolox_coco_processing_params() + elif "ppyoloe" in model_name: + return default_ppyoloe_coco_processing_params() + elif "deciyolo" in model_name: + return default_deciyolo_coco_processing_params() + return dict() diff --git a/src/super_gradients/training/utils/load_image.py b/src/super_gradients/training/utils/load_image.py index 2173c76bcf..e69de29bb2 100644 --- a/src/super_gradients/training/utils/load_image.py +++ b/src/super_gradients/training/utils/load_image.py @@ -1,87 +0,0 @@ -from typing import Union, List -import PIL - -import numpy as np -import torch -import requests -from urllib.parse import urlparse - -IMG_EXTENSIONS = ("bmp", "dng", "jpeg", "jpg", "mpo", "png", "tif", "tiff", "webp", "pfm") -ImageType = Union[str, np.ndarray, torch.Tensor, PIL.Image.Image] - - -def load_images(images: Union[List[ImageType], ImageType]) -> List[np.ndarray]: - """Load a single image or a list of images and return them as a list of numpy arrays. - - Supported image types include: - - numpy.ndarray: A numpy array representing the image - - torch.Tensor: A PyTorch tensor representing the image - - PIL.Image.Image: A PIL Image object - - str: A string representing either a local file path or a URL to an image - - :param images: Single image or a list of images of supported types. - :return: List of images as numpy arrays. If loaded from string, the image will be returned as RGB. - """ - if isinstance(images, list): - return [load_image(image=image) for image in images] - else: - return [load_image(image=images)] - - -def load_image(image: ImageType) -> np.ndarray: - """Load a single image and return it as a numpy arrays. - - Supported image types include: - - numpy.ndarray: A numpy array representing the image - - torch.Tensor: A PyTorch tensor representing the image - - PIL.Image.Image: A PIL Image object - - str: A string representing either a local file path or a URL to an image - - :param image: Single image of supported types. - :return: Image as numpy arrays. If loaded from string, the image will be returned as RGB. - """ - if isinstance(image, np.ndarray): - return image - elif isinstance(image, torch.Tensor): - return image.numpy() - elif isinstance(image, PIL.Image.Image): - return load_np_image_from_pil(image) - elif isinstance(image, str): - image = load_pil_image_from_str(image_str=image) - return load_np_image_from_pil(image) - else: - raise ValueError(f"Unsupported image type: {type(image)}") - - -def load_np_image_from_pil(image: PIL.Image.Image) -> np.ndarray: - """Convert a PIL image to numpy array in RGB format.""" - return np.asarray(image.convert("RGB")) - - -def load_pil_image_from_str(image_str: str) -> PIL.Image.Image: - """Load an image based on a string (local file path or URL).""" - - if is_url(image_str): - response = requests.get(image_str, stream=True) - response.raise_for_status() - return PIL.Image.open(response.raw) - else: - return PIL.Image.open(image_str) - - -def is_url(url: str) -> bool: - """Check if the given string is a URL.""" - try: - result = urlparse(url) - return all([result.scheme, result.netloc, result.path]) - except Exception: - return False - - -def is_image(filename: str) -> bool: - """Check if the given file name refers to image. - - :param filename: The filename to check. - :return: True if the file is an image, False otherwise. - """ - return filename.split(".")[-1].lower() in IMG_EXTENSIONS diff --git a/src/super_gradients/training/utils/media/__init__.py b/src/super_gradients/training/utils/media/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/super_gradients/training/utils/media/image.py b/src/super_gradients/training/utils/media/image.py new file mode 100644 index 0000000000..2d32a7e3c5 --- /dev/null +++ b/src/super_gradients/training/utils/media/image.py @@ -0,0 +1,158 @@ +from typing import Union, List, Iterable, Iterator +from typing_extensions import get_args +import PIL + +import os +from PIL import Image +import matplotlib.pyplot as plt + +import numpy as np +import torch +import requests +from urllib.parse import urlparse + + +IMG_EXTENSIONS = ("bmp", "dng", "jpeg", "jpg", "mpo", "png", "tif", "tiff", "webp", "pfm") +SingleImageSource = Union[str, np.ndarray, torch.Tensor, PIL.Image.Image] +ImageSource = Union[SingleImageSource, List[SingleImageSource]] + + +def load_images(images: Union[List[ImageSource], ImageSource]) -> List[np.ndarray]: + """Load a single image or a list of images and return them as a list of numpy arrays. + + Supported types include: + - str: A string representing either an image or an URL. + - numpy.ndarray: A numpy array representing the image + - torch.Tensor: A PyTorch tensor representing the image + - PIL.Image.Image: A PIL Image object + - List: A list of images of any of the above types. + + :param images: Single image or a list of images of supported types. + :return: List of images as numpy arrays. If loaded from string, the image will be returned as RGB. + """ + return [image for image in generate_image_loader(images=images)] + + +def generate_image_loader(images: Union[List[ImageSource], ImageSource]) -> Iterable[np.ndarray]: + """Generator that loads images one at a time. + + Supported types include: + - str: A string representing either an image or an URL. + - numpy.ndarray: A numpy array representing the image + - torch.Tensor: A PyTorch tensor representing the image + - PIL.Image.Image: A PIL Image object + - List: A list of images of any of the above types. + + :param images: Single image or a list of images of supported types. + :return: Generator of images as numpy arrays. If loaded from string, the image will be returned as RGB. + """ + if isinstance(images, str) and os.path.isdir(images): + images_paths = list_images_in_folder(images) + for image_path in images_paths: + yield load_image(image=image_path) + elif isinstance(images, (list, Iterator)): + for image in images: + yield load_image(image=image) + else: + yield load_image(image=images) + + +def list_images_in_folder(directory: str) -> List[str]: + """List all the images in a directory. + :param directory: The path to the directory containing the images. + :return: A list of image file names. + """ + files = os.listdir(directory) + images_paths = [os.path.join(directory, f) for f in files if f.lower().endswith((".jpg", ".jpeg", ".png", ".bmp", ".gif"))] + return images_paths + + +def load_image(image: ImageSource) -> np.ndarray: + """Load a single image and return it as a numpy arrays. + + Supported image types include: + - numpy.ndarray: A numpy array representing the image + - torch.Tensor: A PyTorch tensor representing the image + - PIL.Image.Image: A PIL Image object + - str: A string representing either a local file path or a URL to an image + + :param image: Single image of supported types. + :return: Image as numpy arrays. If loaded from string, the image will be returned as RGB. + """ + if isinstance(image, np.ndarray): + return image + elif isinstance(image, torch.Tensor): + return image.numpy() + elif isinstance(image, PIL.Image.Image): + return load_np_image_from_pil(image) + elif isinstance(image, str): + image = load_pil_image_from_str(image_str=image) + return load_np_image_from_pil(image) + else: + raise ValueError(f"Unsupported image type: {type(image)}") + + +def load_np_image_from_pil(image: PIL.Image.Image) -> np.ndarray: + """Convert a PIL image to numpy array in RGB format.""" + return np.asarray(image.convert("RGB")) + + +def load_pil_image_from_str(image_str: str) -> PIL.Image.Image: + """Load an image based on a string (local file path or URL).""" + + if is_url(image_str): + response = requests.get(image_str, stream=True) + response.raise_for_status() + return PIL.Image.open(response.raw) + else: + return PIL.Image.open(image_str) + + +def save_image(image: np.ndarray, path: str) -> None: + """Save a numpy array as an image. + :param image: Image to save, (H, W, C), RGB. + :param path: Path to save the image to. + """ + Image.fromarray(image).save(path) + + +def is_url(url: str) -> bool: + """Check if the given string is a URL. + :param url: String to check. + """ + try: + result = urlparse(url) + return all([result.scheme, result.netloc, result.path]) + except Exception: + return False + + +def show_image(image: np.ndarray) -> None: + """Show an image using matplotlib. + :param image: Image to show in (H, W, C), RGB. + """ + plt.imshow(image, interpolation="nearest") + plt.axis("off") + plt.show() + + +def check_image_typing(image: ImageSource) -> bool: + """Check if the given object respects typing of image. + :param image: Image to check. + :return: True if the object is an image, False otherwise. + """ + if isinstance(image, get_args(SingleImageSource)): + return True + elif isinstance(image, list): + return all([isinstance(image_item, get_args(SingleImageSource)) for image_item in image]) + else: + return False + + +def is_image(filename: str) -> bool: + """Check if the given file name refers to image. + + :param filename: The filename to check. + :return: True if the file is an image, False otherwise. + """ + return filename.split(".")[-1].lower() in IMG_EXTENSIONS diff --git a/src/super_gradients/training/utils/media/stream.py b/src/super_gradients/training/utils/media/stream.py new file mode 100644 index 0000000000..73d969f85d --- /dev/null +++ b/src/super_gradients/training/utils/media/stream.py @@ -0,0 +1,117 @@ +import cv2 +import numpy as np +import time +from typing import Callable, Optional + + +__all__ = ["WebcamStreaming"] + + +class WebcamStreaming: + """Stream video from a webcam. Press 'q' to quit the streaming. + + :param window_name: Name of the window to display the video stream. + :param frame_processing_fn: Function to apply to each frame before displaying it. + If None, frames are displayed as is. + :param capture: ID of the video capture device to use. + Default is cv2.CAP_ANY (which selects the first available device). + :param fps_update_frequency: Minimum time (in seconds) between updates to the FPS counter. + If None, the counter is updated every frame. + """ + + def __init__( + self, + window_name: str = "", + frame_processing_fn: Optional[Callable[[np.ndarray], np.ndarray]] = None, + capture: int = cv2.CAP_ANY, + fps_update_frequency: Optional[float] = None, + ): + self.window_name = window_name + self.frame_processing_fn = frame_processing_fn + self.cap = cv2.VideoCapture(capture) + if not self.cap.isOpened(): + raise ValueError("Could not open video capture device") + + self._fps_counter = FPSCounter(update_frequency=fps_update_frequency) + + def run(self) -> None: + """Start streaming video from the webcam and displaying it in a window. + + Press 'q' to quit the streaming. + """ + while not self._stop(): + self._display_single_frame() + + def _display_single_frame(self) -> None: + """Read a single frame from the video capture device, apply any specified frame processing, + and display the resulting frame in the window. + + Also updates the FPS counter and displays it in the frame. + """ + _ret, frame = self.cap.read() + + if self.frame_processing_fn: + frame = self.frame_processing_fn(frame) + + _write_fps_to_frame(frame, self.fps) + cv2.imshow(self.window_name, frame) + + def _stop(self) -> bool: + """Stopping condition for the streaming.""" + return cv2.waitKey(1) & 0xFF == ord("q") + + @property + def fps(self) -> float: + return self._fps_counter.fps + + def __del__(self): + """Release the video capture device and close the window.""" + self.cap.release() + cv2.destroyAllWindows() + + +def _write_fps_to_frame(frame: np.ndarray, fps: float) -> None: + """Write the current FPS value on the given frame. + + :param frame: Frame to write the FPS value on. + :param fps: Current FPS value to write. + """ + font = cv2.FONT_HERSHEY_SIMPLEX + font_scale = 0.6 + font_color = (0, 255, 0) + line_type = 2 + cv2.putText(frame, "FPS: {:.2f}".format(fps), (10, 30), font, font_scale, font_color, line_type) + + +class FPSCounter: + """Class for calculating the FPS of a video stream.""" + + def __init__(self, update_frequency: Optional[float] = None): + """Create a new FPSCounter object. + + :param update_frequency: Minimum time (in seconds) between updates to the FPS counter. + If None, the counter is updated every frame. + """ + self._update_frequency = update_frequency + + self._start_time = time.time() + self._frame_count = 0 + self._fps = 0.0 + + def _update_fps(self, elapsed_time, current_time) -> None: + """Compute new value of FPS and reset the counter.""" + self._fps = self._frame_count / elapsed_time + self._start_time = current_time + self._frame_count = 0 + + @property + def fps(self) -> float: + """Current FPS value.""" + + self._frame_count += 1 + current_time, elapsed_time = time.time(), time.time() - self._start_time + + if self._update_frequency is None or elapsed_time > self._update_frequency: + self._update_fps(elapsed_time=elapsed_time, current_time=current_time) + + return self._fps diff --git a/src/super_gradients/training/utils/videos.py b/src/super_gradients/training/utils/media/video.py similarity index 63% rename from src/super_gradients/training/utils/videos.py rename to src/super_gradients/training/utils/media/video.py index d5e58a62f2..9ea78d4ae6 100644 --- a/src/super_gradients/training/utils/videos.py +++ b/src/super_gradients/training/utils/media/video.py @@ -4,7 +4,7 @@ import numpy as np -__all__ = ["load_video", "save_video"] +__all__ = ["load_video", "save_video", "is_video", "show_video_from_disk", "show_video_from_frames"] def load_video(file_path: str, max_frames: Optional[int] = None) -> Tuple[List[np.ndarray], int]: @@ -30,6 +30,7 @@ def _open_video(file_path: str) -> cv2.VideoCapture: :return: Opened video capture object """ cap = cv2.VideoCapture(file_path) + if not cap.isOpened(): raise ValueError(f"Failed to open video file: {file_path}") return cap @@ -97,3 +98,60 @@ def _validate_frames(frames: List[np.ndarray]) -> Tuple[float, float]: raise RuntimeError("Your frames must include 3 channels.") return max_height, max_width + + +def show_video_from_disk(video_path: str, window_name: str = "Prediction"): + """Display a video from disk using OpenCV. + + :param video_path: Path to the video file. + :param window_name: Name of the window to display the video + """ + cap = _open_video(video_path) + fps = cap.get(cv2.CAP_PROP_FPS) + + while cap.isOpened(): + ret, frame = cap.read() + + if ret: + # Display the frame + cv2.imshow(window_name, frame) + + # Wait for the specified number of milliseconds before displaying the next frame + if cv2.waitKey(int(1000 / fps)) & 0xFF == ord("q"): + break + else: + break + + # Release the VideoCapture object and destroy the window + cap.release() + cv2.destroyAllWindows() + cv2.waitKey(1) + + +def show_video_from_frames(frames: List[np.ndarray], fps: float, window_name: str = "Prediction") -> None: + """Display a video from a list of frames using OpenCV. + + :param frames: Frames representing the video, each in (H, W, C), RGB. Note that all the frames are expected to have the same shape. + :param fps: Frames per second + :param window_name: Name of the window to display the video + """ + for frame in frames: + frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR) + cv2.imshow(window_name, frame) + cv2.waitKey(int(1000 / fps)) + cv2.destroyAllWindows() + cv2.waitKey(1) + + +def is_video(file_path: str) -> bool: + """Check if a file is a video file. + :param file_path: Path to the video file. + :return: True if the file is a video file, False otherwise. + """ + try: + cap = cv2.VideoCapture(file_path, apiPreference=cv2.CAP_FFMPEG) + if cap.isOpened(): + cap.release() + return True + except Exception: + return False diff --git a/src/super_gradients/training/utils/utils.py b/src/super_gradients/training/utils/utils.py index 475d78ca2b..ec4eed01f7 100755 --- a/src/super_gradients/training/utils/utils.py +++ b/src/super_gradients/training/utils/utils.py @@ -1,18 +1,19 @@ +import os +import tarfile +import re import math import time from functools import lru_cache from pathlib import Path -from typing import Mapping, Optional, Tuple, Union, List, Dict, Any +from typing import Mapping, Optional, Tuple, Union, List, Dict, Any, Iterable from zipfile import ZipFile -import os from jsonschema import validate -import tarfile +from itertools import islice + from PIL import Image, ExifTags -import re import torch import torch.nn as nn - # These functions changed from torch 1.2 to torch 1.3 import random @@ -526,3 +527,14 @@ def override_default_params_without_nones(params: Dict, default_params: Mapping) if key not in params.keys() or params[key] is None: params[key] = val return params + + +def generate_batch(iterable: Iterable, batch_size: int) -> Iterable: + """Batch data into tuples of length n. The last batch may be shorter.""" + it = iter(iterable) + while True: + batch = tuple(islice(it, batch_size)) + if batch: + yield batch + else: + return