From a122c27bcb8e0a63d08d3d2078a05a47e650f997 Mon Sep 17 00:00:00 2001 From: Ugo Cirmignani Date: Thu, 13 Dec 2018 23:05:33 +0100 Subject: [PATCH] thread open ssl working --- build/modules/connection.o | Bin 51440 -> 51272 bytes build/modules/ftpCommandElaborate.o | Bin 71064 -> 71008 bytes build/modules/ftpData.o | Bin 44376 -> 44376 bytes build/modules/ftpServer.o | Bin 62592 -> 62664 bytes build/modules/openSsl.o | Bin 16136 -> 19824 bytes build/uFTP | Bin 195664 -> 196824 bytes ftpCommandElaborate.c | 15 ++++--- ftpData.c | 1 - ftpServer.c | 3 +- library/connection.c | 11 ++--- library/openSsl.c | 66 ++++++++++++++++++++++++++++ 11 files changed, 79 insertions(+), 17 deletions(-) diff --git a/build/modules/connection.o b/build/modules/connection.o index ea5eccf95064c9d3543501b61ec9a6d3998c366c..ccc03c6af0e6dc792f3aede8f4f40cc1d4b88705 100644 GIT binary patch delta 486 zcmYk2O=uHQ6ov17(`h=b+LlOS3dIRxX0WZaxX417$HWAhVx-_s5QW-Bup2=v6f1=` zVh|+5*|-tnLIr=o^0F0eGnq+t7NLSGT~x$XT`Gl&PQ~2Sg^%-b@7eXVc1^3<;@;-^ zsYm7rdWoj*7amSm!*4`H)k0%+xv@XErl~LH8(nM=>KPYxOXu78o*Cmj64s1*VqMU| z6KQtTiHV~WRv$~7`oPjHaq{S^zMY-N zOX~T>Tte-ZZIQ5IMC2YBx+~5d?k%ip+Gy-htPg2>1g77k&M#ck*;4B_V)0av`Ew{y z4-uUuqP_iSwz0LAOnvR5xi0z(TuG)3>wk894{6Uo))*w6Z znpxxZ%_ujEt!7r-iJmfj``>!iw~dtp_ZU1s%Y=?E#fx$Dw;Y~Cu_bvP)s|!vot6}z z-=aTocoxM#8Y`v9{s~@?iT% PYFirbHX=t8!~XH#NAIS8 delta 579 zcmYk0L1@!p6vyBDYTBl5Zdz$+50Z#W)Kw{XC?fV-CY8C-;qW+yWGGA&%LdND@E{At zAT z_LHrq>An^tS5w4@J}9-vPAG+miR&fhw9<8n7BdI2EIwy`$FW3SkA`*n)$;=1(F23y zfT$ZIyRl5Blce*-EPfZaixp|_(@EB~|7CQ2{m~RV6pzkNi@^)M2?TNPN;gZCA^>3Q z=`6D|?cu^qD0Df}7KzfTo)#Nd$0RI?q47vO^+{_!46q9TP65E5?bdvwaVwef1GG0l z|B`JbQ*HWxHxr-^I*3IL%NT#@mYhqdG z9atv6l9M}cw9ExM;^fdJ)8Xin?QnTzr|Ts7P7a@wTICFn(P%Y~U&*d=d`pcg$4OFa zoZb0IqqRIfBfG}swPLID2l=%ez9H4+_?k?Y;|H=`j+@kQIc|~aar{E2$659oJ@N85 RMGcR~#wsn{0otq__y<~7%W?n! diff --git a/build/modules/ftpCommandElaborate.o b/build/modules/ftpCommandElaborate.o index 0dafa0d41ab4af4d2c4a870ab04034fee9ca93fd..d0d5c83396e5615dd013c43e847dc1e8eb0d4f33 100644 GIT binary patch delta 7512 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 delta 304 zcmca{i|NKKrVW`Ej4viD0^>%2xd95942-X! zaybl&V6}%QAGc7fKMXd2dE$sk$K{pdXO1Mp=P)!fsHr@wLJjBJq~jW zgnJUI*aN~n1?BoMD1$ZEF)=VOSb&%ejcj0wfpN|&5e5c`L+Y47Y`D+rpt_+xtD8LE gQl7DS@_x%Wfqa-0#GZo9x>hrJ7{xXpcbk|700AI8%m4rY diff --git a/build/modules/ftpServer.o b/build/modules/ftpServer.o index 90fe04a8eb56542068c16dbeb59fb2b83e115053..51f0d5d287031a4fda727ba2105ebec5b8ff4be8 100644 GIT binary patch delta 8489 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 delta 8323 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 diff --git a/build/modules/openSsl.o b/build/modules/openSsl.o index d980f4ec92391f31fcee4ef8105c771a4fb5825c..eff822f9bb0f6707ee8f818eac54c872866d7c4e 100644 GIT binary patch literal 19824 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 diff --git a/build/uFTP b/build/uFTP index b35758e6d74a219797680ddae67e5b2953b496c8..aab3e1ecd9b3f969da8ee7003334469d29b4a3e5 100755 GIT binary patch delta 43754 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 delta 42683 zcmbq+2~-qE*LGF2!wmZ{>YP<*8e@s;g?cdwMDt zYAUL|3WNPq8x#JQDix&guc8K9Le5N~9Lpsk297C2(hm=$;31N_@7Ceb8AM+ zJ+9qm{gYTD5JJqbUeLRn2_dcjw1mS&8V;307Tpbdob-_Cltn+sBRU5E-*?N&SD+v6 zd*ZU2(*3Z}Z3G<%)V&Mc%B{296JeXXkuHNL?pwj84Te&WO4^(2N<4$1&^>rxg{M2E z6S?TImyy25k1{pE^cX+N(-hMA;HSN^*E`M)8tYoYG~Ige4VnYXf~FPgv!U zgFn$?*5$u4xEQR5;1G=#dqw`M02-nPV~9rU=yLvd3z9nWFCC!38p?ate)oAr9=@hsfs)zV6jW$Fj z%>%zMJq!xdXv0*}LP!hKLqV8E8=;bxz|=5391PQFqg2vT*cheGWkC8XgNtE$ z2oBe1>!@rifQIYA7_QOQRY`9_Qn(&wg=@6&D(Pd$4%frBa7{=9m6Xh{&2vNeK3uPD zq|*AriEur*M`*MODyadUgzKSIghty`B~66r2tACA&}f^hq^Zz5LJzAVG};y_X(lX; z(8HMsjkdK)ngx3z^iUn4(Y94dr@-w9J;X<9v?(fS9{5G-VNj$-+d(BQgtSOK6hvyY zX)0+6OpVmT!AOm^lS*0&8zc2#i_~b-RnjuJ7^#QgD2=v@N?HLlN)N^;jkc>wdJB@G z^e`(*qwTJeK8EZlJ#358gk-3sWI=77d&2iodTlS2))!7h>A~Hg(e_qJ4e%sN53LLu zZC{l%5uy!x7;DgI`>Uj>(A%JgRR)cAph}tv3k`ZWW6)^dR!Os9k3kRB290)zN;(B@ z8}tw#tX(6OV>!Bc8qs>-HOJHiW9u7upw4+qgQrH-+2V1m8 zJ6a_zgNxC62#(Qc-%&{`fX3*-7^Bg?tCHS=q!>NSiqUAttE7)1J4O%NVl*KWRZ?QA z&GRJqK1Q#dtkU|zi5NY&$7-}wRZ;^yiP1x=SdI2Ql{68eWA!jLR-?^TNmHSBtR7ay zYP2&|(o9$wtA{hO8trVAGz<2`>Y+MTqn)dgPJ!F8dWf&1(au*%^T4l;9tPFXXiX|< zA*9vOLqQ#lcA-jI0#obg;b0w&HeV$zg^hLeV5_6iE>TI#;9?y;1jlK#AE=}iK;!f# zWBvnoqs8Ul!O_IHq-?stDvbH3+`m@rSn{C((S*ev84yi;qEZQqLp&Ds_FIfG7Pl8M zF81~cj&~r&g}`3M@g~Ghh)X$MgBX_tdkJGE#^Q=mfUBClkQ*#TjH`n^kK;v%aSgCf z;dl;WTqo>V98W{+fjE=naforHu%~i760sNJM2-g|#x=uk!1`HS9~5X&;L8oVA;#sy zPB`v}*az|B8nkbN7#9-zEsmQa_Cs93aRbD-q}aUcvDW#4(7=INpRf z7I7)ZYY^iiX0n%XK`{#A(4dgxrHFAov*&TV2ys2cQ#hW37*{rX7RS>N*GHVm@i@e| z#@SOj9*MXi;zW)IBW^^9iP#NX&<6#$7qxM16TIqrtICt|{JN5r^f+aLeK#{l9?#J4zZiWnDfdj-c05cfe`#&HZ{ zT*mFC9EbLcHj%OYP*B1J{%C+Jy1kHNPs9Td=W#3`#9_lGd=~L=#DwFMh;b8OfBZKe z1BkN_-{N>LV%!ecD>&YPcqHO7jyEC3je)(C<25D}HG7@lwQN5a)5c z2r=#!>{B?NgBVvMdltvj5aYhVp2_hz#N!aBay$|-?jY=m9GeECU;+vZT+jzGZYJ!$ z9Ct%J2{GZgBVyc6*dJH(F@Sgq;#(XyMT{E@dj-c05Klu~#&HZ{++x^E5u4&dQ7|0^ zCEUOtG43|(g&cb#o`E=zV*xSlJM2?9{-;kg89NJc7RP@g#vO<~ljHk{=O9ky_zq&+ zi`WyZas7?EhJtx0FmQt(5aYJQ?#uC6#0wA;j!z=y^Ty*Bd<-DYL;Wp|_aervioJs4 z9f%hpF5?*e#}qm?7#Sq#kFMs6!;R)U#{9dFGyCMSC|vv-ijop&34Go(%zyf`*UfXD zLGMyE!xrVA+JRcJq==uRx|}FT0Exn;6%$LVenIoNvQu6b~O$4`}fi7 zLHz-lt%lR(u)9?QIts3}3K!mb1k0K=fx4~#rLCb(n+7xzdbMdCIqxMQ2eFrJZK{x> zf3?w){@7@~jF~8hEp6HgRsX=RZJN_`2yWX-&^(4dZ5z^?u%K-xA?!YU-L@|M3+}f~ z@?n1yf=*X46mvQ(ZyN%g+J#aR3~yIYJJ9Y(in-kO85FmR^%(82?*PZz1qovxg5R=0 zxZf^`ra^d0eOeFRN=cwsU`9$)x*4{oG^11C=adki0rwd*e{Hm+A4Do6xU{cNn?OSQ zc%lCTSe6uNqF+xLg+_QkX#SUQ9XZVzBMXLws=k2l7ZNHJW{8_W&ETO|2`u{0$P@*P}6DNsXZ!U{`9q*NkVf{{y(4 z+LXQxfobuA@9)q)tqHva6Vvp;#@~5js*U;ct4VH=l;?7rAFNADGo(C~vZueVHVWe7 z(p+v!g@4l$X#zCqm_)6R)v+$!46%Hj`{DjZ$KxUgjDDTpQ&V=V(M0yjJ8-Jp9$m!aK9)k^CqXh2<`^vf=qQc1g zFt2+@`Y{~uo-UlRgKLjy;n{U~)FWQ|@;YP2{4$COWH7u(3~dApdxX*xu&zg2{WBXO z`PD4fjSv5-ahCKvbGdB;JnT_lo2>F|jh+!>e&!7x#IVSy&M`LA#Nozvx{K}Q4cOYI zjgVl24H-dnE9}pR_Q}2G7^M|h`8)7iMilJ=u08Spx;?wnpJ7VRcW5qD_RJHUufyP8 zb?H!8*lRFNf*ZXO=ta#ksxI6d*x%L=8LeS~pW;o*=v5Z}A8>G(ZD zY@MqZ%de)niAHPku6um?J#bIXbN@@2`1BH~zgM9BRe=z5`nswPMr+C!C~$HRG%;F} zKamKKN17S}Un5wI_Nyd<{P}RHcZYb&J(3e8$5D#o#vd6wjvqR0zh7d^76Wbj7~0N8 z|5IP!Fif{uQo}Ls`nERvFrrua^Iy^2FrzhPh(eNvBz%hc06yvyRbOApm=xE^n{tHi zw{XZiCVpQ@+Xa5<)0F0dU*CAz8rt-YqyIuy-x0Jil=W>)$HBwC^@E#ECB%~P3L`m$ zahlKbvu&pMB#wqbw|@CT)J3?^PcOJ$gtE7Ti~D!*xq62Xi?d)HRbjNcoV&BHXMZE5 z1NMmnN~!Sa_h?L)LH3|sGy{C!4iTE2hxvmeg;5t_{b0S&?IP?SoF;TR$L*TH@wbz` zJb#f}aUR&)BZZge!0+u~dK=~qj-r0BZg4QIhA#(q6rP>sUN^vRNJGuZ8?x8?XNw2N z!Nehf!r^m}a9l5(JkQUb(jo0=9{e#RBj(TRvTeb)d>Bu`xt^c3>^dQ~j;wfCi-rxp zXAD!gWL6bp=FC9HktH>dTYjyO_y16~eoOW%i&dD0UMe zYgkOgSp}!Q=@)zhHVkV^@4)q8kzUsoyKljHcudTB1+OcAqrQ+EgxCiBTRf}_ldm&{+T!UGPch+gf zsv?xk1oON6l*@#GC({kMeX#>8)=z*9d2Yz@b-}!Bb^mnVL*0MuN&9o5zz)9 zyFw)qqFBML-lVy74YrQ#Vfaew zy4PuzDsG1$U{q7D$qJqinWJJt=bXd|Y{{)hj2$A*gdF4DW-hm7!?IDqp+<-L#hdB` zI5sL+2s#Osqw1xFUPDJ`-X~HjyiPJ^UQ$rSnB~JfY?oAp`J&OPdwTUv>z^StCoJHH z|B&y7NjYHwJO4wz5Z2{{1r+~>yf2*1`PS>(O1T3P;N#Ilw0*G+jU>>D#K8V+et6J7t z2X&Xsx2w$uuLsjc1JrG;hiem?YVTeo#I~p{Z_gRHJuwWLPx7Phz+02HySbvS@&MeN z7!KAdPY9pvse4$#o8*gyoVydycJgYv3VxcrN%!mm*B?Kx(ocb9Q)1}HuzN}~=gp~v zfX`Hev$@>X2|TCva&D}WoP&i^d(r)HacV;iNEEh39k@pX#7#RN^zrwczSB7s{ZkP< z-rKMH9A#GB%1b-^xCpe#?W}jfL#v0(^j1wZ`G>v!D1Jt8k2=9#-uZ#dWXb zI$iC0wz&4(FhKh`et{QHtC$yY^()9;7!K=Zc?zz(Av-q;%4dZI1xjrF)aEY5&~rvS zPeS<_LTsI&_iSB!7cJ=vUj1sDN4Ay156tlL*uy~u+x+oyJrVu zwNuxXle|MBj;lK4JVfP1==MmOs$(k6I_RAj5hO~Quhg1xOZkx6nb%YpcoJ^q^>K4L zNr=rB4}0<=V8Ftrn!P9Fuo`ZLC*MWF-i1kZCMv>;PjI( zV|kkgSsM%8pu|!aGADStZ9hzi?VV^IPg=nSx*Kj6Bnq!KD12+yAs_XILUVT^hPU5K zY1-L!;I~W<;Y-`NP5FutTm2|bWLo;M@OZsUL6<|OrMn<(;1LC3t|B}Yieuor%qlcF zuy4aM6BS181;g@u&!6{5sdKFdx0lz0??3h0cXRnq)YUBV1-^Y@82nV&&f|ma(kJWw z(7rGNS{8XnC6>z5#`}BuSX#SVHDb(=Q}l7vpL=8*56R}2T`HS%5MBHs72!Z}M|yYP zKgC;}(&nwiolSlLc8v8yyj5fQ@)Taqk*@0Wuxj`2kSX8!TpGeVRFqzD=c6Vx1^mQe z!quHHMI1->!F4e-DsQ{&)^jI!tJLCLZ0YJu;o=Usv3hi`o|||keUj8978r%n4YSm5NqT(M0g=>Ng7q-Yjrbsqz)Hd-`VE+0> zKJ7NE{Qj5>bnRP$>k1zEjqRNI#3w3?X_NWPy-`xlR;wCFs_Bv{Nv*mw2{h|kd$rmw zpKFsKb6vLEqiuxP&THWI>Hzp|T}DpcdTBV#G&&NHv$Qq=^&HtZTD7C4od3R271*kY zxFVgaimNqSAeoh^&8EV<^>u^ZlQc`znidm*u1$d7*XwC7VC#DdY%BEoINNm75mdSy zRMdJLjp>!IcgV+^iTrX*CDqJn4vtI24KMhBrRj2t_ zMRxREjO{VTCU4a(lG(lWDzlFqW^uJvcGzVTOj5sq(a zOn1T`oBEp?@=iqyq7H2{4j8NM{909=rgx;!de+vtMKar}HXGzHQ#EwGWR|BkOX6m6 zkE`mb8!mn7Szp%%3hWOj;`sm|i#xt-7mgR4p&hfu1uWA$`mH z9{Z#bVhe>!TN=`-#am-T<}6^$e8Om1vh5{)tj8(CeA;}$))d-pjiu)yYwJ9E0)E~) zhX%o*ZL?$7Env*J%4lAKx3!J=N3kHLSfgbL-nPc6rVTvZ)|vhUt+&St7Z*bI)ou@>`xRm2Tz<)|D}1;kkbL;M#<=^*&+iv_`N7fZthp9wHpmXz`PKjpTQFz?G| z^kXRfvOVnukG@QH{%SH~upvFWmhP5(F`YWy&2}k!Q!i)pw=?X|c z7$4PVh5YHH`wBk(cp*<%-@vki8|Xx6^i?l94(5GTpWcTpU-hI9;MrHH?(>SUzm}9i z>7i(v2qO-4rOB}UP`o=V=ZZ?M7z{5D#cHD_)?QYLg@%WtXkX}lxHsJc>kqf2U%^j@ zlk0wMk+Sp=@;U~k^+SAw!kB+D7&n3DE4JB?cqBZq=v_XvBwg7c?Bz(vI->U;VyV3- zW$Ow{jx-ZuEpX^av_LHI^N~>D?o#;sNVMt1QbIagKFs0!hofV89S_`lShdTR5|Y+? zfYF+~Who&8jMguuN=|2?tQci!nMP}J0Uq@>TD7L7g!JxXwCZLoC8STf`DzcV%lM_( zk`qR&ZWPvIzARmSIMJ67WB#cu^AcEnG$Po8Tj8a&=KRQUks=??9}V&fSt<|43-IV@ z7>xz5W1->h<9KTDgvW>6d>kh~w*L=EI~GcRfT71i!w+D3EK4d?X8hP(Zd(V%$J){? zIDagbwu3*9wH3&_cuCyFZ9HS&!p3p2FzI+3`Xy{Xo&J8GN=Pj$q-Wq_S#OVt zbEVa!3+(zT61tvo$Zp4nj+n;!M+=yP?M==K9m+EOE)SL>Z0TA|0IDNja z)i>dSU>?ptF-|KF6b4F%Z7qR9oOF1(e2UN|2MshvWoO=D824CqCP|nwk{{0dHm>+v zFTp>XqxC;~x#IJKRa5c9u9u5@A1U_5qaDVB!b67hRVT=3P1&*lZ*2{gZx=;L3j>}hXMRkOoIynLWy)Z^n#x-MLHZVx`DP@L)-5wxzJpoUE!yTjkJj~F$?Lpj8>Pl znc)3HV?h`IDL=HLXJEz;&FD(l@k47m81DX17W{3lJam2fVC!`8Ul@oby&7)a2!x6s z-2~S!Ao_9ucyDtH^I38ghlVv}vEp=~H+QN4?@JK_P7c7W>MKk7D?aK+DOR(4GnPO9 z6`36@>t-stVZ9lvntuOyQnVBsYll>F?Teyaa#;nz{f=4QSb{%nP1L?&ZZ={)=nMvHEW z%oaORVnYp&ZIj{>ELEJe7h}^+h$iG1{~AoWElbjPphgdW{N(Q5N|M|L!{tC9G&Pso z(k0n3FkB9ckI7^VuLa`LMO&*H{X$i9-|-Eq5t*s6Zvq5&uh^2o%Up+(!W6oy|5 z@;8^;5;_uM&c|m+jTW5`Hv*5!Sb7P1SL%E$d8omg>g|mdT`Bagj0sPjCf7D9Lp~Wi zq^PE$6Kt;Zquu#Y*%ep+)hF%;(+Z#cW%Vo4@MfegQdU7tWgvYBy{`s&lpeupz@odr zQNck8l|t{Uk+cYUUk!xCSN)9HQwbTE*2ic~X~>Uy8?7nPc!Xr@>3TFMJu&{RjhUADr{S7RuJ-dA=tJO0}qxV;<7aC?XUlicP;Ys&S>a#X9k@mTi4iE9|Jmy<=e0*^ZyEqSdR zJAH2qO3h(18m%cs3P%&p;o|nGfv*%k(ui#3p!77@o8eO=)|3&7$8TL3vq$h}OLYHy z2J~8VM0-W~c~?16eKUA)M?S+uiBt5{&C6%W0luEZ|c0Ph4Ydy8`|lg!IOJB z&pc@mCinjgKEF|4Xn?L#j=X%9Bua^N;X+K5@Y@b}axV}Pf7aID*X@l~@=Sd*QO;Dp zkq5JG2heL#&KBM59T)(7{Ih3pt2dKu8fvuYI?4vFaQ$b^TOqypu9WAIpPK~=^)FqJ z+U39|DS^i`7^}h=ELpKQ!Yy<^ZO2S#aeOQ(n~kT<-tCyZl$MI+=q_^hyt?D9E_?*e zXw^2J$hWkqcu@eaqa6GOtsuB3!2^89MqKM}cVM!7db{C6lu#<#dCo2!1dczQ1E!B|x{qea(>i+;K3 zNrQpj41|AgdV4&R>VLQu8xIX`dC~8nq6XzMr*+=X-*!-)nDE5^LoECHsXZQqHDxu_wV>pSBJ9?y$yz6V}+xerBhD! zUe9rWW1_Gm&);kymJe~jLFD7mK#z2s%ce&YV&5svSY0-&PvpgtFzO9f_KD-Xa?@Cn zZ+@btj2YiqrsU^G@mM))i_&lrtVx!iU^8fUX4 z;f8x!p&vK(4(1CR%^hpB=n_$+^DJyGt&V=1;K{uR`X^-H3vB$@D2*xUL86p*RUQ82 z7(QfHj&^i-@fyhdEru?K?0bC3gijqKH$JU{-0Q!0=xvl2Dba9}a(V}|{e!s_hJRB`)PD9G?A#?}IqCauS@+9kAP5F|3xQO5l z-i}6#ZVXzb<~Xd{IjlS-D_o|OGvIs} zR&{}Hwy=n~s|>_8?ZO+Av%NDuO*))>-%pqIk%8E*;X@7P zCHQSAqeVAS(k?sg1z+Cx_y1O^&nw$epT|dV^?qG}uE(4QAah{Z(io?^^ zjM+LxVlq+;>kP!!5^+dQUWs z2h$(kp6_v4YsF>H9|5{XwJu3q{i3+m#nor=BsbooC#$ix0}%8u((@cYE-p3@pyvYG z_3FTw*=2Sy8oXC*z*TNVHJ+(1ql+E!zZfBpmys>`Xq(F^(u%?QFxY(v2hqjw`NJ^3 z>h_G`vyB#Q6E1!VS0C2(r2M$N$UtCWm41Xp_sc4*ZgY`=7*`qJEvv?*l2#ZkgM6h& zH5VX_`5Ir@+9}ku<9nW9Cl%s*vCa z%3T)ycY+OEIl2(ueH@-gwtXgdPC>dB zZml_BaQ;cGyAMD9X*nGJGsIu(vsjcC-@6}T^*c};nl^ok(V{!bCHc$MePC^eXTv94 z^X}^!ex8`Qrq^;X{n^|-gM$F1j2#%mfz7IBqZQ?OgM5__Ol&2F@XZ@0MwcvKoV#&X z^>B#X?0rocv$(9bLh@fxA+ylMs{L^Y4n^I}L5^uM*9sH=3ih1KY16FIX!o?}25~{8 z6-xgKZknf1dN*av-jWiMKmRVxZ7z-ctF5IQ7dl_=ba|P9h>sI!5codz_rw{+;<9-e zXAbEUuTT{wF=oe4`9_QGQ*JbV*_#a?>Ub-H(V|<#O^nFXTMWc2L}`PPuziu}W!26e z%o`Rl(9y84W%A;j8ie26;;=X=TU?X+ zt`vH|FoX@Q_r{DJ#2uO)-zZ|V=q|626PKDZP-^n-tGqqA4UE>5X#?e+p4k|$F-cDi zjV~||+umusdiz%zPBgQY$kRcTsUm8i5CyAgF-Y|Mbs0C=FX8KS|nw~ zP9j?Hk6UUd2T`tysJy?NqZAcU5)y5jFAifEBS^h<-a|B(PRfvq>3m@ zA^NReZA8}=8Hnw=V;ILvM8BDpi0<^1ns)rh+NK37L?5V#<|0v_Mba?-R=U9RfkcGo z!(H5D;$?Id(WO3ej^b5B;Yc*oDiMv7h~jG_+Tb9fDxyM#=-axrO*^{KKy1%9OGI80 z(YFOk(}p^THvLfBvU#Xs2`yYFsVRR~b^%I;n_U6e2Gb5z8|Wn{R~h1c@G*C8CG;y$FkL=LfuLm~6A-$-*TnqS*>j zhKeW+iB^9k5v`DjG9;q1zui(hJBaG4h>{hehjnTrx??gB+eeOZlqeBBd|yd6br6+T z)HdzUOu1<*R7Ckml)6fa=%Tc{T~SMfcR+C*ja3otR)`W+M0Jp8H9ioS{>na0B1%+< z8qRePc{qsh9^?dt=wd8m_Ii@jJ@F!?h7P}VlWIPO4`)u@W@;r-a!T+CTuAhvfM zr@|TOn$P>3q+zM!d>Y{(!CD{plJigxYn?ASwB-(|KRU)lpsLm*io=bV+FC2-8;I?9 zN8%zSk{gSaF;UP<3jfRVwc*cFh~}$^rXrEcYAJE}4M4n9DG}kA=;R<8pdxCn5Jjqp z{E_IwT8Su2B8sdfA`YS#-`7U;q^F#Vs{zAj54sz1j;)Y?H5V6>);SBPjdV^xEV7G1F7F}SD0$lPYKKpGg_9!OLBZZtB0JP zZjp@H`itw_XjEJiMH&{#SXDs&QG8hvneHil)*KMUm@QkptO%@K^*cE^hA-DqU@0!5q~@n7gmBl(pAYj;9ybt3)??M%f#S={MP6X|C0XLnk! zVGBh*vJPI}?abt>l#3z};~fR51=GX?4;oshUNmEl!I}TS*F0Z&$N*m#%9j)1AaM%H|oI|8~qN4 zGiJjFrlhc5g-h2#jn?D~7%Seuw;hOL3_o#_)C+qNjiOcKVoQrT83YJ4e`ZK(qB z9a6Tr3dA=^*(N9uUm#^0ra*jul&z-%@f)hP4hqD#N7)h;7>chhvPCNxUmj)iS0KJB z%I2g%eD{^@si^g$pU_Nkj~5MgZW+p$Sm8?z;vZhr+xt_aobBr&k|LTv@gn#b#AX^g z$)~ST_2uWcjAE&V=G1=>j926fFY=LIc9BWnpj_PrKjY&bSAO>EshFar;xs?H%K3Q!V`5YgjTRI9sn%1;!j8W;JcZWub&U;Bp&vsIrO$@2%x%v{@6o-FL)27zHs!= zzo~DU_ZM#j(A@gF{iKv@Y8{ML-AJ`LPx%3HP9UAwD8!E^G+1TL6Z(CJH~FLd!~h+g zKo^R6I;sz7^&bWwh&yyNqCUPUQtC7xU&aa-9(Bfd(zp?_08jK9Mf*g2tfN3v#Kl3h zBz}S~c89w<4D61g6q#(TH)D1S5etK8EL8mJF3!}`l-L_S|J98uZeHHv6+La{^`{~^ zC+dP}3mPZ(2&TIXzbNt>8ppHB(zL*54R=2=G=#>`Q({U84Hw)3#UUZIzW-2fK5=P` z)|9C!gxGHQi|ayZRK13^@+_2p=8v70am$ikc?hrnNsCOncq4>{MSkmz>(LDhKC|}v zODRV9G6vN>!<+CYhg9L*#MY))jww&SC6My;yLf6?($D!EC^MJaHi;ubX+ysOS|zse z?Fg}57T1PSL+7|!@n95xiv9i{p>^=%G3C#{!E#+J={Kqjmh?&<06r8fvQS!wW{7pd zXrkAHwsOxb5=VqlUEnfL#-zxUkYUW^^Y*Z$e@-sPK( z>?!3XfBp@^mxf*F^0%k#a*nt81|J;PfPS1bM! z#l%-`{0&vVjFVD?o4#gPXE(XdDuX5CoYB(1%;KmwQK`4C2k!80yxD^rw8~Oto`2@R z&2W0ng^HpnmPR&B?O`sred5HJCF3bBanj>q{M{AHxBWM1KhZOmHjTU5Tu%5J0ngd= zYD=mwPs24ulP6}!(qPx0niFChiPdEUIJ;q6Q>==OlOX2B(g-msiVhN|#8LkPW9rb~ zDSc1uS(ld3AH+v>X$JlJKuSH@z)APjs~Tps4724Jn}y2@@v{T-8qi1@cAbBwPG5ze z$67KRIbY<@|AP4}c6Ak}CeU#4VnaHR+Qj;e=p1@f+}w!Hqa|W=W7=Oh#KhDfmoppjx(OIW+s5 z&}1RKMl$nApc=2|^=0o9q9K7c5Vrg+?ny>?;Dr&l6|@y(|8l zKo<$o|A^U%bV9(Wc=>x0+420keL=iP$?NJlBieger%a^Q>VP1 z96-|38tJ7d_7j8<@lX1|mV zXZY)saQ9mJ52o#){KO*CTG9`i%WVVY3aYw^X-#M-k0tEI3ni9!lvt+yRl^Qau~AbR zI`Gbm8vJ_a*dfFCM-RT^c5I*iu3-`sh=JJteo@10m;S1i5n@}SnD7Ps@{1Z)DDjAU zn$n1RyRbL$+w%O4O8B|yTwOwJ1OLWOb}7k_KGJLxpEae8>J53#*np3dqOr4NoZ&F; zFB+TC6y4wM{Il5f80jrdIJDZ;71uPQk-F0=l})?4I!V!Tci(GbK?lHHU5*2(8qW}OnqJ>ef33o zz<9+|M~js&jt+?v_cW(X1H1l*CMHgN(VQBLOJ3BlDqLrrkpF`xHLUR4ukj_ZX#>*+ zbTwZ|>z~%Ihc#|XX9K>jtudB;)6D;NH9zlB{~mww?1_J!Y&Rc?J}v1m{}PPP{HM`e z!(Z%UFL`!gK}*_1@W=i3-3Z3&MKN~Qz}T0D1IJp^G*7RYlc$XzJ+0r^X`{16|IRcf zcuMwrGYsP(c zaUo>Zk2P$YGa-vE)v#a}Le^iZVXa&Usq<3}8{|Srub*nzEEhs{Uan#5TnPF4N)0>W zLdfpQ8g|2lkRexV*ee%8e!W`5!d(doy%54V&UgNM}=Z4J-5{#OI$HR*JW4C}S0#gzTq`J@zD|lP_bzUW9b>WvrDKA*Xy9 z8{|dE89&Bmc@dHmz}PA;LUx2OcF>EEeqoGNdJ$3{##pr%AwJ=Z1#1Wy7|vKL4Ixh> z7#pM^PIxsfRo0y1m8e{9c3F(o>*b#3+R;Dp_!J4Hn&(}oAgdvQT_!3fgC}U;5giIgC*ezc|oJKQ7{0I?8GiLB3 zWYcKIQvC>NI*zd{KSG|3V=T{)kdUd2ZT2H%%}mD5_!07C7Gn?m2x&Q+F<*Z|4D%RE z^e1Fg5o10432C>MF??-x-Om^+F!>WQ@H57?`4dvHld&`Yg#5aTF`GXjZo3(C4!ImZ|~6F|sk#~HH)5OTDPG50`1 z#-C&?K9CUeDaMR}gk+y)4Bv|#a)vQeK_DS7&oH(vkdVpWF?J@9km2VTvjq}z?;K<9 zIzmD#7;B^>B)5XG9y&sfRWLR|M@ZvJ#tKnh$ylk5kolF2Rpj%9 z#Km~JhNX(nvS_R+>wFDU|8NDqS{vW0JMuye<39nB=I#5w&`Ik$K;wpXsK+<14!cmp z_$%3Ey|9QIpne@84hA*vF^kXD{d?xJ(A>_h^8a9j)QOu?hg8M~re>RO2*hO*8 zNE#|W&Zf@7cRz?VqiCq;JCZsJ1Ai2QM$$;(_>W=>EH7UY2VfcXlQ?4}jS==fkmh6gn4NH5a_z#v(E5*=JG*W1IRcwRh{Hx+%EWf@g&cQO^nz#nbP1nRjSf0Kn zUK>SYgfD)j-n_^@RjTF3YiS4lrxF-(Bvj07C0hXHI#E)}mjA`<3H7o-^;>u}p zG78vmOpC^ukae~i_Om)ILZyIV+KCcpg!_wn{=sJeR2*D4;24iTX zQ1^k@4a?~d#Bo?o`9oZa<<39E9as*0B%bB+=i+@Vk3APX-=TF)u`c{tL~URld0f(X z!C!ZAVGLj8TN`+;(y(=|gygs|=8P9mF{){buO>b88H%xAX zY{jc0uNl-v_{xot3;&Bg+?|jY|BJpIF6aUOGrwu5J0V>H7}LKt`2Cf^KhK?z_BzJ) zy{6x#=-0Uua#7D%>}wf{R5EnLosdhxj0NM%i{&nI3UJ00gyYNbZ@3e3E}XF#yr-fV zL^wGN$SZe3&POrU{%z&44hk6jw zw}IGn9E}l*nur6&(MVx=qBsM~{fXj7SY|a9_hVVmRJ@F3X;bkzmfB`w(0Cdth|R?o zSUyh{2Vhy%Qk;Qh(>CHqSoUov?#FU&2k|nN&pU|Ev7FdZ44Ob=ggS4DZ6?r2Vf0(# zU@XtRCC%#_r>eMozoKX(JIF99+RSL*}94`{_|Uk z|8!-bXz)hE8fIbvuXUui(vgk43HfU+WBiARWP%a374+~X`#XLWtH7I(ymgFSC*sJ-G}6>^J!3hq4VV$iq;$@kkhz~QcI`F&Pm2D5 zHzCP87~?;vBG)6#;c@Wg#D|cTI~eQo+8NVPNkk(bVj_n>W6b|G1Fd4v!-tU1cQUr? zHT`x)Kf#BPw!0X^d)`U_P9aJnm-!IVx|FfX*ZhA}{CE182zj!{abHqyfzv+4;G7R3 z=6#Iac`egFD=mEBLrC{87@PiD0F#vfG`@sv*w5Ib*Zl7*{*B^%37K?&{nw2Ou9!W1 z3Hj-O7&Dc|2)`W?-qEUpA@@IqmeOXUo&>& zHU2BSe*EQ$FZ>9}J0&)Fk9KVR%8!t3rx?RL$$xl*EzqBkl2eSSe>n_~8~GEm3grj( zyhjhX94LE_Iy-sDznVtGsk3RX=nBU#b>V$H{L4zlekMfzxv*K{?b$Sn=81F;O`xS> z(i|E^gT>x+XoBCixzf)V$pIO~qB%6muYkW>mhfLi!@pAT#2nfy=@#DZ!*}H~#((Wd z{?WC^4txgh4ibXDV!-uI;-2^DKw2Quqe1}OqRvfS@%L8DBp6F103a; zxC1-p(%+oKN)w$%M~mI_Xo9f1wKy-2HW8|Oi97RX6Y3>i&!Y*R%kVcC2q6XOaFGUy z4Hi;g8Ys41NE1BS50c8zl&hAaDoR|tkR}M9xr^r((k7mhJ*BL@UyqxFE~363&yplr zx!C)#5FnNu6LM%{a$wJH z+Kf_P@m?t%B3$V!cHBb`3R4D&ulCS7!pXPAn7y}{7YwC4i?>_pw6ZIF@9H1H0OSB!J4Ly{xbRhg7jdP~u z2Ra_1ojhp4f%m_mGh9rgT=4fhTH_Z92_e^UD?;4WPB-;kwO+6*^ehuXK zP#_^rMcXDvze{K&_jM{dGucod>7yL@++@Q>#0HmZ{%Cz`vSDxpAv9XXGYu)o9_O&H zm~4oPB!t#AIRuv`8?IxE;vL~sPA2Z|KWYhyEXJT;IAe#nZI`+VAHKmqx-LpbNYogt zS+Wp{21(73VP=$D4A)|p3q?H)B_4#(zd4;yG?thmpJANaoVz;_a{NecHqPi&w0UM!Gi;f};8e6~X4F)Sc$@PUAG9x=X^2Mq9lQpoqBAq4 z5I&Rez@mdQ4Uez^4na}bOv7{xX{W=XVy0n+HzD+M2dkG`j2$;CWqOv*uwQPK%T{iHFv(vg%2B(e;Dd^DS5z1ZPA4eOizx~rs9 zTt_)vvkV=u8*>~m$FLYfAFZS}vIN!bCAIkZc^cNQ{p-XIog7o@>%?gaaSbN1V=Zwq zHdfEo`Rm2-3pCWEm%GR$HCNI)6>WB$lOf#Nspz0diaOMRkC+TCG0ZTYVWG%qa6%aF zs4Ue`jvX4|{D~HaP$r37kFosfghT48V=V5VMEvps^)vnIUWNXqRxif*e5mzOf@{lnCwn?9$<)f5#D!FVsgQJTz2B8(@?Qn1r1BS z%tKLn|FVP1(fgGSIDtfFV*CDITh{_-W6}S=^E-PvXYc3ihLd z+(M)%ux)05U(8nlnUlD5 z0Ym7Z_kW_&M+c;E|DI+a6U%hfzCO*i$aJ~-j%nQEHxX>hv@HHn;Cg)9H2ctGxNJA{ z@ib)a;ugD!*o)83(?fQvwBRPPkHcJf94yyWJ3E+_#npyc{~>-nT(vI-v)@?2j?usDRtae*g#2s}$ozya z^Sn`9{IG8NsY>heyeVY;gJPN7Vom4vf{~@#ky$m|Oja9XJa%Nh&Ay#&*w^d(KUL{n zW?yQ_^6D);SZ^twEj`p==_vbRlwnusFWAzkOD$Pmy`|ChmZDj6OoOH4T&7~fZlXJU zrqa6>Uuwzn>MeDuxAZN0@Tvw&Yq^ZkhJAL1e(E!o7L2~slx4Ch)0HKPsqxum@_kbN zX(Ud~?`B&m^q#>ocQbZOaXab8%iI9Wij^7CYcri8_n5l0D?N6NQE7OLjtl;JFsmyU z{)DoISX%s=g{-f4f)prJCvbvVH1idV8AI`&1v*RDZKi-9me(>TaK_KD1z} zUh=u>qnhZWjNUm}SMFDXRFQscznVb%tM!HbswFMFT^Alux6z~H^r8dmR$o$`b;B|K zCMJM)Qgq*TlpMxQTY*SZm7lgs&mB1?})#8xK7@S80Mswf6WuvPCWhm zjt-l;4r=-*Pk*ce)n3;$vbjO|n}Af?FKaB+55^ePjz_aQSa!3)N9g~aRO!LZ#t!#P zO<&3}Ot#C9YtxDbVOQPoYAdLnX*4(^aBy@o}JBQ`cTl` zXg+}1GwAS#;9>$bymn(M_(PJ@Hf9jR{K)ptHPY+_u3)}ZwrIbczdp3OPudK*=H5S` zH~yrO>76Zl?@#LL<`W$4?AN(c6KQ&+v5n@hv$a?{w^?^Or8=o``hinwB&~c;e}769 ztD!pev?`ZYdZ(qB|Nm88f0qPqJUUUhA8RffLr5tXZZ{#)G|>iw&F-levNPMuZr z_+{pP7xfJf8}2$0rayL5O60@l@e9+(-IShf5vm=MXC}P!oJSKaQdf|OQ_}PQ(FS6L$ybrPNSBz z)2%bpsU+|V!y*d^e(1e~)xd#h@i2S((M0YI) zY6*y0NdW)F@>gO3_hcQLN&Y}>5w9KbXHLUBn+h4;&0Nomx??82s*Z+^XVPg>$MvCR zlwOh6isu)*ivS9|*$Qw4CKm%?f!|sI;em&WfQY~=ML<;AV*YwA+(^Gcmt<3>$_(|% zraYy#hNd>BdEC3HmNY3msbi5D!T6Jv54N;EnV=smp-j&?K@aFPC6t<{3oW;OxUKj% zNkD$z8T?3rjw+*y*eWKu4QWlD?o~#)sij+z#<&={!lFe*a>`SU0*}|nO%PE%*H`7DPDJRu%-*mVruHbULstWYd za;kLy!Pshbt^SO$c5LZM)mr;nQ(mw`6YEa1JkMQoDv+PY1$s)%Rpl36jCMi6@J2e7 z^*YN%r@Pg0(B3F`sFBWCs}ls&)1uVRDmmzNC|J`->FN3lJtI1Utd4^YLBZ}uI=kw1 zR*23pt7FhE>`k;d+epcJ;8{@^V-*~9JdpboyL7bS&q>qwR8VDymF%UlqS8A*f^XwE zWgAkz{QFp8mTtudxoVb9sHBX-p=_tirHZ{pu?upa=G&KP@FG2^ zlJbVlVpGi=)A_wvz(ITG8*|y0nrl^Wu5dO>#~FN$-!=uA@?(D!d3gz9p%cjn#d+*mQh`v!2Vcnxj)}g zp3K}8HAZ=9bwQ?nz76H{{+HQ&0nC&iz^rtjd@2|5UsiK=H43`%FDU@^GlA7C6wUVD zN;OwIe+LS_PSim`JbK(mjB3?5d7!og4Q7&*dbxHOIHP3Y>u`Cf6oj^y60u&Rf&4YWt7`zb&O>> zUb;NP@ls!FfA*>%3OdAI>ZTDaW!yA~-4s@P{<$CuK9AKqFQXjaq_|7{R6bCLx1**l zpZ5S^Sd#>})$cAKW`409tm;?gWz%9;s82hpa0OlNNdAnp%N@>MrI~)flgeMBrpN@q z6W~Fd3Il*AjT@RTA?mY`3rKu99*Ej&z;SUv)V{4ueKHY<`g||@AZEM^V4@l2;t?~= z1u)0pk%*b)0=^A81Q*<&_<@9|-Mm5K8Jh$|?VoR)8TqXXNVu6P|6^vtAuka1HG?s{ zFj*KTMimk`s4#j(I!k>O1w=o~9!?k<0YtBSgu!Q6-~}UaI0^_xzhWeYv&5?`L2*7H z=8F5nfXF+-fVksn0R2%6#7vvd_?N{%(trWI5wq}V#;-^L=x8DkQ@e)o1Af4j5SEk- z#J5WVVh^h6VL<$yF+l8B7M_~|#D>%KupkgWD-MWFCLbu2W> z!sGY?w^=xg>7y;YI2ni?V_}Z$iXCg=yW)Y^aTe~v1-jkB9eqITcnepj0kPEv4#v-o z0pi}WjQ$M2W8j2=0U-Vdc1pr6ULgLM0r_NI{Lcn_Fad}^Z@@1DKtdIR5$;*6an=ub zw;SFs0l>T8fIH&>?*RiYWbg~)|Aa+8!26{k7o`B+g9co~5rtnF@L@J_$bcMo=sj$} ze|Z7#5d;3g;MWFR76W*XG8kW)2>6cK8@@3f@cn4v*c8Bb+`_^0EOgQ${bB(hw+bMh zLoj{O7Ums9UyOzO_yJ#>g*jNj=N0)lz~{4Ye;?pWvhbU%n_}UP$$&4-!h`s_O(zv{T6iVfdDms^A7Xf; zg^#n$CJXmU2?DOT@1GW4gZ0Oc0)1f9aNVQ{9y9QX)Y7R^NUwi{L2odh*!hk?-37`glBi0h@ zt(~d2Hkhpi>&*?m#GGJ*kXFaV>cX;1#aN$uV`Uz|f0PBfF-Wz;(oI3HmVzR}{e2|R zWDARwGqJ1K7$7zVs^wGbjZ|D>q|z~xv69tWbre-6o>DE(jOI$_I75qx6)?Wnb%W`H z(2lP3X_DU6j{-}&QCLfN`{)kQJrXGu@K?YU*MO#mUxEhof^L)?t`dPXy|6o_C!|-v zb&+}#J>(_|1TueF{nQCK3iP7GyN(@PO5DfH14N^+?bePkN#RdYh?r_+5z7e3LK-Am&`|Gbxc z;i_q9!%TWZ@k`{?S=2#&5n4Nowh>K;3f()0ey5!0@1oqKHSVKFS4^jzM0f4IpfGh~ z#Mcx9r4A@A>OG;_xqL8a^=$I%FCM00NsjAXIjYyuql1qgy|Py`-Tx7~lE@W0_z1Nr z3?FspofGa1CB8|Iy7bHID4_SOqs)Rqm8I=4U_kGo*L1zEd*3b?TRnD4--)BD`GJ`{ zdHm2jMok$rVdT)sQ}l#ml&Y)OQ)$`@(u$vzfQ3|vcSuj=&HuD8iF1e-a;D_jhOPfv zPal@maadHN@QM!HaE!Z7*?ga>0i|xBP$fL`>&k4nIee zyhF*ZWX#oNjK3J_@eW0*vWeymy&-Xs7aa`olug7el1kc_4 z;F&8O-atdso@{5WnIL5VpNi&|cKXJ5skm&fbO7x*1_%Jp(b@70p85fp&qV;hFaAtV z(Cgl%cU73adm~-VDc74oAw}xB!evRa>vhp`#dLxB_=EBLC+lbyH8pwhlkfk;! z-9ms5aVX-MFE5nKBItxgH7>uJW&S_G|MkrGC?YZLZ!78RjmXkPox=QqFT~i1H>|Nf z(mZ}-nKE+OOOXl21CnKKo+$Lj+v3gGrmE!sJ+2p-aWWe44<2(GDfCkDkC?<1p`To9 z<+{qk*-T?|iTVFB{|{^w$!LiTk`{uUhI>@FBn!JAN{xOs+-st3jjE*KI?d0w=oI~6;I4<-BcF_$Ixditj<@R4w7;a1AtSg%MO8}jP{;ild(eD6;Go9l8)(ppn16hl9 zsl+lq=EUvj9o`xNkR$DAuF&U8`EIjptXQ=)tsShnS8ayZ%+-R`roH^Vhy6&@R&d9~hapAnE1^4UwoV8Bo6w(LVg)m# zVMj*V+ML^L>5_pDfB6s>#J7zuP%a8XB!J+4xo~HpA1Sc)mW~hug+7HBv3b8r+%-|? zjhBy?@tj#~0{XFS6s6|qwcE(Amf7qTlj*u`lp5GCRyJo_vnCi6z&A!F5bn0MyI!6E z6W+~{fZF>3`Fpf5bK+D~Ngw9Uw-+uEwP~`QArV*TDfAkC=LKK_?g89n%&BUdJ!Z19 z^&(t&%nF-uX8>D;-ejt!n_~q4_8PUoNnxKg%l3c?dFQ0dJ|w?NGuiNBk9~d`cl(u0 zM;t0-1=pM=;pb53!=#-!JpzZNv-~)7UKm&?(Us%PWdeNCj@kcgZHfT?#;|q(xq>@Q?$Po`rh7_V9w}plJ0)HIjsyV7WshQwS)ZOt$2v#&QM*g)kox4*BN?` ziK5mxtgJ@p75r5J0Oqg*fX9X2c;j`YF{j?NR=11P15aD+pxo;(gnq&tzyZW#I4<;} zR4ZsA%>kUVRs;IfN8~Rnl#E`l8%x5XME zZDEzrpOxJ@bMk^W`BjF=yrsMlfH*|uvt%=-EOinUi#vKw-B8XqVo@-UoJ&nAQOXkt@duKeVi9#$Pag;lAIIm-3iud z<_rRWSiR|E@~dVxYiqKye!Mb+I4r!~UfUeQ;t^ix8!N1lQBt%?R{H^)J!7)qYa*P- zUs?lDEy5dwe*NW^;FFvGxzOL9X6fc+6#tN~(ET!kkCsvHoY1Grt(qhDJ!Y_pYl#~g zjdJOhfkL_Ub48&<*K8wyptG>o$ONlWW`lh!`)*PgO04IJDeq8G*E znZySO*sYDDeg7x)=Xkk;M+K=NNAa`#?|OWmzNL+pLmcD2XJa?=vcH{c{4hS z%=^;(rL#v5rt?D>93m1i{jK(Pd78#}fdr)ftu0Rx`5nuwywk7G5qf+hcWa^Vl`+wg z=a6L|;)>B+%H-UKt)kHME_(rUbdEn zSYFyg92&2oWeWYU#Dq9;CB;I&Q>G9v>6*`|sk%w4J>(Bm3-|Fxcl92_R`adY%Odq( zc@L8JUTik(;a>^6KH5mU_><5ZFKS&7`r?Oeoy>VT-Zx0HRrAUSXil;6?8dy(1lkIF zOqEr0CR_vT8_#qr)sbv#>;B@U@3ix*)C!xuW`+4!H9NDT?7jD}mhp|1`qO4Uy>>78 zRldmrJSS(J#nKJQHYo;LsoV9WedJd`i#=y`)``yV;$~@2IAEoY+blxw+DHCCIG_#Y&J-%&nZLi*+)M0lvS(~#q~?AqVs@kvKm9o-75P`q%Mg0d0p#$xWfbUs1n^(3?kTVVFKLk9>Oc4>U`kSWNy< z+A&({32ptEMypVVU#SU&2K`Q1ihhdG_nf6-ud^uVnsyG`5@iyJl8;037z~=efN1P z@i~ixPCn76*Po|iJ?2kJ(7&IjQjfFfHB*=UNo_sO($!o&=}&4~fBfvld+n_p6k7Ku zU8!i+Mt$xtYU9~q*TPV(+g+fxQSArY$DyuR-*bW5cz$@u;+N}n7pSc#kH5tSV54rf uffApHapfd`C#3GuO>x%!iLS0fPwD4YIPQtNU2UVTIBl`sO5gK4W&R(!f98S! diff --git a/ftpCommandElaborate.c b/ftpCommandElaborate.c index dc10a81..900fccf 100644 --- a/ftpCommandElaborate.c +++ b/ftpCommandElaborate.c @@ -459,22 +459,21 @@ int parseCommandPasv(ftpDataType * data, int socketId) /* Create worker thread */ void *pReturn; int returnCode; - printf("\n data->clients[%d].workerData.workerThread = %d",socketId, (int)data->clients[socketId].workerData.workerThread); + //printf("\n data->clients[%d].workerData.workerThread = %d",socketId, (int)data->clients[socketId].workerData.workerThread); - //if (data->clients[socketId].workerData.threadIsAlive == 1) - // { + printf("\n data->clients[%d].workerData.threadHasBeenCreated = %d", socketId, data->clients[socketId].workerData.threadHasBeenCreated); if (data->clients[socketId].workerData.threadIsAlive == 1) { returnCode = pthread_cancel(data->clients[socketId].workerData.workerThread); + printf("\npasv pthread_cancel = %d", returnCode); } - printf("\npasv pthread_cancel = %d", returnCode); - //} - printf("\npasv join "); if (data->clients[socketId].workerData.threadHasBeenCreated == 1) + { returnCode = pthread_join(data->clients[socketId].workerData.workerThread, &pReturn); + printf("\nPasv join ok %d", returnCode); + } - printf("\npasv join ok"); data->clients[socketId].workerData.passiveModeOn = 1; data->clients[socketId].workerData.activeModeOn = 0; returnCode = pthread_create(&data->clients[socketId].workerData.workerThread, NULL, connectionWorkerHandle, (void *) &data->clients[socketId].clientProgressiveNumber); @@ -505,7 +504,9 @@ int parseCommandPort(ftpDataType * data, int socketId) returnCode = pthread_cancel(data->clients[socketId].workerData.workerThread); } if (data->clients[socketId].workerData.threadHasBeenCreated == 1) + { returnCode = pthread_join(data->clients[socketId].workerData.workerThread, &pReturn); + } data->clients[socketId].workerData.passiveModeOn = 0; data->clients[socketId].workerData.activeModeOn = 1; returnCode = pthread_create(&data->clients[socketId].workerData.workerThread, NULL, connectionWorkerHandle, (void *) &data->clients[socketId].clientProgressiveNumber); diff --git a/ftpData.c b/ftpData.c index 09c50c6..f4df1eb 100644 --- a/ftpData.c +++ b/ftpData.c @@ -603,7 +603,6 @@ void resetWorkerData(ftpDataType *data, int clientId, int isInitialization) DYNV_VectorGeneric_Init(&data->clients[clientId].workerData.directoryInfo); data->clients[clientId].workerData.theStorFile = NULL; data->clients[clientId].workerData.threadHasBeenCreated = 0; - } if (pthread_mutex_init(&data->clients[clientId].workerData.conditionMutex, NULL) != 0) diff --git a/ftpServer.c b/ftpServer.c index 06bead8..b065008 100644 --- a/ftpServer.c +++ b/ftpServer.c @@ -119,6 +119,7 @@ void *connectionWorkerHandle(void * socketId) int theSocketId = *(int *)socketId; pthread_cleanup_push(workerCleanup, (void *) &theSocketId); ftpData.clients[theSocketId].workerData.threadIsAlive = 1; + ftpData.clients[theSocketId].workerData.threadHasBeenCreated = 1; int returnCode; printf("\nWORKER CREATED!"); @@ -505,7 +506,7 @@ void runFtpServer(void) { break; } - + /* no data to check client is not connected, continue to check other clients */ if (isClientConnected(&ftpData, processingSock) == 0) { diff --git a/library/connection.c b/library/connection.c index 6275443..3c4103d 100644 --- a/library/connection.c +++ b/library/connection.c @@ -630,7 +630,7 @@ int evaluateClientSocketConnection(ftpDataType * ftpData) //Errors while accepting, socket will be closed ftpData->clients[availableSocketIndex].closeTheClient = 1; printf("\n2 Errno = %d", errno); - return 0; + return 1; } } else @@ -644,14 +644,9 @@ int evaluateClientSocketConnection(ftpDataType * ftpData) write(socketRefuseFd, messageToWrite, strlen(messageToWrite)); shutdown(socketRefuseFd, SHUT_RDWR); close(socketRefuseFd); - return 0; - } - else - { - ftpData->clients[availableSocketIndex].closeTheClient = 1; - printf("\n3 Errno = %d", errno); - return 1; } + + return 0; } } else diff --git a/library/openSsl.c b/library/openSsl.c index f50e7aa..7cea289 100644 --- a/library/openSsl.c +++ b/library/openSsl.c @@ -33,6 +33,19 @@ #include "openSsl.h" #include "fileManagement.h" + + + +#define MUTEX_TYPE pthread_mutex_t +#define MUTEX_SETUP(x) pthread_mutex_init(&(x), NULL) +#define MUTEX_CLEANUP(x) pthread_mutex_destroy(&(x)) +#define MUTEX_LOCK(x) pthread_mutex_lock(&(x)) +#define MUTEX_UNLOCK(x) pthread_mutex_unlock(&(x)) +#define THREAD_ID pthread_self() + +/* This array will store all of the mutexes available to OpenSSL. */ +static MUTEX_TYPE *mutex_buf = NULL; + void initOpenssl() { OpenSSL_add_all_algorithms(); /* Load cryptos, et.al. */ @@ -40,11 +53,14 @@ void initOpenssl() ERR_load_BIO_strings(); ERR_load_crypto_strings(); SSL_library_init(); + thread_setup(); } void cleanupOpenssl() { + thread_cleanup(); EVP_cleanup(); + } SSL_CTX *createServerContext() @@ -162,4 +178,54 @@ void ShowCerts(SSL* ssl) } + +void handle_error(const char *file, int lineno, const char *msg) +{ + fprintf(stderr, "** %s:%d %s\n", file, lineno, msg); + ERR_print_errors_fp(stderr); + /* exit(-1); */ +} + +static void locking_function(int mode, int n, const char *file, int line) +{ + if(mode & CRYPTO_LOCK) + MUTEX_LOCK(mutex_buf[n]); + else + MUTEX_UNLOCK(mutex_buf[n]); +} + +static unsigned long id_function(void) +{ + return ((unsigned long)THREAD_ID); +} + +int thread_setup(void) +{ + int i; + + mutex_buf = malloc(CRYPTO_num_locks() * sizeof(MUTEX_TYPE)); + if(!mutex_buf) + return 0; + for(i = 0; i < CRYPTO_num_locks(); i++) + MUTEX_SETUP(mutex_buf[i]); + CRYPTO_set_id_callback(id_function); + CRYPTO_set_locking_callback(locking_function); + return 1; +} + +int thread_cleanup(void) +{ + int i; + + if(!mutex_buf) + return 0; + CRYPTO_set_id_callback(NULL); + CRYPTO_set_locking_callback(NULL); + for(i = 0; i < CRYPTO_num_locks(); i++) + MUTEX_CLEANUP(mutex_buf[i]); + free(mutex_buf); + mutex_buf = NULL; + return 1; +} + #endif