From 0cdeff2d8cd1cded9729fa8fe5de039d280710a0 Mon Sep 17 00:00:00 2001 From: Henry Whitaker Date: Wed, 17 Jun 2020 20:52:04 +0100 Subject: [PATCH] Changed speedtest client --- README.md | 2 +- app/Bin/SpeedTest | Bin 0 -> 187048 bytes app/Bin/SpeedTest-master/.gitignore | 36 + app/Bin/SpeedTest-master/.travis.yml | 18 + app/Bin/SpeedTest-master/CMakeCache.txt | 554 +++++++++++++++ .../CMakeFiles/3.16.3/CMakeCCompiler.cmake | 76 ++ .../CMakeFiles/3.16.3/CMakeCXXCompiler.cmake | 88 +++ .../3.16.3/CMakeDetermineCompilerABI_C.bin | Bin 0 -> 16544 bytes .../3.16.3/CMakeDetermineCompilerABI_CXX.bin | Bin 0 -> 16552 bytes .../CMakeFiles/3.16.3/CMakeSystem.cmake | 15 + .../3.16.3/CompilerIdC/CMakeCCompilerId.c | 671 ++++++++++++++++++ .../CompilerIdCXX/CMakeCXXCompilerId.cpp | 660 +++++++++++++++++ .../CMakeDirectoryInformation.cmake | 16 + .../CMakeFiles/CMakeOutput.log | 463 ++++++++++++ .../CMakeFiles/Makefile.cmake | 59 ++ app/Bin/SpeedTest-master/CMakeFiles/Makefile2 | 106 +++ .../CMakeFiles/SpeedTest.dir/CXX.includecache | 338 +++++++++ .../CMakeFiles/SpeedTest.dir/DependInfo.cmake | 25 + .../CMakeFiles/SpeedTest.dir/build.make | 147 ++++ .../SpeedTest.dir/cmake_clean.cmake | 13 + .../CMakeFiles/SpeedTest.dir/depend.internal | 96 +++ .../CMakeFiles/SpeedTest.dir/depend.make | 96 +++ .../CMakeFiles/SpeedTest.dir/flags.make | 10 + .../CMakeFiles/SpeedTest.dir/link.txt | 1 + .../CMakeFiles/SpeedTest.dir/progress.make | 6 + .../CMakeFiles/TargetDirectories.txt | 7 + .../CMakeFiles/cmake.check_cache | 1 + .../CMakeFiles/progress.marks | 1 + app/Bin/SpeedTest-master/CMakeLists.txt | 58 ++ app/Bin/SpeedTest-master/CmdOptions.h | 81 +++ app/Bin/SpeedTest-master/DataTypes.h | 43 ++ app/Bin/SpeedTest-master/Dockerfile | 15 + app/Bin/SpeedTest-master/MD5Util.cpp | 22 + app/Bin/SpeedTest-master/MD5Util.h | 23 + app/Bin/SpeedTest-master/Makefile | 318 +++++++++ app/Bin/SpeedTest-master/README.md | 76 ++ app/Bin/SpeedTest-master/SpeedTest.cpp | 552 ++++++++++++++ app/Bin/SpeedTest-master/SpeedTest.h | 69 ++ app/Bin/SpeedTest-master/SpeedTestClient.cpp | 270 +++++++ app/Bin/SpeedTest-master/SpeedTestClient.h | 43 ++ app/Bin/SpeedTest-master/SpeedTestConfig.h | 17 + app/Bin/SpeedTest-master/SpeedTestConfig.h.in | 17 + app/Bin/SpeedTest-master/TestConfigTemplate.h | 120 ++++ app/Bin/SpeedTest-master/cmake_install.cmake | 65 ++ app/Bin/SpeedTest-master/install_manifest.txt | 1 + app/Bin/SpeedTest-master/main.cpp | 303 ++++++++ .../SpeedTest-master/usr/local/bin/SpeedTest | Bin 0 -> 187048 bytes app/Helpers/SpeedtestHelper.php | 97 ++- changelog.json | 6 + config/speedtest.php | 2 +- 50 files changed, 5699 insertions(+), 4 deletions(-) create mode 100755 app/Bin/SpeedTest create mode 100644 app/Bin/SpeedTest-master/.gitignore create mode 100644 app/Bin/SpeedTest-master/.travis.yml create mode 100644 app/Bin/SpeedTest-master/CMakeCache.txt create mode 100644 app/Bin/SpeedTest-master/CMakeFiles/3.16.3/CMakeCCompiler.cmake create mode 100644 app/Bin/SpeedTest-master/CMakeFiles/3.16.3/CMakeCXXCompiler.cmake create mode 100755 app/Bin/SpeedTest-master/CMakeFiles/3.16.3/CMakeDetermineCompilerABI_C.bin create mode 100755 app/Bin/SpeedTest-master/CMakeFiles/3.16.3/CMakeDetermineCompilerABI_CXX.bin create mode 100644 app/Bin/SpeedTest-master/CMakeFiles/3.16.3/CMakeSystem.cmake create mode 100644 app/Bin/SpeedTest-master/CMakeFiles/3.16.3/CompilerIdC/CMakeCCompilerId.c create mode 100644 app/Bin/SpeedTest-master/CMakeFiles/3.16.3/CompilerIdCXX/CMakeCXXCompilerId.cpp create mode 100644 app/Bin/SpeedTest-master/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 app/Bin/SpeedTest-master/CMakeFiles/CMakeOutput.log create mode 100644 app/Bin/SpeedTest-master/CMakeFiles/Makefile.cmake create mode 100644 app/Bin/SpeedTest-master/CMakeFiles/Makefile2 create mode 100644 app/Bin/SpeedTest-master/CMakeFiles/SpeedTest.dir/CXX.includecache create mode 100644 app/Bin/SpeedTest-master/CMakeFiles/SpeedTest.dir/DependInfo.cmake create mode 100644 app/Bin/SpeedTest-master/CMakeFiles/SpeedTest.dir/build.make create mode 100644 app/Bin/SpeedTest-master/CMakeFiles/SpeedTest.dir/cmake_clean.cmake create mode 100644 app/Bin/SpeedTest-master/CMakeFiles/SpeedTest.dir/depend.internal create mode 100644 app/Bin/SpeedTest-master/CMakeFiles/SpeedTest.dir/depend.make create mode 100644 app/Bin/SpeedTest-master/CMakeFiles/SpeedTest.dir/flags.make create mode 100644 app/Bin/SpeedTest-master/CMakeFiles/SpeedTest.dir/link.txt create mode 100644 app/Bin/SpeedTest-master/CMakeFiles/SpeedTest.dir/progress.make create mode 100644 app/Bin/SpeedTest-master/CMakeFiles/TargetDirectories.txt create mode 100644 app/Bin/SpeedTest-master/CMakeFiles/cmake.check_cache create mode 100644 app/Bin/SpeedTest-master/CMakeFiles/progress.marks create mode 100644 app/Bin/SpeedTest-master/CMakeLists.txt create mode 100644 app/Bin/SpeedTest-master/CmdOptions.h create mode 100644 app/Bin/SpeedTest-master/DataTypes.h create mode 100644 app/Bin/SpeedTest-master/Dockerfile create mode 100644 app/Bin/SpeedTest-master/MD5Util.cpp create mode 100644 app/Bin/SpeedTest-master/MD5Util.h create mode 100644 app/Bin/SpeedTest-master/Makefile create mode 100644 app/Bin/SpeedTest-master/README.md create mode 100644 app/Bin/SpeedTest-master/SpeedTest.cpp create mode 100644 app/Bin/SpeedTest-master/SpeedTest.h create mode 100644 app/Bin/SpeedTest-master/SpeedTestClient.cpp create mode 100644 app/Bin/SpeedTest-master/SpeedTestClient.h create mode 100644 app/Bin/SpeedTest-master/SpeedTestConfig.h create mode 100644 app/Bin/SpeedTest-master/SpeedTestConfig.h.in create mode 100644 app/Bin/SpeedTest-master/TestConfigTemplate.h create mode 100644 app/Bin/SpeedTest-master/cmake_install.cmake create mode 100644 app/Bin/SpeedTest-master/install_manifest.txt create mode 100644 app/Bin/SpeedTest-master/main.cpp create mode 100755 app/Bin/SpeedTest-master/usr/local/bin/SpeedTest diff --git a/README.md b/README.md index b3d479f1..ff1ad75d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Speedtest Tracker -[![Docker pulls](https://img.shields.io/docker/pulls/henrywhitaker3/speedtest-tracker)](https://hub.docker.com/r/henrywhitaker3/speedtest-tracker) [![last_commit](https://img.shields.io/github/last-commit/henrywhitaker3/Speedtest-Tracker)](https://github.com/henrywhitaker3/Speedtest-Tracker/commits) [![issues](https://img.shields.io/github/issues/henrywhitaker3/Speedtest-Tracker)](https://github.com/henrywhitaker3/Speedtest-Tracker/issues) ![version](https://img.shields.io/badge/version-v1.5.2-success) [![license](https://img.shields.io/github/license/henrywhitaker3/Speedtest-Tracker)](https://github.com/henrywhitaker3/Speedtest-Tracker/blob/master/LICENSE) +[![Docker pulls](https://img.shields.io/docker/pulls/henrywhitaker3/speedtest-tracker)](https://hub.docker.com/r/henrywhitaker3/speedtest-tracker) [![last_commit](https://img.shields.io/github/last-commit/henrywhitaker3/Speedtest-Tracker)](https://github.com/henrywhitaker3/Speedtest-Tracker/commits) [![issues](https://img.shields.io/github/issues/henrywhitaker3/Speedtest-Tracker)](https://github.com/henrywhitaker3/Speedtest-Tracker/issues) ![version](https://img.shields.io/badge/version-v1.5.3-success) [![license](https://img.shields.io/github/license/henrywhitaker3/Speedtest-Tracker)](https://github.com/henrywhitaker3/Speedtest-Tracker/blob/master/LICENSE) This program runs a speedtest check every hour and graphs the results. The back-end is written in [Laravel](https://laravel.com/) and the front-end uses [React](https://reactjs.org/). It uses the [speedtest-cli](https://github.com/sivel/speedtest-cli) package to get the data and uses [Chart.js](https://www.chartjs.org/) to plot the results. diff --git a/app/Bin/SpeedTest b/app/Bin/SpeedTest new file mode 100755 index 0000000000000000000000000000000000000000..3d42020101d7f6a0b78f1341cf2cb26b8c7d788f GIT binary patch literal 187048 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%0Db}(KN+%_w;*%!a)%-g6kD9U^ zmu~t>6_-xN{}Y#FWYxnCaM$(5ERuT%?6>?7dD=XGx2VLEoAbJmvg>)q92+NKQh2ZpscH_r_1+4H zZa(dcLgD1-WUp_lIW%u;9BPPIU*3xRz@PhR5Asvy&y=n5XHJd$z@LW@wK9L+hxp6B zSu&nKiEn=i$J@)$uE>xq8e{~s25Fi;fi!JL?@Rp4(xjJkc-TqCvhd3YPA9UFG7rDK z*eV~IK5;S3RQQwM!8RnmCs8;?l$m%^MYpZ9m3Jyh=m1!I&>D|mR!QQ;pzqvMVfvEO zu(K*mcZ0W@>1S+>>2HrNp-N`|Pc&}f`)%m+YQC@IePX%n=tM~3al0A5Yd>t6?>8VM zG->af9N+($z6k$|QQOJ`Rmh*WL$DG)PcuHt3S|w86Kyxz0LHHTj=oV6v%`nK>_rmZ zh-A#)WX#{qVft>d_B^q6iu6tuYbTlBDYG_N&DwT1X?*neV(nE;dFrLrhr)rhS^9`b z+{W#03Dm#NPAZC*1z z8Xiqv?alicj(w)o@sjfx+Eyk?i{$F-+p!DzAD3Ze;?mCoiq7MoK|&;2`kLxX_xRG$ z7kH4q@;&%y_yQ6q{3o+F0Q|2?{pZtdqlr>Cko3(J{G*9W_W%@qjDKSMH~7-czI3!7 z4>kBN^Euu_7)SUk^=||+uKs@!{#UB-&+(kE8TmKdyNxc$JlOZJ2ME<3}PbGtFE2^;nU8+O*JK1Dqh1HoY(E)6Uoq4-vcG(Dp z4Ih89ZYDy8(4hTOT!+<$tCv@mv1ch^)_lq|g5mK+1nGzizx#<$s}qe-EGk z36Fnu8NVqkrtn1JcqEGW8Qr5e|Eoc7OPW%OYaJjbUr9;ZzI@Fns_ zN5jTJZ+b9OL=U0@?ff6VMWAYXKy0AKhAUDQ?I=Fm`4yvZ$erC_oTgi&#YkQ_yqp@9 zX1w-uC|o+fZfD9js-A6sNrSMC|&H zS_v@W`n%^TVJcjavrBTJJS`8u76B}THhxNv+9s8;o*@(9N;H*{c}oB ziV6wM{OS+eSXt}B^Y7HG$*~S!s80uz*=e*aQMj4}+zmHgb@|ee0AQE7?RKbK0VkA_ z_bF1ME=By*G@R2k-0NUH9_Hq32Rp{Y%F{J&cgkQNvu_WjHxq>qzl}Oh6WHDMoNap| zF<@U^774uvv+Hk~3}wO6>~o) zwn=Y%2LfglT$SKKQ^!c14eGeLC2wlOJn=<;!jKYIhxAe;W+Uzr8R>7$M@U?6WCi z&;39{HS2_*YHko=s<}xu;LrM#S{l5nmU5O<#?|uj-L_K8<7;bqjA~iB#w1DBnZv3O zN$`*+m*q=k^EEZOokeGpJ6mjO>X<&PfEvM2PQ`^wG3ji;b{3DMs>9*j(LpoR);<%^erBJvIhM< zdyTLC{UCMd`^)GtJL%?h>BL@IkTw!R-)$&Q%n5xL&o!8@-U9PZ<%;iG#@uV$oKElY z)gBmx-$LDIs0Z@)>Vy2Sp2&U`>p#5(iPkcSD=<2ZH-=L6Z%&tPTP%FRwF~(vw_=fz zx^2jl8XVt{jeCw~(ScSsES8AE-k;E(R0AS+H>!3=ETmbPp`IU%*Q&eb)i$ z0Lv#4RE~Q9WGr{STwPHSy@MX1#81I`aPHyTfo!7L1J-$lc zKzgRw&U@QfqVODZeg%p>MGjF_j!m7VW2g@hQ&T|r{%S7QyubK>!9~EiI5`idO;<3h1 z!y%q1OKWF|ty03;>ajLXf0&7wM8|Q`pyIjiH7k=d*No(m#2Mt6aB7 zob04Sx`enpMx3(@y}nd$wk=E)uEk7IF$Z;Cz25UaS6?UcG30UgdECv~5!x%vjx_ z{qkf)d#q0s-l5?e^bhO3xP7`P=aJ6gVTH>87|I16eMsdzBgb`d(V z8@AckR=i~lV5aRZ!ft5GbZJg9U1aB)wk8Dv1pUguPB!3|ZO~&-4DF}i-bCi>mhs$% zbZ~SMI*lYl=cm18I!u7K)X`u*#A2Vi7FbGiQqXBNI$w2klmR-xFKf_aP^`C~etQ$0 zFFHDyphu^m)9UDS47$cJ4c?NZgbC*T^+qHIk!~Y$h$Es55CMK!izA}-E?Q}CBGTlD zbU`Esk!}%5mpT_aBE1kvsf5N<(ujN~uN=j*`i#y$Z273)@)Y}B(q&yno7p)bwbn)m-azh8+ zrLZ7TEPt)Y+fAcC8Xo@}O+4f&-ZHH0PRiYd66bD+nkc2XV70^8`gfvMv-W-b-aJJJONX9*g??r{HioTxC7;|8AGn`q!r=GnM`4EIHQQ}aX2r>7 z<6Gpp;XXW0>`mF&O&nMXhhDI})hnkWg3I(TB;Z(T$A0C39Jg@Sym zNe?Hxc0FlmSzRKaF-dreyF6|n+E@vnJYb+hS9=6TKwKb)d!F)BpJdgtq)S}vr8MOs zpQP$lM_|IgTipsxiU(D#WIv84uCF`}XE|FjrJA*DDoFpOOP8C1UAkReQrn=9g>UF! z$*m%S^}(bWD|t>74&5LrQ;%Q&DpB(kFaypgB6(Lb2^GLOO82;Ou7)|53(k`S0@ilhN6h66b%Hhc`x>+2Q5Z zeT08^4{wMT#&Cr$tv#jlQ#iaomDC5UK556jZ)wocMYxq9P&k{$$qsi6=tvoQ7r&{( zlLXI+4o|WcPm9O1`MMfB$*7y^Y=I{So~aH`t`-jtht=nQYw_fwkuC7(u%`9ly&8w{ zPWN)N8a$fbS~T2c^n97mm3G~hr>m*bHx1W--fC*)ycAcleQPjU-sm#bt^B=W72Y9- z_dthNZ?$-(3VlsiTwBe!+mtuDQg{dBQ2p*ih@+{`mFpkFUy)q?qyiUL76G$QQ%Y0! z+3?!trOZIcHQT0T4h~_ulWFs4V(EtHGG2WDn3UgpjT`PQ;Z@Y=X2eSR>?i-BpBcOU zm2rQMX}&2_ct)SS_OM~D(PslKaup7NQ?@=tlu0-)88jS!pg_3L;kZMEOH*&207v2d znC#Mt^Un7A@NyMAQw>8OZUng-miv?|`~pwW4wd%!Sd;eQwIXcM#X9el@2RWcNx|>n zEYq|iI@02w-vnd@iw$Dqr;SR7>iC!E#OkI7N)%@L(w=w1TJKECn zJyPMhhW_Y2kKI`pkP})N41T8TjUHjOhVQY8M|TUKztipy;PZEUr@|J8s#~a1)G$eL zuryb&bVbwb7?c$9b+mns=V#lK49`>Hy8lsQNpc1orRyuDTcQP86LIUP#iJXmX6w6{ z3H4RXwXS?4<;NsQ!DS&oz6}l0qo`9~zSdxIEX0bDrIHPPi}dlcG5Wk!7kyf7h}Kx3 z+2B<4$NH$>G_~>#i!f$!tvwtZkL|H0`iCiK+8^}Si9IqnYb?!d@Z}anEBbyJpRutx zD@Q)Dl9DY}$yr^xh+uU&U&`<~n=hy__JX6Z@%|XS6Yg~q31yc8$60Wy{vR^M!=>KM zv>;@|fPnou4VmCrwkUW9GnmZ=SPZ&vldkPbhJw9A)~Kow zE5@951*u$v)$elWIdYCqeWGxNx=ptJN!XOc*OSoUERbWHm0#@!M)Vmv-7-3%V@RN5 zOo2`#ne^xAq*PAaQ2@AAztACQw?N|6_Qyowd~43^6m&Qh|*@{-@V!w9HIb;f*RQ; z$Sksk5VA@aSs~URWFfbhw{l2K#;3AZpZ~C&td?Pka_XcAnOz3)&g-srB!sNdW~|XK z{6gBqw-#6u*ijzV1q$VB1ojaRYw@rKVDI*@1`n$Tmhi9*P*s>~-t_R5s|iGvTznoM zV3?F_+uWw!MB!JAbe036k22X-=KG2A&R-pUGq&3jH_l3GtrzX)R9MuiIjU?gByO|; zZdv-slA?Oir7~v5~fmRO6qOGvwWrOseEZ z$E9y?$(u-4W23cZBdIsebW2x>Y5c0-hu3TUo4LZ@`}cQ@Yt5X^;f_C5zc{(d6iwW` z@HkEFdOmu{du0CJ(`a8VyDu+a(t9g)nrfs}<>5nn>sw#Ve$?N^feEVO% zKCG75WXn|Q?$qu9vy_&f5}n4fsn*}neQa}#UD6TFqle=4YPI)BcW?6343%`z-J{8b zZp+Wit6Ab@+<)wAFO`cH7AYop<LZ~cKQ28XIr~$f0X*+ zqdzfj<*X0XtKF27&Wm}}B|J&vQ3`cXzNh^f;ObANPwWNPsq21h$Y6k(5Kf7^-bGu- z7+Zw#WXa{A=BDxUQgJdLp%GM;^Jzmh;1jY_Yye0riAh^gkx)&ll!QicTJh0^b(v}J zgCO*r%9~i%QNCH_2YvY=UmoB{v=c0#Jd@A(iHBkhDyDYT#)>I+0Tr)|Ps-=S+?ol6 z^6Vt?GZNL#d9naUqMwZ~pQL>41WWn7}vyRd;25UHXhKp?3hiOB{*QGyA`x-7=lTh;oD)wa~4QneP9Y9QRIs9?R|9j(>p zAthcx9>i zyp_=tkIIycD?R2)D_3JYYMDey*Eco9!dirj?~I2aV=yxC4!nV%V1n`U2O%yZ6AGFz zFSxiBO9;IGRBR9iu!vCzB zq>7BWy_wF0(_cmSK6dfQgjD*^12*Qz5Qqra%1loY0E){t_pvx=hPf639`i0(5!7Co zc5@sPDt~?vI5;7Q!pO$xQ{IWo^|`4DX$L>uP?7# z%FF&e&(>BzHmai_w@4bFhkJeIVP?^HAsRGB)W3qjxH(_svg}_`+eV zaK2P9SE`Fc#K5u&yG%o`Sm(T7k=Z!q`ZPJ}i9;ikN&}I4%;%&VPr||8NhPjkn8Cn` z$XXb}=Ax;kxFO#kGUc53XU5+jXH^QYodPAKTbn*fLYz=W9!O(c(s0;VkHs>&MbqUv zvmzLzd09vNMF(^oHby3KRrOUzbBw~-lA%A#$n5r*!+V4{x>!NpLl>fkl}|Ft!3fFY zC8SZDJMyo_RqzVC2nrtc8cOcRl6?^@>8OGQ8?uHX1}Ne+-j=S0{QwN}svVc)lxxus zyD~{hGLy__bVxBtKZ`fWE6Mx;C2bZ#LVr+9@(*L`+looNR4y^aS$4Bw~QZymq&4bi0q-k@+T7c!e@^IXdZqzAfM?M;?sqt zB?F&yk4o?)*$KBFe*U;Qou%`PlDJUy*W#PMfc*x8M$r2EX~LRt2&Q}5SU6(hj8Awv zBCUCX4b1u~48;4GB;+#kkprKTAw8q zzYsA_n1Tghb|MXGydMsGhPB2E3L=2B9s@3aSgK=E%~*UNYZhB1#LYeEA--@4Y1)rK z`IB$k!SKY)^NxX$nsz%v6ElrsDZz)0 zdl5!rkkUS|aVrEr+jtXPQf~uX{(PbFc%mLF@c8DADhA8mt5aaVRy&ITCPvmkia;tlBuoYWb?#1Y!!5t7CT~qfSWGqyU|jVpez~#fUR_y z*T8#cfFXDark1Ei#+2ZbU1S+P>8@pP7+nR-MxbhkXax}`?&vhCh;kbBVCrK?2J zD>k##r&MWHzmSr_!=+ML=@&$mJY4F^xnGK5f5=53U9aVqz%^V#vGlcnVwo#2YBy(9 zAY63F@O|2Cuk)c=6l8jbH33}*9TCXwj9`FiUkd&Q!149oR)hrNA z?LkWN`eVx_T=BZam(BeM`sD0Bj+_wM730qH0NOa6-AY$weS5tsDZB}z zzn(kPhP%6z&<=pcQz-RW*tA%i2dolWg(nlWIj}6LHdfF5PqnFHvnOhEIm_~~taMe@ zIIFDD4CCmD@<&@?9)#tGpKfC)hcB)cKl^C%Hub6y>nbQRa*~60qS$n%>5*5RW)JaR{ep#jt|l*oo9+PUu{yQ);vXi=@9YEoE&-p^mNdGggL+rSpv#i);Q<)D4 z#)mfJ&(gBgT#=oVqJi6$b5TGE6N!|b3Unx?DL^QteQ;&F@>xVXv0Zs8$%^9kA|qL# z6cBh`T!myw=tj$)xznn7BSS+QC9Uy}v`bo6{xdut?#C@&cybIpMu1cUZq(p!SLG4_F(Dl*;Kq)O=NgyXMg31%TX1At?ZbN$6lI{7S)dnk zZ`(Erqk4?Gv;i6Ze7n3H4nYxZC$H%Iq#=ik&us{j#b@+OtUtfSDy>r6=XN6s_fQCp z4;vG1XF&vt(%8VzlKSV8Et-}&!3}!w2_!$g|L`Qv%Xi(mJ(>GlIsIT@!r6H?1dyEr zWcv%UT(^(t4*~@1P5v^5v1f<%^e2h)3a(F$$q|40S>ll2RhROICyQ<;V8dfN1j;&x z`sAS4wFjagHzA-Pc4rbP)*X%WiA_Y`@CRwZVVGFL#w!#63)5{iRnb>ztA z%7H?`Fw~J-DHk&@>QIY1{u2P0hkB%OlQg3~kM%};Hd^Zj@uydbqgspLV|5g;sED|t zyWFpe51*YQ)Vp74_z``+e5$zxTWc+#@MkO+Y(Qnm-J~hr4PbOk@i=8kdPh)R`zk<8 zLIU`~(`Jcmm+)#a{cSV@KM|v1BTMl?G}N*gZ$K5zmk?pudl62u84DPmnzVk1^DbcE zn3y2O?8y8CTf#cfbbSJ5Ie?0EucBJ+Y1mjRw+QZn)@-k zsFSZT0Ra71rH(mCscSZ}FDTleRG#M;B5=24H3DO9&bakY2?3-^o`V$Jg?#`ie4BAK zMnhGwa$&sYU=CI{MghtnP+%D;AbZ#!1~JK-`geBuRxa0A%uMjYxt;dI?nC>NAPqTzIm?LA3B5_ZscgdwOb7Q&0D^3#Dj>WNR5@TT$2>qSMM?6vqFfv@00V<7!S9LGA9WLI7uoU+p z-~uGbE?~O|C!}uz4UU5bA(V-;)rtnVb$u(oL4%h`y?Z3}Qg=uE-MlVsT(lm{`v9z> zEmm#6FlM3y@I(>zRbc_D=;-r+(1`niToG6aqQ2*8rokVt405gKrI_YA{MQ025ZB53 zTe+7ZjJd@)!Sx|F0+HcCm{z#bKo(WpWdXCh*8GC4PL!SntqAOM z05k4Hj(7(QJADycSeUoZ)%<4&70!w%JaChtTV_bg@1(zi{*Zg8*NtdP1&ON+GVG5H z8YIviAf~sEne)i;Eu9J&?JdOQ3jF_V$ z8am9kHF(~F> zNu(u>5UXxQC!T>tB=$2<%hfyu=ors3*bAT7i$!=zE%;20PcH1jeXp2dz`g|H7*`4p zst=Yp0?8ok%q+OFUkS4&j1jDNEs~lasdX=okFoGM3@@?5!9~IuSeF~D)-Bsn3}r;w zEo@3*Dl1KRtop`{o3W)hGOBry>otSecF;F#mccBo*4)iPM5uAt5(<=z-w*|~DjCCX0h{)?8miZHF0g2ySTk2W~ z^CEOp<7QSbGGY2W5Oq;V{FCUv0)AzcZ8z6LJ&Rdr4=4GLT7Ft(sc^*7p9>u_=3f_2 z-)?@9lxA<-zr*}nQu>8){|<8?wCWg~fpIuH%-%_9UQdFPZiN${=~g)XL*wb&O+5+D zrSb3`W=lN0-K>s>x0^R6`TqsK)sC^d*szMh*QQ0#g)i=6XXc>D>Gx!qp%?NB+|PVr zT#8rW#Pk;u4XYH!7)&V{HyT(v7pO^!%I#5E6WP#vFKn~=6?uzt5dLQ~ZSh*hfLCP}$d^cow zT!H;ip&GgLo57xi5gZA4Pn`ujoVK;+N-==c%kaNgI!EKv;5^+5q(%eyOc z4*DW^xX2jOB)7*R2oc3NVz|>;%uC{jvtl@tk^$>pAqX>a>vezRchOO5E&O(^S%Nh2 z`XIX(Bjq-v_a5~%8BWP#A~?0_!DJ(%Ka`rKU{sd_`&saej(H+>F? zg4yW70C3xS(C%y6hWqM4g73&Up?$(z`_S4SIRZAb1?4y~6?5ZNZ#0S9ca$ES&S=2; z*)a!Ct_7P9Z?N5eN@|^br6H-{8Ua?cmu!j(uX^&1wvJf(0QC;1G=R zzzCE0g7=V@!2l>_4%?bL$1xmMArsXLuMF2OW6&`wn<3uYW%%&|5Es58NMQUJ!$SO> zxcnDHNz41X;Zl?Q8RrMI(;zg_l*oz+z%|iM#?Myu&_rJcukO}7&v$R0Hvv7df8pP? z&qf)qzx6lmA{V3<=Y7|JUJAY>b9(vwR1O+u8#)++Rnj)&Tqw!w?J~9Pg0vuxD z;(wFDDU*d$mOjMrp7|rW%F5Fwi&z8 z7O~OdODMxJ|C{i~=qq8Up!uXI0vIm`^1XV9MGRA?`yxe9bGEsf|0v9M1|$YzE~n%G zQ};r`T;HxDwjA09yMv0L2FlB6vpvWPeF$0Kk*t?{kO!je@?5ytxK$bnCYK;{wv{=1 zXA#~~!EO}9L)sRVNal#j%)k<4E`jSqW+a$gi_AVNvu|fn2{V@>z7&~jC9_v$W?(Hc z*TStpW+YG>5O)<-Sote<7S$sEEsgm0h3^t4vZjS!tip%%gzlE$@Ldudx?7y^U27$7 zjl@ON4#Qn*7|0(o(YsSXv4BkS~?mMn2a^oo)x9KCx@cS_WclCXoPRG3oJ?S?s z68>8{=3wv<^+Ke-8ru)%)tb-8^3N`D^}W2ryf*edE!Wj|dajveeUpFm{tsxHjL2l8 zm6+;G!m%@|%X1s4+324m9z*I_U&wx?xeR>Tg&!mO8^6>vc>z6^ztGA*K;?f_^52O3 zg_<#zGADHSDl@tgV{KwZD$ z;?EVosg^roG6Uho&Oo>~HZTNo+GI54sXZON1ozqaI1J)`;I9K1K%w(Ce+)M8KhGI6 zek*;E(O}h1*P5Rrm~&0+VZp%U$TGgYfx5B-20?^iE0Eu|lX9+ian7MYWW{ODsS(Hd zJ|u*sbDW0lb}NTrIXcncz(zoc}}Ah zB_S{O;yG6i#Ab6NkXOX0MCQmu$1r(nTOfxa_z&dEEgorjJ+enkN9IU+0c~!Y03X^KP+%}cBp%@L#fIh zFvSg*Du)M}iN_b3V&L>*5Ir6dky?xvNQdft+3+$%i4US^io4_GL?@-1u)2yUSkHi& z=cBTTc-&M60!c-iwzFRbi)4zsKh__*mlM2EiiD{mfl?<>G!$w^!^^&$_x-j*nCA1Y zmT!y~!5TjBFR%K4Ps|TKJ1C8fjc%AA+F^T;30roOs!tUHoH{m%Q)B#uO7g9T1VvnZ zXLPEfceqwhL*2|3tY9oXHE*W}@XT{We)9ZWGn!YFD0c_M0yY@S(=*0{K$LCFwnY

R=dH{HcJV8%;irJdRXKBFjnkiv%lOQ;y(x|91#1N9P)nOHxx4@=~y43hl}_^ChYx!4EvB%waqPP2mGXC zWwK*s8Y5Us(ykb_D#moj$%z&=1Ro7Vmf%6APTVM>@hTOVqAo%?@+K8bkLXYjVZ|9f z+@oTH50`oL#yu*0qbJnBTU2td<)oLvg6JgbG|5cw-8o#>}g7Cb2lI9+f9}V7|H$y`W18j;wlr)*=Egj}=zD&oVu9Y8bzn5urQV z;79};M>1}Sh3tVxDW$s_D92WULcFBr8TAE9^PR)rt1ma+h{M+})mLXAFN&|*_!YTj zF97*h?P?Qehx*#7ob7aQIRTwO-ZAyQ4K9sFLt(rwMAat))=^jUc4n3UoF71381uwX zp%dwFG;U=lD0dVoK)K#b=0Q9#>U6E%0-=p+)m-jD?JvtUH`CGxy&XEJYc*HxIKa4> z)#Tl$a{l7+MnZD+eYAzaQ#kI#m1e@4=SAdIB_?0-;rHTFe3#dnd#&$3wW|Do+{FCc zZ{Ib)3(1S!=2!^V7GI=^_8nTOoN-~F;oE9Bc==6SfpYoIfpww{cAcH?osEt7A8<^_tJ+l5E;={~G4U&8#;X1*=^v=<{(^AH0Y)5U#G!)Fj81+X59Ga# z!<@(jilOifnv%&tT zB<1r)c7UeXv!t>KopwZY^Gp)iyZ}pAiT)_7+tZnaL$O(l`JB*8!t<^0v1Uq_@C&VQ zpZV+L@aC`aW&WPsD=setPP&yo*IXDopDf`~;Y`CkDyvCs2J}*BH+aktI<2v{mfBV! zv{g}POW;Ru#6rvoqhSdrl}s8g^q3g}wM%|4^0%n`P)*|b(JLkYn56t(Gpk#Eb@{@N zRd$Tr@$BF<$$q3NQM_j63HnN&Son(}87QO+jMYRf0Y*kr3)02}BuQn?6kOtTC%XWf94l1z~1pw zxOlbAtp#1IAkJ?g#(0I;V@mVG$1u_PGB(k<#|k}wBr&w^w>;)mAVL!kL!pR_*k6}!ynETe># z3UligLa-b+CE~zMXS6niQ+>P8hXE#(Hk$8ijgT8k{{eZo3&2re_ySDtG0oo!*>&wv zU*2CE{?40EbN&GU{V(Y z{?N|i@J-lTQ|*DlKM*>GC$8S7?e0_%1*;ZZHoO2_0-M($%n6?Xz{Wrh$jH~Uo@J}y z4~Xx*>9^Q{^ALb%V!n&icwO~NZ}SnnRSaNfsk>&ufWA;#mhq8rZdw+SWftcg#!?r4 zD_6SVA^a6t@)F51+-R{K%Y2=qUQ04p#OLFTq{L(D z!6rbvuh=Vnc{^Rr*MR>5;h&L~V9xR&{w)k0DqwQJ8BMO>5(yc08=-kfIIU=u^%iV27C6@T?My8y*@sV;iQ12@@0}jGLv3bHx-Gg1q}85V?^Wy;Ew( zdj)xse{nXqP6a|(71&kiW7N*V63zG&gz%#f7|2$?=4!s1g-513UjT6K0uAO^+kBn} zU3^WGvTcgaJ-vIC_hRrhyr7)}D>4QOwfXJSFaFO%V$v8hiW=AFPm8sry7$|}0j*2%~vBmnel zFO0&4x#nx=T2euCkib^@RJEGg7n=j4r4hI=|IQ0q*%I zgaFk2Q4d-g6^}%X98#=jaJgo0y4uIzaFB~8SPuFS}*{ErIcA|4| z$)W%=GrS11`iKDOG|PohjrbCM63>$HB;#`7(70L+He?;-k?w)>*^f|PQLBH5>}WBx zA61`i3xN(fLfY>sexdy~!iB}myi$tt!eD|K=Oy^~?|5p$VgeQE3!WO7%u}x0zCw$~ z`05OcuMVh@dN`_Tc*; PuJTjWQySJCHc#QX17R<7^}$nmW)la#3*=vBPi(5e^#x zL?pOPjW@o?#3(xTU;VhI{BJh@){aa4ws!x%V}ZO6T#@HMOn>Ohj(&>X|Cs3N+wWC> z-b*)4@`wK7kL1Hdk%qk*2ONP&e$;0>IxW&~7j{Otx#pFM%^fc;-NQU-uNLRE-*ieK zw6$ZGjHjW!@N*Pj!i<3swhbJ-G+^82+xIP2M^>KSF;>aN$P_$V+!tEbZWu`}_1Sh~ zkB4s`RE0NhyoS49B96DPFXvSjr}mOy6GmU{%GmlJ;=VyC4R}@OOX;6Y2UGl^y?(%o z751WQ^>Vg+BybAtEw2LmR8{0&lc%W#k3gtR!A%e^E+2iNP9Kz)31mFi`h#Fqp8tK5 z?_oe>io6uD#r5|}Gm|Bc+| zT0<=fzIR-=ysdn1yVjHgB=GtH{)(`*#oY&6p#eUDB*HF3`+d%qxNd?k;^U?p0^GW^ zztAJZZ87Lu)=r$mzC3g3V1SdusrkTZH$M6jG!}xL9gkc39^@wZ>^rh2x+`8nwW_}z zxKX8@4K>d^735QVgA(6fde$OW_D73c{SLVLo(qWB)?6H;ud3K6e4@D1@P}%-`=~_O zl1RxvF4MwnjQ1sX`1c*}aQK@J*}z|J2X0@+U4z)w^P!Oq84bD6@Ham;3&ru}JK256 zCWSmbmh(PRG9K9w*tZzVC*RtQ&oR*Wn!aBU49t>i0hdt( zChT?PKEU(>rk5~LXcA1`7Q~^#!g5v|CdUv36UGY3wSbE#0u!dZ@(RE#1yq#~ZE z`SPwXcgJB?$6?kICUyf_H^436N{UAdgnun2ywH=4V84Kx0n5UM5EZLaL%M?I{%b{o zp$c^GwQ`*<(D6l{Q+9%f2r>qK1N^?wbFB)zI9#ZTfqxS4lBh8)4*nBl05t&K0!lyt zdOoI*tJ~m@Ur48xOF~V%87P`56vr13y_W%~H5LFbbXeozk5B-{!{im$r17v)urbWH z(Ge{EmvQnZ%*8e_F$^iWCgD@9aHn}pauitO>I5r1(+qb>Zxi^P<~|8+1b#9OH=m7; zYTf{XCgcybI<;hLe0deeCTv+$%e6G=$uNAxxcdq<3`0w_%Z@Qm z7l%+{LAWddVUpJjCF(7OBfkgvYgK+vQvO^kfB&TX9`oxYy<3(494iSB!v#bWzYY$P3y(-5`=nB{|M%)432@lb|L`&UGzVz{Lj(-qF*1160^@k_F~eZ5l5b65AiurK2?(@Nk?wx!Pax~LD$=9toxfE zWqfGAG^OkqO~@O$ulZhyH_Wxk^6hh1Gc7r0Dk8h3XH$V*=1Yn60-M4I_u$Z2^c8y# zt7Ub1m>Oi;0`$@^jJq#W+=5*fNMZh3x_vXS2bu&S`-9QzAGd&blYx}Tox>-L8OcDr z=AMMyk^B@qHCF!87t=q4eoQUd z?}Wn8J58quo^Qn3NpS+}t@)5O-JySNl79*OEiwBN6N^s1>X7CJK22#^V3j0))Aq(u zuZblS*3>R?W0^H7lDKdin{U;WOzYvz%J#+=FKeAw_sLQRsrU#r93Z@OIV|y z!6_^eI=PF;QKBd;%HO)(=?mu?uK>sJb5tPI1!$o!78O8eyTI51qJFa%=il?U9vWn! zK{>-m)~JLV+mTbYo*CcHOi1iGoINI(ANsG*Gj`_0GE_oQ2`fc~OipuZxL0gjG**?v zmyT-VhM|XuI4qcvg;{3=BGvAWGXSq>?ReC|9tcf^JSfPuY1oe{SAX!yEZ1zXLetS` zu(H7Q^op!A@*AV6t~=V`q`U6e=G@ybGZ3yv#qGtBX*d*M;8x}EOt(L8-_i~Fo6$!# zz62&$IDg2SB%Q`9y7>r!U zII4KM=+85eiCQQIFPd)-pbRRx4cAj2mz@C^AvkskG1xfSa+x@+B)lL25+V|#@I0D! zJmE{Aml!?1 z(y<2Z%rzH}jAENzi1pNH%Tra1|Fjv|glmpDy8 zpEzBFa0U;ICW!MDNMRA@FVi5}2C;DmflQ>2`QkjZVYm5v{;YgnTC9mm$rm)kx3MLX zXx5y?Te{Gn{}P1EQeW{#b*;XdyNyD@A5CVDA{&P?`0<};U~6;-?WBDmRtG81z{4m!rUU?mQm6kL4&IiiY=@3b^L1Mo>>K2Ew`O{Rra^$9)}*bi?|yNG|tj z;FCX}eVJj5DJF{gV~hg=ZXkf7q-_w5nEM%nTZz(C!X=V0eLWmL@^TSz!;L0*&E-Nt z(<&{Z&#GcR3#r%@BSaMSCwsbbtYSjDr1lhr3~ROGHd$^PTqBB}0KzQ0hNVH5_eF3y z9wJzPnnba2Fj9iU)@2=#n5{luVumhCY9NF^xuFJ2ei({9+g+=FismL?j)f%+!;nez zWNSUw&e?F;*jm5Vy89QO!oLRKaCla8D0RbxFRU)bu!_n=5*i)XP9<@%KbgAoOZ)(9 zmP$jDNwKl3Agh9SA)a%XQgoME%{V83l-z3gCl0>G&p`Pj&2q1S?ppmY`U*EV_%zq* zwSp$*A?nEdGswqAd61-!=&$`0P8gTHNCAnKKwI5rH4a%S-VnI+h4+=$vvdxk01+h! zi^j&SY=p3WjWhx)6;8iJ{MZ(j;If4hlwM8;Ifav~D{quvzd)t9&`Qxr^sE%(kLab0 z0xdZK=8u4gs&O4~i`z+~##qQDD8Izki&>bfc@RX0@dOBM_J>d8Bqz(OBUXF5&2cjG zDFDofq73z{FN_mx9F%fEN)xNiSbhtWLBYs|PGJ1PM*@&tAVZnbJS20EMtA{l%%dZS z>S1Fau;ijO##@NZ_lTa=LT8{Dwvf;@qUTm3L(eVrxkdS&T4>*tL$V~@k$jaYt{xr#NCi#C9_wO*@P4c^v{0A`?iNSmW z;W7P~VancJIO=n2Vl@_hDSY={R*$M%mk~1?anyhtE@Er*D`~{MLq`@|IfT%HP|xe5 zyg1cEwu|68Dk%Zm0l;GzK#W|lK>+t#q3=`niO{dY2ZcUIYV@rB_++~hgcAC4KNAvg zn8rR6b?Y2r`Qyzmt#H{7#YNL>z&C$>`_<^59~x7I?E3b_93gQH9HLNg7(yP!@C$wW zaYoucqr4xWlHZ6Bp!0y_!VPptM+W{8(Nl8&62a6eH=@s7L^PBf$Hw52SS2X;J6Vc) zGn@s+&G;^coJ(xE(8pyL=~Kel;$@cPtAATu>&rY zrnY?Nj)rl*OR!^2O`JGustrW0fwr_`>Fv~(O1o-H2MbwE05WT#Ephnu_?nL4jMF~0 zI_tU_-45GeirRg)t*+JIvV!tlHD`&gr%zpLDV317Ak~;5IfzHjwaB!y*&%c{#t2)- zl}n3qD^WC`lRY1Rj0>1#sAzk@(f4fpY6dI=e{)dOg5)b2LT)wA02H707!6SDAp^j( zVBO*caL`o3lt8AHH9)t(Ae_n+2x1o}=Wk*Zpm4L}7X_pR?;ncj*AoQNk?##%b<0l$ zYtP2>oOdf{uhyIBHnrG}W_ zOD+lF?)CupSf_tpW;GX*@P}{*b}M1$xqLzPQ=|XTCF)YG9{vXyojlP?7iKQR&5K{994B-LDiLU1-Z&4-;XdGEQJxr;d8 zlFYP+A2EK#=33ph@_kgTa8%T&0}wXSy`{i6qQ7)C(Z(IKL?2*FEb$X&G?r2o)(l+5Sw~9CY25}&O!e^J#D|`^v=Zc>kAfhMWfJeXB z3IyX&V$B7|MD#idw7N))bB%R^g__7FX?5cFHv;MMK+yvmm94ZB_` z#)2;LCmX4`bpvNX15iJ*ji*Uf%qsdDW&I3Dugb_7ujEyE|> zwG2iMDUJ<@u2+FD{-}AXaD4`{F)9;)`3u-yLjm`(Udc}jQ;fFpdO{MHvLt1E zf#Mn9(?#pzV{k4aDVe;MTLRZu1x^6bzQrkQ5g?+45(x_SM!2K{93`79Ewq;Lh*$=f zKgcE~)r|H_Ae(x_2Z4XLhqxRz4zmQ&@bIw>34oxeTu5^R(ipD@3YO&vE#JxffPNG% zf1=5;mJ$JBMZ~FbmY`gX<%%e~82ms{#_Ca&`QVBulYJmclo^9T_y7zVgiXOAAR!wv zp_j~N9B_OUDF~IRG$ZNxj-W_XvQRNWSPl0{wc-t7AXR@&6p0|fOLh;kh|{zi0rs5&iM+0_@+zac83GX zJj*+TfW~_6%faFzO+33%J1#w}9)+;t99&iK$;wx)d{!p3T`TL3%G?8&KY6DDF6h$A zZ>s1cSOrjnV~sE5$m;MEtsUm!Otb|dv5P*j*5JXylT^qT9-XDM^q;Y+qNN)^16sOz zW*}dgG~uK}OW&FA-050X>S?0~7d^6q#8|NK@l|S!I*P3P2%PDt&gIb~b zRH^XB2-sC(faDxOOVa#hUmnEeBccj=vG<_hyl5)cIb=PV?8I}?A3&I*BfywrJULbk zU+?~eB+%355Jl_hy`(M;wc{^LfuI&tlbsf{h%3;KqD&cm0V0nekd9r}*e;Bq|60Jx z&Bf_k#m@mLF2f#>p!ENP4d7=f8a3ne@y>dj%CT| z4IdJlEeMu%F2MI;FsUV#ZUU9eJy@8CkDu|V1&n$R<~5~<8+JB5?DXJPxwu-1)>>mK z!bSCyZb-X!=yElVI8j50^b7FGW??SN#32!SUn^ZEKaoI50X5znMPmNM(jnZde>@wX z$-;ql?W-;#9rQOD2LwE7tP|m)?AqHI13SlPmGDkUnEo`J*f7IcIPP_yMYF$R4nYL( zkzdBF7GBoqB2@a8#a8tWQ)Ep3S%iGpxQzvIeBsA@q)HlJ z2BjlsH4_Y-%lrHfCo4z$eOr%RYR!5})un_u7UecF2qO&Z0r5D>2Ei{r)SwPBXh5>C zo-*{ffT0*W7(inOTrqZt3{uj%Bqpu@kKjRpHU*UqWI;lQb(2h+7#J%8Xl!OG{G_<` z1dmA4yGwDOvNtAdD`TW0N*MFrSOTHR?tr*k)T9OB>`%N|elJ{zcx+XIxWIt~LoF$M z9$QjiZFrF=1-IIn#Vs0Y*U}33os2`__rAxBp+ z1%k-K<0L9fy`}95&cVoKsxfLu|oBmt7Z}`88@81T>MF0C9Kbup!Cb>Ag4gK zI+OD2St`YORtiC@Yj>N$D70^U@V8JkDuJ8nlGQ>eIx*R};6jAHfYBxvFoOY^kaDtR zid(v{rOI4|fWi=NaKavkR`|JuBjf{#y{OyjHjI+n&D9b$ItyD4-T@p|LfQsh9NeXb zXVsjR4iL;`A5;v$Bus7gBNWJ165kjM=;m5lE8Fv5p8 z1u2`Te7m+myNSYD)6|aZJa^cPdkHu1Si>9sNC72h2ltePak`-05xG5j;>3w>_MP+M zs*fA-3mTz)TTS;j+Zs`Xt6(3F4yE{91#gGm^lESVn%=bsayn>Pz&YGwuIpyeYS~ca zdistmB-irS&f*$bri)fU>?)CLeM(m~Mi8F_o_ zzUcT}ez;f*IrEY8I5HmZxF_HBr$GM`i|}!xBWx6pNM?`td^Zr8@PlHIBmUnSq?|uv5ute0Uyexb-`GaL}lC<9hi&zyt-M&+?=FK13VYATV*5rfIt~$w-hi z#U?MegQCLIfXS5n{@?F^6!;$n{zrlTQQ-ey3fQz1ZGKsO<$`(j!Me)o#pA}6)z+3* zFVvQn*Uhh~FV}+Q%YxcZ>uajD%c|=eYHMrig5?W6H4VYqhM*_7ytdq<&8#giUpNb| z_YNKELALtJnre^cuU=F$&ZFfw1S@Ll;JK{6Y;ifN(@ zyFnXVSvz>#U~TX)ZE#f?Lg1~csTQ}gUZQRsrWI9IFGM{(i^}SQK-t3whs*0mj2MB^ zXNtexQ&U}4SzWFTR&n+7)HeaC6vTG^a{PDA63?Q#nkAm)H4QloTvD&iDx5iM-ps-o zvkPa;^G%-#oRdQe{4;0ePn%Q-ycKZ4ySi*ixu98JTT@+MQz!m~mG!~0>IEtS^(n7j zuv{W4YU-tOGs~;W7qBrDB$Qvm1{5?#XdqYNv`IffLA3~F#wnG-U^$y&ihtHDA>B_U zM1ao2|ET72k5!VVuKd~t(5HOi;2X7qa%5Zrl6XiL)#}+=NnQEyMOBrHD}tT{73B-A z0ZA*X$`_8%$O6c!c$ z+gK)I6-)1tmg)|^p|%U~%j6TFFDvN+P$eTcm7*)K!R2*zLU0ROQc0-z40(I0-cz|m zF|WTke{$ix%Vq@FeidbPs&PoWvZ^Xi%{9mZsw5LdtEgJoP=9T3T+KMGqP(hBv*@eE z>Zz%MH35g-X1#%3UZ<%(W{HQHJ$1cto`vO$%J4eWFjQ(8{+E6#Iiyb#+KB3Mv`@{F zC1uqMRr6I=qcs{?RIv=hHaR|6xukqV0{_~crFjf+9FKVE(lSaWBhlda01{7- zJc4Mm%j=d8udk}PZnz8~iE(5h#ukoZ<2>M}MHoQPw6Spw$>*a(l5i6n7A-2Lf-=0S z25px#5d9kf)nyRw3dF=Z3`7L>-{qViORicC@~?6}N*xL5SN-2XSi}sP_BZT}JU{90 z?Ib_LUrqXcFv-ujyYV*@e*ydrxneYgYjxpeRr3q6kgp|w=OQ5adsMgY3-H}l$D3C? zZvixoU|qw4pr^V4V^?)e(6baGT8JI1wC46I?~jz*Heb2k+q@TEc$)Z&Yp$=Xswx{f zW<;(hP+8ruZ1|WFqetWpzxbjHM-N|2aZ$P863=Cqc$SU5Xx>GmFY%OD4{xaVWKZ?Y zDh><-DX%GqR9SFMO^zo%+zcH$a@2@Xqc#4{s~_i?H?Ot^S+1+7Tu?!7KJWU59M6x0 zi--THzViC=?3`|~IHeKqj+NDw!AjKZ`f|^*B~_ltw_`>iYTdrHe9H$#h%NHt{Q@L=0R<>Y4LtWW|3l4-hmr*Yg*di6VXk5HEj!A zAI#t1@*D2hb5BJ3!C*We?k2deXF=|q4uj|q0S9g=+=??aZ4X?SPqizCoQOKl)U@m2 z?uNS;t`Ey#y@ui&?qIkZf1qjO;ARZ~K5$#$E`*zXwx<1N*okNx+((9=h|V3TX}7{q zc@*vz*!8`rSJhP18}4|V$`}p!E8w~ZAs+5_&|@P{Nq`QA;Lasoa0aLrZWT{3kv?!Y z!kvrVKL*@Aa2-0}VFwW3C*BBmJlp{|Bv%D@#jF$2EpYF@9QDEq@!Ts=F5JLexP$}u z9=Pk^&S8GIvk-p>ZV>K@t4>6pf;(U#@&oVVaE}xJak&-2!(Gzj2m)1HXTR zdc)oLBqodJW@IlqZ(dbt$#E*|ghk*}PaKj2k_c<{j%Tw%H!?p&OHTnIi`aRcDN-E(6!+6aCK+<|kS;D>d;h(Hw@JV|j8Z9^taGyf`;SPH`8ubFd6`P~c0VsFNGx&zP=Q-?WMftmaKD0E zwFC76KW^EHaJYMRp&7!Gh+C-&TqWQu~`sFkK= z;cqnlHe{ebfM2u>cTq;>6jz_?oQ>M0XN?61 z{g`GQ{@im;M8S6QV^}Nx=Hjr(7zsf<+^6ujwp-Y4hIb2l4`Bzog>@oq3;M`8aQPdH zKL_f26zLvez{Cu9Bn4GkXV1^@tZ@`%WH;%PGrTEtQZuplBolFT;~^WokTbF5=ow636{s{csMar+jxHuA+xH)_oJ=h5>)DuKWV{e>=i9AU$7* z){45~Kb81T1^%16;Xk=g%C!h8NUG8_^g|y&^aGsDkV|JmP7&U1DHAg?*V`v%cp{F% zjO=xKK}PPHUIiIrn|e>pC{3wJ%@~`Xk(-~9jTA^3r%yJrmjc#0$SPjzPFU+wW@Tiq zv7=b~Mq6q|W`2gdFvIEVLta~lG#<#Yk5M13FvGnj#a@9l&Y6@C2-=AFlG!Js7r@W> zrj+@J_4mooa7z3h#MdJJ=6HO{QY0v30_Nw>c6~`eIKB6Mi(the6=GD`ntKR<8=##OY3BOCO?-T46LZFmM1?Vpu zZi_~Fi5Gvwdk(@zKXoE{`<3|kPwjNTZvUv~b}As=1^8xp-S za%r6dJimr*)zoWBMr%sS;?#^>h;DSVxIpstp*-R*sSlKmPxOJ-l%`&5^mUGi9lL@! zPUYh7D{K666r)W1Sl`hYpq%b#6l#L}O7MRv_|kze%6vzT!mnrEoTPZOEyaEoNZdnz z6UkLWL!yvk@xIZ1z=6~p&QC_VU9;qMdRyBoL_0yjlB@KD5FNV0^*?|XWfjJN|+ zx{0C5qgb2PR9A`=f{a*UihRD`8Fcoa^{;F=U3=Q z&=0PRC7#^AbC06=CZs=(^jENNiGGsc)5Q29d`g-_!|0(8P3j{ux*r6X8*=+%$X3V2 zn5=Z;`{`ZBzk-Zf`xj(;uv<43!`~+WbQS_$EuQyVg)z(F`aZmF_)X4ev!zV!5nfTB z9{SK9FG{p$o9!fh=<2?f-qDUpAxVV4^mhwBG_I&}J-&31@ zguWBQtMO!QS_Qm*#PaWO;+!^axJ{pB3#<^{~KPE2lwM|Vyv9WsvM4G9?b2x zV6GpGk7fV1zrE38)u;3+=rO#oPfDOCQlZ>Ch!e_g1CQNGp(XX}#uJHo82kE`lW+t_ z^&SK-3ZK~{Rz-p>#=CBvJOGkwrT7~S@@#H}-J}PaB<6=Ag95tp>f--+?^-jnh20N71(fQ};@IN(Rz?uU0RZW%j@_I6~(aO;WBta(G5 zZV&f7#>>2>r~W@Gfm@q?6507k`ibbZXj8{g5Z}UWEO0u6H&|NFMYxIZL_bT6^P+!P zxV7}Q&+2)OB(k#y+}_Vk;MUUnB)Bz#ZuP{?ujmH7U3(q4buNfT`9PXuoT8gGmw~Ri zhI4`@=(e?W-Rv9~{$#GtIwtAYmnGp*8&el38;EnzrED&a0}0y9a%)=4LfALSqkCht zNwizHzAz=@K#D!9XT4G8XFbqn>&OIc4xCJGcY-!mz|m2kz^xOw6)cKIug6rxaZMN8 zL=P8!PxPN@8J%hNCpia0Shs$EGJZcV3AfI)leAkKa9htl_n5-XLt28Ub09x>{7v)I zj+62#>@<)FC8AGpzIPAO1kwL_HM2H{b3Mp*Yt91vtht{3X^^wabY*g%IT=o9OE15o z#)+dCvbMnHJC-`hg}~w8&qb$XG}=>E^(aVs9KX&Pk!YXBlj+V=pp(GVsyTM0;eR!U zT!!h{!p3M+QAO#b>o{e@ZgSd9U`upg4r&D8-2zo=*{`C}S*$}CFuKV?%)=}@h1CaZ z?K7by_b3c|(37tko~T1@ax;?m(I>P=FfPu9>-b3m|FPh!g5M_aFG2i5sL@`8oliYx z%=hu^#&eT1AY+|G^!q%=E-HF@1?t?0@}a+Ijx$yH?E8CBmgD!)=tTDYQ&d^&Qed66 zY-^Jia(#mY_jvev@O39mdF5-@gdu z4?ubcm2dn+|AXn|b(G(WJlw545@U(9M*(c4ANANA==A|)zaItNvoRVy!n({t87GBj z>Gdr(&ZWLT)}g1O9`Z}7+l@mLb;CTUXFFeYOuq4nV*Ez)kNo&pH2O<8jt>wHypm}Q zrK1{@1<@5{X}IWtw%-j&lwV?zHcs0NlnYkU9P3oM#D62o%|^Lrksd1$F1BD4(`2W; z0O}adLY7kqJ8q* zf3M?)9yu1X>mF!tOTuNZ<0P~n4ZMVp4NO$c$Uv8g@j-IdTmV!BG_$?*CBc-h$oKUa9MkNd#)1F%*#pMAXfBzVcVV#%Ub z*d%+_RZceMy^OYs;nsRG+={?A2Y`=bbON_efLrJDSl3EJ_<1M6EkUy>8J$l1$9j)M zJK2~wDhanv=SkZ0R^WCXb%KcsH`)~{uvWKlL|564U}@`S#5u8kcN)jKL_7OwFY6{V zfwS#oI)vDF3IO7Dz}vqkVT-se#ZNuAoBhqF?2z8-o+OFbIR{Yay$qWxoY*gVU%72= z9YXHvrEgEOebP&RsgG@AZ+%-I+k;O1%{1GWPW`zw+tyR`m(y%JQW?81m9g)qGS*CG z_}8gSv#Jjvg!=&4(`kBVniffi7yQN_M*gR4T&TYG$JqT#m4f(p z&TnF2Ul02-1##l{nf4?IYawQkMuowhIZ_9{pL*VfiwE9&(xkigCVb+!4T#u zRIq;XmG1bBOS`9+ey>Yw?RB#qA77;EPq?(F`{>WRv}1krn_b#-Y5IEj)AS=5+Os72 zstiVM&4Bmi42Hg)!4!YbVCpY3n4g7QrV7#P^|y2h=*NKj&a?fXnf3kFF||{-b?ES} z>!m-`OM9XhyjF8EeeQcH`iH67qrHZGovLkg(tqbE=l(TSd;gTa@UKhN;r~^tj@WIf z3}K-Iq>M7#<-cSZ;ePt6v+OVR(+`|!zqP;KmT7yXzy6m@`_E6;zdqCc=IJHonfB-z zOqj{YyEB>mp-d)!Jd;VD%VhFDpQ-OTQ+xMJh2M=|rFYLq_aLn?MPE0FywNyF3p@0$ z25R3q@N|F{aq15b((ZNY_YBfrPV4{rAno&vGu|7hwf5CFAy+?r??COt{?H}gIP=^C zgS2%&cq|3!e><@6mO+*?J4oXEXd4Ir>vY+Lt+cbCLF^AuQ$9AuQ!@Lqaxy zXc|@m5dR#;pzv@;KQjD$guGrraBmk7i4O``@QDI~yS0#@?7}E34CPe_YTv3;nIIIO#7Q#zjY{H#vS;pp;~8O{jQ+RQrawDWYwkA);r}?3KyNu~AYwP4MgKiN(7za_-9A8nbC~wv0R6S0+Sh{^ za{L_q;81PX;2EC|(RQAze>_Zk_WY$t)1J-PH-<3eqaiwCNt_#RRm5=@p zvTby3RQ-}Hk3>cHvXj5tOMf_3yRWytB~|;Nx4tP=d&sHpPSrjIFQ#e_pMoTRJcV8i z3kZJs6efB56ej=sDa=Zu|5!mB{aZ?qL%QDN)He3gZ*yt~d+GN%u|R;}&Al1$m);C` zL;N50WXjHO4l~^)?p%er*}UX zQJPY9qKjus`FSiC+q&d8){5s;i$AAww6E1x0Ie0% z0RAvq$S>Q<2(y6vmRTNU(ZD&1b5uA?G4kWwlRuhrl7ALhZO#gXpG5|(O-)(FKEw1d zi^vaCYx!-Oq}*8eW-iR(7sLA~>;n8*U}TRZzq!4NzgW6sQQ7K1@6PmM!|ZN5JqrsyYI?eRX4>r+-95WAKAVT2ClN-} z;{#&`)Dw;|VUlBf#GI2sqvynEvPL~oA}3>FqRBC4h=>?ZOuk!nZ}|DL#-P^Es#za?K5-M+t1E=q~GdB(WD zlT0&ArsnW|UXbbFabn8uhUnP!+yF|9LgGhJf3%yfn6 zD%0ak*O;y|RTG>((+JZT(COLhk5vDPwNv0X5Q%vhj+f0|3E;C(Wy2|u8 z(>12+Ow}PypJ{|?jA@c-hUpa3I@31OC8oRWg5Y;}@tT&nw*c^Hq>u+oLY* z%mduvF>47JS9|ak$m$(I`P}7)$M< z)a@L;?Fs(_4&U~K|2ckwe%TZLaSos4@E^0$ z6isW1&pP8J#&2hQ>TU}N{w2nbd+;6TpQe27afiPV_-X1QHFcXUe`)R&##cS~TN!V+ z-QhpPc*KMM3FFGc=WiHazSYg=dyFSNIDP9&`CRkxzm)N1DiFF*j&$`g9${SGD+An= z1NTSz7KyH#8CP$&zs9x8;{^}?UdCID*K9QPw~T++gVRQguw0Ykt3tYo^f$_UN_@4ql4f1@A?NiczzQN(Y%;8_keBx*T#QzD#Y5yc$ zH!?mqZGY3=MY_Jm__y=+x7aV}n`YwkIOApeSiJ-VOZZg50<@Qot~(iD`>JJ3``hSx zlJOtT+TWL2qG~%VAF=16xXg6{hA!eS_F*Yc=|@+2`q2o&Q@a&=vDlZsZSb8+?0U=0 z|1IYQ_ltJ{r*zL@MNo#}hZ!$0E^_$a8UFy|VlUhIE0)hE8JF^`G5*(#pU?SuC*$8` z9Bj??5aUlWPWy4_`WoX`z0Uro{V;U>nDJ|l*xzfGs9n#q`MHEEkoJMlHOjcy-@WC0 zwWpllfbc=`Q_{=SXz6%T$N<6e9J9|0#hIqXSy)!=@;;(N@ev#!7i|Hy>* z>nA%=;6eEhd#_6n{xs-C#5EMQZf@`RxJCSaN`^B%@3dGPKFIj`O%^cUQUX60H4pb z@XzIT(tEEBXU;yr?GW&weBK1S7y7Mtel%nFSRT&5ZwtXc2K)sWPuo0SYjdP04F8LL z^6m6Xg7b43@SytL7lKb4KD{dP0h=JYt+^IWc<3A0rA8O+Ij8FZ4!{0>`}+l!sLzD( z|4In{LMSBEu2#Nf`R`#qQ^14rf6U;}PkwI0)82BrKE!-7*n&kDeZxpsUnH2%;Sl@{ zA^1JOp)&cdha?@YN9f_7Hpwa=sUxEXm`zWcX_ckF5Hx ze+=RCLy2=c;v;w`MD+pzbOR&;}HB2gF{Zf*S-VU z9q9U(knrjy!TH%Af`7!|=+|f30{$J#UOgNV{u?3q4@2-i*sZA^lPpgX%)fMot*@1P zEMU&4!EFlRgWA

wpsByYX?-uptrf8O9|CkgQ@&G);&fAeyd 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

0Z+3<(jkqQE10K z1M3$ZkfW0rTqxK_tg=4u2QW_!Z<+OZ9m(_}v{?(8D?$gLhI<6o=k+GjyGWAz&vHy3 zg?8L?Fwg5!rW)xx`%kbKg$mv(>+?RSNJ)_WJMaGlwBtQ-JN&1j3Q^ww5n2o{^WTDs zRbL}LrfiPonP+<1q0j4PrYtv?{__s~5GgSIj$^=__Fi=8^E!$t?~mEPbN>F2^f~@Q zBT1t8d|8Xr|1Y2syU6;yu4lT{stk3f|5qIPLz+@xI;Gg+FONS1e}D?EN$IgK?h`nl z)+x_C(@UURWzpxq3ryDn2!-VoH^Vdj4m9B0WB2{bEUH}jy@gmOp zYl?`fu)dY@+_8!_ut9pT@i|6_`@`=)NVY8Y-KI|y_cn)d_RF%kJm-674C#&r#Z@{K H9IW^+FHn9F literal 0 HcmV?d00001 diff --git a/app/Bin/SpeedTest-master/CMakeFiles/3.16.3/CMakeDetermineCompilerABI_CXX.bin b/app/Bin/SpeedTest-master/CMakeFiles/3.16.3/CMakeDetermineCompilerABI_CXX.bin new file mode 100755 index 0000000000000000000000000000000000000000..cdd77bdf6b3f48132f6b709a9441050afb8d4a1a GIT binary patch literal 16552 zcmeHOeQX>@6`%9j$)$1bE^Puwk~T}53J2@{3In%LAdAKSCaa=j zc6voRAWH2Oe+nu?QTT6#4of|vW<89}bfb`;ZnaWH#-%}0(nA*Ym@4F9I7E?jLi!_0 z@x++m5tQ+?Q$<**ble>+G|;bvISM(+|ZBTD}620b1Z z+5S$1hIyy-H{Uq;W&DZC@UnHOWPkI!zD8=E((g{-=PyT*Q@51dn7 z+j<$8nLtd2k&neP$z%I>_kZ;cW9nzCrVHM)f#_qudSu_xo5=?HL>VloPg8<;^no&X z{)g}WMxBy)v;nb2aQNV8i~RchXBM@;^5b(y51dK-B3-}viN)XhsXR97hp#?E`RBXz%lwXXKqgi%v| zSsVMg=OjOc@}^?|UoPMNO(4G24CR6Q3FkT(=ht88E}hw@mEO?C{y4p(Cpunt2$o*j z_!1u{ttY@zd3hdG{`$B!-ue_&wDG#5NLpr$<=}c7*1`3n@}zI|L3DglQjkw_`Az*u z)?U|2)7puPTeK51Zq0Q{J9FJw1_o}I20Z1-LEmcV7wKbv54K`6D}JO`8*8n>s#bc_ zsMn6PE&yg~ZMj^Yio?&Tx@+*%?b-{v7X7y#fJQXb3wou`pVvyo$(JHmv71LC=d~xb z@#QaiAv!;-_4{6!a7C^X`jQR3y7wfS3EvYPZ!N$RLikhNrB}ke-K8txo^a`EuQuKo z2Y6R>?KK>eDgAo6tev>#Hde2HO~xZyx*RQC>?r*yTweBjZS15=Yk9r+XB@BHd&7Ie zd&B#}`pLmT)wlXl>>nQ=97*)c$GI}HyxIA2BH%>8iGULUCjw3coCr7(a3bJDz=?np zf&Y^T;P)DH>E714eRBc6M`Z`~c+SZ0ZVK+jc8(?O z13ClrNuZwTav8t(T>|<%(BP$V`DLKTfd=G98T>Yi#r5D$<{I(4R@N`{JPvJ$uY%(^ z*up1u*0GR(@mT}ajd0`u=YZGW=?#3sxA+0iLAGVZ<`3Vw=2jF({XKB>ksN|h(53-L z3-pP9qlu>XV@Jl269UO+2sjaNBH%>8iNJq50<^D=_R-15vC3Y#dg>5=$YQY1Ta+oeAMXQ_r~P^>B~N?d zaK9)P+P8<#U0A67%Jp&<`Df*3J9+B ztd!S_6|ZMXReT9+s*2CKF}nV&I2cjPh^V_^$20A#H@CWBXY)u^`I{JB&sO#LSsD$gRKhWD!)+{bN;C+xi7 z__H?rgA%9vpRmH%N1+0Mod64GN+R&QO&3;_ypocER|@@dRz9n%{fDPz_`c*yq(Bxb97J#{DwjF4$jB z_X%==1LDG7+vbA@JIdz9VI{}s&QBF^v~SN3*v#>{^XgT=Yw*8;ZG3kCj{El~<^L=C z|8gJT3UzQysm^YZ}U)$$d_0I!x0aZJjykk!HWxqT~!+zWtL%S$-T?a$3ixBxns ze_+ptI4GZC`-P%7IWOX+bVn=k0G;s_hargN!;k%+6orcEu?g?O@q9?R!rqmYwe zLl;WcA@#CXVSA9iQG7-rC)672~-Z06{X3 z9?_&Ztz#!ZkgP$5yQ16M!cl#DXXma+kKPk*i$>5L&;EFKxgNHJkxH)%Jx>%`UlFBswru9IR7ZLn9Jm%HeOiYRRiMpWXq`-0GgQp_eR5q!6u-}y zORbrKdN&+qeOlKMRc!Kh{d=JOZ?Kl8{?qdV(H&A>F1su1cQPA;3O+lKKCKgp9>m~6 z!9HS@&YzwOl7QhUlRm8{iPG~4i0~rK5zFp}8a^wKKCL^6DpHdAPjW;bf_8lNAfDEz zL`mP?e`%JDLj_|>`iG?>q7zb({M*m}324W2qIUS_B8sH+94Jxli|RDDPMJN!R7Hs90#-D&!p@M5rdK{zY1>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_C) +# define COMPILER_ID "SunPro" +# if __SUNPRO_C >= 0x5100 + /* __SUNPRO_C = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# endif + +#elif defined(__HP_cc) +# define COMPILER_ID "HP" + /* __HP_cc = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100) + +#elif defined(__DECC) +# define COMPILER_ID "Compaq" + /* __DECC_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000) + +#elif defined(__IBMC__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__ibmxl__) && defined(__clang__) +# define COMPILER_ID "XLClang" +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) + + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800 +# define COMPILER_ID "XL" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version) +# define COMPILER_ID "Fujitsu" + +#elif defined(__ghs__) +# define COMPILER_ID "GHS" +/* __GHS_VERSION_NUMBER = VVVVRP */ +# ifdef __GHS_VERSION_NUMBER +# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) +# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) +# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) +# endif + +#elif defined(__TINYC__) +# define COMPILER_ID "TinyCC" + +#elif defined(__BCC__) +# define COMPILER_ID "Bruce" + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__ARMCC_VERSION) && !defined(__clang__) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) +# define COMPILER_ID "ARMClang" + # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION % 10000) +# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__GNUC__) +# define COMPILER_ID "GNU" +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) +# define COMPILER_ID "ADSP" +#if defined(__VISUALDSPVERSION__) + /* __VISUALDSPVERSION__ = 0xVVRRPP00 */ +# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24) +# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" +# if defined(__VER__) && defined(__ICCARM__) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) +# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) +# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__)) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) +# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) +# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# endif + +#elif defined(__SDCC_VERSION_MAJOR) || defined(SDCC) +# define COMPILER_ID "SDCC" +# if defined(__SDCC_VERSION_MAJOR) +# define COMPILER_VERSION_MAJOR DEC(__SDCC_VERSION_MAJOR) +# define COMPILER_VERSION_MINOR DEC(__SDCC_VERSION_MINOR) +# define COMPILER_VERSION_PATCH DEC(__SDCC_VERSION_PATCH) +# else + /* SDCC = VRP */ +# define COMPILER_VERSION_MAJOR DEC(SDCC/100) +# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10) +# define COMPILER_VERSION_PATCH DEC(SDCC % 10) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXE) || defined(__CRAYXC) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# else /* unknown platform */ +# define PLATFORM_ID +# endif + +#elif defined(__INTEGRITY) +# if defined(INT_178B) +# define PLATFORM_ID "Integrity178" + +# else /* regular Integrity */ +# define PLATFORM_ID "Integrity" +# endif + +#else /* unknown platform */ +# define PLATFORM_ID + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM64) +# define ARCHITECTURE_ID "ARM64" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# if defined(__ICCARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__ICCRX__) +# define ARCHITECTURE_ID "RX" + +# elif defined(__ICCRH850__) +# define ARCHITECTURE_ID "RH850" + +# elif defined(__ICCRL78__) +# define ARCHITECTURE_ID "RL78" + +# elif defined(__ICCRISCV__) +# define ARCHITECTURE_ID "RISCV" + +# elif defined(__ICCAVR__) +# define ARCHITECTURE_ID "AVR" + +# elif defined(__ICC430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__ICCV850__) +# define ARCHITECTURE_ID "V850" + +# elif defined(__ICC8051__) +# define ARCHITECTURE_ID "8051" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__ghs__) +# if defined(__PPC64__) +# define ARCHITECTURE_ID "PPC64" + +# elif defined(__ppc__) +# define ARCHITECTURE_ID "PPC" + +# elif defined(__ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__x86_64__) +# define ARCHITECTURE_ID "x64" + +# elif defined(__i386__) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif +#else +# define ARCHITECTURE_ID +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number components. */ +#ifdef COMPILER_VERSION_MAJOR +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the internal version number. */ +#ifdef COMPILER_VERSION_INTERNAL +char const info_version_internal[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', + 'i','n','t','e','r','n','a','l','[', + COMPILER_VERSION_INTERNAL,']','\0'}; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + + +#if !defined(__STDC__) +# if (defined(_MSC_VER) && !defined(__clang__)) \ + || (defined(__ibmxl__) || defined(__IBMC__)) +# define C_DIALECT "90" +# else +# define C_DIALECT +# endif +#elif __STDC_VERSION__ >= 201000L +# define C_DIALECT "11" +#elif __STDC_VERSION__ >= 199901L +# define C_DIALECT "99" +#else +# define C_DIALECT "90" +#endif +const char* info_language_dialect_default = + "INFO" ":" "dialect_default[" C_DIALECT "]"; + +/*--------------------------------------------------------------------------*/ + +#ifdef ID_VOID_MAIN +void main() {} +#else +# if defined(__CLASSIC_C__) +int main(argc, argv) int argc; char *argv[]; +# else +int main(int argc, char* argv[]) +# endif +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef COMPILER_VERSION_INTERNAL + require += info_version_internal[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXE) || defined(__CRAYXC) + require += info_cray[argc]; +#endif + require += info_language_dialect_default[argc]; + (void)argv; + return require; +} +#endif diff --git a/app/Bin/SpeedTest-master/CMakeFiles/3.16.3/CompilerIdCXX/CMakeCXXCompilerId.cpp b/app/Bin/SpeedTest-master/CMakeFiles/3.16.3/CompilerIdCXX/CMakeCXXCompilerId.cpp new file mode 100644 index 00000000..69cfdba6 --- /dev/null +++ b/app/Bin/SpeedTest-master/CMakeFiles/3.16.3/CompilerIdCXX/CMakeCXXCompilerId.cpp @@ -0,0 +1,660 @@ +/* This source file must have a .cpp extension so that all C++ compilers + recognize the extension without flags. Borland does not know .cxx for + example. */ +#ifndef __cplusplus +# error "A C compiler has been selected for C++." +#endif + + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__COMO__) +# define COMPILER_ID "Comeau" + /* __COMO_VERSION__ = VRR */ +# define COMPILER_VERSION_MAJOR DEC(__COMO_VERSION__ / 100) +# define COMPILER_VERSION_MINOR DEC(__COMO_VERSION__ % 100) + +#elif defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# if defined(__GNUC__) +# define SIMULATE_ID "GNU" +# endif + /* __INTEL_COMPILER = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# if defined(__INTEL_COMPILER_UPDATE) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) +# else +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# endif +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(__PATHCC__) +# define COMPILER_ID "PathScale" +# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) +# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) +# if defined(__PATHCC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) +# endif + +#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) +# define COMPILER_ID "Embarcadero" +# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_CC) +# define COMPILER_ID "SunPro" +# if __SUNPRO_CC >= 0x5100 + /* __SUNPRO_CC = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# endif + +#elif defined(__HP_aCC) +# define COMPILER_ID "HP" + /* __HP_aCC = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100) + +#elif defined(__DECCXX) +# define COMPILER_ID "Compaq" + /* __DECCXX_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000) + +#elif defined(__IBMCPP__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__ibmxl__) && defined(__clang__) +# define COMPILER_ID "XLClang" +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) + + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800 +# define COMPILER_ID "XL" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version) +# define COMPILER_ID "Fujitsu" + +#elif defined(__ghs__) +# define COMPILER_ID "GHS" +/* __GHS_VERSION_NUMBER = VVVVRP */ +# ifdef __GHS_VERSION_NUMBER +# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) +# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) +# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) +# endif + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__ARMCC_VERSION) && !defined(__clang__) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) +# define COMPILER_ID "ARMClang" + # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION % 10000) +# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__GNUC__) || defined(__GNUG__) +# define COMPILER_ID "GNU" +# if defined(__GNUC__) +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# else +# define COMPILER_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) +# define COMPILER_ID "ADSP" +#if defined(__VISUALDSPVERSION__) + /* __VISUALDSPVERSION__ = 0xVVRRPP00 */ +# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24) +# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" +# if defined(__VER__) && defined(__ICCARM__) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) +# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) +# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__)) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) +# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) +# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXE) || defined(__CRAYXC) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# else /* unknown platform */ +# define PLATFORM_ID +# endif + +#elif defined(__INTEGRITY) +# if defined(INT_178B) +# define PLATFORM_ID "Integrity178" + +# else /* regular Integrity */ +# define PLATFORM_ID "Integrity" +# endif + +#else /* unknown platform */ +# define PLATFORM_ID + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM64) +# define ARCHITECTURE_ID "ARM64" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# if defined(__ICCARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__ICCRX__) +# define ARCHITECTURE_ID "RX" + +# elif defined(__ICCRH850__) +# define ARCHITECTURE_ID "RH850" + +# elif defined(__ICCRL78__) +# define ARCHITECTURE_ID "RL78" + +# elif defined(__ICCRISCV__) +# define ARCHITECTURE_ID "RISCV" + +# elif defined(__ICCAVR__) +# define ARCHITECTURE_ID "AVR" + +# elif defined(__ICC430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__ICCV850__) +# define ARCHITECTURE_ID "V850" + +# elif defined(__ICC8051__) +# define ARCHITECTURE_ID "8051" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__ghs__) +# if defined(__PPC64__) +# define ARCHITECTURE_ID "PPC64" + +# elif defined(__ppc__) +# define ARCHITECTURE_ID "PPC" + +# elif defined(__ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__x86_64__) +# define ARCHITECTURE_ID "x64" + +# elif defined(__i386__) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif +#else +# define ARCHITECTURE_ID +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number components. */ +#ifdef COMPILER_VERSION_MAJOR +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the internal version number. */ +#ifdef COMPILER_VERSION_INTERNAL +char const info_version_internal[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', + 'i','n','t','e','r','n','a','l','[', + COMPILER_VERSION_INTERNAL,']','\0'}; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + + +#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && _MSVC_LANG < 201403L +# if defined(__INTEL_CXX11_MODE__) +# if defined(__cpp_aggregate_nsdmi) +# define CXX_STD 201402L +# else +# define CXX_STD 201103L +# endif +# else +# define CXX_STD 199711L +# endif +#elif defined(_MSC_VER) && defined(_MSVC_LANG) +# define CXX_STD _MSVC_LANG +#else +# define CXX_STD __cplusplus +#endif + +const char* info_language_dialect_default = "INFO" ":" "dialect_default[" +#if CXX_STD > 201703L + "20" +#elif CXX_STD >= 201703L + "17" +#elif CXX_STD >= 201402L + "14" +#elif CXX_STD >= 201103L + "11" +#else + "98" +#endif +"]"; + +/*--------------------------------------------------------------------------*/ + +int main(int argc, char* argv[]) +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef COMPILER_VERSION_INTERNAL + require += info_version_internal[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXE) || defined(__CRAYXC) + require += info_cray[argc]; +#endif + require += info_language_dialect_default[argc]; + (void)argv; + return require; +} diff --git a/app/Bin/SpeedTest-master/CMakeFiles/CMakeDirectoryInformation.cmake b/app/Bin/SpeedTest-master/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 00000000..d2e92625 --- /dev/null +++ b/app/Bin/SpeedTest-master/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/henry/Downloads/SpeedTest-master") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/henry/Downloads/SpeedTest-master") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/app/Bin/SpeedTest-master/CMakeFiles/CMakeOutput.log b/app/Bin/SpeedTest-master/CMakeFiles/CMakeOutput.log new file mode 100644 index 00000000..d81d9389 --- /dev/null +++ b/app/Bin/SpeedTest-master/CMakeFiles/CMakeOutput.log @@ -0,0 +1,463 @@ +The system is: Linux - 5.4.0-7634-generic - x86_64 +Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded. +Compiler: /usr/bin/cc +Build flags: +Id flags: + +The output was: +0 + + +Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.out" + +The C compiler identification is GNU, found in "/home/henry/Downloads/SpeedTest-master/CMakeFiles/3.16.3/CompilerIdC/a.out" + +Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded. +Compiler: /usr/bin/c++ +Build flags: +Id flags: + +The output was: +0 + + +Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out" + +The CXX compiler identification is GNU, found in "/home/henry/Downloads/SpeedTest-master/CMakeFiles/3.16.3/CompilerIdCXX/a.out" + +Determining if the C compiler works passed with the following output: +Change Dir: /home/henry/Downloads/SpeedTest-master/CMakeFiles/CMakeTmp + +Run Build Command(s):/usr/bin/make cmTC_1f72d/fast && /usr/bin/make -f CMakeFiles/cmTC_1f72d.dir/build.make CMakeFiles/cmTC_1f72d.dir/build +make[1]: Entering directory '/home/henry/Downloads/SpeedTest-master/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_1f72d.dir/testCCompiler.c.o +/usr/bin/cc -o CMakeFiles/cmTC_1f72d.dir/testCCompiler.c.o -c /home/henry/Downloads/SpeedTest-master/CMakeFiles/CMakeTmp/testCCompiler.c +Linking C executable cmTC_1f72d +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_1f72d.dir/link.txt --verbose=1 +/usr/bin/cc -rdynamic CMakeFiles/cmTC_1f72d.dir/testCCompiler.c.o -o cmTC_1f72d +make[1]: Leaving directory '/home/henry/Downloads/SpeedTest-master/CMakeFiles/CMakeTmp' + + + +Detecting C compiler ABI info compiled with the following output: +Change Dir: /home/henry/Downloads/SpeedTest-master/CMakeFiles/CMakeTmp + +Run Build Command(s):/usr/bin/make cmTC_15a6a/fast && /usr/bin/make -f CMakeFiles/cmTC_15a6a.dir/build.make CMakeFiles/cmTC_15a6a.dir/build +make[1]: Entering directory '/home/henry/Downloads/SpeedTest-master/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_15a6a.dir/CMakeCCompilerABI.c.o +/usr/bin/cc -v -o CMakeFiles/cmTC_15a6a.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake-3.16/Modules/CMakeCCompilerABI.c +Using built-in specs. +COLLECT_GCC=/usr/bin/cc +OFFLOAD_TARGET_NAMES=nvptx-none:hsa +OFFLOAD_TARGET_DEFAULT=1 +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.3.0-10ubuntu2' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu +Thread model: posix +gcc version 9.3.0 (Ubuntu 9.3.0-10ubuntu2) +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_15a6a.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' + /usr/lib/gcc/x86_64-linux-gnu/9/cc1 -quiet -v -imultiarch x86_64-linux-gnu /usr/share/cmake-3.16/Modules/CMakeCCompilerABI.c -quiet -dumpbase CMakeCCompilerABI.c -mtune=generic -march=x86-64 -auxbase-strip CMakeFiles/cmTC_15a6a.dir/CMakeCCompilerABI.c.o -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccOfkpsR.s +GNU C17 (Ubuntu 9.3.0-10ubuntu2) version 9.3.0 (x86_64-linux-gnu) + compiled by GNU C version 9.3.0, GMP version 6.2.0, MPFR version 4.0.2, MPC version 1.1.0, isl version isl-0.22.1-GMP + +GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 +ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" +ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/include-fixed" +ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/../../../../x86_64-linux-gnu/include" +#include "..." search starts here: +#include <...> search starts here: + /usr/lib/gcc/x86_64-linux-gnu/9/include + /usr/local/include + /usr/include/x86_64-linux-gnu + /usr/include +End of search list. +GNU C17 (Ubuntu 9.3.0-10ubuntu2) version 9.3.0 (x86_64-linux-gnu) + compiled by GNU C version 9.3.0, GMP version 6.2.0, MPFR version 4.0.2, MPC version 1.1.0, isl version isl-0.22.1-GMP + +GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 +Compiler executable checksum: 18dc4c39b54390aa2b5013fb4339d43f +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_15a6a.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' + as -v --64 -o CMakeFiles/cmTC_15a6a.dir/CMakeCCompilerABI.c.o /tmp/ccOfkpsR.s +GNU assembler version 2.34 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.34 +COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/ +LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_15a6a.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' +Linking C executable cmTC_15a6a +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_15a6a.dir/link.txt --verbose=1 +/usr/bin/cc -v -rdynamic CMakeFiles/cmTC_15a6a.dir/CMakeCCompilerABI.c.o -o cmTC_15a6a +Using built-in specs. +COLLECT_GCC=/usr/bin/cc +COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper +OFFLOAD_TARGET_NAMES=nvptx-none:hsa +OFFLOAD_TARGET_DEFAULT=1 +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.3.0-10ubuntu2' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu +Thread model: posix +gcc version 9.3.0 (Ubuntu 9.3.0-10ubuntu2) +COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/ +LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_15a6a' '-mtune=generic' '-march=x86-64' + /usr/lib/gcc/x86_64-linux-gnu/9/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/9/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper -plugin-opt=-fresolution=/tmp/cc8bbnll.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_15a6a /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/9 -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/9/../../.. CMakeFiles/cmTC_15a6a.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crtn.o +COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_15a6a' '-mtune=generic' '-march=x86-64' +make[1]: Leaving directory '/home/henry/Downloads/SpeedTest-master/CMakeFiles/CMakeTmp' + + + +Parsed C implicit include dir info from above output: rv=done + found start of include info + found start of implicit include info + add: [/usr/lib/gcc/x86_64-linux-gnu/9/include] + add: [/usr/local/include] + add: [/usr/include/x86_64-linux-gnu] + add: [/usr/include] + end of search list found + collapse include dir [/usr/lib/gcc/x86_64-linux-gnu/9/include] ==> [/usr/lib/gcc/x86_64-linux-gnu/9/include] + collapse include dir [/usr/local/include] ==> [/usr/local/include] + collapse include dir [/usr/include/x86_64-linux-gnu] ==> [/usr/include/x86_64-linux-gnu] + collapse include dir [/usr/include] ==> [/usr/include] + implicit include dirs: [/usr/lib/gcc/x86_64-linux-gnu/9/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include] + + +Parsed C implicit link information from above output: + link line regex: [^( *|.*[/\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\]+-)?ld|collect2)[^/\]*( |$)] + ignore line: [Change Dir: /home/henry/Downloads/SpeedTest-master/CMakeFiles/CMakeTmp] + ignore line: [] + ignore line: [Run Build Command(s):/usr/bin/make cmTC_15a6a/fast && /usr/bin/make -f CMakeFiles/cmTC_15a6a.dir/build.make CMakeFiles/cmTC_15a6a.dir/build] + ignore line: [make[1]: Entering directory '/home/henry/Downloads/SpeedTest-master/CMakeFiles/CMakeTmp'] + ignore line: [Building C object CMakeFiles/cmTC_15a6a.dir/CMakeCCompilerABI.c.o] + ignore line: [/usr/bin/cc -v -o CMakeFiles/cmTC_15a6a.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake-3.16/Modules/CMakeCCompilerABI.c] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/cc] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:hsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.3.0-10ubuntu2' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu] + ignore line: [Thread model: posix] + ignore line: [gcc version 9.3.0 (Ubuntu 9.3.0-10ubuntu2) ] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_15a6a.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64'] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/9/cc1 -quiet -v -imultiarch x86_64-linux-gnu /usr/share/cmake-3.16/Modules/CMakeCCompilerABI.c -quiet -dumpbase CMakeCCompilerABI.c -mtune=generic -march=x86-64 -auxbase-strip CMakeFiles/cmTC_15a6a.dir/CMakeCCompilerABI.c.o -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccOfkpsR.s] + ignore line: [GNU C17 (Ubuntu 9.3.0-10ubuntu2) version 9.3.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 9.3.0 GMP version 6.2.0 MPFR version 4.0.2 MPC version 1.1.0 isl version isl-0.22.1-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/include-fixed"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/../../../../x86_64-linux-gnu/include"] + ignore line: [#include "..." search starts here:] + ignore line: [#include <...> search starts here:] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/9/include] + ignore line: [ /usr/local/include] + ignore line: [ /usr/include/x86_64-linux-gnu] + ignore line: [ /usr/include] + ignore line: [End of search list.] + ignore line: [GNU C17 (Ubuntu 9.3.0-10ubuntu2) version 9.3.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 9.3.0 GMP version 6.2.0 MPFR version 4.0.2 MPC version 1.1.0 isl version isl-0.22.1-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [Compiler executable checksum: 18dc4c39b54390aa2b5013fb4339d43f] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_15a6a.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64'] + ignore line: [ as -v --64 -o CMakeFiles/cmTC_15a6a.dir/CMakeCCompilerABI.c.o /tmp/ccOfkpsR.s] + ignore line: [GNU assembler version 2.34 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.34] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_15a6a.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64'] + ignore line: [Linking C executable cmTC_15a6a] + ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_15a6a.dir/link.txt --verbose=1] + ignore line: [/usr/bin/cc -v -rdynamic CMakeFiles/cmTC_15a6a.dir/CMakeCCompilerABI.c.o -o cmTC_15a6a ] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/cc] + ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:hsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.3.0-10ubuntu2' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu] + ignore line: [Thread model: posix] + ignore line: [gcc version 9.3.0 (Ubuntu 9.3.0-10ubuntu2) ] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_15a6a' '-mtune=generic' '-march=x86-64'] + link line: [ /usr/lib/gcc/x86_64-linux-gnu/9/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/9/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper -plugin-opt=-fresolution=/tmp/cc8bbnll.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_15a6a /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/9 -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/9/../../.. CMakeFiles/cmTC_15a6a.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crtn.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/9/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/cc8bbnll.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [--build-id] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [--as-needed] ==> ignore + arg [-export-dynamic] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-pie] ==> ignore + arg [-znow] ==> ignore + arg [-zrelro] ==> ignore + arg [-o] ==> ignore + arg [cmTC_15a6a] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o] ==> ignore + arg [-L/usr/lib/gcc/x86_64-linux-gnu/9] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib] + arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu] + arg [-L/lib/../lib] ==> dir [/lib/../lib] + arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu] + arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/9/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../..] + arg [CMakeFiles/cmTC_15a6a.dir/CMakeCCompilerABI.c.o] ==> ignore + arg [-lgcc] ==> lib [gcc] + arg [--push-state] ==> ignore + arg [--as-needed] ==> ignore + arg [-lgcc_s] ==> lib [gcc_s] + arg [--pop-state] ==> ignore + arg [-lc] ==> lib [c] + arg [-lgcc] ==> lib [gcc] + arg [--push-state] ==> ignore + arg [--as-needed] ==> ignore + arg [-lgcc_s] ==> lib [gcc_s] + arg [--pop-state] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crtn.o] ==> ignore + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9] ==> [/usr/lib/gcc/x86_64-linux-gnu/9] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib] ==> [/usr/lib] + collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu] + collapse library dir [/lib/../lib] ==> [/lib] + collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/../lib] ==> [/usr/lib] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../..] ==> [/usr/lib] + implicit libs: [gcc;gcc_s;c;gcc;gcc_s] + implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/9;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib] + implicit fwks: [] + + +Determining if the CXX compiler works passed with the following output: +Change Dir: /home/henry/Downloads/SpeedTest-master/CMakeFiles/CMakeTmp + +Run Build Command(s):/usr/bin/make cmTC_6897f/fast && /usr/bin/make -f CMakeFiles/cmTC_6897f.dir/build.make CMakeFiles/cmTC_6897f.dir/build +make[1]: Entering directory '/home/henry/Downloads/SpeedTest-master/CMakeFiles/CMakeTmp' +Building CXX object CMakeFiles/cmTC_6897f.dir/testCXXCompiler.cxx.o +/usr/bin/c++ -o CMakeFiles/cmTC_6897f.dir/testCXXCompiler.cxx.o -c /home/henry/Downloads/SpeedTest-master/CMakeFiles/CMakeTmp/testCXXCompiler.cxx +Linking CXX executable cmTC_6897f +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_6897f.dir/link.txt --verbose=1 +/usr/bin/c++ -rdynamic CMakeFiles/cmTC_6897f.dir/testCXXCompiler.cxx.o -o cmTC_6897f +make[1]: Leaving directory '/home/henry/Downloads/SpeedTest-master/CMakeFiles/CMakeTmp' + + + +Detecting CXX compiler ABI info compiled with the following output: +Change Dir: /home/henry/Downloads/SpeedTest-master/CMakeFiles/CMakeTmp + +Run Build Command(s):/usr/bin/make cmTC_a756c/fast && /usr/bin/make -f CMakeFiles/cmTC_a756c.dir/build.make CMakeFiles/cmTC_a756c.dir/build +make[1]: Entering directory '/home/henry/Downloads/SpeedTest-master/CMakeFiles/CMakeTmp' +Building CXX object CMakeFiles/cmTC_a756c.dir/CMakeCXXCompilerABI.cpp.o +/usr/bin/c++ -v -o CMakeFiles/cmTC_a756c.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-3.16/Modules/CMakeCXXCompilerABI.cpp +Using built-in specs. +COLLECT_GCC=/usr/bin/c++ +OFFLOAD_TARGET_NAMES=nvptx-none:hsa +OFFLOAD_TARGET_DEFAULT=1 +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.3.0-10ubuntu2' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu +Thread model: posix +gcc version 9.3.0 (Ubuntu 9.3.0-10ubuntu2) +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_a756c.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' + /usr/lib/gcc/x86_64-linux-gnu/9/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /usr/share/cmake-3.16/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpbase CMakeCXXCompilerABI.cpp -mtune=generic -march=x86-64 -auxbase-strip CMakeFiles/cmTC_a756c.dir/CMakeCXXCompilerABI.cpp.o -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccteXH3N.s +GNU C++14 (Ubuntu 9.3.0-10ubuntu2) version 9.3.0 (x86_64-linux-gnu) + compiled by GNU C version 9.3.0, GMP version 6.2.0, MPFR version 4.0.2, MPC version 1.1.0, isl version isl-0.22.1-GMP + +GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 +ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/9" +ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" +ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/include-fixed" +ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/../../../../x86_64-linux-gnu/include" +#include "..." search starts here: +#include <...> search starts here: + /usr/include/c++/9 + /usr/include/x86_64-linux-gnu/c++/9 + /usr/include/c++/9/backward + /usr/lib/gcc/x86_64-linux-gnu/9/include + /usr/local/include + /usr/include/x86_64-linux-gnu + /usr/include +End of search list. +GNU C++14 (Ubuntu 9.3.0-10ubuntu2) version 9.3.0 (x86_64-linux-gnu) + compiled by GNU C version 9.3.0, GMP version 6.2.0, MPFR version 4.0.2, MPC version 1.1.0, isl version isl-0.22.1-GMP + +GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 +Compiler executable checksum: a3d04a02fbd98a786d710618ca593f02 +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_a756c.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' + as -v --64 -o CMakeFiles/cmTC_a756c.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccteXH3N.s +GNU assembler version 2.34 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.34 +COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/ +LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_a756c.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' +Linking CXX executable cmTC_a756c +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_a756c.dir/link.txt --verbose=1 +/usr/bin/c++ -v -rdynamic CMakeFiles/cmTC_a756c.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_a756c +Using built-in specs. +COLLECT_GCC=/usr/bin/c++ +COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper +OFFLOAD_TARGET_NAMES=nvptx-none:hsa +OFFLOAD_TARGET_DEFAULT=1 +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.3.0-10ubuntu2' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu +Thread model: posix +gcc version 9.3.0 (Ubuntu 9.3.0-10ubuntu2) +COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/ +LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_a756c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' + /usr/lib/gcc/x86_64-linux-gnu/9/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/9/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper -plugin-opt=-fresolution=/tmp/ccoE4yvj.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_a756c /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/9 -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/9/../../.. CMakeFiles/cmTC_a756c.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crtn.o +COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_a756c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' +make[1]: Leaving directory '/home/henry/Downloads/SpeedTest-master/CMakeFiles/CMakeTmp' + + + +Parsed CXX implicit include dir info from above output: rv=done + found start of include info + found start of implicit include info + add: [/usr/include/c++/9] + add: [/usr/include/x86_64-linux-gnu/c++/9] + add: [/usr/include/c++/9/backward] + add: [/usr/lib/gcc/x86_64-linux-gnu/9/include] + add: [/usr/local/include] + add: [/usr/include/x86_64-linux-gnu] + add: [/usr/include] + end of search list found + collapse include dir [/usr/include/c++/9] ==> [/usr/include/c++/9] + collapse include dir [/usr/include/x86_64-linux-gnu/c++/9] ==> [/usr/include/x86_64-linux-gnu/c++/9] + collapse include dir [/usr/include/c++/9/backward] ==> [/usr/include/c++/9/backward] + collapse include dir [/usr/lib/gcc/x86_64-linux-gnu/9/include] ==> [/usr/lib/gcc/x86_64-linux-gnu/9/include] + collapse include dir [/usr/local/include] ==> [/usr/local/include] + collapse include dir [/usr/include/x86_64-linux-gnu] ==> [/usr/include/x86_64-linux-gnu] + collapse include dir [/usr/include] ==> [/usr/include] + implicit include dirs: [/usr/include/c++/9;/usr/include/x86_64-linux-gnu/c++/9;/usr/include/c++/9/backward;/usr/lib/gcc/x86_64-linux-gnu/9/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include] + + +Parsed CXX implicit link information from above output: + link line regex: [^( *|.*[/\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\]+-)?ld|collect2)[^/\]*( |$)] + ignore line: [Change Dir: /home/henry/Downloads/SpeedTest-master/CMakeFiles/CMakeTmp] + ignore line: [] + ignore line: [Run Build Command(s):/usr/bin/make cmTC_a756c/fast && /usr/bin/make -f CMakeFiles/cmTC_a756c.dir/build.make CMakeFiles/cmTC_a756c.dir/build] + ignore line: [make[1]: Entering directory '/home/henry/Downloads/SpeedTest-master/CMakeFiles/CMakeTmp'] + ignore line: [Building CXX object CMakeFiles/cmTC_a756c.dir/CMakeCXXCompilerABI.cpp.o] + ignore line: [/usr/bin/c++ -v -o CMakeFiles/cmTC_a756c.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-3.16/Modules/CMakeCXXCompilerABI.cpp] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/c++] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:hsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.3.0-10ubuntu2' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu] + ignore line: [Thread model: posix] + ignore line: [gcc version 9.3.0 (Ubuntu 9.3.0-10ubuntu2) ] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_a756c.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64'] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/9/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /usr/share/cmake-3.16/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpbase CMakeCXXCompilerABI.cpp -mtune=generic -march=x86-64 -auxbase-strip CMakeFiles/cmTC_a756c.dir/CMakeCXXCompilerABI.cpp.o -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccteXH3N.s] + ignore line: [GNU C++14 (Ubuntu 9.3.0-10ubuntu2) version 9.3.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 9.3.0 GMP version 6.2.0 MPFR version 4.0.2 MPC version 1.1.0 isl version isl-0.22.1-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/9"] + ignore line: [ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/include-fixed"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/../../../../x86_64-linux-gnu/include"] + ignore line: [#include "..." search starts here:] + ignore line: [#include <...> search starts here:] + ignore line: [ /usr/include/c++/9] + ignore line: [ /usr/include/x86_64-linux-gnu/c++/9] + ignore line: [ /usr/include/c++/9/backward] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/9/include] + ignore line: [ /usr/local/include] + ignore line: [ /usr/include/x86_64-linux-gnu] + ignore line: [ /usr/include] + ignore line: [End of search list.] + ignore line: [GNU C++14 (Ubuntu 9.3.0-10ubuntu2) version 9.3.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 9.3.0 GMP version 6.2.0 MPFR version 4.0.2 MPC version 1.1.0 isl version isl-0.22.1-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [Compiler executable checksum: a3d04a02fbd98a786d710618ca593f02] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_a756c.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64'] + ignore line: [ as -v --64 -o CMakeFiles/cmTC_a756c.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccteXH3N.s] + ignore line: [GNU assembler version 2.34 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.34] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_a756c.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64'] + ignore line: [Linking CXX executable cmTC_a756c] + ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_a756c.dir/link.txt --verbose=1] + ignore line: [/usr/bin/c++ -v -rdynamic CMakeFiles/cmTC_a756c.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_a756c ] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/c++] + ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:hsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.3.0-10ubuntu2' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu] + ignore line: [Thread model: posix] + ignore line: [gcc version 9.3.0 (Ubuntu 9.3.0-10ubuntu2) ] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_a756c' '-shared-libgcc' '-mtune=generic' '-march=x86-64'] + link line: [ /usr/lib/gcc/x86_64-linux-gnu/9/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/9/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper -plugin-opt=-fresolution=/tmp/ccoE4yvj.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_a756c /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/9 -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/9/../../.. CMakeFiles/cmTC_a756c.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crtn.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/9/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/ccoE4yvj.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [--build-id] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [--as-needed] ==> ignore + arg [-export-dynamic] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-pie] ==> ignore + arg [-znow] ==> ignore + arg [-zrelro] ==> ignore + arg [-o] ==> ignore + arg [cmTC_a756c] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o] ==> ignore + arg [-L/usr/lib/gcc/x86_64-linux-gnu/9] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib] + arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu] + arg [-L/lib/../lib] ==> dir [/lib/../lib] + arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu] + arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/9/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../..] + arg [CMakeFiles/cmTC_a756c.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore + arg [-lstdc++] ==> lib [stdc++] + arg [-lm] ==> lib [m] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [-lc] ==> lib [c] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [/usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crtn.o] ==> ignore + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9] ==> [/usr/lib/gcc/x86_64-linux-gnu/9] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib] ==> [/usr/lib] + collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu] + collapse library dir [/lib/../lib] ==> [/lib] + collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/../lib] ==> [/usr/lib] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../..] ==> [/usr/lib] + implicit libs: [stdc++;m;gcc_s;gcc;c;gcc_s;gcc] + implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/9;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib] + implicit fwks: [] + + diff --git a/app/Bin/SpeedTest-master/CMakeFiles/Makefile.cmake b/app/Bin/SpeedTest-master/CMakeFiles/Makefile.cmake new file mode 100644 index 00000000..dab1457d --- /dev/null +++ b/app/Bin/SpeedTest-master/CMakeFiles/Makefile.cmake @@ -0,0 +1,59 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +# The generator used is: +set(CMAKE_DEPENDS_GENERATOR "Unix Makefiles") + +# The top level Makefile was generated from the following files: +set(CMAKE_MAKEFILE_DEPENDS + "CMakeCache.txt" + "CMakeFiles/3.16.3/CMakeCCompiler.cmake" + "CMakeFiles/3.16.3/CMakeCXXCompiler.cmake" + "CMakeFiles/3.16.3/CMakeSystem.cmake" + "CMakeLists.txt" + "SpeedTestConfig.h.in" + "/usr/share/cmake-3.16/Modules/CMakeCInformation.cmake" + "/usr/share/cmake-3.16/Modules/CMakeCXXInformation.cmake" + "/usr/share/cmake-3.16/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake" + "/usr/share/cmake-3.16/Modules/CMakeCommonLanguageInclude.cmake" + "/usr/share/cmake-3.16/Modules/CMakeGenericSystem.cmake" + "/usr/share/cmake-3.16/Modules/CMakeInitializeConfigs.cmake" + "/usr/share/cmake-3.16/Modules/CMakeLanguageInformation.cmake" + "/usr/share/cmake-3.16/Modules/CMakeSystemSpecificInformation.cmake" + "/usr/share/cmake-3.16/Modules/CMakeSystemSpecificInitialize.cmake" + "/usr/share/cmake-3.16/Modules/CheckIncludeFiles.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/CMakeCommonCompilerMacros.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/GNU-C.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/GNU-CXX.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/GNU.cmake" + "/usr/share/cmake-3.16/Modules/FindCURL.cmake" + "/usr/share/cmake-3.16/Modules/FindLibXml2.cmake" + "/usr/share/cmake-3.16/Modules/FindOpenSSL.cmake" + "/usr/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake" + "/usr/share/cmake-3.16/Modules/FindPackageMessage.cmake" + "/usr/share/cmake-3.16/Modules/FindPkgConfig.cmake" + "/usr/share/cmake-3.16/Modules/Internal/CMakeCheckCompilerFlag.cmake" + "/usr/share/cmake-3.16/Modules/Platform/Linux-GNU-C.cmake" + "/usr/share/cmake-3.16/Modules/Platform/Linux-GNU-CXX.cmake" + "/usr/share/cmake-3.16/Modules/Platform/Linux-GNU.cmake" + "/usr/share/cmake-3.16/Modules/Platform/Linux.cmake" + "/usr/share/cmake-3.16/Modules/Platform/UnixPaths.cmake" + "/usr/share/cmake-3.16/Modules/SelectLibraryConfigurations.cmake" + ) + +# The corresponding makefile is: +set(CMAKE_MAKEFILE_OUTPUTS + "Makefile" + "CMakeFiles/cmake.check_cache" + ) + +# Byproducts of CMake generate step: +set(CMAKE_MAKEFILE_PRODUCTS + "SpeedTestConfig.h" + "CMakeFiles/CMakeDirectoryInformation.cmake" + ) + +# Dependency information for all targets: +set(CMAKE_DEPEND_INFO_FILES + "CMakeFiles/SpeedTest.dir/DependInfo.cmake" + ) diff --git a/app/Bin/SpeedTest-master/CMakeFiles/Makefile2 b/app/Bin/SpeedTest-master/CMakeFiles/Makefile2 new file mode 100644 index 00000000..633626b4 --- /dev/null +++ b/app/Bin/SpeedTest-master/CMakeFiles/Makefile2 @@ -0,0 +1,106 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/henry/Downloads/SpeedTest-master + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/henry/Downloads/SpeedTest-master + +#============================================================================= +# Directory level rules for the build root directory + +# The main recursive "all" target. +all: CMakeFiles/SpeedTest.dir/all + +.PHONY : all + +# The main recursive "preinstall" target. +preinstall: + +.PHONY : preinstall + +# The main recursive "clean" target. +clean: CMakeFiles/SpeedTest.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target CMakeFiles/SpeedTest.dir + +# All Build rule for target. +CMakeFiles/SpeedTest.dir/all: + $(MAKE) -f CMakeFiles/SpeedTest.dir/build.make CMakeFiles/SpeedTest.dir/depend + $(MAKE) -f CMakeFiles/SpeedTest.dir/build.make CMakeFiles/SpeedTest.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/henry/Downloads/SpeedTest-master/CMakeFiles --progress-num=1,2,3,4,5 "Built target SpeedTest" +.PHONY : CMakeFiles/SpeedTest.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/SpeedTest.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/henry/Downloads/SpeedTest-master/CMakeFiles 5 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/SpeedTest.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/henry/Downloads/SpeedTest-master/CMakeFiles 0 +.PHONY : CMakeFiles/SpeedTest.dir/rule + +# Convenience name for target. +SpeedTest: CMakeFiles/SpeedTest.dir/rule + +.PHONY : SpeedTest + +# clean rule for target. +CMakeFiles/SpeedTest.dir/clean: + $(MAKE) -f CMakeFiles/SpeedTest.dir/build.make CMakeFiles/SpeedTest.dir/clean +.PHONY : CMakeFiles/SpeedTest.dir/clean + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/app/Bin/SpeedTest-master/CMakeFiles/SpeedTest.dir/CXX.includecache b/app/Bin/SpeedTest-master/CMakeFiles/SpeedTest.dir/CXX.includecache new file mode 100644 index 00000000..21d9c210 --- /dev/null +++ b/app/Bin/SpeedTest-master/CMakeFiles/SpeedTest.dir/CXX.includecache @@ -0,0 +1,338 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/henry/Downloads/SpeedTest-master/CmdOptions.h +getopt.h +- + +/home/henry/Downloads/SpeedTest-master/DataTypes.h +iostream +- +stdio.h +- +stdlib.h +- + +/home/henry/Downloads/SpeedTest-master/MD5Util.cpp +sstream +- +MD5Util.h +/home/henry/Downloads/SpeedTest-master/MD5Util.h + +/home/henry/Downloads/SpeedTest-master/MD5Util.h +CommonCrypto/CommonDigest.h +- +string +- +openssl/md5.h +- + +/home/henry/Downloads/SpeedTest-master/SpeedTest.cpp +cmath +- +iomanip +- +SpeedTest.h +/home/henry/Downloads/SpeedTest-master/SpeedTest.h +MD5Util.h +/home/henry/Downloads/SpeedTest-master/MD5Util.h +netdb.h +- + +/home/henry/Downloads/SpeedTest-master/SpeedTest.h +SpeedTestConfig.h +/home/henry/Downloads/SpeedTest-master/SpeedTestConfig.h +SpeedTestClient.h +/home/henry/Downloads/SpeedTest-master/SpeedTestClient.h +libxml/xmlreader.h +- +functional +- +cmath +- +curl/curl.h +- +fstream +- +sstream +- +iostream +- +map +- +vector +- +algorithm +- +thread +- +mutex +- +DataTypes.h +/home/henry/Downloads/SpeedTest-master/DataTypes.h + +/home/henry/Downloads/SpeedTest-master/SpeedTestClient.cpp +arpa/inet.h +- +netdb.h +- +SpeedTestClient.h +/home/henry/Downloads/SpeedTest-master/SpeedTestClient.h + +/home/henry/Downloads/SpeedTest-master/SpeedTestClient.h +ctime +- +netdb.h +- +netinet/in.h +- +string.h +- +sys/socket.h +- +unistd.h +- +chrono +- +unistd.h +- +SpeedTest.h +/home/henry/Downloads/SpeedTest-master/SpeedTest.h +DataTypes.h +/home/henry/Downloads/SpeedTest-master/DataTypes.h + +/home/henry/Downloads/SpeedTest-master/SpeedTestConfig.h + +/home/henry/Downloads/SpeedTest-master/TestConfigTemplate.h +SpeedTest.h +/home/henry/Downloads/SpeedTest-master/SpeedTest.h + +/home/henry/Downloads/SpeedTest-master/main.cpp +iostream +- +map +- +iomanip +- +SpeedTest.h +/home/henry/Downloads/SpeedTest-master/SpeedTest.h +TestConfigTemplate.h +/home/henry/Downloads/SpeedTest-master/TestConfigTemplate.h +CmdOptions.h +/home/henry/Downloads/SpeedTest-master/CmdOptions.h +csignal +- + +/usr/include/libxml2/libxml/SAX2.h +stdio.h +- +stdlib.h +- +libxml/xmlversion.h +- +libxml/parser.h +- +libxml/xlink.h +- + +/usr/include/libxml2/libxml/dict.h +stddef.h +- +libxml/xmlversion.h +- + +/usr/include/libxml2/libxml/encoding.h +libxml/xmlversion.h +- +iconv.h +- +unicode/ucnv.h +- +libxml/tree.h +- + +/usr/include/libxml2/libxml/entities.h +libxml/xmlversion.h +- +libxml/tree.h +- + +/usr/include/libxml2/libxml/globals.h +libxml/xmlversion.h +- +libxml/parser.h +- +libxml/xmlerror.h +- +libxml/SAX2.h +- +libxml/xmlmemory.h +- +libxml/threads.h +- + +/usr/include/libxml2/libxml/hash.h +libxml/xmlversion.h +- +libxml/parser.h +- +libxml/dict.h +- + +/usr/include/libxml2/libxml/list.h +libxml/xmlversion.h +- + +/usr/include/libxml2/libxml/parser.h +stdarg.h +- +libxml/xmlversion.h +- +libxml/tree.h +- +libxml/dict.h +- +libxml/hash.h +- +libxml/valid.h +- +libxml/entities.h +- +libxml/xmlerror.h +- +libxml/xmlstring.h +- +libxml/encoding.h +- +libxml/xmlIO.h +- +libxml/globals.h +- + +/usr/include/libxml2/libxml/relaxng.h +libxml/xmlversion.h +- +libxml/hash.h +- +libxml/xmlstring.h +- + +/usr/include/libxml2/libxml/threads.h +libxml/xmlversion.h +- +libxml/globals.h +- + +/usr/include/libxml2/libxml/tree.h +stdio.h +- +limits.h +- +libxml/xmlversion.h +- +libxml/xmlstring.h +- +libxml/xmlregexp.h +- +libxml/xmlmemory.h +- + +/usr/include/libxml2/libxml/valid.h +libxml/xmlversion.h +- +libxml/xmlerror.h +- +libxml/tree.h +- +libxml/list.h +- +libxml/xmlautomata.h +- +libxml/xmlregexp.h +- + +/usr/include/libxml2/libxml/xlink.h +libxml/xmlversion.h +- +libxml/tree.h +- + +/usr/include/libxml2/libxml/xmlIO.h +stdio.h +- +libxml/xmlversion.h +- +libxml/globals.h +- +libxml/tree.h +- +libxml/parser.h +- +libxml/encoding.h +- + +/usr/include/libxml2/libxml/xmlautomata.h +libxml/xmlversion.h +- +libxml/tree.h +- +libxml/xmlregexp.h +- + +/usr/include/libxml2/libxml/xmlerror.h +libxml/parser.h +- + +/usr/include/libxml2/libxml/xmlexports.h + +/usr/include/libxml2/libxml/xmlmemory.h +stdio.h +- +libxml/xmlversion.h +- +libxml/threads.h +- +libxml/globals.h +- + +/usr/include/libxml2/libxml/xmlreader.h +libxml/xmlversion.h +- +libxml/tree.h +- +libxml/xmlIO.h +- +libxml/relaxng.h +- +libxml/xmlschemas.h +- + +/usr/include/libxml2/libxml/xmlregexp.h +libxml/xmlversion.h +- +libxml/tree.h +- +libxml/dict.h +- + +/usr/include/libxml2/libxml/xmlschemas.h +libxml/xmlversion.h +- +libxml/tree.h +- + +/usr/include/libxml2/libxml/xmlstring.h +stdarg.h +- +libxml/xmlversion.h +- + +/usr/include/libxml2/libxml/xmlversion.h +libxml/xmlexports.h +- + diff --git a/app/Bin/SpeedTest-master/CMakeFiles/SpeedTest.dir/DependInfo.cmake b/app/Bin/SpeedTest-master/CMakeFiles/SpeedTest.dir/DependInfo.cmake new file mode 100644 index 00000000..ff519e8f --- /dev/null +++ b/app/Bin/SpeedTest-master/CMakeFiles/SpeedTest.dir/DependInfo.cmake @@ -0,0 +1,25 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "CXX" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_CXX + "/home/henry/Downloads/SpeedTest-master/MD5Util.cpp" "/home/henry/Downloads/SpeedTest-master/CMakeFiles/SpeedTest.dir/MD5Util.cpp.o" + "/home/henry/Downloads/SpeedTest-master/SpeedTest.cpp" "/home/henry/Downloads/SpeedTest-master/CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o" + "/home/henry/Downloads/SpeedTest-master/SpeedTestClient.cpp" "/home/henry/Downloads/SpeedTest-master/CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o" + "/home/henry/Downloads/SpeedTest-master/main.cpp" "/home/henry/Downloads/SpeedTest-master/CMakeFiles/SpeedTest.dir/main.cpp.o" + ) +set(CMAKE_CXX_COMPILER_ID "GNU") + +# The include file search paths: +set(CMAKE_CXX_TARGET_INCLUDE_PATH + "." + "/usr/include/libxml2" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/app/Bin/SpeedTest-master/CMakeFiles/SpeedTest.dir/build.make b/app/Bin/SpeedTest-master/CMakeFiles/SpeedTest.dir/build.make new file mode 100644 index 00000000..308c0075 --- /dev/null +++ b/app/Bin/SpeedTest-master/CMakeFiles/SpeedTest.dir/build.make @@ -0,0 +1,147 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/henry/Downloads/SpeedTest-master + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/henry/Downloads/SpeedTest-master + +# Include any dependencies generated for this target. +include CMakeFiles/SpeedTest.dir/depend.make + +# Include the progress variables for this target. +include CMakeFiles/SpeedTest.dir/progress.make + +# Include the compile flags for this target's objects. +include CMakeFiles/SpeedTest.dir/flags.make + +CMakeFiles/SpeedTest.dir/main.cpp.o: CMakeFiles/SpeedTest.dir/flags.make +CMakeFiles/SpeedTest.dir/main.cpp.o: main.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/henry/Downloads/SpeedTest-master/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/SpeedTest.dir/main.cpp.o" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SpeedTest.dir/main.cpp.o -c /home/henry/Downloads/SpeedTest-master/main.cpp + +CMakeFiles/SpeedTest.dir/main.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SpeedTest.dir/main.cpp.i" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/henry/Downloads/SpeedTest-master/main.cpp > CMakeFiles/SpeedTest.dir/main.cpp.i + +CMakeFiles/SpeedTest.dir/main.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SpeedTest.dir/main.cpp.s" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/henry/Downloads/SpeedTest-master/main.cpp -o CMakeFiles/SpeedTest.dir/main.cpp.s + +CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o: CMakeFiles/SpeedTest.dir/flags.make +CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o: SpeedTest.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/henry/Downloads/SpeedTest-master/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building CXX object CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o -c /home/henry/Downloads/SpeedTest-master/SpeedTest.cpp + +CMakeFiles/SpeedTest.dir/SpeedTest.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SpeedTest.dir/SpeedTest.cpp.i" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/henry/Downloads/SpeedTest-master/SpeedTest.cpp > CMakeFiles/SpeedTest.dir/SpeedTest.cpp.i + +CMakeFiles/SpeedTest.dir/SpeedTest.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SpeedTest.dir/SpeedTest.cpp.s" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/henry/Downloads/SpeedTest-master/SpeedTest.cpp -o CMakeFiles/SpeedTest.dir/SpeedTest.cpp.s + +CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o: CMakeFiles/SpeedTest.dir/flags.make +CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o: SpeedTestClient.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/henry/Downloads/SpeedTest-master/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building CXX object CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o -c /home/henry/Downloads/SpeedTest-master/SpeedTestClient.cpp + +CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.i" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/henry/Downloads/SpeedTest-master/SpeedTestClient.cpp > CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.i + +CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.s" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/henry/Downloads/SpeedTest-master/SpeedTestClient.cpp -o CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.s + +CMakeFiles/SpeedTest.dir/MD5Util.cpp.o: CMakeFiles/SpeedTest.dir/flags.make +CMakeFiles/SpeedTest.dir/MD5Util.cpp.o: MD5Util.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/henry/Downloads/SpeedTest-master/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building CXX object CMakeFiles/SpeedTest.dir/MD5Util.cpp.o" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SpeedTest.dir/MD5Util.cpp.o -c /home/henry/Downloads/SpeedTest-master/MD5Util.cpp + +CMakeFiles/SpeedTest.dir/MD5Util.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SpeedTest.dir/MD5Util.cpp.i" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/henry/Downloads/SpeedTest-master/MD5Util.cpp > CMakeFiles/SpeedTest.dir/MD5Util.cpp.i + +CMakeFiles/SpeedTest.dir/MD5Util.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SpeedTest.dir/MD5Util.cpp.s" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/henry/Downloads/SpeedTest-master/MD5Util.cpp -o CMakeFiles/SpeedTest.dir/MD5Util.cpp.s + +# Object files for target SpeedTest +SpeedTest_OBJECTS = \ +"CMakeFiles/SpeedTest.dir/main.cpp.o" \ +"CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o" \ +"CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o" \ +"CMakeFiles/SpeedTest.dir/MD5Util.cpp.o" + +# External object files for target SpeedTest +SpeedTest_EXTERNAL_OBJECTS = + +SpeedTest: CMakeFiles/SpeedTest.dir/main.cpp.o +SpeedTest: CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o +SpeedTest: CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o +SpeedTest: CMakeFiles/SpeedTest.dir/MD5Util.cpp.o +SpeedTest: CMakeFiles/SpeedTest.dir/build.make +SpeedTest: /usr/lib/x86_64-linux-gnu/libcurl.so +SpeedTest: /usr/lib/x86_64-linux-gnu/libxml2.so +SpeedTest: /usr/lib/x86_64-linux-gnu/libssl.so +SpeedTest: /usr/lib/x86_64-linux-gnu/libcrypto.so +SpeedTest: CMakeFiles/SpeedTest.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/henry/Downloads/SpeedTest-master/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Linking CXX executable SpeedTest" + $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/SpeedTest.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +CMakeFiles/SpeedTest.dir/build: SpeedTest + +.PHONY : CMakeFiles/SpeedTest.dir/build + +CMakeFiles/SpeedTest.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/SpeedTest.dir/cmake_clean.cmake +.PHONY : CMakeFiles/SpeedTest.dir/clean + +CMakeFiles/SpeedTest.dir/depend: + cd /home/henry/Downloads/SpeedTest-master && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/henry/Downloads/SpeedTest-master /home/henry/Downloads/SpeedTest-master /home/henry/Downloads/SpeedTest-master /home/henry/Downloads/SpeedTest-master /home/henry/Downloads/SpeedTest-master/CMakeFiles/SpeedTest.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/SpeedTest.dir/depend + diff --git a/app/Bin/SpeedTest-master/CMakeFiles/SpeedTest.dir/cmake_clean.cmake b/app/Bin/SpeedTest-master/CMakeFiles/SpeedTest.dir/cmake_clean.cmake new file mode 100644 index 00000000..dc7c6b74 --- /dev/null +++ b/app/Bin/SpeedTest-master/CMakeFiles/SpeedTest.dir/cmake_clean.cmake @@ -0,0 +1,13 @@ +file(REMOVE_RECURSE + "CMakeFiles/SpeedTest.dir/MD5Util.cpp.o" + "CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o" + "CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o" + "CMakeFiles/SpeedTest.dir/main.cpp.o" + "SpeedTest" + "SpeedTest.pdb" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/SpeedTest.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/app/Bin/SpeedTest-master/CMakeFiles/SpeedTest.dir/depend.internal b/app/Bin/SpeedTest-master/CMakeFiles/SpeedTest.dir/depend.internal new file mode 100644 index 00000000..d18a521a --- /dev/null +++ b/app/Bin/SpeedTest-master/CMakeFiles/SpeedTest.dir/depend.internal @@ -0,0 +1,96 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +CMakeFiles/SpeedTest.dir/MD5Util.cpp.o + /home/henry/Downloads/SpeedTest-master/MD5Util.cpp + /home/henry/Downloads/SpeedTest-master/MD5Util.h +CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o + /home/henry/Downloads/SpeedTest-master/DataTypes.h + /home/henry/Downloads/SpeedTest-master/MD5Util.h + /home/henry/Downloads/SpeedTest-master/SpeedTest.cpp + /home/henry/Downloads/SpeedTest-master/SpeedTest.h + /home/henry/Downloads/SpeedTest-master/SpeedTestClient.h + /home/henry/Downloads/SpeedTest-master/SpeedTestConfig.h + /usr/include/libxml2/libxml/SAX2.h + /usr/include/libxml2/libxml/dict.h + /usr/include/libxml2/libxml/encoding.h + /usr/include/libxml2/libxml/entities.h + /usr/include/libxml2/libxml/globals.h + /usr/include/libxml2/libxml/hash.h + /usr/include/libxml2/libxml/list.h + /usr/include/libxml2/libxml/parser.h + /usr/include/libxml2/libxml/relaxng.h + /usr/include/libxml2/libxml/threads.h + /usr/include/libxml2/libxml/tree.h + /usr/include/libxml2/libxml/valid.h + /usr/include/libxml2/libxml/xlink.h + /usr/include/libxml2/libxml/xmlIO.h + /usr/include/libxml2/libxml/xmlautomata.h + /usr/include/libxml2/libxml/xmlerror.h + /usr/include/libxml2/libxml/xmlexports.h + /usr/include/libxml2/libxml/xmlmemory.h + /usr/include/libxml2/libxml/xmlreader.h + /usr/include/libxml2/libxml/xmlregexp.h + /usr/include/libxml2/libxml/xmlschemas.h + /usr/include/libxml2/libxml/xmlstring.h + /usr/include/libxml2/libxml/xmlversion.h +CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o + /home/henry/Downloads/SpeedTest-master/DataTypes.h + /home/henry/Downloads/SpeedTest-master/SpeedTest.h + /home/henry/Downloads/SpeedTest-master/SpeedTestClient.cpp + /home/henry/Downloads/SpeedTest-master/SpeedTestClient.h + /home/henry/Downloads/SpeedTest-master/SpeedTestConfig.h + /usr/include/libxml2/libxml/SAX2.h + /usr/include/libxml2/libxml/dict.h + /usr/include/libxml2/libxml/encoding.h + /usr/include/libxml2/libxml/entities.h + /usr/include/libxml2/libxml/globals.h + /usr/include/libxml2/libxml/hash.h + /usr/include/libxml2/libxml/list.h + /usr/include/libxml2/libxml/parser.h + /usr/include/libxml2/libxml/relaxng.h + /usr/include/libxml2/libxml/threads.h + /usr/include/libxml2/libxml/tree.h + /usr/include/libxml2/libxml/valid.h + /usr/include/libxml2/libxml/xlink.h + /usr/include/libxml2/libxml/xmlIO.h + /usr/include/libxml2/libxml/xmlautomata.h + /usr/include/libxml2/libxml/xmlerror.h + /usr/include/libxml2/libxml/xmlexports.h + /usr/include/libxml2/libxml/xmlmemory.h + /usr/include/libxml2/libxml/xmlreader.h + /usr/include/libxml2/libxml/xmlregexp.h + /usr/include/libxml2/libxml/xmlschemas.h + /usr/include/libxml2/libxml/xmlstring.h + /usr/include/libxml2/libxml/xmlversion.h +CMakeFiles/SpeedTest.dir/main.cpp.o + /home/henry/Downloads/SpeedTest-master/CmdOptions.h + /home/henry/Downloads/SpeedTest-master/DataTypes.h + /home/henry/Downloads/SpeedTest-master/SpeedTest.h + /home/henry/Downloads/SpeedTest-master/SpeedTestClient.h + /home/henry/Downloads/SpeedTest-master/SpeedTestConfig.h + /home/henry/Downloads/SpeedTest-master/TestConfigTemplate.h + /home/henry/Downloads/SpeedTest-master/main.cpp + /usr/include/libxml2/libxml/SAX2.h + /usr/include/libxml2/libxml/dict.h + /usr/include/libxml2/libxml/encoding.h + /usr/include/libxml2/libxml/entities.h + /usr/include/libxml2/libxml/globals.h + /usr/include/libxml2/libxml/hash.h + /usr/include/libxml2/libxml/list.h + /usr/include/libxml2/libxml/parser.h + /usr/include/libxml2/libxml/relaxng.h + /usr/include/libxml2/libxml/threads.h + /usr/include/libxml2/libxml/tree.h + /usr/include/libxml2/libxml/valid.h + /usr/include/libxml2/libxml/xlink.h + /usr/include/libxml2/libxml/xmlIO.h + /usr/include/libxml2/libxml/xmlautomata.h + /usr/include/libxml2/libxml/xmlerror.h + /usr/include/libxml2/libxml/xmlexports.h + /usr/include/libxml2/libxml/xmlmemory.h + /usr/include/libxml2/libxml/xmlreader.h + /usr/include/libxml2/libxml/xmlregexp.h + /usr/include/libxml2/libxml/xmlschemas.h + /usr/include/libxml2/libxml/xmlstring.h + /usr/include/libxml2/libxml/xmlversion.h diff --git a/app/Bin/SpeedTest-master/CMakeFiles/SpeedTest.dir/depend.make b/app/Bin/SpeedTest-master/CMakeFiles/SpeedTest.dir/depend.make new file mode 100644 index 00000000..15f8d1a1 --- /dev/null +++ b/app/Bin/SpeedTest-master/CMakeFiles/SpeedTest.dir/depend.make @@ -0,0 +1,96 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +CMakeFiles/SpeedTest.dir/MD5Util.cpp.o: MD5Util.cpp +CMakeFiles/SpeedTest.dir/MD5Util.cpp.o: MD5Util.h + +CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o: DataTypes.h +CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o: MD5Util.h +CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o: SpeedTest.cpp +CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o: SpeedTest.h +CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o: SpeedTestClient.h +CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o: SpeedTestConfig.h +CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o: /usr/include/libxml2/libxml/SAX2.h +CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o: /usr/include/libxml2/libxml/dict.h +CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o: /usr/include/libxml2/libxml/encoding.h +CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o: /usr/include/libxml2/libxml/entities.h +CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o: /usr/include/libxml2/libxml/globals.h +CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o: /usr/include/libxml2/libxml/hash.h +CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o: /usr/include/libxml2/libxml/list.h +CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o: /usr/include/libxml2/libxml/parser.h +CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o: /usr/include/libxml2/libxml/relaxng.h +CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o: /usr/include/libxml2/libxml/threads.h +CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o: /usr/include/libxml2/libxml/tree.h +CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o: /usr/include/libxml2/libxml/valid.h +CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o: /usr/include/libxml2/libxml/xlink.h +CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o: /usr/include/libxml2/libxml/xmlIO.h +CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o: /usr/include/libxml2/libxml/xmlautomata.h +CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o: /usr/include/libxml2/libxml/xmlerror.h +CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o: /usr/include/libxml2/libxml/xmlexports.h +CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o: /usr/include/libxml2/libxml/xmlmemory.h +CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o: /usr/include/libxml2/libxml/xmlreader.h +CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o: /usr/include/libxml2/libxml/xmlregexp.h +CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o: /usr/include/libxml2/libxml/xmlschemas.h +CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o: /usr/include/libxml2/libxml/xmlstring.h +CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o: /usr/include/libxml2/libxml/xmlversion.h + +CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o: DataTypes.h +CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o: SpeedTest.h +CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o: SpeedTestClient.cpp +CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o: SpeedTestClient.h +CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o: SpeedTestConfig.h +CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o: /usr/include/libxml2/libxml/SAX2.h +CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o: /usr/include/libxml2/libxml/dict.h +CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o: /usr/include/libxml2/libxml/encoding.h +CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o: /usr/include/libxml2/libxml/entities.h +CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o: /usr/include/libxml2/libxml/globals.h +CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o: /usr/include/libxml2/libxml/hash.h +CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o: /usr/include/libxml2/libxml/list.h +CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o: /usr/include/libxml2/libxml/parser.h +CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o: /usr/include/libxml2/libxml/relaxng.h +CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o: /usr/include/libxml2/libxml/threads.h +CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o: /usr/include/libxml2/libxml/tree.h +CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o: /usr/include/libxml2/libxml/valid.h +CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o: /usr/include/libxml2/libxml/xlink.h +CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o: /usr/include/libxml2/libxml/xmlIO.h +CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o: /usr/include/libxml2/libxml/xmlautomata.h +CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o: /usr/include/libxml2/libxml/xmlerror.h +CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o: /usr/include/libxml2/libxml/xmlexports.h +CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o: /usr/include/libxml2/libxml/xmlmemory.h +CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o: /usr/include/libxml2/libxml/xmlreader.h +CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o: /usr/include/libxml2/libxml/xmlregexp.h +CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o: /usr/include/libxml2/libxml/xmlschemas.h +CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o: /usr/include/libxml2/libxml/xmlstring.h +CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o: /usr/include/libxml2/libxml/xmlversion.h + +CMakeFiles/SpeedTest.dir/main.cpp.o: CmdOptions.h +CMakeFiles/SpeedTest.dir/main.cpp.o: DataTypes.h +CMakeFiles/SpeedTest.dir/main.cpp.o: SpeedTest.h +CMakeFiles/SpeedTest.dir/main.cpp.o: SpeedTestClient.h +CMakeFiles/SpeedTest.dir/main.cpp.o: SpeedTestConfig.h +CMakeFiles/SpeedTest.dir/main.cpp.o: TestConfigTemplate.h +CMakeFiles/SpeedTest.dir/main.cpp.o: main.cpp +CMakeFiles/SpeedTest.dir/main.cpp.o: /usr/include/libxml2/libxml/SAX2.h +CMakeFiles/SpeedTest.dir/main.cpp.o: /usr/include/libxml2/libxml/dict.h +CMakeFiles/SpeedTest.dir/main.cpp.o: /usr/include/libxml2/libxml/encoding.h +CMakeFiles/SpeedTest.dir/main.cpp.o: /usr/include/libxml2/libxml/entities.h +CMakeFiles/SpeedTest.dir/main.cpp.o: /usr/include/libxml2/libxml/globals.h +CMakeFiles/SpeedTest.dir/main.cpp.o: /usr/include/libxml2/libxml/hash.h +CMakeFiles/SpeedTest.dir/main.cpp.o: /usr/include/libxml2/libxml/list.h +CMakeFiles/SpeedTest.dir/main.cpp.o: /usr/include/libxml2/libxml/parser.h +CMakeFiles/SpeedTest.dir/main.cpp.o: /usr/include/libxml2/libxml/relaxng.h +CMakeFiles/SpeedTest.dir/main.cpp.o: /usr/include/libxml2/libxml/threads.h +CMakeFiles/SpeedTest.dir/main.cpp.o: /usr/include/libxml2/libxml/tree.h +CMakeFiles/SpeedTest.dir/main.cpp.o: /usr/include/libxml2/libxml/valid.h +CMakeFiles/SpeedTest.dir/main.cpp.o: /usr/include/libxml2/libxml/xlink.h +CMakeFiles/SpeedTest.dir/main.cpp.o: /usr/include/libxml2/libxml/xmlIO.h +CMakeFiles/SpeedTest.dir/main.cpp.o: /usr/include/libxml2/libxml/xmlautomata.h +CMakeFiles/SpeedTest.dir/main.cpp.o: /usr/include/libxml2/libxml/xmlerror.h +CMakeFiles/SpeedTest.dir/main.cpp.o: /usr/include/libxml2/libxml/xmlexports.h +CMakeFiles/SpeedTest.dir/main.cpp.o: /usr/include/libxml2/libxml/xmlmemory.h +CMakeFiles/SpeedTest.dir/main.cpp.o: /usr/include/libxml2/libxml/xmlreader.h +CMakeFiles/SpeedTest.dir/main.cpp.o: /usr/include/libxml2/libxml/xmlregexp.h +CMakeFiles/SpeedTest.dir/main.cpp.o: /usr/include/libxml2/libxml/xmlschemas.h +CMakeFiles/SpeedTest.dir/main.cpp.o: /usr/include/libxml2/libxml/xmlstring.h +CMakeFiles/SpeedTest.dir/main.cpp.o: /usr/include/libxml2/libxml/xmlversion.h + diff --git a/app/Bin/SpeedTest-master/CMakeFiles/SpeedTest.dir/flags.make b/app/Bin/SpeedTest-master/CMakeFiles/SpeedTest.dir/flags.make new file mode 100644 index 00000000..7ec9464b --- /dev/null +++ b/app/Bin/SpeedTest-master/CMakeFiles/SpeedTest.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +# compile CXX with /usr/bin/c++ +CXX_FLAGS = -std=c++11 -pedantic -Wall -Wno-unused-result -O3 -DNDEBUG + +CXX_DEFINES = + +CXX_INCLUDES = -I/home/henry/Downloads/SpeedTest-master -I/usr/include/libxml2 + diff --git a/app/Bin/SpeedTest-master/CMakeFiles/SpeedTest.dir/link.txt b/app/Bin/SpeedTest-master/CMakeFiles/SpeedTest.dir/link.txt new file mode 100644 index 00000000..b6ac83b8 --- /dev/null +++ b/app/Bin/SpeedTest-master/CMakeFiles/SpeedTest.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/c++ -std=c++11 -pedantic -Wall -Wno-unused-result -O3 -DNDEBUG -rdynamic CMakeFiles/SpeedTest.dir/main.cpp.o CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o CMakeFiles/SpeedTest.dir/MD5Util.cpp.o -o SpeedTest -lcurl -lxml2 -lpthread -lssl -lcrypto diff --git a/app/Bin/SpeedTest-master/CMakeFiles/SpeedTest.dir/progress.make b/app/Bin/SpeedTest-master/CMakeFiles/SpeedTest.dir/progress.make new file mode 100644 index 00000000..33e6bffb --- /dev/null +++ b/app/Bin/SpeedTest-master/CMakeFiles/SpeedTest.dir/progress.make @@ -0,0 +1,6 @@ +CMAKE_PROGRESS_1 = 1 +CMAKE_PROGRESS_2 = 2 +CMAKE_PROGRESS_3 = 3 +CMAKE_PROGRESS_4 = 4 +CMAKE_PROGRESS_5 = 5 + diff --git a/app/Bin/SpeedTest-master/CMakeFiles/TargetDirectories.txt b/app/Bin/SpeedTest-master/CMakeFiles/TargetDirectories.txt new file mode 100644 index 00000000..aa55b957 --- /dev/null +++ b/app/Bin/SpeedTest-master/CMakeFiles/TargetDirectories.txt @@ -0,0 +1,7 @@ +/home/henry/Downloads/SpeedTest-master/CMakeFiles/install/strip.dir +/home/henry/Downloads/SpeedTest-master/CMakeFiles/install/local.dir +/home/henry/Downloads/SpeedTest-master/CMakeFiles/install.dir +/home/henry/Downloads/SpeedTest-master/CMakeFiles/list_install_components.dir +/home/henry/Downloads/SpeedTest-master/CMakeFiles/rebuild_cache.dir +/home/henry/Downloads/SpeedTest-master/CMakeFiles/edit_cache.dir +/home/henry/Downloads/SpeedTest-master/CMakeFiles/SpeedTest.dir diff --git a/app/Bin/SpeedTest-master/CMakeFiles/cmake.check_cache b/app/Bin/SpeedTest-master/CMakeFiles/cmake.check_cache new file mode 100644 index 00000000..3dccd731 --- /dev/null +++ b/app/Bin/SpeedTest-master/CMakeFiles/cmake.check_cache @@ -0,0 +1 @@ +# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/app/Bin/SpeedTest-master/CMakeFiles/progress.marks b/app/Bin/SpeedTest-master/CMakeFiles/progress.marks new file mode 100644 index 00000000..7ed6ff82 --- /dev/null +++ b/app/Bin/SpeedTest-master/CMakeFiles/progress.marks @@ -0,0 +1 @@ +5 diff --git a/app/Bin/SpeedTest-master/CMakeLists.txt b/app/Bin/SpeedTest-master/CMakeLists.txt new file mode 100644 index 00000000..4383d297 --- /dev/null +++ b/app/Bin/SpeedTest-master/CMakeLists.txt @@ -0,0 +1,58 @@ +cmake_minimum_required(VERSION 2.7) +project(SpeedTest) + +set (SpeedTest_VERSION_MAJOR 1) +set (SpeedTest_VERSION_MINOR 14) +set (SpeedTest_SYSTEM_PROCESSOR ${CMAKE_SYSTEM_PROCESSOR}) +set (SpeedTest_SYSTEM ${CMAKE_SYSTEM}) + +set (SpeedTest_AUTHOR "Francesco Laurita ") +set (SpeedTest_HOME_PAGE "https://github.com/taganaka/SpeedTest") +set (SpeedTest_USER_AGENT "Mozilla/5.0 ${CMAKE_SYSTEM}; U; ${CMAKE_SYSTEM_PROCESSOR}; en-us (KHTML, like Gecko) SpeedTest++/${SpeedTest_VERSION_MAJOR}.${SpeedTest_VERSION_MINOR}") +set (SpeedTest_SERVER_LIST_URL "https://www.speedtest.net/speedtest-servers.php") +set (SpeedTest_IP_INFO_API_URL "http://speedtest.ookla.com/api/ipaddress.php") +set (SpeedTest_API_URL "http://www.speedtest.net/api/api.php") +set (SpeedTest_API_REFERER "http://c.speedtest.net/flash/speedtest.swf") +set (SpeedTest_API_KEY "297aae72") +set (SpeedTest_MIN_SERVER_VERSION "2.3") +set (SpeedTest_LATENCY_SAMPLE_SIZE 80) + + +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pedantic -Wall -Wno-unused-result") + +set(SOURCE_FILES + main.cpp + SpeedTest.cpp + SpeedTest.h + SpeedTestClient.cpp + SpeedTestClient.h + TestConfigTemplate.h + MD5Util.cpp + MD5Util.h + DataTypes.h + CmdOptions.h) + +configure_file ( + "${PROJECT_SOURCE_DIR}/SpeedTestConfig.h.in" + "${PROJECT_BINARY_DIR}/SpeedTestConfig.h" +) + +include_directories("${PROJECT_BINARY_DIR}") + +add_executable(SpeedTest ${SOURCE_FILES}) + +INCLUDE (CheckIncludeFiles) +find_package(CURL REQUIRED) +find_package(LibXml2 REQUIRED) + +if (NOT (APPLE)) + find_package(OpenSSL REQUIRED) +else() + CHECK_INCLUDE_FILES("CommonCrypto/CommonDigest.h" HAVE_COMMON_DIGEST_H) +endif() + +include_directories(${CURL_INCLUDE_DIRS} ${LIBXML2_INCLUDE_DIR}) +target_link_libraries(SpeedTest ${CURL_LIBRARIES} ${LIBXML2_LIBRARIES} -lpthread ${OPENSSL_LIBRARIES}) + +install(TARGETS SpeedTest RUNTIME DESTINATION bin) diff --git a/app/Bin/SpeedTest-master/CmdOptions.h b/app/Bin/SpeedTest-master/CmdOptions.h new file mode 100644 index 00000000..79ddf3a0 --- /dev/null +++ b/app/Bin/SpeedTest-master/CmdOptions.h @@ -0,0 +1,81 @@ +// +// Created by Francesco Laurita on 9/9/16. +// + +#ifndef SPEEDTEST_CMDOPTIONS_H +#define SPEEDTEST_CMDOPTIONS_H +#include + +enum OutputType { verbose, text, json }; + + +typedef struct program_options_t { + bool help = false; + bool latency = false; + bool download = false; + bool upload = false; + bool share = false; + std::string selected_server = ""; + OutputType output_type = OutputType::verbose; +} ProgramOptions; + +static struct option CmdLongOptions[] = { + {"help", no_argument, 0, 'h' }, + {"latency", no_argument, 0, 'l' }, + {"download", no_argument, 0, 'd' }, + {"upload", no_argument, 0, 'u' }, + {"share", no_argument, 0, 's' }, + {"test-server", required_argument, 0, 't' }, + {"output", required_argument, 0, 'o' }, + {0, 0, 0, 0 } +}; + +const char *optStr = "hldusqt:o:"; + +bool ParseOptions(const int argc, const char **argv, ProgramOptions& options){ + int long_index =0; + int opt = 0; + while ((opt = getopt_long(argc, (char **)argv, optStr, CmdLongOptions, &long_index )) != -1) { + switch (opt){ + case 'h': + options.help = true; + break; + case 'l': + options.latency = true; + break; + case 'd': + options.download = true; + break; + case 'u': + options.upload = true; + break; + case 's': + options.share = true; + break; + case 't': + options.selected_server.append(optarg); + break; + case 'o': + if (strcmp(optarg, "verbose") == 0) + options.output_type = OutputType::verbose; + else if (strcmp(optarg, "text") == 0) + options.output_type = OutputType::text; + else if (strcmp(optarg, "json") == 0) + options.output_type = OutputType::json; + else { + std::cerr << "Unsupported output type " << optarg << std::endl; + std::cerr << "Supported output type: default, text, json" < +#include +#include +static const float EARTH_RADIUS_KM = 6371.0; + +typedef struct ip_info_t { + std::string ip_address; + std::string isp; + float lat; + float lon; +} IPInfo; + +typedef struct server_info_t { + std::string url; + std::string name; + std::string country; + std::string country_code; + std::string host; + std::string sponsor; + int id; + float lat; + float lon; + float distance; + +} ServerInfo; + +typedef struct test_config_t { + long start_size; + long max_size; + long incr_size; + long buff_size; + long min_test_time_ms; + int concurrency; + std::string label; +} TestConfig; + +#endif //SPEEDTEST_DATATYPES_H diff --git a/app/Bin/SpeedTest-master/Dockerfile b/app/Bin/SpeedTest-master/Dockerfile new file mode 100644 index 00000000..830f5ef0 --- /dev/null +++ b/app/Bin/SpeedTest-master/Dockerfile @@ -0,0 +1,15 @@ +FROM ubuntu:latest + +RUN mkdir -p /tmp/build /tmp/src +COPY *.h *.cpp *.h.in CMakeLists.txt /tmp/src/ + + +RUN apt-get update && apt-get install -y g++ cmake make libcurl4-openssl-dev libxml2-dev libssl-dev && \ + cd /tmp/build && cmake -DCMAKE_BUILD_TYPE=Release ../src && make install && \ + apt-get remove --purge -y gcc make cmake libcurl4-openssl-dev libxml2-dev libssl-dev && \ + apt-get remove --purge -y `apt-mark showauto` && \ + apt-get install -y libxml2 libcurl3 && \ + rm -rf /var/lib/apt/lists/* && \ + rm -rf /tmp/build /tmp/src + +ENTRYPOINT ["/usr/local/bin/SpeedTest"] diff --git a/app/Bin/SpeedTest-master/MD5Util.cpp b/app/Bin/SpeedTest-master/MD5Util.cpp new file mode 100644 index 00000000..56f6bc5c --- /dev/null +++ b/app/Bin/SpeedTest-master/MD5Util.cpp @@ -0,0 +1,22 @@ +// +// Created by Francesco Laurita on 6/3/16. +// + +#include +#include "MD5Util.h" + +std::string MD5Util::hexDigest(const std::string &str) { + unsigned char digest[MD5_DIGEST_LENGTH]; + + MD5_CTX ctx; + MD5_Init(&ctx); + MD5_Update(&ctx, str.c_str(), str.size()); + MD5_Final(digest, &ctx); + + char hexDigest[33] = {'\0'}; + for (int i = 0; i < 16; i++) + std::sprintf(&hexDigest[i*2], "%02x", (unsigned int)digest[i]); + + return std::string(hexDigest); +} + diff --git a/app/Bin/SpeedTest-master/MD5Util.h b/app/Bin/SpeedTest-master/MD5Util.h new file mode 100644 index 00000000..b9d89035 --- /dev/null +++ b/app/Bin/SpeedTest-master/MD5Util.h @@ -0,0 +1,23 @@ +// +// Created by Francesco Laurita on 6/3/16. +// + +#ifndef SPEEDTEST_MD5UTIL_H +#define SPEEDTEST_MD5UTIL_H +#if defined(__APPLE__) +# define COMMON_DIGEST_FOR_OPENSSL +# include +#include + +# define SHA1 CC_SHA1 +#else +# include +#endif + +class MD5Util { +public: + static std::string hexDigest(const std::string &str); +}; + + +#endif //SPEEDTEST_MD5UTIL_H diff --git a/app/Bin/SpeedTest-master/Makefile b/app/Bin/SpeedTest-master/Makefile new file mode 100644 index 00000000..cd80953e --- /dev/null +++ b/app/Bin/SpeedTest-master/Makefile @@ -0,0 +1,318 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/henry/Downloads/SpeedTest-master + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/henry/Downloads/SpeedTest-master + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local/fast + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components + +.PHONY : list_install_components/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache + +.PHONY : rebuild_cache/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache + +.PHONY : edit_cache/fast + +# The main all target +all: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/henry/Downloads/SpeedTest-master/CMakeFiles /home/henry/Downloads/SpeedTest-master/CMakeFiles/progress.marks + $(MAKE) -f CMakeFiles/Makefile2 all + $(CMAKE_COMMAND) -E cmake_progress_start /home/henry/Downloads/SpeedTest-master/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + $(MAKE) -f CMakeFiles/Makefile2 clean +.PHONY : clean + +# The main clean target +clean/fast: clean + +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + $(MAKE) -f CMakeFiles/Makefile2 preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + $(MAKE) -f CMakeFiles/Makefile2 preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +#============================================================================= +# Target rules for targets named SpeedTest + +# Build rule for target. +SpeedTest: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 SpeedTest +.PHONY : SpeedTest + +# fast build rule for target. +SpeedTest/fast: + $(MAKE) -f CMakeFiles/SpeedTest.dir/build.make CMakeFiles/SpeedTest.dir/build +.PHONY : SpeedTest/fast + +MD5Util.o: MD5Util.cpp.o + +.PHONY : MD5Util.o + +# target to build an object file +MD5Util.cpp.o: + $(MAKE) -f CMakeFiles/SpeedTest.dir/build.make CMakeFiles/SpeedTest.dir/MD5Util.cpp.o +.PHONY : MD5Util.cpp.o + +MD5Util.i: MD5Util.cpp.i + +.PHONY : MD5Util.i + +# target to preprocess a source file +MD5Util.cpp.i: + $(MAKE) -f CMakeFiles/SpeedTest.dir/build.make CMakeFiles/SpeedTest.dir/MD5Util.cpp.i +.PHONY : MD5Util.cpp.i + +MD5Util.s: MD5Util.cpp.s + +.PHONY : MD5Util.s + +# target to generate assembly for a file +MD5Util.cpp.s: + $(MAKE) -f CMakeFiles/SpeedTest.dir/build.make CMakeFiles/SpeedTest.dir/MD5Util.cpp.s +.PHONY : MD5Util.cpp.s + +SpeedTest.o: SpeedTest.cpp.o + +.PHONY : SpeedTest.o + +# target to build an object file +SpeedTest.cpp.o: + $(MAKE) -f CMakeFiles/SpeedTest.dir/build.make CMakeFiles/SpeedTest.dir/SpeedTest.cpp.o +.PHONY : SpeedTest.cpp.o + +SpeedTest.i: SpeedTest.cpp.i + +.PHONY : SpeedTest.i + +# target to preprocess a source file +SpeedTest.cpp.i: + $(MAKE) -f CMakeFiles/SpeedTest.dir/build.make CMakeFiles/SpeedTest.dir/SpeedTest.cpp.i +.PHONY : SpeedTest.cpp.i + +SpeedTest.s: SpeedTest.cpp.s + +.PHONY : SpeedTest.s + +# target to generate assembly for a file +SpeedTest.cpp.s: + $(MAKE) -f CMakeFiles/SpeedTest.dir/build.make CMakeFiles/SpeedTest.dir/SpeedTest.cpp.s +.PHONY : SpeedTest.cpp.s + +SpeedTestClient.o: SpeedTestClient.cpp.o + +.PHONY : SpeedTestClient.o + +# target to build an object file +SpeedTestClient.cpp.o: + $(MAKE) -f CMakeFiles/SpeedTest.dir/build.make CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.o +.PHONY : SpeedTestClient.cpp.o + +SpeedTestClient.i: SpeedTestClient.cpp.i + +.PHONY : SpeedTestClient.i + +# target to preprocess a source file +SpeedTestClient.cpp.i: + $(MAKE) -f CMakeFiles/SpeedTest.dir/build.make CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.i +.PHONY : SpeedTestClient.cpp.i + +SpeedTestClient.s: SpeedTestClient.cpp.s + +.PHONY : SpeedTestClient.s + +# target to generate assembly for a file +SpeedTestClient.cpp.s: + $(MAKE) -f CMakeFiles/SpeedTest.dir/build.make CMakeFiles/SpeedTest.dir/SpeedTestClient.cpp.s +.PHONY : SpeedTestClient.cpp.s + +main.o: main.cpp.o + +.PHONY : main.o + +# target to build an object file +main.cpp.o: + $(MAKE) -f CMakeFiles/SpeedTest.dir/build.make CMakeFiles/SpeedTest.dir/main.cpp.o +.PHONY : main.cpp.o + +main.i: main.cpp.i + +.PHONY : main.i + +# target to preprocess a source file +main.cpp.i: + $(MAKE) -f CMakeFiles/SpeedTest.dir/build.make CMakeFiles/SpeedTest.dir/main.cpp.i +.PHONY : main.cpp.i + +main.s: main.cpp.s + +.PHONY : main.s + +# target to generate assembly for a file +main.cpp.s: + $(MAKE) -f CMakeFiles/SpeedTest.dir/build.make CMakeFiles/SpeedTest.dir/main.cpp.s +.PHONY : main.cpp.s + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... install/strip" + @echo "... install/local" + @echo "... install" + @echo "... list_install_components" + @echo "... rebuild_cache" + @echo "... edit_cache" + @echo "... SpeedTest" + @echo "... MD5Util.o" + @echo "... MD5Util.i" + @echo "... MD5Util.s" + @echo "... SpeedTest.o" + @echo "... SpeedTest.i" + @echo "... SpeedTest.s" + @echo "... SpeedTestClient.o" + @echo "... SpeedTestClient.i" + @echo "... SpeedTestClient.s" + @echo "... main.o" + @echo "... main.i" + @echo "... main.s" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/app/Bin/SpeedTest-master/README.md b/app/Bin/SpeedTest-master/README.md new file mode 100644 index 00000000..6c49a2cc --- /dev/null +++ b/app/Bin/SpeedTest-master/README.md @@ -0,0 +1,76 @@ +[![Build Status](https://travis-ci.org/taganaka/SpeedTest.svg?branch=master)](https://travis-ci.org/taganaka/SpeedTest) + +# SpeedTest++ + +Yet another unofficial speedtest.net client cli interface + +It supports the new (undocumented) raw TCP protocol for better accuracy. + +## Features + +1. Best server discovery based on speed and distance from you. + +2. Line type discovery to select the best test profile based on your line speed. + +3. Aggressive multi-threading program in order to saturate your bandwidth quickly. + +4. Test supported: Ping / Jitter / Download speed / Upload speed / Packet loss (UDP). + +5. Provide a URL to the speedtest.net share results image using option --share + +## Installation + +### Requirements + +1. A modern C++ compiler +2. cmake +3. libcurl +4. libssl +5. libxml2 + +### On Mac OS X + +``` +$ brew install cmake +$ cd cmake_build +$ cmake -DCMAKE_BUILD_TYPE=Release .. +$ make install +``` + +### On Ubuntu/Debian + +``` +$ sudo apt-get install build-essential libcurl4-openssl-dev libxml2-dev libssl-dev cmake +$ git clone https://github.com/taganaka/SpeedTest +$ cd SpeedTest +$ cmake -DCMAKE_BUILD_TYPE=Release . +$ sudo make install +``` + +## Usage + +``` +$ ./SpeedTest --help +SpeedTest++ version 1.8 +Speedtest.net command line interface +Info: https://github.com/taganaka/SpeedTest +Author: Francesco Laurita + +Usage: ./SpeedTest [--latency] [--quality] [--download] [--upload] [--share] [--help] + [--test-server host:port] [--quality-server host:port] [--output verbose|text] +optional arguments: + --help Show this message and exit + --latency Perform latency test only + --quality Perform quality test only. It includes latency test + --download Perform download test only. It includes latency test + --upload Perform upload test only. It includes latency test + --share Generate and provide a URL to the speedtest.net share results image + --test-server host:port Run speed test against a specific server + --quality-server host:port Run line quality test against a specific server + --output verbose|text Set output type. Default: verbose +$ +``` + +## License + +SpeedTest++ is available as open source program under the terms of the [MIT License](http://opensource.org/licenses/MIT). diff --git a/app/Bin/SpeedTest-master/SpeedTest.cpp b/app/Bin/SpeedTest-master/SpeedTest.cpp new file mode 100644 index 00000000..ed884068 --- /dev/null +++ b/app/Bin/SpeedTest-master/SpeedTest.cpp @@ -0,0 +1,552 @@ +// +// Created by Francesco Laurita on 5/29/16. +// + +#include +#include +#include "SpeedTest.h" +#include "MD5Util.h" +#include + +SpeedTest::SpeedTest(float minServerVersion): + mLatency(0), + mUploadSpeed(0), + mDownloadSpeed(0) { + curl_global_init(CURL_GLOBAL_DEFAULT); + mIpInfo = IPInfo(); + mServerList = std::vector(); + mMinSupportedServer = minServerVersion; +} + +SpeedTest::~SpeedTest() { + curl_global_cleanup(); + mServerList.clear(); +} + +bool SpeedTest::ipInfo(IPInfo& info) { + + if (!mIpInfo.ip_address.empty()){ + info = mIpInfo; + return true; + } + + std::stringstream oss; + auto code = httpGet(SPEED_TEST_IP_INFO_API_URL, oss); + if (code == CURLE_OK){ + auto values = SpeedTest::parseQueryString(oss.str()); + mIpInfo = IPInfo(); + mIpInfo.ip_address = values["ip_address"]; + mIpInfo.isp = values["isp"]; + mIpInfo.lat = std::stof(values["lat"]); + mIpInfo.lon = std::stof(values["lon"]); + values.clear(); + oss.clear(); + info = mIpInfo; + return true; + } + + return false; +} + +const std::vector& SpeedTest::serverList() { + if (!mServerList.empty()) + return mServerList; + + int http_code = 0; + if (fetchServers(SPEED_TEST_SERVER_LIST_URL, mServerList, http_code) && http_code == 200){ + return mServerList; + } + return mServerList; +} + + +const ServerInfo SpeedTest::bestServer(const int sample_size, std::function cb) { + auto best = findBestServerWithin(serverList(), mLatency, sample_size, cb); + SpeedTestClient client = SpeedTestClient(best); + testLatency(client, SPEED_TEST_LATENCY_SAMPLE_SIZE, mLatency); + client.close(); + return best; +} + +bool SpeedTest::setServer(ServerInfo& server){ + SpeedTestClient client = SpeedTestClient(server); + if (client.connect() && client.version() >= mMinSupportedServer){ + if (!testLatency(client, SPEED_TEST_LATENCY_SAMPLE_SIZE, mLatency)){ + return false; + } + } else { + client.close(); + return false; + } + client.close(); + return true; + +} + +bool SpeedTest::downloadSpeed(const ServerInfo &server, const TestConfig &config, double& result, std::function cb) { + opFn pfunc = &SpeedTestClient::download; + mDownloadSpeed = execute(server, config, pfunc, cb); + result = mDownloadSpeed; + return true; +} + +bool SpeedTest::uploadSpeed(const ServerInfo &server, const TestConfig &config, double& result, std::function cb) { + opFn pfunc = &SpeedTestClient::upload; + mUploadSpeed = execute(server, config, pfunc, cb); + result = mUploadSpeed; + return true; +} + +const long &SpeedTest::latency() { + return mLatency; +} + +bool SpeedTest::jitter(const ServerInfo &server, long& result, const int sample) { + auto client = SpeedTestClient(server); + double current_jitter = 0; + long previous_ms = LONG_MAX; + if (client.connect()){ + for (int i = 0; i < sample; i++){ + long ms = 0; + if (client.ping(ms)){ + if (previous_ms == LONG_MAX) { + previous_ms = ms; + } else { + current_jitter += std::abs(previous_ms - ms); + } + } + } + client.close(); + } else { + return false; + } + + result = (long) std::floor(current_jitter / sample); + return true; +} + + +bool SpeedTest::share(const ServerInfo& server, std::string& image_url) { + std::stringstream hash; + hash << std::setprecision(0) << std::fixed << mLatency + << "-" << std::setprecision(2) << std::fixed << (mUploadSpeed * 1000) + << "-" << std::setprecision(2) << std::fixed << (mDownloadSpeed * 1000) + << "-" << SPEED_TEST_API_KEY; + std::string hex_digest = MD5Util::hexDigest(hash.str()); + std::stringstream post_data; + post_data << "download=" << std::setprecision(2) << std::fixed << (mDownloadSpeed * 1000) << "&"; + post_data << "ping=" << std::setprecision(0) << std::fixed << mLatency << "&"; + post_data << "upload=" << std::setprecision(2) << std::fixed << (mUploadSpeed * 1000) << "&"; + post_data << "pingselect=1&"; + post_data << "recommendedserverid=" << server.id << "&"; + post_data << "accuracy=1&"; + post_data << "serverid=" << server.id << "&"; + post_data << "hash="; + post_data << hex_digest; + + std::stringstream result; + CURL *c = curl_easy_init(); + curl_easy_setopt(c, CURLOPT_REFERER, SPEED_TEST_API_REFERER); + auto cres = SpeedTest::httpPost(SPEED_TEST_API_URL, post_data.str(), result, c); + long http_code = 0; + image_url.clear(); + if (cres == CURLE_OK){ + curl_easy_getinfo(c, CURLINFO_HTTP_CODE, &http_code); + if (http_code == 200 && !result.str().empty()){ + auto data = SpeedTest::parseQueryString(result.str()); + if (data.count("resultid") == 1){ + image_url = "http://www.speedtest.net/result/" + data["resultid"] + ".png"; + } + + } + } + + curl_easy_cleanup(c); + return !image_url.empty(); +} + +// private + +double SpeedTest::execute(const ServerInfo &server, const TestConfig &config, const opFn &pfunc, std::function cb) { + std::vector workers; + double overall_speed = 0; + std::mutex mtx; + for (int i = 0; i < config.concurrency; i++) { + workers.push_back(std::thread([&server, &overall_speed, &pfunc, &config, &mtx, cb](){ + long start_size = config.start_size; + long max_size = config.max_size; + long incr_size = config.incr_size; + long curr_size = start_size; + + auto spClient = SpeedTestClient(server); + + if (spClient.connect()) { + long total_size = 0; + long total_time = 0; + auto start = std::chrono::steady_clock::now(); + std::vector partial_results; + while (curr_size < max_size){ + long op_time = 0; + if ((spClient.*pfunc)(curr_size, config.buff_size, op_time)) { + total_size += curr_size; + total_time += op_time; + double metric = (curr_size * 8) / (static_cast(op_time) / 1000); + partial_results.push_back(metric); + if (cb) + cb(true); + } else { + if (cb) + cb(false); + } + curr_size += incr_size; + auto stop = std::chrono::steady_clock::now(); + if (std::chrono::duration_cast(stop - start).count() > config.min_test_time_ms) + break; + } + + spClient.close(); + std::sort(partial_results.begin(), partial_results.end()); + + size_t skip = 0; + size_t drop = 0; + if (partial_results.size() >= 10){ + skip = partial_results.size() / 4; + drop = 2; + } + + size_t iter = 0; + double real_sum = 0; + for (auto it = partial_results.begin() + skip; it != partial_results.end() - drop; ++it ){ + iter++; + real_sum += (*it); + } + mtx.lock(); + overall_speed += (real_sum / iter); + mtx.unlock(); + } else { + if (cb) + cb(false); + } + })); + + } + for (auto &t : workers){ + t.join(); + } + + workers.clear(); + + return overall_speed / 1000 / 1000; +} + +template +T SpeedTest::deg2rad(T n) { + return (n * M_PI / 180); +} + +template +T SpeedTest::harversine(std::pair n1, std::pair n2) { + T lat1r = deg2rad(n1.first); + T lon1r = deg2rad(n1.second); + T lat2r = deg2rad(n2.first); + T lon2r = deg2rad(n2.second); + T u = std::sin((lat2r - lat1r) / 2); + T v = std::sin((lon2r - lon1r) / 2); + return 2.0 * EARTH_RADIUS_KM * std::asin(std::sqrt(u * u + std::cos(lat1r) * std::cos(lat2r) * v * v)); +} + +CURLcode SpeedTest::httpGet(const std::string &url, std::stringstream &ss, CURL *handler, long timeout) { + + CURLcode code(CURLE_FAILED_INIT); + CURL* curl = SpeedTest::curl_setup(handler); + + + if (curl){ + if (CURLE_OK == (code = curl_easy_setopt(curl, CURLOPT_FILE, &ss)) + && CURLE_OK == (code = curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeout)) + && CURLE_OK == (code = curl_easy_setopt(curl, CURLOPT_URL, url.c_str()))) { + code = curl_easy_perform(curl); + } + if (handler == nullptr) + curl_easy_cleanup(curl); + } + return code; +} + +CURLcode SpeedTest::httpPost(const std::string &url, const std::string &postdata, std::stringstream &os, void *handler, long timeout) { + + CURLcode code(CURLE_FAILED_INIT); + CURL* curl = SpeedTest::curl_setup(handler); + + if (curl){ + if (CURLE_OK == (code = curl_easy_setopt(curl, CURLOPT_FILE, &os)) + && CURLE_OK == (code = curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeout)) + && CURLE_OK == (code = curl_easy_setopt(curl, CURLOPT_URL, url.c_str())) + && CURLE_OK == (code = curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postdata.c_str()))) { + code = curl_easy_perform(curl); + } + if (handler == nullptr) + curl_easy_cleanup(curl); + } + return code; +} + +CURL *SpeedTest::curl_setup(CURL *handler) { + CURL* curl = handler == nullptr ? curl_easy_init() : handler; + if (curl){ + if (curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &writeFunc) == CURLE_OK + && curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L) == CURLE_OK + && curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L) == CURLE_OK + && curl_easy_setopt(curl, CURLOPT_USERAGENT, SPEED_TEST_USER_AGENT) == CURLE_OK){ + return curl; + } else { + curl_easy_cleanup(handler); + return nullptr; + } + } + return nullptr; + + +} + +size_t SpeedTest::writeFunc(void *buf, size_t size, size_t nmemb, void *userp) { + + if (userp){ + std::stringstream &os = *static_cast(userp); + std::streamsize len = size * nmemb; + if(os.write(static_cast(buf), len)) + return static_cast(len); + } + return 0; +} + +std::map SpeedTest::parseQueryString(const std::string &query) { + auto map = std::map(); + auto pairs = splitString(query, '&'); + for (auto &p : pairs){ + auto kv = splitString(p, '='); + if (kv.size() == 2){ + map[kv[0]] = kv[1]; + } + } + return map; +} + +std::vector SpeedTest::splitString(const std::string &instr, const char separator) { + if (instr.empty()) + return std::vector(); + + std::vector tokens; + std::size_t start = 0, end = 0; + while ((end = instr.find(separator, start)) != std::string::npos) { + std::string temp = instr.substr(start, end - start); + if (!temp.empty()) + tokens.push_back(temp); + start = end + 1; + } + std::string temp = instr.substr(start); + if (!temp.empty()) + tokens.push_back(temp); + return tokens; + +} + +ServerInfo SpeedTest::processServerXMLNode(xmlTextReaderPtr reader) { + + auto name = xmlTextReaderConstName(reader); + auto nodeName = std::string((char*)name); + + if (!name || nodeName != "server"){ + return ServerInfo(); + } + + if (xmlTextReaderAttributeCount(reader) > 0){ + auto info = ServerInfo(); + auto server_url = xmlTextReaderGetAttribute(reader, BAD_CAST "url"); + auto server_lat = xmlTextReaderGetAttribute(reader, BAD_CAST "lat"); + auto server_lon = xmlTextReaderGetAttribute(reader, BAD_CAST "lon"); + auto server_name = xmlTextReaderGetAttribute(reader, BAD_CAST "name"); + auto server_county = xmlTextReaderGetAttribute(reader, BAD_CAST "country"); + auto server_cc = xmlTextReaderGetAttribute(reader, BAD_CAST "cc"); + auto server_host = xmlTextReaderGetAttribute(reader, BAD_CAST "host"); + auto server_id = xmlTextReaderGetAttribute(reader, BAD_CAST "id"); + auto server_sponsor = xmlTextReaderGetAttribute(reader, BAD_CAST "sponsor"); + + if (server_name) + info.name.append((char*)server_name); + + if (server_url) + info.url.append((char*)server_url); + + if (server_county) + info.country.append((char*)server_county); + + if (server_cc) + info.country_code.append((char*)server_cc); + + if (server_host) + info.host.append((char*)server_host); + + if (server_sponsor) + info.sponsor.append((char*)server_sponsor); + + if (server_id) + info.id = std::atoi((char*)server_id); + + if (server_lat) + info.lat = std::stof((char*)server_lat); + + if (server_lon) + info.lon = std::stof((char*)server_lon); + + xmlFree(server_url); + xmlFree(server_lat); + xmlFree(server_lon); + xmlFree(server_name); + xmlFree(server_county); + xmlFree(server_cc); + xmlFree(server_host); + xmlFree(server_id); + xmlFree(server_sponsor); + return info; + } + + return ServerInfo(); +} + +bool SpeedTest::fetchServers(const std::string& url, std::vector& target, int &http_code) { + std::stringstream oss; + target.clear(); + + auto isHttpSchema = url.find_first_of("http") == 0; + + CURL* curl = curl_easy_init(); + auto cres = httpGet(url, oss, curl, 20); + + if (cres != CURLE_OK) + return false; + + if (isHttpSchema) { + int req_status; + curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &req_status); + http_code = req_status; + + if (http_code != 200){ + curl_easy_cleanup(curl); + return false; + } + } else { + http_code = 200; + } + + size_t len = oss.str().length(); + auto *xmlbuff = (char*)calloc(len + 1, sizeof(char)); + if (!xmlbuff){ + std::cerr << "Unable to calloc" << std::endl; + curl_easy_cleanup(curl); + return false; + } + memcpy(xmlbuff, oss.str().c_str(), len); + oss.str(""); + + xmlTextReaderPtr reader = xmlReaderForMemory(xmlbuff, static_cast(len), nullptr, nullptr, 0); + + if (reader != nullptr) { + IPInfo ipInfo; + if (!SpeedTest::ipInfo(ipInfo)){ + curl_easy_cleanup(curl); + free(xmlbuff); + xmlFreeTextReader(reader); + std::cerr << "OOPS!" < bool { + return a.distance < b.distance; + }); + return true; +} + +const ServerInfo SpeedTest::findBestServerWithin(const std::vector &serverList, long &latency, + const int sample_size, std::function cb) { + int i = sample_size; + ServerInfo bestServer = serverList[0]; + + latency = INT_MAX; + + for (auto &server : serverList){ + auto client = SpeedTestClient(server); + + if (!client.connect()){ + if (cb) + cb(false); + continue; + } + + if (client.version() < mMinSupportedServer){ + client.close(); + continue; + } + + long current_latency = LONG_MAX; + if (testLatency(client, 20, current_latency)){ + if (current_latency < latency){ + latency = current_latency; + bestServer = server; + } + } + client.close(); + if (cb) + cb(true); + + if (i-- < 0){ + break; + } + + } + return bestServer; +} + +bool SpeedTest::testLatency(SpeedTestClient &client, const int sample_size, long &latency) { + if (!client.connect()){ + return false; + } + latency = INT_MAX; + long temp_latency = 0; + for (int i = 0; i < sample_size; i++){ + if (client.ping(temp_latency)){ + if (temp_latency < latency){ + latency = temp_latency; + } + } else { + return false; + } + } + return true; +} + diff --git a/app/Bin/SpeedTest-master/SpeedTest.h b/app/Bin/SpeedTest-master/SpeedTest.h new file mode 100644 index 00000000..9b8c8ceb --- /dev/null +++ b/app/Bin/SpeedTest-master/SpeedTest.h @@ -0,0 +1,69 @@ +// +// Created by Francesco Laurita on 5/29/16. +// + +#ifndef SPEEDTEST_SPEEDTEST_H +#define SPEEDTEST_SPEEDTEST_H + +#include "SpeedTestConfig.h" +#include "SpeedTestClient.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "DataTypes.h" + +class SpeedTestClient; +typedef bool (SpeedTestClient::*opFn)(const long size, const long chunk_size, long &millisec); +typedef void (*progressFn)(bool success); + + +class SpeedTest { +public: + explicit SpeedTest(float minServerVersion); + ~SpeedTest(); + CURLcode httpGet(const std::string& url, std::stringstream& os, CURL *handler = nullptr, long timeout = 30); + CURLcode httpPost(const std::string& url, const std::string& postdata, std::stringstream& os, CURL *handler = nullptr, long timeout = 30); + static std::map parseQueryString(const std::string& query); + static std::vector splitString(const std::string& instr, char separator); + bool ipInfo(IPInfo& info); + const std::vector& serverList(); + const ServerInfo bestServer(int sample_size = 5, std::function cb = nullptr); + bool setServer(ServerInfo& server); + const long &latency(); + bool downloadSpeed(const ServerInfo& server, const TestConfig& config, double& result, std::function cb = nullptr); + bool uploadSpeed(const ServerInfo& server, const TestConfig& config, double& result, std::function cb = nullptr); + bool jitter(const ServerInfo& server, long& result, int sample = 40); + bool share(const ServerInfo& server, std::string& image_url); +private: + bool fetchServers(const std::string& url, std::vector& target, int &http_code); + bool testLatency(SpeedTestClient& client, int sample_size, long& latency); + const ServerInfo findBestServerWithin(const std::vector& serverList, long& latency, int sample_size = 5, std::function cb = nullptr); + static CURL* curl_setup(CURL* curl = nullptr); + static size_t writeFunc(void* buf, size_t size, size_t nmemb, void* userp); + static ServerInfo processServerXMLNode(xmlTextReaderPtr reader); + double execute(const ServerInfo &server, const TestConfig &config, const opFn &fnc, std::function cb = nullptr); + template + static T deg2rad(T n); + template + static T harversine(std::pair n1, std::pair n2); + + IPInfo mIpInfo; + std::vector mServerList; + long mLatency; + double mUploadSpeed; + double mDownloadSpeed; + float mMinSupportedServer; + +}; + + +#endif //SPEEDTEST_SPEEDTEST_H diff --git a/app/Bin/SpeedTest-master/SpeedTestClient.cpp b/app/Bin/SpeedTest-master/SpeedTestClient.cpp new file mode 100644 index 00000000..39ffc14f --- /dev/null +++ b/app/Bin/SpeedTest-master/SpeedTestClient.cpp @@ -0,0 +1,270 @@ +// +// Created by Francesco Laurita on 5/30/16. +// + +#include +#include +#include "SpeedTestClient.h" + +SpeedTestClient::SpeedTestClient(const ServerInfo &serverInfo): mServerInfo(serverInfo), + mSocketFd(0), + mServerVersion(-1.0){} +SpeedTestClient::~SpeedTestClient() { + close(); +} + +// It returns current timestamp in ms + + +// It connects and initiates client/server handshaking +bool SpeedTestClient::connect() { + + if (mSocketFd){ + return true; + } + + auto ret = mkSocket(); + if (!ret) + return ret; + + std::string reply; + + if (!SpeedTestClient::writeLine(mSocketFd, "HI")){ + close(); + return false; + } + + + if (SpeedTestClient::readLine(mSocketFd, reply)){ + std::stringstream reply_stream(reply); + std::string hello; + reply_stream >> hello >> mServerVersion; + if (reply_stream.fail()) { + close(); + return false; + } + + if (!reply.empty() && "HELLO" == hello){ + return true; + } + + } + close(); + return false; +} + +// It closes a connection +void SpeedTestClient::close() { + if (mSocketFd){ + SpeedTestClient::writeLine(mSocketFd, "QUIT"); + ::close(mSocketFd); + } + +} + +// It executes PING command +bool SpeedTestClient::ping(long &millisec) { + if (!mSocketFd) + return false; + + std::stringstream cmd; + std::string reply; + + auto start = std::chrono::steady_clock::now(); + cmd << "PING " << start.time_since_epoch().count(); + + if (!SpeedTestClient::writeLine(mSocketFd, cmd.str())){ + return false; + } + + if (SpeedTestClient::readLine(mSocketFd, reply)){ + if (reply.substr(0, 5) == "PONG "){ + auto stop = std::chrono::steady_clock::now(); + millisec = std::chrono::duration_cast(stop - start).count(); + return true; + } + } + + close(); + return false; +} + +// It executes DOWNLOAD command +bool SpeedTestClient::download(const long size, const long chunk_size, long &millisec) { + std::stringstream cmd; + cmd << "DOWNLOAD " << size; + + if (!SpeedTestClient::writeLine(mSocketFd, cmd.str())){ + return false; + } + + + char *buff = new char[chunk_size]; + for (size_t i = 0; i < static_cast(chunk_size); i++) + buff[i] = '\0'; + + long missing = 0; + auto start = std::chrono::steady_clock::now(); + while (missing != size){ + auto current = read(mSocketFd, buff, static_cast(chunk_size)); + + if (current <= 0){ + delete[] buff; + return false; + } + missing += current; + } + + auto stop = std::chrono::steady_clock::now(); + millisec = std::chrono::duration_cast(stop - start).count(); + delete[] buff; + return true; +} + +// It executes UPLOAD command +bool SpeedTestClient::upload(const long size, const long chunk_size, long &millisec) { + std::stringstream cmd; + cmd << "UPLOAD " << size << "\n"; + auto cmd_len = cmd.str().length(); + + char *buff = new char[chunk_size]; + for(size_t i = 0; i < static_cast(chunk_size); i++) + buff[i] = static_cast(rand() % 256); + + long missing = size; + auto start = std::chrono::steady_clock::now(); + + if (!SpeedTestClient::writeLine(mSocketFd, cmd.str())){ + delete[] buff; + return false; + } + + ssize_t w = cmd_len; + missing -= w; + + while(missing > 0){ + if (missing - chunk_size > 0){ + w = write(mSocketFd, buff, static_cast(chunk_size)); + if (w != chunk_size){ + delete[] buff; + return false; + } + missing -= w; + } else { + buff[missing - 1] = '\n'; + w = write(mSocketFd, buff, static_cast(missing)); + if (w != missing){ + delete[] buff; + return false; + } + missing -= w; + } + + } + std::string reply; + if (!SpeedTestClient::readLine(mSocketFd, reply)){ + delete[] buff; + return false; + } + auto stop = std::chrono::steady_clock::now(); + + std::stringstream ss; + ss << "OK " << size << " "; + millisec = std::chrono::duration_cast(stop - start).count(); + delete[] buff; + return reply.substr(0, ss.str().length()) == ss.str(); + +} + +bool SpeedTestClient::mkSocket() { + mSocketFd = socket(AF_INET, SOCK_STREAM, 0); + + if (!mSocketFd){ + return false; + } + + auto hostp = hostport(); +#if __APPLE__ + struct hostent *server = gethostbyname(hostp.first.c_str()); + if (server == nullptr) { + return false; + } +#else + struct hostent server; + char tmpbuf[BUFSIZ]; + struct hostent *result; + int errnop; + if (gethostbyname_r(hostp.first.c_str(), &server, (char *)&tmpbuf, BUFSIZ, &result, &errnop)) { + return false; + } +#endif + + int portno = hostp.second; + struct sockaddr_in serv_addr{}; + memset(&serv_addr, 0, sizeof(serv_addr)); + serv_addr.sin_family = AF_INET; + +#if __APPLE__ + memcpy(&serv_addr.sin_addr.s_addr, server->h_addr, (size_t)server->h_length); +#else + memcpy(&serv_addr.sin_addr.s_addr, server.h_addr, (size_t)server.h_length); +#endif + + serv_addr.sin_port = htons(static_cast(portno)); + + /* Dial */ + return ::connect(mSocketFd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) >= 0; +} + + +float SpeedTestClient::version() { + return mServerVersion; +} + +const std::pair SpeedTestClient::hostport() { + std::string targetHost = mServerInfo.host; + std::size_t found = targetHost.find(':'); + std::string host = targetHost.substr(0, found); + std::string port = targetHost.substr(found + 1, targetHost.length() - found); + return std::pair(host, std::atoi(port.c_str())); +} + +bool SpeedTestClient::readLine(int &fd, std::string &buffer) { + buffer.clear(); + if (!fd) + return false; + char c; + while(true){ + auto n = read(fd, &c, 1); + if (n == -1) + return false; + if (c == '\n' || c == '\r') + break; + + buffer += c; + + } + return true; +} + +bool SpeedTestClient::writeLine(int &fd, const std::string &buffer) { + if (!fd) + return false; + + auto len = static_cast(buffer.length()); + if (len == 0) + return false; + + std::string buff_copy = buffer; + + if (buff_copy.find_first_of('\n') == std::string::npos){ + buff_copy += '\n'; + len += 1; + } + auto n = write(fd, buff_copy.c_str(), len); + return n == len; +} + + + + diff --git a/app/Bin/SpeedTest-master/SpeedTestClient.h b/app/Bin/SpeedTest-master/SpeedTestClient.h new file mode 100644 index 00000000..141ecf47 --- /dev/null +++ b/app/Bin/SpeedTest-master/SpeedTestClient.h @@ -0,0 +1,43 @@ +// +// Created by Francesco Laurita on 5/30/16. +// + +#ifndef SPEEDTEST_SPEEDTESTCLIENT_H +#define SPEEDTEST_SPEEDTESTCLIENT_H + + +#include +#include +#include +#include +#include +#include +#include +#include +#include "SpeedTest.h" +#include "DataTypes.h" +class SpeedTestClient { +public: + explicit SpeedTestClient(const ServerInfo& serverInfo); + ~SpeedTestClient(); + + bool connect(); + bool ping(long &millisec); + bool upload(long size, long chunk_size, long &millisec); + bool download(long size, long chunk_size, long &millisec); + float version(); + const std::pair hostport(); + void close(); + + +private: + bool mkSocket(); + ServerInfo mServerInfo; + int mSocketFd; + float mServerVersion; + static bool readLine(int& fd, std::string& buffer); + static bool writeLine(int& fd, const std::string& buffer); +}; + +typedef bool (SpeedTestClient::*opFn)(const long size, const long chunk_size, long &millisec); +#endif //SPEEDTEST_SPEEDTESTCLIENT_H diff --git a/app/Bin/SpeedTest-master/SpeedTestConfig.h b/app/Bin/SpeedTest-master/SpeedTestConfig.h new file mode 100644 index 00000000..f520d47b --- /dev/null +++ b/app/Bin/SpeedTest-master/SpeedTestConfig.h @@ -0,0 +1,17 @@ +// The configured options and settings for SpeedTest +#define SpeedTest_VERSION_MAJOR 1 +#define SpeedTest_VERSION_MINOR 14 +#define SpeedTest_SYSTEM_PROCESSOR "x86_64" +#define SpeedTest_SYSTEM "Linux-5.4.0-7634-generic" +#define SpeedTest_AUTHOR "Francesco Laurita " +#define SpeedTest_HOME_PAGE "https://github.com/taganaka/SpeedTest" + +#define SPEED_TEST_USER_AGENT "Mozilla/5.0 Linux-5.4.0-7634-generic; U; x86_64; en-us (KHTML, like Gecko) SpeedTest++/1.14" +#define SPEED_TEST_SERVER_LIST_URL "https://www.speedtest.net/speedtest-servers.php" + +#define SPEED_TEST_IP_INFO_API_URL "http://speedtest.ookla.com/api/ipaddress.php" +#define SPEED_TEST_API_URL "http://www.speedtest.net/api/api.php" +#define SPEED_TEST_API_REFERER "http://c.speedtest.net/flash/speedtest.swf" +#define SPEED_TEST_API_KEY "297aae72" +#define SPEED_TEST_MIN_SERVER_VERSION 2.3 +#define SPEED_TEST_LATENCY_SAMPLE_SIZE 80 diff --git a/app/Bin/SpeedTest-master/SpeedTestConfig.h.in b/app/Bin/SpeedTest-master/SpeedTestConfig.h.in new file mode 100644 index 00000000..f8a6ff51 --- /dev/null +++ b/app/Bin/SpeedTest-master/SpeedTestConfig.h.in @@ -0,0 +1,17 @@ +// The configured options and settings for SpeedTest +#define SpeedTest_VERSION_MAJOR @SpeedTest_VERSION_MAJOR@ +#define SpeedTest_VERSION_MINOR @SpeedTest_VERSION_MINOR@ +#define SpeedTest_SYSTEM_PROCESSOR "@SpeedTest_SYSTEM_PROCESSOR@" +#define SpeedTest_SYSTEM "@SpeedTest_SYSTEM@" +#define SpeedTest_AUTHOR "@SpeedTest_AUTHOR@" +#define SpeedTest_HOME_PAGE "@SpeedTest_HOME_PAGE@" + +#define SPEED_TEST_USER_AGENT "@SpeedTest_USER_AGENT@" +#define SPEED_TEST_SERVER_LIST_URL "@SpeedTest_SERVER_LIST_URL@" + +#define SPEED_TEST_IP_INFO_API_URL "@SpeedTest_IP_INFO_API_URL@" +#define SPEED_TEST_API_URL "@SpeedTest_API_URL@" +#define SPEED_TEST_API_REFERER "@SpeedTest_API_REFERER@" +#define SPEED_TEST_API_KEY "@SpeedTest_API_KEY@" +#define SPEED_TEST_MIN_SERVER_VERSION @SpeedTest_MIN_SERVER_VERSION@ +#define SPEED_TEST_LATENCY_SAMPLE_SIZE @SpeedTest_LATENCY_SAMPLE_SIZE@ diff --git a/app/Bin/SpeedTest-master/TestConfigTemplate.h b/app/Bin/SpeedTest-master/TestConfigTemplate.h new file mode 100644 index 00000000..3d0acce7 --- /dev/null +++ b/app/Bin/SpeedTest-master/TestConfigTemplate.h @@ -0,0 +1,120 @@ +// +// Created by Francesco Laurita on 6/2/16. +// + +#ifndef SPEEDTEST_TESTCONFIGTEMPLATE_H +#define SPEEDTEST_TESTCONFIGTEMPLATE_H + +#include "SpeedTest.h" + +const TestConfig preflightConfigDownload = { + 600000, // start_size + 2000000, // max_size + 125000, // inc_size + 4096, // buff_size + 10000, // min_test_time_ms + 2, // Concurrency + "Preflight check" +}; + +const TestConfig slowConfigDownload = { + 100000, // start_size + 500000, // max_size + 10000, // inc_size + 1024, // buff_size + 20000, // min_test_time_ms + 2, // Concurrency + "Very-slow-line line type detected: profile selected slowband" +}; + +const TestConfig slowConfigUpload = { + 50000, // start_size + 80000, // max_size + 1000, // inc_size + 1024, // buff_size + 20000, // min_test_time_ms + 2, // Concurrency + "Very-slow-line line type detected: profile selected slowband" +}; + + +const TestConfig narrowConfigDownload = { + 1000000, // start_size + 100000000, // max_size + 750000, // inc_size + 4096, // buff_size + 20000, // min_test_time_ms + 2, // Concurrency + "Buffering-lover line type detected: profile selected narrowband" +}; + +const TestConfig narrowConfigUpload = { + 1000000, // start_size + 100000000, // max_size + 550000, // inc_size + 4096, // buff_size + 20000, // min_test_time_ms + 2, // Concurrency + "Buffering-lover line type detected: profile selected narrowband" +}; + +const TestConfig broadbandConfigDownload = { + 1000000, // start_size + 100000000, // max_size + 750000, // inc_size + 65536, // buff_size + 20000, // min_test_time_ms + 32, // concurrency + "Broadband line type detected: profile selected broadband" + +}; + +const TestConfig broadbandConfigUpload = { + 1000000, // start_size + 70000000, // max_size + 250000, // inc_size + 65536, // buff_size + 20000, // min_test_time_ms + 8, // concurrency + "Broadband line type detected: profile selected broadband" +}; + +const TestConfig fiberConfigDownload = { + 5000000, // start_size + 120000000, // max_size + 950000, // inc_size + 65536, // buff_size + 20000, // min_test_time_ms + 32, // concurrency + "Fiber / Lan line type detected: profile selected fiber" +}; + +const TestConfig fiberConfigUpload = { + 1000000, // start_size + 70000000, // max_size + 250000, // inc_size + 65536, // buff_size + 20000, // min_test_time_ms + 12, // concurrency + "Fiber / Lan line type detected: profile selected fiber" +}; + +void testConfigSelector(const double preSpeed, TestConfig& uploadConfig, TestConfig& downloadConfig){ + uploadConfig = slowConfigUpload; + downloadConfig = slowConfigDownload; + + + if (preSpeed > 4 && preSpeed <= 30){ + downloadConfig = narrowConfigDownload; + uploadConfig = narrowConfigUpload; + } else if (preSpeed > 30 && preSpeed < 150) { + downloadConfig = broadbandConfigDownload; + uploadConfig = broadbandConfigUpload; + } else if (preSpeed >= 150) { + downloadConfig = fiberConfigDownload; + uploadConfig = fiberConfigUpload; + } + +} + +#endif //SPEEDTEST_TESTCONFIGTEMPLATE_H diff --git a/app/Bin/SpeedTest-master/cmake_install.cmake b/app/Bin/SpeedTest-master/cmake_install.cmake new file mode 100644 index 00000000..02e38898 --- /dev/null +++ b/app/Bin/SpeedTest-master/cmake_install.cmake @@ -0,0 +1,65 @@ +# Install script for directory: /home/henry/Downloads/SpeedTest-master + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "Release") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + +# Is this installation the result of a crosscompile? +if(NOT DEFINED CMAKE_CROSSCOMPILING) + set(CMAKE_CROSSCOMPILING "FALSE") +endif() + +if("x${CMAKE_INSTALL_COMPONENT}x" STREQUAL "xUnspecifiedx" OR NOT CMAKE_INSTALL_COMPONENT) + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/SpeedTest" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/SpeedTest") + file(RPATH_CHECK + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/SpeedTest" + RPATH "") + endif() + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE EXECUTABLE FILES "/home/henry/Downloads/SpeedTest-master/SpeedTest") + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/SpeedTest" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/SpeedTest") + if(CMAKE_INSTALL_DO_STRIP) + execute_process(COMMAND "/usr/bin/strip" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/SpeedTest") + endif() + endif() +endif() + +if(CMAKE_INSTALL_COMPONENT) + set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt") +else() + set(CMAKE_INSTALL_MANIFEST "install_manifest.txt") +endif() + +string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT + "${CMAKE_INSTALL_MANIFEST_FILES}") +file(WRITE "/home/henry/Downloads/SpeedTest-master/${CMAKE_INSTALL_MANIFEST}" + "${CMAKE_INSTALL_MANIFEST_CONTENT}") diff --git a/app/Bin/SpeedTest-master/install_manifest.txt b/app/Bin/SpeedTest-master/install_manifest.txt new file mode 100644 index 00000000..113be36e --- /dev/null +++ b/app/Bin/SpeedTest-master/install_manifest.txt @@ -0,0 +1 @@ +/usr/local/bin/SpeedTest \ No newline at end of file diff --git a/app/Bin/SpeedTest-master/main.cpp b/app/Bin/SpeedTest-master/main.cpp new file mode 100644 index 00000000..e284c044 --- /dev/null +++ b/app/Bin/SpeedTest-master/main.cpp @@ -0,0 +1,303 @@ +#include +#include +#include +#include "SpeedTest.h" +#include "TestConfigTemplate.h" +#include "CmdOptions.h" +#include + +void banner(){ + std::cout << "SpeedTest++ version " << SpeedTest_VERSION_MAJOR << "." << SpeedTest_VERSION_MINOR << std::endl; + std::cout << "Speedtest.net command line interface" << std::endl; + std::cout << "Info: " << SpeedTest_HOME_PAGE << std::endl; + std::cout << "Author: " << SpeedTest_AUTHOR << std::endl; +} + +void usage(const char* name){ + std::cerr << "Usage: " << name << " "; + std::cerr << " [--latency] [--quality] [--download] [--upload] [--share] [--help]\n" + " [--test-server host:port] [--output verbose|text|json]\n"; + std::cerr << "optional arguments:" << std::endl; + std::cerr << " --help Show this message and exit\n"; + std::cerr << " --latency Perform latency test only\n"; + std::cerr << " --download Perform download test only. It includes latency test\n"; + std::cerr << " --upload Perform upload test only. It includes latency test\n"; + std::cerr << " --share Generate and provide a URL to the speedtest.net share results image\n"; + std::cerr << " --test-server host:port Run speed test against a specific server\n"; + std::cerr << " --output verbose|text|json Set output type. Default: verbose\n"; +} + +int main(const int argc, const char **argv) { + + ProgramOptions programOptions; + + if (!ParseOptions(argc, argv, programOptions)){ + usage(argv[0]); + return EXIT_FAILURE; + } + + if (programOptions.output_type == OutputType::verbose){ + banner(); + std::cout << std::endl; + } + + + if (programOptions.help) { + usage(argv[0]); + return EXIT_SUCCESS; + } + + signal(SIGPIPE, SIG_IGN); + + + auto sp = SpeedTest(SPEED_TEST_MIN_SERVER_VERSION); + IPInfo info; + ServerInfo serverInfo; + ServerInfo serverQualityInfo; + + if (programOptions.output_type == OutputType::json) + std::cout << "{"; + + if (!sp.ipInfo(info)){ + std::cerr << "Unable to retrieve your IP info. Try again later" << std::endl; + if (programOptions.output_type == OutputType::json) + std::cout << "\"error\":\"unable to retrieve your ip info\"}" << std::endl; + return EXIT_FAILURE; + } + + if (programOptions.output_type == OutputType::verbose){ + std::cout << "IP: " << info.ip_address + << " ( " << info.isp << " ) " + << "Location: [" << info.lat << ", " << info.lon << "]" << std::endl; + } else if (programOptions.output_type == OutputType::text) { + std::cout << "IP=" << info.ip_address << std::endl; + std::cout << "IP_LAT=" << info.lat << std::endl; + std::cout << "IP_LON=" << info.lon << std::endl; + std::cout << "PROVIDER=" << info.isp << std::endl; + } else if (programOptions.output_type == OutputType::json) { + std::cout << "\"client\":{"; + std::cout << "\"ip\":\"" << info.ip_address << "\","; + std::cout << "\"lat\":\"" << info.lat << "\","; + std::cout << "\"lon\":\"" << info.lon << "\","; + std::cout << "\"isp\":\"" << info.isp << "\""; + std::cout << "},"; + } + + auto serverList = sp.serverList(); + + if (programOptions.selected_server.empty()){ + if (programOptions.output_type == OutputType::verbose) + std::cout << "Finding fastest server... " << std::flush; + + if (serverList.empty()){ + std::cerr << "Unable to download server list. Try again later" << std::endl; + if (programOptions.output_type == OutputType::json) + std::cout << "\"error\":\"unable to download server list\"}" << std::endl; + return EXIT_FAILURE; + } + + if (programOptions.output_type == OutputType::verbose) + std::cout << serverList.size() << " Servers online" << std::endl; + else if (programOptions.output_type == OutputType::json) + std::cout << "\"servers_online\":\"" << serverList.size() << "\","; + + + serverInfo = sp.bestServer(10, [&programOptions](bool success) { + if (programOptions.output_type == OutputType::verbose) + std::cout << (success ? '.' : '*') << std::flush; + }); + + if (programOptions.output_type == OutputType::verbose){ + std::cout << std::endl; + std::cout << "Server: " << serverInfo.name + << " " << serverInfo.host + << " by " << serverInfo.sponsor + << " (" << serverInfo.distance << " km from you): " + << sp.latency() << " ms" << std::endl; + } else if (programOptions.output_type == OutputType::text) { + std::cout << "TEST_SERVER_HOST=" << serverInfo.host << std::endl; + std::cout << "TEST_SERVER_DISTANCE=" << serverInfo.distance << std::endl; + + } + else if (programOptions.output_type == OutputType::json) { + std::cout << "\"server\":{"; + std::cout << "\"name\":\"" << serverInfo.name << "\","; + std::cout << "\"sponsor\":\"" << serverInfo.sponsor << "\","; + std::cout << "\"distance\":\"" << serverInfo.distance << "\","; + std::cout << "\"latency\":\"" << sp.latency() << "\","; + std::cout << "\"host\":\"" << serverInfo.host << "\""; + std::cout << "},"; + } + + } else { + + serverInfo.host.append(programOptions.selected_server); + sp.setServer(serverInfo); + + for (auto &s : serverList) { + if (s.host == serverInfo.host) + serverInfo.id = s.id; + } + + if (programOptions.output_type == OutputType::verbose) + std::cout << "Selected server: " << serverInfo.host << std::endl; + else if (programOptions.output_type == OutputType::text) { + std::cout << "TEST_SERVER_HOST=" << serverInfo.host << std::endl; + } + else if (programOptions.output_type == OutputType::json) { + std::cout << "\"server\":{"; + std::cout << "\"host\":\"" << serverInfo.host << "\""; + std::cout << "},"; + } + } + + if (programOptions.output_type == OutputType::verbose) + std::cout << "Ping: " << sp.latency() << " ms." << std::endl; + else if (programOptions.output_type == OutputType::text) + std::cout << "LATENCY=" << sp.latency() << std::endl; + else if (programOptions.output_type == OutputType::json) { + std::cout << "\"ping\":\""; + std::cout << std::fixed; + std::cout << sp.latency() << "\","; + } + + long jitter = 0; + if (programOptions.output_type == OutputType::verbose) + std::cout << "Jitter: " << std::flush; + if (sp.jitter(serverInfo, jitter)){ + if (programOptions.output_type == OutputType::verbose) + std::cout << jitter << " ms." << std::endl; + else if (programOptions.output_type == OutputType::text) + std::cout << "JITTER=" << jitter << std::endl; + else if (programOptions.output_type == OutputType::json) { + std::cout << "\"jitter\":\""; + std::cout << std::fixed; + std::cout << jitter << "\","; + } + } else { + std::cerr << "Jitter measurement is unavailable at this time." << std::endl; + } + + if (programOptions.latency) { + if (programOptions.output_type == OutputType::json) + std::cout << "\"_\":\"only latency requested\"}" << std::endl; + return EXIT_SUCCESS; + } + + + if (programOptions.output_type == OutputType::verbose) + std::cout << "Determine line type (" << preflightConfigDownload.concurrency << ") " << std::flush; + double preSpeed = 0; + if (!sp.downloadSpeed(serverInfo, preflightConfigDownload, preSpeed, [&programOptions](bool success){ + if (programOptions.output_type == OutputType::verbose) + std::cout << (success ? '.' : '*') << std::flush; + })){ + std::cerr << "Pre-flight check failed." << std::endl; + if (programOptions.output_type == OutputType::json) + std::cout << "\"error\":\"pre-flight check failed\"}" << std::endl; + return EXIT_FAILURE; + } + + if (programOptions.output_type == OutputType::verbose) + std::cout << std::endl; + + TestConfig uploadConfig; + TestConfig downloadConfig; + testConfigSelector(preSpeed, uploadConfig, downloadConfig); + + if (programOptions.output_type == OutputType::verbose) + std::cout << downloadConfig.label << std::endl; + + + if (!programOptions.upload){ + if (programOptions.output_type == OutputType::verbose){ + std::cout << std::endl; + std::cout << "Testing download speed (" << downloadConfig.concurrency << ") " << std::flush; + } + + double downloadSpeed = 0; + if (sp.downloadSpeed(serverInfo, downloadConfig, downloadSpeed, [&programOptions](bool success){ + if (programOptions.output_type == OutputType::verbose) + std::cout << (success ? '.' : '*') << std::flush; + })){ + if (programOptions.output_type == OutputType::verbose){ + std::cout << std::endl; + std::cout << "Download: "; + std::cout << std::fixed; + std::cout << std::setprecision(2); + std::cout << downloadSpeed << " Mbit/s" << std::endl; + } else if (programOptions.output_type == OutputType::text) { + std::cout << "DOWNLOAD_SPEED="; + std::cout << std::fixed; + std::cout << std::setprecision(2); + std::cout << downloadSpeed << std::endl; + } else if (programOptions.output_type == OutputType::json) { + std::cout << "\"download\":\""; + std::cout << std::fixed; + std::cout << (downloadSpeed*1000*1000) << "\","; + } + } else { + std::cerr << "Download test failed." << std::endl; + if (programOptions.output_type == OutputType::json) + std::cout << "\"error\":\"download test failed\"}" << std::endl; + return EXIT_FAILURE; + } + } + + if (programOptions.download) { + if (programOptions.output_type == OutputType::json) + std::cout << "\"_\":\"only download requested\"}" << std::endl; + return EXIT_SUCCESS; + } + + if (programOptions.output_type == OutputType::verbose) + std::cout << "Testing upload speed (" << uploadConfig.concurrency << ") " << std::flush; + + double uploadSpeed = 0; + if (sp.uploadSpeed(serverInfo, uploadConfig, uploadSpeed, [&programOptions](bool success){ + if (programOptions.output_type == OutputType::verbose) + std::cout << (success ? '.' : '*') << std::flush; + })){ + if (programOptions.output_type == OutputType::verbose){ + std::cout << std::endl; + std::cout << "Upload: "; + std::cout << std::fixed; + std::cout << std::setprecision(2); + std::cout << uploadSpeed << " Mbit/s" << std::endl; + } else if (programOptions.output_type == OutputType::text) { + std::cout << "UPLOAD_SPEED="; + std::cout << std::fixed; + std::cout << std::setprecision(2); + std::cout << uploadSpeed << std::endl; + } else if (programOptions.output_type == OutputType::json) { + std::cout << "\"upload\":\""; + std::cout << std::fixed; + std::cout << (uploadSpeed*1000*1000) << "\","; + } + + } else { + std::cerr << "Upload test failed." << std::endl; + if (programOptions.output_type == OutputType::json) + std::cout << "\"error\":\"upload test failed\"}" << std::endl; + return EXIT_FAILURE; + } + + + if (programOptions.share){ + std::string share_it; + if (sp.share(serverInfo, share_it)) { + if (programOptions.output_type == OutputType::verbose) { + std::cout << "Results image: " << share_it << std::endl; + } else if (programOptions.output_type == OutputType::text) { + std::cout << "IMAGE_URL=" << share_it << std::endl; + } else if (programOptions.output_type == OutputType::json) { + std::cout << "\"share\":\"" << share_it << "\","; + } + } + } + + if (programOptions.output_type == OutputType::json) + std::cout << "\"_\":\"all ok\"}" << std::endl; + + return EXIT_SUCCESS; +} diff --git a/app/Bin/SpeedTest-master/usr/local/bin/SpeedTest b/app/Bin/SpeedTest-master/usr/local/bin/SpeedTest new file mode 100755 index 0000000000000000000000000000000000000000..3d42020101d7f6a0b78f1341cf2cb26b8c7d788f GIT binary patch literal 187048 zcmeFa3wTu3)jvFe1fm5eRH(6P9W~Za1QQ^bsOVq_oGBBH1Qairgd{*TBr%y_P|?sN z$muwmdZkudytUYBMMXut1(A!k+MrcYtD;stM^GYOzzgvI{np;+%*l|k*7tk9_xqmb ze{^!rT6^tv*?aA^*WPE(a79sgQoocGpL6y1o$Mo25>=R>E|~jbKmFwM1%3Ix!T5WG zFW?&hY$`rMU7C2`tgAWqbWPVEch<|~Lm&4;7247qa+-CjmY1v_EZq>!U3r1ecU*1FtZ`$HtF0PYTT|EEGO{Iq z+{kfbM>W-t8Z9bNFUp`#O+Ib957u-Mr`4Cf7^-2Gzx4jc;fen`_Oi+M{Q1@6Ka5R1 zV(IYZ4iCyC4KLQ$T`X`R{zmYjn)?y6@;67N^&j9Hl(}YN_o?R`;H&7j<_Tlcvt1?W z9aX-Ol__Tgd`AV=jJ+lGytLv$=Xc%qTVML}JNpe!&D*bfVn*5;vLL_t__W}2DL%X| zQ#beTLOflL&lUKz;Q?y7AeB&(Olh&wq6O0kZ?YEqUkdpWoTEw5O)? zg{zldH)r>pflZGOIAQYL{e1UMd9UlD8&9ab@P?Hm$FJQO{Pu#@qnc75^%J;P#zA{^KL&)>Zz44?k=2ewOpWZ-+1MS?v2N zchaDt@BaSchb}+%;Hec?UNY;|re}vO-+%P1H$L`{?y{cRbM7UdH_RFM#`Ev}zH074 zr#yH6Q-_>-+Q4Ch10U_FU)K6N|B#IBcRu;|fB)gohE;(@{VPx1arvI-$N$RrzZfz>=~=ww$dl|hD}K4Mc<#vcr4OZ?Uw;1$-wr<_IqebL{T1iwE9QeX5pB%!BI_eDSEfWGk?2lkE60-r!1c3qQ1ZrA>O z^SLaE+_JR3>5G!+b7K-dha(vEW$(5mdj2s9{d>S4*@wL)N$B4NZC`R9OTy0n%eDviH z-AUSiYLa$KPvW;oUGgJ|GDVj}~tOhSK6 z68!Ka`rAqL^d<50W0SO7D|G5>JieD?+`W_p|4 z!SyS3^WE`N>Yw2&X-7p|yZox)h(i=Uhl?g$k3c_OZ(#$3d^+D&^!vjPc%AwagqH;yAC} zKVy7A59oambgNvyL;FzAoE?hs63xE@^~k?f?|-yv`dyidfB8j<@IH;t$G9N9uSLmi z(fDrwl7GW%iauZCKiBP<@u+n|_0qo7nGXX}LXTD?UZ)=4(b%l7C{q?AHF1 z^Qs~|S=+Th_e=R#3O^0;i`V`Ks`lymt%8qGH{VFd-WiJiJazMZtnuZ)P>eMj-`SeK zufM{ds_A38zgjgPgh9F9gk0+1wMP+Z_w>y{LP>o2K*i@)P5+3t*V$h@PUElC_>5~6 z;$VzhUi)i48Lf&x^9EiU9ekt0zo*;h72RJw3`Dr9<*(1T_F$z?@LWY-r*6Km<3EcO zBBlJW8&{3_r>W3(!I&Bpf}@Z=xR{83%5 z8?|4pxJJR}=xXy z>+>BRQ1%A)Q;KBkeyq~`6XXATx_x>cQ4MpjZl8CczxZK7-1ws&FNywO=y+1{FU8<^ zJuZHv{ki0NgTJE>tlL35C$4N!)^WCZaD$$?6MOXFJ@3$iE zlE1H`H~)zkFQnh1Rb@bk4@gLItiK1LB9sOjI(ddK*)YQ$c_ra!?d9|a}u0Eb7HC9(ot8R%*t*(F>K49X|Uak-p0My1MF0(W0_(K|`dTO5~2p^%YOdE1OhPS5YfZA@&SW z(;KQN7)m!qswzi}Ao)07**T|8DUBRoR#w^4lAD`5dR9eKO(mSCv8HZLsIoMYn_D@z zqOmN}SWy#c3RM=BR^U(3@s;)S8Y&vAi%ON|DWzlK))eY;$@8i`t9f>E&9#Ew%HPvw zQK6xsx~_^=&(mhB{?E;Werm)iL=jppr@5}?qULJ!YGdfM(z0=7r4e)hOU71J&#q{$ zjbL2XR!6EsrMYEAMJ1Ew&o7d;E5JCNhYpNXvn`=&fikbA9zC#cmlWl3j5d<-=(13K z6F-!s>gJ4!nhGgn zlsb?CN1PX$RyHlCtf+KcVyAr1c0Ina8mi2%E>cbE)oxx~J9tz<+08mi&i`Bn907uQr( z*A>yRA$6?d$2E2HD{5=1$|@S?G|#K9i|p&m-`@+5r@Jhut1K$1oJX^#oeAaR)zPX+ zoLD)C$IhBM1PW27Z}StJU@XJI4<7@$IZ(W@x}mnB68$w#kArDvdWTco41|y*W~eAa zW2Q~>*3I{hW9?pjcznG24+&mlXV+j1%LuNk5U2YA5ioZQxs=VWX>5v=)z6lY;KT$K z3JX;zMB|{<7+x!8)y&V$Wz4EYC@Z7G!INj#>pn$+3YfDh;AFL6!qJ~lonf`9rVkDf zP*FAulYCtnrk%>UsOk;EO$#vj&r?B|L%esF{nyQ28W~%OfDT4gwIw=8{g7asqi2iU zabDvqE1DvjsT;ito#+)Ary{Hlr*2e>PX^yJ?o^Z(o$k&g<0>&%)zyzFJ9BjIXf#zt z6*C{q%46#4FQ$@Zb6Q%;ki|6BV`8m|EGV0w!)8QaPf&=x>2>MvKOEwwXcNa?P+wE$ zX`y;GBAnRW$G|`^Pad92rj(8;t7V^6=sv3-)6g7|K-Vh<=8nNAmmmmHH4$gp$dmkr zo=zs1NAhOZHaE@H3f4A-AUh#j=u4l-^>70)>u(Dr@CzR zJkC3pC_~&4_dPwHLXmGW32|fhX{9w1)RAB}R#ZkpvpFx;Ow}1dd{F&YA;Qf9$5ujn zWsjQ=dhHP>5ZjS(cmkJaf~%_jj}u&Jq_NM$NKF%-A%PW;H)A=zY^ryp_HIRl26*W- zW@chQZh;e`YU}49MRxO9B-Ha%EW(lUsi?fLta9#!WwR@4YJE^WQV+ho)%vhl znu~BSYXN4k>as>3a&JT{mLlEO?u34BLGC}VdLEWzyj9L?kXyq7AH1o`hb0=48S=st z)*y9rP?K~G2!3<9AmOBfc@7cpl4`2dfMr2swiJSHUj2MxX@X9E=T+3y`DSx*B|*?l z#~3F6TW>`^JGP;srZF@H{eb@^r7kN)##|Z6ZHk0S^NAW;Tit}n!{Q1-6^$MZH?N*2 zIZD}F=v$`p@X#-@a)^x1ZK$cPtiHIWsk#g+C^T4eWuz>E;U8&ksI3nD@^tblD*a_y z=$A#j5KQ1FPU4BoydqNHsD+Onq!j+bHusq(Wt+ z&PABqpxbDjKs&@$C`OtJ@yxlTgPqV1Q&3Vg|1>xy*8b?H7A6*TSYl&&?rKp|B`XV8 zk%H2O>guX#)lHFc7t}q4OnM`^oMjJMp#Z+Zr{;kOc@3l z7C!T3KFQ5$kE2@fWYo~HVh@(|DHPaaSW!_eyD6`%tiGWMYuON71M7AqsdOdy*|f6K0o_w zLhtG2DpRY_h_jpPD(R-7N%LpPxXWv9s+d!)($syu5PL4z)lV)2ExsO!7UPET;@JjmOEr{kvx; z&${Hh31wuu)7bxxTQbK*LZc^2@BClZP~U{v{JZCD`lSjcy(Vf*(5I_Sq>B^QBZ zWffHyG$SC+t*-cib3)aBniMc2luqEJFiqty@y0p67TITA38jSEWUUBD02h%FyyJFcc7#0{^h@rcPq2qg5TE5L$9jjAF<&0Zt1 zH(_qhEcCr5t?4U@kDFD2*CdUyofKDObPjj#PIc>^RTIHV0XBYTFyvYg`Eg%jJVxf` zHZ@>}=zr8~@=|3VPadbHHJuKlVdL|T-W`iun42Rn?9h;bEBfk5+vSRxVsj>MpVVowQrV(WbJ{*#E{pgCKkk#!*ao~9K_Fpayp4ZI8@LPAeTKiAAtYLXH@EWI z7)G34Qgm8rX}ByG|K<257Z#R{!AtDP;n1mtWur%p9+l_ABhs4DfbvihhsKT?;|0fg zs*S-31cycZDOW$vm;o7MN97hM8V!yf-3#npn48<(@KOAu7k)|~KO~+?H{M{d)AK}0KeS`3K zuWPM_=REspaGDP0j~USkdzL^(=bq{gNj)4r?#o6=@Siy;+cB)6YPGt4*@=<*MF%R z+7EYr)PL!?CsI0P$?p!Y6v*^)OJ2h%acVku2cLNNiGDn)hm$eB06rOq&%=qfp}vy| z;9`wG;xMCAUh?w=a-upMkYXw4ksYVJ`KLALt{?fPx#j(RFN2ijL3~zh_#7v94)m1= z6mCm2j1y3Ue03UL@f^$d_bmj>D+O)6R?9B|966Z$hxnoaRexwr4N4F2-K1e9KV9Tg z=Jmh15%vu9-G*{rw5P*kkD^cW=$q~vtJ|X!^fkNq&5&Wfdjd*cqre%y$24qS!2_0l z-*XzSkn+L4%^JQ);Qf3bYWSu5F2qT#0lqIa92tHs>_tBvq4+lleShCzz`RtCsWQSx zjn6>)_wya9%bo92gNa-@SE+kIpEGvwK2zbd6Y$-?*7Xwb8BvALPr&zRype!k;hcX= zz<1uR_{>PaXWXIi+e1sd;5IB)$cjSnQ?O^pvG;IGm6 z@&x?vG=8(Tm#upRJ{%jodXnHbdhm-t7bG#RElKd*9{g>fbNE|H@C_b(z(e1f1mBqi zzbpxUg$IAShkus`e+KZ*wc-lZp9mI+KJjan2mi-7+Sld5|J;M$=)s@j!FPM`g&zE7 z5B@9!1b6%GCCp~!Qdj-TV@!%USQ~kwruC&>?T0D3~ zp-NgkczuLd3YK{A`pC85J3V;HcCMu!`~U}u`!WySIeW|Et0(tcxUXg(DLAMWZ1oWJa` zJdQlauZ8jc!VzQlO84M#G}yf|Jb3+80V&J$;BjQzy#gLQjsUw?wg-=+#O{^j!Rw>v zQkL(*;|Q~R1wDA2zIHFegU1nm_bTz=ag^A-W_a*8lI&jP9{dq5*5{k+!5`_tH+b;+ z=(&`(c<@;s`c@DAXb*mg2Y-wQ-|4|;d+G7tV29{h3-euM|V!h=87gJ0#r zkM!WXJor%_{6-J{I1j$tgU|8cH+%589{d&$ezXT~dGK7*I9HDcKh{CwzRQEp^Wc4# z$Nhht2cPc2AMe3uc<}iie5MCq;K2txc=xP2%CkNAlRWe}9{hL@KHq~s*@F*y@IepW z@ZcwS@FgDnsUG|c4}PKtU+%#ddGK>R_(>jog9ks^gKzQR4G+H6gAaM|OFZ~rdhned z{1gvt znI8NW4}OLRZ+Y z!B=?j*&h5X4?f3(uk_&aJ@_gQKIp+$d+>$_KgWYF@!;or@H0I48V|nQgTKIopXbcqLF@1gJX;2S*nr5^l69{e&7zR`nU?!h;C@c;Mm z|F*#Yms;R6|IfZQ+P0+|(X{)I>*q5%x+4Adb{lQaq^}h<_vW2&Y(L+Qy+@yjoBwbh z>1AB+u;1CccW`(VN_Hv;B`(2m|1laGwTo}N97v_Qh_Pa0_0e%SBA zO!Rly6)wyKANIR26MNY2!c6F4zY8;why5~~=%-mu?=nQ+5?7iOXj`(2m`Hthe_v7d=G`rn0_P{V!~W+ILLcVQ;bu-}E5IKzGy zX2J~nU6_e7`rn0_Afx|Xn29m^--VeF!+sa$MhNV8VJ60~--VeF!+sZLA`JUom`-1|%U)b-$On70x3r`mKA{RCU zu5e){wy@uYnb5+17iJ<0`(2m`EbMn-Ca$pGg_*FzeiuGn;7`AH>}TSN{&(Rs1m5Jr zOkiQZ3o~&=|GO{~R@m>tOjKdN3o}85{Vsf#z!$kN6IJxT3!g3U87|C(752L@6IIyn z!c0(MzY8-lh5atfgcSC>FcVSq|5uLv(_=W^HmH>AozzY-L<^*_N0$iN{ z&rE=)C&0xCa8Uw0J^{{4fJY|4M<>9CCBVZH;K2!SS^~T~t9N^TkpO?30KcCAznK8P zoB%(c0Iy4cpGbfoN`UW8fbU9xZ%u%2NPuGra7O~XFad5(fafK^)d}#-1bBJ^T$}(G zCBWko;JgHQWCDD20(@8kJS+hooB*dKz`Ku1=>G)x;{^Eq1o+Ja_~iun`2=`f0{lb* z{7?dXZvuQ*0(@%%d_w{pOMp8P;Drfra{@ds0j^GfXC}bY6X4k{B665xjt;CmC`yAt4A z6W|*X;8+6OkpM4DfSVKGc@AtuCuTKp)#Nv#k*v(sTiN1slNWXmU5VTMI=>dsZtYL#x|Fp|JU7m^y8})`(t~Rc;i#jVe2k-h|E1 z>{2XqP--<&PP9FXzubbV{`OfYFrs6#;x^f*3rbn+Z$DU|URK*_#6gie?@kdbwuzJv zt?L03|1ZE3+7|kJ&FN^l%O;pbV$lj(f>tSqVrPSdtZYT9#p$yNrUTo8g9gq2Eu* z2J9MnZ-Yrbf5)GG1`!@kYuUc5z*hI|9{9$6WSCDL1B~dvy(QQZXwS-2&JcN;719BC zD*V-G%Lnf%g|&HX2u0U4>{A8$90GomZAS^;oGlxPOo*26nhoBm9s zV4#A6-MGoRXBT?uIqNRo)_OQa)?2?J?kV>Dz!vJ1w)7xuutWzxDz~6zm{+CtkWn=4 zMpbeXZ)STI-|QMuMWLS4suV@Frcm`fJT|mv?E)`ev_4?O(iUmj25__PgffQtwsjuw z(X?TT-A}#;J37Y1ET^^dJvRE=U%(cDbvGKveg;pyiXLRq)hxQ3`v{PE8-8*R=HJd6 zjO_9lDbFxrBXEuhB{1PhO&erjd`CLrZR@wZN1tc~A;)AkeE#QxT3Burd;=&GP}qFW zh%OA0AOKXFA_x%91pLL9u37OuvUISg6-C!!h5GR z7C!_9o7N2zn?8`6>JDXB+FDie3~#Wu+heVIPWz3bxK>kqS9{o7b@NKUpLkN1zr7lx z%^C%@?Q3$Wcl(lOU!o)N`p9{)L2&@&!%9;sm;S;q8aB{SernlUE|YXHfhU>%SM zmeykYd=`4^prP!oynMN_w^pXMf>9_s*#i1tpu;An8uCVw+@pmcyCsWcM)a@`4rFiM zBDDjC7<0Zf0*rA82LLm8_bf9#>`DPVRsi8@QjEt+??+>|=YQeAa^ z4K&qR0Tk7dyH;%3)HtU_1K6 z`b;%)kVdkf{Own8^mYSpH*0cF;Vc$D$if*?sG2B)DM$3MwLex(Bp`Ik1ezChVpQ5H zhP6pT0FPgodZ;UFnQyIOnj zYp3wTYlcY2uaKMScs7^z!`}eSjt{Uw(eZNEmg+`6pEco!iH&UEnAl(sBO$Z~Qj2>e zHG~!_P5A6n4vi13Z~g$4;FE=*L6m;16@3*d*aNrN1PUX1DT1nsnQIg*F_kg%eg#WR zWny%jz$b%$}_2HRk(Gy)Oy;x{zHu-1HxBB(c98pd1g1?wSDZQUR~nxlO8 z4qY!`nY!Mmz;IQtpEB>}!89-LF}V%9M{cw-l3D`euUDlVyqOcRMicv{rQ#uNu112+ zsjy*U)(ltyhH&jz+KobiECVR(QEGxz?;_DC?H9s%*ofXtra`L1Wb31B0ovhjFJK?P z3JdJxv;*|$)?(W9Bux_^xpNzz)VeHOz;(y%x@@ksgk@;B9>F}G<#K3#oeP?@rGwZK zgMZ5#x-$bl;W)HB!+W^y;6-7aSRc}~oRh815kHGeLfr9b^0^P#lOKh%xB;f%o4 zL|y#tV`%C&=xPs_3TZy2SBjP;Z1qr-XL>b6@uFT0(CaWw%NT71A;bO<5tuRTz*=$Y zJAWj$u9KS@lFHt++f~UOyy=nQv;s#7+NnWNT%;+!tDWqZwAfoN6tN>!)zjpr#42;r zMyQfwHPaPrJ8h(TPWx(qQTc1$pxAdcgZ(+g&K~7Iyj@yFzaO4()`T-BOrJ1qg8A)q z!~DXCU18EhiRTcKUngsXs!yRd57l|N*OJrVDO}q(ZTQuCwJ7IPf%DZ_7>|=`p?$K~S z!P3_H?s=LH#T3c+Q^ajYiwf_Nak5icVPpTGS; zgR8-!C3*uzUwDpaTQ|* zW3J~Ua3|hT8`104K32zz{*I&5dvUrKXBdoV81x0F;ZJe60Dj$(Jl=qDFx&9gt>K^UaBO8(1I@uo#i!kl_u2m1r?HV?m}?9(HOoI-#ab(KGIhIC zJXW>_KeWF12q6<(I>`kCl+J5y(a04VnSrjb{-%-L8ks}n!y4J6ktIalrjZ$X&^Hiy z6_IGc93VwCtOS53DxY-d(50mN_c02YL36PDJfQbZq^A$gMaxMaT#lxfCc7;I56WZE z!xOU@Tzt)0tI^^xF7I>103$ZOA65X?n-=XJ|0VKitKtJbPs_@Floi6}2kgh%_f>Q; zVVOth{oo}+Uvm2CEl5YaSwva>4z82YT|dLg48@3g0ka_jsbrTEa9P=p}cW$2PYYJ=9<Fj|VHadosbi9cS1H&XAI9?c5K|V4|$sqAE zY661gxbx!J=A(7SA#n}-?W@qMXrDHc_}hb^(9H?tuLRlA1jp{^YX0SFo_|3{9jH3$ z>evuQrIt*pEw-O5X(1-vfni zKw8hC8|>$?*}R(m4Wj$Igy?BFuC?%e8D9_cc@v(UK<;n92#2y1XD1ZV4VR%mE$b+b znh&ila^G$(#hqg@r_JZH_d~9>`Zy)YzeXg@Aol~6q%fc7;MpCE?O*nH{jeXR00Jqs z++UgUEz)A^RW=yx=ko~EMYk|!cj6q8JzH|a>&3mfPbGa78~+Sx|G;|Y25Tqou5Wi_ zVY%;)ymP>JDQRB<&1yIuWxugn^ll}d{SCHDp(IG>5w&qk+_AT=0;#!yqb<`qj`E^d zidql7LygmZkC75KcR0>H_!FEgqbG0Sy16{=$v~|MnO(}iIVRxS&j?TD+XDus_$HX^ zUFS}GnN`&OrN6zZcY^f~neyP@XX_ByF`7FJvAhCh-R($?t$V2__P6mIj^$m$Y&qIu zg;RD~cfhj{fd>BteJGJAAA@#>|LisVSkvD{J(wNK8-)h2W`m9Wcf4>}4d-PGK8Jta z0L^tWWgH9#PZ}3>*N%15RN5{!NtQJ!Fungb^^^ za&9KHXuTK>l3#`jZe$Q?-fDEb7&$f+eX^BWnPJBFX`B(pW?9!mEl$CF;gsIdMgAGh zt0zPkcYzkOKqp!M*%ST_N5(DT?>IzthQE#)29;P|f7%)w--hLdb@kh515BlCgDi!= zkoZY3Em3jQIh|#{V41ka8>nGT0SnYV@?qgRk`(zs*=Io^XB7H78X$W$k6D6rloHgB zq;F!VMe|NchhJj+$jf{?SyNpFGok>rL+oZRjqO>F#1)O9+; zx)Q{|E%V~~qat4s8*D*jd9V1}7r>e0E!HuZyXnJULB%9mw z-`8X9qKcSoDBf^YbV#iIl&UU#HemZv*&dH@F+Dz=cCP&wnCQ{;Hc3_Vv@@wz2t zmXKVlbW5DPK$Ev+7usq4BOqT6?tOJ(WyGYToN!7lpz5M54cZopx-n>c}Jo zOq`i!hN?S`z40mB1{Hq6=OPfs=i&{JrsiTh6>m5l^V=Q}qh1?;3M*N8-yr)0%a*bX z(tGHam?YRBQ&insS>6IXdj!H`faBq^9zMv5k9aEnR8_2E#Z%%Hr#TfRc8=2(FK0z0 zx|C?&FWQb^#R0%mTW@@abU({J(sfS-jeQ38UnMv-V(_izxo2?7c~m&PlLqR?NgW&i zGM_V8BLqUJaWl4&L42#ycO?m)VmCz7mg5<9ZsVfM_ zOCb9tRJVSG%61W$I&o@`;(Q5}&QogC@!7<4yzj0vjZrYz__on<*JgS#xj-M;u+8kM*EKCv^8m0!c5em??ZS^J7O(dQ*+U@HF8mzexC`Ioc47zX zKjEo=g{pru>o>>i|Jtc9o?PqJFJk?Lp8Atj{c~79Pn(e7&?mF(VAq7_R)EC`U;%T6 zsM?2;;uxUp+1SQjjf|EpK1oeld;6jAb!reB{~4c0ft5WQFXfyz*rd3;!ovGWh#8Di z$T}igUjYLBu?q$ERjj2ubk|>{Qt9fHt5|*t@VeEf z0gi|BaWv>tx)9bhH0TUfYZRy)7qe1CGH2Wo%!uOiX>9xe(Css=-log}x7GK?H%P3H zfVMB;UOLiFC1yhklzWln(X_|#jMR1|Zcb{u5m~u36eo;xUltotxe8pZTga_kg^sU) zKvOIrw|3y2fWJ-QD~Lady}9r7TEwyd%Ors8N7fU_LT9NDC>B2>*;lVB7T)<2V*9b| zO_m9Z_4k0q9w@sSc|Du-QpMs8AIKgCneK?c0giXXy=(-jznJx(WPPoIq3ZvR_2-M2 z?bZSRWXmuDwiA8IKb_hJYqz4d{qYxIq5WtDu%Mkm+A&~Zzxxde`E45LH%j%zxisS^ zbB>A4;3j9t6r=$8bkIv|-`^OtnZpmatWHP)Q|El?GKn1$xM%xZB&s z!N$*{tmUFx-UucB9HOd~_|xzV@sn|L#Gk9gj|D1;`29TMJJ_O1{JTI?{0Wfe>`F9` zh__rh;{~_O(bfkmRsOLDs{9%CYXN;9Ei?Tk2x-6*gunI|=o}kAmBMENkH(&a zXSBm9xH;`m3b#PXu|OqhhZN;)R)_{%!S_M2yl%z&%iZ9eqIiFVXYhUxH;4C5?wmx^ zx`9f<`!3c+B>NaL?7wn)#g+wonu;m7G%g4D=S|>!72%oWgXER(X{5pGx`@GgZC;sdNc>AE3XudGBCzyFBDm=1Q5m^A)g{4;vkeEmRfc^ND@mAw?pJM_=ep+mn0YOieC4C_)< zo4%5gn=>%vhbiI#YWlnqCDx0I_&P;AQ4!B0v4s`_=hswt`Wh=K>n=q+TM<736ch}S z_%TJiO%cx{af>1@P{hAb#0Qf2YDN5%BHpqS#8VXUAVqvDP~iLlJjSX}#4jr1QWF16 z5x@Nfsq!)u@uMUjtBCJX#OuM$`V_$qZT5g7ZW96HuOjh4MZ8K8Q%~y|Mcko?zm(hf zG7`VuEv*q%#P^`Yx=9hwP{cL7wLQZw8-)t?-Ka3TkN!ND&R9#)(eZD7?$jCfW5s1W zO6@vU^}N0eVrtXhhmDOtl=Y8Q^>2;Wf02)|yglEb{-{3d=YAYAH=S>o?;36Y?kSlT zj-`G1d)66zh1|w(#$L+aVY9&J^G+CXgt$W5PkAfY6&Z#|^ApOz?*4vzxA+fl#gO!^ z)pyW;Djl5n5pToy7-o;L=95#5HM{y7DeH|*dm=-@V6bM8zIO|nW@5ZP?Q0!B9?JWg zM@%=`#y`M+@X|2fj|@UHeF?z&?QVfHc~6`7b^he^Z)s{SO!U zmK0{-EjTvU4m8Zd^z~Sna4R<5-Mnue4~NfGTlQ<|7@M{pVwfM~zQ|(`cmJJy`-jYR z!ow`g2*dSEo)Wi;pGEAx)0%`XRer$s?n_4;`Hlv&@%Ck8>&Yo_vVY6)jbsg!{hNck z+O~Y#)-`I$#H@kV-Op3r2I~yk(_76ns=3yB6;eI^@qOe)lFKX5^4@_FeaoBk-^)u) zF7H`s&kfc^N#*U__+Q(1y+oZp+w*KKFD0qGD|^cmpUY7`he-774j!&BzX`{xbJ*0g z{q=)y01o$I3vu7!9|B+U4>`y`9hUErL9FO!jy&g`TGO2(ckt6 z0vMjKwVyHg!8rcPgAjU%ZyMrpZ{?@ZC9P+>7;*Gw+@VMcwicn1e@GE@sirP(vp{rt z6HnA-q%tFIx~e*IysA1IH~)|k{vjM^X$FyIAxxNrC$lh{($NTNeAzbq8cMV??6MKl zEC|LuuN!yh@s(GPX6o@O3q+5X@kBlD5+3zw#eh+Dd>$!cdFSKiA9AABBS@s^aWbBu zhuwt08n=H1w4>am)Hjy51~=D!k^2W0h}>K8B=&2$!vIt6?oXuZ&jH5erb{*2KY-OB z_Zy^V@%W(5?}W^k-6K4ucw;*HPhi!yExT8A%gpUU!jB~g-%CWYhIZlr-|$aUe0Z&@ zPU>LRD*$X&VTiWv+UsvW3Vq&YRkiIJa`FB~Wony|vian_TXMVjMgfs?%pf@ngp*vH z^V^=u_PnQ@u)e5&%GO(Ph;9H}uQ;|4uO@J~A%Y`|N3UmWz>{GMbAbNSf!@uuQLr>1qB~fZz0B~-O46?<+DHfZ|XV}OPA(R6E+lO z(?0pV2-HhSu@6!ld@1%|_0%uL?vE$TdynFP2pJ%RK7C7y&*c+2*;8__x1>3j5}=^Z zehS^7(J03+S~1avd6AafYp&uBQ0Jda;-zXbqVYpLG5CPWr>n4mXY#y z^x{C<3n|u%^bLN`!pdBWKc)Bs!?$23-r5Q7p80ITwAJ)@bU?q~iS>_Q7$KM1mTtx1 zhflJfQ1v!ot#6-3TPZ}|yX-E^(wIA|>96MYC-LeO=NUmmd{mk(9KAD*9Z}rzZ-4tK z@QVqp_%;*HOq>li6Z}s`vIuN*!TyD zzgkKA6Qd5dK)li-t~8!C(b5*OR*RPAqcr_C@R{EV*O@HOr?lggw1|>cM0`L=E9gtw z09V>`sHmm+S!;hvYkMYrCJdZ#o*hNwW8CtUYY>kiq+yQRbuk1vZnp%U0V3sgmjY1Z z5?x`Xv;REqy2M+L-+po&(7vTtz3w%=>+$uhEAMS@y%&4cTbfWW(_3$tcX*@&u*@#c ze8&85y4s8~cf*6Lmr6SiW6N~2W#|~!pz&zfKTuNzjW3wH$3}i4Dg4vcAK6nN0xoZo z;_woRtgDG%r0`#>vGEx3^NH8{cHi7267L}Xd`gU_-9)x328rv7634kcxG~;?^H|HE z{qW9isJFU6NgJv{VKK|oDJ@^&Pg3|i;(O3ftNB|T(7H{$yYDxYEhhoh5` zC~gRbu-f#8%?|FxM$$*m%EVVp7ro0Yq3yX;^Q_F?{AAq|y&_=53K63D zU5y*X!V`_QwU~e3j_iM~-7X@6zH@sCQ0r|~|EXota&0Sk6D}pfMZS?@#M(Mte7@lE z#gtfKgQEPo!UTaSQJA3$wffS>Sna%epKum;y?L5BWbSqrd2QQf z7}4|7jS)ZVl?oZiVa(0OhRGRF6mJ)HrTT{q#QXZEv0n4H|1%Z1)wgao`9JLI_Fs7@ z=P0b-UVDr^j-z;7+~n~1PM48_7Ow3InKN+&W9W z_7MmGy8l9L-{ST0E7-T0;D30atSfN&>&o z<@pvAS3FB-JZe=M4$lVgoC}`i;8{+dSk`)Y-VG)mJ&e1H2W$U@g=ph=M-_eYCDGw};gi(cAGp~Vj%8Owc<$3x+xMUT@* z`y=YIO@rtbZZd?;J=Rua+u1FV=5tz{kMy=Z)!{?^I(Y6ue8hegiVJ_i z-=*>C_K^;~5xcZpDSv_pEi8{qENsx?-hRYwi^6id4Lm!A-xSR+(>}zJ1AYO;@1xah z+QNW`UykN?jfY>rj^d5C;`b>HMn7cRM**kX<-juOJy-JiO!a&gpMQyG>jr3QEh851g#!8uocJn`y%-HBMhuG{)k{a~o?G&*Yt|f;TC_8@9ggsB)k4a3iW3Y9w3zzQW*Gqf4v^7=$=16Pu`6=a z(IgYUS3$P+$?y=*X0on7VVcqLY~&csy*onqX^hwcOrm)DJdD%fSBXz$7}2TLmlHDr zX_5X#x&IEETOhsDf4JWNkEP{(ANkf(bOP$}N9rN%?|kc0!` zNLB-P@vcn4!2qMc!r^^6&%|@^NMiXFfL78)xqm%pXBsi+iE7?3BI!f3^oa4fbA z3B8U{{tK#Bq>pPZ#!UuN%QI24Tv}c`!2mj(< z<9MxMBHiG3CW7|U$R;ozLj~XZ+vgzvL%!98s>l+IXjGcjylx{AW}86FJX1|dnB-@Gmz zZGi%TDCuP(yfg=rf{>K2Bt^11l|dyC!=8dcGr|Qu{&xN|5;Uk>#Qaf-Q51#c5W_|{ z%Ky{UZ3%B`?b3Az!MMW>|37P*2F^+ONi`|lygFE_Z7lUX{2q#)t zU?BE%9K@squRjkn+P=mYA`I-98RlD7_r1D8^sz4JfNrD1uTMQlxZ4LaKV-FEsA`|4 zF#x;}#sbf3EhO9VpFYO2a4~(irv^$a&&9f=7+lzz@4OR!FJQ;`o4h9XnL3 z(O{2HR-YTzNdK+`g<%>)z3uzEvgwgoOS&S`=s9W<6)+Ed@;}M!9vEq6Im+fdAOZ0i!$-{#)q(Z zDV8>S?e~R{bUw5eVowls>3me9J8WKvG=00yn28N2y7Jz`Gi){?{oZNMmdu)T(vMNS z`tkaC*o@M>!{$HifV)mG+k(PZjY-vaV4{ZRg&2d|?MsDqJE~$3np?w6OGBnrZ0=x& znye00{sXg^&>7aYY%XCl1B$6di)Ie3Y?_lo&KB7=X_& zaJES{JNW0VP_!62PY*zr>~~~~tiyQlia*K2%H~yy3BGIS8TXJFq{I~@IT2q@!T8Hi zqB!u4=v7%=xQF@U2HU+N-w8#VOCU1H??TZ$Lqxu-MG8Ost_3Ue>y2c_OBq>Ck=+0( z5FZ0p5%|t=u7Tm)Huln1+h54?PHbgc+WI05xqsX};ayy#{Rti6eWMzsZGhQN6 zrSA~Y0}T5w6ZYWs0i`Jq#dk1J6fW4{Z=a;4NxD7I3pa=-H(n4=xj7<4k%3hgN{D7^0+4~#S+O1b7seaU&rV>`lBRLp znvOrp^68%y9hGBU{`$w88rLbfld^z%PEhoBy##!eh}f-NBymirK|;IK~~}~I_rHv|HFmlQaA&JY*Kq73TJl$9}v6~PVIY$kM9{jTo{z{eAM%? zUbt7eWDieCmnB&MNb(;oX6h~;#C%ekGsYBOF93{!HU9P)GSse8rO{%P>Jc6-#+n7o z1%#?}u*qaYv2ZEx2oz)~y%sA9%3^@rc8D8ar3#|OL00He74pFi2_2GsaLWfyxUEu! zCFIu4=U7p>EC$H!D$Pv_qQ&LpwnbIIDyj&18%7|w%>YigZB~Vdih78uRe~%A$nYr5 zut(@(t-2bU7$&uVCz3P_EAVVVneg1jdsJoYU@Ide*0Bs&XFWj92Q!L8Jt>aHSWJ+e zZkV!8P^rA}q_eH9y*Iu*h%FVKtjaI*ajb<+D?FUriM>|`JY@vt9Gsp-L}<9K|Ei;g%HzN7&5PyAHQUo z5Oe-HS%@#o>Is>HvO<`9*h;82F{@`i?~$yGPz((jLI~J`5?NIbL&6`5U9W;C-lqG zFC|OwQ1WOkIiHe=rDT#*7!wSt6(k^4Xz~$Sat^M@EhXi8F$$qZ`1QX;c8vYdcap=6$LrOhRjEb?YJHkW9d8<-=v0!!gR zkpGYEdpip~cV07g{t30$LQaO(19~Yd{eeP!ZOkB6E31`7)LRmWov5Bv#a!2z3#H zsETZ%Mce3|Axv7V&kKr8Kxr#L?xf)NZ16MzEz5Vjz+iMtQ%@*cqNsqI;o@XjB6RA_ z#>XlC_7&6tX7|v>E=UPQr)BL57i{r&+=~>DssG_>De*@foZ$C?PrHpfaUNo4L@|4| zpF$-z0vp3qIfTmAP+e0RM$@n|4V21zv25V_9xAl3@}WxdHhde;dUcr+8w9Zsu%_YE zEZ~B}*?(g33{U-IDf}i~KcMT+VEt^T{(R)dz3SsfYhC$&r~I>YeV?wM&-&?3{l{T; zulkvu`h!^iAYFfpZsSbWXHXE!`}MA`+Ar=zs*TvL%UB&Xm6Iu7u{TI&FU`9KqoWq%^JEG$ea{_Jgz<_sny5f-0=KQ ztB=crl)6GoUBx@HW2{1UD6z;C^df>{o4rlURmdc@3b`LN@l}Y< zb|99#d5PF3Tk%B6J#tq|4!s&#G?3kTwdw%9jG*uoukbHJQK1N#i^&Qqa51uY3E45u zev0u&ErdUe=Md&vXcq{0DJ_=aiCWO_ot1}Plsq^bETm<1f)G+m@| z-I|VTl9?JO>gzR0NaH$%PSzyj1m&zr{Oys?@Ve{>AngnAB>NjO-kbpj*T}~D1d}O4 zU6BgaYtUb^{U62`w~R1T3+_E({}zG7I`DVYSO)JxyuT&|qfHo7ICd03fpsiSs&g+3 zde}ShZ87!!r2dIzP}DzMWg>QqE%SuiOOSt*l7A6;it+>2pKhiswSWw%7g!bemTiHM>8W8wZ&GQtewGeiH9S5!X5^W>b=cp{`z_4 z{^9pzZ4tcX;HlOspePRq_PM=RpylDbK<_5o@>@=O3(-cvI~991nBmyN{5sQZcbytfF|h&$o~ zr(J=c4kgsQVL$c02VWiZ55H3;FZ&dioAe$&`q`w%k5H=Yn*cBy?0MVJ zmhO7qmH!Up2cf*)>Oy^-1aX$p`c)ZN0J*^)6qk>KC}@l&1DQoqN6!D5_O>sb{zAEu zuSg^-VAQbp0}1j&DPM+)s=OQl+eta?d%nOyZ2!ZlS*ol{v)^T(i2`lE$j6QZ<#R5O zJjg!QD<8RvDi7%L8TQ}7z#Z35P`n$D>>kmpxBms%*XsQ_#<@O*_gMcY%!s$2u78NGpKfiqUNztROh7&7R0B0ZO*54;Sy)9!2FLJ!` zc|MSC|9av@h8ORNJAZ~lD|)&s{e*j5PQ!|W*uO?Aa(_&XMOCg0UI>Gy_cnOuN9=L* z8|jz91Vz783|trheYRsDLz6vOW zjT1|qZ^RB=Y^-@N)kyiqh^cdau_@RoW#6fTz2R7C3E}i`>|FdjL=#RHZSu!n#hH#U zjuhk==5zR}kG;4b2HfE^0p|*Ef~20AlKcxo*lvc`%LxH&92d(!UxdOik1S5Xu5V#F zD;cpVITO}1s_}3D-&B=m8$3fXDiySRL$nYN;E0lD2%Vk{O5BU^FJNF*&>)4E1`M+) z2Q0J6G90_KMBY&F5CGpqmEvdDpc>z&%L|~biX%#zOTZB?a&bhN8_4ANmf{!$#}aTf z6vw6p#j#utXGKfr%E^F!!VxPOp8Ev{l;WTKL0|$$+_8O3j$y^I92^_KajxPhFXV-( zdX1;;cFMa)nU6(}zxiq?tpMT%k3i zg5J_E&N+rZnAH^M0z)|JbZBj#ly9NymZMFXE(( zgX>&;RAo@B4fsvsgyn%XE5=E-G+k=;UaxU%Ojw_qfp+b0Z|C-v8_zwgZF!HNQ~eAY zn{Evjrh3VT4I9;QPB(%=cafTJ)LGreJu=z0!(MbDRM+bX{xmX<;K>1YX;|yNtEjT( zj?pXb2q$S}MelM=98CVfVDigSO_3t}a6B0dtSVtuiot;MjAY4?p|rZR+}@$K>?SIG zMydLD5fxlb)O}4ccciJoEej^vG9yLVOL%a~spRisnx^ zi$*U-r9ZO4EWiaC*3T@{9J94<0s8@jU{8NA_;>>kPblF)z*UUja&DnxnQEOrMuz#I zD%)v)B5KlJJ&^kv!C`#_9vT0nI6VT3C#c}~LOG8wtZ?NQfoD9_hRqShre)uZmxL;R zHj9ENM-!?rhvO7z+`abC-1=}D_C5xZB_|cQGnlu|xl z{`O41I*X}gMkqQR@|mvS4_-a+4C>SV_L%g+G+?6B;ktS|GCDmSZ`_fML1)xgjU&q> zy>ZV&t?0Iv(1xOPw5ktZ@61pyjIxBGezhQzf!aI-zijXekY5*SPz~@{soy9x!+5o* zf@&pTo2}XAD7Fs`W)<}tr96MYXR^Vw0k%Q1-2#|w;le9r?*WD7WZO+boYe(e1CP|U zM6sQu*$RbB3wmQY+B_F*%gL501K9@2b~9N;Wha1~dxW#RD+Keont6j_K3ujz@ym{? zPA6_;L4IJdgjnrlkixWuQVf!)boHTSQlnk%Qmcc>p$)QtMggo4xk}cpviG@Ck*ae8 zWJIod{T_-+@P_2&s`3glp%JoK9qrf%5bRmXi?3fKtdm4`=3)~OuK5~srR?X0)_i>;(>Oj8GB<|Juk1S{?a=Y8;A@;`l)M868B4J@a&9^faKh(s zIFU2cIa0>&SHKaqTj4Zoj?98gERa7$r)SHV)l*U-iRU%G#DjbXAd1YwL{bu^VS<2p8>ae78s+Y<~(H8axxB^ z&lQ`S;gBF#FW33?A;i%g#pX6R^pw~{d_4?F2@ZaC_@=~CtC&n6A!%2+_ZLRWXa3`q zpy-MI#VIs~X-2FVUksX=&Lf%~ha%l5?sy|IG1T@A(v9aKJZ!!$#}X%Un+qpXInmAF zL|0;c(#|iu@S7qhauX0f!E#J?GdS7d+}pYQ+S%a{v(P7VQl}^1xLbG&*?Cw9NWO8a zFeDBc4Dt<~|LOjdd_($1&7M!NBjk6hu()r>GYpF78^eV^{{2Zugmp?Hce;$@m8LkG zX55Mbd$~@%biNQ0e)whZFwMt_A8UIXr+8-Im%?hIp*4nCsm?qWmP@vkkT2L6n#eoI z2W@#CnN0(;+Z8i|!DBVLqhFcG_RW^9QxUP_1c1y+b!_-qi|T_!hNY z9H-|2%y`7ZG5tUo=QIy=^M(H25F0j&QU4$I?eTo0u-qGs!e%oXb*Fu?Tb~Cv&a^B-Xozm484OX6bua0C2UUR2_MTU17fdPym9`haxLPQ(jg9!NL)V^ehv zzH6u6QKo=G-cg1z-OyU^J4&`bx1A)8;ox94&Y{4m_|9l4Nxd&9|AGQ{^A=i7$$=RG z$a)&G)ceWbv+j4lpQJNU;tH~d#2kP7)0`O~ag|6^uNUzzIQiS}_ey-th+;`HgN2?|^r-+{yiNG#_j zH6*IHk~>%zHVQjPWZi_bkoh;%%H#hJ?T5=Y@~XDsArm1uc5XPRqIysx>nSN z@O22m5*Qfq8??p38S*8I>is^_onF*?c*-~MkH~2Gk`SS}<;0Ylah7<^{uJ_8P;K+N zWlH{f$X`wj<+o`2<>dtA3%l=r6N!nki`5~N`3}I11R>kN8^&)IF=oY2NAe%#{7~bh zkwKRa+)ElKx&fC1+*2CYsrm5>aeonrJ%x<4kkexDxae63b zuJxMC0x}d0bE{`4b~Gbkc-DTc9A?}jH_Sm<)||^}6Y_Y>Lq>EE-u{%Pt3b{@_DdKr zo%sR3ww1ADpq{gA{$s$-zOY0pZjDKHqMgcqU-s66*yojGK+2_aR8C>ny5&VVEaaBa zr2#oqsrQGAN(3))-5%}4E$Go8ctm0>P&W#jiQG>v6h4fI2*oer1*PUwD0~>nFbT}{ z;DwJ``Pu{Gc*&M1!n>-r?~>Oav`4ZUDOdKW$@Eyayf9=e=C!Ro}WOzi|!cbH$w9ZTBmD%LZFjR?=-JQfqkrpAN8N!z!#HSz}5ag zyuA&4Tt)T&pF#^!zzs+-APb1y z7W4grSikbssHpfAuqyB^PbJXO6h({`q=3)>0{2o%D+sL!^#A^xnY#~ZTEO4y_s#!y%EvJp?!sb*Xf`t{YKKsvqr(>Zcs;@0QD>07s%%Y_PcgFPHx(U*4cs|<0x+T-=Uj_E0mSuUnmAqJSDmt^a5RtBk#J8L>Gu_W&7__rMXR$P zGo^zu^`Er(p$z+UX+9=2u^LQk;@r4Bc_t+@WRBJBL~y)Fq#b2RZhpN7`w2^v2TO79 z!GdbM2P>>e!}AOo{ASR*UA;?~NiOK#!U z+C)9Ea~pfMu~%DmX@j-Vp=?fYaYDE5lLvskZNW8Tew3zzqIElv2;9kM%qra|| zQamjBvKHgESlqJNb}njBNgAJ;(Q0Op=q3$!Qinn9Qe(XsJ)!BCBn>c^w24gd+&}6I zj+G0pwp8ZpFZqIbpX6+hsGrfTVO2e(#8j4N5Q>o~-lpp{wzm7qrA~%Fov%hJtcn2x zKp32+#c{T)4$$*{-xjwr-~*kYjanG=)^pYyVGbm68rh#kLap;Grw?T?u?PK{cXa&* zCrOog{53SfN#oHwU1c#HhrW7lHK~pcu63cmZkYd4seO3OJZpH5te~p8mnS}4=(Cuf zHO;-lxw+?nBb@Jwp<$|LB@Ct?BMQpw*9bmh1o4SaU|LMMLTL)6M2pFw%CEjzB{{-I zKonOO&jc{^8Ty*&2QE$B0!gpb=vV*>*N;R8S%z)7z9or@T-QC-oM2WCTs`3G<++z{ z$#dD@foP#aGep+c^SD1Dqh%{b>7J~>I78RVRCEpfFwW#$WSJ(mdOzq8n8m4BJ_{eC z4rIouH*)&{g=^1ZI;zY^Gmo_+7rxPu37&Viz;cYk{aQxeL|4=-8ixQl2ce`JzHRjL z4~l*}4na;74yhLl3~)q)9=hNatHWBBWonA2B@)uY02j4|fPYZz9Z7}pZP9e9M8)frkv%o@c~xpv~)1pHmVKjxu_3~xMbJ^2VbDr(UUFRCj8mpq#SsA zcr?6M>leJE_KuEJMTYfK9LV#tqN5kwFmYqOE8x?tu4J`xMYn^kbfsAtoIkLbl35>9 ztwiUAdL=2K9^xmC)${4+7_atK_t!lY0mvpiDz(AAs1t4@JrfZ0Pf-)dC`WISBIrQ& z;uO0uekiIVKDpVRt0-kCtNZO!vN_G!hUl(ovk#YrnDKN4kluCPyGE=~q17nW-J%(|78Vv??MD%a_ZzV#LYWB`3Y;0q3#I-trTk)k9MvJ7{1QKSuGX8V$|}sX z{WDS6WaH-sm#un%pWMO%Rr?XuP>cwcC@)k6hN@8N4{|e$`C*>4x|3hdgIm&17tt8l z8*a5_V;RgZr3EVC>mjVei5t$3`QoVzYkD@oTMq?Fb2F0#DUin0U^ zPjj(;+aBUP8necTm0E5eOk^q9GGbGPU}Nh=y5zphXA-|!6`t`BwgSOAS0z!iBbYvNh64`@ zN84tCZU=ZsuR%5fdAo;n8Du?>NgmQ-kf(vHKi%PJ0FrJ~o<}@nOts|XM$W(TkYPdO zY5@CR4;wO=eUWgL2jzV>MFIy6rrp()(-#jHdO*s2B>-m_0LD;(s#xKba>FiKz6of} z7t`&4rMKB1fj(^Em#+{~ypKemmO)N@ihZJ=And}DPxO0?aoc}R*yc(T@#r(`aCLDH z?f)fg!;XRI8EtTkxndy&lIn*GAts&G>97-u=PEVesH=Y1q9 zmDBy^kqOL(Opwo0M`iz0h29NA2D262+6kZhE^Q=wN6bI={ipCXAdka^U-x0Y9oP64 z9Jd5GZV7?#d*zlmxY<8Sas$DQjcBcnU@O!n?(2`q{h|J@$R@f7rizLro^R()`PEd zAD!LrdW}h>j0=ga?s?T*t^AruHwaexESuHl$!I9=vt=7g|JZBkKfRis6ygUBu$^FR zGIw(ANG!!0FaeGS&(ivuurDxMt&PQ5n{X`~(mI-F#2xpgdZaYH zFSG{FO0L)*S&zTlWT(s_7TiBNsWrhN>$_f8KRgay!eq>jetql;YoZ* zs6JdVD+#u%nue7i)AU{{$Pxz>{aU6bZ6y|uM!9O|40~`&vvOc-1q?P@jlbNij1{v| zU~^xL*?AVD4qHy-#w@otA~@U&On9(#g+H82m;gGf0&;Y!cYI3ydCIPsm7|ITE{_Lk zwpbKQ+3V@>N`xm)dUcP{Ya64KkLR*LHJ-mlZOEGD#~ ze~3q_e7SvDtg3feo?S0*YIhIr^M7peLQ@tWYDCV67r-> z$2=+3)~s@MlPk7rMX^_G8gNzeRESEotg60hS zQr!v_GD~?8tT8azIY_RuK}o4mm9it58Vzs7JZ(@49W-WmSw1C9*eH=%EdXdGI{K4f z*YONmmEoO9S9zSNezhK9zk%qq7XNO_LUQUqm1FBNi*`z+{(V}wWzSf_B&mhWA_#88(QF^Urw5kU?b9r#vKY5Sjh&7v!R~Qdw+9*$|J1Y}>NLz_&2_u!7#% z8Eh)szkxFanYYZ&YoSK6h15aOam;+IXC=wvrBzW(o=6RtYY_`d#@2aSQvIct3$GHej_?8zQ7WDq%G$9PEIAd-h848ky> zv&z2G{N3=AWOG#cNn!WrW!@Ahsrv8x^2|AQbp5MG+Z83>B9(K%*^YjCS7+O^OsUj0 z8$99o7caZJl^Ex4uKa=;<=EtwZ5({D!K=^V|AB*~m@~Uvo=Y4A+k%o@Q7;oSnnb^B{#;Oo>4=A}D1-k439>%*(91S^~6Gm@`x5Y)h3 zG;;mCOuB!0z3Zar8>ChIp=!iQ5U>5I?}wNm%;J; z@?g#R!%iV%Xw(>^nshKmxuI#=ru2+DwvHz*{oc-sv%QL!!Fd_SAiJe6VEDMr4xF5< z!-<*dbLrBzQgna2c@&2kF%#@uv4fC2&Hf5eL_+OFD}d_O?iY_^UY%aYX&03WqGI)gB~tRMejrUghYx)+4MfB{X7vlv?ZYWDE=*JFAe1K~kzIlKi z{$!txXG)(Z*!NOm!HW$D@z{fM@CS6v6(^o_mIhMx^qp3I>?5mhe-N_z%!Oz%4vXInHLJV_Kc-=#b&;E`8sdDR$%`;zHnOI3k85n4f2RzK}QyCk`2fjzRmf zxHxB#j#Mo?`%%N)Yq&QbWo^iTyBFLzr5!`ycERxHE%E%pOfY|lj~CSc)T(pXVO<=5 z?_8X-#6I<#Wr%Myaj|+^@dbI6DjL{-8V!+QzE!o1ib$X8=q!fLFmxn$^u_sOj?O4_ zh78A?)wcFhY*RIETnx+f&Hi4&>17aGK$Vwmht>i=!`*UH3;gUAyMu4 z$4pM@<~)lQxCda@1}xRDnwPruOls46KOXSM|4fx)iINNlMN$ut#p-jY;?~b6w#y* zV-z=Xu2G98+AJ7ETZ|}&t$vY?7OP)|=n!A&V0+myG#!hqna7ZdQA}^|_u!fP;?3zE3-r7`gc*i=5$toRx!|@aWHx8x^^n zC)b=PJaVun*W=0c@@q>>FU%_UCUP8fjQW1;SS@k`rcP}>CqgP$Y#}t{JQ#9_EVg$N zEsDUT=3U0KF=f6=E+~DY#B#BP<$BoVqbW!yJZ$$;CE#v=N75q+=k<`H` z)hMfCQ^60;a3cq0G)@JZK5C8i;N9f=w^VTYP)~9T6?`cT_bO?e3br$Q%PRN+^8H&X zc>W=-)eVz;73z5~75r!4Y9^j)6>PIkSp~1~O|Da^H>`pef5;JSiHSBFQB?4wo+wjJ zSq0m{%uWUW$&*WZazaoYshC&={}U_EdQ_@YUEF2lP{F^#G820>%?x`LtUmQB_{TEb z-n0rn?!BJe7AiRD$!UTa^D0>V=u~jwB0O1qJ)GwaL)e{QX-4nN zfIFvzMwde{J7Q+#k`$17oyb0wlb?1X;a4_Dzuj>N}X^5KebnLC#x9Xyf_ z9&$ftLz?X`s@nRhYn5RI`I0*PM_c@Dn_PS|j%{em-HDsO!SZ3?vPDZ%jVXM!pl)qinV%NiZ5U0`)a_1z9@ zilv&a^0uQ=XT1GY<}_H@SF$ouc#?U#tjp^i*0L@KYcE)xIsGq_dEL0i=@KJu(~;kY zWLy}?(uw zMIw`SXLNdcp|PdvM?w6|>!Zgx+kNBGq_V;KRg397EU^nGSQ&cY}7tveA%X%tra*? zGj$9#Z0u{A9km8&1$h|tJlNd=U-HzrltACTcch@kj`xnVQJdqb8LEjjyVmDKEh&u7 zxPC6yea(WEjcYi03~rvyWKd&mr6UJ5J`L#TF>13(mFhE8P@6!p`?YluOnHKs*ZZ{i zW~Dtr>2_!DVr-asT|P5qAP=J931_MKmGMzbaHIGL5hkH88hI3+dFOqpfZ%5({467`#g@U<5_QRt%BO}^G zFvP{F!nG@@MsdL?SvyNV8{-G9YYK9I)p%y&f(5G$c!knT126HcVj5KZL#MoI7Ch2P z`7dR)1xtl66WpjmnGr+56NCJ^Ix54kgr+3gRI)Z_{x+tz$)Hy#TSYzZ<4H0VDhy&L zIB6<8(#g76iosGt7~H6$&=ey5WlBFtmT5|^ORwc`}eU?~^ z2?5lk%q8zthr6y(s3uq{Y%o>Dp{BxRYD@DxLa<91A=sBFv>HJd6DeMiBf)5PD~D)~ z`7uU6`oPHoA@SY0U?I;Yd86cmxG+Opcpxq;`m?6`(8+>cp*{>DBq324HugG0y?8~Q zG^5|AOrqc7>C>s+nqM$PLFm_>=9+Z$g&g|A1ASr9pA)4)0gGPf77PQ26^pFE0tDPf zfuJsY@_=M*%kT-?HaonW(dkZf0~;AsNrtS6v9aV(@<|OCP6nf-eT(pk$)m>Km{Dc{ zEm7DxCLIcf#*@sN0sT!}K`#MLf&&{MUJgu}jr7;ZC(?!#(uQDs_{8K=r0d{;!~xYl zbAR9Jdch#wpkG}Z^K-0vk(MAN0W!TREf$1E<N{IMF@&dN4^O1lqBT%FBzuM%9r!6hE z=g-p+>F_OAf9FVsxG=>1-K`QLeyDG`Dk#Ur$c&G!EbUb)Ef*%W9JRmvodR8M#<_`H zkJ2zZ^K}{`i{IuNj|1ZbJFqbncY2>Pi~bP#)Of=TeWL_@VbdR@K!o$k&v~Xf+A(O) zPWkh?h}ZCw3lvndogSyLUzON=7emrQ==xxflwQ3rP^6K2?3?oZYD)*Z*Fra6C^_4- zx9-#G!jV;I{o-`Jth}pRY;*3J2jB;spQCePy`>T{r@fVPEE9gc)V{ayF z(JF1wF<-nFfW^Y^+rwpd3GGdJ5!KKV5&5r~(g{sNncy0`V@^Z_B;C-t!OSR|$==_* zf$HFc&S4)kui!S1K86kneS^=kD8mxUV1^CDi(-WJB&jc9aCVlS3lB||Q;WHj( z3?CNC7N2Q}$_=9@+iiix5Hx$7%%AN|#2wq&F+`D+FET2;t(?s=)wL;xk111^&$L>2 z#|-c4xUOlBm*ef*n+Px}AV`s%FS5amiFS|GLD@$`j$WT*lZ2|hX?Hu?Pt0XxpIXpFL~w2)^TO4BJN3dquH2}gnSc}-)Yu$t)Z zph`hx%!q8TJmx%Roby<9xKyU}-;2rZs12zc)HXovYMyOm9Z&IW+tb`f=4p}25jv3C z1Su8H1c;mZU>`@x&^S-A>YOP^%=Ab8AdTiR>bkX=)U!dVbr?(t->%51WHA09f%isx zmxgocdpjdzJJ^86zoa%oD8{4{g&U{}O8yQVcP5bov3C-$CPkWF^t7pGRKKX3mHg_@ zSh0nZsHPdQ4P>!-Cgi~!n>#C{82KGZk#bhEDj`y1WEClu-C`kT3lH%dyLeJkUq-5) z2m3JRy(IZoA)_5BkxCou_aa54>NFrBrLrQWqWW{K%8fG{z8$l$g=|KuS><41Dp5Fs zL{AKn?Z}B(j}beR6cI}*GsIL{#8kLU%mhyKQc6Yj;T`@k=3*BxqnB2qR+!q$T(mE1 z{E2DMthk1Ucy<~>$O?(b3P*+P5RW38Q>wEO7BRU)&FynDvOPu?%WQ`11CtZ`w8o#I zCbBjFB-QV$F%6uhA+o}uKUgbzd7(s$i7se{NfCIVdzEx)4~#ZWeQySHA~~%cz_f8{ zz{8Tl;=cy?s)yBinB9NiVPhVjzBb5s*s#Ie{RakWkF5_Z1pBTBDA zdT-G~^i8%RpF9{Ib~9-c`m57Xv5dei{ngeMnCQ&g3H;TANc}hb)hFKNscG)Pr86#+ z!-*wNax4C7-qGBkqHn@qJ^bC|-rOMm8}ov@89uPbH?7S`>UhA&9CRL z4!g$py2j`A^MB{Bo+DYC&|iJ^{pC*IroXz5e3e<{P57(V?C(iyKB@6nkMN}Bx=8r( zF(l7uE5$7;{^|!k=`kUAGydvhNl&^S>^1)C#Z`ikbfg>jfwbaK7KO2i;2iQ*W}P?T zukI0(ZuX=l$eMTLuM+)zL;k9w#N}CN!WiYm{_3A_87q?yzGIgsj=y?QqlW zrJ`@fU)_BdPh8VS?6{Ww)qyU~!BOL%p|>U9ac`TWYL@>tw*q8T+x8 z$9@Yo>Z0Sik7(lQNM_lGXK_JWsu||G@3&Ex!{Viy2MLHP1c>Irp!qDj52}`G?oqTn zs9maI1xR)_`BE18Gc$WEQAojPsZ$F^T?WS#^h@_Da6P-BT1y z1zOb?Y4v2H_4f&uY8H~WeDda&OEtGGhL-VaV2CG(>!-X_gX43VF|D#xv({R;z~%N~ zJiFpzf~A^=t--e$%Kv|sYD#p5J4VM@(iJVL31x)(m|;-0T%#q8dea^^TWw=Yd_tW$ z!E(*-=^Ud{tuQUlzrUyUa@BH;mNc9(zPqP3CVo$>CMQ^~*(Ih{ts`x5XeX9d;jNdQkqZuCs0>kg zNYabW9)Eoe_z6mDAGF*fO5VYIg^NVF21P{b)Xb8L3@Ppga3s2qv&vAKZvT{2vh_9J z6Z%tVChb5W{Og8rzYj=(x(vF=s`^?Ip^gHFs$Ke`T{p1SddZpKzttk$v;O!7S5JMn zxUc)JQuoQT&>!CPe#KDycYyN7g~fgGXhS>tnU!_*6`j#79REykZQcm2j}n%-u8PiA zjm~r7ryZSzWOOkGg%3O(m5%P?OgrIUEc{iW3%E(sJ91)Phd=jDY_Snp;oCIPfp7KU z)9-V9QwI2!tiJwbOq8CYl5srK7Im%P>J`0Iw+)j=-8QP$T8-%IqT z$)bBmQ`qatDqXRL%Ed2E=|qzaN1kNTYy>QwYkd1{2v%1 z(TiHGlrFMT-W8QEXzzsYqFbxxX?Gu{>hI6{`-;_{ZQbFo4t9L&LAEBo_bn%>JHrmo zE7vDqRUacsYm#y}hm5}W$f?huy^|Q-Q0Bk-(Ud`@KL6Za{NymRa6exkWtjNZIO&1t z6k}^#A6r^BzA`%#%@JRdWD{RaQNdS$BX)%1py)R%wIWAto_=Ha!-E_@lz|S-(V_Nf zu^K0o(b-6&w|^-APB*UpDRjZT;TI{bSe*;nNu-^y^HuAG9J}Sp;Srs=H($D3Y0=Z@ zw)h?+!Ov?N()RUsdHlt!YS~N&^ zmRY2aZv>wUKYlL)z!~4uHpCxh)UhQh-G5$FcOB=}JS09n5*_eIvBb$A-!JPR(Q>~> z+q>^X1m^%x7nv3lqFreo--iIV@27Q04fTtT2Mm983Yt2`oq|@+lO}-ZW&291ohW+w ztf^|%9i{ARD4(wJrmFZ)!U^j}3*&U*mjF5ZAx~12(W>fnNs&vBHCi<7U#gwMuLD+T zNx8qHozztDO3+-nc;G~L^3j-;Q+jVXy~o<+W|{v4wY%@DtDK&8>3J#=*)_j5URA1U zyzaR_uk=`Rxc`b+yo=hy@j$H}5=SI7OWaUbLHdT`e=o}bs?v1LGZrphOh7pm~YW=Z9wi87uY9u;$({0Pr`+}QXbc(|V>i^R8tyMv0JY}L?Y zKL?7f1+T`=r1Re&L_L4-^6%?$cazF<4+?i~hWEWkb=CPy6b29%#wx6fegs?Mdz^|_ ztcKgFhQC4jD~9H&@IS#o7)PlfiOb_rn6e2U5sH)*^!0y-74-E##!7Fq{s*n{_4jAR z9a3F>cUOOe?Sf?7`exS~i0$L$`OVj`s{Z%ATWokLTy?;<>c865T8gG!vB|f8AJ+{Z zro6n_|8(V*s!G5BqYnc#j-um@0SHHBKJ)h6LqvPreD*0FZFi;+*86C?>Xlf84a zT0Wb-oFC{aqNtJZFnOs*x3l`_`v%_PX$*{uVi~m=>NwL))-H>?(Xa1v=yvkx`obkm z#u=r1@6>;CX-~gFrO)`Q1kCsw^To^ghNS09xc=RazslgL(h}9Dh9_67 zsTyzeS3Mc3#_u;hzJ~CJ9-lIRPxSzwY8d0I<2ky!di;V<+O!Ja?jB!#_$iOisawCj z$>c4@H%8IuHDh&wM>VWsZ~Bh=*?t0JZ`OHqPCNU}GB!YCbi-hX4gnpLoWlqI`>3<3 zcYu?Fj~cq`oATrhuYH$^g0j%yAwV?vYJP+fNUz%aN$ZMA{o?-ca(eH+s-JzbF3oiu zDCK+FsEy@RN14QxG&y~nsi2g#H|`IAPt}(_KAb1}yk1DBIHW22;$BEq#!=u9l^C=2 z&XEt${POv{${Y8O#~<$F>Wi^m#{bj(ti_&mRXm34As$XbHH2^ZBGcgB8pn^$wkN zqM@$pNk17yKfbT5Z@};QF|fDr+kF_V!ru~p*Q2JYrfa-GVSy~LE~K8W&gSz+fBbXR z_yVuLuVXLp+Pz$Av*A4)yxI~iZK0|={ITAU&_r)BT*w7@{Jd~G5i8rEuByGVpP@)g zWyBMk?|;mt`AjJl``nj5jq*$gZeG0AmG|=s7-PK-^<=c>Pv!E+P1+9}uXlD(J&^Nc zc#a`)85ks88a=@k-TcH|nc_M6{==$kMc?@QvWFDY0*}deOL(A1W}`s-W`1`Txqayw zV>H>`ZgDF$vv_mDPA-c|O?5^YsLA zq<>r=p6k(CCXcqop_Q=`qa7C7Q%58ic^<7l{W)Eo;4^u%Gse}a?*%88A8*vIfKiSelhF}{U7tCE_JqwDXg#^>ebn}&~X zC8T&Raj5V+$6Wqn&HYzt{2WAS=%y8!Df*^4611WE~0Mso>C0=!kH>R2 zTc=EJg=ezE(=ASqH;KTbj*XTrb3Go*t+z)`))p+2+uQf9WSGz%c^f9BA3w-#vzLFb z=ePHGygl+Ykb&fN?2*oU)V35A*kT-fM;o9j^LYI@ z_}x3-_&8YdyK21S#=$Sxt5X>VXL+=5WE?!ju-$ST909)Caj+ja-_SUCx-woX@5*me{*P4oD!uLHA*UTvl7BZMZ{D+#%SJSlqbZ2W$$e$}{Bf-5%6N#!m7fp3 zTOL=ZRH59)d~n#`T>JdIyHMq8^wxghF`f0s=H2a{a`=3I9bou;f8E!pR>o6pmEN*h z_LEPR+XcUU`J2&OWqx1o%KLe?N@-C(6)mA96~2tq6UR#b!Edi8K4F;Lt)OMUWea=o z+NZbF6JGB;>-p^G%a`AwmT6lPQ%6~?jJE>U!<$&|#QMSGyU647`r&^ZzGNAnW%q~n zm94(%Rrq4P;O)IV3?FyVRwkg&I-F)fmhC-9K&L4Bpu#XyQS^W43Ljtda`8XtuUfsZ zBj{@6;%Z9zd9rGXjIF#==$$J2e-oKCti1m<-S(Y67yf1sDF^dLG^50J5NOT6J?Ifv zud4Cn<$jgvLD@lPf}%X&wmyoEGTxQ_kybygcz^OM9$jykbTv}CrrX#qq(&_=r@ldr zCh#W{Dvv+;_*838qbr@Fw4Y?nkBja#CkDZ+%xk_qi>0R|ui+0t5ohpJVXx{FcbWMv zFRiKYw=94#*yB6G<7)^% zc#b|l&OeRi)%%kt8$SHW#U7o~L8rJ5=vMO+qZ{Tqx*WbU*vtLbM{6Wc-k*GVH?i;f zraXDW6G7=+PB0Dus*+D2=1*Q{T~Wr@?eY2Ql?>m!roOPjAyYa)FDZ0y|pL6zxP z9erhK6~9$qHfz{v5%y*D5-oC|tZwzoE0yJzC7{zHQZky2Ay|d~W!l^8+H0SY_gQ*Y7YMr(dB1*Rv zX*HTgxDVqp!F5u^s>yn)TGgNQN9CKn&fsSnxZ=t&YLSocj;f!Eh(`}}XU z{30ju{9(sqyx#mV_eKffMDj7gJQdua%vMk7U9Y!I@4mj?UI!&N&SH6=Sbu)+x0QU= ze4k)G`;Y6bKCzsR*I#e7WYcdZPo(E1PgQ#KQb)|S-|IP>tYiJ58QZqF^UDzIWe94$ z{sG3W-R~xSkyqb&eIXM-V%6uzt1=&G13eY@@0MFxw>d1%TM_fa>&L3Eg)_kqq^vYJ z9;%&Jk)!JGe4&6^H_fOTy_2YpyPpnyS$((^`L;g){g-vWYsbH-kM6tQ8dJ;f7N^(j z!`xOiXPdRy-Jyub*&E>haYSDIJeRE1v+M_j8!dlv>2FehU-6)d`Fgwwy|Q6-Rk^Lr zm-orLmwi*QA2e^r;+5RCku{&Hnf;K{yk61YC!)XCM9;!O&yQ5Ko@L%iY2G>8r*Bi< z_8JuuiT<|jg9~lZubgk&a`_>UR@O(X{q(OyJRV<-UOu)yAD>f>vs-^sUZx7=D_h66 zIo@t9$Ju@R7rdEyW_wD<`c&m*j|@5bl@HJL$qX=(Vtw)v8b0W=daq>s{CwLGMKsSe zS@$4!XW*xTpal`8Q-5I zRiiFOxd~j>|I3K>kg}!Tc$UbGij0xdYA*jm3T03s9lIwS@u(N%<6FymfI>;N^7dyd zJzgErI@LOw%ZQ^uwdg%=pov9qfg7L;Cgju^>s$l!ahv;ifY1=_h$fRb(Fk<%a5=h9 zsT0e?dwptyA&x_gU=|>{39UC#2RV5-%IU-jXkczKhL3N&4a|a1s%^Oq%sqWlOPMLsy*4nf z)8c{ct1PRSPC(%w>*PUHj2-+cJCFUdb|U-H>EK`77^5zzIiFk80q1jbC21-k>gqbC|4onYgBNmTgrj_1-uw$VDo>!2dR{of&)M^Aa8;41OV|<`ET=w! zEcyC$+pOFLley$1HI8q#l{%ULbzKVAoXpiC+S4`M(m0DiB_46#{d^?qELfuICeC7*Pi|hYJWt*DTekbgD&9OZl+!ggrMnsA8Ir+;3f0;R_Gq`K!F`3{V zE@*|%!3*3D(2yRun|;O*k^oNqReJO0r3Zb|arXIFUfVn{JpY2}!#6{=ZYdvv!GWj4 zhaCK52R+0?mpf<|SRPzM?sxGyk#b+-;M`jB{L)=LY>~m{oyP4M^A9EyG31@YcLPMS zcILqQhPZ*tP9BtC)swVjI|$XLSwDvVnxt^|^7O!PV&Efmhw@nFGLpEzm-4Bi)v3|w zCkD<__Tt-@?&j-N=izgKtL_bmada#%a8XX_;V!@%LcI z-^LpL8ZP+yjOXvha0&R-$oXW?6nAg(4Bi<2&?lTAJTQJgWBkVOVh?WzPPN1DGAtr> z=E>aW$9)zs_!Xq~Ro!P{pV}>mnfq!-nYmAgDMK?qJ6>X&9sH1L#y%bH=Aiq+*!MnC zX6)19%l}mE=k4nB6Y__u4F>=sSzP}xcH+zvmR0mwcrHQ`%imYju1c=*_%r>M30|~@ zq=Sufq~?||s%kXb)c_E*m^B z>45~uol~fsvY?c+TR_<(0_OOI0b>+2rfkv!f53#?;Trp-LTP=Kw7eb@)982}!pV}>(xK15E3qM%+!X#@W2SWI!!Zci2_JE= z-&bJG;oS~)YX#PWEQh~w;A<=3`tS!1c4YK`HnoWNZ*rYtf_OtZwhCTpg+ptBS=#C zqlplx^9{kNhJam+lvj_3M_75;P9T8cBVleL1nM$Fu&=KHH>$X6io!aNfmz#Q*moif z>R`ign8(01EVr82giB4#6%URv{Pm>?xF88I4D0--qTJWwz7q@214HM)=6N5M+W6r_ zg(V_ZxI=|0*9(CCCE-j@yhX(KxS7#jr#p2=!j&W-f0Cngk@I6r#iNo<%!m2a&4`Qj z&KSr^RP_?>Z`5Pu$Hj9LCkq|7#wBjtHC?*IkNRv=FWOK@^)Z$qTf&R< zVU|q=hPc)EJg=!2F~OQE*3BI0AP={awKts?e&ZjnZO$Hcz2W1|Ht2ClM_vD>cO?pc z;RTbazDPb!&4vV5`BKgf8M|D~<0zaQN8FsOs?${WDfjC)^}{c!m&P^K?tiwXZrt8A zwfRjqwbS}!Yfb(33)M}%4~CYTdJ8XGZR(<`rk<;+7eCgtdFrp ze&0X#Y@RykAL}@?eV1qPx_ZGy)^PttLj8nBnkz6P@sq*|Z$LslvmVL&fD|mi!gOOUL=g2*O zM0wWPbIg!3%7Z{@kqtcW=_tJT`GZx@FEMY#@I!!C$3HT`=9!=MPCEXi`3F7f)Z$+0 zfWFYD5Zo*N<@$D7uy>8uprItMVK%`d!rKR_jqJw=vy;Z=y~XaQ{4?`#Hkixub^j~O zkRRohC)|S}rVYYabu$-In9*I|8Jtpo#EQvDwBGC_}0xlDix6it;T*) zE%qy!0v+}PnISxO)FQ>e-W+33fgLr7vI9GVcyp-Je1ivuv_nAcU5ub5h`27nOqtBbrtL=MsyL_dp!1w^N4-6_!Aow z(8y&<7fY{Y0!v93f2joca22&5(3YyE%_vj*CG(c2<|zoBxhecY>AfKBALf|`>4&$KdMoY= zKu@Y*b9#ihz~&1x#UlyRv3XMMZQy{-`Kf46Bog5+kX21QzoBm4uABmU4n*cPor8BU zbMu@={Azy{V)&KsgR_m>0=b_>=z~WU^!e>2dR!l#dZk6%{#VbN|HDyF^1>N_>Au7V zRwgd~JB7k_myL@t*ry@FGjCP>6wYLOY^6Rvp4sse!@9rP(wAvlo=tpejEe*7C(VD< znwM=$CcbTqk-zs}aXS*UqmLjRaX@PYrT3;T?WLUD=Y{*hG|!D0QUlb z(f!MLaYDg)54&EhSAiuBGo6$eT6qp5;%M@z_9(E*ppE z!dy7^j4Fe2D%WH-E{9cPpi+ExF1o>9$Ewl|zVygb<;L$A{rsQEXgU5Lp8H)y z;w6~D6nyO6u<{dRmb})ly(7F7vU+Zb4q>?HsUiA5{wWoG4nY#EHTsL5N;BS}@^4l7 z(u|$-{MwWDyct0ZpLfqM==mx4{Is4Q;yIp&r<#1TBEh^Jt*gM-RXxAGoM&0|N)`MU zRnOnzxq3b)#%D_!!Tl~cY!P=N!&NgkqnTxl65O!mi+P{q@*PvD>5<7z>gkSwbr-Zv ze>f97wKiGdU%E&HqOGG&i!XSc%O=faiDEauGI8b)q}Ap>+%X+KL7=Q;xHhTt;hy6>q^>Z<8N+&Q;qNlr*SyLAF#R*LiqB{RVqOGWOG@a9PJ&A9A<_kb)>k|1Rws#UTzyWO`6xsc#W@FR&%MW zu|a!Mxoz2QUj9!i8;`@{EknGetM6UzGK{z69ehwfc7t-O!K?2zevgBsD)$=i?jW!; zzIS;$gT(h5a~~x5!gU%5RaXrwM2||lYpG0`K199$g8I7oha=7nWWj=v2t$a(DyIC`WQuF7F@pGJyUt$1}xv)dRtCq0>NyCa=A@(x&%tdZI-1wZ)pBJ33ykw^yNue9d;+DQvQa-jd(Qtb_N)9H1GpREovkg z?F~s?;{8;lz=M@+4~Jo-gt;_`Xd3S13HDePO z|K5npotnl|%wHYqG>*TCfmSl8hRCy)+NH5fJj8aBg>-NvU_>Mx?7_1sI1?AUM(HA~ zpzvTD6Q>D>hFII$dCg`grHhr3z61daw^zpgW$44T^EveJG%`ypJ_Zs=+20-n+;=XM^^@d+Sp~^03d{1*>53>k?XtZCS{7$>hD@^}T@7j^ z2EjAoO^>SM)mwxCqmymqI=l8uVo0z$`jf%(hTl~=F(8*Z(t=>zPipgFr%6uKzI5q) z!~_Y}^?kxly{n{Ov9z-ECocXeC2Rzo=te*X6+20?A!kP&(m$NEn$^nl;V?-p+(MpZ zDL(#4jXdu{8>C5ph7BZfUsg#zzi#c|IR3$BaFqFcv`y-OH5n(Zs2 zs-t1;BH3D{Lw|OMcroLyVMPJL=l)90(u~cwBLL6y9L|9E3Zt;FALE|!7^x2NA1%9e z=#1Z&p*H~~SQNEmq&Xrp9g&@t;`c?Jc}+4{|+>EiVs)lrRBlEp@0;Rx7EjAlAu&4^4QVdugQ zS!onTVh^Sn&9@IG_Sm`Ug~XYc+o?2Kg4;lz+qcaJmL30>bQJS|yy13(JRmGL3o96A7F5POx zZbm}D@S6IE&(qU~aXuf@jFH>HDADsR>HZbXG^DeYRuB*7gARyjjIIRrGIv zE2bEcPA0WsO58br9ovd_nR9Dh9lyx9Y?(A0jPB6?YInl+GKDYDbL7B#pyJI?t}a6439%aRs0(@X5lSyW8!v1AF_#H{c!Yg9>P-|tZ1Fzqa0%m z^lH`f`_bJoe7CCS8^|-kex3&ue|>4@oQ(GK5PzkM`kzf#DIsPFxj$2m!ef);Vv}<{ zjI$Axw1ow(!r3XF6G{vzdJU0dI?=u-FIR8>PqvwtJrcX&s94V zy*-=>-f;VGA-whfqWwe(%I)u&xcxnEru`38+JD8G%JVOH-m?Aa(x>Wgeh)0HnuJW@ zGng8xgut(L496ZYGe}qLAjCd!I`|ZW;#2f6Mig87G`X~fg%_Aiu~)jJ0lG77&n60Y zKu>c}ZyLGL!)#^6B-Fl0Et%dtgB%DzINJ&<%8Jp~i|wACwi^EcQ)mkPo^5+!-a%#i zqRI{&qImc(7$G~5T=O5-!K1zGfJhXsH`E(5{mYZ#YO-Y8o}6D4`fgQ_BktGEYf}6X z*NaMa5ZWD?cWQW@A-l_r$|qe$>}i^~KDR3;I~vz{n~(j5l6SsFRp5d zfmsaf=mZ<)*8YB@k{CD_(Avw(`cD<6u89HE+2-h|O8(L;IL`F!h!xX}Lbf)(Py8vK zTAzh2So35-ABzh(ylb<;s|@$GyI7pHcsl#`*3J7&XYqV==tG&dHJQYb56B~JV8b~D zp9}M-9oD?}BT9P{P06bl+E$+b_ViM!aUuV6HQa^^ZWtKu`*mmVTxaq01~AUQjw4(% zOp5R}DVA{`806<2ohg2@nLVTU8xXo*g!bap|D*zJh)puw4QjT30g~_P3_{H<`OLJH znYQ8cKW4jDj3loY?ARU*4-9|(J^pwZWHw#OGJ%w)uA`J`m=l`P;qaMQ!7KsN{Kib_ zf>gL3B_U=wxr%;^7B}9ky)m48UuDevca@R%{i^5l{PWD%pJt1mxzrdunj@>jU4^DT zpz^9OtY-rI4!b|HrR&|kqSBRSz}N!i3GhcNUg4J|Po*i>{DV@PwNIqrG8d<00LcVA z8SAV|q>8(I98dxqrJGm%_E-)4dVMh!%4kRf(;tSyWZ6sU;*`xV@I%rjOW=9??obo* zIV`=Byn$p#*;!KHDcw5RJx_U9WrH2Vqg>u=^jh5I5By|H&Vs>un=*%rrKvz-k13zg zV@$g=rTDyFeHHtMaR+<@O9j8*YebfvsF}Sh)gXY32K~zB(QgaC;fL=xX8nq#5SuVq z>Gj4J*mC4h`}t|K_RHZRy$gU^-_5W7;syDzkBx2GVmJg)fr?&s(qSd`9?W~1&RQ(E z)7npksJ<>6K zU58c$DQv`(GF$LkNR+$}FMq z+zs!w7Ecl1m7YWbes9l+O5D}ODOVe4mtXjjPJmnv_dMlnm*X6t!-;1Vj?$E?lvFLM zR6$h@Z?U?$;Z>z~FWiazgrpGq_8_d$x_MYgb)D$MohRJlt^N=M^^5JfEG*MVC9~vB zhM!DF-NC-#o7#*yZKc}XFn!f@JgedG<9PDk@81~yXj7$gT+f_o$qM{l<$Mn>IdZ9n zMUYC2@vFabC4jATAi+lUSQ7~L`#-AdubTQzUZswtrUj;5ju&rxJW*I%Pil$iZ`p`- z`0Zwt*Jx8YqIq{!kob;rkofOvHkxNx^}tV5g;eiy9ThEh&5)$IY#k{VBtBzQ{P9ku zMUhVsWXV^0zhHwROIjX;OV2t>*xk62w5dO2BJ`aMNzDX=`{FLsMmjiiGe4ARXBmHB z^ZbUW$Sdn*#S59&HqZNDXYot|Fc&5Xl)W`^@ti5D^)Q<&6cJ-TI`7O|f9ecgp#<~R z=K1$3Dpx;mcBken-N&e+Z%Hh8W=DJ+(Uhh<9qD6!+INWn*=b=0qh|(4FTC(DPBdr2 zI*++&6LZtSHZNys!YN)um8N$6##NZ*#`dP3bin%0Db}(KN+%_w;*%!a)%-g6kD9U^ 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

wpsByYX?-uptrf8O9|CkgQ@&G);&fAeyd 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 + $ids = Cache::remember('servers', $ttl, function () { + $urls = [ + 'http://www.speedtest.net/speedtest-servers-static.php', + 'http://c.speedtest.net/speedtest-servers-static.php', + 'http://www.speedtest.net/speedtest-servers.php', + 'http://c.speedtest.net/speedtest-servers.php', + ]; + + $client = new Client([]); + + $ids = []; + foreach($urls as $url) { + try { + $response = $client->get($url); + if($response->getStatusCode() == 200) { + $data = (string) $response->getBody(); + $data = simplexml_load_string($data); + $data = SpeedtestHelper::xmlToArray($data); + $data = $data['settings']['servers']['server']; + foreach($data as $s) { + $ids[$s['attributes']['id']] = $s['attributes']; + } + } else { + continue; + } + } catch(Exception $e) { + Log::error('Speedtest server resolver error'); + Log::error($e->getMessage()); + continue; + } + } + return $ids; + }); + + if(array_key_exists($id, $ids)) { + return $ids[$id]; + } else { + return false; + } + } + + public static function xmlToArray(SimpleXMLElement $xml): array + { + $parser = function (SimpleXMLElement $xml, array $collection = []) use (&$parser) { + $nodes = $xml->children(); + $attributes = $xml->attributes(); + + if (0 !== count($attributes)) { + foreach ($attributes as $attrName => $attrValue) { + $collection['attributes'][$attrName] = strval($attrValue); + } + } + + if (0 === $nodes->count()) { + $collection['value'] = strval($xml); + return $collection; + } + + foreach ($nodes as $nodeName => $nodeValue) { + if (count($nodeValue->xpath('../' . $nodeName)) < 2) { + $collection[$nodeName] = $parser($nodeValue); + continue; + } + + $collection[$nodeName][] = $parser($nodeValue); + } + + return $collection; + }; + + return [ + $xml->getName() => $parser($xml) + ]; } public static function latest() diff --git a/changelog.json b/changelog.json index 023f60f6..8a5d3d9c 100644 --- a/changelog.json +++ b/changelog.json @@ -1,4 +1,10 @@ { + "1.5.3": [ + { + "description": "Changed speedtest client", + "link": "" + } + ], "1.5.2": [ { "description": "Updated dependencies", diff --git a/config/speedtest.php b/config/speedtest.php index 22103759..f6d46508 100644 --- a/config/speedtest.php +++ b/config/speedtest.php @@ -7,7 +7,7 @@ return [ |-------------------------------------------------------------------------- */ - 'version' => '1.5.2', + 'version' => '1.5.3', /* |--------------------------------------------------------------------------