From 1bdbb27240a1b1f839ee31617b8871e381013652 Mon Sep 17 00:00:00 2001 From: Ibai Date: Fri, 8 Apr 2022 11:17:32 +0900 Subject: [PATCH] #1 Added weight conversion to Pytorch --- convert_weights.py | 26 +++++++++++++++++++ doc/img/output.jpg | Bin 0 -> 20998 bytes models/.gitkeep | 0 test_model.py | 62 ++++++++++++++++++++++++++++++++++++++++----- 4 files changed, 82 insertions(+), 6 deletions(-) create mode 100644 convert_weights.py create mode 100644 doc/img/output.jpg create mode 100644 models/.gitkeep diff --git a/convert_weights.py b/convert_weights.py new file mode 100644 index 0000000..c765f39 --- /dev/null +++ b/convert_weights.py @@ -0,0 +1,26 @@ +import copy +import torch +import numpy as np +import megengine as mge + +from nets import Model + +# Read Megengine parameters +pretrained_dict = mge.load("models/crestereo_eth3d.mge") + +model = Model(max_disp=256, mixed_precision=False, test_mode=True) +model.eval() + +state_dict = model.state_dict() +for key, value in pretrained_dict['state_dict'].items(): + + print(f"Converting {key}") + # Fix shape mismatch + if value.shape[0] == 1: + value = np.squeeze(value) + + state_dict[key] = torch.tensor(value) + +output_path = "models/crestereo_eth3d.pth" +torch.save(state_dict, output_path) +print(f"\nModel saved to: {output_path}") \ No newline at end of file diff --git a/doc/img/output.jpg b/doc/img/output.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6fc84479e69bcd359cb07a4de88dea1ec04c08a3 GIT binary patch literal 20998 zcmbTdWmp?+)CL$z(ITY~3KT0YrN!ObphbcOr?{2k795H+xVuZRKyfeb?ox`oyUXVN zzP)z;?2p}ja?Nu+$;>3@%$&K;eI(Cw&ntk}a#FHV02CAe00sF1JpToJ2E0J|Z~QmE z_;0*K{clEl`4aUdIvP6q|7;jonCKW-80hGjuQ0K&{~O2^&MR!3|K9xfCI5Ts3p7+z zG;9oXjQ=_0|I_r`1|YyhaYN}sMWF$_AV5JSKzZ&0P$A_+`ycU;!v60-d4c*84IKk1 z#w+9jHLsE4qoN{(Mng)BJlYGnAMla@?ag}*33NiRAqI^-5vN~tHYTlPMLSSs{Dh9n z$iW{AoA@mWDH%NjBNH#e%XJAlp$S+t-Y+QUoVp4KSPHtX)0lcuNxU#CcrnauWp|PX0tGlPSuYX`-a%y^J zc5Z%Qb!~lPb8CBNcklG<{NnQJ`sViTKfO=@sQ;@La{hnRivX$Di~sHc#(#RDyl_Qs zs01(3-gBV8kpN>D+7r@n`e71DMrT*FW6^S{oB)j+#<7X%xL4^<|5NRMH2Z(2nE(GT z&HgXN{%^e&063^9$eV{s01yK_aI61Y$^*p8AT3B3fadKV-xJ>sv4FE|1(Nc^FA#6u zxnMisUHF=;WoqYPp$TA+7Wl=&V)MZgasiB@adDRa?Ws^siF+6bKRsu|2ucum^<&yv$46=w1fAbp*0$OTTmlCNI zZ^z2*aYTPLw#b1g8H)I)tfx&Dz01DSu+beZ2`gyToh+itH@l)XokK^S z3()>)^Gmu$Fy$!vqvndbP-+pKkVMBFL~Tzh?z`1iR;k7NZK6H6p=;B%3Z(~?b^`>f zsAs3JUskv0lsJM)FtFHj?r|?-eWudpTf&wS3+5ol0c$xeEqY12v5jfd!719(ys<9u z>}DD<`qt$78Q^Oy$fDZFVhN>lG11jE%s-3>g|yS=6G5C=lyfOHb1k|-TG#;$iQg{s zlv-vowQ;&n(eiQ(-2^0GWE$&EZzb}=3vHuelIgt~WmlRLnhOF%oY8$eBYQ3i@X@-M z@Bu0VtCOk^I1IPT9ZRjV#tAh-q9z(uYQNQW)aR==?f3PFGhMItzcl>yccX^Fh9@q} z8(w(ivr?(+A3nXPr46T%Ah!UDw*j2WO8>-bvK~@)kB23+pyj|=C;6~Pr)uU9Rk*d3 zirc@R0c1^%SQ!|BCQMp(q)^xvW01VNHfbUb{3Rqa0-*tuWA!co>gHB_APXPj^FL`Y z8y&*h6JgEqcRMoFTKist$C`k^$JbZDot>YSr_D@)ddyP3B4lwEps#uu+Et35Pu*eX z+E+++%~k@p!~HS)3b=ldbbEyBY3@Ta3!VWL4579q-h&wg&D91~%)d=7u6_)Dh#;-% zRl$0&DE6tKXq##^qrx6~^>I*(hPKRQU_WyL_QbNb`708*K2c)3tTvf&b-k<)zs|(f z))nx#e)3X%222p#nv~Qb*oZdtw@=FV)gsTI0VXVA*xJl}EyEVkLKSM?RK^uSM?TnN z|Fe`Ui515VU7Re;M`Z-&h+{TvOzxnPV*^HCAXtgx1HrLMd8nvFH8~n20NJ)8KwCFW z8Ac16MZ7PdzgrjwM>*6lMSGlP0-GrZft;1GxB;?oUqD+ilc2Jc6jP2bZBG0w26r4l z*_|W@7F612H53*`u0jwEbBwTLWiYv*%|)={5Xx%#k&^Ip7jmw6Ow_M)f8nBev{Jb) zMJ>-Y{noWXHBkaYuigN~^Zs6$#-euHJgbQPyOa*Kk$ddO`+oGLc;yJ=r4xeHQeX44 z;L7@W;kO#iC-aSG086?KdQG;R@^qr&N5P5W4e zb5e3$yKG%&;rd!h64y}JmOO}2_q83!-e_+sFwVv6Yw>`*q|8T#2m@gOwhYImT145K zt@kXhNNd1D?3^jaa{grCnz}--=$N+4WSvh|NmZ#R0gu|^cKC72{Z&+BALXG&{;qzk zYzbG111Cp&PTJs7k(G9-3++%SF9g93ynX%?DptOpT9KyOpYpHKsr-I%~ic$^mF|(r#05C7q4}u)F$zv zCG#onA@b-Cq3t824c=M_e+J~yp39;uao-7o4JNTPpU{7-6>m)LB5e(ctB5xhvYP6; zNTWn0LWzYL6TMIn2B4$SgyE=6=YPY7mW@l632@g~5=E&-+xO>zMj0}->6BHYJyJlr zllxzMncGRo*}K`AjkMJ9C8exJvMFaF6g{kNlMVri#xm{o4Zxio*qi!^dS!G)CV26R zqlPAmA55EBoNl}x6Ga3KNDaWjHpU^Vd-uM^5VNmaN(zrf&N|}q#XAs@T3<4*ciacg zM$$LDEG?RNXhLZ9r~-#N8VQ58R=-~hdM<6u%zfwTQrI^Mx4SV9NuB8@zmEt?Rne0& zOwJMO=u&g;q?<}HXH^hl7r~{kAIe=w$h624V2D%S@)t^wmQXNRbbMrnWO#0E~6<<*dTjbDL5fA|c zQIt%3X;Q&*VU}!Ym`vD+fJ3E1#`>TIF-~)UkDys*u>`b-2TjuncTv4DN)>FY(vXuL zsvcWzY0hx>Pxcv*5&CGY?T z1@f}|Qr$h$~T)Wit`pYEj6ga0-Z&`)-^j1{=vD zqHxl%qi}H4^BsI~?2y(vfs%nHB86rV-=@sY0V3M`>R|n)jJr$;-uo1VpG7yFdil>b zQxca;Q7Jy}x?73HJ-QMKyV#lhLt3_-Er&H`F`NTaC*?2WE_I|g1bbw5q=Se6$Oq01 zfDN=`w$|+F&LfK8&W)*<_e5|F@|++lVVwBdu~Srz0$ zQ#?JAW!bJlI)z7v#?5|NaduFu&--AoLi^bfv;G44=D+Fg#Xly8v2%CprHA(H9XJX)e<=gK=Koq(Q0L1U3x0frw-f_|R?sbvZcLsfYDas&tF&RTD zPfT@HEh&;^xs+TUjXTD3Z3P8zN$3U%^+UXYSTvPYp`m-Kx`0|{pr{=1z%^>g7?|+8yS2g zDVQzjU--3JI8t0hUnpo7S2lhZ{0w+`MrHFD?a6f7>l^A4oUyiNV8!b3gq533^cdzz zYxgM>YxuzT`+e(fEROS4PV4BW*IbQiZu{H?jYg~=n~Gyv6}PVwu}7acJaMnDxLYqm zGNUZ`huJ8Y`-GwmmP4Lie)eta2E4KR51c(Fn$-j8^L@;|05EvKe;L^!opEuWpE_iDzn@}J{!N`fzd1l14Z zp&a=^MZ}^vfthp`(>Ohm;*1IGr@Aa9+_qic{aN2s=1d`XG|k;?4CzxcJEEl&L_?(R z{3Sp{8u@5MU~ydgrBo%uXqc%fkJ*VguEgfw{`min&L#sweoL*s>$M{MAYltrJMyV7u6yYuL^%&9TPm!Q$qyzBdiO` zd{l$`n%(ZrX-~_kxPzNWA0k<~f}%6~%2le8#+b<05ns?1SvtGu6a{BvUmh$77sAbr z8g3gWja>q-@q5xFFkULtSiXCuHNULTKeJi$ZI4t5Js}x~2DpGFT79<u4Pg(miLyp@pv>X|=N3p$NkKvK0}h5k6};B&tR$qG`~RatEj?=RD->wSDUDALgahk+ zk5Qg9e!p&Ql|))6&5^eKQE0$&YTa|hWtl+h8L%l!_3we9ykqXwGhj5u;O>jkfI1Su zzmSmTqY7g`U5fdkNyMgj0lpc+w* z+Eq5-L)XS_y)R%)<>H4Vo#>UGAUsNewmo)hy*sm_y_4IS@4Op@eGjaWq)H2ho4`lS zt)9;dh8to0J(}vpK^%$b1?8CqrIF~bBn7^`c`eb45CJP2N-v}s^>Bx=sUo7_C^=BDjI(O)QUB5RQ?9{0U&n7O zu1&Uy*yF1rrOTYud$a`w<9oK7@6v8_ak?@XiIZGnt=y2)UUG2$Q^OYTGa&QQ;~5~- z`uYAD5EvVYvw{pqGr6AuNJvjmLqfD=F{iy!`5|WR4S;!%okJ#|MX*{X&p#vgMKpvw z#n~cSLQx{ZLalF6nrLsF8r$KMqfAMx65=6tNH&3vviY#YhLQExxY*}}?`E2OKdmx5imUo&t=R;OMjHj}d1#YQNw zU+&Bi2L?H$wV}HaUFub{tjEf0L|bCs{{0GXm8;3JTvwTj!6HiP9cG+J`?jYB){}!P zsuveZyJpM9t2Mnujj@L~Khjz9EvbD;n)@N?6AyxaZWw}Rt*Enbs<)&vukL*&ILL1_ z9d!H2@xl0ak+OY?1x26?KS{Yh7QKlF7E{T8>h#d!gsG`gyA2Sulko6x1mUrml>MBZ zj_``>*~C}phX+KbB&r1uHhdK1sW1Gc)nV zilya)qzRJ`s#-cJNiGh7Zv3}()?@`O|0-H^)xMI7K05KWth#E>*SeHY6iDvmF^Lf? zv&=KVj7vuu4n7FY$BvmN0ITw*d$&S+3@^i`6y9Yo>_||AAQl-Z#`CiIk4ouPrg%(h zhuA$w7q7IdoQYz^$9vyv(E78!_~N#h8}`~A*bPGnT8-~d_2i{FeVJJZ?0PF^@li9g z8Eao>=DgSObqZG$$Wh(nb3+PiCcRoE-x6wFi(x?5K-#To6;0ftUU+fD*37GFEMY@m z0n*DNl)k>4mV{h-^NOhni!df|HI8u&(Uor4w9eqY2hkAXoT@RPsFcyl>ez_h;z)t+ z*Bes0Z^eSKl9i3YDwwp?u(m%_WuGFbHpSf}p4>~w7;+4ww7)LXQblF-)aQo(EIzw9 zGAdzYeFs$1p8T_HoiyeCYrx}Pedm7iw+L&kld*PcSgqLzw%pLV&G#R+3}^4dw#7I^ z-tOz%nMK;dKdzqld7no=l!$kQ#uN((2&+JdsZf;gjxNoVbIE=jJ6=MbupZ5y0a%|7 zB3E%i({cILC(sRPdm7|t6gj0xr@~fhI@M~dgx^o?gyrQKB4@&WFP|3qJw`NZ++Z6L z(lGQp%_{}0{vm;;EaBXd&bRTjg6u=|E>wWN)}@^Fsh7 zxX;O{kL-0sIZr}wq?KX)<-(_QFBG2immDN0l=7{z8Q;=Z3ce365#%fZ9`($6l~=@C z3YCjCsj6YtyILFkk<8z`1Ig+q$;pHOa6{3EGMOv+uP+D+}q-=$P zv>kBH6^aaDvYH?w)6|!T;MlhQGLn+22+zSPM0Gc+0jWxP*J3#NP|G`g} ziKXA0f2~gEd@?6~|HdaN>y)e2k;lvehf$Btwz#YmF{%$%9GKKQ3#%4B4LoSYuJhON zGzE+fiN!0|g-K;g8$yKTmb?pLN(9nTBBQrJJ#;iD{&E{;vNbi+h$5cdYdQf80r(^m z37oBJ>5v!l8__KJR=R?Bbw-={K0!i=48}j(Z8acZW2R-p`@3SsbgceILGl{+CS({y zUSqq+tj^~o7N|YR?J=zI3~*{P#@LE(^ts&6ovfB;1qdhA@jn9+!uy{A`>Gu)R%;^L zc?!R^%xK>p+fW`~u$MM-`M3ry-^}f?sZx5RxgdZ_8G_kfPGo# z;QpN|I(oO6vcUuFPTr$j$iyLA2=ydlg(L`b{TbjaUgY`nlKa09yj?`WnGG1d+d}}W z9E%)?yl+L&O1#4%=$8KtO%bk`n{1+DVOq4%cJ33kDK*Jhwe#W7gf4d`*(znibwf5T z?4zuU&qj@9)Pt?I%71pQ84s#3r@4jIVf+e*quq+NP?|fh{QJ=(S?AKN>@%o-8@&5y z<>6srV@%MIL^0~9AAq|5uPm?I`d?t0TuQXx!Ol!$Iuctz``b_E0U@iivI5Gk zXFgjFR&(5UJVLB3G{(4lhwJZ~*e`)-=?8pPp0%6M0A0R~%&LUQid9*;v_<;d10^l8 zr=-6T*_ez^P<$omY?g0Z2~NP2+H5Y_#iACMf7Y71{Hp^<^0UFqJp9uEb{uPKtg+LW}SpLbr2;>bW}6*LD6* z#uL__e+MINIT?Cunaa;p!#T+ZdDd}yNkfYUHS(dAaW4tKtZ-luum)2&9Uu2Zz!&}C6>MrhcID>d+wW@hs&ev}i+kk5KKvuF z5OP$#pCx+Xz$_*Sznc|0$(i0hJq$kji#c*&KZ&_K3tWD%m<&G-@Seyso7tq>ogyz2 zJ6-X?-p}_j8owgdCzx4HQ%ksReL^*VGEdMBlTs=|uu*UxGiJT0LiEga++oj57{9V< zZQ_AylKjhacmM8Q+}l^9rP{msb$mU0t;Q-SpYkIg%5_4Mb??81-St(doF43Z{f3I# zPZOhDS`1(}o!c;wPOnV5#nlJjQ}jcrV!2ahOTDfX{s}TcYEZtZdmY40i?GJ5e9tZ& zly>hz6%HkzJKB4?aFx-;epLMa_~_NmgNYnFoiza|eB7$y!CHXrQp0xP}! z8%F@$#%?NO-e(t)S8s1KcXfDnSKs%`J&xx0?|6LpB(!7@9bEoi50nVUzvr*u*z8i8aw9?J|Cy7K?gPezUP?4eu{#A^D>zrJ?^}|DZqZ^6G6v)F+9>wOTeC6*}zV7ZLusdt(T?t!k+$JA$rZxtwut z8lAs%_N8Dc0-|pK7H8#LY-UTzSUqp)R+79@YSI-|f4qxqad@#SH*pj!?}8{B18PUQ zf^8=*IHoOQ0dOKpg-qnJVD2igNL!(^XB}Ab@`%FFOr+E(b5c|%3JT&bxL?JMPG5LX zSdEt+ui(IsGWNVA%K4_N{~o{E3&MhA582Mov}jFEdGkcCmE(1nTOMMGGe{&Ej3LRd zyL*Oyh12b7-ppug;w>eyeSE2@n5BZp{^{8>fHtP4LB9TF|8n64551YC#&tqWYbI$V zhBd8oAA((i6u354#1c2lStTm^#v!7~4-iHc=8uOfD>GQHfh>?&t+T{mHCP%mg>3#6 zV^>-&UZ`!N>AP|%Rx9dk*uU`!H;Iw$=UF$he~3&-cpTB1sf`w#V}xzdr@X}}<-~-~ ziey`58YXpeJpRpS{U=(}+UhGlVm;ommK~BmJX_Qv2(xc^WJ2NyD%_gthCZ<~RHz_^ zCcG#fjjKUNx!z8?ZWv_i)BetrgQxC+&|p>PW5M#DG2zMkKdE`f5iO10M37tOp87Ne zZ=PY64nCExHL}@U1m8bz=|wXl_G02o$F{?k=W z7%w+AfDmPcA@~A9^&{;YDQWwO+9FB|ZYM~=rb3Qi7$y87cksH1m;5q!P-NJ_A;YS` z#Rt7KzO1|kH!aTsHg`!EeTO}FQ$!HkUWaiXBh~wKhk7^phh+B|V0cpM@cXum-V%TE zD00lZ#=LiC*mae4F0oqY8E_o)?hZoNvUhb$S&DL^6paQ z%zW3_J1f46UZ}Bd#gLV#_0-pqj~D;$%<)>p9a7qen_ri{$eW zvh_j@r5s+okmU!s7Lk}3)p-)+yh;ryUS#Yi=n{`W?B75#a)%DwNj$kv)u;I{A8=c7 zElP5BOJ1RDwGMM!Up%l%!C0MQG(?Z$nZO0vXgLC6Av1e*8nd5Edis1`;6DxP{&UF? zt>LopUlkwXdZARYejBZukZg0+w6oHSRylt`p0ZwozOU18DlkH6un_*K#@gE;MUaAJ z_5kXs96hpFH+8Oo%r0=psYhR^t&=%TK@@Nvp}fw&g2iRT^37i^xFc+|T)$-bK#MS+ z0rN$63XA9V-0u4Vz}-Q@j9e=1OhXE^cVvMtP02;-XkJ5W_$A{W!*``7chv`?tzz`h z-7O!-6;abrW?(4;pEz~zoZv?53VbG-)wK)tBDcmGzJPBkEP*6Mo4RLERS_l-{WtYd z#(ZJCHf0oH6cv_rUuH6TdnBWpjF-*Vd;|$gSv0b}2cY^g5BNIgW21?v8PloN>KaMy zFJjw#-H!mV7m5^qC70>LD9mFLQp+%CVG4|dx_&vUd=p&r{-rZez&9c&MGf}RuOOr- zl7tqPk)li)*EKz2-t~t(Xw9~^OOA_NM!b)478v2=krV;!#6CPi%xKP&IFpoW*@XQ7 z&qjGb=)VH7W43CN&ue%OjU{+vvfVgl%W& zJ(Qlo<6A37KI@Kcwb1O1u$zzzp77yo_arJzy&p|AW$N_`2JR^3NhumfMH+D_*TxHO z_`ch*?&~tqJ$KaRn>*h(<+1hfT1dlfDZSHj)aEB-JLacN3)>l^KVLn`T-=tr=t|22ehCpAm+{YUPWec;j-E?eMV>m z5_FXxWH^V~m?-*-7)U(tHQ;_u$A@A-ZJne+G_MW(D=F!H*merI$(&wTsN`2T&vgEE zMj~9BEhrN$Cgc4tWp4m>sD2$Elx?~)!lc%jN~NIY=%W9Fp)5uFzbU+)BAM*ysOy)I zNUS3HWUBnB+(CS^>FSEL8QIk6=xYb7YyEiK^s2lw))$yYc~JE!kVNmc{^chZjBPgy ze$^>oe?fnyl9w;oK_EI0cM4XuBPXJ7lUprQfnl_X-hTpSno?iMd}n(zf!2|;;&DG? z9#q|q&2t}_0S>$}cxw3`fzBEm52_j)w6pK*9zOom$AoNH8OGsc60x>WnK?weinX_{ zqt6kNZUx`X(yn@_o-eUK15AAot}ji#%?jYg>~6__d5IQZk@@xXPBo0EAb;-kbWU@W zP_fSB8L;A=yOUGpH5rKaquWN@D#a=AtUPoBSr=5$yb^r+MLSZAId} zFS4sFx^d^2T|VWr5rtO1W+L~K7k`x4&D5!{ zfkb0H8|dPW8Ph-HUD~L(PYO-K8v|rZc7}>o8|R*)T3156iK;`Nuslu>2xrL>w!n)( z;pRiLsUNZwUXCCWpLVhzHpl-xnmF3;3c!@9j_+P%c75C$_0eX1@H<5%{ru=Pd|RaV zXiebbj_|5Ja$UD`*7)dI^P%kU=wkPVDhwK){s(Tzo9;|vQ4p2~^YCZ4-m-C(%aoic ztG13l|NC`3Hlkjbs>{(p<*&+DJNM$*WYB3lePKgRc^BLyJ7pOHKs0bn)3$- zA8L$kT>*ns3koRq)p9W9+h@Q}gN~E=k=E9@+gZvX@%0k`en<1-L}h-Eb!qi8fNO5` zfUrEd7-5O)?eXdSmMkT`Aydgt(68PbINY#KQdaLPh3l{o*ih3HgJXy2ovd-IXI?rr zUs%sBj^2bQv;Bd)zEz6ZXLZK(fE*Be>!H&H|sdwua?$K#~K=*l%a^7qnjni13#a@^$Ca zqfMTREC#=LOf6ws-u$n2CkAVD574rl_SRa*5M7VlVT~x4yQzT(7+(EB5T&KLh;2Yp zW~+QNt2?@{M9l^A4=T>irR!S#r zzKV$)pA=4ru|u8{cf2Dw_NnC28B$STvDHEcQ3xVJL{9rhRej@p8DW+ zsES5tP25&3gWHJd}VZMJ<@SNGc+KeA#Doq1_a#B;uwEUi>NvL!_;N)VqDH? z!bVE$_@7%{;<0YBB10KNx~!UO^@4tih0FGwAc=N$u7dVSsCVO@&u6NWFR4b$Ctu5h zB0X4}lAI~v{2k#^8%)P@*etyd1hi_Jtt&~bI7Vl4hjmkaLalp@&LE!{QCg|shcCig z$4^G5B4WE2qqKx9N6pm_NigKAqufkuU!JmB70_^sTR>IBOBVq<6(HD$DKx zNqo>EVLYK}om>=diI*965`*-N1%1L5BwUb%pNm3Dh^>>SpcOuGNXK&3rzwuQ~$)-$lwhv0LiQyPAA zy;$IPbv>0iJ)KIFb3DktZZ%^+m}{&Y52`@h^I$*{*_CL8&P6SjgkEKB+#5~upd>(h z{8H>@hiak{vFhE`Zj`v&1f6=Fna#cqE_D|(=y7g)d`xi5N>~? zMjS;)5Hj|SsRWaM6!B$qXjCzfN0Awi{C^U)Ntw`073VKVUx)pItG%GNfIo)GMzb4k@8NqiBva^i$fEaqVmpI`f6-=*cacFx`Wpob6s3cLS@6Z)tLS4Kz2 zuwtEFyv^F5Ng68>AcwAHD*1huLm?_R%y%`K&aqJ^=|R&5t&?o!)ai4AG(pF*O_Xu8 zriKG8fyf?P?0TXsb3bJ#kS6n9{l-{HBtk@$JSAaJ1}KE|=H79|>BAxrF}YaKI~WWw z!rWyZAg-cFq*BTGxT-qzJwB>OaV6!_l&L`=w*Err|~ZMcYC*{bMFrp(zjHB+(R2-k19Nx zLmB>6tV)`x-}NCbJjr_Ob7!Z-R|(QeC*Di44_;o&4ck=5snG3RE+@EL%ux%L4S{ujVCnY7;>8Yy>q zOteUNBEi|5&NzZqS#R@?OUso)%2I>tT%#bl<}yzd9Y`Is^v_~-2Fma z&iIxXiKj>i;&QHSpe~-_?JS*-!AL!yFMGShEu_gUQ#wF*{D)J6n)j73vsg!Gln*NG zR4CNEF8Od%r7TR{??4*;&o*t3;Eld?vk&bGe*o%%z4y4yr(qwNyqWPjT(ZoeH= zZP=5#T@Sv`L{#@hxoy(zwX6%vJDJvP|0ng9lk-mdy_B;hc>ssD(dS;s6T$8IjfO#t zY@6y0B=1J-3mHQ=MN~*Y{l5Ly4u0Rmu-0Ff(3%)cOoY5(m*`u zkG(^$UeoV9-#^^4unI9=2NHp2^S}QKlh;=8Yi+{p+|W08V9nEPTR$sK0fki6s2QHu zed_g*o0(u!_;)59fimcY=FVTdTlX>Kiam~vsIkgJrkdD=nNon3?XrX$51pwzp>T22 z#p}zPpWh>Vx(Li3AKS_)PT5lDtYbr&@JBrdf*7FbYRCn5~#gHUVsmTs&qfNC) zL2Ac6X{tf0bT54ckvCqD4Nr4|@$Fzf^V_sxqG!M-%T92OwAJ0K-1RBV0k77(6%k7f z&ShujlP?;kFO3=U_td`K#(wH(w$~u=m{P`>dSsz**lD*wcJ_E#fUdUkz8nb7*rd{7 z*WXRSlJ;lfRmoA5)KT|UtVu$O7ANE0xWHIslp~XaC-VEI-|zULW2{+1FLUCGQ29%5 z!#{jExmFrT-IRS?o+-#lA1e*v6}wj2l#!s202;wu-!kjNDr76f8pT*XlIIZ-WZ=q; z1zan#@T$OZSmJ(8hs@hw6q+asl+c+NahdA*$OZdUH*jH|Ktkal~G z&){9E0NqO4UCj&_A0=&9plghMyhZo9U??Y~%YY-?=JocCtfzN2P0ya9FSIrbzx}Rv zp5XH?TSkmpO|!LDi@y5sZT&|mQRa0AtIt8rTGxi-LQ6)69`a$=8@0g(-%3rdakM7c zVTi_=;>Z5|T%DZxMv<>`u*CnVmGC_EItLsAED9gsTGZSb1ixffOZ1rnio;{^o$eY7wctteB1%oJL^1QY7iiI1|lx?$z?`VEW`?&jydTAJTkhKet_YaSCr^0 z)$Pk}q|Hw2WxhX{M@CPdt}@E1h8keYcuU*ApIQT5cLat_Z{%gk6r*7Kzvyo_M!#Pn z)OJ&Do4tH&kW3=`Qp<(Z@MKqHsWcixRWVPgNnYP$@j^1Gmu_-T&>oemTf<<13^;`1 z(9XwnP5um!I}f>^EpGfpRDwtHZ8mX_IL31JT#MI{DA2*f7dqP%H*yjuYCdAleaNqN z`{II1ZvTnk=IcIm_NryVCs&L8hxBsnjr8j5*=3o$Qqa0eGpu9g&Dqc@EqE~&c5Q%l zNJ3i zd$*pfH>>8A)vW#<<}%aPeE01c@ZF)c5V(4If#wz&#yxuAL%6iN=cjJYMi$}sZVP-% zpl^=7CiV+-%X2F>c6pN%e6s(E`x(GmT-G|iF)t#pK6sCml2KWkHlhpi>J+bY zADONt2HkMYE`6;u7N$$FiQ+DfTS(yp^@;CfY3nLoYv}d$tNTF1Yr@$*pTwEwq26~m zc%)Mv2Z=5o$@=JS50VA7|Nit1+ytx$;lFb8?pf>m5p6KokoW}UAjP0)B-@Dhz`h&} zxpSXtrgDS%R?E>F*uWVthTS>KmM+_4jNq{LIzE?FWDRZVlB<+nn3sdaYTVMB%-bLN ze~YXay#Uo1Uhi}fD|L`WAaJkFaZqkug}S+p0og#DhwL|te*62uns=D?H2^Q}+ns8M z-$X)g(rjEvmI!~rfoM(v6TY0%hb!)*UmG-Y7IRDS44r#Sb6%jgk{h%OOL0lGg++2a z?#Q&uR>O@{!Uoln*5W564SRjaYEqReT2iE_ z(}2KtXPyZC#M<&r1}C$N+kF4RXF%*}B{I=)5wMEiZGM8$naX7E=vyd-H@|o&OStK>bH9VaMru;rhP8SRCUZ_h<+LS?h2s4?C!N zWlNx|v!vUcUuU#{THYOVg`)|@LeJZ~Mk z)GU4)NJy8KL3wMvNE#tv+ znEN3&q2JgpP5wx9ojxod(Snj?r@#S+B=UB8v|;_GB6 z4i;^%|32$lU8E_ys4E=xr+mFkdsBP$@h!)Ez~VE2&_`*c;fJ zHpUE?bG@7HJSzvD31kRr9+(uj)auJ;UkaFE^W%_PvR!-ImS4_=H&W%h!+V7Y%w0_p z-6*0C)vD|(rgo51>db)__6we2PsNj)Q~aM>eu|VBTG17g6h4yHo{6u2&;O*m`Z2m? zoNl=JYYy{4SkANkiC@EmqP1ZHc454E=s8ZZ8p_N!>tbjI>&fl)!*|B zAX+u6V;?&Cy{Q=hj-$=D+}BtWQB>x~arHJT;`YuxEie4}7iQi&1s`N+B6Y2O(zz`b z)!09Xtf8bI7@!Wm(*LdUx~X zrbHXxA#*38OQikjI>%dVkmsPHP`!>%gt)CBZW>|p^grBQZ_2{#7eu8*=`!G7m>DgdRsyCWG9cxuYEexJU>gP#Id-z zAlndE!@Sd(C1d4~9I=D)0W!tw*%)dp8CXR0O{Ex$ZTER`iqG*&DKE?|3~H7}E1Hz= z5Yj;?zj;5Ep?PF6C!)ZbMSJ$Rb2f^QMRvCE;;Tw?zF-TUQUM~-Fw7fS4~oe7Irh5J zm8e(udOv(?N(C8?zpe!DfQRM^0r5uDj8VK6C=%L z>k^k4%Rg}Z2Sw}cOnJ>4e%PG!O%<{~%(M)rW4!$+z`B7!X|g5xIq8F0_zP~+3hCw1MG zc&&47+Y}XWSigQz44e#t9~4Sb#0Wn)+m;$zsU0)kW{jR3;WMt*q%{0}f^GBfCK&5W z!*$>3+>}9LV$ex1(OZn$2PPgk>ca8ajH#(oA#n`Gi9<-{ytVmDa4z&2z_&M=GeYru zPTnbUm+*pX^$ujY;zffN>IavEt{0<%jBYTL&zo^`*=j$!N97XTyi3G<4qlm1CptE<>l&J56)l zf7tiqcx|VMx!(<44*ibvo4)S}HHiPfdbs&B+$&Tq*7DZmb~aMK72zEay%w)482VJ| z`O!7dsl<`~k&^;n>8fN$u@NQ1f%~#m+89>F7@7*HSQLd>&pI_OQPV_BP)xaD=IQlbGr{AYDlU5$L9~R>Q zdIoe76SfHEVqoylyTc1=vGGy4RRq@jTCh_JmrZHz%^G&`q`dZX|B%*3`Al*>l%z$= zkd!N-op8HrP9M{vc18I)#26nlh|xX+W=nf?HMW1z;QpvwkN4TuoW9U>*N+jkCVZ!1 zf=da4;&<3$vc*@Ne$4(Md@IEkfCm=JEP67~-fkvX4LYSP%Q1ZhNC#{st(WIK@$B`5 zlD(AhMF#*^x9gu|y!7!Qt#I4S%{>n-JYBfzKA|>Si^oH&n8X0GC!io}&vN?oZ1EnY z%&psA3|K1WV_ih^xXICQ=OC6`wxBp2aEjff?`FRNh5TO9bWI) znK`wTVO!U>y1>&}9J__7kCg~A9#sAP#vls~R6xVx;9W)R+!{6}N$9D{281b2wSy@i z6CVU5?{oR$^ew|bA4!Scy_<+IoD1<6gt6#_@5-oM6FH)V?9d96xr;+pnc?=_L7eN+ z;QIDqMJXv38cq&vMh8p^4{!DGwOu*OK@u@@-^s|*mFe0$;(EjVv_E3nrzNihoZsy@-EjPIPv9Ocd5v*i zZhQkTWC&hiMr4t2{j3YaYr8};D2cKU%h$2FpKtRYy-iQ{u82-a;8(`Bvlr4~qg;z$ z&j;qsjfT8r1q#Mx6j4O|TM&_nHg%5ko_Kr9cnG%z(Y}?Z@2mqyzHd3v1W-nBp^(mo z!3U1OVEXq--e0FTf5>=d9-B3%)ruVgp8?%Z=F?{9D($O29j$a;ohLJ5H+4{a+nd%%JePyK&7qa;JNw5N3`>AmOKv?57GZe z00$8G?|~$pIH)B&V;!o@ovIlV-oHVn(etuQrG0LM$wj zIn6elgN)QYjR#Rh6#y~LPAM^-C_PPG(JT$s&z!^LjOXfU&T*v&C(x)t&PpiN(5ybi zXg80Yxo_~T6#KOrE&u|h91K^?*Qn}EwtWp4DsWL<0*WZC4ML+l98{GXbw66D?o5o2 z5?L(G4dLq(5&8cB`l^a_t=&cuJ+sDpuOC{&uWJiY%8xH&$;8u8t98^V>T)0@@r!0=>d^VNk|(0) z^5(H2v3se~+TBTc7%C|4Nv?|bYDDba0+MR?!;cNN@9pc@uz42Be^&m3@vl|lqlUvu zZ{_CCBkGdHVxtA~@<&PGO#%-O=~39ng5P>q{_}UON@PP6`uM8VCsw1Jo~-*iG~-GN z5mrcgbfu=JLr$z7=EG#|Rkb@&d#6um!~JATznH5odsBMV!ML>1GfGiuo>0ij#R{B* zf+#9L&MQ~N7C&Uyu44lMpL+g0)ekHlIj_5?SK3ojT~*J8sY%nQ;QBieAm`~$r}+n{ zAEh2a{`EG~BFtp~;O3gyIc=18rF1nGGK!Q!o%2iOr}t@dBKcVws3RtVhqXqw3|W-(GH-W2+WIj6aNk?dD}D^8H9dl-pU45Y?5BcU91rMuH?H2|x9 zX&k{$R7!!ceMV|}Dt)Yz+%c4tA2X^;eW!fVER#1 zt53Tn(x?2Z?kY#7*+B={t?i?ZKkgy`KOt0R@UMp)5c&<72d-_G{3}_PX{g*_=hn21 zYLRzRe|Zz5N=sO;xb+VJtSR8_ItZ8|!)&oCh2RDGK>URj#%MRQ!>24sE&yY}qQ5)F zWECo6>P=61H@9|umK!sKFz}0x$t}&+UES&_J5$^R8=UOew zkD4~*`ycWvepSU)x`8fWdv_c%kzS4#x3R4m_BgRLy{#t}aQh7^q0b_$%Wh+k#N!1{ z2qK&14{yr8x7sFrzavbFp1lPxl0B(*5ztWNnC!%$^q_(|iU`QXAq9%QW0>Y!GQ|fCkL$M{z%!8*1Tam8SuQwlCner`>>ENkZb1~>L)cR_4CY@e1w>?F$ zQAHGn6&rOwT9Tt~r|VT6$&krxT?r`Gc zc;B&7fN*m~73dy#q?6W~#{kmPT=9x)a2r^6N*3lt?Y!3E;AXL}(T(E;T#|SLy>{VU zq|Q8Axs zu-#*qLZ|RQ{d&Lyuoc;O-q25@nLy?z3^?u3{{TAV00X6cR$EirVG`}3^0}2ROj~{R z5FqbPz#Rn?S8>FUQAHFKq7+d@1z80YQ9&&lo*z-=H~aqp(zVm>ip$Uk`Y}K4pXpkQ z&{vU)f4yg|g;u7Ar%%SDPL#wSEl8a!jqY~GamYSueK9)z6#C8XSWpfQaYYrI+|d^8 z%DUi=l=Bi1jid6akvUV4c@=sxvPKwpu3DFixx6hTLiTY#QIDlnp3&hs>OE^j$LMLU znHyMfP8FpV5~P|l*D5d#6=kiE9DhnHZ)l#TN(~)j9Gv2q=ZsURBO?{^D?{kzxdfv% z1CI4!#~G-damTH7!RTitbDY=gyt~sd97r?x)e{f5>smE>asL9FAInQcsR8R=V3Tiz*$VqnBatwt(DEFy$7a>QjT81#H6bw_9 zM+iF;8hrCj^d^OS)tJ{Gg+&r#r%{1kZAN+#RzlH56_K*odVShQJY&|CMi!dqC+SkR z0Vtx1p*@QFox0sw%WVA~GQXX9{s`cXd)J~%&TEF(ZOyK)aS{Ijo`r|d^Zjex$|vzd z=6HF$G>ra5N+_bev&Tz7qKZ`jo@f}9Q_6xmQz<8K3MitOJx#3%F=VakN&Ra}rBKl@ zEE6980L<0;@oT%)XRn7=ryoJ<_eDsbbX05iMM$4?S2Nt}j^mTB;ZLR~U&5bRy~+wG zqO*IJwiQ10U(?$$mCr*|Q>|Rne~PfH@S9T7MUskpQyn`Rl97NTn&mp0Au2)XMLvqI zVl0k=iYTw0J*g3qk&20zBBpVJpIVK_Ij!llITfaiI+Q&aVzFemDCGzl2L`vDIL2!> z_97=F4!qZ;gs9@$IB`_(W>GNuQW$-z(L>#73J&XC>Y>NTRq`@=ewAh@!hoPq6-PL! zB3^Q8XExB|3o>Yz6#7K_w6)1S&ZMk|uiX^14uXon)oc_|MF15aT9Tuxi82xX?N*ns z<5nN1<4{ZeYo-PjH!|n8;;^eLvs!VnEMuihOhNNg>yl3F=|M#lRGJSz zD)CIECm?2$l2!nsiYb#KIS*RqJY`_sa_TX!1Z;eMhPr7w8mFjRrOXcusg+d6p&8hGfAk}zMpi^HzTSysH^@EP<06y_JsccF<(hm zuPp~S_C9)zJJwK_aa+Onqwd{Aez_mgh46*=IX4jgXZ$OnqP&0Y3{P{``i30m+rn4G zW9<=sXZ$Ir!TN`5n13_=712>iW*CLr?jO`J=Qw;JsdkSZNnFmg@`1gsyXff5NN_SwO)f^Q$yhJgd%5?A|mX6=YW` zQ{_FW>(Eg-8@~z{p!!uObO~9GPrXm3C*BnLiEdC)MHLb*I|`=;u4$*{aqKFUU9eIR zzIxUbz5`lM-YwHy;A7U8a04{Qe)Y(8x1fc9IHIF0Gs&W_l*^duijmfmm6vaNO8LXx zdkD*sQNP`(Y9{Dv;PoMqI_H|FbOX!u_N$VdFIue8Zaa^9?xgu;bDFNI#d8q$q%isq z)~p!4sirb3rBylonjkRt#Q`?d+Zv6n=~SvAdoiP+rK1PZjzvRhm9Zrh4n}CKjRJ}& zpaP?*Dmti>Asl?Q1l{U)`=+6kXMyQmF)^81WZh91c<5@;Q`}M&9oD)O?2dN=sfUiA zr8L9s`qjOQNMi@RQm9WMQ_3oHijqFxT9m`>N#zi8ihSvbM#Gb@;ZLTZIq6QUp5}{i zqKYXN6j4P06j4P4OL8{G4Og61hU61f=B?qOoc1y`y)W(7#Gv`pC4a)Ictt|oObO>_ z^{vv1YMfRpWvTh`aFYTE$3xb=NMbKSRNu(+YEZR!)L$~~6j59UXi-HJ08vF008vF0 z*5Z2*&G-KR3RU}}l5f94bgh=gUubaZDoT!|2O~73P*Ft{oQjAJPAdJf>_EQNQrB> zmDbem4m(jr74gT^F$n{$Ln9nvMNCv0VT;&Ska1g?w94#^$0s!3EcP{M!|nRgd06ag zWmOZ&a<0SbDA?YWXv9xr`BO|o+M1|| ztynP+{{UE~n0>!mu5oe@`Dd}D+TN8hi2KqQ&#gXjaxxMK>L{spH>Dw8QB}+?Rz`Yp zQPkyB_M|b6#;HvrTw5U{BLW9@K^(YSC38#I9lXq%nIMoWy?!jgvm&CNVm|bqQ5{d|PUu5v7~o`6wi-6D?M*aGOog+K zDmIHJBz~1-sO~8WEoi4=Tw5ynUc#EtgTY$1V+Xws!Kx4&QE%+Jma7>8&1c) zSDI5@6zHp%RIQ-rxBMpmw2?{hBDR&MxkK$b~&A3N;i{ zy8zhUloesxiYeWNkeEJ{QAISxWG2-;sMsi?s_a%m82#y{FZM+gQ&MP~5@_oNrD68jT%7&P|zcEcP`+l@hTBgVl#C_=uWKl&sv2vj{H>Dv{+)+g} zCQFL2n^g9s*ga^XuI!#vA&7f^RE8gFD5uQGX$WHWG=?%e(M3{|6_A@6kg4v!r4&`E zF*u<%sqIF^qKdv|MUaL(_x&lRFKQ^OQen!3FrJt+(-8C&QB<2D#SJlIwKbHAD5_16 z(AHIDD%}X?sFgXuqKfFI+PQ^9t{V@iqhnD;Y0SvwLaa{TcAhNeKA)WwRLZ2Iu+$>= z95m~L(68rGE|GA4^Pv1_qOo|2h~5}_Y(t=LV$V3|(P@9-A5Z!EKljJ~0A7kKH;S)) z%KEh)!i@qk*5se~4KMZ*{{YX){{X&dqMz0)cOTX0u7Wm#r15k|{05W$5%m86pQHZ( ze1G-mqNnRs`-j!&_5vn$x{{ZXMa`;(~F