From 3aa189a1de6d58b727cdced6554e78cdc92ec7d5 Mon Sep 17 00:00:00 2001 From: PKing70 <39703314+PKing70@users.noreply.github.com> Date: Mon, 23 Mar 2020 22:01:46 -0700 Subject: [PATCH 001/236] Update CONTRIBUTING.md Revise link to contact us (no more support@splunk.com). --- CONTRIBUTING.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9e6c0ed3f..f65dc5022 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -33,7 +33,7 @@ To create a pull request: ## Contact us -You can reach Splunk support at _support@splunk.com_ if you have Splunk related questions. +You can [contact us][contact] if you have Splunk related questions. You can reach the Developer Platform team at _devinfo@splunk.com_. @@ -43,4 +43,5 @@ You can reach the Developer Platform team at _devinfo@splunk.com_. [answers]: http://answers.splunk.com/ [repo]: https://github.com/splunk/splunk-sdk-javascript [issues]: https://github.com/splunk/splunk-sdk-javascript/issues -[pulls]: https://github.com/splunk/splunk-sdk-javascript/pulls \ No newline at end of file +[pulls]: https://github.com/splunk/splunk-sdk-javascript/pulls +[contact]: https://www.splunk.com/en_us/about-splunk/contact-us.html#tabs/tab_parsys_tabs_CustomerSupport_4 From d6cea4ee2abc7c07a2092d5bc233c5f4f75dd2ba Mon Sep 17 00:00:00 2001 From: PKing70 <39703314+PKing70@users.noreply.github.com> Date: Mon, 23 Mar 2020 22:05:55 -0700 Subject: [PATCH 002/236] Update README.md Update contact us information (no more support@splunk.com). Addresses SCP-16043 --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 104100f15..b050dfba2 100644 --- a/README.md +++ b/README.md @@ -364,7 +364,7 @@ If you would like to contribute to the SDK, go here for more information: ### Support 1. You will be granted support if you or your company are already covered under an existing maintenance/support agreement. - Send an email to support@splunk.com and include "Splunk SDK for JavaScript" in the subject line. + Submit a new case in the [Support Portal][support] and include "Splunk SDK for JavaScript" in the subject line. 2. If you are not covered under an existing maintenance/support agreement, you can find help through the broader community at:
U)a*OD(eYgSi^cdTn}pqcPM(;S)2%1By^Wh%-CaC%>d9hi`7J zaxL7@;nhA>PE%s99&;z{8>VFgf{u!(-B-x7Of6ueme+ScryL`h(^qKE)DtieWY>-7 zgB)VJESQS4*1LU(2&@pgLvSt{(((C?K_V(rQk``i&5}ZPG;G^FiPlZ$7|-vEmMWlU z5lQ%iK2nu=h2wd_7>gK@vX=*AG+u~rQP$NwPC`ZA?4nh{3tui1x@bT6-;Rk3yDQ>d z?3qRD#+PeV7#FAa>s`Xwxsx_oRFcN$StW2=CW`=qObsT?SD^#^jM1Yk}PSPxJ zG@-_mnNU_)vM|iLRSI>UMp|hatyS}17R{10IuL0TLlupt>9dR s_SPQbv7BLYyC#qv16E-y@XZ= z-!p7I%#r-BVi$nQq3&ssRc_IC%R6$tA&^s_l46880~Wst3@>(|EO<}T4~ci~#!=e; zD)B>o%1+$ksURD1p7I-<3ehlFyVkqrySf&gg>Bp
0Z9?JaG|gyTZ{Cb8SdvAWVmFX7v2ohs!OCc!Udk zUITUpmZ33rKLI#(&lDj}c KA#dpL4Fil=$5pu_wi1XJR !llw` zSItPBDEdMHk2>c7#%lBxZ HHvtVUOZ$}v?=?AT~9!Jcqa@IJGuMg(s^7r>pcTrd)pS`{5Cu8WPey` z9)!!OUUY@L%9Q+bZa*S5`3f_|lFCPN6kdp_M2>{le8;cn^XUsPa+TUk47qd6)IBR% zk*&Ip?!Ge_gmmdj)BX}P_5o@VI2*wbZ^>UhFju}0gQZh!pP%4XT9{@w;G#b3XK8sN zF(7i$Jv(IM$8Akys9dhP^^~H2(7BfJp}yDW1#@!CL-!mGcSCnJ599WK9MV@yo_u$v MDeX2GIKR{Qf5okjU;qFB literal 0 HcmV?d00001 diff --git a/examples/browser/create-react-app/public/index.html b/examples/browser/create-react-app/public/index.html new file mode 100644 index 000000000..aa069f27c --- /dev/null +++ b/examples/browser/create-react-app/public/index.html @@ -0,0 +1,43 @@ + + + + + + + + + + + + + React App + + + + + + + diff --git a/examples/browser/create-react-app/public/logo192.png b/examples/browser/create-react-app/public/logo192.png new file mode 100644 index 0000000000000000000000000000000000000000..fc44b0a3796c0e0a64c3d858ca038bd4570465d9 GIT binary patch literal 5347 zcmZWtbyO6NvR-oO24RV%BvuJ&=?+<7=`LvyB&A_#M7mSDYw1v6DJkiYl9XjT!%$dLEBTQ8R9|wd3008in6lFF3GV-6mLi?MoP_y~}QUnaDCHI#t z7w^m$@6DI)|C8_jrT?q=f8D?0AM?L)Z}xAo^e^W>t$*Y0KlT5=@bBjT9kxb%-KNdk zeOS1tKO#ChhG7%{ApNBzE2ZVNcxbrin#E1TiAw#BlUhXllzhN$qWez5l;h +t^q#Eav8PhR2|T}y5kkflaK`ba-eoE+Z2q@o6P$)=&` z+(8}+-McnNO>e#$Rr{32ngsZIAX>GH??tqgwUuUz6kjns|LjsB37zUEWd|(&O!)DY zQLrq%Y>)Y8G`yYbYCx&aVHi@-vZ3|ebG!f$sTQqMgi0hWRJ^Wc+Ibv!udh_r%2|U) zPi|E^PK?UE!>_4`f`1k4hqqj_$+d!EB_#IYt;f9)fBOumGNyglU(ofY`yHq4Y?B%- zp&G!MRY<~ajTgIHErMe(Z8JG*;D-PJhd@RX@QatggM7+G(Lz8eZ;73)72Hfx5KDOE zkT(m}i2;@X2AT5fW?qVp?@WgN$aT+f_6eo?IsLh;jscNRp|8H}Z9p_UBO^SJXpZew zEK8fz|0Th%(Wr|KZBGTM4yxkA5CFdAj8=QSrT$fKW#tweUFqr0TZ9D ~a5lF{)%-tTGMK^2tz(y2v$i%V8XAxIywrZCp=)83p(zIk6@S5AWl|Oa2hF`~~^W zI;KeOSkw1O#TiQ8;U7OPXjZM|KrnN}9arP)m0v$c|L)lF`j_rpG(zW1Qjv$=^|p*f z>)Na{D&>n`jOWMwB^TM}slgTEcjxTlUby89j1)|6ydRfWERn3|7Zd2&e7?!K&5G$x z`5U3uFtn4~SZq|LjFVrz$3iln-+ucY4q$BC{CSm7Xe5c1J<=%Oagztj{ifpaZk_bQ z9Sb-LaQMKp-qJA*bP6DzgE3`}*i1o3GKmo2pn@dj0;He}F=BgINo};6gQF8!n0ULZ zL>kC0nPSFzlcB7p4 1doao2F7%6IUTi_+!L`MM4o*#Y#0v~WiO8 uSeAUNp=vA2KaR&=jNR2iVwG>7t%sG2x_~yXzY)7K& zk3p+O0AFZ1eu^T3s};B %6TpJ6h-Y%B^*zT&SN7C=N;g|#dGIVMSOru3iv^SvO>h4 M=t-N1GSLLDqVTcgurco6)3&XpU!FP6Hlrmj}f$ zp95;b)>M~`kxuZF3r~a!rMf4|&1=uMG$;h^g=Kl;H&Np-(pFT9FF@++MMEx3R BsK?AU0fPk-#mdR)Wdkj)`>ZMl#^<80kM87VvsI3r_c@_vX=fdQ`_9-d(xiI z4K;1y1TiPj_RPh*SpDI7U~^QQ?%0&!$Sh#?x_@;ag)P}ZkAik{_WPB4rHyW#%>|Gs zdbhyt=qQPA7`?h2_8T;-E6HI#im9K>au*(j4;kzwMSLgo6u*}-K`$_Gzgu&XE)udQ zmQ72^eZd|vzI)~!20JV-v-T|<4@7ruqrj|o4=JJPlybwMg;M$Ud7>h6g()CT@wXm` zbq=A(t;RJ^{Xxi*Ff~!|3!-l_PS{AyNAU~t{h;(N(PXMEf^R(B+ZVX3 z8y0;0A8hJYp@g+c*`>eTA|3Tgv9U8#BDTO9@a@gVMDxr(fVaEqL1tl?md{v^j8aUv zm&%PX4^| rX|?E4^CkplWWNv*OKM>DxPa z!RJ)U^0-WJMi)Ksc!^ixOtw^egoAZZ2Cg;X7(5xZG7yL_;UJ#yp*ZD-;I^Z9qkP`} zwCTs0*%rIVF1sgLervtnUo&brwz?6?PXRuOCS*JI-WL6GKy7-~yi0giTEMmDs_-UX zo=+nFrW_EfTg>oY72_4Z0*uG>MnXP=c0VpT&*|rvv1i StW;*^={rP 1y?Hv+6R6bxFMkxpWkJ>m7Ba{>zc_q zEefC3jsXdyS5??Mz7IET$Kft|EMNJIv7Ny8ZOcKnzf`K5Cd)&`-fTY#W&jnV0l2vt z?Gqhic}l}mCv1yUEy$%DP}4AN;36$=7aNI^*AzV(eYGeJ(Px-j<^gSDp5dBAv2#?; zcM Xv#aj>%;MiG^q^$0MSg-(uTl!xm49dH!{X0){Ew7ThWV~Gtj7h%ZD zVN-R-^7Cf0VH!8O)uUHPL2mO2tmE*cecwQv_5CzWeh)ykX8r5Hi`ehYo)d{Jnh&3p z9ndXT$OW51#H5cFKa76c<%nNkP~ FU93b5h-|Cb}ScHs@4Q#|}byWg;KDMJ#|l zE=MKD0c>*F@HDBcX@~QJH%56eh~jfPO-uKm}~t7Vk HxHT;)4sd+?Wc4* z>CyR*{w@4(gnYRdFq=^(#-ytb^5ESD?x<0Skhb%Pt?npNW1m+Nv`tr9+qN<3H1f<% zZvNEqyK5F gPsQ`QIu9P0x_}wJR~^CotL|n zk?dn;tLRw9jJTur4uWoX6iMm914f0AJfB@C74a;_qRrAP4E7l890P&{v<}>_&GLrW z)klculcg`?zJO~4;BBAa=POU%aN|pmZJn2{hA!d!*lwO%YSIzv8bTJ}=nhC^n }g(ld^rn#kq9Z3)z`k9lvV>y#!F4e{5c$tnr9M{V)0m(Z< z#88vX6-AW7T2UUwW`g<;8I$Jb!R%z@rCcGT)-2k7&x9kZZT66}Ztid~6t0jKb&9mm zpa}LCb`bz`{MzpZR#E*QuBiZXI#<`5qxx=&LMr-UUf~@dRk}YI2hbMsAMWOmDzYtm zjof16D=mc`^B$+_bCG$$@R0t;e?~UkF?7<(vkb70*EQB1rfUWXh$j)R2)+dNAH5%R zEBs^?N;UMdy}V};59Gu#0$q53$}|+q7CIGg_w_WlvE}AdqoS<7DY1LWS9?TrfmcvT zaypmplwn=P4;a8-%l^e?f`OpGb}%(_mFsL&GywhyN(-VROj`4~V~9bGv%UhcA|YW% zs{;nh@aDX11y^HOF XB$a7#Sr3cEtNd4eLm@Y#fc&j)TGvbbMwze zXtekX_wJqxe4NhuW$r}cNy|L{V=t#$%SuWEW)YZTH|!iT79k#?632OFse{+BT_gau zJwQcbH{b}dzKO?^dV&3nTILYlGw{27UJ72ZN){BILd_HV_s$WfI2DC<9LIHFmtyw? zQ;?MuK7g%Ym+4e^W#5}WDLpko%jPOC=aN)3!=8)s#Rnercak&b3ESRX3z{xfKBF8L z5%CGkFmGO@x?_mPGlpEej!3!AMddChabyf~nJNZxx!D&{@xEb!TDyvqSj%Y5@A{}9 zRzoBn0?x}=krh{ok3Nn%e)#~uh;6jpezhA)ySb^b#E>73e*frBFu6IZ^D7Ii&rsiU z%jzygxT-n*joJpY4o&8UXr2s%j^Q{?e- voloX`4DQyEK+DmrZh8A$) iWL#NO9+Y@!sO2f@rI!@jN@>HOA< z?q2l{^%mY*PNx2FoX+A7X3N}(RV$B`g&N=e0uvAvEN1W^{*W?zT1i#fxuw10%~))J zjx#gxoVlXREWZf4hRkgdHx5V_S*;p-y%JtGgQ4}lnA~MBz-AFdxUxU1RIT$`sal|X zPB6sEVRjGbXIP0U+?rT|y5+ev&OMX*5C$n2SBPZr`jqzrmpVrNciR0e*Wm?fK6DY& zl(XQZ60yWXV-|Ps!A {EF;=_z(YAF=T(-MkJXUoX zI{UMQDAV2}Ya?EisdEW;@pE6dt;j0fg5oT2dxCi{wqWJ<)|SR6fxX~5CzblPGr8cb zUBVJ2CQd~3L?7yfTpLNbt)He1D>*KXI^GK%<`bq^cUq$Q@uJifG>p3LU(!H=C)aEL zenk7pVg}0{dKU}&l)Y2Y2eFMdS( JS0}oZUuVaf2+K*YFNGHB`^YGcIpnBlMhO7d4@vV zv(@N}(k#REdul8~fP+^F@ky*wt@~&|(&&meNO>rKDEnB{ykAZ}k>e@lad7to>Ao$B zz<1(L=#J*u4_LB=8w+*{KFK^u00NAmeNN7pr+Pf+N*Zl^dO{LM-hMHyP6N!~`24jd zXYP|Ze;dRXKdF2iJG$U{k=S86l@pytLx}$JFFs8e)*Vi?aVBtGJ3JZUj!~c{ (rw5>vuRF$`^p!P8w1B=O!skwkO5yd4_XuG^QVF z`-r5K7(IPSiKQ2|U9+`@Js! g6sfJwAHVd|s?|mnC*q zp|B|z)(8+mxXyxQ{8Pg3F4|tdpgZZSoU4P&9I8)nHo1@)9_9u&NcT^FI)6|hsAZFk zZ+arl&@*>RXBf-OZxhZerOr&dN5LW9@gV=oGFbK*J+m#R-|e6(Loz(;g@T^*oO)0R zN`N=X46b{7yk5FZGr#5&n1!-@j@g02g|X>MOpF3#IjZ_4wg{dX+G9eqS+Es9@6nC7 zD9$NuVJI}6ZlwtUm5cCAiYv0(Yi{%eH+}t)!E^>^KxB5^L~a`4%1~5q6h>d;paC9c zTj0wTCKrhWf+F#5>EgX `sl%POl?oyCq0(w0xoL?L%)|Q7d|Hl92rUYAU#lc**I&^6p=4lNQPa0 znQ|A~i0ip@`B=FW-Q;zh?-wF;Wl5!+q3GXDu-x&}$gUO)NoO7^$BeEIrd~1Dh{Tr` z8s<(Bn@gZ(mkIGnmYh_ehXnq78QL$pNDi)|QcT*|GtS%nz1uKE+E{7jdEBp%h0}%r zD2|KmYGiPa4;md-t_m5YDz#c*oV_FqXd85d@eub?9N61QuYcb3CnVWpM(D-^|CmkL z(F}L&N7qhL2PCq)fRh}XO@U`Yn< ?TNGR4L(mF7#4u29{i~@k;pLsgl({YW5`Mo+p=zZn3L*4{JU;++dG9 X@eDJUQo;Ye2mwlRs ?y0|+_a0zY+Zo%Dkae}+MySoIppb75o?vUW_?)>@g{U2`ERQIXV zeY$JrWnMZ$QC<=ii4X|@0H8`si75jB(ElJb00H AB%>SlLR{!zO|C9P3zxw_U8?1d8uRZ=({Ga4shyN}3 zAK}WA(ds|``G4jA)9}Bt2Hy0+f3rV1E6b|@?hpGA=PI&r8)ah|)I2s(P5Ic*Ndhn^ z*T&j@gbCTv7+8rpYbR^Ty}1AY)YH;p!m948r#%7x^Z@_-w{pDl|1S4`EM3n_PaXvK z1JF)E3qy$qTj5Xs{jU9k=y%SQ0>8E$;x?p9ayU0bZZeo{5Z@&FKX>}s!0+^>C^D#z z>xsCPvxD3Z=dP}TTOSJhNTPyVt14VCQ9MQFN`rn!c&_p?&4<5_PGm4a;WS&1(!qKE z_H$;dDdiPQ!F_gsN`2>`X}$I=B;={R8%L~`>RyKcS$72ai$!2>d(YkciA^J0@X%G4 z4cu!%Ps~2JuJ8ex`&;Fa0NQOq_nDZ&X;^A=oc1&f#3P1(!5il>6?uK4QpEG8z0Rhu zvBJ+A9RV?z%v?!$=(vcH?*;vRs*+PPbOQ3cdPr5=tOc Lqmfx@#hOqX0iN)wTTO21jH<>jpmwRIAGw7`a|sl?9y9zRBh>(_%| zF?h|P7}~RKj?HR+q|4U`CjRmV-$mLW>MScKnNXiv{vD3&2@*u)-6P@h0A`eeZ7}71 zK(w%@R<4lLt`O7fs1E)$5iGb~fPfJ?WxhY7c3Q>T-w#wT&zW522pH-B%r5v#5y^CF zcC30Se|`D2mY$hAlIULL%-PNXgbbpRHgn<&X3N9W!@BUk@9g*P5mz-YnZBb*-$zMM z7Qq}ic0mR8n{^L|=+diODdV}Q!gwr?y+2m=3HWwMq4z)DqYVg0J~^}-%7rMR@S1;9 z7GFj6K}i32X;3*$SmzB&HW{PJ55kT+EI#SsZf} bD7nW^Haf}_gXciYKX{QBxIPSx2 Ma? zHQqgzZq!_{&zg{yxqv3xq8YV+`S}F6A>Gtl39_m;K4dA{pP$BW0oIXJ>jEQ!2V3A2 zdpoTxG&V=(?^q?ZTj2ZUpDUdMb)T?E$}CI>r@}PFPWD9@*%V6;4Ag>D#h>!s)=$0R zRXvdkZ%|c}ubej`jl?cS$onl9Tw52rBKT)kgyw~Xy%z62Lr%V6Y=f?2)J|bZJ5(Wx zmji`O;_B+*X@qe-#~`HFP<{8$w@z4@&`q^Q-Zk8JG3>WalhnW1cvnoVw>*R@c&|o8 zZ%w!{Z+M HeZ*OE4v *otkZqz11*s!#s^Gq>+o`8Z5 z^i-qzJLJh9!W- ;SmFkR 8HEZ JWiXk$40i6)7 zZpr=k2lp}SasbM*Nbn3j$sn0;rUI;%EDbi7T1ZI4qL6PNNM2Y%6{LMIKW+FY_yF3) zSKQ2 QSujzNMSL2r&bYs`|i2Dnn z=>}c0>a}>|uT!IiMOA~pVT~R@bGlm}Edf}Kq0?*Af6#mW9f9!}RjW7om0c9Qlp;yK z)=XQs(| 6GCadQbWIhYF=rf{Y)sj%^Id-ARO0=O^Ad;Ph+ z0?$eE1xhH?{T$QI>0JP75`r)U_$#%K1^BQ8z#uciKf(C701&RyLQWBUp*Q7eyn76} z6JHpC9}R$J#(R0cDCkXoFSp;j6{x{b&0yE@P7{;pCEpKjS(+1RQy38`=&Yxo%F=3y zCPeefABp34U-s?WmU#JJw2 3dcC{sPPFc2#J$ZgEN%zod}J~8dLm*fx9f6SpO zn^Ww3bt9-r0XaT2a@Wpw;C23XM}7_14#%QpubrIw5aZtP+CqIFmsG4`Cm6rfxl9n5 z7=r2C-+lM2AB9X0T_`?EW&Byv &K?HS4QLoylJ|OAF z`8atBNTzJ&AQ !>sOo$?^0xj~D(;kS$`9zbEGd>f6r`NC3X`tX)sWgWUUOQ7w=$TO &*j;=u%25ay-%>3@81tGe^_z*C7pb9y*Ed^H3t$BIKH2o+olp#$q;)_ zfpjCb_^VFg5fU~K)nf*d*r@BCC>UZ!0&b?AGk_jTPXaSnCuW110wjHPPe^9R^;jo3 zwvzTl)C`Zl5}O2}3lec=hZ*$JnkW#7enKKc)(pM${_$9Hc=Sr_A9Biwe*Y=T?~1CK z6eZ9uPICjy-sMGbZl$yQmpB&`ouS8v{58__t0$JP%i3R&%QR3ianbZqDs<2#5FdN@n5bCn^ZtH992~5k(eA|8|@G9u`wdn7bnpg|@{m z^d6Y`*$Zf2Xr&|g%sai#5}Syvv(>Jnx&EM7-|Jr7!M~zdAyjt*xl;OLhvW-a%H1m0 z*x5*nb=R5u><7lyVpN AR?q@1U59 zO+)QW wL8t zyip?u_nI+K$uh{ y)~}qj?(w0&=SE^8`_WMM zTybjG=999h38Yes7}-4*LJ7H)UE8{mE(6;8voE+TYY%33A>S6`G_95^5QHNTo_;Ao ztIQIZ_}49%{8|=O;isBZ?=7kfdF8_@azfoTd+hEJKWE!)$)N%HIe2cplaK`ry#=pV z0q{9w-`i0h@!R8K3GC{ivt{70IWG`EP |(1g7i_Q<>aEAT{5( yD z=!O?kq61VegV+st@XCw475j6vS)_z@efuqQgHQR1T4;|-#OLZNQJPV4k$AX1Uk8Lm z{N*b*ia=I+MB}kWpupJ~>!C@xEN#Wa7V+7{m4j8c?)ChV=D?o~sjT?0C_AQ 7B-vxqX30s0I_`2$in86#`mAsT-w?j{&AL@B3$;P z31G4(lV|b}uSD CIrjk+M1R!X7s 4Aabn<)zpgT}#gE|mIvV38^ODy@<&yflpCwS#fRf9ZX3lPV_?8@C5)A;T zqmouFLFk;qIs4rA=hh=GL~sCFsXHsqO6_y~*AFt93 9UYVBSx1s(=Kb&5;j7cSowdE;7()CC2|-i9Zz+_BIw8#ll~-tyH?F3{%`QCsYa*b#s*9iCc`1P1oC26?`g<9))EJ3%xz+O!B3 zZ7$j~To)C@PquR>a1+Dh>-a%IvH_Y7^ys|4o?E%3`I&ADXfC8++hAdZfzIT#%C+Jz z1lU~K_vAm0m8Qk}K$F>| >RPK%<1SI0(G+8q~H zAsjezyP+u!Se4q3GW)`h`NPSRlMoBjCzNPesWJwVTY!o@G8=(6I%4XHGaSiS3MEBK zhgGFv6Jc>L$4jVE!I?TQuwvz_%CyO!bLh94nqK11C2W$*aa2ueGopG8DnBICVUORP zgytv#)49fVXDaR$SukloYC3u7#5H)}1K21=?DKj^U)8G;MS)&Op)g^zR2($<>C*zW z;X7`hLxiIO#J`ANdyAOJle4V%ppa*(+0i3w;8i*BA_;u8gOO6)MY`ueq7stBMJTB; z-a0R>hT*}>z|Gg}@^zDL1MrH+2hsR8 zHc}*9IvuQC^Ju)^#Y{fOr(96rQNPNhxc;mH@W*m206>Lo<*SaaH?~8zg&f&%YiOEG zGiz?*CP>Bci}!WiS=zj#K5I}>DtpregpP_tfZtPa(N<%vo^#WCQ5BTv0vr%Z{)0q+ z)RbfHktUm|lg&U3YM%lMUM(f u}i#kjX9h>GYctkx9Mt_8{@s%!K_EI zScgwy6%_fR?CG JQtmgNAj^h9B#zma MDWgH55pGuY1Gv7D z;8Psm(vEPiwn#MgJYu4Ty9D|h!?Rj0ddE|&L3S{IP%H4^N!m`60ZwZw^;eg4sk6K{ ziA^`Sbl_4~f&Oo%n;8Ye(tiAdlZKI!Z=|j$5hS|D$bDJ}p{gh$KN&JZYLUjv4h{NY zBJ>X9z !xfDGY z+oh_Z&_e#Q(-}>ssZfm=j$D&4W4FNy&-kAO1~#3Im;F)Nwe{(*75(p=P^VI?X 0GFakfh+X-px4a%Uw@fSbmp9hM1_~R>?Z8+ ziy|e9>8V*`OP}4x5JjdWp}7eX;lVxp5qS} 0YZek;SNmm7tEeSF*-dI)6U-A%m6YvCgM(}_=k#a6o^%-K4{`B1+}O4x zztDT%hVb;v#?j`lTvlFQ3aV#zkX=7 ;YFLS$uIzb0E3lozs5`Xy zi~vF+%{z9uLjKvKPhP%x5f ~7-Gj+%5N`%^=yk*Qn{`> z;xj&ROY6g`iy2a@{O)V(jk&8#hHACVDXey5a+KDod_Z&}kHM}xt7}Md@pil{2x7E~ zL$k^d2@Ec2XskjrN+IILw;#7((abu;OJii&v3?60x>d_Ma(onIPtcVnX@ELF0aL?T zSmWiL3(dOFkt!x=1O!_0n(cAzZW+3nHJ{2S>tgSK?~cF ha^y(l@-Mr2W$%MN{#af8J;V*>hdq!gx=d0h$T7l}>91Wh07)9CTX zh2_ZdQCyFOQ)l(}gft0UZ G`Sh2`x-w`5vC2UD}lZs*5 zG76$akzn}Xi))L3oGJ75#pcN=cX3!=57$Ha=hQ2^lwdyU#a}4JJOz6ddR%zae%#4& za)bFj)z=YQela(F#Y|Q#dp}PJghITwXouVaMq$BM?K%cXn9^Y@g43$=O)F&ZlOUom zJiad#dea;-eywBA@e&D6Pdso1?2^(pXiN91?jvcaUyYoKUmvl5G9e$W!okWe*@a<^ z8cQQ6cNSf+UPDx%?_G4a IiybZHHagF{ ;IcD(dPO!#=u zWfqLcPc^+7Uu#l(B pxft{*4lv#*u7X9AOzDO z1D9?^jIo}?%iz(_dwLa{ex#T}76ZfN_Z-hwpus9y+4xaUu9cX}&P{XrZVWE{1^0yw zO;YhLEW!pJcbCt3L8~a7>jsaN{V3>tz6_7`&pi%GxZ=V3?3K^ U+*ryLSb)8^IblJ0 zSRLNDvIxt)S}g30?s_3NX>F?NKIGrG_zB9@Z>uSW3k2es_H2kU;Rnn%j5qP)!XHKE zPB2mHP~tLCg4K_vH$xv`HbRsJwbZMUV(t=ez;Ec(vyHH)FbfLg`c61I$W_uBB>i^r z&{_P;369-&>23R%qNIULe=1~T$(DA`ev*EWZ6j(B$(te}x1WvmIll21zvygkS%vwG zzkR6Z#RKA2!z!C%M!O>!=Gr0(J0FP=-MN=5t-Ir)of50y10W}j`GtRCsXBakrKtG& zazmITDJMA0C51&BnLY)SY9r)NVTMs);1<=oosS9g31l{4ztjD3#+2H7u_|66b|_*O z;Qk6nalpqdHOjx|K&vUS_6ITgGll;TdaN*ta=M_YtyC)I9Tmr~VaPrH2q b6sd~=AcIxV+%z{E&0@y=DPArw zdV7z(G1hBx7hd{>(cr43^WF%4Y@PXZ?wPpj{OQ#tvc$pABJbvPGvdR`cAtHn)cSEV zrpu}1tJwQ3y!mSmH*uz*x0o|CS<^w%&KJzsj~DU0cLQUxk5B!hWE>aBkjJle8z~;s z-!A=($+}Jq_BTK5^B!`R>!MulZN)F=iXXeUd0w5lUsE5VP*H*oCy( ;?S$p*TVvTxwAeWFB$jHyb0593)$zqalVlDX=GcCN1gU0 zlgU)I$LcXZ8Oyc2TZYTPu@-;7<4YYB-``Qa;IDcvydIA$%kHhJKV^m*- zxcvU4viy &Kr5GVM{IT>WRywKQ9;>SEiQD*NqplK-KK4YR`p0@JW)n_{TU3bt0 zim%;(m1=#v2}zTps=?fU5w^(*y)xT%1vtQH&}50ZF!9YxW=&7*W($2kgKyz1mUgfs zfV<*XVVIFnohW=|j+@Kfo!#liQR^x>2yQdrG;2o8WZR+XzU_nG=Ed2rK?ntA;K5B{ z>M8+*A4 !Jm^Bg}aW?R?6;@QG@uQ8&oJ{hFixcfEnJ4QH?A4>P=q29oDGW;L;= z9-a0;g%c`C+Ai!UmK$NC*4#;Jp<1=TioL=t^YM)<<%u#hnnfSS`nq63QKGO1L8RzX z@MFDq s1z ztYmxDl@LU)5acvHk)~Z`RW7=aJ_nGD!mOSYD>5Odjn@TK#LY{jf?+piB5AM-CAoT_ z?S-*q7}wyLJzK>N%eMPuFgN)Q_otKP;aqy=D5f! 7<=n(lNkYRXVpkB{TAYLYg{|(jtRqYmg$xH zjmq ?B(RE4 zQx^~Pt}gxC2~l=K$$-sYy_r$CO(d=+b3H1MB*y_5g6WLaWTXn+TKQ|hNY^>Mp6k*$ zwkovomhu776vQATqT4blf~g;TY(MWCrf^^yfWJvSAB$p5l;jm@o#=!lqw+Lqfq>X= z$6~kxfm7`3q4zUEB;u4qa#BdJxO!;xGm)wwuisj{0y2x{R(IGMrsIzDY9LW>m!Y`= z04sx3IjnYvL<4JqxQ8f7qYd0s2Ig%`ytYPEMKI)s(LD}D@EY>x`VFtqvnADNBdeao zC96X+MxnwKmjpg{U&gP3HE}1=s!lv&D{6(g_lzyF3A`7Jn*&d_kL<;dAFx!UZ>hB8 z5A*%LsAn;VLp>3${0>M?PSQ)9s3}|h2e?TG4_F{}{Cs>#3Q*t$(CUc}M)I}8cPF6% z=+h(Kh^8)}gj(0}#e7O^FQ6`~fd1#8#!}LMuo3A0bN`o}PYsm!Y}sdOz$+Tegc=qT z8x`PH$7lvnhJp{kHWb22l;@7B7|4yL4UOOVM0MP_>P%S1Lnid)+k9{+3D+JFa#Pyf zhVc#&df87APl4W9X)F3pGS>@etfl=_E5tBcVoOfrD4hmVeTY-cj((pkn%n@EgN{0f zwb_^Rk0I#i ZuHK!l*lN`ceJn(sI{$Fq6nN& zE<-=0_2WN}m+*ivmIOxB@#~Q-cZ>l136w{#TIJe478`KE7@=a{>SzPHsKLzYAyBQO zAtuuF$-JSDy_S@6GW0MOE~R)b;+0f%_NMrW(+V#c_d&U8Z9+ec4=HmOHw?gdjF(Lu zzra 83M_BoO-1b3;9`%&DHfuUY)6YDV21P$C!Rc?mv&{lx#f8oc6?0?x zK08{WP65?#>(vPfA-c=MCY| %*1_<3D4NX zeVTi-JGl2uP_2@0F{G({pxQOXt_d{g_CV6b?jNpfUG9;8yle-^4KHRvZs-_2siata zt+d_T@U$&t*xaD22(fH(W1r$Mo?3dc%Tncm=C6{V9y{v&VT#^1L04vDrLM9qBoZ4@ z6DBN#m57hX7$C(=#$Y5$bJmwA$T8jKD8+6A!-IJwA{WOfs%s}yxUw^?MRZjF$n_KN z6`_bGXcmE#5e4Ym)aQJ)xg3Pg0@k`iGuHe?f(5LtuzSq=nS^5z>vqU0EuZ&75V%Z{ zYyhRLN^)$c6Ds{f7*FBpE;n5iglx5PkHfWrj3`x^j^t z7ntuV`g!9Xg#^3!x)l*}IW=(Tz3>Y5l4uGaB&lz{GDjm2D5S$CExLT`I1#n^lBH7Y zDgpMag@`iETKAI=p<5E#LTkw zVR@=yY|uBVI1HG|8h+d;G-qfuj}-ZR6fN>EfCCW z9~wRQoAPEa#aO?3h?x{YvV*d+NtPkf&4V0k4|L=uj!U{L+oLa(z#&iuhJr3-PjO3R z5s?=nn_5^*^Rawr>>Nr@K(jwkB#JK-=+HqwfdO<+P5byeim)wvqGlP-P|~Nse8=XF zz`?RYB|D6SwS}C+YQv+;}k6$-%D(@+t14BL@vM z2q%q?f6D-A5s$_WY3{^G0F131bbh|g!}#BKw=HQ7mx;Dzg4Z*bTLQSfo{ed{4}NZW zfrRm^Ca$rlE{Ue~uYv>R9{3s mwATcdM_6+yWIO z*ZRH~uXE@#p$XTbCt5j7j2=86e{9>HIB6xDzV+vAo&B?KUiMP|ttOElepnl%|DPqL b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN literal 0 HcmV?d00001 diff --git a/examples/browser/create-react-app/public/manifest.json b/examples/browser/create-react-app/public/manifest.json new file mode 100644 index 000000000..080d6c77a --- /dev/null +++ b/examples/browser/create-react-app/public/manifest.json @@ -0,0 +1,25 @@ +{ + "short_name": "React App", + "name": "Create React App Sample", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + }, + { + "src": "logo192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "logo512.png", + "type": "image/png", + "sizes": "512x512" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/examples/browser/create-react-app/public/robots.txt b/examples/browser/create-react-app/public/robots.txt new file mode 100644 index 000000000..e9e57dc4d --- /dev/null +++ b/examples/browser/create-react-app/public/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/examples/browser/create-react-app/src/App.css b/examples/browser/create-react-app/src/App.css new file mode 100644 index 000000000..50b63a363 --- /dev/null +++ b/examples/browser/create-react-app/src/App.css @@ -0,0 +1,18 @@ +.App { + text-align: center; +} + +.App-header { + background-color: #282c34; + min-height: 100vh; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + font-size: calc(10px + 2vmin); + color: white; +} + +.App-link { + color: #61dafb; +} diff --git a/examples/browser/create-react-app/src/App.js b/examples/browser/create-react-app/src/App.js new file mode 100644 index 000000000..1366634d3 --- /dev/null +++ b/examples/browser/create-react-app/src/App.js @@ -0,0 +1,24 @@ +import React from 'react'; +import './App.css'; +import SplunkJsExample from './SplunkJsExample'; + +function App() { + return ( + ++ ); +} + +export default App; diff --git a/examples/browser/create-react-app/src/App.test.js b/examples/browser/create-react-app/src/App.test.js new file mode 100644 index 000000000..4db7ebc25 --- /dev/null +++ b/examples/browser/create-react-app/src/App.test.js @@ -0,0 +1,9 @@ +import React from 'react'; +import { render } from '@testing-library/react'; +import App from './App'; + +test('renders learn react link', () => { + const { getByText } = render(+ ++ 1. Edit
+ +src/splunkConfig.jsto input your Splunk host/port information and restart this project usingnpm start. ++ 2. Enter credentials below and click
+ +Submitto login, run a sample search, and display the results. ++ + ); + const linkElement = getByText(/learn react/i); + expect(linkElement).toBeInTheDocument(); +}); diff --git a/examples/browser/create-react-app/src/Login.css b/examples/browser/create-react-app/src/Login.css new file mode 100644 index 000000000..ce61d5161 --- /dev/null +++ b/examples/browser/create-react-app/src/Login.css @@ -0,0 +1,27 @@ +label { + padding: 10px; +} + +input { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', + 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', + sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + padding: 5px; + margin: 5px; + border: 2px solid #ccc; + -webkit-border-radius: 5px; + border-radius: 5px; +} + +button { + cursor: pointer; + font-size: calc(10px + 2vmin); + background-color: black; + color: #61dafb; + -webkit-border-radius: 5px; + border-radius: 5px; + padding: 10px; + margin: 10px; +} \ No newline at end of file diff --git a/examples/browser/create-react-app/src/Login.js b/examples/browser/create-react-app/src/Login.js new file mode 100644 index 000000000..f6f380abd --- /dev/null +++ b/examples/browser/create-react-app/src/Login.js @@ -0,0 +1,37 @@ +import React from 'react'; +import './Login.css'; + +class Login extends React.Component { + constructor(props) { + super(props); + this.handleUsernameChange = this.handleUsernameChange.bind(this); + this.handlePasswordChange = this.handlePasswordChange.bind(this); + this.handleClickSearch = this.handleClickSearch.bind(this); + } + + handleUsernameChange(e) { + this.props.onUsernameChange(e.target.value); + } + + handlePasswordChange(e) { + this.props.onPasswordChange(e.target.value); + } + + handleClickSearch(e) { + this.props.onClickSearch(); + } + + render() { + return ( + + ++ ); + } + } + + export default Login; \ No newline at end of file diff --git a/examples/browser/create-react-app/src/SplunkJsExample.css b/examples/browser/create-react-app/src/SplunkJsExample.css new file mode 100644 index 000000000..452e89009 --- /dev/null +++ b/examples/browser/create-react-app/src/SplunkJsExample.css @@ -0,0 +1,37 @@ +table.Results { + border: 1px solid rgb(45, 45, 45); + background-color: rgb(175, 175, 175); + width: calc(100% - 50px); + text-align: left; + border-collapse: collapse; + margin: 25px; +} + +table.Results td, table.Results th { + border: 1px solid rgb(175, 175, 175); + padding: 3px 2px; +} + +table.Results tbody td { + font-size: 14px; +} + +table.Results tr:nth-child(odd) { + color: black; +} + +table.Results tr:nth-child(even) { + background: rgb(75, 75, 75); + color: white; +} + +table.Results thead { + background: rgb(50, 50, 50); + border-bottom: 2px solid rgb(225, 225, 225); +} + +table.Results thead th { + font-size: 15px; + font-weight: bold; + color: white; +} diff --git a/examples/browser/create-react-app/src/SplunkJsExample.js b/examples/browser/create-react-app/src/SplunkJsExample.js new file mode 100644 index 000000000..648974fdf --- /dev/null +++ b/examples/browser/create-react-app/src/SplunkJsExample.js @@ -0,0 +1,119 @@ +import React from 'react'; +import './SplunkJsExample.css'; +import Login from './Login'; +import * as splunkjs from 'splunk-sdk'; + +// jquery.ajax is used for the underlying http client in ProxyHttp +window.$ = require('jquery'); + +//const splunkjs = require('splunk-sdk'); +const Async = splunkjs.Async; +const clientHttp = require('splunk-sdk/lib/platform/client/proxy_http'); + +class SplunkJsExample extends React.Component { + constructor(props) { + super(props); + // We define handlers here as well as LoginForm in order to lift + // the username and password states up so that they can be used + // here to run and populate search results. + // More info on lifting state: https://reactjs.org/docs/lifting-state-up.html + this.handleUsernameChange = this.handleUsernameChange.bind(this); + this.handlePasswordChange = this.handlePasswordChange.bind(this); + this.handleSearch = this.handleSearch.bind(this); + this.state = { + username: '', + password: '', + query: 'index=_internal | head 3', + results: [], + }; + } + + handleUsernameChange(username) { + this.setState({username: username}); + } + + handlePasswordChange(password) { + this.setState({password: password}); + } + + handleSearch() { + var http = new clientHttp.ProxyHttp('/proxy'); + var service = new splunkjs.Service(http, { + username: this.state.username, + password: this.state.password, + scheme: 'https', // we have configured this example for HTTPS + host: 'localhost', // this is the host for our http-proxy-middleware server, do not change + port: '3000' // this is the port for our http-proxy-middleware server, do not change + }); + + var that = this; + Async.chain([ + // First, we log in + function(done) { + service.login(done); + }, + // Perform the search + function(success, done) { + if (!success) { + done('Error logging in'); + } + + service.search('search index=_internal | head 3', {}, done); + }, + // Wait until the job is done + function(job, done) { + job.track({}, function(job) { + // Ask the server for the results + job.results({}, done); + }); + }, + // Print out the statistics and get the results + function(results, job, done) { + // Print out the statistics to the console + console.log('Splunk Search Job Statistics:'); + console.log(` Event Count: ${job.properties().eventCount}`); + console.log(` Disk Usage: ${job.properties().diskUsage} bytes`); + console.log(` Priority: ${job.properties().priority}`); + console.log(results); + that.setState({results: results}); + }], + function(err) { + console.error(err); + } + ); + } + + render() { + const results = this.state.results; + + // Find the index of the fields we want + const timeIndex = (results.fields || []).indexOf('_time'); + const sourceIndex = (results.fields || []).indexOf('source'); + const sourcetypeIndex = (results.fields || []).indexOf('sourcetype'); + const rawIndex = (results.fields || []).indexOf('_raw'); + + return ( +
+ +
+
+++ ); + } + } + + export default SplunkJsExample; \ No newline at end of file diff --git a/examples/browser/create-react-app/src/index.css b/examples/browser/create-react-app/src/index.css new file mode 100644 index 000000000..ec2585e8c --- /dev/null +++ b/examples/browser/create-react-app/src/index.css @@ -0,0 +1,13 @@ +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', + 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', + sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +code { + font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', + monospace; +} diff --git a/examples/browser/create-react-app/src/index.js b/examples/browser/create-react-app/src/index.js new file mode 100644 index 000000000..f5185c1ec --- /dev/null +++ b/examples/browser/create-react-app/src/index.js @@ -0,0 +1,17 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import './index.css'; +import App from './App'; +import * as serviceWorker from './serviceWorker'; + +ReactDOM.render( ++ + Results
++ +
++ + + {(results.rows || []).map((result, i) => { + return _time source sourcetype _raw ; + })} + {result[timeIndex]} {result[sourceIndex]} {result[sourcetypeIndex]} {result[rawIndex]} + + + , + document.getElementById('root') +); + +// If you want your app to work offline and load faster, you can change +// unregister() to register() below. Note this comes with some pitfalls. +// Learn more about service workers: https://bit.ly/CRA-PWA +serviceWorker.unregister(); diff --git a/examples/browser/create-react-app/src/serviceWorker.js b/examples/browser/create-react-app/src/serviceWorker.js new file mode 100644 index 000000000..b04b771a8 --- /dev/null +++ b/examples/browser/create-react-app/src/serviceWorker.js @@ -0,0 +1,141 @@ +// This optional code is used to register a service worker. +// register() is not called by default. + +// This lets the app load faster on subsequent visits in production, and gives +// it offline capabilities. However, it also means that developers (and users) +// will only see deployed updates on subsequent visits to a page, after all the +// existing tabs open on the page have been closed, since previously cached +// resources are updated in the background. + +// To learn more about the benefits of this model and instructions on how to +// opt-in, read https://bit.ly/CRA-PWA + +const isLocalhost = Boolean( + window.location.hostname === 'localhost' || + // [::1] is the IPv6 localhost address. + window.location.hostname === '[::1]' || + // 127.0.0.0/8 are considered localhost for IPv4. + window.location.hostname.match( + /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/ + ) +); + +export function register(config) { + if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { + // The URL constructor is available in all browsers that support SW. + const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href); + if (publicUrl.origin !== window.location.origin) { + // Our service worker won't work if PUBLIC_URL is on a different origin + // from what our page is served on. This might happen if a CDN is used to + // serve assets; see https://github.com/facebook/create-react-app/issues/2374 + return; + } + + window.addEventListener('load', () => { + const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`; + + if (isLocalhost) { + // This is running on localhost. Let's check if a service worker still exists or not. + checkValidServiceWorker(swUrl, config); + + // Add some additional logging to localhost, pointing developers to the + // service worker/PWA documentation. + navigator.serviceWorker.ready.then(() => { + console.log( + 'This web app is being served cache-first by a service ' + + 'worker. To learn more, visit https://bit.ly/CRA-PWA' + ); + }); + } else { + // Is not localhost. Just register service worker + registerValidSW(swUrl, config); + } + }); + } +} + +function registerValidSW(swUrl, config) { + navigator.serviceWorker + .register(swUrl) + .then(registration => { + registration.onupdatefound = () => { + const installingWorker = registration.installing; + if (installingWorker == null) { + return; + } + installingWorker.onstatechange = () => { + if (installingWorker.state === 'installed') { + if (navigator.serviceWorker.controller) { + // At this point, the updated precached content has been fetched, + // but the previous service worker will still serve the older + // content until all client tabs are closed. + console.log( + 'New content is available and will be used when all ' + + 'tabs for this page are closed. See https://bit.ly/CRA-PWA.' + ); + + // Execute callback + if (config && config.onUpdate) { + config.onUpdate(registration); + } + } else { + // At this point, everything has been precached. + // It's the perfect time to display a + // "Content is cached for offline use." message. + console.log('Content is cached for offline use.'); + + // Execute callback + if (config && config.onSuccess) { + config.onSuccess(registration); + } + } + } + }; + }; + }) + .catch(error => { + console.error('Error during service worker registration:', error); + }); +} + +function checkValidServiceWorker(swUrl, config) { + // Check if the service worker can be found. If it can't reload the page. + fetch(swUrl, { + headers: { 'Service-Worker': 'script' }, + }) + .then(response => { + // Ensure service worker exists, and that we really are getting a JS file. + const contentType = response.headers.get('content-type'); + if ( + response.status === 404 || + (contentType != null && contentType.indexOf('javascript') === -1) + ) { + // No service worker found. Probably a different app. Reload the page. + navigator.serviceWorker.ready.then(registration => { + registration.unregister().then(() => { + window.location.reload(); + }); + }); + } else { + // Service worker found. Proceed as normal. + registerValidSW(swUrl, config); + } + }) + .catch(() => { + console.log( + 'No internet connection found. App is running in offline mode.' + ); + }); +} + +export function unregister() { + if ('serviceWorker' in navigator) { + navigator.serviceWorker.ready + .then(registration => { + registration.unregister(); + }) + .catch(error => { + console.error(error.message); + }); + } +} diff --git a/examples/browser/create-react-app/src/setupProxy.js b/examples/browser/create-react-app/src/setupProxy.js new file mode 100644 index 000000000..938863922 --- /dev/null +++ b/examples/browser/create-react-app/src/setupProxy.js @@ -0,0 +1,22 @@ +const { splunkConfig } = require('./splunkConfig'); +const proxy = require('http-proxy-middleware'); + +/** + * This file configures a proxy for proxying requests + * from https://localhost:3000/proxy/... + * to https://+ : /... + * + * This is necessary to avoid CORS issues with splunkd. + */ +module.exports = app => { + app.use( + '/proxy', + proxy({ + target: 'https://' + splunkConfig.host + ':' + splunkConfig.port, + changeOrigin: true, + secure: false, + pathRewrite: {'^/proxy' : ''}, // remove /proxy prefix + logLevel: 'debug' + }) + ); +}; \ No newline at end of file diff --git a/examples/browser/create-react-app/src/setupTests.js b/examples/browser/create-react-app/src/setupTests.js new file mode 100644 index 000000000..74b1a275a --- /dev/null +++ b/examples/browser/create-react-app/src/setupTests.js @@ -0,0 +1,5 @@ +// jest-dom adds custom jest matchers for asserting on DOM nodes. +// allows you to do things like: +// expect(element).toHaveTextContent(/react/i) +// learn more: https://github.com/testing-library/jest-dom +import '@testing-library/jest-dom/extend-expect'; diff --git a/examples/browser/create-react-app/src/splunkConfig.js b/examples/browser/create-react-app/src/splunkConfig.js new file mode 100644 index 000000000..3de857fee --- /dev/null +++ b/examples/browser/create-react-app/src/splunkConfig.js @@ -0,0 +1,6 @@ +const splunkConfig = { + host: 'localhost', + port: '8089' +}; + +module.exports = { splunkConfig }; \ No newline at end of file diff --git a/index.js b/index.js index 9d76b812f..712340aaa 100644 --- a/index.js +++ b/index.js @@ -18,7 +18,12 @@ // Declare a process environment so that we can set // some globals here and have interop with node - process.env = process.env || {}; + try { + process.env = process.env || {}; + } catch (e) { + // Depending on the browser implementation process.env may not + // be assignable but still accessible, ignore these errors + } module.exports = root = { Logger : require('./lib/log').Logger, From 851aac6ca72303b1647c3983908425066536a9d1 Mon Sep 17 00:00:00 2001 From: Tim Pavlik Date: Sat, 4 Jul 2020 16:55:16 -0700 Subject: [PATCH 011/236] Make query input from user --- examples/browser/create-react-app/src/App.js | 2 +- .../browser/create-react-app/src/Login.css | 8 ++++++++ .../browser/create-react-app/src/Login.js | 13 ++++++++++++- .../create-react-app/src/SplunkJsExample.js | 19 ++++++++++++++----- 4 files changed, 35 insertions(+), 7 deletions(-) diff --git a/examples/browser/create-react-app/src/App.js b/examples/browser/create-react-app/src/App.js index 1366634d3..7fcab7e8b 100644 --- a/examples/browser/create-react-app/src/App.js +++ b/examples/browser/create-react-app/src/App.js @@ -11,7 +11,7 @@ function App() { - 2. Enter credentials below and click
Submitto login, run a sample search, and display the results. + 2. Enter credentials below and clickSearchto login, run a sample search, and display the results.diff --git a/examples/browser/create-react-app/src/Login.css b/examples/browser/create-react-app/src/Login.css index ce61d5161..de7c273b6 100644 --- a/examples/browser/create-react-app/src/Login.css +++ b/examples/browser/create-react-app/src/Login.css @@ -15,6 +15,14 @@ input { border-radius: 5px; } +textarea { + resize: none; + font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', monospace; + padding: 5px; + outline: none; + overflow: auto; +} + button { cursor: pointer; font-size: calc(10px + 2vmin); diff --git a/examples/browser/create-react-app/src/Login.js b/examples/browser/create-react-app/src/Login.js index f6f380abd..35413c5d3 100644 --- a/examples/browser/create-react-app/src/Login.js +++ b/examples/browser/create-react-app/src/Login.js @@ -6,6 +6,7 @@ class Login extends React.Component { super(props); this.handleUsernameChange = this.handleUsernameChange.bind(this); this.handlePasswordChange = this.handlePasswordChange.bind(this); + this.handleQueryChange = this.handleQueryChange.bind(this); this.handleClickSearch = this.handleClickSearch.bind(this); } @@ -17,6 +18,10 @@ class Login extends React.Component { this.props.onPasswordChange(e.target.value); } + handleQueryChange(e) { + this.props.onQueryChange(e.target.value); + } + handleClickSearch(e) { this.props.onClickSearch(); } @@ -27,7 +32,13 @@ class Login extends React.Component {
-
+
+
+
++ ++
); diff --git a/examples/browser/create-react-app/src/SplunkJsExample.js b/examples/browser/create-react-app/src/SplunkJsExample.js index 648974fdf..7fca97da1 100644 --- a/examples/browser/create-react-app/src/SplunkJsExample.js +++ b/examples/browser/create-react-app/src/SplunkJsExample.js @@ -13,17 +13,18 @@ const clientHttp = require('splunk-sdk/lib/platform/client/proxy_http'); class SplunkJsExample extends React.Component { constructor(props) { super(props); - // We define handlers here as well as LoginForm in order to lift + // We define handlers here as well as Login.js in order to lift // the username and password states up so that they can be used // here to run and populate search results. // More info on lifting state: https://reactjs.org/docs/lifting-state-up.html this.handleUsernameChange = this.handleUsernameChange.bind(this); this.handlePasswordChange = this.handlePasswordChange.bind(this); + this.handleQueryChange = this.handleQueryChange.bind(this); this.handleSearch = this.handleSearch.bind(this); this.state = { - username: '', - password: '', - query: 'index=_internal | head 3', + username: 'admin', + password: 'changeme', + query: 'search index=_internal | head 3', results: [], }; } @@ -36,6 +37,10 @@ class SplunkJsExample extends React.Component { this.setState({password: password}); } + handleQueryChange(query) { + this.setState({query: query}); + } + handleSearch() { var http = new clientHttp.ProxyHttp('/proxy'); var service = new splunkjs.Service(http, { @@ -58,7 +63,7 @@ class SplunkJsExample extends React.Component { done('Error logging in'); } - service.search('search index=_internal | head 3', {}, done); + service.search(`${that.state.query}`, {}, done); }, // Wait until the job is done function(job, done) { @@ -95,8 +100,12 @@ class SplunkJsExample extends React.Component { return (Results
From b96f50cd3573d989def4346b450a62b775badd7e Mon Sep 17 00:00:00 2001 From: Tim PavlikDate: Sat, 4 Jul 2020 16:59:02 -0700 Subject: [PATCH 012/236] Rename Login to Inputs --- .../browser/create-react-app/src/{Login.css => Inputs.css} | 0 .../browser/create-react-app/src/{Login.js => Inputs.js} | 6 +++--- examples/browser/create-react-app/src/SplunkJsExample.js | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) rename examples/browser/create-react-app/src/{Login.css => Inputs.css} (100%) rename examples/browser/create-react-app/src/{Login.js => Inputs.js} (94%) diff --git a/examples/browser/create-react-app/src/Login.css b/examples/browser/create-react-app/src/Inputs.css similarity index 100% rename from examples/browser/create-react-app/src/Login.css rename to examples/browser/create-react-app/src/Inputs.css diff --git a/examples/browser/create-react-app/src/Login.js b/examples/browser/create-react-app/src/Inputs.js similarity index 94% rename from examples/browser/create-react-app/src/Login.js rename to examples/browser/create-react-app/src/Inputs.js index 35413c5d3..01c004c9b 100644 --- a/examples/browser/create-react-app/src/Login.js +++ b/examples/browser/create-react-app/src/Inputs.js @@ -1,7 +1,7 @@ import React from 'react'; -import './Login.css'; +import './Inputs.css'; -class Login extends React.Component { +class Inputs extends React.Component { constructor(props) { super(props); this.handleUsernameChange = this.handleUsernameChange.bind(this); @@ -45,4 +45,4 @@ class Login extends React.Component { } } - export default Login; \ No newline at end of file + export default Inputs; \ No newline at end of file diff --git a/examples/browser/create-react-app/src/SplunkJsExample.js b/examples/browser/create-react-app/src/SplunkJsExample.js index 7fca97da1..d18aeade5 100644 --- a/examples/browser/create-react-app/src/SplunkJsExample.js +++ b/examples/browser/create-react-app/src/SplunkJsExample.js @@ -1,6 +1,6 @@ import React from 'react'; import './SplunkJsExample.css'; -import Login from './Login'; +import Inputs from './Inputs'; import * as splunkjs from 'splunk-sdk'; // jquery.ajax is used for the underlying http client in ProxyHttp @@ -13,7 +13,7 @@ const clientHttp = require('splunk-sdk/lib/platform/client/proxy_http'); class SplunkJsExample extends React.Component { constructor(props) { super(props); - // We define handlers here as well as Login.js in order to lift + // We define handlers here as well as Inputs.js in order to lift // the username and password states up so that they can be used // here to run and populate search results. // More info on lifting state: https://reactjs.org/docs/lifting-state-up.html @@ -99,7 +99,7 @@ class SplunkJsExample extends React.Component { return ( -Date: Sat, 4 Jul 2020 17:11:06 -0700 Subject: [PATCH 013/236] Ignore create-react-app example for jshint --- .jshintignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.jshintignore b/.jshintignore index 8f70fdda3..d73f60eb1 100644 --- a/.jshintignore +++ b/.jshintignore @@ -5,8 +5,10 @@ node_modules build client external +examples/browser/create-react-app examples/browser/minisplunk examples/browser/resources +examples\\browser\\create-react-app examples\\browser\\minisplunk examples\\browser\\resources old_english From 5293343a860a4056002ff62b4831a0980eb9b25c Mon Sep 17 00:00:00 2001 From: Tim Pavlik Date: Wed, 8 Jul 2020 15:42:24 -0700 Subject: [PATCH 014/236] Add demo gif and rename to create-splunk-react-app --- .../.gitignore | 0 .../README.md | 6 ++++++ .../create-splunk-react-app.gif | Bin 0 -> 540896 bytes .../package.json | 2 +- .../public/favicon.ico | Bin .../public/index.html | 0 .../public/logo192.png | Bin .../public/logo512.png | Bin .../public/manifest.json | 0 .../public/robots.txt | 0 .../src/App.css | 0 .../src/App.js | 0 .../src/App.test.js | 0 .../src/Inputs.css | 0 .../src/Inputs.js | 0 .../src/SplunkJsExample.css | 0 .../src/SplunkJsExample.js | 0 .../src/index.css | 0 .../src/index.js | 0 .../src/serviceWorker.js | 0 .../src/setupProxy.js | 0 .../src/setupTests.js | 0 .../src/splunkConfig.js | 0 23 files changed, 7 insertions(+), 1 deletion(-) rename examples/browser/{create-react-app => create-splunk-react-app}/.gitignore (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/README.md (95%) create mode 100644 examples/browser/create-splunk-react-app/create-splunk-react-app.gif rename examples/browser/{create-react-app => create-splunk-react-app}/package.json (95%) rename examples/browser/{create-react-app => create-splunk-react-app}/public/favicon.ico (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/public/index.html (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/public/logo192.png (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/public/logo512.png (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/public/manifest.json (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/public/robots.txt (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/App.css (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/App.js (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/App.test.js (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/Inputs.css (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/Inputs.js (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/SplunkJsExample.css (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/SplunkJsExample.js (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/index.css (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/index.js (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/serviceWorker.js (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/setupProxy.js (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/setupTests.js (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/splunkConfig.js (100%) diff --git a/examples/browser/create-react-app/.gitignore b/examples/browser/create-splunk-react-app/.gitignore similarity index 100% rename from examples/browser/create-react-app/.gitignore rename to examples/browser/create-splunk-react-app/.gitignore diff --git a/examples/browser/create-react-app/README.md b/examples/browser/create-splunk-react-app/README.md similarity index 95% rename from examples/browser/create-react-app/README.md rename to examples/browser/create-splunk-react-app/README.md index 35ae6439e..6f4de1dcb 100644 --- a/examples/browser/create-react-app/README.md +++ b/examples/browser/create-splunk-react-app/README.md @@ -1,3 +1,9 @@ +# create-splunk-react-app + +Enter this directory and run `yarn start` to view the app: + + + This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). ## Available Scripts diff --git a/examples/browser/create-splunk-react-app/create-splunk-react-app.gif b/examples/browser/create-splunk-react-app/create-splunk-react-app.gif new file mode 100644 index 0000000000000000000000000000000000000000..bb62e046aae3b97c7541c4a8590f41b98e0cd014 GIT binary patch literal 540896 zcmeEOhf@<@wB96}LK2b?5JEMSK&XbI(oJa62_2CVs#w6Fh)D6b>2!kvq9{fM1ZylP zC~9aLdsI;DQ31QghFE#LzvI0-XXcijo!N8le0$FM&Yin7B*@((BMH73_5;oU05||z z0kd-*9Es9KqV&;PI_Q3PjGil2-w98gN7zW$(V3@XK-DpsN7geWFN)C9H`S+k8W@@w z7*gkiVlba#XhJbEr5Kq}jHndXAVWh_Lt|4z6LVu@Q)83)##C!#Ye!?BcoUQPCZ<*< z77iv1PgAP(d`tR#Yp3}(_VWX+s1`O x3Dp{vNNaI|F2j(n9r@u$ do1?!@bdEvit=1j;pO4wErDi=)>~$_4f5$66Cv# BHM%}9f4(zoo&$jHvjUY%LimX)(6J2NM{tSu)eFDG}+iWT`Q zR_EodSh*^1)vAIGt5+8kaEsUGuU%W;zOHcH`t=*vAHGynD%jA_UtF}Yq@=8*lvlc` ztZYt7OUp{j%S+2QCk1RS-wgf7 54V_$p6+@zzUv%Ryk z<3ML;=Yi6w104stI=i|KbaizdIoNgZVE3UThmIT#2|adHe&Y1`lgCf?oa*g4eeU#` zi@kk{{&N>DTpSr3zB {`mEK_V>BPzkmJt6BqOE@4wmW3A3}a=CioSz_?g{7CX?ziGhFt0AT(T zL=xuk;4n7^{ud^a{|CwcgXI4*NHDVii_@!lK7=Hi`IXG5p2HD*szovVc?MsgWf~j~ zM(-1fXzB9uKK@8e^Md4 $EWz&iE&IWC+hvIhZxI5Wozxxc; zG~(>3Hx4`37gZ{gEwnn1WL;~EICuKPqu%xJp58cj=F>BU05?CfzxVS?<+f{!bl D+x1**QvCY4g!=HF$r7v0 zh$pGJ!~3`R{(HSY6-{(!pvi7#nnaB5`OY-`bO)Hw>D-^=*X;Q3`B*R}k2j*5 A%qjIdRvHzrIp98 zIR#tfVx7;(8U*CPiC5sf5ODUh(5l3NHKN}SoCqLC`Zge1z1nQwv)^XizD%*ao)W zXhbu$$~0g(91%r|9Yj>*9{O lLZ*_x<>U^;)Oa425FIvB{ z;x?Ret{i)ixJ7C=LP}qQxaKa$Z@q3V0AsI`6?(B%UP`cGi27rAt8l?nE+6fxoX`o_ zF(m#IE1*rpXzQ!g>jFYrO`Tz@Z*S$oV5~|345lm9e7NcT l3iEn3{`AK+NGFqR$IBsz159yf@eqj%WAt<-?k#q z7kam8TYS-2L^9s#%_6k5EYJn9f+UQ2xbLt7Ok|L>X3F9ET{s`NKs~|7nc-iXe4E;} z@#D`|BLkDWs!CF2sT;ng=mz)ySFu=9@}G7tZ_M_4 %K z(6vP)^7Y}1XmKa%>_FheO%KhC3qkJ{^<|CKI}_9iwfPd(CFd_x0V<~}=d(NJP=f+6 z>wIi+)BfP8&rp!;)v?)sf6x(pBzNFiTrj6W;a<1E6cf&Q5!W;P-UdBG_Ww9Dd5r$q zf^eo}WWl8Yt?XSxCQ`b@oiTvRr9-+`)O@>o)|U0)%X!ljiEXIHN2B!)N9!GNZsy{X ztavW=)SdN-KtWCC1O2 z4c`&R!?(r+T^Ocfq8r|VVc07X7dVv*-S-mn*nY+YmbG_W20mTILt7o!_H!7}>!TvJ zt)chYpEAeMlzzrW+b>vRbaIWl;S1^&yiPf>T88hSFYRmXEQbq)T3g@Myse6lGf zYfUHs*NbCeV>Etxi?~(gJ}-0vUzqB)tJ>|O%`qn2LGn5k-%ch2 %$Pnf&&kY`7$5AX=;hb7+%k9 zXtdqs)PA;hwXUZE_Au{gN79Xh2`78zIX(Ppi`m;98%jdTgkl>TR#nJRrtDVl!tRK= z)sg!{?|<{jsMsTXknrQ`{R`Mvb_rvlEKFw8!F_S9>TSG-_*|#?y=pJOVZiU;B|rp{aJsf&s=mS zxJV*uU*Kv=dWoC;nrVO1ZDYrW|2|pJ(!DF|&7v91k vx9B1^ok4J_U(hg+=4r)SBg>P%{NbV z7LxTUjegygIk`mzMZAq^{WaPZ*>f=Q#@mE*zsBVCJ%=}0yk7R`*O>T1&(Rg8Z`07F zqps!~_MXuoT`*;LTR$$$EGgQ0s_hqx7xsRG2p;L-XT-#R8C $fB$~Qs$?n9P8z=MpJ$k; z-oft?8nJP|8n?xL@YY`q?{3*+()Qj (4OM8Z~vvfqjmWoep#V*FM@gQ6?MGcWju+C>#d4jqN`^&%v@no5 ^0lT-R$ZR=PS$_#IpFdxa}RTDf76DZ^`AfF zM|C_JDwsaJTK&loQ?9<~G&8sY`c%32kNRiYk4s)@pDS(pUl=^w7#G?0rT*5RQQF!W zWjg0e=9yowT!E6I#c2pCw;#2LIDKtt+Gp `uQ zc^5Y?zti?*rsRH^P2ubh{ZlEAm@H4NegMNf#fyIGG;n3$$hs2r r{EMO2LW@qnt2?4ZH@4igHviL&rcw@=5xzvxHRw=GwqH-LKc;=k%KCi9~P z^o;gaJiKpor~xq %K`70nf@^d^RC(45hJJcR}Z80w{-i*#&u0Y1JKkMxV^)mzD zNy0$meNoFBk|TAJdg29V8e+~YTz*z0IP#hAR5A}=85j-|{x>H0^-aJ^ij5zDB7+4X z?j|l>^AdWD?(YM3yo^tDUaU)+ccB9osBr(wLS6fYeXk+TGKn|1D7*}ck1hDwSn+IH z9NB=l@V&ycp~8xUnEbJRYB4gIgoz~~letJQ9Yhfa6P2k~9~Y^aMXz*iK;(0<-73p0 zh;qMYei#+J$i^C|4Z~OHhV89z)^#-Ng{&ZvhXNo11#M$`1{?t70J>~AY$MEr4Su%f zJ-nY^RsynZstl;}R$d0?lfV!uV!jk{C21jx2@kp}R=Tb2eVxzP=W(09k;sYhV89NK z^YDzo_yJ=kM(|It{Pbr%r%A!Xef4H!Q7PG#NCG!EdXz4m7rVE@gA1Cl!cI-V8g(4f zNZ=z#{EbPRQ4zlYm?N+AS!&+PpaQa>_IoqJPg<)(f=v`R5Q6 %xSLn2M+Gt z9jX-*vq^VO&3t_3{5mFXGS1)iGsxm%-_J@3BPX?GB(P@4;dkNuVJh*XTFZn@cKWQ# z;=raFim_b0Kn6q|uidBuv0PLd1BPG%KVH_+xUe!A7E=43Y(ZcFAZ3Tg^I*VzsM%~B zwiLn~Py&%^t)w{;M(P1F0HQO1;KIZlOtl6E$g7ucGFbjVjOD_ z5_G1pGaBN15)wZvtz|(-)A4Ghu*M~;MwJKsc-ewdz{09(=)hV(2o>t5%O+vYu!;Yc z5kHW$(wOifIYHG|7sB?}UYDr3hv`sRTAtMPP+`6)a2`ywMnml7z-Z3yieUVE4RRMi zoD1OydPVpoGY=*p&=6ly>*K$YCS=+GgzHuSEiw#|iNC0Uq1all6j}-f%7co{WOZ zY!4i5q6w~qFdkGbF{k#jJI1Vc-)b&lH5++KgG8v%$2CYRHnv)dxTwKBVd5(kz*03< z%mhN%Scr>xr9$hHzzP+*iHR;@YDs~P76{WM2O+9fBNM&DwRQhQtLf~%u9T7b)}gMA zeoPvKt7gEm6}V+P_=ZV!9vl~e4Cc&;#YDql9<+2OF%N^^osIdSA^zoJ^Yd!1$dUOo zK&xT>$}>CSUimhuwPc!34-KGC0)Mq6Ecv1RT|@Zylkirfy_AFbLM0x6f_oX5ni<_h zCOQg>5pr<{Wx-1_<}X#_pHiCy0O6Gi<43Yy#4@}>C6=gtdpX2*cH6dQWSnLRyU-D@ zCLC1|_DQ=Oxl6`4#0m{|j{^6SOXyI^Sxi7mC7xlT$6N>#Ow?@#;i(imtbkos;ohln zy>ji>3a!{iP{3V6V*>e7e5XqL3tL;rA-tPa<2R|br=++}g @Irw* z1`(S8^w(0 ~m>OC_M@vV9fO@{p|Cp?l9UQ^{X z;J-K~<|q@}t f4KK`!nMgn!BCJu-t;GJz2lzF!W$ zR%pLe cJdv|cjtBTN(}R%@J#zX4#raPc-c zf{Zb@2iQj(>{Ak6M saEnoTyRnxsAk6GcZ;FI%`&D_3S0mYQQo|iaw*l z)O^!TA|d(|gs>2xNI{TF5qLj%o0?Fa4Lc?$ {ng-Mu|;y{@WRtmmk zU>tX1U#hh(GVrGWJW2z!LAWxK;)NP_oPmAC!R*(_8@Ys=5Dv>ED5bb2Mj(rU@i@7! zh^?IytM!sWP;)VDO#C|r;WZa~nM#O~VPDG$QZC^lRqG-^tX2^6neaFcCXs=uV`>Sw zs5U9GgN B9&a_J9g=UV{W7xS<+mq>ixs zjCAH;4jF5IqvDkc!fPqv@2mp1<7NIE0RNZ?OfU!vDLBF)h#3UqHJJAhUdaKb6gb{H z> XtVuzLBq2}?>^trir%lKom-X-vUVfG^t(kLXXso>2gNv(R07LS@ zovr;(m`G58zOB~oXTv+B+NU(YQ7&Onia5`hvk3Np3=pXB!(7x4UGU1Xg;*}~41~T& zB_3qJF3SlA8JL%9{4qJEgNtJ;wA#4XH!^Kc67De-pQyrjGg0|W)h +-)1I>tca^iV5 zVU$4_W#V7Y`QeCy^Hl5^5_kf@yr2>wDfXiR7s9zX&0OLE;r2in8415t)|bWD@-zr# z{hS=g!Cg-#9$8L2t+0$F JKS4npl9iTD{ z$TLQk^SV=8pLT8%TwE#WqeZzQU3D9#g1({(*h5DKU{OrWP$+s6V>f0mY$@ZY2NUy~ zLwwC8{*@9ws)&P(M^CLcMi+)&9}fvrRbP=4E^C&E@?j&M_dH0j2TQHv^HZZZs7BR` zPaI5xjB G!L*6vRa8fX@4M9?p qeDqigU(YLse7BPlGGG-7(<|sW_RO05q4dWb4`ak39c>Kk zUd(s-y6o8Vzyrdlq`kHA+d_BQ{bYY$HpwfF>)9~*xhY)7v4gTfk79#3Rr?{Jb{QDf zg-n(``*n2oSLbB>iS%T7`tQ^K{qEiK`*_svv(J8CnEkDo|A%bxr+0zQ@PB`lTmB$3 z{`CD aWp3&L^mJ#@^&R zRTe#Fn}LE_$St(UklPWL4@701n*Fnd1l-;`geK3&Y$nk)R5Xd|U6MD$-Zw0q=ZLL! zkA68^W9pUtc!oU`tZk;dj#+hw$|5_a9{nTTDhMGMx=5`I$(jBn>m{C}-M494Bs?n* zI9u2ru*;|-Gu)^#Yh;H$>+PDi$IauqjrSDGA2elOt)~x#-uN{-rNsMO^gaL9e1) _<|BiKa!VRzL(&J`VJv+VoT=C?k 8QQh$DXHDVsNz25!m^asWH^;`J6e|@tX6D_v!O)FpX_(M(N06g6{lm2mS;_ 5fY`G=CC4{y; z&ZWjKC^o`Xhj;z(RoiGw=diJuYxspaC#B?Y#u5CwFvqfQE}_nWRwu*Uo_#wJ>i)8y zd~^P*Vb>_{PbupoeEQa`kF>vgecN@%**_;|Z+PlBj@}^O@YZ859E#J6UWz<_>UQAs z$Bnnmdir%E*!vq@ uuJTczPvRn2;zrwLy8K5 D-e~?j;v}+VCS?@bm8v%;uq-GmkgE`F<~bvt+XP zS fu!x((r{qD%l z9Lu&1zaFF?I{)i+`cT2SWjWiM9_63?FddIRzhP$Yr}IBQ{+3)s+w^mX5KFy3D`tbr zKV8zc=`R@R7L{vS&d^dSuP&CP6yEwfwTo*QWRogZY5nLg7z(rbTXg^XzsFzi;P(9e zuF8tqweH%&XTR4K xkQ27SY9|T+4A)3#Nuar z%RXI1FDd_g+2&&T*K5bjE56@PPyhTeA6oM7 &)kugu(;s03-nPr)AK-Nh`}D$*>^q;?Pb?&6E{rJ9N_j|N`h zF@vOPsmO3tjWfs-7~oaHU%J#^0T={jTvNUT%p{5Oe9iP4&~IH|=rpthSi9UtMhP?Z zI_QJnXoW&=#vrMd?e}Tn?HX^X`Mgc;K`zb5#hDISMw?243@(uBR=K@|`^*e3xOcqj zhUasWH+f4fr-Axa!oA2G L4>np;UR|{-J#0@Q{}oXHAR+= ztfZ@)w+({fT{NqCEn%U>+{TuaOr8BJuf{fiX}mu>oV%!}FQTCMZtF8}h5Lv{ z|a@#y~f$d$o?o-tdSN84=zSBA!)jcGnT+M% ?=i-r-ksHp&woQ*7Sb|)|7J0_)(;w?v8n`N^>1 ZB3RgcHqUhgbZin>=` hE`8W@?xoI^A85Viro=m j75(_U0YlFLbrL0#=pA zp49JuPd={2jH*^4?+oXx@aamnGt=qOG+M7VP8zs-wYc^4joiGRP08zW_0K$Ov Ue|45A9lEu+9ZE6mauWxaik5g<&hwMpKEpNw<(>W)`*`k65Dpp(Wr>Sx4*yDhu-+Ssvs(d zOf?*otp>nu<_O2mQjxI3nM8-f51vg&p=cPER-Kfu*DhcC RtyPvMUMXiEocZ>dRCGV(cwm{7k7?vo z7 =(XWP?-9Xh!rm|nZ8%*H7by8#e6GoBA?7k}OT>Wsj# zSuTw01dxN*M@)y^s+>)m(TZ>URki~d$k=a(eK2UNQ1m==WUOdNLJ)f)%=ahXa<_Rs zy}xeyCeNM)TF79Ay$^2Ks+fDDOx!=+fZ#_KeI|vn`5DNgm9+QswU+-~kw$!e|3K$) zd@l8!ULyw;MBR(?Cc%F-?>u?5v#08EzksaXQsZX5Zbw9SvIUeh^#0t@;!W?KSs9(- zc|%-avIed-E4$CLPk2^a_vEe^die3k(Y5}mh}nuCH!$CxzBnIN`DA6AM^F2|ffL5z z8bKMe{K3Dc_@uvYY99Vp)4D)&wrpy?OpR-YkPho~(0X)pq$g+CU@rQ{mdKEvs$ElV zY`CFb2719--u5$ Z#v-!KPK}j^`fIKbjh`IZ2lEZ(e@Mft;^v0KSlidafY*p}U@2KC= z1{H5kzAjy*gL`%N4q#NGQ|sM03%v5zl;R&tF=_S#X+tmi$#&*Q!!_?d3Y3V^jzvA@ zl=&Z)t>GavnT}4ReMo-my;GUg()Di~QRmw9vALVSLT_ZCWUfMDwRY_#pI_)0T|T** zv)MEW_*z|wxb5Xt&GK^GsekvH_ZHoLXJfuz9?VZE_;g6$)ZN>d0kfd*Ghi<&_zD>? z;JQ+|V+_A#=jlrOz6OXNAmtCmF7XTIS#X#W*Y*v$!VlQ{sEv1%p$nPkJaSz7m((m= zyscaBp~Z!jyd7l&TXlDhu68BcpGQCH(K0qovOk`y>)p0~p<}f> _GK z=DZDs4|9Og6mUHb;0H h`zh~&|Sg+P7em-cK<6tQ;R~`P->Q|WtRu5k*6mE z9PMC8cVQH>mmItlqZ`O-2WTWu!>#~amkZ53uoyt+^-3a20Nl6-t^`QrpphzQmd1u_ zGtX6?f)+p$?-Ix*4vv7t90p{U Haz@}5cfv+KZ z9{WDVxut!DcGf`p47j!iKybvI5@=~z2pQ*wrNVW)`cNvsk0HWP_$7KH@h1VcyAZ<( zbSn{|m5Aa>1f0o3Gmt5mQ>SW2bX+g9M)$Gw`n$73 +lNt3$OJ$RzecEGA@oYbdU_=TL^{oZ`4~{n=yJ;0fpY5=TAnzA^5uk~>TJWQd;% zO3W(t@0%dZ)mLb*mzdAM)$0+ZN`z_ePQ9IUGu1xKj4+)d&Z6_kv2dgkEMfxy6`0E~ z{nR3VCOTvW?goj<*`n)*n$zj%B0!XSO~}EBi>OGXQjpI?=TQW59EwW^Oer8bN9-(z zI23UqB%W6exFw PRaA=IRrkd;bk!-`abUazq%2r$U=(P3~==W&_%&0C$3^X z2fdLiK)VZP(_6s0Q~fNuz+DrTM1kA7gTKRt7^WaV+3!EY&+nD^S2Fyl!qP_2Nd;>% zMqnXDbliYH5UR%j43Gf8MkY}NEU7SEbvqFwSs2HsxPwm8yJ7h}2QE6mQRFP;rJ9JN zN|3gy;8?XNG63d>5r@m6f8|KMN+@3`bk>9go`Ng@QTpp)XDBWNl5BwZUDpKe%F%E& z(ybE8mP*`TUrSelL O#HA;pP&K<)38E?mSr}9i zB(l<$ 0fVsc;mXe)%A8D#Oe&>xVL1ClH? zpFD0+wR8T3XgHum=Bl6-t8X2Q6@^qjV9C&V R8=&_HuoXu~@ zg3}llP8?AgT` r76P7y}zB9#;|_>HEB5{|ftA|`Vr8z|zO{)L7du_yp-%aEKuiDp+qMHsa1 zO;PuCfl1n3-*B|GQdFcy7E!_VnwtUg?2SrcXfHZX32qFQc*_Aj45}PJx xBQcF%D2Ze-?C9gTL?qcyS*l1BW zoQh8CeVN{TpEEv`9W2>E=cParj{9Bj3DJLD!YnCzmZ%i`Ctp@3kDA;64IFWPiPtY9 zxZzCZCN@8y($@`;taAt5R0HA6mBn(%@uQ?YOt_#6ECoa?`i%_&I{9rYW(JvC3Ehv4 zElYaDWx(?&C_u&WqoC5*@bz;crGk&9g2nDAavcndL9GWM3;@J%(AHFdWz0v |4-qma^Qb9M#*!AmHJE!QO%tbuqg+P3S$4*}W| zfV9S-A_fw0M_r4D9HbI52Y6PyCYJ<9a3zVHRb^1WehGw8D5e|X#cKGuNK`Q(>P~>4 zAc#{KkO30%pVR+REWdDESfKx6gL2M+fmgL9hs;(LDG`DrE}9&PGZmT30XLQaa0WWQ z zR9TLN&V{Q(MCqU1;WiiILLoFgs- z05?WKNz3DmV6i_(!eX-)nO%wDpb+EYbpYf|K_^iqFMY)sq<8Op#VJ(CVLUU9lVC}O z9!Cgwx}noB@3`{k{s6QAg8~3Fw{i`a0gIssI9&ABKOn%6#4t2kx1!c7kpLvl9`CcL zO!bcx`lfu!U?Yn(0Gxvs_5glTw5=Lm#t=E$h| qu1G-8H7;`9*>UCU^R z2q%5cm%{t4+zsVGtQ4Izv& z`MTXNQXaHKdLJ~@cex}_`p(Csb%IQ%bbXt#WGvLGqVuI0h_bZ#?_`c~^;tqjx zfR!~#LIEH|Dj{*gi|Ghpd?ag5|KgUkp2##O3SuMoc{l+0_0GW+K(c`luEeyf(141L zk-yLE>hpHbysrxf@}dzGpcq2J>4-88oG683ypNc1MlA_E<#n)-Bk>Miip;x%qL%_} z_$DmN)uN))a|sg?U~kUrdT-AC%Sqb&trn&|11ChN0w|~i_vw@w zQC4M?lIS+G8J4S!N{~Gyv61WCQ5H(1>t%2)2bpdy${L4ZIYlVVU?>CagRER91egNk zyB40mN)hk(nL|43g23$X(mM(s<^p;e>?QmA3yS)aj)#J`h7d?%63_ngpnqFYD6r;t z4iMLyow9jyC#W4-y>8DPLl_hDw8nzCE`K#?+ZF02Z9OaF+-ievPW$PQ+p7JSwwQZT zNc<^6oDhAv-d4_prML(6Jq|I~;F7iI?9g7`_CQ{}J~oB)Jo+W$#q4mkfosA08Rv=1 zORViPNcdf`esn#~zU}m=4pRS}N%N*HDmjNeky9;e4`^c%Pv0(MK2LH-gwtya7l&83 zJEPX^tzm#8QvaaG>ezV5%$@f9l8=TedUD*wWU|Rayk#&2p7*}uia!xcFWZEd>%Qu| zL$&_G3E^F~=X=Eiiu^K?`7NJx8FknorbQ5GrUN2wQHRt+LU`35O9IlC^qgg+;j&;l zl6F95hbqrdI8T)Tb?zznZT0A*JF>1aQ~-eW%290#Gkgu|UiPVK(Z6i1>5U#F(gNny zBZbP?E78I~enzg}hRwG?{@#jfo|1C&n~bXQtWcBLk5V|+GfSCu)%>T4OSlWxWX!<) zIsWBNnA$2 NWDCpkM?b9f!{(*$X~*W zj|uk+;eUE$!w5<6gG38Jh9J8Z{ILjhf6pNCc3h@s++<9>VdPjy cxT%yXII^mJJ;#FHs0d{c zzsdc
||)DqklD5bSlz^V5vt-R}p1ZaWPHiD W6R@L+ zL7>ZFrCiUNt~1axyOjj1Qw!J-Ux#n56+gTxLJ+*vWzhK;8ISN9#u+%UWe7tOV0N9# z#D#zEyHIGp@j4~QP}U$a=+DKgf|q(;bq0eJh&7ih0qgNExc9;#ZL8x<6B!S6xo@vY zp^6Cxk$DS*S(qxO T7+_I-%eT> z(3vn@vH5{)E4V$t8ChVYsJ1Juh5wgziJ~X1; ^ngnKN31 z`P_*h3rdiNdAHu5m)LG;qN?=Q3g!3}x4eLD GLXb?xghApP9K! NWy+t9DOO^O0+$Xc}9A$&BXfG%|$-@28SioBC;GLwxtqPYc7< zd_s&I5w5h q!*qb9^1m~GB} zI^42xhjs;Ky2rS{QX%qIQui&P3ibQ|#e5Ti0Wz2s5w1pI|3L6`N hzpJN^~x)? zrej$|{$l~D1Ug~<8b%EEPBddfH~~pR!qvbHF~_bHatE>`vYe_=bEIP7Af;{9a-|&% zJ8lX7vGd0i;o&I(F@9T(A+eh`g!woV2;; ;@$viS?FF0n)!ZNQ4^*=)xFYakL zT_HGdS_VekorMuwc72$~FbA(T@$yW+Kzi4y$k$X5)>d=xiLVSM+^ax*d00TS`gzz} z!^BjQ;Mxk{>|AWFh2Pc;ol_w6$z1JRhJYOW2klbH1nKI #V8!xc_%v|+;yr5{oZcuLTRt( z)U<+N<@8X`#QULugS>EKwTHzY#UgqOY>T5)T-W^3{-8XodF%@-iLNrRU z!jFuqRKyNF1on0U551(U3lcfPZ28CT6JadOK~sL|SJ@}wZKh)WvUW1p=^3zV;Oy+) zd{D8NsoD8o_UaY#nSSz)=T*m8=V5IVdE4Zu8DAG-44K~<4LzXPc#qVaec##h{l61s z5!mWFGPWfdkyjF!$}!6y>;+zG2L~{ENpM}0$DKD4piQw%7*SUC^~?${q#p2fY0&Z^ zGns;#(6pPZQDB-ME&g}ax#<_S_hQ8}p4f8r!&9TD3vLoNO`d<&v#B+9pz)9oG!hME zy qa2wL*BYB|5cij<4XIOf46`Ta z7d+T5E`$}Z?qyIeA;qn!58@>qaXn)Y;hrL;uPzn&9BGlD-OH5dh{Jql$FjLpu`Mf? z=4Z%N;!Ey L;?S%538KY{ng}F{IQ}ITh{5GNI11EGW9;$*e zx~L|o9ToBB|9s}5UZii>ZD8P=Kq<{Id%C?khw|@v!aO^kStsS+69a>(=BX O&-3p@&D?Q3uu;Z)%w(_tODc< zkA2INcHNK7X^Cxmj<9YIt$WyIE5^k=jvk9JJzJN>$bOUklbdFkO z%Hpw&* kMrKia$A)aX>XC%15&7rrfL{|`g_Gf8QAY-ieL5lALq9Pm z=SgjQ)FrFreNAC)R++$L@V$poF&%+l+LISOXE$4s2|0#Fs6cW~ii_3Kn2yA!9f9|f zV@KMfksV=YnM7(ER#gXkVU+~WNxiB_K~2{Gy>(`6cIQ&@$ncYw33q6j#o25#>%2== zE9}}=!&?J0t)4v2iS|YPTb7-*%i90y6ar V6(z0*WZ`6zS?G!nN3D@@<#Gh z$)#5-zf7&Zci=JgRVKBw_-WRY3F{4a4pg{^%QsKP{adjPl^00p;ycj=)2|+Ntq_!E zmV8+u%zU*ufiBK{oeHP(i}N;roZ9r>sYi@RJ-r7|^O|KDmRinD41ltDv?glg4t=6;MTb*pTE$ZIpYugyq-56=xl+fLj zX4{ F_E{g?=VZ5k(ZT(`cI`n2+av8d5)O8x*>&a~ z>@2W5P`s)`yzhYcVAly-&h*sIvy)la&K)iX_U&7h)%zB~e|zl8+b(O{@QkFI(Cl8( zi>`tFWF@m|XIK7I`Z uIg%P$Z;I zfWDLTgKtBTJJy<+AGVkbiFpUUXl~9o-nPi>Ytw4^qYv|sX4brTcGUXtp!MPA2U)r|ADZ3iJ{jpSl5lt=&EZn+;Y*(Hh C-FIZT&|c@1aq<-=_7sy-yZ7qT4sQOuOAqU=uIePK*CeIA zS}A@c?@Pqtk2Vi%@3?YgE*Y5|e8XA^&3Pmg)ER3&n b#3{Q=DMu!V(+kK6G9sDx zuo=jhSsT4C zu?5d%IR*2y!*{&F4={R%JWc$gVQn+4gycAMLE)_qZwRk;M$BABfc`E3^G|Q$vw2sF zGqyB8xn;A4pS8R2?i#bnCP=T#&n%Dm;JFhU^{g>M{4|Jh^M)~&4Us#kMCMa;L3$`s zKeP`R=rAWv%u62dGqW gTOWx^n2$7mX75wacT%&bcZk%7 zCa p{P>v=3%_||#UB8qRphxzZa~8e;(ePy@&JN?@MOT<+x>6d!PzPWBXYj649xR^ zbS7?3H!=0Odvug8j-@eOq^d$7O<(%)VUvz0n+XQ<@b2puwT>YsV6LzA?1fuV q-=}{$__$?m8g7Yhltg!CF>>HYRbnS{OasPd|^jqXMQIfDdkF z(z4-8kwc5P1Lm5KEK@(1q8 17O>Zq}?kaTreyB z`SL^|AnQ~7y&ix5_K-Pg*&Wuq=@8zcb7`AnnZ!T05OHwNHI>U?yLObr=y*OH&(eRt zTZaMV+d|}Ce;Nha@MjBw }|HIR}$20l=@&DJ(2eS>s$YFDwL(HLaZf2MfbEqh3qUb!5Ly67im>40I zYDB42Dut5fOeu4yDEiEy(mU03K*#;|``&Kf@4we>*Xz1n*RI>^dcB^{$K(D`?ZVa5 z1Jn6K%H{iSv>6ZL==jY_lI5cVvi{RWt-nV|%60zJ8Di1}5oI~m5BJ~qbdr6wBmE@t zAWkM(;C&D)JkN66S+}L*SYvR+Y^O@?ig^H{zk_bWgIM}X%!FOGl@P1+!%#i2Q(l*u znC6`BV@9Q!<#{>b!P@-{1B@WZT|$)#RKuO$yg)lpy+&^jeD3ChsK3@y@Pt1SC*(8R z@ocdaVm%(KLiJjo_tPv7a!sh0&kj8&5SX|Dgaxc^y@Ia8Qw|3^Fb693(?d6f+VHaI zM*-XVWE&Idq#7SyYv|GlZic_uw9iXd3?$IJbmV~bAG%X4*g_1kW=qWHI(OE3LMyvW z@PNObp!n}rBdV9Rx9b5>XP7CZ7T-bA?;_#BkpZ2M`TpC8@y(HWt7N^lLYjfR6EDbG z<=I8mgE&>uFyVO*E(!=dx=wlrwam+=R$?Z}GMV`Oz|+${kAbT1G;`w-7~7$kPWO1E zb){g9e%6o)+l;D-7IzG1K6j!D_Tj+?Dznt&o!ZLAyB^q#1~Hq2xN^6E$>-WETOno> zQ%(JAxli5=` 7MQSG#_;vek_ zFff5wG^)!ldR?Q0cu+iT@*qoZS*DWCOC4TLOt71TejfV7T|$S>(+*auxz6#O^yoHv zUV0LN1yn!_IO5y}rZo|FfHt@snWn1s3yZ@H(jO685)LunP=SQcs;g#vx@=Qe;<;dI zp+WZch1xRO^y6&?1?5?{yh1xAc2Q~Lr+2(PfU!+Zd)(nFw80H9-VR>Tt1+fi(}m&H zg0Hlws{P-Ka*lH73dprc;oOE08ab$)(GY%u??cgXvXNJwzP)ac;7;%RtfpI0 &06?Gnnp+O7@^yr{g}nD?3<~$GXhu(mphx`{(x7 zKuhN+fy}Rl;~C-+QaR%HxF>MnespeWHQ&56Vn;&S2<)P+wVH#G1*hIq0zz3!B@nd$ zc85~3BJDts3#oL2$ngI_yQI-z7)2?>;|EOs%r4(fN5an>pR~);-b4_YuS?CE&ej1_ zDA9!#fP$HSngbxs^+R(KE~_WA0NJS+PKmE()Phc}9vfhrR;iEJ?I=u=va_^9<_5CM zV`Gu;iR@l{C)nnNAC%`c33_X=DK(+5Y 8DU}9cPl@|wPc1p)s)Tx^MkG~Tz7802S8#=4ak8iish3khC z*|2jl qdYA&H*6+LTB|xek@1l9T5Tm=C2sI z2||@q6AVyIOQuC5bk4XWXe88%N$1?ex9VH9!*orwL*}FHpcdVZ-UWm(1sPT)DTM$A zYr4qU+A#pKLoZZ3tg0Vc#P>y^Bavo$n`)he=VMytvQe9As|xkO98@0w>t%w@`vIhE zeOR8X1BrV)e(GGLnO`3dF-}$rk>OOBz72*)Kko>{7pZWGI+ogggmE(>IIqG)k6zZ_ zLrBfAi#}&tnbxC}OgZ^z0;T+20R6Gf@5+Gr>9-&iOF!S>qk$LW@SC~^cH%AGt L%cn$X{+ zXOlyI3+kQ(OtDc#yJ>kyDYs7*IM3cej3SWCb?8Qllim6_05GVSLk>XE+(xtP)3$kf z7xmU `5M(rp_ zq<~;oyP)p9R46x3>3< ={fatT%ssyvKHbx_DrJJ;8{w`9UMLER~ zs3C{Ft71VwUw;p|Q%%6-Y(NW;y`Kocp!8T#wd&z{FY*?Mft-iLA$`{8EEYt5=V)A& z^1%Pu7w)qo>&%cOq`7M0_IOOmX<8o{tIH>fN$|dvl0%6RJY}&_V}J;UNkK&$CSz9Z zWFo8;iMLdZoh}0{OtgC<|D>BRCUm(UW-Tc}C>#1$O-a@6BPA$eIY&S0RnDr;#R7X} z#cP1(i;_xlo7`ju@7NM;0xAC}>4!mDxUU&fuEM484KiOLzA23 9frO;V6Y0b~gt2>Q$CtAaflC3~CQqS^1u{9yRD&@m?>b zGQi4da6RvWtE2>(-k7JHl1JC-?!rw$bM^D%gG~usyQs++4a7 #m zL ?rD>McxpqDlw^;3^xzgVwvSt@?DImSp{%rThR8**&7*TnA{@h|!ocrqu zNUM_%wQUuXoeIDXAajCF2Inx8t(`_9xD`nj)P9{o6e_ESIW#YdiKdplgkj1OgV?F| zI2=uo; Nv$vaua9l628)M2G3`R=%By+Y)hpz)D631;zkBc7Yiyt zd^gugV|QA`uN*&JM#A+0zCCO<_})SzMhozE-t>LYR)L#!^Y*SBuu zfsMsH?bcKY*-Zz5rgeZ%_Y1+FI}6?L#oFS2Sg^faPS8!9R)Ibg7C_4PJO#|Wub`U| zJw==U(2%-Br~|tKL1>e~uJYivwPJ7-Mxc3GsS=x{@grM0AmV;OetTFBTv9XkW>wC} zHg?v(vfH4T6_{iAqQDkotRSAOXXwaRe~h6D@MKO)!+J6-1z!U)<$BqtCQP}BvcLg6 zm^O=XYQrDjS<#xc1SUVn4kOSx+agNQm;!Gstj0WXfSF-9ptOCRU>|(gqgnhxNXxXQ zPe1s*Uo})mOu{zevtC_X_1#O)SSO!%$zX$Bo>M*jQy;NwxY#o_BpqCt{Nme>TNjQ! zZ51Pw8#yGM13vSZ2KSNJuLN_SXc40?(P^Md5F3H|pEqC@u@g79J&QnHg#Ab7!!smc z0RMgu)0D-tvX;RD#89XyEQtpBRh)moLKYyNZyZF%^1!h)L d1TU0AE9ap-SD;^P!Bvg0a`tPM1eu| IpZXnPN$l1e`n!2?Jns z+Hd4-l4_zSv=p|N3rUbygn?o5AjJ4h ~8*whtoq%>~k(Ed3dK
3#gkxY~{l#lC6C8gG|6q$8 z`cOt|zQN;0P$@Uzts#g51DH^n;l>%uCpfsN{XZpnp%8HTVGF;(hG*CgY~kU*lHjEd z>f5+$2aL2I(;&$*>mmEUkq#Ek_W#;7Ox@KL6g%ofiAiS3nolD(t|F6LgG!m48Dx(1 z Gn6>1NLO>4VmpJrBTOul7=5r18GUsb-Tdk^Xl%7*6Cy;6h?Kyl zsLlccV&Kca5YFGQF%*b^AUh`Q2&wUjtEMzPTL?%xP=>4zquU{Tb`pG4x>*;;{8u+A z?+R|rlSWBlu&~!qI;w((DgzMSzBNb0h{>@Hxg1oR)T`qgZ1LuwXCl9s35<0`pv++A z=uPh__6A5f8A3p;NrL#}L$-6BwH=Ip+;UiR_fO {l&pUrGJEu&bg$G*NfMetclPspqrr8 zPmM-Aa rgeT#31sb&;GH%lyZc9lGS2yWXC9M;JN#wlcB$xwgszO zHrrbajldem{Jas7=Kn<{IBxtn=7V5ZJ~?PL !(uK?ow1ng4O=r&e|_3&`m*c$)@|&Ev6m4Th(nge|4Q!x7@wtcIvA!LPK2< z25)+fbFDS g9vR+6ik? z4mme_HY_FnZaTDPbE5ZVPiAvc@bV$gWowA`;cd%@qt_+xOiA9|oV &?femXEo ;xfWT00e#dyKE0SebilJooTQZgy&3T6Atg zW!|yW+~dUjW0kJY_nZ1lv+Gg|u7rCAhHctFaMK@;uU;EIdN}g5mZgKE*TtoZRFL5> zvf)^&;fu->&z%gH_$OwGMN=y$KCKk}ucc@)^~7R$(PE`uJ8jmjsQ}d~+BObzqp6F@ z;5;6f!`F5LO!jguD8r7UL*@rXrS3A<(I7?EZD`79kkv-WZ9xCmv?1HMd}CU9L~HrB zpXJfc6`wlp4&p6Ue^w;?JhqJn`RohI0ebIwf@J?8j7|$@OmRC&Dx6?+eGC#KP*E63 zRD)^gJrtF>AoW(D*lZ(Wt(nR*az%%8RZm(~@M!})zvQTle< -}ISN8I3)a4axxNCmMryEFtnFkhY2P z#pv?IX@kJiRqki1o}Mn*FFxmYzxL$vxr+ggoI-7?r$NCd4aP2vvS;{Jq8}*KS?GX< zH6XM2czB0_RI+M>j2P$ZGsO)w26|F>=4s>aBgW;6 Q<{xVqN8%R5@I{do$ zP`AQMchiO=4FkHVDHFSpBpCR(jw6Zq45V!!S(8ys9OP@Xd2SF@pH;x8_1by(ylUbc z8JE`)R!~g@#Kc#7^#A1Q-ws6Wl3aNTDqpVF$(S~%oz@BmYxAnL&s6smbZ8eu8@3;5 zikPS}q%}Noxx4XqvO5ny&)=N^=%+?EPXY!-9fZWac#{s*6`cd6(QUmTjRg<^+hOqQ zgf>9BU%E;=i?7Gpt6~4an*5+@s6#{8p}j=blvERYtBKD#w7WeC^U+#!{HCW5s??^N zHXnUB@%!)>2WVxXc8f7|Tu5m0LG^=LCDE88t~ynGKx bX$oXG}JXU$gA?A^+G`Uy&d|`I`oCndfW~JVRf5g=xo!5Rd-*z_H2wixL*Q^ zdU|1|?q@jPqL)O>;H$93>b O>6Vyei>}geF{;_H4dYtHo>yUhGxg!#H8(JOOD=g|KAVyLz9PdR0oIJ zuMnH+8d2>s)hO8`3z>$8?C#r}xPQ~+e=^0wJNdEyt^PN2y=9wPt>(nKntgJzp*k#4 z4E1TB^ZPgFYXI}|kWot1gXM3dJ>G5hc(*(1t-Az5(Vjh=@jhnbEKZnUyvNiW|4x-E zD{P;SYkyb%@9kEP4?EjGY;A|1E`NU| AR9C^U#0 z4MNCV)Oob1uUI6n|EjtE0amei@QwW1;o8NFZ#Vy9^0}s{+S%XdK0Y`Pv1|U_!qdJ7 z(ha}x;~M|R9gyyh%%yFHx>1jGx$Bn?XD%PQpu@eOQ`ND24YZQ2Sk7F(a*e#wJgxQl z(0|T~pBwco@=vQ9i=k#{8(8;FfA+$cgNUSZgt#SS@0!r^lZ0k{?^&gc!THt1qrX#% zzo+#L `K_REe{LUTzhdn^5j1;$=kp&WT7%Rk0kBFs(3NOopwa$=cto& z2UpLKeNbq+k$8UZNR|>dk>xEN9%km4zl;1Y9pijEc9($=^P#}`&by~ou1Ei2T$ GS8?AOunZepRudvqcp0c%BV*Y*X zo#%cQb28tyE1Wargswfwq`r&2t-xBP$s7jBpa0aLJ(Ln30rvUoim4Q%qSVmT+1A`0 z1(rAZcO19bvQvm)NkX+;D<$%+PBWF%XSU^>=^W?Qun@XwSNiP@&Ix7TU~X5U!C1;$ zBJgA_8sK1U)duBV_yXl3-h yx$JV$zT{5T=f$NZsTr4ln>8Xros6 zz796t6Q-)OB(q0) ukWO$Gp>0kL zOfW4=7_@5>sncy J5k9lUS;1~8_2q52j*ha6Z0CNvzCCMorXGXH@o=-Iy9INTuQM@5}!uGzjOU0m43VF4+OG-mpI7$Ur(=sVQ zFst7J-s%-DhFs94dV bx!J*;G%j&Hm(fXAVAVjdL3lfnV+a z#><+F|3XuEqTH)uJyB7Qff5YsoAS%5TgzdfHFOpQ2+E-3ZK}m?lDEHYevAIw(*2=X z7>?oVwC^K9L4SiUyreNy-Q+U5sylwTYuT03@f+t&@yw9HRQYzVWDledm;SfR?)nC{ zAUAydHS0JC)z8}Y5I}QzryoSA-bXxwpx>sswoJb5jj>+o!BI3CK$u9m+xs-05)M}4 zI= QJxu zSNuK)**0_m;3o4 TEMngB pgJ=?5wXOm;=)j$!Y`}3 u%nU-Ikillr^?x13Ak&c~7q?FzT< AlA8N}MabJn-@CovJ=XI0xtrWL z3!K$aw0bEQFDEh#M$|Bl{l+*ocGk|%$m0F!WZVMK2N6p|WP&GBYo(LuNP !Z87Rt*t0n+NilUJ#j5|6Ja7nRp ``q<+ea0sl5bZg<^es^pthB4=XOpJa6E=s8}4iLl~Z8vHV+EnN^Qj? z o~AqjLhawfD5$OZksDg!d{R0B@)fJ3n11TV^RCT18W3%tNOv9tV={oZYV}4?J^9 z2?|!bapKdyy+>b9epZtGRX=l&ADw*TWB9XBA{2xf?NkOOn4PD!6Vv&cZS~8ftB3F* zm@a}eU!tAZaokU-IZi -fNs#UTyY->x&Oc+2R>5crc;mYfyKg@^jY06POZ*Z zCE~(u&P2Oay~XX*#zY*&g3SXHWnU|wq`z~#+4}Tg(YLCP>F?ccIzu@B4xMt405Jx4 zz!;^$$4vs**t!6_6j)&L2nPcvxg0=AfXmzS0k{n86yOP*?rM7 4$J|`C)g*T*~kpJ(6((FSG>|~m9bcOux%El$PYrc z6U3D4x3)oOwvx_JF_iw+^uo`lo6mo(rFvU17f}IKQQs Dhs4qk`i%4IzTJ4NBmE2#v>-gr ?|%b2mp|%D?|x>%B*RKK{>jY5b8wf#ZSl zZ~`hw-!$`Tm}0lP6sUhkob<#kvo(H`aB=n;ziBuEQ=`vILnB^eV3cp)ft_cY*+=94 z`erT5_&V_!MG3g~T--8Gg~&9bf^c7@xDVVlpn8ET(|K8hFrY%?lX$gdJQXBg!NF;a z }pO>j1;b!p~RxP;qB9$Ru++Tn%i!(Dw#l0b!nXceINL9Ye zam)CeU0@uClKZzAdxeBkZNa_ZxW$37oiu*H3NDbSA(yKxaLg1k>?BX+vrNT;Y4lZw z&LgRIeN{h&%y+BLe=NWq6N5(Wg!N&&8B*ZsOWbFw%D5c&REBPD#LZAu-f$JT^IR1< zPxT@R_lk?Y!O60-!# PNh)gohoN#olPlDUhptCt*_> zvCC4GDiL-?S$F_&S4b)ojW`KaB@~GX$}^jg<|;(0Wo(rtp6V5;%5N(64i~GW_0<8m zQ!BUy61u1|-`M^HtTkUrtXn%R(B~yqk25dE3;oAco^o+{N*W##+bTjYiO`qBRnm}{ zk2KXS6pily=C2f^q&~Kjuu4ASLn^wTi(TTtZZk36jaY+lm795(k5bH65=KE&k`yts zBwP)UaanHpm4^|LRR4-p(pvO?OI5$*VdhBKDV_q^Be#0PQ>nq1b@Q tri0fV)D&+~ndOk#ZhNE0i?7NlvL< z0=7zqeZ#}fva_2-D(|T(ubJ2u9_Dzs678q)Rf_yb!oF$5_H%K!W!TSbl^GuHE4O%s zq%xVOsyBgA$W-32`ETS!V !tQek z9|Sr8D 4FR*_)8qs52T!@lCvLps@nbhB{t?W2e%^5iBH6iG-AJ`@jvr0ic~Bg zg%iYQ{cXfH@4$VO6`3Lxxu7)cWeP?kUhtQi9YCqV=biA4H?x}H;h4CgTns^geIq{~ z>$gS$;MyCpD>5{4K%Yv+o*)TceyDMs7sxL|CU>)z`gn%(>aY1V76oPp$5nfz=k=Y; zN dpGufBv_M`%2k@gH;PWqQ=F`qP$1zNxs?SFc?7Pv6evO4(y34}JCWFa7fc zSFfGXDA`h1>!R@SuB>ZdUAw#I+Sy+j7tz<&nOx%^x%LR%Akn>Y|NgZ#VZwE~4Fgvj zuHC=vu%)4G4+QOW?Zo|t=X n8Txc>nnN@Rox1$2WfLxp^}5hP>d$F#7!Re>WAs%u4n^pIyBP4%?kCXaKG?s=U6s zJ|5q ~W*^g9hrfz(n4twu+|l@%m5RE#u?2ek*B<5?B1kTO$qz$h{fM z^4rwkS+@RnY~$~&+j__T+8tNdJMP!+*qyzze(xRH$2-oentVUrp zyyY(Dk=&j|nVY I4^AAV%hr z_7srz9JXra9!D04n$xVB54tvIu4>NbHFIAhk9@qBY}In`b#v0HmJ=$?1yW?%)|RA? z&Bx9n^W@D1XIt`DwPd_*NqNw6{6Xu5*R6#r_s?EyE%$G|cD7adQ1g!7zqz&b@bT8G zNAK5J-M{dpwe{$O;#I98mFCm_53av{Ahc>tIEoxNi_DiIpPWS&a*+WfNO|(Tv5OG> zjZiyM%KpCOsV5KLsI*U8wa@yuzunvZ{$nDJ1Ma_-984ue7u`{$5ypNF4cJD>UPHnM5G+Tx~7pv_*3n^s2>X4SfwYF)Mg1jm3NAG;uz z!Y;4su4pfU`(Wq#LQT7dE+4gS`h4KQ@@|L0PCBM*-M+5C!R|HOu3c7yZ;Vb$4#ct% z!f61jd3Ju<+ZkuQd1qno-of7e3%v(1eF@fmhXVQz@9Rq`?E7`UJ8iJ9pV57BtdDOU zu*;-B8xxS}=9SaXfA*WRWtHY)(mpkE&+&kPn9+V*nx<% ^059haD7l=S33*3W&Pw%z>~ZCp4_$eZSQ(~WAMq7kpI8Qwx0^`3K;C! zH`rG=*ke5y!-IEP!@Onv53Qftc0x>L@G2TgB!2pO@afdT)BpW>TH1(a*g;7Yfr z9}10BHbN_Du*j68#lfU+) r$1c zQq^-(Kq>{ephXj@<~bv)a+s2y9N0Ik|7qCp(=Y^o*pL*AjvY2XXP~4XMX*t;R7Y%8 zM-ANplM^Y!g(K^p>JXP+ z>^WX_Y|RG6Sj3bLbQ_9!LU~niJ?X_B>T|u-BSD{%RL&t2Nh5)ON4-gqEvsLi9fnZ2 zV|aG}#=+nL0MAA31^_r0Y)(r8qyUWzZm9!MTrmF_IN%d OtOmizjY_| N|K0SxffIVWB3NGpt?N$AC#1R=#!9h*`Mc%vz0sv^67=Dck zwz&alA9#bB0x{U5_@Y_$!0AUPq>&={Zag^V9k5db54aA*w2whK;Oy1lMB2D2X% 5 E=UbPIO?ad1D{5VKE1s0>DjXd zZM@f)JqznTgI#z`Z>gG>7(ZY1*`NFQ)924$uwUN)>z;n|)>$0dsy_VIw?M^rHyX&MFG)@8 zPD^m#@0Cf Z<}a_PkZSZwg6?S2)8QaJ&%g@SUHqYIcIT_tU{(U2emMTk@eMJTisob?jCx)CMj zfoDayO?Pu}=CJBgB!L~(a^abq$Z1w7OacIJo=}a4lKSG(B+w5)?oSEEl!N &8S5w!$pI79H?KPv`)pR%T_8muAM#Ewg+z4Fvd18c*FXS@q_)*P4{AD;CUk-dvd zB1Y!?%E)O8V$$dB%~2o!!H#o=3{Ei|*8LT{>)6<63SJG3Ft>ejFEfJqG?sIf1C4ql ztR;aVKCFg_y9eIBdj4^9V{}iE>fRVr7+10I_IF<)a6Wxmdh2)Y0nGjM@Aux4qaEml zNnfv~{??wAKH3cJZF!9-o*=0*l0|iq6JK`@o?dhCom+A*M(ATL{QVL!v_2Uw{eI|F zF20_{=;i2YojUGz6wQ*H?1O$#3s6Mrq-McKZ>2Bvve{o-za5$%t_!*xHT8>Ou->Th z_c|ocKN2pT{??=@)4r76BOU*Z$evuEuzO1XZ?iDiBkdUN?QicsgNJrT>=_rZildwc z)d*{>UZ8Ny4C$D8W5ZN8V$8W?U;W}RSaFBB;Zc?y2cISsqC zq`m F;>s0lN%`vKnH%A@)@jUbzfwgAii3ar2=Gc=PlOyzV^(!LcFP102+O=V-BXG~1 z=gC_SJovG+mD{D65~;*@E=MMfZcN#h{9bQqJbAV}<;|W?k HFcX*==H z!>ctJi?9}1y6LaYvLM*5mDcDlQz }jVW@zHytDL!nV$y@LsDETe`+$ zqM>YS^3R=>F-zgGr}y5AnAP9a_-%W^(Hn&b9W7WWq9zpiDqg2_)315LndDa=>MrCQ z*{vTdokrB`q*Z5YHB?mZy>b?N<^!Q+?b*FIPyKV*cd^Uk_d;VZ``4YJ-d$Vw)h@Ol z-FN@ffvs@GeaQ0f-R%&?zJqs9wy*l2!;U}usWUFzZJ{28h)f{dxZ4qa!Btyj-ZILf zt}K*kUiUpTaQ#C _2X5hcGSwGpW(lhi4E&B zQpd8_PnB(^f!-uf_#d1~UbvZg?uhK#vPZJ~k@lmd(V&52OY-YM-rpzg1ZDpDbQf{q z$M8nKZh<~{DLwOMDz76)OFT{R9M96cs)Wm$kkK%PSW|CaV&%rp!c=h}t0^5QmuS_R za4(H}_zv9KMxHS=8hVpW)7V1Jw(2H9d?|FzUTU^+5?DWQSP1vQ3$T-&NU!lO?Hqg# zk}#vdo=9bwm@Q^o&rQQtuVjaYiG+S(HIOU#F2sE*IswQ=9FbH1WviK91d9`xv}_8r z8sZo41wJc-nzz{%ZO8-beM kf&Nb> z^PL@PuZ)48LHc@i-YTlBrR%NxAf$+R(Bwa{8ZHBU8y?%0UW?snWw;v_9BE&Cp}W>9 zLPxkJwez@}MvSdL{i;?|hlaD5uJ($WXC}{5$Mkm~7!yL1IT8Y`B%(H?ZP>Rf^lUKA zc%7#X)RwzLMH`uA>PLD?!q_7=q+X&3M8d>(;*!_3aqge;pPJ2mg*Y?KU56Dvdr88? zGtcJYTx_XGn&T+y%U}o0Ln=)AdPwD7ZM^s9*6eVX>XP5F@y;i?&r;rm)+(Ln)RY0| z?U%w#Q79Sp0xgRp6R6ioghoe7&_Q!xeharpD~mc*Qt z!K==0a9rC_>%J1+8Fu7VA)ujZa{^?yz|W8Cj@4U|!rk{wt0<223y9j4^Ko~7K6Sv< zsLMGB)5vLTLe;F+d#5hvL^AGRH&pL(KkVSMMNrSLrE8nwJ9P*p1;-c=bxAnFC7q0o zVAJ(l8WGgIj-nm4bmDhju5HULY@p<#+JY0zz3Eob_Calfhp7Pj?onBZ$Jz?N7Qp=9 zqKenxX5ysMyI(*qimEC(i?F$3b5!C#mP0g_5O(3)sr)dp0R0AlyR7hvSOkIYM+wyq zo-f;*aS~HNWY~6>s3hULRF;8Wr(c{mhnzq p6cz$OTc 24D*W1vH2K5>WsM{y2$l3#RaB~`UO%GWYv8hfB>rZDtIlX&$J z-|idL>c`|ct}`mQl$K7-k6hoRo& #9!5-Y#p;r&T`)zozJ8!)SEE4dxsZ=ZU#ANjy zqe69*tO}ZwC*eG)E9Oe-S45T+rHHF%tkNZ;Jrid%qqtzxK)$r-Bv1X8Ot9TQ0ioy7 zD9x^rNl#=X)tdh;2;_O0KBE?}!ujYcPTtkt9Vi-Cuc(HZt$l-puJo;b+uG7+@QjPw z%r!!7rSycJ6DPIwZTo!a(XKmpT44b#V4Z$uHo2y8ws{LkeJ>y+&!>8qU8wp{2@mhq zw_UW0ox#`2g#;uO1b5?sG}satQNmNM_rE_K Y>IaVi zRQ>;sO+Emt 2NF) zh5#_tc@UziD@Ro2BoVmvd$|n?Jo>vl2EAw)hNm8buGhVOtjpb+L3d+#?_>C;Gu##5 zy_isjPhq#xN9Z@m*s!mg71r$}W_T}jZ?Nw6TmfrHHC?K_v{TRE<8=wC-r?yz>NI{t zgZGv;@2!L0k(1t@(`P(NdcrY2(U{&Xb7!L6d}1-Z9(KK(|9E@ydx*^5*h0{r2A}KI zy;}7?`zL)4EchJ! ampmElTleM2PO zV`Culyl>_oUmk|Z*Xz&F%OX?2#!O~*Br_+HDR5+FS@-8U_8Sqi@(5WBXQnZYd7O}y z|A#5U4CE7-d2P&-ZhmC}ewho*@_l}#`#@w7UoQc4q}KNgK`XAK;!NqJ-}%~;XRXVt z220NCv1-y!iV2Tv0$6ncqKlEN%jvB8Le`Zk)>UPRtc}$$$htnsy0O5z`G?hr@xP^{ z?_2xdar18q@V{GCd32wDbGm;^p?_ XE{o5D(AN}!{U;;Yy0y?b& zy4(V~0|I&?1A6xb^rZ*%7X}Pe1w3vDc+wUyI2h20LH?hZVjS@QVu~psKpE5Oo{Hys zN)RA0yp+UOc3pG8EMz6G5t^5Wf)NIc>R6gWa8vltJZS-78v%`UKCK>Gamw~lsv4kS z)_>ON(0`KycP 63CxTNn{EanZMIb<~a6k`JagB86-2h=mpot6x0wxHAs~v@}k4Z^<4-m0S8l^@4xS)xNXc{Mbg3_SKt~^7VGU>-9w8%+on= z)71+>kJ|tKUeS5IgVyO8q^?)S>+z56&(+X)iDF}zv%Bv>wdk?$Ls$Z&8Y9EyZZtno zfa0nlNnG(+fWnEN$){YZH;VZoi|s`~k+Pu;$w-NEm}8 hh4Y$Q}!x((*+UsynZyNbHc#iZ1-x8%Qa_b)7|YpnY3dX;JZq=e|RBak4Rk zKpawXxpr{v$Avo~p1l%J!vHc*N8~K$L*Q9uIw%9NJlNlf0x8wqQClEYkC~gv0q%ac zpxM6_jrKc%!;ENa%j{;etp?`G(DaTM&D&Pf%S?fzPK!$tK ^dtP7&6O;|G(}T|g`>jFDRqJ+^ BySTT`w7%iXAh z6{j@**7>E$pNQcPpjknyW3AQ5{12~AX?Qt<$PNFYCZLT_bMa1dTsn!~E_S_;T8(B{ z8B~shz%1iU(B51+UXe>-kk9m?ShO0Tl-RARjA=zWPovft0j4$yhe8Onq~zN|n_Y2- zXp1xNZXYtx+BEFu!_HDa!zB#K=hDH2vwP$-u+{P81NPlf{@lttV@^{3rk}Hhv-29o z>B2Qpl{y6N0j8LZ<%8L=f&DU_feqffD%<>)+P*QJx0x36$>Y-*VAh2>iSOkmmSwTJ zP~~SW%t){kvqN%HPx{r&V^6Kkg;S^X^vJFeNKRlt))|vZhIwfiS_ewYiS10t*=%=# zRklM*h~J-RWK5>pNS^LLaPq9I4Y-V?2cDC?^J(dL%0Q27NOD yMLWMz?lHyEpH0iK9H x-c8&*GJRlmv9+v&XW!@Kx_mYmn8D{N6GFCi-f zeU!NeJK@&OM3qQ?5$nDUcWuw>EF7d7=CIPZM#o*atEhBvth)}%m1xkpOTrMX6Sc_J z$;%$JPBm~pFc1RlJfH)rRZ79N-=4tESh91Z>ihLOnYYXOo)Psx)~`La0`KMF@d`F0 z?Q<(|kjNGx!=NVGqJCsEYm#Yqd24+n5=~45;c3(Sgn_q#He>!m<~qc6la7dkA)>8t zGJ?`*+L71XXwg76x9_S8-T^AjiYP+s{Pkl^dy1@En&Ng?BHv(S hXNy$bK30Xz@Pl5DRcflcs-_V9IAAAd Gw#IX9q9fw7G|TYMtcdWC!aWgDvgUa7yv|AdhL)qPZZ zCa;o_p`q(g4Au;dRYe1ze&Z>0!_UlZm3}hY-v5l+W?XD*?yUg978`(Pw^TuMbj^YL zC@%^b2!h6(7O&8AKQ!tW?CZc6AhXW?&By=Gem90RAh)_F2L-3EnDN*&d=#iOm;}|= zfI~~6GPqw@w}$tb9i{=+v$_wC_-F5Yc0$s5B7aVHIW wGxEkudS5rE#RvVe$ zds3|w3rd~UBaxlx2C}`N$}@w?QYGmzsHm*z_QUgO2>NG``jvHhCKvkoQ6X0gLhFtG z*Y8*c@W?!OlJJSsVy6b(KuEFzlYLv1+#J#cx9K^biu(i3QN1oz4PMtt`7oL1jOs4) z$aQ<2)ahpu%;9cS7AZn2Fv>1xe*n)JEUGfO-<9tLWC7`TnlX|4|Izl|VM)jF+wb?w z5JXg#ilzomoS~WGO29oTG)*%z&6!!Lnc4 Gga$=P$ zi-$SZq!;JHp{iE*jvH_pNog!~{oBS{)=Y!AV{>zxDW7JQ#*5DdU9;DBP0GYnYCJ9B z{_Sjs%dRR}rX_4XoBHJGM3w=aiQbIYd6kF(EG5o4q3Z(FU9S*Dng4E{iFQ _Q(zT}7|Z*3|&)}|lR#7AX| z<<^p!>&x(efMZg8-+L)uP@-r}Mo$TCKpq}MCUPKhuqWs}Dg=W=_>F@$37Pl~?5-!7 zc!PLYFiQa
vX*YaVh;%G<+yoZi(TsW~rrOvVBA*6sF39M2mTQ7{aUX}a@$ZrcD z-OSSDXUMJvWjPrbK^(q<8cO)asczKt9>h3;=sK}H7jFKgFnm^$J}f#&?s2YU<6$ET zIbYHtR4Rlod%!h`nT)p^w58qC+SZ`q79Z}(4=2UL_hn)h_$c{-+&u9y2-|2;lujZO zEQ?g7yuxfMlFdd2)3F*(m_;4HBo13y9Q%%-_q@b&wU~lnAQk!AD*Zs9IVi=tqN&P? zq8%z#y3+YoY8Q<8Kz HK)l?J?frtY_U^>x7Im}3=OdZa! zxUFO1s}HOlQLvyn%ncn)E{7fdx&4+8r2o*ij@8gz9rutEnV8EVGV%{y9ok_mF&tWi zKf%FVNyE8Sz}J=?sA1_=I}u3XfJ#`Y{5@a1*kZ9qNoE@Xp9CIG0?{EB${4=f=ltpZ zXwBUrcmWWID|E((5%!q<>Di<%uxr_Xy-MEvFMW+sV Ht#I&kD1ax`r zPr?rYxK|O{&Q;p;zL?cc@@G)l@$=3oOCKW+&2HALu#TS4pKBMdLi5%v(_ZtU5I$Ig zHzH%>zmw31@V?Z-HIDYIS@OJ-uO_5SZU%G8tl)e27DqF}j<;Lu9gE0`*ej12TD3d8 zmCl|>-Kqs4T`g2cHAPj?D#T61FRKqvIzPz&sbij(e&!Gk-p)!H&cr{`HJ8XT?`L3b z AJwax}fR0 z;NNv2YW2Hq>ca!;BahTapRSMTtB;+o-~YQlPOTxqP-z1T3K2uLa2gKTH0+FNu;(Y( zv7l1ILDD!ONv$!}qyA`fb;_zuUFvk>CNn6c4QinVs)={lN}#7s6SA@~wvwjvzoFIB z1V HL!sb2(313UN3<))HKrEO7m{9u4;NRjc-7;inH;pHqbjqE=<2`qLUl@ z-+@kSO#OIM&orKI)7m|K;T{U-(AJ3j-0)GYH4W8-^lr@h4Rxf#oJm;b?n^)V@c)hw zSH9i7Dm6r3vvH+Z>0JI^&QoY-}w3^KM<^}@T z-YQU++Tpw^J 6kDC%&A1!Gx9}4n4v8!MGj|1?IGJ {x5f0pt}2J^g{)aUb6rnpXuxhS zj)9Q@+&XGgNp|;0Af%-4y3`t@oW5Zd-_>@s)sfnKtFIM8zi1HGdYFnN)1@d1h+P{L zYulvr<>s5CcpFw YmJ zFOx!{mi)$35*T&~+#3qZwCy?H*t-S?8Vuq!nBcM1XOP4P7tRO=vU4#8_%Ro1-@9m4 ziUhXiwSrC6DJhzDl?L+^gQ-=g&JJMoYvmnBn3RwZ(HfXK6>|eFCy&N`Z8_yDhqKJZ zoR7n!c(-X)VEJ?_L i8$C%t_L7on-4 yNPvmw~H4n5nOW9nBO zj3?w=JelUhGdQT3CHT<{lpY`6(AB|HF>7|iCgs*A9&AgU0UhX`OnRR+S*IpP=GX`T z9_(t>(vhNXvFcEw0D5@_Jg`a{+Y4Tp#Ep?c6^xHX>Yl-W8+>p*7jv^M(zeihP(*1^ zaaRj@c;qPl&-3W}*%(*zSR}aTB~@m?7xFw-bq14b@D$=Gl$&Y8dk9-cVxZ&3K*R;u z!5~fDfw7=%9i?LMu}8u!6x=}`$3#E;*)oLW$UIqcw*oz>L~W~nq;eF{%u>+sfn<@~ z%_P`ebk86Gbp0 #mwH8!En{5;_3~jOKkpy6+YiCmA`20-8P#n% z7MH}J$vurQ!KqqdC#3C3mj#TkOwo(Ozi3`(gN4+xF*etoOb_FaPU3H(_YwFAPIa#Z z*&?U *H_=q-hjKYSj8%#cC0OXK>Y8l+MkZA}D)n&IoO2+8C060uV zyG#P5K>Bg6>>90JM;7FZy+TlAd~U~c`6r0yXq@!uF5)lz#~))&X$%0RSWnW0038rO z;Tv6wl0w&q93(MNzCTTAW~2TW@KWSTpMFAjri}UspvFh2BXALUm~|njRg$c0QB)HT zZ^CExyq>Yk#N-UX2Y+O>`gnlQXMbX#DZf$6Lbxz?pwelV4~|_Jq_FKczB?Hm_85Qo zaVW_<3L=~~z4K&bd`48e;3EN+;*gx`lo#*hDI}f3EX*^06gVrhh631adZ;Ubr>~yC zuRn}GBOKdL@3r=h`sKQd#(3KciQ(+*wc{8e+sQV7e9RrgZ-*4o!3to-gk6>REqjg> z`qqv4w)QN3B5wYxk7jl 7Mj_++loOC9}_{DQ== zicpxM-Fr^EcTgO1 &_B_4~=_5#y@Rvz5GhvoJ z*Vqa$AzVV5xBo1L0E%`$LSpJVJ|^SSH)2wcEKitYOwO;f3Izy?xHb%;;-Au2?mGq< zP-FL5f$*@FZxGTDbLno-f(-9Cet4&X3>)!L0uNdh#hZHn<*ij1EJF{n!6-|aHVa~3 zaEA0plZinX2@K__$S^%DRx kA15L$n6C_pTOBD$E*;N|R#Q4o_Vpy($+g1QtAVMkt zO6LBYDoq1B3+~1HgW<5TQmu;HfGM~a`8${T@x3D%ZY9g2Y%QAL-c*YwQBuX1{2>am zDY}+A#s%1+CLe)Qgj-}Q$|rnB+w%wcGAERLE98`0uWm_43EF1g+UP-qpF0f2a{YN; zfk8WeItoc#8yI_AZ$9Z-?!HyHU51SF0yz@Cx8;}t3HyXQVJB^yhvWkWS?3%wHFy60 z#_yIj4>A%Ag@N@;ns||QI28QSnscmijr>DpXnL!aGn+(+pXqw9+!hR6 yCb~^Y7onRJUHCbc#<4 #=k>XIBs7WHNHE<_u5Slak=@38FId(@-Z zf-Yo2D(Ua;k};?@i`01bEAn;vIba^dQb4WIbPetjUaaZ!?JK45I1c}wqYsm~0MJnk z>6U+V_yvLCQYg%ndn8p$B@?OEXv0ZyeqZRzov* yI+(Yb04v=$t!Y6>k07x+oL<0^Ugzp3|@? zicufru}lsJbBl8P1)`>G7uAirZX1$AJZ{~5a^hojhZ)C%<6au#y+>VB6W7V&jNpLP z`BEf*= &~JvvKzS+-^J~b7@P_VJVxx38HRi+uNB!Wi;zP>pISZU zjS~^{T!L8L=AJp1(}^^!>Q~Y2J40#@C@qyUJSyR_cjX(1%RScLKP^}%ni+PvmOoT` zJM w*8(K6jxNT_-_`qOeCxUx;l<|eJ)%;{ZM(H9qbub+={~wC zaiYuK(MIBPB@T@5vB9y09CW0l4S^CwnB=4)gZX*{7h}cVHAs}pR3qW+0g?@iSzkhe ztERDli)6PPh_jjdJ{Cwrx!g8xgD%XG;kv9D#f%W{x?}xZXuQ@Ax(-{55-PKv#l$9( zZjdcTp@bsOq1XDrm&Q05C` `T@lx zc8&2h0g^1%^7TPBuf)Y^u|%8dwOAQ;6t=93v_a;+I3t($7EVZEMCD37S-S`{nZ$&i zegIV@_{e?;I}e1!=QgFyf(}$>Jw-=RZ*JzK*Xm+Fed-DH=c5pWS*&QMw3VOyQ2<7` zr2?^Zm 5oRV*lkKVKTUUg5&SIK4GEh?EjPV6Xu_p?C_E?W*t`ww; zKGPLrS*e;50f-F%7m!&sYMPiZ@liKQ1dgk@lD}IN$_ 8IOh}VcIp) zd?F}QFm0+fPCHs~-U=r~M+NY4Fao<-cDw8mK^j4tG?qD5jkRMrxxW~7k$ui^N&1b+ zp?PnxBgXDH^+ZTk8aj>$Z&(F%oM3DCQ9M;`WPZ{#yI=1XQkO5HQ-ttAQJQRXJHvSm z$pWkp*8O|UL1?ldS`&Oh%&?a%dpln<< xO4{q7J3uP3zYs6f+>X9GQZ%iK_U2OpOAi{n=L~y zVb#aG*T|v0nB0|;Ymne|Y`N!jy_68RWk~e#nKh#t$6`n>aiF9pU^cqwQnEQ~Qektz z?Ai&S<@K`=-1*f )cWn4Hv7sqq((UI50j!&& z1$U&Bt0v-SFWsUYf3XSkb8>p# 9YFKCQ(-rWB0+pgPoHokYQ?{}M?YdC2Ceh0$#4o4%Yqx`sy5&h_N z>HegG#B(3+5B$D(LE&6a^1+Y0FCFc8b@9-Z2Y=rm)j#?QbXaavJiZvc%T^5El5#EV z@5ei1SFQ5SRE+9Zel8z5wy@#mVd*K+*Yk+ui_Q*5?w7y(*5G>lo!`wPkFUJ^ekt?# zQiQ|N=_fCLTp2n3@zBkqFMqDS{CN{`LXz%q?6u0P u% mG z-}%4#{bc0CkM5htKPJEW^9pftdD!8^m-1IDZ(L9QPQ94?{mQGqXKp6hKmGK(^1!w4 zw{F<~tJ$#H6jr(VNwLo>uuFqZNkd)s+q$7Ctf%6rf@x9CTA*X&Q64ct^Nkr-t;IaW z$l`CRa?6fx=Lb3)ayqn9v+*`PNm^#_-dZYrLqc*KPVsu9-<=vul{VG%uNmrBZ>5|5 z2CdW>8sTypiIr-$=SMuz>T_mbuDN*&waKw(H8q oTv@k)t>+BI8 zw#exXW@x=5{#KR($&rKfxJ8fEipI0)W3^^sgDTZm64u;0WW-YrC_hwOLa1Toj4)_Y^7m1?(^8>C{Hs~7A; z%9yA<)GpkI?v%3_UFBL-AIhp%yh^=HqXK)~ N*Ui fuhFj2J ztmwjXuOYp}TQXHDJL4_o<8HSfxmAw?GF4rP*N~SAi}@krp|jPJ_OX+;v>fVX>zJMd zSl3aV&L}g82FrtLJG3X 4yEWbr;uls~2$cR1<-a E<^dL?={cvWq9K}3M&WK*<(Z;eToHRy&l!WglN-+r4#y~(S+6|?l4>Wq zV!%?i8uy@eS0(IHF@>W#t`R`Xp)I!fgtwF$RwIdC3nU)>?YRX$Azu~!J|&yZk*+~d zH6ai`IuzQ5M3LBC0=7~i7r}#SXR!?jS_w#m2p9~B1=n~F;)_&s+4MrT+`SU;J&Q|j zQ_vutz3Q&TC1K#zEwW(YI%y_91jb@<*BrlmhXrXL$R&i7hO#rvNZ55=ut+xKh=KI^ zQp}VtS3U!BP32KJR*td84dItGc>p0gzwaSP-~py|j`Z>h88C@x zD zNGbA}qb`M0#A6dh0BRJ1s;J#~jQu$jK(!&55_Z{P9y7-f>H$*N4=&6Z^iV()U-kA| zRfAF9TK3lU+H5SU 1*nvziGC9?2}Y|3l78oumX1C;a&_}-=l3V6)zr<)9PAHRm5 zdYUH1(MIg^k)8uYsG)JP2 65vo8Vtn8#xHL7JR^meGvd zOc>SheG0SaArh8hTdifC >zA!+AjG3{JL%p~+Mt0GejmlFXLerA3MB0~v~ zNJ)?(Jdggu6H|_VD4^U^ v=l|(hd|Z1!&*Z<@NOtlNaU3&37duE2axG?@?4O7#u`n_Ek22 z@;LG+g=hbIC%5q&XA}}_jXNklpShUHT?`tqRxe AWj%RFy`aWX?(N>}i6+W{!Ei$uXG0qSL1NN60wg;Emk zR_RY=b1Jg$MJR2hBC;gNgBX;dAH3x-ARPgd-9ic$bMpll2~W0^ni(_yqQ5bR*eD;z zdcCb1r=Yoh6^ijwP(Zj4fupgSg9LUhkySt}b@+;`?`>Tts_dN8T!JIEjizr<2I9rr zA)JQ=0fp8ZF}mWM1UDHbU;cs#GG4wwRZZ)qGvZede-+4D7pHrKSLkgJUW!#HT~0UO zPcCTVKlYX#l;UDp^EX)90hm`qQ!-Yn8O8KmRDHt^YBtztxRo^bh?04anl26~Fi%0F zM4WOqpDW6)Af{c#w3Le#5*Kj>qMS}0-GjVTDZcdMo^y?4o(E1Li(0h0vt}e^mJ1+C zI5KJsbUG;ac9d&|K_r_X;Xw8wVUS#%te*n8v;y^ZdrdhpcLNz&GnJMvzQ>Jwyc&;r zDPzgog+XKlz)ndao6(qF0T7Jw8|r#|^j_$_xZ*C#uGsFJesMmgt-#Sb!@><_H8b=m zx;T*r2gPaD)@hEMsP#JPpzwLbM6>;u1(_@*Q~v1;3N)JX!h`>eMhf}$ROXop@{?P3 zClyRE*y%+{?V#*@Q8DENARdLlWY~~wI&RlR{TnQ9Z8Y|%o18A7Sf7H|1{D9AWFn9y z%D_7=i9P)kCLvb8afT*R(Q%8ML(=9gDqdZ6XN4Q=7&|?Pf4Z9|o2bm5d|?nrfyRfx z^%zPf-t0FQ`1}fyM+hojfbnw^BPg;-w2Yv*%z(G@{{;ACA$K)Q$S>C7Eg&