From ac49aa52857da5d8e24e4df2babc1afa4ff3d8d7 Mon Sep 17 00:00:00 2001 From: tejalbarnwal Date: Wed, 28 Dec 2022 11:24:52 +0530 Subject: [PATCH] lib/libtf: Add support for 1D/1D regression models. * Fixes #1751. * Fixes #1739. --- src/lib/libtf/cortex-m0plus/libtf.a | Bin 1089022 -> 1088964 bytes src/lib/libtf/cortex-m4/libtf.a | Bin 1053790 -> 1053712 bytes src/lib/libtf/cortex-m55/libtf.a | Bin 1047622 -> 1047516 bytes src/lib/libtf/cortex-m7/libtf.a | Bin 1031482 -> 1031340 bytes src/lib/libtf/libtf.h | 2 + src/omv/modules/py_tf.c | 57 +++++++++++++++++++++++++++- 6 files changed, 57 insertions(+), 2 deletions(-) diff --git a/src/lib/libtf/cortex-m0plus/libtf.a b/src/lib/libtf/cortex-m0plus/libtf.a index a6cb275b593dd6a1310f91330d5682baedc090d1..8e906b9a106ea23a0f811097feca75a3748880ed 100644 GIT binary patch delta 17749 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 delta 19196 zcmc(H34Bw<_W#_Qtx40|bWK{Iq=DA9P-v5`%2Fy6M3xpsE3%cnLKhHts7P2`5fQlR z^vPaD6j2d`iwZm_iy%@G1s+eI&;FHJFqiGW%Jw!yQxaw9IHZg$^B0>x(6*g3 z8!7*9r1%C>x@Af)q--TNe*o+kVU>SIPJW4$4Tl0t(@RJRq6)1>s@Q8@Nnw%7S8Tq9 z@AaU8NcC?dXpT_6M=~gX*w6M8!G|ssEik+zYAwWz;)J9Y{7TMe09_ z%?s8*2O?+dk@`v)QoCx9M*F@f5$BP{Eq%(6rY#wC2Wk9e9E@#KY;82oPCy#BJU;_z z0?DeSNb{*il<3$V*5&KG`dCW0CgH$e|lHq&;+_wVY;=)>m#UL|REg6jg|d z{t^oDmz?t`gvikMMVVwqA@`C+Whi8kjeG@=)nO=v$mXZomR~Ya$e$Elo(1W~v40es zKe*V8bpK9v-a$GdKV~AGa}(12YcbN@JcV>FGvd%wh?6fyoc2q^=?@_;Vh!Sq^AOjm z8{!h~ATIfbR$}u9xE?nUms^jxe)l78Py*tHoWH5m$U3ag)JW>1f0) zoQ=4bzC_&06^L8+EaEm~BJP7rh}#VPw>*Zp?H0s+0quJRBCdKN;*PwJxEfgG326T@ zjED_!wb1e05X3ct6C%GKLfqY_ke(Ta^ePR~Yfgz0YDW5qD@Y%+6zNUSP9z@sq<(|+ znUj$Iehbp~A1KNoz==FE8tESgY*ZA|kGqESlhz>pv`t7q<0+({{TN6ze9hA!{R=Rd z$dX>7yj9QVMiubOqmpsbO16WtU%$So{bu9Xm24tktV>}mD{ggTEcogwb{MbcK4mQY zUT!F66-)$f)G>-}1NFBR_(p;(7QYcHKa86aWCpy9l}Bwmo?Rr{_Fz;V%jcE{w3)B;n#nZMdP(6WE?(r zLbgRTe>o{zwCzUs7CD|aLKexpI-kRn1z99k3oWHlUi zHOWjXvPF$AyJX$@#_Tx$^-L38B7ZzvgI71p`U$Zuvgep>tGlWhtX(7v#!WR^GoRM2 zkROy7z3q1V1|^<%5>^9CGV!;2>hLEgWF5Dyiy5HdyZ4CY*A9)`c4o*HhX30TEx+{P zaQ@7YP&_|R5rHf66dQ5R2NmtNbr@8|Zd+RLQ3ZcvUnn12t>$m883aAJx+ROcRCJYm9^=~;MhhCU9T`JHReKAp`s9g4#zbMzfC6UrHJUA58> zLZ>aCG_$mL&X}k9Y ziI=b8BJgi(px<`~tN_RIii4f;?+$QCP5d%j; zTTxy$#~05m=l30r)2@!a>J_;`jsoFDwX3c4D2-FHc( zFiiY}V{!b{V_JUHF&(cu5rdO>y^aq%5yxKwr`gB!e79qr_>GQmeyt;#|GOhg%>D>R zKazbpzsF$&Um8#1-#8w_FFCH`2i2%~Q%yKzt0QDNnE$0Fl4LoQ=W0UvWi^Tw$Cdck z`=CKzqjCpdDenexz=dldusXYn|MEL6UiKxV?Ce$ueu%w0|8k9P#c=~JOXJi$f7}GK z=pZ2~NOu@tYLCM&KF4wV+2frxPiK!Qub4^QO@|WUw|*Ca_wIpmEzWCaujr3VE+;bOGV)ZT@urh8-FC93n@*YO zccwE)u}Z7=2V$}bq1M!ajH!hof?zV8JzmFb8kK&SWl_R5K6W^Vn0A88u?0I z0Wch7Uuq?@?k`zY%pQlpu&e$(7yd1oYH-QL4`Lh5|f&R8_%2JpTGyl(*S z>%jXO@NNX&SAh3r;C%^rUjW|cf%iFQ+-z<^iS6v%!}`IM`TC*!vXgyn z)t#P1726LM$&n7B6yzwcT~uP~f*hr_OiGFU-KpeyMlG8%-u`YWxt>)kOBrQ}?G9(HBQAp2>0-P^88$+zF4*TwdrlwA7~n2(GYZ&#<} z*jL#kbCO+?VzFsj%bTaYR z2vX`s7CPDZi_U-gIDFfoim!FLd=O;kok8)ZoE@w!tiDD1o_^?SHm4?juXB_i z{HilJW4n``B16MUat7$PFU)(?VM;2X+Y)v{^27E@*p`E#X!Gf|90hi=RMP^>-Z zw(Ls_Ros@OOw*)o3F%4hB5liTyG@lGFYU{8sL+mNU($`(9V*o5*_O#rprM{^84m@j z@!6INM{ugRAyF+d>318^vi^5rlU|21y#{642xWQ&%Jedn=_M%B3s9!#p-j&?)izT- z)M+j3O>z#&rc55VvZMlPRfqUIWPiGrl;^=BQkYX|VZu?AGKrSu!*({Mm=@&_yDViS zEy+SC$;YLVEP|3OluGhRD9MMVk{k^s+0RpwwxE>Wt!gsczRIU0(^{2ea)6R_7t%I| zyNdqhQ$-&;n0RVSHMGgW#{WXvr83@VgF0@20{n-wvcCeIa?bTBnzc~TC!MQ&kX2C8 z-#T~sAb*95-v5V^{4zjEZV6bDsT=-SlTecH1T4unAWi(|r#8_;qoD|OVH`}O`Bqg4 zN@g6W@!KW_5Y%|6xoWD2>~CTzvb(veR7AdPl2PRI=BjcL`K(D!k&l`y%~ep_#KXoW z1;y4k@AP1+o0Js8&8KZ1kZ)2^@b%_f9_-boAc`$&UIItG+vU6_HAUw%ukt~kZqiV+ zw0W}+I;AO?qT`ySBZyj~n$AIG)E1#co5H^P0c5s6)bap18WQQrN-9;132I#1QdPoG zCIwPVq9G+9%3RQy`-3^ASNP`A;qM*iNr+2x=1m(-n5hO7r{6wD3_W}doY6( zliDT{6R}^26q8d;VoXGom11(VNsNhz-gJpE+1n(>L_{yU#F%Vv+SSQMn2NcsbGd^; zV#1hTYcnR{5EB`V$qAP@c3M-_R1rDq66<7qQ&p*mRJ+7F8PQZ#E+SvJ#5yT#swDhH z@KcvqDE*sudaw;Hu~2%_n27yWy2LuM(wKqNm5Ki^d*;AC$UmYMD#f+CgC(D zHuv-uQc!{*C?qE0nkTl3iOk%;&6q4}t}2n!m=sAd+2yL5Dk4Lrm~3-Zm5NBd6q8Lh zS5>(P^^}6L-bD&U#H>(Fq!6K!YJmV7UL>#S=Vp8T3 z>%=C)EqBF28SfGcMMSUP6$_=vCB{U|+Qqx>I#ENN$jz)26Sj75egT~Pf80Z15F2$e za{SmJR!a?33$ed%U~P0i9)e;az|jUV?0cY8h`ql-oN@=3; z8lGYP(%_B(*(++Z&}Ln{+Ei5%3SLSi?oq&<*u@QWpV%68z?}e3NZggco!EsE_hwoT z1Q{T4|D9F?L3&HvFVk8eNT$TSfmQ-RQY7v_NOeH4PLw-pw7YC#84xg9;(kb~0fKQ7 z_gzv2gaUU(EAFA@Ic;)}1n!C8ogfG5#k{-jl3hTMuj<9T|Ld-}2MG3Ay?82Iyi2IV z{wLtZdJQl;+aOjyLDtj<19GZCto%f{eyiR$=ZWSA+T{JFtE$8dK3)di$g#YkYAUhj z18d}1+)!0YtY?5SaxAhnRFxBR1~5jBxeb-Da$-LPe34^j!%oQ_2W;Wdx#6^Aj{vU7 zF`Btvdx~| z&C~|o+o`}c3S4!dTwemN#EPO^fm|uEILdVnP$gCnr8=Ebjj{oNDAy9om2|jON4OSK zuEcJvBV3=LT#0?5j&LoMxDw=S9pO4a;!2QHbtIv^C9VWHR!692N>roZ`as<|a{nWb z0c00PnGXfbC~|z!P*pM*TnKd}pV#WErV?vQ9m(e}^;McyfZ$Yjc~s$MMG!7$}$;OM0|*u2z_BEA13=-3-LMuUq&%FzHEi8YXN)B{IiJxDpK zfg`bcP>w9+NbGdV@lGA#NbIhZfL9FozsJ)K`@xfrnpeNg7|OtD2gWY=fND zl04e#s!B=YPqieEbLy(fiFK-$&IZpp%eWD4;t)@HXo&^(&_Cx-I-)QNYQD|5$%`d%gs+R z4Mt;!H}jL=&6s^h_EqmYV%t~U=SZLGaryOe?-W;e%F7>{|0H?{)fbE}syDuBX|d=l zV$cN3_5mwUm65R)j2&OlaueSj(f-YR(HV=9Bv+y*nW;Xm5>li$5k1~c|btT89M{sCFqYiNT!B1GFPc(uTP0>gno3wWgYTcgdW0Uqo ztzWy3P1+l|*6r@WgYp= zjRkyut zF>w7J!@qwmGwvdo?hh;g1;G#6-5+A7VMTXM$38Fm!5{hAc0c>JpB;r2Z>T%kMtEX~ z5b?g-&o(IBbBpa|e)a)BJ4V^M|13ZIXlvVs5>%}R*!=7t{Olf(R1&SZ5T-EH9u<0$ zEH3aVKl`+w9i;Z1&xVkt6@bv=e)b$cdySvHSF#hqZybt8zk*E`*aN=8P)BsfufGXO zm$Y{Vfj0}{P%f!u=|fU5OX>i>b_55V5bxK1T(U`~LQyih(8^9ivS87f*q(@tK6V^D zbE0V_<7Q6kHhw(nJd^+6#we8q-W$m1H=FMrRrqJ#B}nFKO95|^)M3+NTEZz){SJVHcUcC%nW>lXG=ylgA0!i`(m zVK{ZGLXGEs2Jbhl8&M=2Wthzjyznqb#+>)Q=D-iskAgfSQV1G&IX#!?;RqFgX5p86 z03o(F94|!oL}&|Xe;lD|NuQAPc}d@rv>viZ`k5u2Dd_={9xdsaplzh%VhOkm4%ndx zeJ(lrM$$h>`jVuTQh%eQlO;_mi})KN=?Rj4R?^EPy$&?{7(K&mNHYSV7}D@0LMEa| z!hs2Uh}agQM z9_(3S48qw1b(h^+?`PY++GK3+r*!1bEL>~Q?TH*Aie31K=jIKI6+ z0+;EScF?w1$6SI3mj(S);gMu@-9cbING=IH({PL-hrqBLFAVLWV7otk;le%qLAdq~ zcYx=&^^81}xF8I?O>x_F1_}c~AGoKU5n%|F4?KOFE~|3FV9eRQjh{2DR#RKP3jLU(#JeW|{nVF#Qn0RS@a135&;CcwD$;>66vCt4LJkX8l zB=>fX)p15)o`t#K#e}jfW|xmYFpa{%o=mL|*6TP78~7meigy^MuCDcG+WYjoqJn@jh-?XqZrKg{&@S$$1A?lB?t7<0uZV0)~rQRwAhvc3I;c_*1S zeHICUcuc7Hk+FEY;IbOEQK&x43<&j3NduOAl{w(sj|4(@gIVJ1Z@A1Te0i7Ys`ZQ& zuBh1eR2~yI<6xt(m19TxU^G@K26lr_tY{#vb!3Zt+}F5t2B9RLebt9$^Js-p2uot$ z(|G0(fVs)LQhxLagV2=4PWR8^(q8N`AMdnMdi7=Z`e1Zr9R{)?UhmZ1Lyxk{ecZt! zqJ_I7*vT5-ck2wo$RK$^OmufkhL!%=sPvVV>GJ}fL6|?0)lP#>S@-Is|2w+`c36Tu zOq#)p3!m2*US5?T7gi-GhKCp}IcWhW5elni`_hdT@o!oEmyjhuQO0WV{Eadtj@d5r zNgUMKKsjFGV0|_<&B`7JYgUjE?zLF(`nymJpKX+l4~gz>O-~QF5FFPHc7N_o*{^z| zH9PQPaoq?g+Pamp4Z(Qc7c#9ooWk-iWFH0@a&iKBwqj;ekWqNOSl0P|V|rksR=nW0 z!XSKmi7k2xZ#H|vNMC|92>&$8m&tIWRpCP^RAm&@!xTSi@##Vz9A26<2&Qz!&JOt8 zXn#CnjABx&8ZZifEm5qNdy>XX3NZ+emMIcm^FSnzLgj5mmBG!HyqIYaib9oFWUZkI zk;+S*JOe4~(i~-Rq6g{|tThV17AupK9;mJ>@W_~=4DH~7LUZ-e!lW0KT?;(WzO(9R zVe3idFKLvde>w#z(C%A%kM0%jm zJQ$c0re@+i5bafDRqt^}7Al3rKmB2KFL$D?IBh80SXPWupXl!y2#bgoUfQ6p^+uKs ze4$328S3dpq0?v8VY=2(&=vI>Kj?r<4ethv+g@74Dy_yG5o+yRl61upc-yc=G^{ zHy9c%L{$b)aG(D$l-?Krx;FTj&OJ0kDElPX=)MP9(*?NuZ%%Z#QgdY@{>iF!-=x3` zeL&#SwcEV?FujAALur-#CzbCL)y!FHpO~&ME5P*nu*IcsAGh4`j8(yOUuARTySQc z$q88(=^jflcxDL)t{ps>02EevcO^Z1)vH5tycL%AC>t$|+Z?jF zmnZP_WKH=c4#orVuW^!bwW3fv%+}re{H9( zz1cgE1|#K1-EjA*Z52=R^-kSBPb^^0cHB5&u8DKVaLO&6Cx2N2G+5=)*%{*hV!`i5 zWzC{bh5|epM#_!Z*_OaJfj=vfAup6bgIjKY%`MtQP+101Fv@o!bI^aso3V(TNuF<$9aOn3ihsz5BbL z5UkV>ZraJ^3Q4K@kuvC*?t2gP>j)F}7IMS&3*Gk(t9a9`jne-b3S%>U8TpMpvWtv$ zanF-US}obz5$@p8!j%^8KDjY1&6430o>qN~LQ|stD<$3%rB{ZJ5&zT&{=C842g=7N ztZw99fw|y+su9r7f)d5!ICTsYB)F{leq_SzwwVhMqR9-d{RIAkrsg)M61LvvI7zBm~c@B;h~1 zbg#*l}M zeH`^pMr(QW51a}n%gFG3I&Rg+D7x19&9VmGrR&MlZO9BRQftV{ zY%@Sc;fZ8Up)h3KtME^5)=Ascpm&p2DMX^Cd1>7+b~l zQ$WX7r@bG?D}~%gq)!`j)BW~FcW#Fq$6x2X50UgyzhEBsP_WSgCquxakS^rylT0$+ zlEvt8MHQzMRt)00z;uw{fJ59=Co=*ZiW$Jtk{Wo^(MoVEaho5Kk3SCjo4&AHg3KmF0giOhPV+nv$8BX`rHll9FP2wOlMUGcD>= z$FAPwdVTj=;uEEuN=i&LONB+P%q;0;YKe$GyHsuHS6Su7dx=tQpBkY3b&S!zetae>Oq7~=Kik%6I70@ zj42l}y*D7He-L5@opv&a6Sq@OKfDTZWkYTErA^hO$SaJkMXLXOuy!}P<~mZ{30~166@@q2?C{q~NJU|L z)qfMLcToI#2~zzt(EbWi{j*^G9SWQ-0&#|O{}QnNs|^26yH+JDwJ9F`k0H&B)V~LE zf{Pr0PvnFU8`ftIo zDx`712piHUV09&2o(tjm_rRN#NF#ay+Zd#w@Lea;blh@6S2of(!0LGLfPEtC(Qkpa zU=#XXu-t&O6gHx6V0C9mbnRB8rO;gU+i)QZY2D%GQKa<%x~w+j2G;J3Sr(+D@We`_ zTX_-b@Ft|&vcwK=)gzq)K8ry*Z_s)a>D=K)HPU$mtG9t_q}SS?Ub6)G z-U)V?k*_0=eY4L2K*9{?ZL zi1>ad5ubt(pK%KDS;dIYjzIi~TZkX2Mf?M65Isi1Kj5+9gYdHO@wh2`Azm&FgOPe+T<@~d=@qjI7tEZ!VCKSwrSs<%CgqmS zD_>Lrc>baacp%j(W^vsL<0iE@d>i{9gTD^HOxU}*ShCE_`I4d2*=RELdv+Ij^gO#3 zCq`w6>%ZonWL^v6j3lv>%c|?T=W8wAkvid5`x~l}cu-O(85hB+$)E2B$6W$vBK2Q$ z0=X@4p`^%{n@=JQ+@`u6L%KL}>wc~`&I;zqvHQ6Vb!}-rEIB%j4XL{;_&yGsv$gol zs3<%(F08IH>OF9pq7JS*JLWkR-Z#cT9*tB7)fq?cWa>%^wwIIaPCg9xZS1XGFtcn? zdf`F~Zaol1KHs1TBwe+92&qlud$EfV$-bKp!4vlP!guWtVV5FoJkbveht&AkK^>{A z7ku&K2ZxaAdcmJ`Jty!aa;*@G%?CNk(qX>UTH<6~9#@|5!CMZ8 z;p~qEu*H*oD+M27o-D*+;~`Gs@J9tb;lLirx+VlVjn*I6lS_LA9@7Ua*80;Sy!oL1 zwG6>P!b*fd^6P9Nn9O@e(2yVKQ~5grN1EOd6iL$Xu~tnsZwDi5KMo{24{3dgZ8kV5 zJQNLv6 zd~8u!1uf$}jlFPn<9+zy#$fVPZ@~wD-q?#|YXuF?YxKvf8^cIfU*P&3?2ls(MCd?! zT5)mV;~BVm|6sgre-H~cR(zC2UcXD|CzIFCGu3)9r^}I35C% ztjFu1GdJ4wcwb8-ey1gxPPHEY3UU0gDZpo;rEtdl1v7E&u^?RC(hI)}QCGM4k-~>T zh%#di`8hD{13Pon2|YdxwJ_QqzzxlzIL8)^ziiIHR&evDrf9Gng6sF|K+zXJ+0+|H zH~C?qX)s_PGOU=__nDulcl47y=R@3C891qF2>$w*5x>_IMEK)Sr(I2nF#VDE#}fhE zW7C!t;>#yu@pHBS{9tom9Ml|!M>hxHA7w#`(Y}}g!8Y^Tw$9w~WY$8~ zoQL*NuB~%x@_}8(cMM}xmyp45?cPD?+P!go!kE?>f6&{wODaCFlSy2g^HU4D^a8SV zPGOB7pcvx^ro8fd-}|+z3$Oirf_Cr^9ru9Y>15qCHp`?cF^+nq6z7;)Vg{_s3$_{G zS)B)?EXl556GHaUuv8@hqc(y_bc>=o_6hbb{MXZex8|}CddIV?dgq}yw)L4D)UoL4 zwWUl-OcEOSQ_IQDZLD$Ep8T$#Zg-XB(fdg-O*I~O(MSi4IRjN!85MIihPfeYz3D+K z*+pwT^<(X!w$X!{zl+)!P*e5LdclKMh>O;~6>Cem9$J<8)}EPlt#sC6IjHG+s4ev1 z>?;?o>k#7f9$GU!XzjAPsMUcQ-$QMZ2el7ev?e~Yw$#6e)+i5JD_pdCfmS?dS-a2K zFb`@oT-4@*T5Jzzi5|3aT(lBEE3k)FEY-3)+bS6)ppMa0Eymu6Z$LeI4MbNNo)yKYTamO%Xz#xa^L<|rmtS;Omiqr9C_7fn{h$@v z!{sO4wIr8~R7*~efYtzO4`=n=)g)&%k~0RDr(j!K8lkxQhqTlR>UQSqYCpKxF%Am4 zF8~&2-)Ep|y0$#-Qg&4RMFH_wIrYiTt<%qTZrCjx+yor%l19&6TCL5A=+C6D0!CA( zsl2f>_vN*nBNrU*oU*$S#3iFIQiHEOO%1kFgApHsv_UaAW;b5*Lxi=vV##@`6emUD zNr{6f-f)S6lY=-hm=vC=lt-S(Ff5%MRolB>|Qw1KDY$bZNwTaqttw878E4+2pAU9h) zwPp2EpA@M+W4szWSJyqT>30b1+Bw=F5gu)6=mOeQhnp_C&-QcQ)6%q6dM&D31ikJM z!AL2a`bux5F;H8y6pqG;zk{(BDV=p*jWxP0ME^V3ssdY6Z1%7o?YR+Dx|s^RgQABtY)1|!*?qfBN=f_Ii*^1=ynzH;r ziMK@I#nsHt_m_B)3NN*0dVajb8=~-*S!<@|_mY^46y~~`N%_GNZ?(cZxc!0r=@PH& zr+rE|pKTwT&&%9qh1*awGJk-?eP7YTi>|~gU_?Jsba39>3pgQ?rJ>JzGR5!ovEWEkr zyb*Z`Z>c3s`<=@}@i{F_9#B>gWv#Z$?3@E7s)6b}gH1Q^AsaJrp6vm}nO*7Nh4)Lg z?DA=^8v1Vgg{8go_Ovl`5=sxX_glKS{n@3rfEUtUHE{BTy(LW2^Ep>e*|nIw>i6tV z3D&C1?9#>(Rf4}wmoVDKB*2#heXO<%LlsA#Ua%<7jTe^9K?&_PRC?xh=B}J5Q*J;f zGdw(;2G9x4s&Zz7+i%;LrPo@%g3!>wLpE>0{n{hA+6(WMpaDB3c(h6o`Czmh+ zU{}t~mcL4lce^^i>CN%x3xAx025hpirDry>msX(hom@EB39kY>FI}LYYqazR7scfO z6DZ+wk)lLx44M2odyBO1)I{Nqj`3G<0&wB*p27#I45F@B`^Q8qf5ia4(b$%TO>l}TzUl32(__v$VZ zEs0zt`<_sRyAAc0hGNLh-Fo+-IB6)A3}37Yck|g-8al<0qQxrebJ=25G@#LSdWz=O z=_6GMP>j8cRgtPe@bEkg2s9JtH5mWpdbEF{lL1dEWX3JmUuTBmxi^M0*?9YnL^c=U zGdH3FM#69`3PSL)Q<|Ovgbn{lw|)ks2YVdw1H3 zf;fkJyTeR3y3mbY?MCl(qmR1Lm)vNh+SQ*Gq4aJHgx0&!SKR3FN^jW%e$$Qaa-$#i zadn7Ltt$=wk*{O@!80v+u^auq8y&3cZg8O+-Q-61cj;wn|7jQ6N*Q0eFese}E03<= zZ0L;u6oGPqc3gCPsvCX8jsC@r?rU&p+Y=n+q^(lMbDa!{e#wollj(S{(;M|itw7TN zIk*L&Xmr_4J`h$49jEdEppoLTa%ci2@^}`4`UjvmwAxMJBU#|OQihd3yWt?*DRV{ST=t)zS=nozFEk+ zIq`RW82nxE2} zh;qD})smJ4@sYdd`U)A@L>^c^{rKnWjk2`*?B}K2Pr{I{GnpbtqcwBv3gR_1uAXU$) zeMrG>^=MMLUL8O>_OTO5(Z}p$Qi;{mac$RlVtZPxA&D4_fDWmzQs;?0!_+X0h3sXS z^S|#amOqj(j)}L@iPk?v4;DBx#vzm}(_<(-5ymJz8P+<*kHE=A@f4UAnO;EgRD`z3 z^frngMd*}Fe?xI0LOk>X)eoY$2>jV;D;h-~rXjS{&OntEPlv@W(|ahMfzWxGZlkyu zp$J%F)L<;dGZ7ju(~~Hkh0q$Aeu3iI2z@BijTDz4bX}sMi+`pMrLewWe`UiEG6SZD z(V&@7oQqj)Ytn`C+m#ZU%%f>OOIiXTJh6^iE}w1Hyynr;)tC(#x@zBlX0hvd6+Y*-$%v;GA@?!5*fb$ z*h&Sr%8d7AY?CqFy=Z15DSiT>F%&OGsDR=n@SZ~P9}${F@lu4QP`nJGB8nlgVv3)H zO@rd65c(V{76tz92Ky8TAT$E$VG7K0v&^A53Noh{ZmTI?fzZnoKMf_M_!)%uPz(k> zqPDNd7?;>7R#u0JA{AkYtDMptP!#)~`qKC4qh1B9FVqFU>!F-=t-i z%3o=Jlcn)5r+kQi6U9*OtrV|B=rqNU&pC=AA9|S3aife+0j2?+p%@Ztr5K_)M=>OJ zQKn%j`$_{Hlrex*YMBR(wvHK1&Yol^iktP!RHk3W%q0~= ze*24Lri=|EMgtQLwgwrPAK844RDNLy_D_Pq#{zINf7n%yB=Ss%np%C9>`URo ziDiWfzEX~1!pQP3*(wqxFh&w}nl+I;cw%jc6tt<}OIJ!58B!@Q{dDFb_A@?->=c-2 zwiwv$OfWeQGP+4HrUmOs@Rc_#tZiieX*PtU8)2wO85(BP z$0>|uv!ubu^wXS#Ra53m+Kf!BZV8Cc{W*z*_)`&{Sp1oOtl3D40PAdKd($V87wK?$ z0I8+JD+5T(U7BFh?hjrLL*5%CFFpYvvnG%foMD5>-2pVZWcy-BA`j8A+CY*$nF}T_ zz}Ub_#~A3w0nn+Jl2qAWc<7>{S6d*7`BEQDz6oG-w8ZqP23^S~Jog1~=uVY&SxAXq zt-YjRhCU2@*o&pNK+3nkPf)S}Q+xdZ9QrTI`e0tVw86yqI2#=B7vR&_07+LwFfj{E zaKK(K{I9(5e+53QEO$FYZvtP6Pqx1V;*)9tG`w*s@tGk|st?m5T`>?xZ-|3_&;S$V zG8@eUeh|#x)?knY!^xyDh>6ymj7DfOPbzbnSal`1C?MN|n7&&1tIaf0)u9d%uLLpg zsGPjo``8fifQd=dDZD+gOodvZ>{_@#v&%(GvNR)sdC!Gcl){?CtVBlZ)O{_M2@z+c zGH<%E5{5FDoh&gXo2lWP4kbfvxlA9Y2q|yzHHqd?OsYna1LL9Mssg6aU5uN^jMVtZ zS(9;Z@u6bb6y~s2(InMl1(P^oCR6X{LN862`28U!#hI80VpE(XslLKY6i+w9-;G=>Wiuu*`!i;V zQ%;1)t{dG%PX5R=x`=?OO)gfX7$3R8eCeE2((#%QDn8i7yy&BtqSHgh>GTQW5Fb|K z=~ybfvin?2CznFxbkcc zX5*c+DMGDpIYlIQPg>Yq_pHtiW3M{1q8W%+?q%O|iiwbXiQbW81}WbHxil;j5oB^-7i(gbN&TsTOwV!Q(UofwU&&FgRJtQgjJZ$k zTt^oB#=wnNH>`HJ$dLSt-)_4aA9Z2^s zRraZLdpKR9W{1fsCl&pO zO|w2w;fY1(G`E!5mrX6Zs_Dx+L}`o@cw+S|U9Pe{W{|2!3?`9Vtjl#KDi*BL)i_B4q)Ci; zMOW|SiO~O9%BE$pJIdOw%N?jVvhVzxKhv#Oc78f(!Q!ZIb$f!GVnwe*05Sj28I{Sf zuWs0AlaxKyuK9*hKT9c}#a@KC!TR1xgUh@bck73_6h%W z;=jjOwqQ@kL#;Q5O_H^_Qq<|lLHjjO!UX_-WF)O?kHRz(N2%EoRZD|46ZU$JfFOod$RZhE;KVO)3Xx-dv&OIEQ1dNA&b{=L5P6R zJ>o|x{FkcGBy*B$(8|e{Y2WMDH3>hdK`6~NCKn-i^9U8wGKDy`$=oe_r;OP8tZ;%0 zO-eGmzMZ&?!_O408W>OUJT7gXV$cmi~aex{TZ*Owp1aC)X# z{;_Zg@=fuQifC>V>a;L!@tlXf9<}cZ7r;oW$Jw(78Y*5MB!n1Dsi~ghw4VastrM>6 zz>vpiVEZZGAqc)Op6MwXI=)4?pbt$-OY!6+-QGsTJeVCQPMj&Ut4(R?o>~bamiCk> z3xo{FJ>BfN{vy22S8Gk_X`Xr(Y)BvGy8g^BXT+pxp&tvDJXVp4!jUXi%oRip*%vQ3 zc90CS)Jfyc3x}cYGtxaJ1xaU55$d(3j7-m|h_(BKze5*UJa#nrmiD5$lfp_^f0i^) zZ6e39&tEvGHd!(~tqiauy^g&dB6O%tnI5~1`nm!i=q}&p=Yx!wIhImB5h?5dkvqCt z#|bJ;XtFuk^Xw4l>`-yPUTC61X&jI;{7a7HWN&LrI!F^A<_GzKP`c|!CC5$x;YbJKx-tAi)RM*XB#ZFE`nKZ*9dxAE z%Ng_e>;9q1DIT{v5Ry*IhUfTezVJydCB<{1_G&yoi*JK$Q@pgHbTkn-ng)uuU*}t> zq?euGwJbiA3~PcZ8}&E-G6<%6++=Cm^t21QpI33D`I~OjcT4D_F{N5OuR8mZE%Gzo z*3i$onO^2t`V_m8HP+}&X-Qt%OX`Cw@xoCEGtJ8?6+2pa3=@;q?dW%%JxJrV0kE-s z^F4nO4({Z%4A1+4{jF;6hkStm<}$tQU5^;xk3h%y@qB1{aw zk9D+64R2+o=28xp`<7n?6nxg(kgbUt| zIQ=4I<&5VL*K0E3;?0OlQX?)E+RR@Om!&}5ppOxka|>~~_ag3rqlg>V7jaXg5%&b> z=AHhdY<>-KZrME?aa8tibjl&{N9D+4PWeJa+}Ceg>BA`(>k#+D^G>-Dhd5uk9gTR! zQKyK|cT4DU#JeQ|^xeS5S7I9wPbJ}&S5k%`o{D8S;`>|I!NVm(w)rhy!$A2QFq|M%s+Y9s@((#QWtu_Af!IwaT6{d3Y| zERz4fO7>(V_lVU8j8q^wl`%*E_r&_YxmX8lS^ukSn>Ql4TUsH-*Pm}MkpDj_JJczH ze@6dT(*HP8xMffjQnV3kdj;T$e^TCUKnhzYVt)-OsGJ#s6xW7(<#shv_=?pR`1Jjv z)ac)dGWR0-Q}Wzcq@?ots6UAH56bmFA|;h0$N#;wEI`Wk@@qI!b|9+$eNhKu^(v=5 zk5p9V9!08o=}3hyB30dfr@XI5Dz|*`I8t>cr^1n{z1+BpRGo^o<3Y753V9^pais1@ z5`IML0cNMm#EVzIf6SlcVaa+o|19KKkM#8);VacLbA-)KPMo6x>>6^ZYqBXN@&iQ5+-u>snn z_agD+mqO#fqfZ z?MO-hqfFi@10F=uP!UO^o=4KSo=BSVt5XWIk@Q3ylAd0Kq!;!(<)w{Cdi6^rEeEG{ zFmJ6(>cKgc9j_wkQ_wX)08L=ioQ|a94M;i{g`~@&AbNOQKaHf{p#=%x?{$hlF)6v; zqg=n&U zA0LL7>s93R>p~>ibykR@AxPxVS;4T#;%v!14wnYET8wyMx`FJxC4}Gxi-v)uUxgmD zgHLAm*t9S`o!j(Af{G)#C4z>$zg1?$$$jp{BVxmBg^vjja+^l?8ZF0fL`p0=+eD2p zog)*w2mzapbPZGCq<&F&#psYt$49N_@QzVhTzyX$e0)?O-g!?KqUkALZTq^Xd<>5b zMh$*s)Z|Uox$l?YpLYe~sNE`jb5{@Cx=R=NB%1U@(S%uZr%anL%fkAPKR%&o&Wza; zW}4DS$!;l}96u;3$!8@}6dw7hAIVuD1(Na=VmEx`)0fCErBW9>?^7eG-vDaE6iKdv z`IDwhnJ_bhoZKQAiD9O5b}&E7g8#MONX~ANg30*pl9r4aE9$z_<)_Y=S~T_X*-sYC zn#$(7BAHb@ZFbS5(h0M0?Lni`1?J%U5B9+2yTX)DOr0?&9ik>#X<{(BnI>xReY=eK z-Ti^Mc)uR6+HWGyW=SG8?;l8#@0DbD;r{cv*v*+%6I2c;cR5yl{_1LXxB~ViJJJ%XG%k zy(xIkz9=l;*PXmtBZ`ZTD98}I*d4Fg9Z7u#;?aBMYy>Co@xvz@)cD?gF(h4(Bz)qC zKmKrUFc~aJ5!kvn3@?Q2T-lRBK1!EjNNtVS1;4ka3r^e}g}MD*sFOha&2Bw7(vluC zVU6{B`jZtkq86V%kd9*y#z=I_N{WkT(1fC-B)scjZ)`s(#}^M?#fuJg#m%4f#JPte zao{06E;`ghTU7Aq6U7rso+zGHFayUNGAbv{m{I)bq}j!I*P$r9_E6ZS6Nd(Jc+25H z?rFT?a0*_3IGlSDA3oZZ%-Jo4;^d=dyzQtShaL;Z=Z}Wanh3(L9F3(l5rm~48vbFX3zvn_~FJuG{JJbqmjB-dlLNek#L$|1s>E8hz$*0 zAVJ+|YBl&$Lx?-I(YRy})W#l2e1no^He8@FUE`tPMY|vV_^1}I*yoS^?Me8B2FR@r z_iG5iuN?`)BN{|kLW6LT9ZLIqktVdedX{BEamj4T4WHbj!yAtVlOGO>{-hxt*6!Bm zM;+npBcTwKjBGCf_5lrkxMyQ1xJ;lfo%>>(DfYrck95a14O(n%P~s)Wg7CIuT{J!^ zhAj$JI{%U@H5HF<(hI4UR5G(g8OvFSI9doL33+_CN^r1VPa|FQDj(i6ukP z4nyyucDtj>gyQeER}?JB&bD*$1MC%rwb0|^Gwl^cwb=vhLVT*dqPRA@pIsK81ole| zwb>TCJia&d>!F`&SH#CazZv?;cE9*Y=sTdFU{}WLpszR9X2)9Xs`x+v769Gt>Ua(G z^Pq3AYvSe5FE#x=Te(9M!`qPoLW@C{?hcS8mki}%Znp3-zqAN3H(F#dKefnXuC*v) zerWNFxzeJHxzwVHxzM7HX=y<_C?UIJFOV5(uW`&bF327Xbnb%wi_o_Y21b7YumHea zz$p#-e}{g5#;V5g67(|}s~X2b=%+DOHI8cNn;5Ga$IH-9WUOi&HPG+PNYyxMq2Gg% zs&OoWzLAltabPd03>T|PWOpp)C@%-_`Wbj#2VOq{uU6o76?k0+UKfGadEj-f1=oCW zzqRBe$kG^;c(=W>zz{DRA`Y2m=MwwbR}~uKr`!3&4Ew4gL;PcQA<=AKRcwei*=31| z_9n-YWJ7$qU7pwr`t{Jyv?~&g&~Ju*Kf7OISLi#S|A1YY7y^C0$q=7sS0zf&w?Kc2 zU7e`1H(4Ed0H)hDi2@9iLVq;P(zcVurXja~xpf=Ge%dG)WS6pn4Ur|=njFiJTfeJO zX85tC$+6X=+1@BOTma2?9?d6>3d6~kodr%$xbd5olZEd2wT+zNXp8k^ky}yS$QwR` z>A!oX*ERYXc7Y~>bK9(FR2u3*^NdHcx=~~J05ttP8r-NdybYRh9!*W7+VDn8@`tkg zjFD3c)?|-rH1t*v8D}XsUk`oQ_}CceH$y+o?iU*geFyYSc4e#%`uadxSgP1S z=v$!Q+pdn)KtB)qJ?vIZtQ^45}}F+-BK>W3nOa48Fp3e|81C@KRK zl>v$hHePOkqB1~H8K9^PP*eseD#N)JdJPEqRb zR+p8P*HBM+4fiRpkv`>>>r-Cie9CKrPkBxDDX*!{@?zDM?^9iAth(G4v8B=KE-i0i zdmmEwGoNz+P*?Tfbawr8h2WHNQ|- zfZ|Z=l`0OF8U;rc2i;C)t5=#A9D`YIJDwgI*yMHGi+Fyqm4n)^u*?~8=#53L{RII=j#eM@cS~OR0NbLn$IXr141KiB;WX35Au!G^TjFSbh-bm-)%P1uSwlF-L zQHlke$8dI)#tO?DKv8O<8{gN(X$ElOI^gsua1y|=iE%nvRaZz+9OLwLRb3H9F)U3- ztLlm=ieQuuf!`$tih~)YJ%H;OwrUxtPe9Sk6f(wX6JQ6!zgN;cy$@J#qz68=cZ+KPaa3>+V=q&sjQaH8l?B`v)X zz=@*0mDJT>;6%~3N?LjYV2LFLia)BPrI!x4p5e8XwDkG_Zf5wcN?Lk70XrCegHehC ztT$SzgI5@*P*7Nm6fb0)M8J6r&tsevfJ;qu>1P?ItPKKik}*#FNwgyuZnCx|SU0b( zKn4Da88xV~LW=SkwLB<6K-ShtjN2F}K{_~=aT^X5vBW^}y^LEn;ChCKGj4qWH#3~g zxS0Vv81Bos#R1kE>3lPz77f_Ka2%r+4mgitYc%5)1d37<&1|?UU-Ve1{+O@UMBo$% zjsqB{t&lE?RE*O{kS>aNMrj?Si=y8u=$^d;ySKzZ@lO>rT`K_B8v?DMxKu&&ML^Na z4E|X`^Yt=d2gBc1&=PzBu--@=9IK##S^--aK2$+V@JYaV4DYF+C0Go&)D#H4Pb!=x zNKaK@J4#l1`yH;TD~JWhn=5DuUaYJur09bRT7v(qtSh2ub%nE<>xwCQlX3b2_G*cN z;-!q!VZika*D^}`05>!IBBQhou!G@pM(LwU_&%dIQU^~lPHVxy!thMS=`Fx{3>Pp? zZvZYe#X?wOkpak>j|J;P?kDHCur!*Pt039y6VXvV2GV7-yf4`-B&fGrFMF-l>8^B7iBO4imu zP?VaYA!eR&avrPbI~*$kxP`(3*UM?T#sW8ru9VYs-3Qz#I#*89H3FznbfTP=;9yv3 ziGkv;%4rGq2W+ipiX-K;1k*s#%v;-3YI~d+kPD`){V7-w#u$9vij09|9_=9p< zf+2wO7=EXmmY_f2Qd21OR+KwSa2KR2)Hhx5eU81&7FX64j0DH8Fis5>b%hjFGftmY z)D=tGRA2O?Aa0n#ifkX2Eg?UmoQ520&ZqFpHX@fu!G@=jFNRJDD+0^ zAdhjX1#DqBmvMR#a2~_M7^iZ;rKXXo_4#S|JDrxtL$#6WQv<8%UWJ;Q;F(^r6-8CEe)M*uq*<`}0>0qc!) z{>?I)rX7GS3|}jwX|e&%WB5XumFDRKP?Va&pm(awnWsG96xIQ!eHC>Dy}|KUWwi8; zm(>+gWG|zo_f=V45k&{fXzAI@>WV4aT}DgqAoyKkp!nl5T6((x*Hdh5-B?CTZwn}z znZbKywDdLrb}(F5MoaHqzaa%4}cxZ`cdgY&%~Tu5qfX)KkQEu+w@xeTXl78=25{#_eBPKIzQ9WFv0) zF5(Xp9_(~N!bTkaeMEfw6%Kyf*$U@z`FD}l_V)ccwg1NkY2R|6y$Eyd#pfODMc;Fs ztvaQx7ppS*4sO0X)0rDXTQ|zsJ9rt7!X+sa!aG}~bUj}FZN%92)4uw6bStMie2zXV*mD(o=CSAE7OI!C z=Lx2XX8qmlIgmZ0n0{Q#rmd%c=eQ`m<%|iQm(Iis%N}@XQ`p&`IIbJ^Z!y7hU`rxZ z;^LMh?rprHr7QOi{-k9C`7oP{-8BE=432203IRCyazKbboLdeAeyWCe6o4Y39Y#!3 zg|7Ji%gJ&I&yez|LKqp)pbb(`Jewn8PenKzLxh_qgyA1Ahg%Pb)I%8aaK8X{>=TCI zhj1v*2U8dSP&h{s*wgXVKA4V|QYHI1$IE;$9aq9y&X03E75@Fnqo4+RMKV5D5za-D zM{Wq+@Zu{0EL<%y&hqaH+HF*O#-%+^PTc^$!B?F|2EzReaF7e8lJbq}Frf#EBqOH_ zkwP!%e7{j0Da1nOjp;%+aQCl`YT86@Qb%@)XFK4E2AX(uH`!IeN0MKs!$13!#d67H zeW^N`Xw&!rENj(spW(>Xft(#b(wfBQbGW)SD(F1Si$=j{5bw-RDTlYWrW-E+bbkV% zqx5Vmg47{oB46xLbt6mmC}h=- zeH3+{?d(sOGIjEt=@VuYPePbew%&YO5XEb=?OYrX)Kc|yr$^IIA;;o+Kp5L_^T>Q%va=Qjhq_-1E zZk#rV42;o+5c^*>JxIwxg&Ln&|F1xlo+8%}>H89Y28r*+Cg<|;e6>C#n?J!q6&efK=12>5lW_Q z34KjLI}@Rwflw5za~&3>Z4gb#EU-i9FN_)ZMrwGmmC<%KLeJB74nm7)I~Spqw0#mG zRy^QfJH@5sRXNv}2??dNKJ!e&v!4zQ>zppBzp&!-A^*bweYil0Sj4Q-!7Xe(_?NwtFOM&rE1HTff4KYB{HRbQ^WK+xqS{>T7Q6 z``V}*-PUlXeSF{L@A3^qeALG6u1NmcMqLZmavI>@NaN>2ia4vKezqgZmPQs_bq65uKr&nJyv@?FR=LE^f}n_$CAozu_L;anJoLkGhUS2y_xNH-?N zufV${fD2HZ1bjdwqXM{SRXv!lglLnRJqw0u(t3cn zr%!WD2P*9IOji>16(1Th2lUiEH0)CYZe?W5mzv<<4o4`DkPkW^YJ?#gW?O%BR^P** zgPV+nN7u@SP+2~q4_`App~@g;>H?C)K8w4OY8@9E!b&5Cxf}Uf=6c?ujfXn zJdi}?a$&YZM($y`M`!EPi#y;m<5nDJ_d>F69;dfm?ZYX3X532Qc6uQJsJ9)@ivzjEGS5O}`6MaKwqg($<72n{0kAur!=)-bb~XsI)N5h`lZoC@vb-Cww?&QP z4k*1du1?{a{5_CtPf+V@r=H;Uc{ayv10L&>y(X|PI@`0Gxmt}^_uPJnrO$3|m^Wq{ z=tg)UVI~(p;|BTYt_}lQqmOWv-k1ra|6>zZ>SNa@S*y1#_?r7Jz_X+c?7s6cp{@wH z>Tg^912@FS9}Cz22KTi$m$s|7xYd4MSIZUrFb_1_uKM${Jv(HkiPzgILis6Pr?#tI z`PH6Gn{BYM*L`L%svBeZ08e~oLbLTswG?O5Ci1sDp3Kf7iA&+n_}H=)`&jrvK6Z>o zZGZlnhlbf%J#|C*dLO$!*>b(@>5+V{+RZQ3w(hF%cz9TnIW2|#Z!_1!lE)7By&c`MybxyC_lg-lE@jYEXdC@yHTTiA=qDL3-*_XXu`~yrVdw0byD5^ zzEE${o1Om?u6-nCay(qr+m>ewL0WQox!^5AXZb{}5cjczpF&_VRxkfDf&^##4A`I~mU*kedB84?kgt(>QaCe3 zqqBWDM!x%bkE-z@UT0g}EPq?)=In~;udVWHg2xOv>TLPf<@Xvqs>aXYqWmUUaUj;K zqRw{qS41m3DoT9wAjRpfE=?M_>l=t4?yK4yk5S+mh2FN|UBxMXkBV*BdYfXMzOCvR zyP~>_N5#!k>21BwD9&ozsuHg$dWasC5h~YKa$7Mz%B4ypl=cgkBmHcbBbB?&zLt91 z;augIL|>K8*6%sxml17M$*(J)4{57vTCZ$yFOf>vsymM;t92f$z@>1%6}2d5dQTOk zL~r}oO(l1?#|kFuZIS&|iM>54mbm0XXgf}r@8l$Rf5jel%S3dY-<%fKs~^{LoTb5T=nMgwpN1*)!#(8 ziZ;ze4{Dfg;C%IOW8At_@>~^A9s7-X_8{M>dfSyK%^YuJr;dSDc~8v+_pt|W?47i--T)L61ghqY>9Vi{lncR@WPo3M_}y3+KHlDmrB@6 z#O*J|c6^t1Zt8n7Z3Z{&dL@ur z;6F0Tt#jQ#OIQ0}>F$}@I1sLzw-5U#BzRQpQfj^Ff6m~UX@eJw(tR1E(W_Z!ll2ls zPij-i@o7>viJb~Lf2lzHS|DF%h@M(+N)_-UzRz*eZWPbP{% zGQGuO?&z%mHw?WVtH+7I3M8OVl92#yfcp%xxb(LE+JIwzVM&?EmQFlS#uYC~56SeI zX86D5-j62~=PJv0N&?t)5-z!`71CuYmg)t4W@g8foEz2MDkb{sP0428uLj<=m>>TS zrON`?r24)Ly*4aM>RM@;`=ygcW_}HYx9=6{dLT?o_vPW8##~>SD;=P&+r;R#VH=E|e#?F0Ka_e?ipjTdyel%B%wb}#25j1VA@bTdkIn^Yj08669k0bU{Aa&_P#FZB z(&p=4J4Yoqr3Xa4DK)v{ZDK_cdP@2m5KA?895h>O_gU$d>$n)QMDKB7`#dsB+~xj4 z0&fMH(ZoUGw_bZ0nbA*Fx4j(}_Y>!X#Ys^X;#>LN_*rb`6!9GzTSg}vK@XzZB95gS zk($|Y36J@K3%B{@NX2qpn%VbTsCO;cba>I+FUb^oQ(BtuSL1dzAB~ml)W&iLn``}~ zeR5rTCpEy9I-4zB1C#VSczJ7-v=&S{Np4^YA7}Rt9q&!x9zNW*W0n{r*JX54`|K-WKS^4k)LBw}zruTWZ&xt9h7SH+ z%<qMD9*xYHYz^BBmGQAn@&knCQwpP|j@rDX)Qtl9Q?Q7yQ zeqht)4~X7)s2{R2n9Cw1#nO3_HCuWJTkT5Q-@>FQUT-!hcYMy+@-N*G8`WTw+VMGK zHd8K&H>piV=NoT3^|^Q+w$+^3@m<2U{#lb$12j_ZR4IYm#3t~Ql70t2uM~+6x!#;= z>i85v%1p%2qfS8&{gqEZ}Gc&VL!^A%+DVEoNgMTtJ zOWxhyw!N%OedS9^6zf>pRTKZE;*j3kAL~kKYWWZURHIqEwa+s^h&q-LBj`XMVoJ;dIa|`0jAzx^jEwNcu5Ggf#ad zbiC+)jhL9_$jjKu5tFnAF)5!SrfV%?x>qA6TaOse7{uf+M@*lsi0Qu#F~tZmgVGQ) z1nh@jK+I_1lluIcR)H=+Yhw^Y>Gj1jz1f5qN}GntwDp!3G4HKvrG4P&(0Z8~!6=wc zj6}>Si%j2v^8j7RL`;Bw0Q}905MnhINTP@hhz(GrAF-68y=KJPmbX&Mdc+1O4fFx> z9`(+rSxW``QImR=%8i8k>Ax z{2HX8w4~sFNZ#K7Zp%cPe})c1@c%4%{|MmJb)-34|1Tl$ziQw=I4;y*$&9-;3;n;6 z)-o6UA?jF;v=Vs(4TY!0AT6cLbN@Hw{l9V)#*g=3p6S+Fqz%wvD35PtFnNQ8-)~=p z0saT1i>gH`#rcs=C2z10)OI%^-5;U3l}NWN46VyVI!f<;igbHmyZ|+Rfph`#1{&@0 zW*gG|4(ZcU(I27*5z0Z;i$}pi~;fn8o$TitwP2>LN}_B5y-@3A``#9ed=|Czn{XTh-*|7fC6kmzV!IWb`<^UDuBQvFYe7~m0 zn~<5(B8N;bmLT(QQJohI>cY^WG-Rgq`O2^qX&sIJFpY~rk@JU#lDDmb%C9Z{eL7Nx zA}L+`0!7~JgLqvP;!R@^FI-1_^j5^jtwwx8E#e)Oh)=zR_;e@Yv*se+<%8*1QQxJbIbd0J%{8&HYCzc?-0)X@TApY6oi2rkwOslIAPib8(;%hC4e{a1^ zA66j#$fq(L+lKfroQOYt0r3}hApRQI-q?x+ZW|KJHAslwg#{Kef#cyQNSXV6U)8Zq04cNQaMAobp1YET@ znPk2!MB(rDWzdF!wERQRliFQ^4zD|4B}rX{2y)deMAMcPTlR5)=W*4s2)y<{JTBNT zNOH?w9kohT4F(>FCQq#vEaah2glO#C%gKX3wpy?exEV>qYM}#ub+3^)c)?7z-XYvU zF25keQPY50OT5nuJYKdxn!H*hm~hEHH*_U42ybrejQ_e|zZrH}W-Yj$Vh4ZCBA=M#ugXwZ@`%Y|f8*qe_L0t3@Q zA9v;A>%0F#3_rvCA3I_to3{vEN!K%c3?912f@d57hr6}dbI_$Pt(Z1#3XNj)!3+az zj`Fb;<4b4YU3-l&CqQlR4qU_PS6$d*r_{c|Hapj?CY&m4ZrH2yq z71O6ZI&sSQ>G<+Top9QrE_lmF33$yRJ1O;Zv32hrDrE4=qZYjEXlJ@Qtk`^1k8d`Z z$>jyS4mTgRGf&bx?t3I2cLp*XG2`t%BdORT#NsZE7LwUPFykY>2<&gPf0}9VQCman~0kmqsY7iP>+HfC??op!?75= z=UB9~4)F3uJ$}j85lFy}kByX*qc6Zf&%;1a|47=vrTdJEr4jFJ?10bnJ@^aJn93<=w}O_yA0g#dj~> zb<~aveaZNBYoxd7fT*q+c@AE&4)FL@#ZQ#L`d>@{rAgSy&Lq zQ5)5)KJL7RkM=X!%L;#NMCYGJKL2Re@&R&KKCl&640!M7mKMD1?<4hD z-!}J$VaJixL)bnxO}TLQgA;LKT%#j>d2t7y<((zP(94qRL)i2V5R#_cdiP6Ukld&O z*Q8 z^nM%$rih9lL^laBsXKGU!Tg|L*0zIj2VoXU7{(g{`b#??YY?cv1k!|HmbQbj2Vu4> zpy_ZSm^muO+nNy@1bSQo8A3o)RZuJDVOI42-s?`pW8^sij_6z~SWZA`tt=+Ddi1IO+6k6u{sU%y2fbww;4^7Vyu$VtZ!;%uV3NWva&2Rq{og}J3jE){d3uv-hL%l2Sy35FEdq)=FGSl9>OP;U)NkSG*Z z9u_uNf~{6ynh;q3#IUe+5^RzLW4c}{R%SWT96ZbCb@;V&_O78bI!;3NQXJYt9J-fQ zg`1TXXRNRv^b4VMP=kBAa_8?zq)urK5(~n@2A{!WzfFs!SaE@jO%K7kD;I}zIY27J zQw!v>^P!PuhK1!w3Er!~#)ZO~7KQV6?KG`liUNxbg{=w;Tlfvl?MjuLTZhoxO2WeW zOF{0cl5x|Hwy3^M{JTyVkto(mb;<4ceDo9pIX_?}_z$1^Uu;QpVNvSl^?4CH@c)8&qu zrd20##^pLMeZk|3-}-*UyqN=q;*Q0!(o0*X^67)dj5HTH;yJ8Y%4IO0Em}J0y{UI` z8(&h9|vxS#Gl~GLbn)l>ZZ*TQQ zcD5#?zC6lj$Qb1FG8v^llpW6wp_UvZ(i6{LnpJt-=`~v1aKbP@eg?GUH zM&mlk@s?o6H^Mo7_3Y!5Q2J^gJMoK`*z*g}Fh7@2O~*;N(fIFY(N6jzqo+5xD6aq- zP6fEg($95i;@g!h$BXL|KfZ2fuUU6$9p|=m7b|oXq0xbq;BoK=%C=zeHGDPYx zz%5rYbkwp0VdvF&CX(#@O4AXSUyUC;#YC;`i1uD*;U-;n1b-@k{6RA9pQV#~5!loI zH9<1%FEU}vH5eUdT+4?0gV&P5Q}Wl~Y1K6=C^ky!6VlyuJvo++(Ry`}VrXKp^STt_ z*BT1nxxz@<$rZ+qnhX?4HkEN5HJQ+8fewLsZN0MaXV;UXvRf6<(jX`4^e1)!UiQ5W zzE@lKeLq71s8f)DJ|NzKhUD80!=%x9E0WY!#Hv{%m_>vPAh-6%Ao!dl$wLt?`XSHz zw>IWF4Pcau!n?GQ2e*-DwvkC2d3PK6QmE`jF`FtDM zq7C-vMJO*sfzWepDMZ5T2lo zMH47j`U|A~&S*)S{ts#YWazvlIp~5;D+YA!M4?RdbBLUQY&>+pCHHqnSwV6ql!cJ| z_01!Xpwvo~S|*F7W#h-qoKQMt+5|)_CME@!NZ+Pc-Wc)6zF^P5`)}rvuNJezaYCXK zU)*dY%_~?Fe&MG)a`)Y46KQ#hO(fZ;bSCoI!zL?PwuCj}pMRQ$=e-b5K6{#tCds3W zHgaM)+YeW7?24P8H4<~4DS^~hvy*Y;&tu6i9rPyXGUDXF8p*MhY$>UFSgRu&USc04 zqsD3Dv3SW4w+yrfVM{eO7DlBn4~O z3B)%+J6f{9-tp96EGc*uelAEJuEPyw|0a!xSF{w1#SBx!F!|&f%bfXxKObO+Wh@!W zG2P)4D?-Nm5h?)A4nfGR$R$)B0ew^+1>2o+_!+nl<)aarq{tPNKZMXLioBlkhY|W% zkw2xp6d@ff5sIg4(KrU7+ho~`3TR_2LQ`c0s-%1zLTeRy1Lcn(^mj%6g7PvTIDzSa z7RtvXbh{$cgWC8gLemv_7UdHVdR>ugC@)9ob4iBX(?lB+<>w$94?6*lS~{?ea!9jS zkxM9t)jnI1t0E*xO&V+d7IJ{6(GlutuwDdjLt%PD^xp=!#fBearo?+k=i z(MBagt0|ue+YSyU8o+#o|5@R$EBt+h(*um!eXZ~x6mEu^QGJTS2P=G>!keYQ+R{I>48Qw8%X&R@E$?=lL!r^d=|W?Q2r-)_n>?>LZd04gU}etA+a*b=R!i1 z&qHVn%vcim>jUFcZbj%0WP}npmBj+HiHu2b^ip00Q%Cs%m@3LaDJ`x=2)$2b7~n(7 z7ZYa$lgvCthDI>iUO2a6prGs$C?Msj2qjYfG=lG^WI0vgX$sF&xKrUd3eQ(~AB7hv z9KsHXTG|2-HI24A4f}a&0Aa799Kzi|`7;P@rTi&`_EEl=r0JPt8t-)wX}o^QA>Lb* zL%j5CrZPu)I=mh#GAt9xKR}W3S;z}G3j&x*;{@VMqy5hzl&|#DtxNp``kf$4^&d$M zA%P0Ys}O=xOYtwJ9O7R~IZXGPl!LN~a>(a9${`;k1V;N~72ZSxg@8^|4i3*z4$)np z91?3*ue1a^vp@}BV1}1_0V-uT8 z3XDvDGWs=5B1yWb(Ua0z)-8TwWFBIO+02*{e(NXHD4W)fx5X#Isaa-bzGLnpLn4_t zs|yku48$pP7e}f#nPa1<9?r&AJ$W@?en+sHBffz7y}^2N8O(dpQQ$;v9R=J(fgHHT zK!ZM^sU0ne8U^XcGjUl|{Xnp~4SW{#1>jGU(oRN6OJ?R%Q`U4Y-EKh(sMztXW9JUD-?vSq0p10T!-b8fHK3uCS7Gw0p6YSgg=}8YXI$)ZNbt z-PO@#3{}r{%R9wIR#5e}XqtRi!)jH1(#ph*qI-*8{%HBFMwaAS&~}yvJ{kZopaNVw z04_O$b{8O8GdeX7fgQ}K`my4A2O34}Z4U(SkRH8;d*rcbak~Kp@PAhDFuZgn#*(2> zIO}Vmr{e>YE@!M%Q0w+E`V(RFKZBme*JhmCZh#^J?32vcxFB5z&{cM3wgq9U%S<-0q#Ls< zNGD-4GnkP(12R|Kr1t;x{7%;_MVH2m;FCM`(kqeHDO zX7sH?(H|vkV*Q|y@oKMtjvLC9sdg^0;y$J_B9NtvRA=*G@({B%Qq_sOCNci3AaNDr zGpM5MsCF$gR1L^QAYVI)?82v$x2NzHanu_O8`MifBY?PFe19Wj4eFrrk%Gg}(Y=-# ztOn^6tKMN&2HPOzuQ$+Op6lM<_=*;%a)MaaiuY#q0tzW^zBW)B3L zq_gW)6Ax*6ii1@=n0Eq~f75Yxb9}bP*|S|M50TPYIf(PzX7{+^ zzfoGRprNFMPUmyYMsgsLGq)xrbzD#6UNDkN*5FK~o#BY)3OUknM{ozN`nyG3S%fW2 z{vHu_+HseyXKrgKA$irV)5VF~yK#PtJ;&v4*T_wpGmUZLF%LT}o>-fM{lmc&C*IM_ zy{aMXK~}9zE=Aa$&N;}6IR`b1OytxxE~+)pF(2#V-f7VuOZ-cNR>io8RH^9e+;%hh zxMOgKC7p%yE=fC1T@_G|NsL|GoTjZ)ms*Z|5-iTrZg@K2%R_v1W;pNO(bmK%i&XsO zur_!H(_qBxM(x4G0Lb<3C2eMEgmU_lA?bX)c#l=rt#ubk>4__Cx&!e6P!5rH;9QTc z@~(hRNlBQe`$|2Vl*tsH)xBs7*ttch!un`clxJdwsQXr39Bx@Rr(XA^I+RC**mIHs zuzW&OdAhDyC)PDbTT{C4Y_ie3j|Y*GcZ)H2#@TbUX#fmx%EfWl`?Nu67D($QX3 zW6Dw2e2zSI$F`V`sH-EF&Ul=-^MGk={{S|ZNGD1^qj|Gh;bzRxvCp; z%m%fpc?7Cu6OR{~XQ?FvAM}iwJlK3CC_c%@oayFHYFbKs+ZUN5V^trb??tn})ujlB z!ST32Z=M{%obo3Nlu_G(Xa+ z1_^c!SnZwGM()gL#Y&U?%aO=Y4pk?PxfD54-RQX@JZbs_iH^hkevb4r@oK8M?>6$Y zIZ}LpS65oDIOYKVx`y1nD@Z5L+?-wfLG|ID`@#{eO)RVDzt+TO=jXQnP@t2*KOjD| zm>0%~_$J}J7L0O(BMUNu z%G<=@7U6n?%^5NgK{nDJIQ59|X@uS7at6PKv^83^Ls+TK$!A^lN5V1K0zLEEPe6YC9-b#0H`;pk3X_Gj1@2uV)I$XM z;a0cwRI7MLI0ePa&uxF1$RVvi$NRLl{9a+UiS%$KP{e zz!{e=#y`pXHDpA2>v^6hR+RInG-Uf^L46eDi7*-6z%8uOpkp&=-@$hU$+SN|Ojt1H z2yx*^{yB}^?GCr4q|YA(qj?htMq&1p2&ce|Na)WC{%{l&2|NzxP<(#-Wrdx>?@(Xn z;o(d_m?RYQ{wTZK)BZu1N8bW%;@mO(=MnJP&EpA^BZO}kbNljFAxBTRl}B?V@TBT4 z!WRIaQOj`q9*R^bPMyPluZeT#w0pXehB!ll2;U}j=ZI-fP`TvK)+@deCK_xx`R(tx zcYhFyb@UT$uP`OGoEJVd+HzfC)(}+GCN{V5#~_E?aGOzjcrO?Er=cRbA@2dL6_ehl z34Ev2Ph7Nv-w$sL?%bYXP5|i>;>o4_IXjHktNnvYbiTo7SnTdRXPCrbV)Hm+wFRwt Lxxz&@p4I<1-%HyH delta 18240 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 H1m*t$#{{Ha diff --git a/src/lib/libtf/cortex-m7/libtf.a b/src/lib/libtf/cortex-m7/libtf.a index 32a5c3041964820514a67d12c57ffeeae914fa22..381ef0b66a7f00cc01d91ced3999913637b25055 100644 GIT binary patch delta 16934 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 diff --git a/src/lib/libtf/libtf.h b/src/lib/libtf/libtf.h index 5b00ea8f9..4d06ba3b1 100644 --- a/src/lib/libtf/libtf.h +++ b/src/lib/libtf/libtf.h @@ -72,6 +72,8 @@ int libtf_generate_micro_features(const int16_t *input, // Audio samples int8_t *output, // Slice data size_t *num_samples_read); // Number of samples used +int libtf_regression_1Dinput_1Doutput(const unsigned char *model_data, uint8_t* tensor_arena, libtf_parameters_t* params, float* input_data, float* output_data); + #ifdef __cplusplus } #endif diff --git a/src/omv/modules/py_tf.c b/src/omv/modules/py_tf.c index e0a1802e0..4d9679195 100644 --- a/src/omv/modules/py_tf.c +++ b/src/omv/modules/py_tf.c @@ -8,10 +8,13 @@ * * Python Tensorflow library wrapper. */ +#include #include "py/runtime.h" #include "py/obj.h" #include "py/objlist.h" #include "py/objtuple.h" +#include "py/objarray.h" +#include "py/binary.h" #include "py_helper.h" #include "imlib_config.h" @@ -254,6 +257,53 @@ STATIC py_tf_model_obj_t *py_tf_load_alloc(mp_obj_t path_obj) } } +STATIC mp_obj_t py_tf_regression(uint n_args, const mp_obj_t *args, mp_map_t *kw_args) +{ + fb_alloc_mark(); + py_tf_alloc_putchar_buffer(); + + // read model + py_tf_model_obj_t *arg_model = py_tf_load_alloc(args[0]); + + size_t input_size = (&arg_model->params)->input_width; + size_t output_size = (&arg_model->params)->output_channels; + + // read input + mp_obj_array_t *arg_input_array = args[1]; + + // check for the input size + if (input_size != arg_input_array->len) { + mp_raise_msg(&mp_type_ValueError, MP_ERROR_TEXT("Input array size is not same as model input size!")); + } + + float input_array[input_size]; + for (size_t i=0; itypecode, arg_input_array->items, i) + ); + } + + uint8_t *tensor_arena = fb_alloc(arg_model->params.tensor_arena_size, FB_ALLOC_PREFER_SPEED | FB_ALLOC_CACHE_ALIGN); + + float output_data[output_size]; + + // predict the output using tflite model + if (libtf_regression_1Dinput_1Doutput(arg_model->model_data, + tensor_arena, &arg_model->params, input_array, output_data) != 0){ + mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("Coundnt execute the model to predict the output")); + } + + // read output + mp_obj_list_t * out = (mp_obj_list_t *) mp_obj_new_list(output_size, NULL); + for (size_t j=0; j<(output_size); j++) { + out->items[j] = mp_obj_new_float(output_data[j]); + } + + fb_alloc_free_till_mark(); + return out; +} +STATIC MP_DEFINE_CONST_FUN_OBJ_KW(py_tf_regression_obj, 2, py_tf_regression); + typedef struct py_tf_input_data_callback_data { image_t *img; rectangle_t *roi; @@ -788,7 +838,8 @@ STATIC const mp_rom_map_elem_t locals_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_output_zero_point), MP_ROM_PTR(&py_tf_output_zero_point_obj) }, { MP_ROM_QSTR(MP_QSTR_classify), MP_ROM_PTR(&py_tf_classify_obj) }, { MP_ROM_QSTR(MP_QSTR_segment), MP_ROM_PTR(&py_tf_segment_obj) }, - { MP_ROM_QSTR(MP_QSTR_detect), MP_ROM_PTR(&py_tf_detect_obj) } + { MP_ROM_QSTR(MP_QSTR_detect), MP_ROM_PTR(&py_tf_detect_obj) }, + { MP_ROM_QSTR(MP_QSTR_regression), MP_ROM_PTR(&py_tf_regression_obj) } }; STATIC MP_DEFINE_CONST_DICT(locals_dict, locals_dict_table); @@ -811,13 +862,15 @@ STATIC const mp_rom_map_elem_t globals_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_classify), MP_ROM_PTR(&py_tf_classify_obj) }, { MP_ROM_QSTR(MP_QSTR_segment), MP_ROM_PTR(&py_tf_segment_obj) }, { MP_ROM_QSTR(MP_QSTR_detect), MP_ROM_PTR(&py_tf_detect_obj) }, + { MP_ROM_QSTR(MP_QSTR_regression), MP_ROM_PTR(&py_tf_regression_obj) } #else { MP_ROM_QSTR(MP_QSTR_load), MP_ROM_PTR(&py_func_unavailable_obj) }, { MP_ROM_QSTR(MP_QSTR_load_builtin_model), MP_ROM_PTR(&py_func_unavailable_obj) }, { MP_ROM_QSTR(MP_QSTR_free_from_fb), MP_ROM_PTR(&py_func_unavailable_obj) }, { MP_ROM_QSTR(MP_QSTR_classify), MP_ROM_PTR(&py_func_unavailable_obj) }, { MP_ROM_QSTR(MP_QSTR_segment), MP_ROM_PTR(&py_func_unavailable_obj) }, - { MP_ROM_QSTR(MP_QSTR_detect), MP_ROM_PTR(&py_func_unavailable_obj) } + { MP_ROM_QSTR(MP_QSTR_detect), MP_ROM_PTR(&py_func_unavailable_obj) }, + { MP_ROM_QSTR(MP_QSTR_regression), MP_ROM_PTR(&py_func_unavailable_obj) } #endif // IMLIB_ENABLE_TF };