From dceadb393e273236fd6e483f28e308a9141fb99a Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Tue, 20 Oct 2020 02:50:34 -0700 Subject: [PATCH] SCP: Add internal & cross platform support for tar and curl commands --- README.md | 2 + doc/simh_doc.doc | Bin 270336 -> 288768 bytes scp.c | 105 +++++++++++++++++++++++++++++++++++++++++++++++ scp.h | 2 + 4 files changed, 109 insertions(+) diff --git a/README.md b/README.md index b1ba2ff2..03e94b1e 100644 --- a/README.md +++ b/README.md @@ -411,6 +411,8 @@ Device simulator authors can easily schedule their device polling activities to GO UNTIL breakpoint Establish the breakpoint specified and go until it is encountered GO UNTIL "output-string" ... Establish the specified "output-string" as an EXPECT and go until it is encountered. RUNLIMIT Bound simulator execution time + TAR Manipulate file archives + CURL Access URLs from the web #### Command Processing Enhancements diff --git a/doc/simh_doc.doc b/doc/simh_doc.doc index 1086d016c75ff7b40d3ac1930783dd11f014e0bd..6a13325b60632b6d71ac71e7e656d3db2946f4ae 100644 GIT binary patch delta 66756 zcmc%S2YeJo-@x(R3oSq(1VRZV7kUdMq%MNedl!{*lmLMQNCKgQaG)rPNIPLgkuFUT zsZo%C^eR=ka}xeDAj3%ztKQcW3X8v0J^z9xgC7C@9b% zX%BBn3SwAh?C+N^Uy6wp8Lx!OsDi3Us_T<&o;=-euZf6d5mDe#ueN(%(?S9F$L6QoL>}t_^4P zTF7q0B-)zl6Sno-z0M{FiKQfIl7}Se^OrA_q#v37cYtJ;?s!Vltt#49Gke`#Rg&`N zl%!)JT1Z}oNm5bb_HuzFu^mZfgW~ZzuVq=T$6`s^z=}ne<&mT@Oen_&d@XGa1#|0p zFA~9MVY7H=@z7t3L}=sst60(gp|7sL>N(Pv5#y&BsmXewyuPfX&2fGe+xL;Bkn}Rq zH{`rw5d!5Or0OZvE8YULJMm&?Ak zHVIMh<;qs3roM>ttDXnv=^5je5;^D8&{Li<+3}rSr;8lF8Q?lyTTkqk9r8-jCu^JM zIw}vP2&eACiEK8b8u`zyk|jUo4Sn~wrkkP z*sXm+Pkk}VSnpD~Y$J-Ljd#V25$5F6=7a``t<~_f{1WJEiS^EJTP8HfZtc)u%irEL z^*OKOMQ^PX5Kq(*Fc0;V&tyZI2u&3qkH~lSt6iDB8h*(ZvDb!NY zCnRIUZcdoxQ=jy0hgr7xq^}chxsov_+`qm;W$pzEbiL}frSW=%8X+KA? zTrOBcpQDI5-dY~Qtg#8LCZc2Vv-B>c=O8S|ZvC)e%fdo>Y#FKLtG{Ph4a;AJ-mq<% z5$5PywnitkT9~J$dH)jjTMn^&Fb1B zJ}4ZiZy?-$PK4z~;Xr*3fhwB5PNbz_k@R#%+RsretBOSE>nL_}!h}S7NM5-VoJuy zs$zQT!^12midEI;gjww7umL}ReXHTNtw!2!HNs-fSR%sR5|NgJe%17CM7mo-u~aS| ztiQiv*;iaoSwxU!VsX7J7_plZY`IswmTjvM!P-`91lgr5qK3s(qJnL!jC@uieXAjs zH6_aHb3!bs8FNA{IZKw)w;F2OYKZ+-sVXI_>+6PD+LlV+YPjX6l6px;gxk-Fu=tnK zOD%$fWX3v?mf@xJeK#V~evV=}RVpOEwi`t#wvvl1C%i7{5vSG8595Q|(mebrFQR-;~Gk)f8= z0qLuTS&RXCt&R*6a|&pghzu9)S!lIj#Zyf#C6}^%6`;2Uk>U1Rh_IXtD6JFcuVmDbax1X)g$*7qq!m{U+omlCY6TP?&>El^o5 zW_hoSo-!ra5?@Bofl|Y^WU!}txUy_*?Q_~TVhJc`tY#awHBB{Yc(#m+j~y_if7IaE z_&&x)vHhb58HdFVj){#o4vvYobn`A|OR5qg-llK&b!D3a1EYH*aXcVa@ENQZG)bPx9%3lkgDlNfHf zS4OX@O1PL)$o4i7;%(|y3pO^1O6+A>UDnrDDvGT+2(fR5lt|0MvSsuoY|Vk=5{l(v zS$!u|Y*pWWiIAWmOVe^?wff13R`)|J0R?UKGbD(*U(R1&z*hGi7N}vlSXybsygrTv$ zqI*^I@@g7y>=Vtlqxx4BjrL!VPk+NNXEmd-eN6NS z%aO%J%*I}^iP1d=izP(8dAoiak-Dh<{S$_rX%7#}@^H1{_S>X{fjU@*Ci zi5hH-rq)L%8V5%YBE^Zu9z$aL_cA69iH{ex(Jsk@tlJ_xF~%W-h(a|lTTIOv`%wBG zKpd&PgQF4&TO5(>WsDt^o?nr=0Z~2s8HdDMU!rWgjWKEvNsQJa;w4rN>^ZWxarlUl z)flPPXQZ)mwO)hzdD@mI+k^TUW8=(GeY7GPq^&bNeHG8>;pDgHV6A|(=tRX6TI+7= zMIy7@^R!I#9Fo{Svs^^=>`A*ZNZV>-bl7Grii#*a5!Az(DHI0IHF;u$Y*1q>3EWRjpIYFem*f#>^#iQ51t8 zilY<)PzGgD4&@PnNKD2Qtif6w##LOyUw8_cD_J?WBz=b!kh!?5f~t@?ho6I+==}#z zvX>+s!eJc2Q5?fHT*nREzjEc|m6Q9E*DYJNj>lZ3P!gqUS@;gUEuO ze3A4pu2Vk4B{a{k$}i*+>bzbCFV*|5?Di??@FY1%t|YQ~6WLiW2XZ183c(kJQ3U>~ z?_{}x9HG{pEEnnV9#i_FANnH>Logm6;okLoN4Kn6G-DBu4`(czu_a*(lR9o$m0+8w zU0m^8*^q0TN8d*b<;W#F2QP00-Z-DD38qMK zO{8q`7?Mkt{Ovd8J&SVqev0hr=}_!JnlZz-$8!2wL4JoKuF^4w@5ZU|~6EJhC zTqy8!29{zOmg76Dz)EbxcI?1T98|-m$`!n>FnA48e(Iw-aJuZ9@7S?pUCtdlw{^wV zIWuO=5nUibWvn6U!*xC(Dv)cOwQ@=C2g_fO9o;Pi@xZG zcqHIsOu#4j6w@#d^Kmm}_uAb{XD#J1Vb;=FDQieWVV`6%3v<+yL@+3VY4wX_q zqKYsU&mxTK-!tXHYN|!f`x=$hImRXOIv1n6YU@}2qE;20tEXf5jcSYOvN3QO+24Vk z*oECVfP=V&+qi?fc&wJ3DOaeHpMKHGsDj&iU7Tayny@0_*g5KFMgf1@~X9qvp)&=-XOS^a|}%k0t-+#AXS+2uM8kp?m>4F0mJte5iIf zhsFhI0g!|Kw?6n4m3<}Y3ty>>^pt^?g=rq(QACp7#wHXlDoMStrl=Z~BpU7was_qD z4uhXMI*B27P56K$*-z!kODyasp1jlnGvukEqSUG)5H%2jH_;NU&>C&f0eujInP18! z%mWzs43qFVCc}a+unf!b9adl+wqpmZJJ)OOUD}SdF^6-})4ZyKrpbj~xohQrOIuej zt5+Nb{?k2dhgO-h-opaa24Bj?paaC<8m{AphzD-t4zg1_av&#i!5cHblFNElWS~A8 zr~|)}eZ4ZNl?AN~LDPSqu|ohnRAie6AIJ5>X6-w=(^7){UxUC|BQ z5u-NzO0JM?EQ2#=%Y|a*F|ZWNupHlEEw*7h{o8y;VQ1-I&R<=ZX*}1lP7W`4+^3*%3$UkxkQyJ3^YPxynegy#mV(Q zsiM<4F?SQ~f3e-qw2BtdlA@QNOBEG?Xo99_ftKil7{sD464lyskLa^F!o?OARDTBQbtqz>$uJKei&Xavgxi(C$?d4#ud>jJ#ub+fi zPYd_Ymjjx*rcd&ZCRe@D2Yt~G6YvQ>#Y9ZUd@R61EK&m($VJTGF}Mr6u?Kr`00(gy zS8x^Aa2J2$CH}J-*qzfMhrqp74O}3X{+CXR7s_SK=@)m_i#4aSVUbmFPgI5nvLQRf zd0I~7LK&1rIh02wR7OKILSr;R8+1c=M4<k=Jnfl&T4n@r=6bGqXqisb=!K~ zx8&cv?lZUGDDIH3BW`MXfXH-NltTqnL?wu;kSeH(#%O}3Xol8kgG3C%U<|=%Ov2}w zoQ|)NgUn&OGUo z{~B_?7VGd6HsU0H$0?k~CEUlKcz}m^j3@XDTn?J0XAC??5v~b~q8R+(4ZAogH>n+d8P#Z&5k)YLvs)xAt278u^#8uh|9V-#L4zUQK%!yISC;nj1y_ z8>5NZa=Bcjc54Rvq96Jr4v83qPw*)w;xkyV01L4Q->P0Kn43@Tw zNtR8wsN7cLVlVdLAb!OKT*M_@#w|RLJ<9*Aj(^7c z*_G$NRL8xwcgebr2Z+44L@PD$drtA*VQ>HjA`ycy93wCbU*T)a#v-i6I;_VA{D_~h z5u)4aXKcnv{EkyNjq|YI0p_fjBRc*n96J`5-W~Yf);U_F?-$F6wEcaL)Twfg{KK@F zdJR*LoRWQgp4*kp|IZ$f({`?{=3FJ0baP50l@?h}#RELVBRs}SkepwIPj=@7Xj3YRT6F7{R2 zZ`$}(JEzrxtec(EBJ;U1bDdnsT!4Y92t+khM+idE60Oi0ZO{RI5QA9sMSsL09tjwL zftZBPF&R@}!52uol6Ext=nqSNn09nr^0+J2)2{GHNT1q~siJ;sjn7s-*sM464vo*c z*XsaKyRQHLyi4Y`=~+Xy%TLBda895u`;&@Ws6%WQm2DjUL`(AjEwcL) zd~8NOBZ0>z6b+E1kvM?{rKOzGlF}?tCjBmhUlKPC3dq{+gLz-r?i4q)c36Au$|V`L zdJHco<<99NS;yvO7h_ThQBLcy9vhH^E%+6Oa2Q8auOHb7Pcrx?9^fG!;VGWMpBx$y zfYPW81vT*oYT-@1g*p(CsfYTwd-=D^JhuOK`L`ct|1kNZ$q7H)oo$=g#Ws=Mvyk=P zX)vL%Kc-vTz7536sqXx@Z<4Ck2J#K)9 zhGQ(IU@E3zx*E8Va+t;7I;_VABw-VN#y;%F0UX3{xQr`!be$XdU$2@vZYqz2aZ|@_ z`FhLsN7uQPuTPYCXnW%VYMEn1(@)&hy;I~oS~x0bOTA_|TpKx;0J+@S-{jCkBJNh3 z?OR4`qU?@t1++%nZi-Y|Wc@0x;RbHv4~U)eHtxWa9WyubATNAS5T)P`BLYyVIA0El zWI#bpyrH)Ind^;u40b_R*q?4?eV?^p8Hc)@<@Ls9hd}(dYq!%!0NgZg+EJ|}ZI0dE z=agc}U*x|Vx}z7O@jgal49u8-&oC1zzQinijoJ97IFplQPxCxRHsNP%MlyC_CobX= zF5?Pr<2hcy?h@mbpApb%`*^;{;!@jR?=GgAy5(Q(D4ML*k*p8%0V3Of<0WJcECzT$ z9Bi^92LezUWl$ECQ3Y?H7HZ>7G{QT07w?G;bWj7g(oxin!I2oH4ouFXqv&C|tg49f z9`ENfQd{0Gga5ORqL*4V(3>-t+C7TgzmL)Q5aaO;=3p-7VJVXEBYwh0{EW>=28VsK zw3UHha0X{_4(D+NSMd@O=L9kg$cyW}EWS~J)e{m>tA7=*$25aaO?KE`BxgE^Rsd02pj zSOjs6u^3CR4cpa$JF;lbf2!gTl~>mCH?`&M^7lWh<=eHYkXbGF-%jp#U?=usA1>iC zuHY)};06B1OGsP*7~p|y;A&0nwuk##IT@Tb8ed~J zzQG(U#(Ib=za;#Kjo5^rA+Da2u?44aS{=C0T`gBP?t8uN1s`KIr;z_YeZFA7?Edow zr^(eBoW&(v#x2~&9o)rZCIpjR7D`Fp$0MrD3%H0!c#J3b3o;!M-Y5Vc6ofAd zqX_6cQ~eLqO#3kshHyk65^v%ybU;URLTB_uA_n1R%Ffk07pseTe55W`Q&y)8iyzh@ zW1?jD(5@-()Nrcy;tv1oUQ-_V53ech3tY{6NG|H*zQ5nk{6wob&K1Pzqc$SzgE0id zFdQQwIwD8meW>^nv+xz>U@q2SJvJZ-TktCm;czydj;Mi0={q^e;GcK^``sYxzLRdD zSyg=3v+v6x&c*RRJ1>dVl9E}4_ZNY9h(~yeXDCR=OKFrrS(HN{YN0mX#9OF~dZ=HT zvv0bIrG{vPDD*&2^g>_s!$6pzjR)5 zN~<+l*ZKgF_xV_$wmmKvG%sav8FpYNc40RT;#b_lZQQ|KJVp+>ZE_+PJdp=^;e~w2 z4{uaKRb)}|v+?yI`)_B|jreCZe^+=$nf(9Uqs_GYu(_5Ly^x)bR+7JnL?Ei66Zlhkn&<+4S!27OKBe?5*Re6^!^gtlotF0ZKk&W)SfZx)$<)~ZR?RlP($0w5x{ z6+U!-^~O)gNv~WKj-U*EGvyG1P<%u0!5s9aL!%Ey;eFh#L=OO>x$f#+h^JZj3az*r zXpO(r0^1EO)zLi+71Yr)xI=Y*FyCstb3)#(Ca1`i%>}qMm0gmDm&+|>_s$sh6Q#5f zo3I(l*aDI0U$6~laSrE^iZtBAef)`M$W6xbATPX-AKoYcG9MxpWS|f#qB?@$uxC1b zX^Q>wmmEg*=TonF4Y5@DuUDa0e3>u(;}Y+kcK>mSQX-GRsDTD(h(>6P*650E=#D7# zL@z``)RsPo!G{q2=pW%@sQ41I@D&!6mC8x08CZkY-RHh|jXOg&(jQYp@Y}u@A3Xv4_6-Uyq}H zFnQ)!r2mzJ$yjZhuQ-^90PM#B{E9<33~>-SietEgyGX-5$Q)1%@IW@?MRAlsNtA*y zkf#8YhBz9PMW$7}HQ!_{s(x@mE@7+V*WUVPb-cf}yj^DhXO{~1v}%%B9rqJ~us<{_ zj4K?P^+UA6VcGdGt#F9e57i1s=Z=-RROrlr^|;MzALxf}h3;I1L$`hizt8ZWcpwhv zcnWViBMZO>ia<}ktfFf{R&>C%U z8+V{^8mVx4^Ak4W9L_`GG-?%ofWo0xsmTtBTeuBBjwZzshHxlohqrr*5t@@nX^(7= zw415oA)d7%F_3aIMW65bdg#!h^wrbYj<%_Mg<~2u36WYiGpKtm@RJMcqYTEL?ZnBD z9!Ymm)T8GdH9ca^fpQMe#t8AN5tY=J{W-sy9LJZB&rXs%&%7j0v2-!yQ@`J7$fd5i zB)95eA3Z&CnMKPQDFW4;K(#^$=8_ zVRRI)4d~#-Whf2VxA7|uL21OX4R!D#CPBq4ti<`$iJ)IcN#)?S$|D#X7u1zMsNcmw-43vWZ!hJudhgw9C7 z04OBFK0#q5CK3wXKqI(Ir1CaL7(JyUN$n^o?WwBx5>N3A$~#nB{D^C~4&`0EM?~-i zw&EA;!+t0oIB4KayoGo19tw2ihy(@QJNDudm4VS1hmSBDbFd4KZi&a$TenW$y0!b{ zCY~8)qILS!t5?P7t=0Uq4p^VX6o=8Px70B&`5_yAUPhf4Y$%ks2Rl2TDzY8{)UCmW zV(MoXWPefh3z{XL!ZGT5H^hNK5Pg?%_T* zb>gNNvUesy2Z{m24QV2r?6db}~n2+#u0T*!M+J?L~m1QbM}2YTXtjK)JehSHO>X(-g`H&6?;Mg7JHP@+jdGz0oM z2rV9}AXq%_KSf^_(xpfKKa{8vOUey*8)i-zc0c!tXLrL}SpR%{PvoG-# zg`yXL9(#B36|v1Mu68lBhR{BIB5ZodM2KEU`a?aNCJ$E+8K|JHKe4hww1Y;o9#rRm z>H&O8;GW@LZ+07W?!yrr6YvQ(BN^xL9NsYm8#OT&rN_LZ&sGk3miYE4s3i1|*#=Wzs33{9}i>-4!?c=A% z&RwWPctl7<2=4aJCi1NwNt17>bslOb0eRF@59RV^`*4U*gkdB`K}w)}aRz7MHGn%6 z*ga5^_Mk^1%@L*!;!Za%;u3NWW}id?KF2{kMv);D4NS;#56}~$*d^vT!>6IdXCzFq zOWZlT1S%v_A%S{A6%wf@Rw04z60DHGhJ)Dy+@)HvOZis}C*uPAhw?_Kg&~-Y?YN4f z!JFy?BxP+UK&BHk)ArHz!K^@e^6imf39K=IBf--^xpf(z#3F0sd zNk~P(kt~Nd(Fb2+7p|k&DCU8^;872~{ZD@tQ)%lneTbPi)3m>vH?>8@8cyqoRylX! zn0g*p)gPh^<;*5g37kWjSr{`5p$MH!1Vp4>6(tcN$AiOdb?z!dT{ZQV9IB@N#ZLM< zLCh+EF$6Idhj0zoG4XwRJunAzu@c|o0PY|oNs@XlO+GL7&ror?&hLLkbIzXnjD(5O zakueXOizQthV(a@#IUDC0PlM--wF3p1XkrD=b>UJ{Q}wnxVB;Y*heKiy|tiYKxB7VSkFcq%p^rg9D= z`D%SOd{)Np>|CAjr`%G#6=*1^E-PrrYi=&eQxC6wXzjyl3u$^p?V~9osYg(cmL3^B z0D5N2e?a#Do=W;d9rIjXp?bfNIk$O1r4eBm3w=q2rQbmZtid|0$1m7}z1W9?P(I`! zj0u>8$ykdG_!(Pp8}|`Bo-uP@Hl9lJh=C`_`4PK53Zf8<2tX*ppa>t+gM^l7 zi!R7Lfp9`WEyQ6FE+G3S9Q~mn2C-uJQ`$Uyg*l&6X;v_B7-vynB8Ph@2>*;%yoEYw ziB?F)1zbdtNwnZl&<))&54KA2H0`SOAN523m-h6jtukGGn)>v36;XRc9b&R|j&hza#WJXO&XfH}ukE>lwt>M$driV)pQ)VI3!=r~rkA#SVmUH#UExCWyPZ$6a6)wy@+ZE<+A_7PUlnoCZgtsNVAt^Jth>>L$5ke{wM zQD*k3Q=C#*m6TP70{hg4kkU{n&{M9ET0QmW7`_DOT-=yO%}*mc5Ahrd*|E>sFCu$T zEL1);!4M3^a;!r#w%{*3h4KX8x1T>k<{;>8Z2m*jt*@@SZt)eo6G-S^Msair8hm zA(v;2%PP04P!)ktPz$v&7UOXdSMUPzmn?(#F&fkG7nE7F!`O?{xPmfYQJ9fmF%xaj z7WZ%;MZabq6tqD*yp2k;nI?QgqYY&a2Vcy_8Cc8O`gH5!$&0^U+;Q>Z#boPmUN2ua zZ{ECh>y}%VTP(}9U%~cRH}7NX-Lt8Ai00KibXhIS!_Bnc@)!!J$$1Qga&uNE?q|?t zr54I=c*lckpmxY^2nQ)*PSp^Z8v7me1T z3Wl8OI!{9jv&iQ;q~Ze7a1VdsDV`zcT#hfu3oqn@f_8WtJ*Hplk|{e6%IWVdUl<&di+~;+6nF+ z-AQD}ty6%fyk0!D6hou?@U-$O2a3^E=<*(5-OH`uRBq(lv$^mT(1y#khcyOSz!M*Eo$r%Q&6IKzxbaxQ-jR@*TAg&oFj{ z=wz+0t}H~V>%y;1xR`}H6=gC=xj7A z5UL&CtO(}5>MY2mSE`$s{0QNtj5pSjASS) z>7K_7cz)0M92C^V8)${rh(>RWz*3~*0v;n^73-im+KS;HI5$LBjKcf)UR+76V?bHW zooGBjfi)bHpkM$#!pGPOiDQ?7nivdmEW3v)>zIz`PLC(gpWM55@A)5p{Bhwzig;Ym zAJ(ybDgG%b`%+R^OH8-Dh*$j~_LO?+gWQJF<{Y-x(kX&&1Lz#Q%mSweOb?Q4fN1#0 zHV?IC8H3Tb_w=LA^TE5$j-wUCjbSgfKRbh%%N6J{L++Wmvt={L9_mg{gRx)n?}@dD zw{xuB#o1kqdlTbDxQKxD^!woxY`|IM-9Tf4d>d@{Ar_I0l111jxS>F*w3~K*+_-a~ z-88oDBG%i-8AI094#|eR>@l9|F<(Owa}Ije%Sw@Dr6y&yeMg)z`iataPMt!EGEX6$ z^rW;B0uclSjnD*UjKvmgMJg`9-<(8~4h7@zIaGXuUvUKTkDOSb211~qJ%-{-{Dh52 z#x|V9Dfs-vwH6dKLJ#!BhZv9bFdyUTIFyYXH*f-v@f<#zxUT^PZ=epQVj5;(H})di z&*UBoI$|2;;2`d!jPelWqV>=qjM2vR(x)X&Y{#!P;!O0a0!KsJXyQ4+Nkr2igPkAK3TG>n4zXwl(PNu z3hVU5EF8jN9Klg2TR9oVUL34`p|n z>5yk27z*m59%3*EqcH}`E;fkXSb=r8h)Ym*V-Jla&LP`gS_dc?ik0{t&+r`n`#9gw zAMaUvBCI_UH*Fmi=`Re3J_+&UFl3#gb!%wTt+Ug+G@eR4)QJTRRT50124q&6dP$0s z(@QL?pgRZJHOT6;L_>HIM}jJ{dZ@S|I6m{ZXM|l3xgP4w!t5Mg*U*YvDSfrRhr`$9 z3hLwv;<)rcZl#@$ZoVhiQd3GADw*|CXh=zP!w?L`D*S+3sJx$J5r$$DwqZNG4sZxW z3rxf@97nl>bn2lCx+2@JTn?ZDD#B?$?5iIBk<=YB8g8no0S2R4)CvW!lO~09WR@<4 zv}BexCG+&r^pnV~_yybW94{arBGXXN5RH(4x%d??5qy~W=!ss4#bAuUN7#&H{DoXc z*!Q3aM{$h%VaM1HEexE-B~(97{|OYtU^#Xo=Wl!)0Nzm05uGpvQ*jEXaSzG~j;h!I zTW6oX*Ezgecbo{ZCt3G1+dMJCe&w*FHgfqguRNVTeVYAjoxh=~x-E(eFOFMz65bVM z?JkU2g-#EfyD&{B8tx*aMMYG3>)i=!Cn5hQ$q5cU)o$}NW)B~tx}x1g@m9~5F$BcB z3u0yg)C2d$NzN{C9XIgi@AS~(25ySsQ=EyQ1zMt!hzY(tt#$lxvdW$QWjyJ9K3oXS z;8Mx@zo%Gxdi2qZX`BK3aSuowq{P*fIL}qj7BJ*DOQQFXzMuT#Q@y)FDlQ6FNdakd zPOC!toYSk2#y8=dZiO^wq@CKz_!cN`>4No$(1m&QV(t1_dqA3TBMM zXPAWT*nvIR2jx8N1-d~=1%4i^oblDcFUBxP;5N0_752kKpu5 z-0%}GH*bpHYjb)$662>%+5hRcVNRVo{_F9bYu2dw{W+~q@HaG8XBMPwDy*HQ)o)gm zTjlheSU(3PaVXZN+y9DJ{Vxfc9=!Cx5hD>dJ!bat(qrWuqsHXl7K`H6VAuyj#6iU1 z@( z;baoQsDXaykC7OQarhMTu?*X>1G%r#VTH0Nhkn;+^DyC>dL-GY*xzV6!Nz5zy1Imtj3E%H@po1o0kvniPihbj30Jx@pU6mp+Bzplgy*N;|u6U(&vP z`&O@BI-8e$N!G{A&qwy_*P-9Yky<5qS<$dZyEfIWaOPn&-fHf#aEb*1z3p1SdBF}f}=QwlQ@r5TtvR>bf}^_f}o%iOxHPHTx8%9 zZXgZ!a36odc!MK26x2ao)I$_{AT2F5?cnaso9Qyw|E=Afnir2LC?QCXf?7hkDNR9BH}9$c%j^^h6IP!RxRA4{mZ31H=EI_FyDN!SaXt z%XPZotT)fCXFt~S3wjOw)KWP~%0&9%I8==3V+aw$6|@Ow=|%QacUCuqo3mw;`t+L6 zIFTbhjchRyCHptd#+xb_fsq)4FEI;iuommE5u30RM{pl{q7@QaAMNoD;*o#>Fc0Nv z7+iBk%g*#KF$dnaXm}8WU?@0_-*5s?AKc`d04GvU>^YIN=fs}W6Dv=gNKIWhW8wH2 z3ulNg35*#$So~REC|KJisJb_b666@3H&=l52Q0VMRW}41nyR;}8j2el)>U%{8k(si z13A!tP|;AxY+oN3E*W~wS~mhMBvB;SIhpoJY;~JHHjKp_%oVS9ctzX0Tn-@y(=Z)J zaSV0uQH#;=zT_cwye|&^JH=<|tT*AjL~py7S}MfQnHJAiJr-i9YW5QmIfXM&cpGXe*X3DBkLwt6%Up4bMTkp@L#|>=jWdvDUZ(c*&diGJT z^+221vXO13V-aXGpXxKMWkQm)BGG0pX>425v5d5t?VD&b&7#l-VF)JTGfc(;EW~2` zgpJsYUD%C%_zfrUJ8t1N?&2>z#S0XC$UOoSMj4bvc|;)cq39T6pe9@t6(^ zmSH`9#VMS|87Pm~mErxE>WXSm&=Bp>3yJsuUtukFAO-i4?+N=+{wJ)2hj@g?!mA&* zFa7@e@5c`EkJs&ReEhUl9NRJ;v}6z7+oT=kXc+f)KV|)Jr22W3VW835Hzs;iKYp4( z)Jbs?*ub$^v@(;M+6vUMoV1zW>oXk-PMg`enQcwSlGJAAYHpk9ShU*A_4-W5vesty zXklB^vGBE-`CBGEX)pF7$J(IH{9d2wSUt3vEnC^vbgVDh%v<_QTLrS!9c|`kt+h3) zWmTE<%9BxH)M{M~dkmG^Bt7X$g5&>L4bm!*edWpX7k&B&K`1(+6GmeUHsLUi;P1ag z*G?C8ULt+|`qiAD8kwI%Po18It!7ahbF-lHMir*H+wdW#XKb8K1jh3|rK17)5Q0!B z7=*!?gcVqclF!&rq2SwR?4OGn*p6NJ9j9;_m*M-I!v?~kpat5Zofvjw3)AloUYC%q?k9IdK>My?&|>d z)A+s=T?nGfOh2Xd5@)bO&7v?~l~{#DWtCus1onbR_z1X3y!0E>pP>NXlJP+ZLS>mF z0|Rl0#|VtXV?2RkkfjD_h-sLPRrmpl2lLPnpJF1e;|Bi5OL%6JrQFB^1@EFS;xGau zv%M=zqZ#-PE06|yt+?{nA5WjAq#W6E9FoYF7d)*h!$?LL*1 zw447&KFRuT(QY1J@Xz))e)pm=WB5Up5^79>p_}?5#?VpyK9-iOZ!DjBs7fTHBDr~2 zyo+g=j&HFXf8!-0^2kyo6x_po6wE72g`l7phG977V-KDp)QkBTjAT4O`Fu=6hkRyP zn#90fJQEZ1%TgoE#03O+GY#?Bh+G92M|*sXA8`|tlBMRD zj&nGVhi0B0LGhKP&M;v(M&LWFz)@KHo6|06FKMTFJuRLxeH_r|Z014Nv-Ppz^l2}x z56Db? zR}uFdxiZbq6I~PZ^NLY#@o^eDfEg7Zwy}Q1#yUgqD7Jk{7@1VQ3+KLfk-H*iPmU?cIbl` z^n)2=@gZhH#aCEZlwEfb152<5Yq0@)u@47u0x39!G~9#ruFQj*4{lyMd))dsyMO=w zZU4a|JL_;Z^Ybu6eRXZTp}HSuX|@khN-ZckyI89E-Zxw~?B!g1xVU(546ZhFXxpSG zBgIU|Xlpaev`cz2-ry;Fu~l323BES(F!QV{I+liYraU_7@h9Q}-Jx)_^(wcwt>;); z+RPMvrepDGGsnMUThp;TwVA>1+GgqntQD>{^PE1@v9z_BpS@>W)3NxqnUNiAGac)L zHuH);)3JhRGpBd7t+|lG&!{lk%(pt(W;)g&ZRRa~rel@TX3pxI^yEuXUXFE4n;B`c z&D1O1pS-tJOq-d)%y|^1$cZ+cy`~rq1PZ|yMNk=4P!$T|u>x1{Cm!G-=qHkLpa@E$ zGy)NVa6~{sJ-m&M=qkkWlz>6_5aY26`*0Q)a23~(-gR(CJg#57{`=ky3->PMZ|~j> z8}@FPx?$qPQKLrnAJv}=pu#aVD;`$cB=8aAW(kJMYQABHCHa?zpVvAH*iDX>Oi|Aa zGZf9}BWT+o%{sTTByt2T8d}7LcCm%iF+AE#->%xsF#CAvvC?BCVk2TAVj*H6vM#bc zTy4F89`05PIIcA7%5i1N0z)6eIySk0vNgMl%ym}FQJgbC6oVf^5r&WOF_vLDN|)fQ z5J50wEEZrt?jx+EEG1$s9^w(wkAA%+qH+O*gT#hE5NeeJJ!W=-K{=+|9#$q~ZcD zR+ZHs${UJ{pCcKf#)$9kR9H#PaC{0opx0>e%K2BuBa0Dr+G4q4P41cW=_N9fuq&rb z!`**kW69IQby~LkwrNr}gEpjYS!t+a_7#OP9wPa(p=aS+hL>V1c49Y<;2i9-CtYRy z8gAe&?&Bez;2EByP#`-IilI0HP!{C^sTqL`)I)tVKtnV`FGM32{Sk)`Fdp+T9}BPq z%kdpnU;~nH71wYbH&C=12|x)1q8eJatWWzX$^}lD#v)eh)ei9h*kk} z@m(;7J#4|$5E@WC0=EEd4>c@5p9tVfZGIKc>C?pP@ytims`(AY%!lk3IGE|ko=oRB ztn-f-tHO32wvfe$dVZC`zfpD?#`030My%+xFBW&RFKW|V_gQu8N<(3@C~v8VsEhWI zH&v&85_S6$FcEqCQaH}IsRk$o`x1G~c)n1sP*DeUVM2j0js-B`5DtrBb2um05gZp` zLc2&#EMY<$MV8v49ZW(^yg~DTUl3f2g9z%NCEkMxy)Xa+F$t4ls*N|F8*P;=DTX>zLg;7Wz`Pp|OltyO&POkdAbFJoPkZT(hk!z47M0~NlFI8Q+l z1R)qEBw`SjVk@rV5%M@a zyFfS^qZ3T%k2u650rRi~N!X23xP;5NjTiVE9!gh**YMe^kM7Z<)?gD-01_jZbz+WPvS#m><#IAiMu_flc*D- zh+ns8^&%C;DT+}mKCSfhQWK>`DV1qUlw%xZt-srQYO|rd zIjba?c)M36!{nM2$@^_W4ikFeGpxoj+(p&))LNL@a|HW8LhsgI17aTC5CqBj^ z9K;#iM80=v7+^vVOu{DIhW~ps90*1mnD7CX;wW---+`nm=J?;_!7%-5YOP>nZzI%CJe+3Y{PYwjx!Mom|%Z+`&Wjo zS3thzD5^_(8D&*InH9~eip5=#WZXDUnw@NTM;5<0WW5P4zCdC70hT;`^U%5Y+!ft$ zN-48adz}(wEvWc(@#S3p%1@*{(%ub{c76<@BCuOVU|i{R%KkO zi>jGNTTH^K=FJ_ z&QiB?S|O^Y^BbD7cvBN^l+_!*&6}GLjWO7RM<~*rgDyJ3gi)B@ofcv@12=FJ&rv*z z6JnUqA2YE6`*8(+J!pPl!bmK{0sM)QJ!xG~AMIhnK#a!*97Miev@U1}Q!g`p!wk&F z@3;rwXl@|Fgo*eOX$bDkRT4}XhHtPNdvFSQ`p|U4gm^5&Q9MUT4AapKQ?LnXC>$3{ zKOh?8UuhNWH>$M|F;Sv|h;quRjBMqTY4K!LG`3<~qeV2>eOwj9n;KwZ4o(9v8( zR3{U%TF<1dD}BQ2O6AxM!-$43ArT9(2RD&z5D7*jn9u{GumGEpiVOG?@m_@Zj z(~HqfDcVX9=AHvZDCJe?9e1w(QjLYyG${it?&>hpT0}s)17`rD- z=!$8$IE(|X_i!d+CAQ%q%8#Ju2_}rg_t=K*IEKe~g4`oH&cTF>xCD<;v_)tD6QVH( zKjSvM-zOn3VZi&e4c{|x41Ylx%?$LwLhOV87>?jDVLUeAA^cgl4onz`nK*<$QD`jP zXE0$TzQPd{9LF?7V=6ZF;OU?3h7Nt5ud}N4$DO-(qdvT{a9>rhnH4Gp>U>G4efHFP zh!w}4yN5Zdj@~bx7)@fdfZWrr9%NY!UZ)DUD}IVzG!5*U8^p)#^rywg46-@1YB7LX z;9Miz)dqJpA+uUwUjwr2ztXEndi9`oq@m^q)LHb!92`KN54mrJRv3UC@EOlJAG%^H zenq*DxRr|;NWxX*_?TW{w8I3vkdnSgle^e;XK26jzRBtRO;0qmVx#6L<$E48*tCiyH|1l<63V-MEgT6KTz0LOf<+7oOr7 zp2PGR$L=_u`d}>PU?UFVDxRY7B(5RwIy>O2ml6NNOewWaE%A|oP5j(XV^Jv1`Ohrx z?(*#}&za@7H`&p%s@2Y&+dEE6xt$br#bqfmDUV&c)S$v11G1hlzlhTk zVuC|PLe+ccT;9peq&m-CmU1&`^$VA!+)SGKz-1{nlU!mR>RJr^l$vwQ-AoE|jk()N zE-?>N-AtN))hYF1s+&n^9v+T0CQNlR$tBQXuEi0ix&+$oB$q&ksct5@1UgK0Gsz|P zVXm5N#U-scRR@?(BZDJ4|ff;+et2g4tI@xxND%@PI8HTxNC8Qy9V0rB$q&k zyT(4;HPCJ+xzzh`*W!q9jlJ7RF0qerjeUe`?A=asiG74?>?2%b?{<<)>?2%bAK@B% zx076AAK@B%{y#tGcHZqIm)J+R#y-+D_HHM+#6HqB_K~i!cRR@?_L0`uI~*eJo-;Te zGsFakBSNHWkhMt;+v%R_v>lfTM=m%mAtpGzlS{lKU5g;nU2t8BKyi(?HpwB?)vh?D z$z{Uat4>RZ2@a`NTr0FT$>E*6uRCqWWx}`{PD_XhPVeN>fGe)mU2(0*ZYR0KTCv93 zA=T$@Ii<;ILWtV>j>8h#1iMs+NI}jOSf6C~P9f^nyH4A2nGk%>X$djG>7B&!Gk?Y@ z5$`00CXFucG2h?QCx=n;k+_eQFerKm8ukq4gDVC}6eBPz7RIhUW0WsaXnxujI zax>xOh4W{Vb~g36X2`v*=H!Q|Irs?xe|19(k5cC53B@D4lZ#w8ceu5Ab+11P6rbkt zhi}BaJkzF^ZrrT-?V}f~6)79tIH|Pqu-&{mogN&PHa~1r$m_7=HS)%k;M937%?&1) zV%0B}J{eaiSMJVZ=YN}AY|QLg-^}`E^PtDEEjAZCkUgsD_Uh*=|5d8h$5o9@Pp0`l z+%)&>quK#&eT@5j&Y07dba*l>>8%%+^PQSrVDjpm_dh*Z&+Dz}HO_YGT(EwJMi&b= zA86R}dC@7;#y2nZefARHd~oi|?^mkL)~_!*ZO3DuLLZ*me&mz9t5e>q{Nnac_w#+U zzd`QxL5qG~(!OW&dObfJ*fC&7`*jr`xAKmA@V!9v_m@gye)y=-@7sz$jhGpExBYLsxAkkYc*~mccZYWF-Z0Oq zy2X+=j$aiX@pWA1Ejgl}obpNTdMft4n={9FO{~~-SM%%b)^9K$`D$+Xgh@ru4%rs* z-HiCrqZj{Nr*7!wBj0W)y1K#l6W13l8FDWBSVOzAO)u_^o!B@gSKBl7zQ`MS?@^PY zbyL5s7-g8*{Eu(rV?F-2Ap*pY5J|_wD=@symTz3vZW8 zKEF4%TgwIh0X>@CDm%Z9XS+?24~F&XH9!C2PfF+f{?oWO-n=@suW9QjOV7^+RKHlT zX$e372CK85=`+b3UTj#W3*%1h4;o~iKK{74+kB%xQ+OX$ha>k>)= zq6dO$4i5;;^w9g#6RN3!6aq^zOO|Z#`_5QKhG<@3AKCf+z8QIRM$$d!%DVTjdygi1 zm5Y5+s8GjWqSL&pmD_&*vw*InrzSrgJETGN1%W?(Hp-{LxKlxs_5?T0U-dz1=lQ=M zYV%o>^Q$iZy1(Y$ougKc8Bwh1vA;b%RsG8g%hpfpkW_F)o+F2CHP%PnPVhRPH(%u< z9ggm3IC5OyBZd1%uf36;V|te>y|1k}d!c6kItPOm4xbq6b+OB>#IZNejk`CaWQDK4 zm=Zd+%%e}|4BYc{?#B~W_IRMyP2Bcd=$_fzgHO0j^WQh`^T|q+Z|ZN^r#%hXa5FV( zS&6Y9uIe)3P~zmY8~go={Jl=MasMoO(B{4HOQqvKPXFNH(qMM$$l%)7rul#MONSQi z(rOJ_opRTj>&IEm25eYR`su`V)izH^*gX2=^ML^m>o>_)VprYAmLX{yhvumJ;V(Hy zCR8juf4Axs>%V`>*)kKH1{T<}^S!%G#;$f+zGhsdHY=_?y4LxA=$7DV-4t2IY5BCp$NDaN-}CD$Z6~h0nQ|bo;no=+pY`oM^8VqZVI5|E zaKTbOJ?`6#HBU!*-1_$f?bF|`?@O=L`#|FQZ5>u@C_DF;p!BG(`cC<EThaQ!~E#NB6|ElTizgr+jj2`DYK8?A!8Fr!MZ=@owZ=mkeefN&Z+sJ`K*`=yZ4SO z+}&?l*uR`-GzqTuPW=f-cfFTy^4y;r4|&HcB>c>=hG{t)m3|nPYkm8!TUWcxZ`IkS zw(s3#NxMA8l%2bz$CC~twXe?iOo;8a(5vzK76I*h+PZvpq3`sSC-cvmk=`=@-|qM? zY4p#kEqhjMc_s1ZAJ(+)U^&-+?QS(S$F!f^ziDmB>p6O8;qV_uJ!*RA=dFV`g~cbY zXyJEuveIqc4|y988P>GlheIoWw5{B^pc~z%jLq9S(yfDtFYgeDU=c6-6)>o}x@=noG{r0subTX}q*TRJG z)JGLdj-599N?`J=X;TYFrwyu5bn1h~^Lj@me!gr&y~7V$t?Bzb<-poJi8FgT-M?RB z&njEgVz1|(RVOyT+qv`Zk*-4qH$Ji2&vS_1?9%ItKljafw%omWeU=W)-TCgs<$32d z_YRxeweP~C11df%n>wmrM5V9-=R%IG_VlRMyj_E(t-lRlThMR9tmaQU1ayum(cL%V z?9s9*N!vEe*|cv*?s69%4XbgrT|`vq_u(7%c3m|*^mgwP1Je3b`(kq--G1}n4v0- z>#0_4NprPe>gJ~E*Ou&;!hX%wW|p6|gU!{7mfNY8L^Z);%a76)z{OOx|2!i@aV3uw z*Wz&=nF-96Fgod7PZH@s^}HmefLi%TF$bN!*d>hfCX0v<`OBcDFX;fGetuHW!D!}D zxcQOG3la*FViDRDB3lp)FHFXff<;K!1vQJZacEMEj3dy|p9~~0fTK%?#l=ZfRf6Jl?i7u2S+A7d=Qj5xLC#y$`~aX zgt zbFSq<(DHm=c}%K2h*Ta2`JiX!;}PXibn-Ycc@UI5fJvU7Bac&Au!wNTBP!(i0g{Jb zl9x-8Z%Mx_Iglmcuq1|+46KqMQ*uyBRzOJ>*NTY)lHNd8vV=0nj@Lm~3DGEhV$o)$lFB3prYYEzYb@YN`y&-(Yyi1^>_cZW__Ppn zC%^%UGvokQ$O*Z@9dHV{UGO4!gD>C=DVIWdl)^xnl%n7d0YLebl2F>B^0WbMnTPdV z?VN`-+>e4PHJ}zyV5J^VV5I?5L#&N#9a-!Ioq@6{-Jm=40LrXzUtOWx3b(x#%C39_ z+)-49z);|(pTb=mg?n`h_vI9PqHxkGqhTzJ1AL@#&p??3li`drY1H9IXPlLTE`|?; zKm`bc2xta9U_4BONiYRcU>{rs>7LwxTi}#~f3i>$YC|2U2T3pizJz301}oqo+{?kq z;>sDA6LNt&l!J!Q9eO}d=nYdL1rER=I1ESOCvb5i3Qz({LLk(DHZT;1!wC2U7Q!mn z4+m|$9fBk9Be>BCD+z&68s350&<)1GI2aETVFm1hi*OmPz*YDiO6MXyBUFbPPz$=i zL|6*TVFlP$@pc$)gOZ!m9<1O3rJyFXhfdHLy25z)A2!->Owte06k$6B*O|=2`O*{Zo==N@Xu6k znW#`4DnJ8h3{9XZ^oMz{i8Rj278bU`cDMvjz>_Pr7kGm&L_h+xf%eb=I>8v20jpsx ztb_G%8t#J|SNh!G4tXF58bWvI3B7E*^?^@e6P$vxa1OqMC*V&rp%TPFJXD2tFbHPA z=P(O2*bK+u4*Uc^!!MA_i)$HFgjk4!Dqw5N+s7~m=EDM51UumtJO_(6rx#eE1XP9= z&>G%{4`Bo>f~~LvcEUGs6%-#Xrce}$K>$>Nc0R;^I18VE4MxFYI0N_K0X&4qkk6Mo z0kxnm)Pn}l6UM?9@FgsTWw0N;=vOd#x3f&+HCc!+|1Y2M$Y==wm6!Q7u5b%WpHr}G36%2&IFa(Cd zT-XGs;4GYj@8AiPpa~cURiPSGhmJ5FmOwHrgB5TP?tv@K#axgZJfJ+-8u69{y`VSr zg=z2wY=fP!3wFabcnG-*Q=7pP@T1?&=%UmNLUBQ-~^n6)9?VCigGaoe+YmQa3YF}WHb#Wh^$RTg+8!(KL2GQ z_W}-#cF%^J#D5zL&1k#!fkBW`irdvtAdt&CmoP8)jTv4oy)(Q@d1v_S_c{Jnmu-K= zM&DqYwzpcEH`uYhU)$Sv=^Gt{?JtV!>mG#dZC9w*-LbykMsK-RYmYmt0nQR!AI+O|gQFjXIb0L&a7~26 zHIaW)`;m`{auX@4uV%SH7LoY~B9PP-F7a|Cyqu*rr zf-QT*BOH1m!eL#AaOj0dhhB&@ykL8!(nUJ-LZm}4MB+p9vPL@eLZp)E1)o3G`$#2f zc9L59CC@}UEPtfK@<%x=f0R-FSBf8H6#rGvL^&*fl*95zIV^vaUj9E8KT59zHnUZZ z&V?w4UWj(+g=mLfh{g-dcG8iXoqfycIbv^hi-^==!R(HTzEAS(GDv^ zv_m(8bn5ii(GFAp&ey&(TM&CW-;Uuu4N zkTs^42Z|Y@*vu~vvda7)qpS&60%>S=^{2y%h`KG9o=qf8c_>|x-fk@#sdZ=x*W)2p zjc6G+!LBL2pcXV#ThU?Z$oc_vTnEv|w0%q~bqvjHST_#2Wjx*HsdUSxqlU~uA6P>7 zd?`Ji6)1WuX`-iO;<1KS>^i>RN)vo1a?@d2&u8eYen*@C5<5ymXn-Eq5Fl=0`;Ifa7gOU2Qb8a+jU+k|q~41q~ff89Y?s*9-PR-94Z2utHiG8cjtaS$!yvoN&` zNiW_ZZ$u;_TNJJ2IHqA$XAn0+k>6NL>ThmVAB(L5{uzdU@{}TFGyaLhH;GUc|4hU` zckqvh%}4OhaQx%lj1C_Dsg8dZcVs>O`5ym-;hy@q<~p3fJtJ^WJnor}dn)0cA8^mV zmeRq;JsWV(Slk0Pr8NH8f`9tppDOq##}Rymf9m6(Tlgmg-|U64_-E!V0)>Bm#6P3) zjSz-^g7A+I`rA(2(;fHZ#y!t)Pe;xk6VAce`pa=YB&jx;8!T=Owi#F{2inlQxZNXM(u$q#W_ewD1jye^I;JL2l7+^ zs0cNn7BqvzF1)pej?fGGz)%7d zl)}o(ShY3%)Jis$ud|>q%4I9A1Sv%+kfWas0i`J=EP!Q@zYNtBx^o}{;A#aV3#c29 zPy_!?U}M#(19gct_)=dAK^15MB^y#_8WQUmDo-r*_<)i@au*~j7}*Vx2I}>|B~YLj z2LZkNp#nkg{_GeQ!%{c_-@#7<(M`Z>5<3O!6huP!9`3-I8Fc6&XeJeVrj3}e&=B5( z*5E&j4mQkBCQjhJ9PJirK?7(5ouKDIz`|VVN(Q65i&)<6x~wvO3^7rpA=nE^hnVmMSm3CQS?T1Mw?w< z6kSpDM9~pNKNQ_i^g_`IMIRJhP~JdyE4z7y3>)H+e= zM4b~=PSiM2;Y58C)lJm4UU>4=mg5{@W0qS%O1BMOZuGor|d5+e$X zC@-S8h|*#cg+-JVQB*`p5d}q*lPtwVPEi4)KBeC1jIzD`Q|gV*DBIgVrQYa_;{1Qxr_>vrQMMPSlyRNRx?cV_ zK3}>(|2KB{%03Ek`k9s7ni@Vxy=--MQ<~Iu(@sxT1GS*Z>LTOs{rchzO+9XW>&U9= zX0@f(cDw4QHQK1YuiJ;tP_wpjW8sU%H!x-2_N@;5^8=_bUfoO9$HsMwQy^9QeZ0ET zQap9}1ocCwKmYOTl@Y5zt;DD5^6VSzdt5D`<({UF&;I4^;e5GbociwU=`Wn|Qn3qY zrxvIQ`cKT=^af>T(@nLZv(!j8H+$9~iRhMDYPCPx{{IzMcYDQ9`jk$~*D&Z;IGRVW0dj9ON^ept;qDPG#apPqVIB{UDs8*J+h>gQ{_KTxwBdHM8e zeDp=(?RBNk82!xBPVISdYO(zSTJ62+M!j-c_PwYHECy;1_PyB1>m3TUDp2dSK&_xP zJY@L!b%Me6|MNn;?*BS=@&=|^5qEs9rQSZHPFH=p(zc@KDC44(+aRwl+T`!lRF$#q zT9xx^jGA0%xi;jyT2&=stG4C5+P$6JsFOCUyyQKjiaL_ntF&qbc`;|zzAS6AzH_3J zV1LQaJ)IO!r3ydIaN@fh_7U_w7$x6F8Lafy@?TYpIm;?n9#iT?Z$Hyae$9YC#mWBu z@^UV1!v%G-f9!P2$ed12E^byQXIItACa(YX`=KPd98yH(3vJRxwXI7XWjX?ZcK@Op z?w+8uXUu+gr2`}QyKBWRsYBfog358=PI**q>qWJEE`Oyy>$@u5l!4l;OX}RP0CJqJ z9)8eekTQ5TJ=Yj|c8qKaRt~ZU+PRA(dHbccNZpa9R(HyrYC3(g#dq^{wY9|(t-XIk z4Xie~hW9P{DOF@+r#9UUIeFM(UtSP)u15NS%;l@kg10XDPR1*7pmdf%4pBZi_|ylk zR!_@|nXJZ~*1v8kYW4&5N+EHT9D}${KE*-uN$*O_ctG32^PyVXsf?f2`k`99?8o%l zq`FS!6IUq*_@rl`+~!j{3eNQ4B+f`fh_meDyFN2+>%gMWkd7r8_;e)Qaf4Z zWG=UVtk$;7%3R*_SpD2BS}AC^{ZzgS4lr)aWXhRr#lAXPDPsSeXl52BR=QbX`{!u8 zS)rG=Rw0{NF|B2~8u7~RLbDkZwQpyT+3rGKn1wP`MGD&YRkI3+!BiSvvN}}BZ~sg( zGmFkmSwuFoLiVk_XJ!_j%`DTg_07x-|A*>f zs%d6s_&-$1bZ-?iGb0M2N-_JfRWvg*q7b4-A^eYKa%)0f;?@v73PEOOMifGn%qWyG zGc%$PqGU#)xS5#|g%G`Z7dA69q7b5FM#0z2%!on=N~aXX)6C3>LWmxPoMvW56hibU zSnX!TjgzGUH#v+bgy>Otu4rx3)u31Gj4;IOVffX=PVSV+OAbC>kHaHVJ0lSBdLVu= zwKF0SuSepJshtsucs&%?P3??W#OtxRWNK#wBVG^2Ia50$8u5BGPMF#m;fUA6aoE(( zh)290kG-aLMm*y5c@rcvovDwtlh)0|rk9DSYMm*y5c%+!x8S#kI+y&- zwKL*TS&v5rQ#&IbmGyX(Gqp3~QCW{ipsAe^kIH&H{7vnQcvRNoQP9-Rh(~2T9^R&Q zMm#F(@$fLUGvZN6kB6&?U0AkwRMO+&lxdf3YO;OwR%(4$>qdJEeZ=OR){V|qnd_o$ z$zvU8eV&n#p@n!_t5_GxcLP1GLo&a6;AuT<{fB(FBd@iv^{Fgf$!iU<@iY|08C)O- zxPlwxgj^t96L;`{JV0+v$qTY4FFw7&2Yewv6aYVv^@aE>3`L+Q6a#+_ zWT6xULTPxe<;`dH(){yTtv*5g9W39mF`as(s{bwYe}6 zgoK*fGjHoKmmMrerf9=_tTrcKRr}4yI@BqjlQziL`iV{a^kQ-XQ=0 delta 50104 zcmc%S1z^-j|M>qTEft_psL|3w1t?C93UYXHcXudW+;4%y9To^qaXSt;q`2$hcBQye zphXWW_J7arrflta?)!W0`Ln!svq?5P`OIW8nIzj0=d+DCU_afjsI4Ly|Jh4YW`Q?abx<&LeTBz?%fKWPCB*htduak7*}YS*=0 z*ZJ4xUo%cLf3~%BmWp0eqz{|Mwh(sfWc@)a4}EtfKzG8ZcB#pL^ByIZd3ni%otGB{a(n*oFlH^#>xYYDsUod^2l_YKOXI?&d zFp$`>V1E|GTPcuN@$Wx*&BJ`oOC)JKA3VJ@lO+Ajh{i0yNnclS$f&LRnIPUe>%=#U zf7Ra+x%9`XJW!vgJe~OZ7_@|9` z3MLy^#+7-JR7ac0s|RTkdLJc87E=HDA|bWP zYcm*U`(7|b0@siXZRNCAEqdDfGeKfG`MkfsH!ewgujN|fg@*YQW6<)I(59z+)m9+o z`0wxa?$(O~v}AuDo&0N4j~8G6lUM5T#?Ogu@~6yH2V1J!oRKqx6sg&E@RnQ|Z)GSJ z7#0!~5)vBZ?I}A}?b)wSuMYj&_v_NDr>%o$opO~c)vFZl*}6fm_S$Uvk@mT4OmB+o z>)Pl4{>E%duzt0DL2XK~`Da4(-|S0hQ$qCRvL!7oRNpyUQEf`7eo?ku*-hUQCejvA zG@z)zt^QzmZhd^VtlE5GVm{NGFh6~P?1A6km`(B5Pt2|@JIr5yAbYON#$|^Eh-K@i zXLr=!u5Yc+;GiuzEI`bqEi6!9-a%WRut5EOhomV%`uPqX+H65$ioI#c#l@0?M4H<) z&#AX@Oj>er^UnwCD>?dWpAR;l5~5$>s6{s{L|@t|={rO9iH;?;&xD#!3DdWCN{T?3 zez8+-V`@VE{EVpyw$+~-?xKI^ZAuLj^q-t^8y6Pp=dbs64*342g>%xB0R1n{q1u!H zz1fsN{Zr>6+LSW}3xdvy`^f5aUt< z{LE7psⅅ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 Vyee9l&lXyg9mcZYU-`^p{ueUA-LU`w diff --git a/scp.c b/scp.c index b3c1a757..fa8e1723 100644 --- a/scp.c +++ b/scp.c @@ -2428,6 +2428,23 @@ static const char simh_help2[] = "4-d\n" " Many tests are capable of producing various amounts of debug output\n" " during their execution. The -d switch enables that output\n" + "2File Tools\n" + " Tools to manipulate file containers and to tranfer files/data into or\n" + " out of a simulated environment are provided.\n\n" + " In general, these are tools natively found on the host operating system.\n" + " They are explicitly supported directly from SCP to allow for platform\n" + " neutral scripts that either test or build running environments for simh\n" + " users.\n\n" +#define HLP_TAR "*Commands File_Tools Tar_Tool" + "3Tar Tool\n" + " tar is an archiving utility\n\n" + " The quick and dirty help for the TAR command can be viewed with:\n\n" + "++sim> tar --help\n\n" +#define HLP_CURL "*Commands File_Tools Curl_Tool" + "3Curl Tool\n" + " curl is a utility to transfer a URL\n\n" + " The quick and dirty help for the TAR command can be viewed with:\n\n" + "++sim> curl --help\n\n" #define HLP_DISKINFO "*Commands DISKINFO" "2Disk Container Information\n" " Information about a Disk Container can be displayed with the DISKINFO command:\n\n" @@ -2503,6 +2520,8 @@ static CTAB cmd_table[] = { #if defined(USE_SIM_VIDEO) { "SCREENSHOT", &screenshot_cmd,0, HLP_SCREENSHOT, NULL, NULL }, #endif + { "TAR", &tar_cmd, 0, HLP_TAR, NULL, NULL }, + { "CURL", &curl_cmd, 0, HLP_CURL, NULL, NULL }, { "RUNLIMIT", &runlimit_cmd, 1, HLP_RUNLIMIT, NULL, NULL }, { "NORUNLIMIT", &runlimit_cmd, 0, HLP_RUNLIMIT, NULL, NULL }, { "TESTLIB", &test_lib_cmd, 0, HLP_TESTLIB, NULL, NULL }, @@ -6063,6 +6082,47 @@ void fprint_capac (FILE *st, DEVICE *dptr, UNIT *uptr) fprintf (st, "%s", sprint_capac (dptr, uptr)); } +static const char *_get_tool_version (const char *tool) +{ +char findcmd[PATH_MAX+1]; +char toolpath[PATH_MAX+1]; +char versioncmd[PATH_MAX+1]; +static char toolversion[PATH_MAX+1]; +FILE *f; + +#if defined(_WIN32) +#define FIND_CMD "where" +#define popen _popen +#define pclose _pclose +#else +#define FIND_CMD "which" +#endif +toolversion[0] = '\0'; +snprintf (findcmd, sizeof (findcmd), "%s %s", FIND_CMD, tool); +if ((f = popen (findcmd, "r"))) { + memset (toolpath, 0, sizeof(toolpath)); + do { + if (NULL == fgets (toolpath, sizeof(toolpath)-1, f)) + break; + sim_trim_endspc (toolpath); + } while (toolpath[0] == '\0'); + pclose (f); + if (toolpath[0]) { + snprintf (versioncmd, sizeof (versioncmd), "%s --version", tool); + if ((f = popen (versioncmd, "r"))) { + memset (toolversion, 0, sizeof(toolversion)); + do { + if (NULL == fgets (toolversion, sizeof(toolversion)-1, f)) + break; + sim_trim_endspc (toolversion); + } while (toolversion[0] == '\0'); + pclose (f); + } + } + } +return toolversion; +} + /* Show processors */ t_stat show_version (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, CONST char *cptr) @@ -6222,6 +6282,8 @@ if (flag) { char *proc_rev = getenv ("PROCESSOR_REVISION"); char *proc_arch3264 = getenv ("PROCESSOR_ARCHITEW6432"); char osversion[PATH_MAX+1] = ""; + char tarversion[PATH_MAX+1] = ""; + char curlversion[PATH_MAX+1] = ""; FILE *f; if ((f = _popen ("ver", "r"))) { @@ -6237,10 +6299,18 @@ if (flag) { fprintf (st, "\n Architecture: %s%s%s, Processors: %s", arch, proc_arch3264 ? " on " : "", proc_arch3264 ? proc_arch3264 : "", procs); fprintf (st, "\n Processor Id: %s, Level: %s, Revision: %s", proc_id ? proc_id : "", proc_level ? proc_level : "", proc_rev ? proc_rev : ""); strlcpy (os_type, "Windows", sizeof (os_type)); + strlcpy (tarversion, _get_tool_version ("tar"), sizeof (tarversion)); + if (tarversion[0]) + fprintf (st, "\n tar tool: %s", tarversion); + strlcpy (curlversion, _get_tool_version ("curl"), sizeof (curlversion)); + if (curlversion[0]) + fprintf (st, "\n curl tool: %s", curlversion); } #else if (1) { char osversion[2*PATH_MAX+1] = ""; + char tarversion[PATH_MAX+1] = ""; + char curlversion[PATH_MAX+1] = ""; FILE *f; if ((f = popen ("uname -a", "r"))) { @@ -6262,6 +6332,12 @@ if (flag) { } while (os_type[0] == '\0'); pclose (f); } + strlcpy (tarversion, _get_tool_version ("tar"), sizeof (tarversion)); + if (tarversion[0]) + fprintf (st, "\n tar tool: %s", tarversion); + strlcpy (curlversion, _get_tool_version ("curl"), sizeof (curlversion)); + if (curlversion[0]) + fprintf (st, "\n curl tool: %s", curlversion); } #endif if ((!strcmp (os_type, "Unknown")) && (getenv ("OSTYPE"))) @@ -13715,6 +13791,35 @@ else { return ret; } +/* Command interfaces to external tools + * tar + * curl + */ + + +static t_stat _process_cmd (const char *cmd, CONST char *cptr) +{ +char gbuf[CBUFSIZE*2]; + +if (_get_tool_version (cmd)[0]) { + snprintf (gbuf, sizeof (gbuf), "%s %s", cmd, cptr); + return spawn_cmd (0, gbuf); + } +else + return SCPE_NOFNC; +} + +t_stat tar_cmd (int32 flag, CONST char *cptr) +{ +return _process_cmd ("tar", cptr); +} + +t_stat curl_cmd (int32 flag, CONST char *cptr) +{ +return _process_cmd ("curl", cptr); +} + + /* Hierarchical help presentation * * Device help can be presented hierarchically by calling diff --git a/scp.h b/scp.h index e446dbf3..ebca12fd 100644 --- a/scp.h +++ b/scp.h @@ -117,6 +117,8 @@ t_stat echo_cmd (int32 flag, CONST char *ptr); t_stat echof_cmd (int32 flag, CONST char *ptr); t_stat debug_cmd (int32 flag, CONST char *ptr); t_stat runlimit_cmd (int32 flag, CONST char *ptr); +t_stat tar_cmd (int32 flag, CONST char *ptr); +t_stat curl_cmd (int32 flag, CONST char *ptr); t_stat test_lib_cmd (int32 flag, CONST char *ptr); /* Allow compiler to help validate printf style format arguments */